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 をダウンロードし、適用されたパーサー ロジックを手動で確認して、is_alert ベースまたは alert_state ベースのアラートを探すことができます。

CBN アラートは、実際に使用する YARA-L 検出エンジンルールのアラートに移植できます。

以前は Enterprise Insights で 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"
                }
            }
        }
    }
}

次のように、Maps 関数を使用して、これを YARA-L 検出エンジン ルールで使用できます。

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"
    )

アラート用に作成したルールを有効にする必要があります。詳細については、ルールのライブデータを実行するをご覧ください。