Carbon Black EDR 로그 수집

다음에서 지원:

이 문서에서는 AWS S3를 사용하여 클라우드 및 온프레미스 환경에서 Carbon Black EDR 로그를 수집하는 방법을 설명합니다. 파서는 JSON, CSV 또는 syslog 형식 메시지에서 필드를 추출하고 정규화한 후 UDM에 매핑합니다. 네트워크 연결, 프로세스 이벤트, 파일 수정, 레지스트리 변경, IOC 조회 등 다양한 Carbon Black 이벤트 유형을 처리하여 가능한 경우 위협 인텔리전스 및 기기 정보로 데이터를 보강합니다.

시작하기 전에

다음을 확인하세요.

  • 구성된 Google SecOps 인스턴스
  • AWS IAM 및 S3에 대한 권한이 있는 액세스
  • 클라우드 또는 온프레미스 Carbon Black EDR에 대한 액세스 권한

Carbon Black EDR 온프레임 구성

온프레미스용 Amazon S3 버킷 구성

  1. 버킷 만들기 사용자 가이드에 따라 Amazon S3 버킷을 만듭니다.
  2. 나중에 사용할 수 있도록 버킷 이름리전을 저장합니다.
  3. IAM 사용자 만들기 사용자 가이드에 따라 사용자를 만듭니다.
  4. 만든 사용자를 선택합니다.
  5. 보안 사용자 인증 정보 탭을 선택합니다.
  6. 액세스 키 섹션에서 액세스 키 만들기를 클릭합니다.
  7. 사용 사례서드 파티 서비스를 선택합니다.
  8. 다음을 클릭합니다.
  9. 선택사항: 설명 태그를 추가합니다.
  10. 액세스 키 만들기를 클릭합니다.
  11. CSV 파일 다운로드를 클릭하여 나중에 사용할 수 있도록 액세스 키비밀 액세스 키를 저장합니다.
  12. 완료를 클릭합니다.
  13. 권한 탭을 선택합니다.
  14. 권한 정책 섹션에서 권한 추가를 클릭합니다.
  15. 권한 추가를 선택합니다.
  16. Attach policies directly(정책 직접 연결)를 선택합니다.
  17. AmazonS3FullAccess 정책을 검색하여 선택합니다.
  18. 다음을 클릭합니다.
  19. 권한 추가를 클릭합니다.

온프레미스 EDR 서버에 cb-event-forwarder 설치

  1. CbOpenSource 저장소가 아직 없는 경우 설치합니다.

    cd /etc/yum.repos.d
    curl -O https://opensource.carbonblack.com/release/x86_64/CbOpenSource.repo
    
  2. YUM을 사용하여 RPM을 설치합니다.

    yum install cb-event-forwarder
    
  3. EDR 7.1.0 이상을 사용하는 경우 다음 스크립트를 실행하여 EDR에 필요한 적절한 권한을 설정합니다.

    /usr/share/cb/integrations/event-forwarder/cb-edr-fix-permissions.sh
    

JSON 로그를 출력하도록 cb-event-forwarder 구성

  1. 구성 파일을 엽니다.

    sudo nano /etc/cb/integrations/event-forwarder/cb-event-forwarder.conf
    
  2. 다음 매개변수를 수정합니다.

    [event_forwarder]
    output_format=json   # Enable JSON format
    output_type=s3       # Send logs to AWS S3
    s3_bucket_name=YOUR-S3-BUCKET-NAME
    s3_region=YOUR-S3-BUCKET-NAME
    s3_access_key_id=YOUR_AWS_ACCESS_KEY
    s3_secret_access_key=YOUR_AWS_SECRET_KEY
    s3_prefix=carbonblack/edr/logs
    
  3. 키보드를 사용하여 저장하고 종료합니다.

    • Ctrl + X, Y, Enter
  4. cb-event-forwarder를 시작합니다.

    sudo systemctl enable cb-event-forwarder
    sudo systemctl restart cb-event-forwarder
    sudo systemctl status cb-event-forwarder
    

S3용 Carbon Black Cloud Event Forwarder 구성

AWS S3 버킷 만들기

  1. AWS Management Console에 로그인합니다.
  2. AWS 리전이 이벤트 전달자의 리전과 일치하는지 확인합니다.
    1. AWS 콘솔 페이지에서 리전을 찾습니다.
    2. 드롭다운을 사용하여 이벤트 전달자의 올바른 지역을 선택합니다.
    3. 다음 목록에는 각 Carbon Black EDR URL에 적용되는 AWS 리전이 나와 있습니다.
      • 'instance-alias'.my.carbonblack.io - 지역: 미국 동부 (북부 버지니아) (us-east-1)
      • 'instance-alias'.my.cbcloud.de - 리전: 유럽 (프랑크푸르트) (eu-central-1)
      • 'instance-alias'.my.cbcloud.sg 지역: 아시아 태평양 (싱가포르) (ap-southeast-1)
  3. 서비스를 선택합니다.
  4. S3 콘솔로 이동합니다.
  5. 버킷 만들기를 클릭하여 버킷 만들기 마법사를 엽니다.
    1. 버킷 이름에 버킷의 고유한 이름을 입력합니다 (예: CB-EDR).
    2. 리전이 이전에 선택한 리전으로 기본 설정되어 있는지 확인합니다.
    3. 공개 액세스 차단 기본값을 업데이트하여 공개 액세스를 허용합니다 (Google SecOps에 로그를 처리하는 데 필요).
    4. 버킷 만들기를 선택합니다.

Event Forwarder가 이벤트를 쓸 수 있도록 S3 버킷 구성

  1. IAM 사용자 만들기 사용자 가이드에 따라 사용자를 만듭니다.
  2. 만든 사용자를 선택합니다.
  3. 보안 사용자 인증 정보 탭을 선택합니다.
  4. 액세스 키 섹션에서 액세스 키 만들기를 클릭합니다.
  5. 사용 사례서드 파티 서비스를 선택합니다.
  6. 다음을 클릭합니다.
  7. 선택사항: 설명 태그를 추가합니다.
  8. 액세스 키 만들기를 클릭합니다.
  9. CSV 파일 다운로드를 클릭하여 나중에 사용할 수 있도록 액세스 키비밀 액세스 키를 저장합니다.
  10. 완료를 클릭합니다.
  11. 권한 탭을 선택합니다.
  12. 권한 정책 섹션에서 권한 추가를 클릭합니다.
  13. 권한 추가를 선택합니다.
  14. Attach policies directly(정책 직접 연결)를 선택합니다.
  15. AmazonS3FullAccess 정책을 검색합니다.
  16. 정책을 선택합니다.
  17. 다음을 클릭합니다.
  18. 권한 추가를 클릭합니다.

EDR Console에서 이벤트 전달 구성

  1. VMware Carbon Black Cloud에 로그인합니다.
  2. 이벤트 전달자 탭으로 이동합니다.
  3. 제품이 S3에 업로드할 이벤트를 사용 설정합니다.
  4. Output and Type(출력 및 유형)으로 이동하여 S3로 설정합니다.
  5. S3 버킷 이름을 <region>:<bucket-name> 형식으로 입력합니다 (예: us-east-1:cb-edr).
  6. INI 형식의 AWS 사용자 인증 정보 업로드 파일을 선택합니다.
  7. 다음은 프로필의 예입니다.

    AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
    AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
    Default region name [None]: us-east-1
    
  8. 저장을 클릭하고 서비스를 다시 시작하여 변경사항을 적용합니다.

Carbon Black EDR 로그를 수집하도록 Google SecOps에서 피드 구성

  1. SIEM 설정 > 피드로 이동합니다.
  2. 새로 추가를 클릭합니다.
  3. 피드 이름 필드에 피드 이름을 입력합니다 (예: Carbon Black EDR 로그).
  4. 소스 유형으로 Amazon S3를 선택합니다.
  5. 로그 유형으로 Carbon Black EDR을 선택합니다.
  6. 다음을 클릭합니다.
  7. 다음 입력 매개변수의 값을 지정합니다.

    • 리전: Amazon S3 버킷이 있는 리전입니다.
    • S3 URI: 버킷 URI입니다.
      • s3:/BUCKET_NAME
        • BUCKET_NAME을 버킷의 실제 이름으로 바꿉니다.
    • URI: 로그 스트림 구성 (단일 파일 | 디렉터리 | 하위 디렉터리가 포함된 디렉터리)에 따라 URI_TYPE을 선택합니다.
    • 소스 삭제 옵션: 원하는 삭제 옵션을 선택합니다.
    • 액세스 키 ID: S3 버킷에 대한 액세스 권한이 있는 사용자 액세스 키입니다.
    • 보안 비밀 액세스 키: S3 버킷에 액세스할 수 있는 사용자 보안 비밀 키입니다.
    • 애셋 네임스페이스: 애셋 네임스페이스입니다.
    • 수집 라벨: 이 피드의 이벤트에 적용할 라벨입니다.
  8. 다음을 클릭합니다.

  9. 확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.

UDM 매핑 표

로그 필드 UDM 매핑 논리
action security_result.detection_fields[?key == 'action'].value 원시 로그의 action 필드 값입니다.
cb_server intermediary.hostname 원시 로그의 cb_server 필드 값입니다.
cb_version metadata.product_version 원시 로그의 cb_version 필드 값입니다.
child_pid target.process.pid (ingress.event.childproc 이벤트의 경우) typeingress.event.childproc인 경우 원시 로그의 child_pid 필드 값입니다.
child_process_guid target.process.product_specific_process_id (ingress.event.childproc 이벤트의 경우) 'CB:': typeingress.event.childproc인 경우 원시 로그의 child_process_guid 필드 값과 연결됩니다.
child_username target.user.userid (ingress.event.childproc 이벤트의 경우) typeingress.event.childproc인 경우 원시 로그의 child_username 필드 값입니다.
childproc_guid target.process.product_specific_process_id (endpoint.event.procstart 이벤트의 경우) 'CB:': typeendpoint.event.procstart인 경우 원시 로그의 childproc_guid 필드 값과 연결됩니다.
childproc_hash.0 target.process.file.md5 (endpoint.event.procstart 이벤트의 경우) typeendpoint.event.procstart인 경우 원시 로그의 childproc_hash 배열의 첫 번째 요소입니다.
childproc_hash.1 target.process.file.sha256 (endpoint.event.procstart 이벤트의 경우) typeendpoint.event.procstart인 경우 원시 로그의 childproc_hash 배열의 두 번째 요소입니다.
childproc_name target.process.file.full_path (endpoint.event.procstart 이벤트의 경우) typeendpoint.event.procstart인 경우 원시 로그의 childproc_name 필드 값입니다.
childproc_pid target.process.pid (endpoint.event.procstart 이벤트의 경우) typeendpoint.event.procstart인 경우 원시 로그의 childproc_pid 필드 값입니다.
childproc_publisher.0.name security_result.detection_fields[?key == 'childproc_publisher_name'].value (endpoint.event.procstart 이벤트의 경우) typeendpoint.event.procstart인 경우 원시 로그의 childproc_publisher.0.name 값과 연결된 'childproc_publisher_name:'
childproc_publisher.0.state security_result.detection_fields[?key == 'childproc_publisher_state'].value (endpoint.event.procstart 이벤트의 경우) 'childproc_publisher_state:' typeendpoint.event.procstart인 경우 원시 로그의 childproc_publisher.0.state 값과 연결됩니다.
childproc_reputation security_result.detection_fields[?key == 'childproc_reputation'].value (endpoint.event.procstart 이벤트의 경우) typeendpoint.event.procstart인 경우 원시 로그의 childproc_reputation 필드 값입니다.
childproc_username target.user.userid (endpoint.event.procstart 이벤트의 경우) typeendpoint.event.procstart인 경우 원시 로그의 childproc_username 필드 값입니다.
clientIp principal.ip, principal.asset.ip 원시 로그의 clientIp 필드 값입니다.
cmdline target.process.command_line (feed.query.hit.processfeed.storage.hit.process 이벤트의 경우), additional.fields[?key == 'cmdline_*'].value.string_value (watchlist.storage.hit.process 이벤트의 경우) typefeed.query.hit.process 또는 feed.storage.hit.process인 경우 원시 로그의 cmdline 필드 값입니다. watchlist.storage.hit.process 이벤트의 경우 additional.fields에 'cmdline_*' 키로 저장됩니다.
command_line target.process.command_line (ingress.event.procstart 이벤트의 경우) typeingress.event.procstart인 경우 원시 로그의 command_line 필드 값입니다.
comms_ip intermediary.ip 원시 로그의 comms_ip 필드 값입니다.
computer_name principal.hostname, principal.asset.hostname 원시 로그의 computer_name 필드 값입니다.
crossproc_api additional.fields[?key == 'crossproc_api'].value.string_value (endpoint.event.apicall 이벤트의 경우) typeendpoint.event.apicall인 경우 원시 로그의 crossproc_api 필드 값입니다.
crossproc_guid additional.fields[?key == 'crossproc_guid'].value.string_value (endpoint.event.crossproc 이벤트의 경우) typeendpoint.event.crossproc인 경우 원시 로그의 crossproc_guid 필드 값입니다.
crossproc_hash.0 additional.fields[?key == 'crossproc_md5'].value.string_value (endpoint.event.crossproc 이벤트의 경우) typeendpoint.event.crossproc인 경우 원시 로그의 crossproc_hash 배열의 첫 번째 요소입니다.
crossproc_hash.1 additional.fields[?key == 'crossproc_sha256'].value.string_value (endpoint.event.crossproc 이벤트의 경우) typeendpoint.event.crossproc인 경우 원시 로그의 crossproc_hash 배열의 두 번째 요소입니다.
crossproc_name target.process.file.full_path (endpoint.event.crossproc 이벤트의 경우) typeendpoint.event.crossproc인 경우 원시 로그의 crossproc_name 필드 값입니다.
crossproc_publisher.0.name security_result.detection_fields[?key == 'crossproc_publisher_name'].value (endpoint.event.crossproc 이벤트의 경우) 'crossproc_publisher_name:': typeendpoint.event.crossproc인 경우 원시 로그의 crossproc_publisher.0.name 값과 연결됩니다.
crossproc_publisher.0.state security_result.detection_fields[?key == 'crossproc_publisher_state'].value (endpoint.event.crossproc 이벤트의 경우) 'crossproc_publisher_state:' typeendpoint.event.crossproc인 경우 원시 로그의 crossproc_publisher.0.state 값과 연결됩니다.
crossproc_reputation additional.fields[?key == 'crossproc_reputation'].value.string_value (endpoint.event.crossproc 이벤트의 경우) typeendpoint.event.crossproc인 경우 원시 로그의 crossproc_reputation 필드 값입니다.
crossproc_target additional.fields[?key == 'crossproc_target'].value.string_value (endpoint.event.crossproc 이벤트의 경우) typeendpoint.event.crossproc인 경우 원시 로그의 crossproc_target 필드 값입니다. 'true' 또는 'false' 문자열로 변환됩니다.

변경사항

2024-05-13

  • 'alert_url' 필드가 'metadata.url_back_to_product' UDM 필드에 매핑되었습니다.

2024-01-19

  • 매핑 전에 'filemod_hash.0' 및 'filemod_hash.1'에 대한 null 검사를 추가했습니다.

2023-12-27

  • 파싱되지 않은 로그를 파싱하기 위해 'filemod_hash.0' 및 'filemod_hash.1'을 null로 초기화했습니다.

2023-10-26

  • 파싱되지 않은 필드를 파싱하는 'gsub' 함수를 추가했습니다.

2023-10-13

  • JSON 블록을 추가하여 새 JSON 로그를 처리했습니다.
  • 'computer_name', 'parent_name', 'process_name', 'pid', 'process_path', 'md5', 'sha256', 'process_guid', 'parent_pid', 'docs.0.process_pid', 'cb_version', 'process_hash.0', 'process_hash.1', 'parent_hash.0', 'parent_hash.1' 필드의 중복 코드가 삭제되었습니다.

2023-07-21

  • 'security_result.attack_details'에 MITRE ATT&CK 전략 및 기법 세부정보를 추가했습니다.

2023-03-24

  • 'protocol' 필드가 'network.ip_protocol'에 매핑되었습니다.
  • 'child_username', 'child_pid', 'child_command_line' 필드에 대한 null 조건부 검사가 추가되었습니다.
  • 'principal.hostname' 또는 'principal.ip'가 null이 아닌 경우 'metadata.event_type'을 'GENERIC_EVENT'에서 'STATUS_UPDATE'로 변경했습니다.

2023-03-14

  • 버그 수정:
  • 'type' 필드가 null인 경우 다음 필드를 매핑했습니다.
  • 'process_guid' 필드가 'principal.process.product_specific_process_id'에 매핑되었습니다.
  • 'device_external_ip' 필드가 'target.ip'에 매핑되었습니다.
  • 'device_os' 필드가 'principal.platform'에 매핑되었습니다.
  • 'device_group' 필드를 'principal.group.group_display_name'에 매핑했습니다.
  • 'process_pid' 필드를 'principal.process.pid'에 매핑했습니다.
  • 'process_path' 필드가 'principal.process.file.full_path'에 매핑되었습니다.
  • 'process_cmdline' 필드가 'principal.process.command_line'에 매핑되었습니다.
  • 'process_hash.0' 필드가 'principal.process.file.md5'에 매핑되었습니다.
  • 'principal.1' 필드가 'principal.process.file.sha256'에 매핑되었습니다.
  • 'process_username' 필드가 'principal.user.userid'에 매핑되었습니다.
  • 'clientIp' 필드가 'principal.ip'에 매핑되었습니다.
  • 'description' 필드를 'metadata.description'에 매핑했습니다.
  • 'orgName' 필드가 'principal.administrative_domain'에 매핑되었습니다.
  • 'ruleName' 필드에 'CYDERES'가 포함된 경우 다음 필드가 매핑되었습니다.
  • 'deviceInfo.internalIpAddress' 필드가 'principal.ip'에 매핑되었습니다.
  • 'deviceInfo.externalIpAddress' 필드가 'target.ip'에 매핑되었습니다.
  • 'ruleName' 필드가 'security_result.rule_name'에 매핑되었습니다.
  • 'deviceInfo.deviceType' 필드가 'principal.asset.platform_software.platform'에 매핑되었습니다.
  • 'domain' 필드가 'principal.administrative_domain'에 매핑되었습니다.
  • 'deviceInfo.groupName' 필드가 'principal.group.group_display_name'에 매핑되었습니다.
  • 'deviceInfo.deviceVersion' 필드가 'principal.asset.platform_software.platform_version'에 매핑되었습니다.
  • 'deviceInfo.deviceId' 필드가 'principal.asset.asset_id'에 매핑되었습니다.
  • 'eventId' 필드가 'additional.fields'에 매핑되었습니다.
  • 'principal.ip' 및 'target.ip'가 null이 아닌 경우 'metadata.event_type'이 'GENERIC_EVENT'에서 'NETWORK_CONNECTION'으로 변경되었습니다.
  • 'principal.ip'가 null이 아닌 경우 'metadata.event_type'을 'GENERIC_EVENT'에서 'STATUS_UPDATE'로 변경했습니다.

2023-02-03

  • 버그 수정: 'filemod_hash'를 'target.process.file'이 아닌 'target.file'에 매핑합니다.

2023-01-20

  • 버그 수정: 빈 프로세스 ID의 product_specific_process_id 채우기 및 매핑을 중지했습니다.

2022-11-25

  • '인바운드' TCP/UDP 이벤트의 경우 'remote_ip'를 'principal.ip'에, 'local_ip'를 'target.ip'에 매핑했습니다.
  • '인바운드' TCP/UDP 이벤트의 'remote_port'를 'principal.port'에, 'local_port'를 'target.port'에 매핑했습니다.

2022-10-06

  • 모든 고객별 파서가 기본 파서로 마이그레이션되었습니다.

2022-07-10

  • 'endpoint.event' 유형의 로그에 대한 'event_type'의 매핑이 'PROCESS_LAUNCH'로 업데이트되었습니다.'.

도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가의 답변을 받으세요.