Microsoft Sentinel を用いて、インシデントを Microsoft Teams に自動通知させる

# 1. はじめに
Microsoft Sentinel を用いて、インシデント検知時に Microsoft Teams への自動通知を設定したのでメモ。

# 2. 構成図
本構成のシステム構成図を紹介します。
目的は Microsoft Sentinel を運用監視する際に、高インシデントが発生したタイミングで Microsoft Teams にインシデント情報アラートを発行することです。
Microsoft Defender for Cloud は Microsoft Sentinel に対する脅威アラート生成として、今回はサンプルアラート機能を用いて検証を行っています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/e3ccaeab-e696-d7be-e43f-7db5d074ee1c.png)

# 3. 設定方法
-  Microsoft Sentinel より、オートメーションにて、「プレイブックテンプレート」から 「Teams にメッセージを投稿する」を選択します。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/a8cc848c-4105-9082-d43d-53b5fc903bcd.png)
-  プレイブックの作成で、必要となるパラメータを投入します。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/e9aad41b-48d8-b884-8a58-82dc02bc4a16.png)
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/1b8fc212-7973-0337-33de-80a282e3de65.png)

-  ロジックアプリにて、「**PostMessageTeams**」が作成されたことを確認します。
    - テンプレート導入直後は、Microsoft Teams への認証が成立していないため、デザイナー画面から設定を行います。
        - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/e5da17ee-2c70-dd81-987d-96ce1d27579a.png)
        - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/259383bb-be91-65be-72ca-166e525c624d.png)
    - ロジックアプリデザイナーの設定で、Microsoft Teams を利用する AAD ログインを行い、対象のチーム名、チャネル名を読み出します。
        - この設定では、重要度毎に Logic App を振り分けて、Severity = High のものを「重要度高」に飛ばす設定にしています。
        - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/fe0e476b-4580-bb9f-4876-9fc0c7504697.png)
        - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/c0741ab0-fa73-7e3e-1ea8-627116478bea.png)


-  Microsoft Sentinel に戻り、「オートメーション ルール」の作成を行います。
    -  プレイブックの実行で権限がない場合は、Sentinel の実行権限が無い表示が出ますが、その際に直下に表示される「編集」設定を実施することで、Sentinel の実行権限を直接付与して進めることも出来ます。
        -  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/ac16dda4-d5e2-8a62-2d19-0d5b01fa189f.png)
    -  最終設定を確認しておきます。
        -  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/c160db60-d395-f12e-a0f1-0e556169d600.png)

# 4. 試してみる ～ 動作確認
今回は Microsoft Sentinel のアラート通知のため、Microsoft Defender for Cloud のサンプルアラート機能を用いました。
Microsoft Defender for Cloud では、IaaS/PaaS 環境に対する保護として Microsoft Defender シリーズの構成、導入を行える機能（CWPP - Cloud Workload Protection Platform）があり、サンプルアラートを生成する機能があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/02ca9c2c-10e3-e174-e77c-79ee878e07b6.png)

- 本機能を用いてサンプルアラートを生成すると、Microsoft Defender for Cloud からは、「セキュリティ警告」にサンプルのイベントが生成されます。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/6ab5c8dc-cb65-f288-6891-89f2ab6672ef.png)
- Microsoft Sentinel 側でコネクターを有効にしておくと、Microsoft Sentinel 側でも脅威イベントのイベントをインシデントとして検知することが出来ます。
    - Sentinel を活用することで、IPアドレスやホスト名といった脅威アクターを識別し、エンティティとして他のインシデントと関連付けて調査することが出来るようになります。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/9d45fc05-bd41-ab96-ae12-3377d50e791a.png)
- Microsoft Teams 側では、フィルターを行った情報に基づいて通知が行わているか確認します。
    - 今回のトリガーである「Severity=High」に基づいて、Teams側にアラート生成されていることが分かります。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/fcf80396-d7bb-3ecb-fd9d-349e394d09f4.png)

# 5. カスタマイズ
Logic App で通知する元情報を少しカスタマイズしてみました。
ここではインシデント作成時間、インシデント説明、戦術（タクティクス）などを付加しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/1328c805-4a22-6ab6-4ccd-a966c78e9521.png)

HTMLのURL埋め込みについては、ロジックアップのコードビュー側で Body に入る Contentを直接編集してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/06ae4555-6850-5c01-5f62-81ca4d7d1192.png)

POST時にJSONで渡されるため、 `"` についてはエスケープ `\"` するように埋め込みます。

```json
URL:</strong><a href=\"@{triggerBody()?['object']?['properties']?['incidentUrl']}\">@{triggerBody()?['object']?['properties']?['incidentUrl']}</a>
```

出力された内容がこちらです。内容がBusyにならないように、初動時に活用できる情報に限定して通知するのが良いのではと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/8bb5251b-4f1c-36b9-4da9-3953b230c32e.png)

通知の元情報となるサンプルイベントのJSON Bodyを添付しておきます。

```json
{
  "eventUniqueId": "79a9fd40-52d6-45f0-8f07-603903aeb5ca",
  "objectSchemaType": "Incident",
  "objectEventType": "Create",
  "workspaceInfo": {
    "SubscriptionId": "9da7c7a8-20fa-4153-85aa-35edec7cf15e",
    "ResourceGroupName": "rg-hnakada-vse-useast",
    "WorkspaceName": "log-hnakada-eastus"
  },
  "workspaceId": "7918a267-da6a-46b5-bceb-43637f5f60ed",
  "object": {
    "id": "/subscriptions/9da7c7a8-20fa-4153-85aa-35edec7cf15e/resourceGroups/rg-hnakada-vse-useast/providers/Microsoft.OperationalInsights/workspaces/log-hnakada-eastus/providers/Microsoft.SecurityInsights/Incidents/6d85011d-ab58-4379-b2b7-0e04b1767b45",
    "name": "6d85011d-ab58-4379-b2b7-0e04b1767b45",
    "etag": "\"1f00a98b-0000-0100-0000-61ee270d0000\"",
    "type": "Microsoft.SecurityInsights/Incidents",
    "properties": {
      "title": "[SAMPLE ALERT] Access from a Tor exit node to a storage account",
      "description": "THIS IS A SAMPLE ALERT: Someone has accessed your Azure Storage account 'Sample-Storage' from a suspicious IP address (active Tor exit node).",
      "severity": "High",
      "status": "New",
      "owner": {
        "objectId": null,
        "email": null,
        "assignedTo": null,
        "userPrincipalName": null
      },
      "labels": [],
      "firstActivityTimeUtc": "2022-01-24T04:11:03.8067638Z",
      "lastActivityTimeUtc": "2022-01-24T04:11:03.8067638Z",
      "lastModifiedTimeUtc": "2022-01-24T04:11:57.388967Z",
      "createdTimeUtc": "2022-01-24T04:11:57.388967Z",
      "incidentNumber": 22,
      "additionalData": {
        "alertsCount": 1,
        "bookmarksCount": 0,
        "commentsCount": 0,
        "alertProductNames": [
          "Azure Security Center"
        ],
        "tactics": [
          "PreAttack"
        ]
      },
      "relatedAnalyticRuleIds": [
        "/subscriptions/9da7c7a8-20fa-4153-85aa-35edec7cf15e/resourceGroups/rg-hnakada-vse-useast/providers/Microsoft.OperationalInsights/workspaces/log-hnakada-eastus/providers/Microsoft.SecurityInsights/alertRules/asclcg224fdz4hlq",
        "/subscriptions/9da7c7a8-20fa-4153-85aa-35edec7cf15e/resourceGroups/rg-hnakada-vse-useast/providers/Microsoft.OperationalInsights/workspaces/log-hnakada-eastus/providers/Microsoft.SecurityInsights/alertRules/asctr6cptlz2imoa",
        "/subscriptions/9da7c7a8-20fa-4153-85aa-35edec7cf15e/resourceGroups/rg-hnakada-vse-useast/providers/Microsoft.OperationalInsights/workspaces/log-hnakada-eastus/providers/Microsoft.SecurityInsights/alertRules/ascccd6oboniysty"
      ],
      "incidentUrl": "https://portal.azure.com/#asset/Microsoft_Azure_Security_Insights/Incident/subscriptions/9da7c7a8-20fa-4153-85aa-35edec7cf15e/resourceGroups/rg-hnakada-vse-useast/providers/Microsoft.OperationalInsights/workspaces/log-hnakada-eastus/providers/Microsoft.SecurityInsights/Incidents/6d85011d-ab58-4379-b2b7-0e04b1767b45",
      "providerName": "Azure Sentinel",
      "providerIncidentId": "22",
      "alerts": [
        {
          "id": "/subscriptions/9da7c7a8-20fa-4153-85aa-35edec7cf15e/resourceGroups/rg-hnakada-vse-useast/providers/Microsoft.OperationalInsights/workspaces/log-hnakada-eastus/providers/Microsoft.SecurityInsights/Entities/",
          "type": "Microsoft.SecurityInsights/Entities",
          "kind": "SecurityAlert",
          "properties": {
            "systemAlertId": "bd0a1a7c-c271-ebc6-3b6e-f8c49622fbb0",
            "tactics": [
              "PreAttack"
            ],
            "alertDisplayName": "[SAMPLE ALERT] Access from a Tor exit node to a storage account",
            "description": "THIS IS A SAMPLE ALERT: Someone has accessed your Azure Storage account 'Sample-Storage' from a suspicious IP address (active Tor exit node).",
            "remediationSteps": [
              "• Limit access to your storage account, following the 'least privilege' principle: https://go.microsoft.com/fwlink/?linkid=2075737.\r\n• Revoke all storage access tokens that may be compromised and ensure that your access tokens are only shared with authorized users.\r\n• Ensure that storage access tokens are stored in a secured location such as Azure Key Vault. Avoid storing or sharing storage access tokens in source code, documentation, and email."
            ],
            "confidenceLevel": "Unknown",
            "severity": "High",
            "vendorName": "Microsoft",
            "productName": "Azure Security Center",
            "alertType": "SIMULATED_Storage.Blob_TorAnomaly",
            "processingEndTime": "2022-01-24T04:11:39.8067638Z",
            "status": "New",
            "endTimeUtc": "2022-01-24T04:11:03.8067638Z",
            "startTimeUtc": "2022-01-24T04:11:03.8067638Z",
            "timeGenerated": "2022-01-24T04:11:57.3040094Z",
            "compromisedEntity": "Sample-Storage",
            "providerAlertId": "2517593033361932361_9c1a2e32-4547-406f-82f2-7ce689382fa6",
            "alertLink": "https://portal.azure.com/#blade/Microsoft_Azure_Security_AzureDefenderForData/AlertBlade/alertId/2517593033361932361_9c1a2e32-4547-406f-82f2-7ce689382fa6/subscriptionId/9da7c7a8-20fa-4153-85aa-35edec7cf15e/resourceGroup/Sample-RG/referencedFrom/alertDeepLink/location/centralus",
            "resourceIdentifiers": [
              {
                "type": "AzureResource",
                "resourceId": "/SUBSCRIPTIONS/9da7c7a8-20fa-4153-85aa-35edec7cf15e/RESOURCEGROUPS/Sample-RG/providers/Microsoft.Storage/storageAccounts/Sample-Storage",
                "subscriptionId": "9da7c7a8-20fa-4153-85aa-35edec7cf15e"
              },
              {
                "type": "LogAnalytics",
                "workspaceId": "7918a267-da6a-46b5-bceb-43637f5f60ed"
              }
            ],
            "additionalData": {
              "resourceType": "Storage",
              "Investigation steps": "{\"displayValue\":\"View related storage activity using Storage Analytics Logging. See how to configure Storage Analytics logging and more information.\",\"kind\":\"Link\",\"value\":\"https:\\/\\/go.microsoft.com\\/fwlink\\/?linkid=2075734\"}",
              "Potential causes": "This alert indicates that this account has been accessed successfully from an IP address that is known as an active exit node of Tor (an anonymizing proxy). The severity of this alert takes into account the authentication type used (if any), and whether this is the first case of such access. \r\nPotential causes:\r\n• An attacker has accessed your storage account using Tor.\r\n• A legitimate user has accessed your storage account using Tor.",
              "Client IP address": "00.00.00.00",
              "Client location": "Azure Data Center: East Us",
              "Authentication type": "Anonymous",
              "Operations types": "GetBlob",
              "Service type": "Azure Blobs",
              "User agent": "dummyAgent",
              "Container": "eicarTestStorageContainer",
              "Test: Slice start time": "01/24/2022 04:11:03",
              "Test: Pipeline name": "1.0.4656.1_storagetd-brs-a3",
              "ProcessedBySentinel": "True",
              "Alert generation status": "Full alert created"
            },
            "friendlyName": "[SAMPLE ALERT] Access from a Tor exit node to a storage account"
          }
        }
      ],
      "bookmarks": [],
      "relatedEntities": [
        {
          "id": "/subscriptions/9da7c7a8-20fa-4153-85aa-35edec7cf15e/resourceGroups/rg-hnakada-vse-useast/providers/Microsoft.OperationalInsights/workspaces/log-hnakada-eastus/providers/Microsoft.SecurityInsights/Entities/",
          "type": "Microsoft.SecurityInsights/Entities",
          "kind": "Ip",
          "properties": {
            "address": "00.00.00.00",
            "location": {
              "countryName": "United States",
              "city": "Washington"
            },
            "friendlyName": "00.00.00.00"
          }
        }
      ],
      "comments": []
    }
  }
}
```

# 6. 注意事項など
当方の環境では、個々のイベント（今回の1インシデント）に対して、およそ2～4秒の時間がかかることが見て取れます。
インシデントの通知が大量に発生する環境では、イベントの遅延やリソース課金などの影響も考えられるため、今回のような通知に対する閾値を考慮した運用通知設計を考えて頂くのが良いのではないかと思います。![image.png](https://camo.qiitausercontent.com/a50dadd14886ce96f9f2d1ffc74bfbbee55a93c5/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3635333739302f30653134636635642d633463632d326466622d363263612d3433663730626163646337642e706e67)

# 7. まとめ
以上、Microsoft Sentinel のセキュリティインシデントを Microsoft Teams に通知する設定例でした。
どなたかの参考になれば幸いです。

＊本稿は、個人の見解に基づいた内容であり、所属する会社の公式見解ではありません。また、いかなる保証を与えるものでもありません。正式な情報は、各製品の販売元にご確認ください。