CBN 알림을 YARA-L 감지 규칙 알림으로 이전

이 문서에서는 구성 기반 정규화 (CBN) 알림을 YARA-L 감지 알림으로 이전하는 방법을 자세히 설명합니다. 보안 분석가는 이 문서를 참고하여 알림 및 IOC 페이지를 사용하여 서드 파티 시스템의 알림을 계속 받을 수 있습니다.

CBN 알림을 YARA-L 감지 엔진으로 이전

CBN 알림을 이전하려면 다음 옵션을 사용하여 이전 CBN 알림을 감지 규칙 알림으로 사용할 수 있도록 합니다.

UDM 검색 옵션을 사용하면 파서에 alert_state가 설정된 이벤트를 볼 수 있습니다.

security_result.alert_state = "ALERTING"

UDM 검색 결과에서 다음 필드를 살펴보고 환경에서 CBN 알림을 생성하는 소스를 파악할 수 있습니다.

  • Metadata > Vendor Name

  • Metadata > Product Name

Tools API를 사용하여 기본 CBN 알림을 다운로드하고 수동으로 검토

이전 접근 방식은 실행된 알림을 찾는 데 도움이 되지만 이전에 보지 못한 알림의 시나리오는 다루지 않습니다. backstory.googleapis.com/v1/tools/cbn 파서 메서드를 사용하여 기본, 선택한 CBN 또는 모든 CBN을 다운로드하고 is_alert 또는 alert_state 기반 알림을 찾는 데 적용된 파서 로직을 수동으로 검토할 수 있습니다.

CBN 알림을 실제로 사용하는 YARA-L 감지 엔진 규칙 알림으로 포팅할 수 있습니다.

이전에 엔터프라이즈 통계에 CBN 알림으로 표시되었던 Windows Defender 바이러스 백신 알림을 이전합니다.

다음 예에서는 이전에 Enterprise Insights에 CBN 알림으로 표시되었던 Windows Defender 바이러스 백신 알림을 이전하는 방법을 보여줍니다.

  1. 앞에서 설명한 방법 중 하나를 사용하여 알림 예시를 찾습니다.

  2. 원시 로그 / UDM 이벤트 뷰어를 사용하여 안정적인 감지를 제공하는 일부 UDM 필드를 복사합니다. 아래 예시를 참조하세요.

    metadata.vendor_name = "Microsoft"
    metadata.product_name = "Windows Defender AV"
    metadata.product_event_type = "MALWAREPROTECTION_STATE_MALWARE_DETECTED"
    principal.asset.hostname = "client02.example.local"
    security_result.action = "BLOCK"
    security_result.severity = "MEDIUM"
    
  3. 새 YARA-L 감지 엔진 규칙을 만듭니다.

    rule windows_defender_av_monitored_events {
        meta:
        author = "Chronicle"
        description = "Migration of CBN alerts to Google Security Operations YARA-L detection engine rule alert."
        // Severity is set at the Outcome level via security_result.severity
        severity = "INFORMATIONAL"
        priority = "INFORMATIONAL"
    events:
            $windows_defender_av.metadata.vendor_name = "Microsoft"
            $windows_defender_av.metadata.product_name = "Windows Defender AV"
            $windows_defender_av.metadata.product_event_type = "MALWAREPROTECTION_STATE_MALWARE_DETECTED"
            $windows_defender_av.principal.asset.hostname = $host
            // optionally tune to only detection on ALLOW, i.e., failure to BLOCK
            //$windows_defender_av.security_result.action = "ALLOW"
            // optionally tune on severity of detection
            //$windows_defender_av.security_result.severity != "LOW"
    outcome:
            $risk_score = max(
            if ($windows_defender_av.security_result.severity = "UNKNOWN_SEVERITY", 0) +
            if ($windows_defender_av.security_result.severity = "LOW", 25) +
            if ($windows_defender_av.security_result.severity = "MEDIUM", 50) +
            if ($windows_defender_av.security_result.severity = "HIGH", 75) +
            if ($windows_defender_av.security_result.severity = "CRITICAL", 100)
            )
    $severity = array_distinct($windows_defender_av.security_result.severity)
        condition:
        $windows_defender_av
    }
    

CBN 알림이 UDM으로 파싱되지 않은 필드를 사용하는 것처럼 보임

파서 확장 프로그램 옵션을 사용하면 이 시나리오를 빠르게 해결할 수 있습니다.

예를 들어 Corelight CBN 알림은 notice 필드를 사용하며 true인 경우에만 조건부로 알림을 보냅니다.

if [notice] == "true" {
  mutate {
    replace => {
      "is_significant" => "true"
      "is_alert"       => "true"
    }
  }
}

이 값은 기본적으로 UDM으로 표준화되지 않으므로 다음과 같이 파서 확장 프로그램 Grok을 사용하여 이 값을 Additional 유형의 UDM 필드로 추가할 수 있습니다.

filter {
    mutate {
        replace => {
            "notice" => ""
        }
    }
    grok {
        match     => { "message" => [ "(?P<message>\{.*\})$" ] }
        on_error  => "_grok_not_syslog"
        overwrite => [ "message" ]
    }
    json {
        on_error       => "not_json" 
        source         => "message"
        array_function => "split_columns"
    }
    if ![not_json] {
        if [notice] != "" {
            mutate {
                convert => {
                    "notice" => "string"
                }
            }
            mutate {
                replace => {
                    "additional_notice.key" => "notice"
                    "additional_notice.value.string_value" => "%{notice}"
                }
            }
            mutate {
                merge => {
                    "event1.idm.read_only_udm.additional.fields" => "additional_notice"
                }
            }
            mutate {
                merge => {
                    "@output" => "event1"
                }
            }
        }
    }
}

그런 다음 다음과 같이 YARA-L 감지 엔진 규칙에서 Maps 함수를 사용하여 이를 활용할 수 있습니다.

events:
    // Corelight : Weird Log
    (
        $corelight.metadata.vendor_name = "Corelight" and
        $corelight.metadata.product_name = "Zeek" and
        // this requires a custom parser extension to extract notice
        $corelight.metadata.product_event_type = "weird" and
        $corelight.additional.fields["notice"] = "true"
    )

알림을 사용하려면 작성된 규칙을 사용 설정하고 사용 설정해야 합니다. 자세한 내용은 실시간 데이터에 대한 규칙 실행을 참고하세요.