Symantec CloudSOC CASB 로그 수집

다음에서 지원:

이 문서에서는 Bindplane을 사용하여 Symantec CloudSOC 로그를 Google Security Operations에 수집하는 방법을 설명합니다. 파서는 syslog 또는 JSON 형식 메시지에서 로그를 추출합니다. 메시지 필드 파싱, 필요한 경우 메시지를 JSON으로 변환, 필드 추출, 통합 데이터 모델 (UDM)에 매핑, 타임스탬프 및 보안 결과 세부정보와 같은 추가 컨텍스트로 이벤트 보강 등 여러 주요 작업을 실행합니다. 파서는 다양한 로그 형식을 처리하고 activity_type 필드에 따라 특정 작업을 실행하여 이벤트를 올바르게 분류합니다.

시작하기 전에

다음 기본 요건이 충족되었는지 확인합니다.

  • Google SecOps 인스턴스
  • Windows 2016 이상 또는 systemd가 설치된 Linux 호스트
  • 프록시 뒤에서 실행하는 경우 방화벽 포트가 열려 있음
  • Symantec CloudSOC에 대한 액세스 권한

Google SecOps 수집 인증 파일 가져오기

  1. Google SecOps 콘솔에 로그인합니다.
  2. SIEM 설정 > 수집 에이전트로 이동합니다.
  3. 수집 인증 파일을 다운로드합니다. Bindplane이 설치될 시스템에 파일을 안전하게 저장합니다.

Google SecOps 고객 ID 가져오기

  1. Google SecOps 콘솔에 로그인합니다.
  2. SIEM 설정 > 프로필로 이동합니다.
  3. 조직 세부정보 섹션에서 고객 ID를 복사하여 저장합니다.

Bindplane 에이전트 설치

Windows 설치

  1. 명령 프롬프트 또는 PowerShell을 관리자로 엽니다.
  2. 다음 명령어를 실행합니다.

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Linux 설치

  1. 루트 또는 sudo 권한으로 터미널을 엽니다.
  2. 다음 명령어를 실행합니다.

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

추가 설치 리소스

추가 설치 옵션은 설치 가이드를 참고하세요.

Syslog를 수집하여 Google SecOps로 전송하도록 Bindplane 에이전트 구성

  1. 구성 파일에 액세스합니다.
    • config.yaml 파일을 찾습니다. 일반적으로 Linux에서는 /etc/bindplane-agent/ 디렉터리에 있고 Windows에서는 설치 디렉터리에 있습니다.
    • 텍스트 편집기 (예: nano, vi, 메모장)를 사용하여 파일을 엽니다.
  2. 다음과 같이 config.yaml 파일을 수정합니다.

        receivers:
            udplog:
                # Replace the port and IP address as required
                listen_address: "0.0.0.0:514"
    
        exporters:
            chronicle/chronicle_w_labels:
                compression: gzip
                # Adjust the path to the credentials file you downloaded in Step 1
                creds: '/path/to/ingestion-authentication-file.json'
                # Replace with your actual customer ID from Step 2
                customer_id: <customer_id>
                endpoint: malachiteingestion-pa.googleapis.com
                # Add optional ingestion labels for better organization
                ingestion_labels:
                    log_type: 'SYMANTEC_CASB'
                    raw_log_field: body
    
        service:
            pipelines:
                logs/source0__chronicle_w_labels-0:
                    receivers:
                        - udplog
                    exporters:
                        - chronicle/chronicle_w_labels
    
  3. 인프라에 필요한 대로 포트와 IP 주소를 바꿉니다.

  4. <customer_id>를 실제 고객 ID로 바꿉니다.

  5. Google SecOps 수집 인증 파일 가져오기 섹션에서 인증 파일이 저장된 경로로 /path/to/ingestion-authentication-file.json를 업데이트합니다.

Bindplane 에이전트를 다시 시작하여 변경사항 적용

  • Linux에서 Bindplane 에이전트를 다시 시작하려면 다음 명령어를 실행합니다.

    sudo systemctl restart bindplane-agent
    
  • Windows에서 Bindplane 에이전트를 다시 시작하려면 서비스 콘솔을 사용하거나 다음 명령어를 입력하면 됩니다.

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Symantec CASB에서 Syslog 구성하기

  1. Symantec CloudSOC 호스트에 로그인합니다.
  2. 다음 명령어를 실행하여 시스템에서 사용하는 로거를 확인합니다.

    ls –d /etc/*syslog*
    
  3. 이전 명령어의 응답에 따라 해당 섹션으로 이동합니다.

    • syslog.conf: 기존 Syslog입니다.
    • syslog-ng.conf: Syslog-ng

기존 Syslog 구성

  1. vi 편집기를 사용하여 syslogd 파일을 엽니다. 일반적으로 /etc/default 디렉터리에 있습니다.

    vi /etc/default/syslogd
    
  2. SYSLOGD 값에 -r 플래그가 포함되어 있는지 확인합니다.

    SYSLOGD="-r"
    
  3. 파일을 저장하고 편집기를 종료합니다.

    • Esc 키를 눌러 명령 모드로 전환합니다.
    • : (콜론)을 눌러 프롬프트 표시줄을 엽니다.
    • 콜론 뒤에 wq를 입력하고 Enter 키를 누릅니다.
  4. vi 편집기를 사용하여 /etc 디렉터리에 있는 services 파일을 엽니다.

    vi /etc/services
    
  5. syslog 서비스의 포트 값을 수정합니다.

    syslog 514/udp
    
  6. 파일을 저장하고 편집기를 종료합니다.

    • Esc 키를 눌러 명령 모드로 전환합니다.
    • : (콜론)을 눌러 프롬프트 표시줄을 엽니다.
    • 콜론 뒤에 wq를 입력하고 Enter 키를 누릅니다.
  7. vi 편집기를 사용하여 /etc 디렉터리에 있는 syslog.conf 파일을 엽니다.

    vi /etc/syslog.conf
    
  8. 모든 로그를 Google SecOps로 전달하도록 구성을 업데이트합니다.

    *.* @bindplane_agent_host
    
  9. 파일을 저장하고 편집기를 종료합니다.

    • Esc 키를 눌러 명령 모드로 전환합니다.
    • : (콜론)을 눌러 프롬프트 표시줄을 엽니다.
    • 콜론 뒤에 wq를 입력하고 Enter 키를 누릅니다.
  10. vi 편집기를 사용하여 /etc 디렉터리에 있는 hosts 파일을 엽니다.

    vi /etc/hosts
    
  11. bindplane_agent_host의 로컬 DNS 항목을 만듭니다.

    0.0.0.0 bindplane_agent_host
    
  12. 파일을 저장하고 편집기를 종료합니다.

    • Esc 키를 눌러 명령 모드로 전환합니다.
    • : (콜론)을 눌러 프롬프트 표시줄을 엽니다.
    • 콜론 뒤에 wq를 입력하고 Enter 키를 누릅니다.
  13. syslog 데몬 서비스를 다시 시작합니다.

Syslog-ng 구성

  1. vi 편집기를 사용하여 /etc 디렉터리에 있는 syslog-ng.conf 파일을 엽니다.

    vi /etc/syslog-ng.conf
    
  2. 파일 끝에 아래 코드를 추가합니다.

    destination d____ { udp("bindplane_agent_host" port(514));}; log {source(s_src);
    destination(d____);};
    
  3. vi 편집기를 사용하여 /etc 디렉터리에 있는 hosts 파일을 엽니다.

    vi /etc/hosts
    
  4. bindplane_agent_host의 로컬 DNS 항목을 만듭니다.

    0.0.0.0 bindplane_agent_host
    
  5. 파일을 저장하고 편집기를 종료합니다.

    • Esc 키를 눌러 명령 모드로 전환합니다.
    • : (콜론)을 눌러 프롬프트 표시줄을 엽니다.
    • 콜론 뒤에 wq를 입력하고 Enter 키를 누릅니다.
  6. syslog-ng 데몬 서비스를 다시 시작합니다.

UDM 매핑 테이블

로그 필드 UDM 매핑 논리
_domain target.hostname _domain 필드의 값
_domain target.asset.hostname _domain 필드의 값
_id metadata.product_log_id _id 필드의 값
actions_taken security_result.detection_fields[].value actions_taken 필드의 값입니다. 키는 Action_ + 색인으로 동적으로 생성됩니다.
activity_type metadata.product_event_type product_data.activity_type이 비어 있으면 activity_type 필드의 값이고, 비어 있지 않으면 product_data.activity_type의 값입니다.
collector_device_ip principal.ip Unknown IP이 아닌 경우 collector_device_ip 필드의 값입니다.
collector_device_ip principal.asset.ip Unknown IP이 아닌 경우 collector_device_ip 필드의 값입니다.
collector_device_name principal.hostname collector_device_name 필드의 값입니다.
collector_device_name principal.asset.hostname collector_device_name 필드의 값입니다.
content_checks.dlp.raw_response.contentdetails[].contentBlockId security_result.detection_fields[].value content_checks.dlp.raw_response.contentdetails[].contentBlockId의 값입니다. 키는 contentBlockId_ + 색인으로 동적으로 생성됩니다.
content_checks.dlp.raw_response.contentdetails[].topLevelFileType security_result.detection_fields[].value content_checks.dlp.raw_response.contentdetails[].topLevelFileType의 값입니다. 키는 topLevelFileType_ + 색인으로 동적으로 생성됩니다.
content_checks.dlp.raw_response.requestid security_result.detection_fields[].value content_checks.dlp.raw_response.requestid의 값입니다. 키는 Request ID입니다.
content_checks.dlp.raw_response.responseaction security_result.detection_fields[].value content_checks.dlp.raw_response.responseaction의 값입니다. 키는 Response Action입니다.
content_checks.dlp.raw_response.violation[].name security_result.detection_fields[].value content_checks.dlp.raw_response.violation[].name의 값입니다. 키는 Violation_Policy_Name_ + 색인으로 동적으로 생성됩니다.
content_checks.dlp.raw_response.violation[].policyId security_result.detection_fields[].value content_checks.dlp.raw_response.violation[].policyId의 값입니다. 키는 Violation_Policy_ID_ + 색인으로 동적으로 생성됩니다.
content_checks.dlp.updated_timestamp additional.fields[].value.string_value content_checks.dlp.updated_timestamp의 값입니다. 키는 Updated TimeStamp입니다.
content_checks.filename target.file.full_path content_checks.filename의 값입니다.
content_checks.mimetype target.file.mime_type content_checks.mimetype의 값입니다.
content_checks.risktype_list[] security_result.detection_fields[].value content_checks.risktype_list[]의 값입니다. 키는 RiskType_ + 색인으로 동적으로 생성됩니다.
content_checks.vba_macros.expressions[].values[].key security_result.detection_fields[].key content_checks.vba_macros.expressions[].values[].key 값과 색인이 연결된 값입니다.
content_checks.vba_macros.expressions[].values[].value security_result.detection_fields[].value content_checks.vba_macros.expressions[].values[].value의 값입니다.
content_checks.vk_content_iq_violations[] security_result.detection_fields[].value content_checks.vk_content_iq_violations[]의 값입니다. 키는 content_violation_ + 색인으로 동적으로 생성됩니다.
content_checks.vk_dlp_policy_violations[] security_result.detection_fields[].value content_checks.vk_dlp_policy_violations[]의 값입니다. 키는 dlp_policy_violation_ + 색인으로 동적으로 생성됩니다.
content_checks.vk_encryption security_result.detection_fields[].value content_checks.vk_encryption의 값입니다. 키는 vk_encryption입니다.
content_checks.vk_glba security_result.detection_fields[].value content_checks.vk_glba의 값입니다. 키는 vk_glba입니다.
content_checks.vk_hipaa security_result.detection_fields[].value content_checks.vk_hipaa의 값입니다. 키는 vk_hipaa입니다.
content_checks.vk_pci security_result.detection_fields[].value content_checks.vk_pci의 값입니다. 키는 vk_pci입니다.
content_checks.vk_pii security_result.detection_fields[].value content_checks.vk_pii의 값입니다. 키는 vk_pii입니다.
content_checks.vk_source_code security_result.detection_fields[].value content_checks.vk_source_code의 값입니다. 키는 vk_source_code입니다.
content_checks.vk_vba_macros security_result.detection_fields[].value content_checks.vk_vba_macros의 값입니다. 키는 vk_vba_macros입니다.
content_checks.vk_virus security_result.detection_fields[].value content_checks.vk_virus의 값입니다. 키는 vk_virus입니다.
content_checks.violations security_result.detection_fields[].value content_checks.violations의 값입니다. 키는 violations입니다.
created_timestamp additional.fields[].value.string_value created_timestamp의 값입니다. 키는 Created TimeStamp입니다.
date metadata.event_timestamp.seconds date 필드에서 추출된 에포크 시간(초)입니다.
device_ip target.ip Unknown IP이 아닌 경우 device_ip 필드의 값입니다.
device_ip target.asset.ip Unknown IP이 아닌 경우 device_ip 필드의 값입니다.
file_size target.file.size file_size의 값입니다. file_size이 비어 있으면 product_data.file_size의 값입니다. 부호 없는 정수로 변환되었습니다.
file_url target.file.full_path product_data.file_url의 값입니다.
group_name target.group.group_display_name group_name 필드에서 추출한 표시 이름입니다.
hosts[] principal.ip hosts 필드의 값입니다(쉼표로 구분됨).
inserted_timestamp additional.fields[].value.string_value inserted_timestamp의 값입니다. 키는 Inserted TimeStamp입니다.
instance principal.hostname instance 필드가 배열인 경우 첫 번째 값, 문자열인 경우 instance 필드의 값입니다.
instance principal.asset.hostname instance 필드가 배열인 경우 첫 번째 값, 문자열인 경우 instance 필드의 값입니다.
ioi_code security_result.summary ioi_code 필드의 값입니다.
_latency security_result.detection_fields[].value _latency 필드의 값입니다. 키는 Latency입니다.
locations security_result.detection_fields[].value locations 필드의 값입니다. 키는 Locations입니다.
log_name intermediary.asset.asset_id log_name 필드에서 추출된 로그 ID이며 logid:이 접두사로 붙습니다.
mailbox_owner target.user.userid product_data.mailbox owner의 값입니다.
metadata.log_type metadata.log_type SYMANTEC_CASB로 하드코딩되었습니다.
metadata.product_name metadata.product_name SYMANTEC_CASB로 하드코딩되었습니다.
metadata.vendor_name metadata.vendor_name SYMANTEC로 하드코딩되었습니다.
msg metadata.description msg 필드의 값 또는 msg이 없는 경우 message 필드의 값입니다.
name security_result.detection_fields[].value name 필드의 값입니다. 키는 Name입니다.
object_name security_result.detection_fields[].value object_name 필드의 값입니다. 키는 Object Name입니다.
object_type target.resource.name object_type 필드의 값입니다.
org_unit security_result.detection_fields[].value org_unit 필드의 값입니다. 키는 org_unit ID입니다.
policy_action security_result.action_details policy_action 필드의 값입니다.
policy_type security_result.detection_fields[].value policy_type 필드의 값입니다. 키는 policy_type입니다.
policy_violated security_result.detection_fields[].value policy_violated 필드의 값입니다. 키는 policy_violated입니다.
product_data._domain target.hostname product_data._domain의 값입니다.
product_data._domain target.asset.hostname product_data._domain의 값입니다.
product_data.activity_type metadata.product_event_type product_data.activity_type의 값입니다.
product_data.file url target.file.full_path product_data.file url의 값입니다.
product_data.file_size target.file.size product_data.file_size의 값입니다.
product_data.group target.group.group_display_name product_data.group의 값입니다.
product_data.location principal.location.country_or_region product_data.location의 값입니다.
product_data.logon error security_result.summary product_data.logon error의 값입니다.
product_data.mailbox owner target.user.userid product_data.mailbox owner의 값입니다.
product_data.name target.file.full_path product_data.name의 값입니다.
product_data.object_name target.file.full_path product_data.object_name의 값입니다.
product_data.originatingserver product_data.service target.application product_data.service의 값입니다.
product_data.site url target.url product_data.site url의 값입니다.
product_data.target target.user.userid product_data.target의 값입니다.
product_data.useragent network.http.user_agent product_data.useragent의 값입니다.
product_name intermediary.application product_name 필드의 값입니다.
product_uid metadata.product_name product_uid 필드의 값입니다.
responsible_logs additional.fields[].value.string_value responsible_logs 필드의 값입니다. 키는 responsible_logs입니다.
resource_id target.resource.product_object_id resource_id 필드의 값입니다.
risks security_result.detection_fields[].value risks 필드의 값입니다. 키는 Risks입니다.
security_result.action security_result.action product_data.logon error에서 파생됨 product_data.logon errorBlockedByConditionalAccess이면 BLOCK로 설정합니다.
security_result.severity security_result.severity 지원되는 심각도 수준 중 하나인 경우 severity 필드의 대문자 값입니다.
security_result.severity_details security_result.severity_details 지원되는 심각도 수준 중 하나가 아닌 경우 severity 필드의 값입니다.
security_result.summary security_result.summary ioi_code 필드의 값입니다. ioi_code이 없는 경우 product_data.logon error입니다.
service target.application product_data.service이 비어 있는 경우 service 필드의 값입니다.
site_url target.url product_data.site url의 값입니다.
source principal.resource.attribute.labels[].value source 필드의 값입니다. 키는 Source입니다.
sub_feature additional.fields[].value.string_value sub_feature 필드의 값입니다. 키는 Sub Feature입니다.
target.application target.application product_data.activity_type 및 주 구성원과 대상의 존재 여부에 따라 파생됩니다.
target.resource.name target.resource.name product_data.activity_type 및 주 구성원과 대상의 존재 여부에 따라 파생됩니다.
threat_score security_result.detection_fields[].value threat_score 필드의 값입니다. 키는 Threat Score입니다.
transaction_id security_result.detection_fields[].value transaction_id 필드의 값입니다. 키는 Transaction ID입니다.
updated_timestamp additional.fields[].value.string_value updated_timestamp의 값입니다. updated_timestamp이 비어 있으면 content_checks.dlp.updated_timestamp의 값입니다. 키는 Updated TimeStamp입니다.
user principal.user.userid user 필드의 값입니다.
user_email target.user.userid user_email 필드의 값입니다.
user_mail target.user.userid msg 필드에서 추출한 user_mail 필드의 값입니다.
user_name principal.user.user_display_name user_name 필드의 값입니다.
user_uid principal.user.userid 또는 target.user.userid user_uid 필드의 값입니다. product_data.activity_typeInvalidLogin 또는 Login이 아닌 경우 principal.user.userid에 매핑되고, 그렇지 않으면 target.user.userid에 매핑됩니다.
uuid intermediary.asset.product_object_id uuid 필드의 값입니다.
version metadata.product_version version 필드의 값입니다.

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