はじめに

Security Hubを使用し、Inspectorの脆弱性を重要度別に通知していたところパッケージの脆弱性(CVE)の通知が多く、その他の脆弱性が見えにくいという課題がありました。
実際の運用では、パッケージのHIGH通知が数百件ある一方で、ネットワーク到達性など運用現場でより優先度の高いイベントが埋もれ、見逃しそうになることがありました。
そこでEventBridgeのイベントパターンを使ってFindingのタイプごとに通知する重要度を変える設定で対応しました。以下に設定値と検証方法を記載します。
なお、実現した通知ポリシーは以下のとおりです。

  • パッケージの脆弱性(CVE): CRITICALのみ通知
  • その他の脆弱性(ネットワーク到達性など): HIGHとCRITICALを通知

調査: イベントのどのキーにタイプ情報があるか

EventBridgeのイベントパターンを組み立てるには、Security Hubから届くイベントのどこに「Findingの種類」が入っているかを把握する必要があります。
Security Hubで検出されたFindingのJSONを確認したところ、FindingProviderFields配下のTypes にタイプ情報があることが分かりました。

  • パッケージの脆弱性: Software and Configuration Checks/Vulnerabilities/CVE
  • その他の脆弱性(例): Software and Configuration Checks/AWS Security Best Practices/Network Reachability

※EventBridgeに渡るイベントでは、このTypesdetail.findings内の構造に含まれる形で届くため、パターンではdetail.findings配下でTypesを参照します。

イベントパターンの設計

上記を踏まえ、以下の方針でEventBridgeのイベントパターンを作成しました。

  • CRITICAL → タイプに関係なくすべて通知する
  • HIGH → パッケージ脆弱性(CVE)は対象外とし、それ以外の脆弱性を通知する

これを満たすイベントパターンは以下のとおりです。例ではInspector(ProductName: ["Inspector"])に絞っていますが、ここを変えれば他製品のFindingにもそのまま応用できます。

{
  "source": ["aws.securityhub"],
  "detail-type": ["Security Hub Findings - Imported"],
  "detail": {
    "findings": {
      "ProductName": ["Inspector"],
      "RecordState": ["ACTIVE"],
      "Workflow": { "Status": ["NEW"] },
      "$or": [
        {
          "Severity": { "Label": ["CRITICAL"] }
        },
        {
          "Severity": { "Label": ["HIGH"] },
          "Types": [
            {
              "anything-but": ["Software and Configuration Checks/Vulnerabilities/CVE"]
            }
          ]
        }
      ]
    }
  }
}

パターンの解説:

  • $or で「CRITICAL」か「HIGHかつCVE以外」のどちらかでマッチさせています。
  • HIGHのときだけ anything-but で CVE を除外しているため、パッケージ脆弱性のHIGHは通知されず、それ以外のHIGHは通知されます。

EventBridgeのテスト機能によるイベントパターン検証

ルール反映前に、EventBridgeのイベントパターンテスト機能で動作確認を行いました。
検証内容、期待値、実行結果は以下のとおりです。

検証内容 期待値
パッケージの脆弱性かつ重要度CRITICALのイベント イベントパターンと一致
パッケージの脆弱性かつ重要度HIGHのイベント イベントパターンと一致しない
パッケージ以外の脆弱性かつ重要度CRITICALのイベント イベントパターンと一致
パッケージ以外の脆弱性かつ重要度HIGHのイベント イベントパターンと一致

実行結果は、テスト実施時の画面を以下に示します。

  • パッケージの脆弱性+CRITICAL: イベントパターンと一致することを確認しました。

  • パッケージの脆弱性+HIGH: イベントパターンと一致しないことを確認しました。

  • パッケージ以外+CRITICAL: イベントパターンと一致することを確認しました。

  • パッケージ以外+HIGH: イベントパターンと一致することを確認しました。

さいごに

Security Hubの通知を「一律HIGH/CRITICAL」ではなく、Findingの種類や重要度ごとに通知先や通知有無を変えたい場合に、EventBridgeのイベントパターン($oranything-but の組み合わせ)で実現できることが分かりました。
ProductNameやTypesの条件を変えれば、他のサービスや別タイプのFindingにも応用できますので、運用方針に合わせてカスタマイズしていただければと思います。