Skyhigh Security 로그 수집
이 문서에서는 Bindplane을 사용하여 Skyhigh Security(이전 McAfee Skyhigh CASB) 로그를 Google Security Operations에 수집하는 방법을 설명합니다.
파서는 SYSLOG + KV 형식의 로그를 통합 데이터 모델(UDM)로 변환합니다. 먼저 로그 메시지를 키-값 쌍으로 정규화한 다음 추출된 필드를 event.idm.read_only_udm
객체 내의 해당 UDM 속성에 매핑하여 특정 필드의 존재 여부와 값을 기반으로 이벤트 유형을 분류합니다.
시작하기 전에
다음 기본 요건이 충족되었는지 확인합니다.
- Google SecOps 인스턴스
- Windows 2016 이상 또는
systemd
가 설치된 Linux 호스트 - 프록시 뒤에서 실행하는 경우 방화벽 포트가 열려 있음
- Skyhigh Cloud Connector 설치 및 구성
- Skyhigh Security Cloud Connector에 대한 액세스 권한 관리
Google SecOps 수집 인증 파일 가져오기
- Google SecOps 콘솔에 로그인합니다.
- SIEM 설정 > 수집 에이전트로 이동합니다.
- 수집 인증 파일을 다운로드합니다. Bindplane이 설치될 시스템에 파일을 안전하게 저장합니다.
Google SecOps 고객 ID 가져오기
- Google SecOps 콘솔에 로그인합니다.
- SIEM 설정 > 프로필로 이동합니다.
- 조직 세부정보 섹션에서 고객 ID를 복사하여 저장합니다.
Bindplane 에이전트 설치
다음 안내에 따라 Windows 또는 Linux 운영체제에 Bindplane 에이전트를 설치합니다.
Windows 설치
- 명령 프롬프트 또는 PowerShell을 관리자로 엽니다.
다음 명령어를 실행합니다.
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Linux 설치
- 루트 또는 sudo 권한으로 터미널을 엽니다.
다음 명령어를 실행합니다.
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
추가 설치 리소스
추가 설치 옵션은 설치 가이드를 참고하세요.
Syslog를 수집하여 Google SecOps로 전송하도록 Bindplane 에이전트 구성
- 구성 파일에 액세스합니다.
config.yaml
파일을 찾습니다. 일반적으로 Linux에서는/etc/bindplane-agent/
디렉터리에 있고 Windows에서는 설치 디렉터리에 있습니다.- 텍스트 편집기 (예:
nano
,vi
, 메모장)를 사용하여 파일을 엽니다.
다음과 같이
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_file_path: '/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 log_type: 'MCAFEE_SKYHIGH_CASB' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
- 인프라에 필요한 대로 포트와 IP 주소를 바꿉니다.
<customer_id>
를 실제 고객 ID로 바꿉니다.- Google SecOps 수집 인증 파일 가져오기 섹션에서 인증 파일이 저장된 경로로
/path/to/ingestion-authentication-file.json
를 업데이트합니다.
Bindplane 에이전트를 다시 시작하여 변경사항 적용
Linux에서 Bindplane 에이전트를 다시 시작하려면 다음 명령어를 실행합니다.
sudo systemctl restart bindplane-agent
Windows에서 Bindplane 에이전트를 다시 시작하려면 서비스 콘솔을 사용하거나 다음 명령어를 입력하면 됩니다.
net stop BindPlaneAgent && net start BindPlaneAgent
로깅 클라이언트 다운로드 전 기본 요건
다음 세부정보가 있는지 확인하세요.
- 사용 분석 사용자 권한: 계정에 사용 분석 사용자 역할이 있어야 합니다.
- 고객 ID: 다음 단계에 따라 Skyhigh CASB에서 고객 ID를 찾습니다.
- Skyhigh CASB에 로그인합니다.
- 설정 > 인프라 > 클라이언트 프록시 관리로 이동합니다.
- 전역 구성 > 테넌트 인증을 클릭합니다.
- 전체 설정에서 표시된 고객 ID를 확인합니다.
- 이메일 주소 및 비밀번호: 로그인 사용자(또는 전용 서비스 계정)의 로그인 사용자 인증 정보입니다. 비밀번호를 제출하지 않고 SAML을 사용하여 로그인하는 경우 로깅 클라이언트를 설치할 수 없습니다.
Skyhigh 로깅 클라이언트 다운로드 및 설치
- 로깅 클라이언트를 전용 인스턴스에 다운로드합니다.
- 로깅 클라이언트를 설치합니다 (필요한 경우 다운로드한 EXE 파일의 압축을 풉니다).
- 설치가 완료되면 로깅 클라이언트를 엽니다.
- 구성 페이지에서 다음 구성 세부정보를 제공합니다.
- 고객 ID: 이전 단계에서 얻은 Skyhigh CASB 고객 ID를 입력합니다.
- 서비스: Skyhigh SSE를 사용하는 경우 SSE를 선택하고, 이 제품을 Trellix ePO와 함께 사용하는 경우 WGCS를 선택합니다.
- 리전: 데이터가 저장된 위치에 따라 지역 또는 국가 코드를 선택합니다.
- EU — 유럽 연합
- IN — 인도
- SG — 싱가포르
- UE — 아랍에미리트
- 영국
- US — 미국
- 이름: 사용자 이름을 입력합니다. 일반적으로 Secure Web Gateway 또는 전용 인스턴스에 로그인하는 데 사용되는 이메일 주소입니다.
- 비밀번호: Secure Web Gateway에 로그인할 때 사용하는 비밀번호를 입력합니다. SAML로 로그인하는 경우 로깅 클라이언트를 사용할 수 없습니다.
- API 버전:
version 13
를 입력합니다. - 로그 유형: 웹, 원격 브라우저 격리 (RBI), 비공개 액세스, Cloud 방화벽에서 생성된 데이터가 포함된 로그를 비롯한 다양한 유형의 로그를 다운로드할 수 있습니다.
- Syslog로 보내기를 선택하고 다음 구성 세부정보를 제공합니다.
- Syslog-Client Host: Bindplane 에이전트 IP 주소를 입력합니다.
- Syslog-Client Port: Bindplane 에이전트 포트 번호를 입력합니다.
- 전송: Bindplane 에이전트 구성에 따라 UDP 또는 TCP를 선택합니다.
UDM 매핑 테이블
로그 필드 | UDM 매핑 | 논리 |
---|---|---|
EventReceivedTime | metadata.event_timestamp | yyyy-MM-dd HH:mm:ss 형식에서 타임스탬프로 변환됨 |
FileSize | target.file.size | 직접 매핑되고 uinteger로 변환됨 |
호스트 이름 | principal.hostname | 직접 매핑됨 |
MessageSourceAddress | principal.ip | 직접 매핑, 여러 인스턴스인 경우 병합 |
심각도 | additional.fields.value.string_value (키: SEVERITY) | 직접 매핑됨 |
SeverityValue | additional.fields.value.string_value (키: SEVERITY_VALUE) | 직접 매핑됨 |
SourceModuleName | additional.fields.value.string_value (키: SOURCE_MODULE_NAME) | 직접 매핑됨 |
SourceModuleType | principal.resource.resource_subtype | 직접 매핑됨 |
SyslogFacility | security_result.about.resource.attribute.labels.value (키: SYSLOG_FACILITY) | 직접 매핑됨 |
SyslogFacilityValue | security_result.about.resource.attribute.labels.value (key: SYSLOG_FACILITY_VALUE) | 직접 매핑됨 |
SyslogSeverity | security_result.about.resource.attribute.labels.value (키: SYSLOG_SEVERITY) | 직접 매핑됨 |
SyslogSeverityValue | security_result.about.resource.attribute.labels.value (키: SYSLOG_SEVERITY_VALUE) | 직접 매핑됨 |
activityName | metadata.product_event_type | 직접 매핑됨, 괄호 삭제됨 |
actorId | principal.user.userid | 직접 매핑되며, 이메일인 경우 email_addresses에도 추가됩니다. |
actorIdType | principal.user.attribute.roles.name | 직접 매핑됨 |
collaborationSharedLink | security_result.about.resource.attribute.labels.value (key: COLLABORATION_SHARED_LINK) | 직접 매핑됨 |
contentItemId | target.file.full_path (contentItemType이 FILE인 경우) | 직접 매핑됨, 인용구 삭제됨 |
contentItemId | target.url (contentItemType이 SAAS_RESOURCE인 경우) | 직접 매핑됨, 인용구 삭제됨 |
contentItemHierarchy | additional.fields.value.string_value (키: CONTENT_ITEM_HIERARCHY) | 직접 매핑됨, 인용구 삭제됨 |
contentItemName | target.resource.name | 직접 매핑됨, 인용구 삭제됨 |
contentItemType | additional.fields.value.string_value (키: CONTENT_ITEM_TYPE) | 직접 매핑됨 |
incidentGroup | security_result.detection_fields.value (키: INCIDENT_GROUP) | 직접 매핑됨 |
incidentId | metadata.product_log_id | 직접 매핑됨 |
incidentRiskScore | security_result.detection_fields.value (키: INCIDENT_RISK_SCORE) | 직접 매핑됨 |
incidentRiskSeverityId | riskSeverity와 함께 사용하여 security_result.severity를 결정합니다. | |
informationAccountId | target.resource.product_object_id | 직접 매핑됨 |
informationAnomalyCategory | security_result.category_details | 직접 매핑됨, 인용구 삭제됨 |
informationAnomalyCause | security_result.detection_fields.value (키: INFO_ANOMALY_CAUSE) | 직접 매핑됨, 인용구 삭제됨 |
informationCategory | security_result.category_details | 직접 매핑됨 |
informationConfigType | additional.fields.value.string_value (키: INFORMATION_CONFIG_TYPE) | 직접 매핑됨, 인용구 삭제됨 |
informationContentItemParent | target.resource.parent | 직접 매핑됨, 인용구 삭제됨 |
informationEventId | additional.fields.value.string_value (키: INFORMATION_EVENT_ID) | 직접 매핑됨 |
informationExternalCollaboratorsCount | additional.fields.value.string_value (키: INFORMATION_COLLAB_COUNT) | 직접 매핑됨 |
informationFileTypes | additional.fields.value.list_value.values.string_value (키: FILE_TYPE) | JSON과 유사한 문자열에서 추출됨, 괄호와 따옴표가 삭제됨 |
informationLastExecutedResponseLabel | additional.fields.value.string_value (키: INFORMATION_LAST_RESPONSE) | 직접 매핑됨 |
informationScanName | metadata.description | 직접 매핑됨, 인용구 삭제됨 |
informationScanRunDate | UDM에 매핑되지 않음 | |
informationSource | additional.fields.value.string_value (키: INFORMATION_SOURCE) | 직접 매핑됨 |
informationUniqueMatchCount | additional.fields.value.string_value (키: INFORMATION_UNQ_MATCH_COUNT) | 직접 매핑됨 |
informationUserAttributesSAMAccountName | principal.user.user_display_name | 직접 매핑됨, 괄호 삭제됨 |
instanceId | principal.resource.product_object_id | 직접 매핑됨 |
instanceName | principal.resource.name | 직접 매핑됨, 인용구 삭제됨 |
policyId | security_result.rule_id | 직접 매핑됨 |
policyName | security_result.summary | 직접 매핑됨, 인용구 삭제됨 |
응답 | security_result.action (ALLOW 또는 BLOCK)을 결정하는 데 사용됩니다. | |
riskSeverity | incidentRiskSeverityId와 함께 사용하여 security_result.severity를 결정하며 대문자로 변환됩니다. | |
serviceNames | target.application | 직접 매핑되고 괄호, 따옴표, 추가 공백이 삭제됨 |
sourceIps | principal.ip | JSON과 유사한 문자열에서 추출되며, 인스턴스가 여러 개인 경우 병합됩니다. |
상태 | additional.fields.value.string_value (키: STATUS) | 직접 매핑됨 |
threatCategory | security_result.threat_name | 직접 매핑됨, 인용구 삭제됨 |
totalMatchCount | security_result.detection_fields.value (key: TOTAL_MATCH_COUNT) | 직접 매핑됨 |
해당 사항 없음 | metadata.vendor_name | MCAFEE - 정적 값 |
해당 사항 없음 | metadata.product_name | MCAFEE_SKYHIGH_CASB - 정적 값 |
해당 사항 없음 | metadata.log_type | MCAFEE_SKYHIGH_CASB - 정적 값 |
해당 사항 없음 | principal.resource.type | VIRTUAL_MACHINE - instanceName 또는 instanceId가 있는 경우 설정 |
해당 사항 없음 | metadata.event_type | 일련의 조건에 따라 결정됩니다. actorId, contentItemId 또는 contentItemName이 있는 경우 ~ USER_RESOURCE_UPDATE_CONTENT , actorId 및 target이 있는 경우 ~ USER_UNCATEGORIZED , Hostname 또는 MessageSourceAddress가 있는 경우 ~ STATUS_UPDATE , 그 외의 경우 ~ GENERIC_EVENT |
해당 사항 없음 | security_result.severity | riskSeverity와 incidentRiskSeverityId의 조합에 따라 결정됩니다. riskSeverity가 LOW 이고 incidentRiskSeverityId가 0 인 경우 ~ LOW , riskSeverity가 MEDIUM 이고 incidentRiskSeverityId가 1 인 경우 ~ MEDIUM , riskSeverity가 HIGH 이고 incidentRiskSeverityId가 2 인 경우 ~ HIGH , riskSeverity가 INFO 이고 incidentRiskSeverityId가 3 인 경우 ~ INFORMATIONAL |
해당 사항 없음 | security_result.action | 응답 값에 따라 결정됩니다. 응답에 allow (대소문자 구분 안 함)가 포함된 경우 ~ ALLOW , 응답에 Violation (대소문자 구분 안 함)가 포함된 경우 ~ BLOCK |
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가로부터 답변을 받으세요.