Microsoft Sentinel 로그 수집
개요
이 파서는 Microsoft Sentinel JSON 로그에서 필드를 추출하고, IP 주소 추출 및 문자열 조작과 같은 변환을 실행하고, 추출된 데이터를 principal, target, security_result, metadata 필드를 포함하여 UDM에 매핑합니다. 또한 다양한 데이터 유형을 처리하고 추출된 항목을 UDM 구조로 병합합니다.
시작하기 전에
- Google SecOps 인스턴스가 있는지 확인합니다.
- Microsoft Sentinel에 대한 액세스 권한
Microsoft Sentinel 로그를 수집하도록 Google SecOps에서 피드 구성
- SIEM 설정 > 피드로 이동합니다.
- 새로 추가를 클릭합니다.
- 피드 이름 필드에 피드 이름을 입력합니다 (예: Microsoft Sentinel 로그).
- 소스 유형으로 Webhook을 선택합니다.
- 로그 유형으로 Microsoft Sentinel을 선택합니다.
- 다음을 클릭합니다.
- 선택사항: 다음 입력 파라미터의 값을 지정합니다.
- 분할 구분 기호: 로그 줄을 구분하는 데 사용되는 구분 기호입니다(예:
\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
권장사항: URL에 API 키를 지정하는 대신 헤더로 지정하세요. 웹훅 클라이언트가 커스텀 헤더를 지원하지 않는 경우 다음 형식의 쿼리 매개변수를 사용하여 API 키와 보안 비밀 키를 지정할 수 있습니다.
ENDPOINT_URL?key=API_KEY&secret=SECRET
다음을 바꿉니다.
ENDPOINT_URL
: 피드 엔드포인트 URL입니다.API_KEY
: Google Security Operations에 인증하기 위한 API 키입니다.SECRET
: 피드를 인증하기 위해 생성한 보안 비밀 키입니다.
Microsoft Sentinel 이슈에 대한 Logic App 구성
Microsoft Sentinel 이슈용 로직 앱을 구성하려면 다음 단계를 따르세요.
- Azure 포털에 로그인합니다.
- 리소스 만들기를 클릭합니다.
- 'Logic App'을 검색합니다.
- 만들기를 클릭하여 만들기 프로세스를 시작합니다.
- 다음 입력 매개변수의 값을 지정합니다.
- Subscription(구독): 구독을 선택합니다.
- 리소스 그룹: 리소스 그룹을 선택합니다.
- 이름: 로직 앱의 이름을 입력합니다.
- 리전: 리전을 선택합니다.
- 로그 애널리틱스 워크스페이스: 로그 애널리틱스 워크스페이스를 선택합니다.
- 검토 + 만들기를 클릭합니다.
- 만들기를 클릭합니다.
- 로직 앱이 생성되면 리소스로 이동을 클릭합니다.
- 개발 도구 > 로직 앱 디자이너를 클릭합니다.
- 트리거 추가를 클릭합니다.
- Microsoft Sentinel을 검색합니다.
- 트리거로 Microsoft Sentinel 이슈를 선택합니다.
- 아직 Microsoft Sentinel에 대한 연결을 만들지 않았다면 지금 연결을 만들어야 합니다. 새로 만들기를 클릭하고 안내에 따라 인증합니다.
- 새 단계 삽입을 클릭합니다.
- 작업 추가를 클릭합니다.
- HTTP를 검색하여 작업으로 선택합니다.
- 다음 입력 매개변수의 값을 지정합니다.
- URI: 피드 엔드포인트 URL입니다.
- 메서드: POST
- 헤더: 다음 헤더를 추가합니다.
- Content-Type: application/json
- X-goog-api-key: Google Security Operations에 인증할 API 키입니다.
- X-Webhook-Access-Key: 피드를 인증하기 위해 생성한 보안 비밀 키입니다.
Microsoft Sentinel 알림용 Logic App 구성
Microsoft Sentinel 알림용 로직 앱을 구성하려면 다음 단계를 따르세요.
- Azure 포털 홈페이지로 이동합니다.
- 리소스 만들기를 클릭합니다.
- 'Logic App'을 검색합니다.
- 만들기를 클릭하여 만들기 프로세스를 시작합니다.
- 다음 입력 매개변수의 값을 지정합니다.
- Subscription(구독): 구독을 선택합니다.
- 리소스 그룹: 리소스 그룹을 선택합니다.
- 이름: 로직 앱의 이름을 입력합니다.
- 리전: 리전을 선택합니다.
- 로그 애널리틱스 워크스페이스: 로그 애널리틱스 워크스페이스를 선택합니다.
- 검토 + 만들기를 클릭합니다.
- 만들기를 클릭합니다.
- 로직 앱이 생성되면 리소스로 이동을 클릭합니다.
- 개발 도구 > 로직 앱 디자이너를 클릭합니다.
- 트리거 추가를 클릭합니다.
- Microsoft Sentinel을 검색합니다.
- 트리거로 Microsoft Sentinel 알림을 선택합니다.
- 아직 Microsoft Sentinel에 대한 연결을 만들지 않았다면 지금 연결을 만들어야 합니다. 새로 만들기를 클릭하고 안내에 따라 인증합니다.
- 새 단계 삽입을 클릭합니다.
- 작업 추가를 클릭합니다.
- HTTP를 검색하여 작업으로 선택합니다.
- 다음 입력 매개변수의 값을 지정합니다.
- URI: 피드 엔드포인트 URL입니다.
- 메서드: POST
- 헤더: 다음 헤더를 추가합니다.
- Content-Type: application/json
- X-goog-api-key: Google Security Operations에 인증할 API 키입니다.
- X-Webhook-Access-Key: 피드를 인증하기 위해 생성한 보안 비밀 키입니다.
Microsoft Sentinel의 자동화 규칙 구성
Microsoft Sentinel의 자동화 규칙을 구성하려면 다음 단계를 따르세요.
- Microsoft Sentinel 워크스페이스로 이동합니다.
- 구성 > 자동화를 클릭합니다.
- 만들기를 클릭합니다.
- 자동화 규칙을 선택합니다.
- 다음 입력 매개변수의 값을 지정합니다.
- 이름: 자동화 규칙의 이름을 입력합니다.
- 트리거: Incident is created(Incident 생성 시)를 선택합니다.
- 작업: 플레이북 실행 > Incident(Incident)용으로 생성된 Logic App을 선택합니다.
- 적용을 클릭합니다.
- 만들기를 클릭합니다.
- 자동화 규칙을 선택합니다.
- 다음 입력 매개변수의 값을 지정합니다.
- 이름: 자동화 규칙의 이름을 입력합니다.
- 트리거: Incident is updated(Incident가 업데이트될 때)를 선택합니다.
- 조건: 추가 > 조건 (그리고) > 상태 > 변경됨을 클릭합니다.
- 작업: 플레이북 실행 > Incident(Incident)용으로 생성된 Logic App을 선택합니다.
- 적용을 클릭합니다.
- 만들기를 클릭합니다.
- 자동화 규칙을 선택합니다.
- 다음 입력 매개변수의 값을 지정합니다.
- 이름: 자동화 규칙의 이름을 입력합니다.
- 트리거: 알림이 생성될 때를 선택합니다.
- 작업: 플레이북 실행 > 알림용으로 생성된 로직 앱을 선택합니다.
- 적용을 클릭합니다.
UDM 매핑 표
로그 필드 | UDM 매핑 | 논리 |
---|---|---|
AlertGenerationStatus |
security_result.detection_fields.AlertGenerationStatus |
JSON 파싱 후 ExtendedProperties 필드에서 직접 매핑됩니다. |
AlertLink |
principal.labels.AlertLink |
직접 매핑됩니다. |
AlertName |
security_result.rule_name |
직접 매핑됩니다. |
AlertSeverity |
security_result.severity |
직접 매핑되고 대문자로 변환됩니다. 값이 HIGH, MEDIUM, LOW, CRITICAL 또는 UNKNOWN_SEVERITY 중 하나인 경우 security_result.severity 에 매핑됩니다. 그렇지 않으면 security_result.severity_details 에 매핑됩니다. |
AlertType |
security_result.threat_name |
직접 매핑됩니다. |
Category |
security_result.detection_fields.Category |
JSON 파싱 후 ExtendedProperties 필드에서 직접 매핑됩니다. |
CompromisedEntity |
principal.resource.attribute.labels.CompromisedEntity |
직접 매핑됩니다. |
CompromisedEntityId |
security_result.detection_fields.CompromisedEntityId |
JSON 파싱 후 ExtendedProperties 필드에서 직접 매핑됩니다. |
ConfidenceLevel |
security_result.confidence_details |
직접 매핑됩니다. |
ConfidenceScore |
security_result.detection_fields.ConfidenceScore |
직접 매핑됩니다. |
cribl_pipe |
additional.fields.cribl_pipe |
직접 매핑됩니다. |
Description |
security_result.description |
직접 매핑됩니다. |
DestinationDevice |
security_result.detection_fields.DestinationDevice 또는 target.ip |
JSON 파싱 후 ExtendedProperties 필드에서 매핑됩니다. 값이 유효한 IP 주소인 경우 target.ip 에 매핑됩니다. 그렇지 않으면 감지 필드로 매핑됩니다. |
DestinationDeviceAddress |
target.ip |
유효한 IP 주소인 경우에만 JSON 파싱 후 ExtendedProperties 필드에서 매핑됩니다. |
DeviceId |
security_result.detection_fields.DeviceId |
JSON 파싱 후 ExtendedProperties 필드에서 직접 매핑됩니다. |
DisplayName |
security_result.summary |
직접 매핑됩니다. |
EndTime |
about.labels.EndTime |
직접 매핑됩니다. |
Entities.Address |
principal.asset.ip |
JSON 파싱 후 Entities 배열에서 추출됩니다. IP 주소만 매핑됩니다. |
Entities.HostName |
principal.asset.hostname 또는 principal.asset.ip |
JSON 파싱 후 Entities 배열에서 추출됩니다. 값이 유효한 IP 주소인 경우 principal.asset.ip 에 매핑됩니다. 그렇지 않으면 principal.asset.hostname 에 매핑됩니다. |
Entities.IoTDevice.DeviceId |
security_result.detection_fields.IoTDeviceID |
JSON 파싱 후 Entities 배열에서 추출됩니다. |
Entities.IoTDevice.DeviceType |
security_result.detection_fields.IoTDeviceType |
JSON 파싱 후 Entities 배열에서 추출됩니다. |
Entities.IoTDevice.DeviceTypeId |
security_result.detection_fields.IoTDeviceTypeId |
JSON 파싱 후 Entities 배열에서 추출됩니다. |
Entities.IoTDevice.Importance |
security_result.detection_fields.IoTDeviceImportance |
JSON 파싱 후 Entities 배열에서 추출됩니다. |
Entities.IoTDevice.IoTSecurityAgentId |
security_result.detection_fields.IoTSecurityAgentId |
JSON 파싱 후 Entities 배열에서 추출됩니다. |
Entities.IoTDevice.Manufacturer |
security_result.detection_fields.IoT Manufacturer |
JSON 파싱 후 Entities 배열에서 추출됩니다. |
Entities.IoTDevice.OperatingSystem |
principal.asset.platform_software.platform_version |
JSON 파싱 후 Entities 배열에서 추출되었으며 후행 공백이 삭제되었습니다. |
Entities.IoTDevice.PurdueLayer |
security_result.detection_fields.IoT PurdueLayer |
JSON 파싱 후 Entities 배열에서 추출됩니다. |
Entities.IoTDevice.Sensor |
security_result.detection_fields.IoT Sensor |
JSON 파싱 후 Entities 배열에서 추출됩니다. |
ExtendedProperties.Protocol |
security_result.detection_fields.Protocol |
JSON 파싱 후 ExtendedProperties 필드에서 직접 매핑됩니다. |
ExtendedProperties.SensorId |
security_result.detection_fields.SensorId |
JSON 파싱 후 ExtendedProperties 필드에서 직접 매핑됩니다. |
ExtendedProperties.SourceDevice |
principal.ip 또는 security_result.detection_fields.SourceDevice |
JSON 파싱 후 ExtendedProperties 필드에서 매핑됩니다. 값이 유효한 IP 주소인 경우 principal.ip 에 매핑됩니다. 그렇지 않으면 감지 필드로 매핑됩니다. |
ExtendedProperties.SourceDeviceAddress |
principal.ip |
유효한 IP 주소인 경우에만 JSON 파싱 후 ExtendedProperties 필드에서 매핑됩니다. |
IsIncident |
security_result.detection_fields.IsIncident |
직접 매핑되고 문자열로 변환됩니다. |
ProcessingEndTime |
about.labels.ProcessingEndTime |
직접 매핑됩니다. |
ProductComponentName |
principal.resource.attribute.labels.ProductComponentName |
직접 매핑됩니다. |
ProductName |
principal.resource.attribute.labels.ProductName |
직접 매핑됩니다. |
ProviderName |
principal.resource.attribute.labels.ProviderName |
직접 매핑됩니다. |
ResourceId |
principal.resource.product_object_id , target.resource.name |
직접 매핑됩니다. |
SourceComputerId |
principal.asset.asset_id |
직접 매핑되며 접두사로 'SourceComputerId:'가 추가됩니다. |
SourceSystem |
security_result.detection_fields.SourceSystem |
직접 매핑됩니다. |
StartTime |
about.labels.StartTime |
직접 매핑됩니다. |
Status |
security_result.detection_fields.Status |
직접 매핑됩니다. |
SystemAlertId |
metadata.product_log_id |
직접 매핑됩니다. |
Tactics |
security_result.attack_details.tactics.name |
JSON 파싱 및 백슬래시 삭제 후 Tactics 필드에서 추출되었습니다. |
Techniques |
security_result.attack_details.techniques.id |
JSON 파싱 및 백슬래시 삭제 후 Techniques 필드에서 추출되었습니다. |
TenantId |
additional.fields.TenantId |
직접 매핑됩니다. |
TimeGenerated |
about.labels.TimeGenerated |
직접 매핑됩니다. |
timestamp |
metadata.event_timestamp , events.timestamp |
직접 매핑됩니다. |
VendorName |
metadata.vendor_name |
직접 매핑됩니다. |
VendorOriginalId |
additional.fields.VendorOriginalId |
직접 매핑됩니다. |
_time |
metadata.event_timestamp , events.timestamp |
UNIX 또는 UNIX_MS 형식을 사용하여 타임스탬프로 파싱됩니다. |
(파서 로직) | metadata.event_type |
주 구성원, 대상, ResourceId가 있는 경우 'USER_RESOURCE_ACCESS'로 설정합니다. 그 외의 경우에는 'GENERIC_EVENT'로 설정합니다. |
(파서 로직) | metadata.log_type |
'MICROSOFT_SENTINEL'로 설정합니다. |
(파서 로직) | metadata.product_name |
'MICROSOFT_SENTINEL'로 설정합니다. |
변경사항
2023-11-03
- 'ResourceId'가 'target.resource.name'에 매핑되었습니다.
- 'ResourceId'가 'not null'이고 이벤트에 'principal' 또는 'target' 중 하나가 'not null'인 경우 'metadata.event_type'을 'USER_RESOURCE_ACCESS'에 매핑합니다.
2023-08-31
- 파서를 새로 만들었습니다.