Skip to content

Latest commit

 

History

History
206 lines (184 loc) · 12.1 KB

Work3.md

File metadata and controls

206 lines (184 loc) · 12.1 KB

演習3. Sentinel インシデントトリガーからエンティティ属性を抽出して、Defender XDR のアドバンスドハンティングクエリーを実行する

演習2 に加えて、Sentinel のインシデントに含まれるエンティティ情報を利用して Advanced Hunting を実行してみましょう

Microsft Sentinel のインシデント検知をトリガーとして、インシデントに含まれるエンティティ情報から Defender XDR へクエリー分析を自動化するロジックアプリを実践してみましょう。 構成イメージは以下の通りです

image

事前準備

Sentinel のインシデントトリガーのロジックアプリを作成する 

インシデントトリガーのロジックアプリを作成する

  • Sentinel のオートメーションルールから、「インシデントトリガーを使用したプレイブック」を作成します

    image

image

ロジックアプリの編集

1. Sentinel インシデントトリガーから得られるエンティティ情報を格納する

JSON アレイを理解する

  • Sentinel インシデントトリガーから得られるエンティティ情報は JSON アレイ型になっています

    image

  • 例えば、MDE for Linux が EICAR ファイルを検知した際のエンティティ情報は以下のようになります
    • kindHost 属性となるホスト情報
    • kindFile 属性となるファイル名情報
    • kindFileHash 属性となるファイルハッシュ情報
  • ここでは、後述の Advanced Hunting に使うデータとして、ホスト情報を抽出する想定としています
[
  {
    "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/rg-xxx-xxx/providers/Microsoft.OperationalInsights/workspaces/log-hubhnakada-JapanEast/providers/Microsoft.SecurityInsights/Entities/",
    "type": "Microsoft.SecurityInsights/Entities",
    "kind": "Host",
    "properties": {
      "dnsDomain": "rglnoiucbtnuzarcriubjs2azc.lx.internal.cloudapp.net",
      "hostName": "vmlinuxcustomlog",
      "osFamily": "Unknown",
      "osVersion": "7.9",
      "additionalData": {
        "MdatpDeviceId": "95ffd3240bde37ef347cf836db74b13f85cbf185",
        "DeviceDnsName": "vmlinuxcustomlog.rglnoiucbtnuzarcriubjs2azc.lx.internal.cloudapp.net",
        "RiskScore": "informational",
        "HealthStatus": "active",
        "FirstSeenDateTime": "2023-09-04T03:29:26.736412+00:00",
        "RbacGroupName": "Servers",
        "DefenderAvStatus": "notSupported",
        "OnboardingStatus": "onboarded"
      },
      "friendlyName": "vmlinuxcustomlog"
    }
  },
  {
    "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/rg-xxx-xxx/providers/Microsoft.OperationalInsights/workspaces/log-hubhnakada-JapanEast/providers/Microsoft.SecurityInsights/Entities/",
    "type": "Microsoft.SecurityInsights/Entities",
    "kind": "File",
    "properties": {
      "directory": "/home/azureuser",
      "fileName": "eicar.com",
      "fileHashEntityIds": [
        "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/rg-xxx-xxx/providers/Microsoft.OperationalInsights/workspaces/log-hubhnakada-JapanEast/providers/Microsoft.SecurityInsights/entities/",
        "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/rg-xxx-xxx/providers/Microsoft.OperationalInsights/workspaces/log-hubhnakada-JapanEast/providers/Microsoft.SecurityInsights/entities/"
      ],
      "additionalData": {
        "MdatpDeviceId": "95ffd3240bde37ef347cf836db74b13f85cbf185",
        "DetectionStatus": "prevented"
      },
      "friendlyName": "eicar.com"
    }
  },
  {
    "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/rg-xxx-xxx/providers/Microsoft.OperationalInsights/workspaces/log-hubhnakada-JapanEast/providers/Microsoft.SecurityInsights/Entities/",
    "type": "Microsoft.SecurityInsights/Entities",
    "kind": "FileHash",
    "properties": {
      "hashValue": "3395856ce81f2b7382dee72602f798b642f14140",
      "algorithm": "SHA1",
      "friendlyName": "3395856ce81f2b7382dee72602f798b642f14140(SHA1)"
    }
  }
]
  • この演習では、Defender XDR に対してホスト情報を用いて Advanced Hunting クエリーを使用したいので、ホスト情報だけを抽出するため Sentinel 標準コネクタ「エンティティ - ホストを取得」を用います

    image

  • コネクタが追加されましたら、トリガーとなった Sentinel の「エンティティ」リストを適用します

    image

  • このコネクタを用いることで、エンティティの JSON アレイに含まれる情報のうち、kind = Host 条件のものだけを抽出出来たことが分かります

    image

[
  {
    "dnsDomain": "rglnoiucbtnuzarcriubjs2azc.lx.internal.cloudapp.net",
    "hostName": "vmlinuxcustomlog",
    "osFamily": "Unknown",
    "osVersion": "7.9",
    "additionalData": {
      "MdatpDeviceId": "95ffd3240bde37ef347cf836db74b13f85cbf185",
      "DeviceDnsName": "vmlinuxcustomlog.rglnoiucbtnuzarcriubjs2azc.lx.internal.cloudapp.net",
      "RiskScore": "informational",
      "HealthStatus": "active",
      "FirstSeenDateTime": "2023-09-04T03:29:26.736412+00:00",
      "RbacGroupName": "Servers",
      "DefenderAvStatus": "notSupported",
      "OnboardingStatus": "onboarded"
    },
    "friendlyName": "vmlinuxcustomlog",
    "Type": "host"
  },
  {
    "dnsDomain": "(以後省略)",
    },
    "additionalData": {
    "friendlyName": "(以後省略)",
    "Type": "(以後省略)"
  }
]

2. JSON アレイの情報を For Each ループで分解して処理させる

JSON アレイのエンティティ情報をループ処理させる

  • 前プロセスで Host 条件のエンティティ情報だけ抽出が出来ましたが、エンティティには複数の Host 情報が含まれる可能性があるため JSON アレイ型になっています
  • JSON アレイの情報をループ処理させるために For Each ループを用います
  • 「ビルトイン」-> 「制御」-> 「For Each」を選択して下さい。
  • For Each 処理は JSON アレイを入れることで、JSON フィールド毎に分解されます。先に設定した JSON アレイ変数を設定しましょう
    • 先に設定した情報から、「ホスト」を選択します

      image

  • For Each 処理をすることで、前述のJSONアレイは分解され、JSON フィールド毎に処理されます(アレイが外れます)
  {
    "dnsDomain": "rglnoiucbtnuzarcriubjs2azc.lx.internal.cloudapp.net",
    "hostName": "vmlinuxcustomlog",
    "osFamily": "Unknown",
    "osVersion": "7.9",
    "additionalData": {
      "MdatpDeviceId": "95ffd3240bde37ef347cf836db74b13f85cbf185",
      "DeviceDnsName": "vmlinuxcustomlog.rglnoiucbtnuzarcriubjs2azc.lx.internal.cloudapp.net",
      "RiskScore": "informational",
      "HealthStatus": "active",
      "FirstSeenDateTime": "2023-09-04T03:29:26.736412+00:00",
      "RbacGroupName": "Servers",
      "DefenderAvStatus": "notSupported",
      "OnboardingStatus": "onboarded"
    },
    "friendlyName": "vmlinuxcustomlog",
    "Type": "host"
  }

3. For Each ループ内で Defender ATP コネクタを用いて Advanced Hunting クエリーを設定する

演習2と同じ内容で Advanced Hunting Query を設定しましょう

  • 目的となる JSON 情報に分解出来たので、Defender ATP コネクタを接続して、Advanced Hunting Query を設定します
    • ロジックアプリのフロー Defender XDR コネクタを追加
    • 詳細な検索」を選択
    • テナント接続が出てきますので、Entra ID 認証を用いて接続
  • Hunting Query は演習2 と同様なものか、ホスト情報を条件に出来るクエリーを設定して下さい

クエリ例1 - 脆弱性を Fix するセキュリティ更新プログラムを抽出する

DeviceTvmSoftwareVulnerabilities
| where DeviceName contains "(ホスト名)"
| where VulnerabilitySeverityLevel == @"High"
| where RecommendedSecurityUpdate != ""
| distinct RecommendedSecurityUpdate, RecommendedSecurityUpdateId, SoftwareVendor, SoftwareName, SoftwareVersion

クエリ例2 - 対象サーバーのアセット情報からソフトウェアリストを抽出する

DeviceTvmSoftwareInventory
| where DeviceName contains "(ホスト名)"
| distinct SoftwareVendor,SoftwareName,SoftwareVersion
  • ハンティングクエリーを設定する際に、For Each 処理によって JSON アレイから分解されたJSONフィールドの情報をマッピングします
    • ロジックアプリは賢いので、For Each 処理前のプロセスである **エンティティ - ホストを取得「ホスト ホスト名」**を選択した場合でも、自動的に items('For_each')?['HostName'] に変換してくれます!

image

image

  • クエリーが設定出来ましたら、過去のトリガーを再生してテストを行って下さい
    • エンティティのホスト情報が反映されて、Advanced Hunting Query 結果が返ってくれば成功です!

image

4. [オプション] JSON2HTML 成型 / メール通知 / Teams 通知

JSON -> HTML 変換、メール通知 / Teams 通知を実践してみましょう

振り返り

お疲れ様でした!

  • この演習では以下を実践していただきました
    • Microsoft Sentinel コネクタのインシデント情報から JSON アレイを抽出する
    • JSON アレイを処理するために For Each 処理を用いる
    • For Each 処理で分解された個々の JSON 情報を元に Defender ATP コネクタを用いてクエリーを実行する
    • [オプション] 得られた結果を成型して外部通知する
  • まだまだあるよ!次の演習もやってみよう!