클라우드용 Microsoft Defender 알림 로그 수집
개요
이 파서는 Microsoft Defender for Cloud의 JSON 형식 로그에서 보안 알림 데이터를 추출합니다. 원시 로그 필드를 변환하여 Google SecOps UDM에 매핑하고 다양한 데이터 유형과 중첩된 구조를 처리하는 동시에 향상된 분석을 위해 추가 컨텍스트와 라벨로 데이터를 보강합니다.
시작하기 전에
- Google SecOps 인스턴스가 있는지 확인합니다.
- Microsoft Defender for Cloud에 대한 액세스 권한이 있는지 확인합니다.
Microsoft Defender Cloud 알림 로그를 수집하도록 Google SecOps에서 피드 구성
- SIEM 설정 > 피드로 이동합니다.
- 새로 추가를 클릭합니다.
- 피드 이름 필드에 피드 이름을 입력합니다 (예: Microsoft Defender for Cloud 알림 로그).
- 소스 유형으로 Webhook을 선택합니다.
- 로그 유형으로 Microsoft Defender for Cloud를 선택합니다.
- 다음을 클릭합니다.
- 선택사항: 다음 입력 매개변수의 값을 지정합니다.
- 분할 구분 기호: 로그 줄을 구분하는 데 사용되는 구분 기호입니다(예:
\n
). - 애셋 네임스페이스: 애셋 네임스페이스입니다.
- 수집 라벨: 이 피드의 이벤트에 적용된 라벨입니다.
- 분할 구분 기호: 로그 줄을 구분하는 데 사용되는 구분 기호입니다(예:
- 다음을 클릭합니다.
- 확정 화면에서 피드 구성을 검토한 다음 제출을 클릭합니다.
- 보안 비밀 키 생성을 클릭하여 이 피드를 인증하기 위한 보안 비밀 키를 생성합니다.
- 비밀 키를 복사하여 저장합니다. 이 보안 비밀 키는 다시 볼 수 없습니다. 필요한 경우 새 보안 비밀 키를 재생성할 수 있지만 이 작업을 하면 이전 보안 비밀 키는 더 이상 사용할 수 없게 됩니다.
- 세부정보 탭의 엔드포인트 정보 필드에서 피드 엔드포인트 URL을 복사합니다. 클라이언트 애플리케이션에서 이 엔드포인트 URL을 지정해야 합니다.
- 완료를 클릭합니다.
웹훅 피드에 대한 API 키 만들기
Google Cloud 콘솔 > 사용자 인증 정보로 이동합니다.
사용자 인증 정보 만들기를 클릭한 후 API 키를 선택합니다.
Google Security Operations API에 대한 API 키 액세스를 제한합니다.
엔드포인트 URL 지정
- 클라이언트 애플리케이션에서 웹훅 피드에 제공된 HTTPS 엔드포인트 URL을 지정합니다.
다음 형식의 커스텀 헤더의 일부로 API 키와 보안 비밀 키를 지정하여 인증을 사용 설정합니다.
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
권장사항: API 키를 URL에 지정하는 대신 헤더로 지정하세요. 웹훅 클라이언트가 커스텀 헤더를 지원하지 않는 경우 다음 형식의 쿼리 매개변수를 사용하여 API 키와 보안 비밀 키를 지정할 수 있습니다.
ENDPOINT_URL?key=API_KEY&secret=SECRET
다음을 바꿉니다.
ENDPOINT_URL
: 피드 엔드포인트 URL입니다.API_KEY
: Google Security Operations에 인증하기 위한 API 키입니다.SECRET
: 피드를 인증하기 위해 생성한 보안 비밀 키입니다.
Azure Logic App 만들기
- Azure 포털 (https://portal.azure.com)에 로그인합니다.
- 리소스 만들기를 클릭하고 Logic App을 검색합니다.
- 만들기를 클릭하여 배포 프로세스를 시작합니다.
- 로직 앱을 구성합니다.
- 이름: 로직 앱을 설명하는 이름을 입력합니다 (예: GoogleSecOpsWebhook).
- 구독: 적절한 구독을 선택합니다.
- 리소스 그룹: 기존 리소스 그룹을 선택하거나 새 리소스 그룹을 만듭니다.
- 위치: 환경과 가장 가까운 위치를 선택합니다.
- 로그 애널리틱스: 로직 앱의 진단 데이터를 로깅하려면 이 옵션을 사용 설정하세요.
- 검토 + 만들기를 클릭하여 로직 앱을 만듭니다.
- 만들기를 클릭하여 로직 앱을 배포합니다.
Azure Logic App Webhook 연결 구성
- 이전 단계에서 만든 로직 앱으로 이동합니다.
- 개발 도구 > 로직 앱 디자이너를 클릭합니다.
- 트리거 추가를 클릭합니다.
클라우드용 Microsoft Defender > 클라우드용 Microsoft Defender 알림이 생성되거나 트리거될 때를 트리거로 검색합니다.
새로 만들기를 클릭하고 안내에 따라 인증합니다.
새 단계 삽입을 클릭하여 워크플로에 새 단계를 추가합니다.
작업 추가를 클릭합니다.
HTT를 검색합니다.
작업으로 HTTP를 선택합니다.
HTTP 작업을 구성합니다.
- URI: Google SecOps API 엔드포인트 URL을 입력하는 곳입니다.
- 메서드:
POST
- Content-Type 헤더 추가:
Content-Type
를 헤더 키로,application/json
를 헤더 값으로 설정합니다. 이렇게 하면 Google SecOps에 전송되는 데이터의 형식이 전달됩니다. - 쿼리에 API 키 추가:
key
를 첫 번째 쿼리 키로,<API_KEY>
를 쿼리 값으로 설정합니다.API_KEY
는 Google SecOps 피드 구성 중에 생성된 API 키 값입니다. - 쿼리에 보안 비밀 키 추가:
secret
를 두 번째 쿼리 키로,<SECRET_KEY>
를 쿼리 값으로 설정합니다.SECRET_KEY
는 Google SecOps 피드 구성 중에 생성된 보안 비밀 키입니다. - 이전 단계의 본문 설정: 요청 콘텐츠 입력을 클릭하고 > 이전 단계의 데이터 입력 (입력란 왼쪽에 번개 아이콘이 있는 버튼)을 클릭합니다.
저장을 클릭합니다.
Microsoft Defender Cloud Alerts Webhook 구성
- 클라우드용 Microsoft Defender로 이동합니다.
- 관리 > 워크플로 자동화를 클릭합니다.
- 워크플로 자동화 추가를 클릭합니다.
- 이름: 자동화 규칙의 설명이 포함된 이름을 입력합니다 (예: ForwardAlertsToGoogleSecOps).
- 리소스 그룹: 기존 리소스 그룹을 선택합니다.
- Defender for Cloud 데이터 유형: 보안 알림을 선택합니다.
- 알림 심각도: 모두 선택을 선택합니다.
- 다음 구독의 로직 앱 인스턴스 표시: 로직 앱이 생성된 구독을 선택합니다.
- Logic App 선택: 이전 단계에서 만든 Logic App을 선택합니다.
- 만들기를 클릭하여 워크플로 자동화를 저장합니다.
UDM 매핑 표
로그 필드 | UDM 매핑 | 논리 |
---|---|---|
AlertLink |
principal.resource.attribute.labels.AlertLink.value |
직접 매핑됩니다. |
AlertName |
security_result.rule_name |
직접 매핑됩니다. |
AlertSeverity |
security_result.severity |
값이 HIGH, MEDIUM, LOW, CRITICAL, UNKNOWN_SEVERITY 중 하나인 경우 직접 매핑됩니다. 그 외의 경우에는 security_result.severity_details 로 매핑됩니다. 값은 비교하기 전에 대문자로 변환됩니다. |
AlertType |
security_result.threat_name |
직접 매핑됩니다. |
CompromisedEntity |
principal.resource.attribute.labels.CompromisedEntity.value |
직접 매핑됩니다. |
Description |
security_result.description |
직접 매핑됩니다. |
DisplayName |
security_result.summary |
직접 매핑됩니다. |
EndTime |
about.resource.attribute.labels.EndTime.value |
직접 매핑됩니다. |
Entities[].Location.City |
principal.location.city |
직접 매핑됩니다. |
Entities[].Location.CountryName |
principal.location.country_or_region |
직접 매핑됩니다. |
ExtendedLinks[].Category |
about.resource.attribute.labels.extendedLink_Category.value |
직접 매핑됩니다. |
ExtendedLinks[].Href |
about.resource.attribute.labels.extendedLink_Href.value |
직접 매핑됩니다. |
ExtendedLinks[].Label |
about.resource.attribute.labels.extendedLink_Label.value |
직접 매핑됩니다. |
ExtendedLinks[].Type |
about.resource.attribute.labels.extendedLink_Type.value |
직접 매핑됩니다. |
ExtendedProperties.Account Session Id |
network.session_id |
이름을 accountSessionId 로 바꾼 후 직접 매핑됩니다. |
ExtendedProperties.Alert Id |
metadata.product_log_id |
이름을 alertId 로 바꾼 후 직접 매핑됩니다. |
ExtendedProperties.Authentication type |
extensions.auth.auth_details |
이름을 authenticationType 로 바꾼 후 직접 매핑됩니다. |
ExtendedProperties.Client Application |
principal.application |
이름을 clientApplication 로 바꾼 후 직접 매핑됩니다. |
ExtendedProperties.Client Hostname |
principal.asset.hostname , principal.hostname |
이름을 clientHostName 로 바꾼 후 직접 매핑됩니다. |
ExtendedProperties.Client IP address |
principal.asset.ip , principal.ip |
이름을 clientIpAddress 로 바꾼 후 직접 매핑됩니다. |
ExtendedProperties.Client IP location |
principal.location.country_or_region |
이름을 clientIpLocation 로 바꾼 후 직접 매핑됩니다. |
ExtendedProperties.Client Location |
principal.location.country_or_region |
이름을 clientLocation 로 바꾼 후 직접 매핑됩니다. |
ExtendedProperties.Client Principal Name |
principal.user.userid |
이름을 clientPrincipalName 로 바꾼 후 직접 매핑됩니다. |
ExtendedProperties.Compromised Host |
principal.asset.hostname , principal.hostname |
이름을 compromisedHost 로 바꾼 후 직접 매핑됩니다. |
ExtendedProperties.Suspicious Command Line |
target.process.command_line |
이름을 suspiciousCommandLine 로 바꾼 후 직접 매핑됩니다. |
ExtendedProperties.Suspicious Process |
target.process.file.full_path |
이름을 suspiciousProcess 로 바꾼 후 직접 매핑됩니다. |
ExtendedProperties.Suspicious Process Id |
target.process.pid |
이름을 suspiciousProcessId 로 바꾼 후 직접 매핑됩니다. |
ExtendedProperties.User agent |
network.http.user_agent |
이름을 userAgent 로 바꾼 후 직접 매핑됩니다. |
ExtendedProperties.User Name |
principal.user.user_display_name |
이름을 userName 로 바꾼 후 직접 매핑됩니다. |
ExtendedProperties.resourceType |
principal.resource.name |
직접 매핑됩니다. |
IsIncident |
security_result.detection_fields.IsIncident.value |
직접 매핑됩니다. 문자열로 변환됩니다. |
ProcessingEndTime |
about.resource.attribute.labels.ProcessingEndTime.value |
직접 매핑됩니다. |
ProductName |
metadata.product_name |
직접 매핑됩니다. |
ResourceId |
principal.resource.product_object_id |
직접 매핑됩니다. |
SourceSystem |
security_result.detection_fields.SourceSystem.value |
직접 매핑됩니다. |
StartTime |
about.resource.attribute.labels.StartTime.value |
직접 매핑됩니다. |
Status |
security_result.detection_fields.Status.value |
직접 매핑됩니다. |
SystemAlertId |
metadata.product_log_id |
직접 매핑됩니다. |
Tactics |
security_result.attack_details.tactics.name |
직접 매핑됩니다. |
TenantId |
additional.fields.TenantId.string_value |
직접 매핑됩니다. |
TimeGenerated |
about.resource.attribute.labels.TimeGenerated.value |
직접 매핑됩니다. |
VendorName |
metadata.vendor_name |
직접 매핑됩니다. |
WorkspaceResourceGroup |
target.resource.attribute.labels.WorkspaceResourceGroup.value |
직접 매핑됩니다. |
WorkspaceSubscriptionId |
target.resource.attribute.labels.WorkspaceSubscriptionId.value |
직접 매핑됩니다. |
_Internal_WorkspaceResourceId |
target.resource.product_object_id |
직접 매핑됩니다. |
properties.alertDisplayName |
security_result.rule_name |
직접 매핑됩니다. |
properties.alertType |
security_result.threat_name |
직접 매핑됩니다. |
properties.alertUri |
principal.resource.attribute.labels.AlertUri.value |
직접 매핑됩니다. |
properties.correlationKey |
principal.resource.attribute.labels.correlationKey.value |
직접 매핑됩니다. |
properties.description |
security_result.description |
직접 매핑됩니다. |
properties.endTimeUtc |
additional.fields.EndTime.string_value |
직접 매핑됩니다. |
properties.entities[].location.city |
principal.location.city |
직접 매핑됩니다. |
properties.entities[].location.countryName |
principal.location.country_or_region |
직접 매핑됩니다. |
properties.entities[].location.latitude |
principal.location.region_coordinates.latitude |
직접 매핑됩니다. 부동 소수점 수로 변환됩니다. |
properties.entities[].location.longitude |
principal.location.region_coordinates.longitude |
직접 매핑됩니다. 부동 소수점 수로 변환됩니다. |
properties.extendedProperties.alert_Id |
metadata.product_log_id |
직접 매핑됩니다. |
properties.extendedProperties.clientApplication |
principal.application |
직접 매핑됩니다. |
properties.extendedProperties.clientIpAddress |
principal.asset.ip , principal.ip |
직접 매핑됩니다. IP 주소로 파싱됩니다. |
properties.extendedProperties.clientLocation |
principal.location.country_or_region |
직접 매핑됩니다. |
properties.extendedProperties.clientPrincipalName |
principal.user.userid |
직접 매핑됩니다. |
properties.extendedProperties.compromisedEntity |
principal.resource.attribute.labels.CompromisedEntity.value |
직접 매핑됩니다. |
properties.extendedProperties.resourceType |
principal.resource.name |
직접 매핑됩니다. |
properties.IsIncident |
security_result.detection_fields.isIncident.value |
직접 매핑됩니다. 문자열로 변환됩니다. |
properties.productName |
metadata.product_name |
직접 매핑됩니다. |
properties.resourceIdentifiers[].<key> |
additional.fields.<key>_<index>.string_value |
직접 매핑됩니다. 키 $id 및 type 는 배열의 요소 색인과 함께 추가됩니다. |
properties.severity |
security_result.severity |
값이 HIGH, MEDIUM, LOW, CRITICAL, UNKNOWN_SEVERITY 중 하나인 경우 직접 매핑됩니다. 그 외의 경우에는 security_result.severity_details 로 매핑됩니다. 값은 비교하기 전에 대문자로 변환됩니다. |
properties.startTimeUtc |
additional.fields.StartTime.string_value |
직접 매핑됩니다. |
properties.status |
security_result.detection_fields.Status.value |
직접 매핑됩니다. |
properties.timeGeneratedUtc |
additional.fields.TimeGenerated.string_value |
직접 매핑됩니다. 로그에 제공되지 않으면 'MICROSOFT_DEFENDER_CLOUD_ALERTS'로 설정합니다. 'MICROSOFT_DEFENDER_CLOUD_ALERTS'로 설정합니다. 주 구성원 또는 대상이 있는 경우 'USER_RESOURCE_ACCESS'로 설정하고 그렇지 않으면 'GENERIC_EVENT'로 설정합니다. |
변경사항
2024-07-05
- 'isInteractive'가 'security_result.detection_fields'에 매핑되었습니다.
2024-04-02
- 'properties.createdDateTime'이 'metadata.event_timestamp'에 매핑되었습니다.
- 'properties.resourceServicePrincipalId' 및 'resourceServicePrincipalId'가 'target.resource.attribute.labels'에 매핑되었습니다.
- 'properties.authenticationProcessingDetails', 'authenticationProcessingDetails', 'properties.networkLocationDetails'가 'additional.fields'에 매핑되었습니다.
- 'properties.userAgent'가 'network.http.user_agent' 및 'network.http.parsed_user_agent'에 매핑되었습니다.
- 'properties.authenticationRequirement'가 'additional.fields'에 매핑되었습니다.