Cisco XDR - ドラッグ＆ドロップだけで本格的セキュリティ調査プレイブックを作る（改良版：Ver2.0）

![スクリーンショット 2023-12-20 6.50.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311200/0a58c0ec-9f5e-048e-c821-b73062692a27.png)
<font color="DarkSlateBlue">Cisco Advent Calendar 2023年版: </font>: https://qiita.com/advent-calendar/2023/cisco

# <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311200/80cb9f8a-885e-1f48-12fe-af035d386b2a.png"> はじめに
シスコの同志による今年の Advent Calender "<font color="DarkSlateBlue"><B>Cisco Systems Japan Advent Calendar 2023</B></font>" の 20 日目として投稿しました。このエントリで取り上げるテーマは、

「<B><font color="Red">Cisco XDR - ドラッグ＆ドロップだけで本格的セキュリティ調査プレイブックを作る（改良版：Ver2.0）</font></B>」

です。昨年の Cisco Advent Calender のエントリにて、SecureX 以外に連携コンポーネントの必要が無く、SecureX を基軸に連携された高機能なインテリジェンスからの自動調査を実施するワークフロー作成の手順を取り上げました。SecureX のオーケストレーション機能の構造の理解を深めるとともにPython等のスクリプティングのナレッジを必要としない簡易的なステップでThreat Response APIを利用することを目的としました。前回のワークフローでは、APIから読み込もうとする指定した Observable に情報が無い場合、Casebookを作成できず、実行したはずのワークフローが完了できないという問題がありました。基本的な機能を変更せず Observable 情報の検索を分散した並列処理で収集する方法を追加してみます。

以下が、今回改変したワークフローの変更点です。この記事ではVer1.0からの差分のポイントを取り上げます。すべての作成ステップは含まれません。

- <B><font color="DarkSlateBlue">新規 SecureX Token の利用</B>
- <B><font color="DarkSlateBlue">APIによる並列検索処理を追加する</B>

# <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311200/80cb9f8a-885e-1f48-12fe-af035d386b2a.png"> Ver1.0
ワークフローの基本機能に関する構成や詳細情報は過去の記事でまとめています。
https://qiita.com/sig666/items/0603b12a4d018c065276

GitHub -  SecureX-Workflow-ThreatResponse-QuickSearchToCasebook
https://github.com/sig666/SecureX-Workflow-ThreatResponse-QuickSearchToCasebook

![スクリーンショット 2023-12-20 6.19.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311200/60c6a167-8779-47b6-68e9-dc130a3fb34b.png)

# <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311200/80cb9f8a-885e-1f48-12fe-af035d386b2a.png"> SecureX から Cisco XDR へ
Cisco製 Security 製品をお使いのユーザ向けにセキュリティオペレーションの自動化、インシデントレスポンスと脅威ハンティングの効果的な方法を追加するツールとして、無償提供してきた SecureX が EoS を迎えることになりました。今 SecureX にアクセスすると EoS の日付が大きくアナウンスされるようになっています。

![スクリーンショット 2023-12-20 5.48.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311200/acb0c15f-1ff0-ce85-d9b4-096fb9dfa9be.png)

SecuX 後継の後継となる、<B>Cisco XDR</B> は <B>XDR (Extended Detection and Response)</B> として、大幅な機能改善を行ったプレミアバージョンの製品として 2023 年 7 月 31 日にリリースされました。2017 年の Cisco Threat Response をリリース、2020 年に SecureX をリリース、市場に XDR というカテゴリが存在する前から XDR としての製品開発を続けてきたことになります。

Cisco XDRは、脅威・インシデント分析と可視化、モジュール化された製品統合を機能として提供してきた、これまでの製品を含む以下のコンポーネントの組み合わせで構成しています。

- <B>SecureX</B>：Incident/Observable Enrichment、均質化モデリング (CTIM)、センサー/外部インテリジェンス/外部資産とのモジュール統合
- <B>Secure Cloud Analytics</B>：センサーからのマルチテレメトリ収取、Data Warehouse、Incident Correlation、Attack Chaining
- <B>Cisco XDR UI Widget</B>：新規UIコンポーネント（Control Center、Incident、Automate、Device等）
- <B>Kenna Security</B>：Scoring Method

Cisco XDR は もともとの SecureX で利用している Orchestration Cloud (Action Orchestrator) をそのまま使用しており、<font color="Red">SecureX で作成され稼働しているワークフローは、そのまま Cisco XDR でも利用できます。</font>

# <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311200/80cb9f8a-885e-1f48-12fe-af035d386b2a.png"> 新規 SecureX Token の利用
<B>Cisco XDR Automate</B> (SecureX Orchestration) では、HTTP, AWS, Git, IMAP, JDBC, Meraki, 等様々な "<B>Target</B>" (API Endpoint) を利用できます。API を利用するには当然認証が必要となり、"Target" の内に "<B>Account Key</B>" (認証情報) を設定し、作成・変更するワークフロー内で "Target" を指定します。今回も調査ワークフローのAPIとして、以下の Cisco XDR Rest API (HTTP Target) を利用します。

`/iroh/iroh-enrich/observe/observables`

### <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311200/314463a4-d675-d54e-87da-a566ce52ac5b.png"> これまでの API Token
Cisco XDR 上で "API Client" をジェネレートし、Account Key (HTTP Basic Authentication) を作成、この Account Key をワークフローで利用する Target の Default Account Keys に設定します。

この後に Cisco XDR Enrichment API を利用して、調査対象のドメイン、IP Address、ファイルハッシュ、URL等に対して調査を実行、またはその情報を Cisco XDR に Casebook を書き出すために利用する、API Token の生成が必要なります。

<B>API Client の作成</B>
- [Cisco XDR] "<B>Administration</B>" -> "<B>API Clients</B>" -> "<B>Generate API Client</B>"

<B>Account Key (HTTP Basic Authentication) の作成</B>
- [Cisco XDR] "<B>Automate</B>" -> "<B>Account Keys</B>" -> "<B>New Account Keys</B>"
  - Account Key Type : "<B>HTTP Basic Authentication</B>"
  - Username : "<B>API Client Key</B>"
  - Password : "<B>API Client Secret</B>"
  - Authentication Option : "<B>Basic</B>"

### <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311200/314463a4-d675-d54e-87da-a566ce52ac5b.png"> Cisco XDR (SecureX) Token
SecureX を含むその後のバージョンアップにより、Cisco XDR APIを利用するための専用 Token である <B>Cisco XDR (SecureX) Token</B> が利用できるようになりました。Enrichment API のような HTTP Target の中で、こちらの新しい Token を直接していすることが可能です。

この方式を利用することで API を利用するための一時 Token の生成を自動化し、ワークフロー内でステップを簡素化することができるようになりました。Cisco XDR API を利用する場合、API Client の生成、Account Key (HTTP Basic Authentication) を利用する必要が無くなりました。

<B>Account Key (Cisco XDR Token) の作成</B>
- Account Key Type：　"<B>Cisco XDR Token</B>"
  - 必要な認証情報が自動生成される、ワンクリックのみで生成

![スクリーンショット 2023-12-20 11.12.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311200/fc5fcb34-6172-52ea-472e-56ac762f203b.png)



### <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311200/314463a4-d675-d54e-87da-a566ce52ac5b.png"> ワークフロー作成：新規 Token を利用したEnrich Observable
新規ワークフローの作成を開始します。過去のバージョンで利用した HTTP Basic Authentication の Account Key を利用した Target を利用するより、API Token を生成するためのワークフローステップが省略され API の利用をシンプルに行うことができます。

![スクリーンショット 2023-12-20 12.08.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311200/8ead2cba-7b57-1cf1-861a-ecaebb86b77c.png)

作成するワークフローの Global Parameter を以下のように設定します。

- ワークフローの "Properties" を設定
    - "General" -> "<B>Display Name</B>" 任意のワークフロー名を指定 
    - "<B>Target</B>" -> "<B>Execute on this target group</B>" 
        - <B>Default Target Group</B>
        - "* Select target types" : <B>HTTP Endpoint</B>
        - "Conditions" -> "<B>ADD</B>"
            - "L. OPERAND" : "<B>[$HTTP Endpoint.Display Name$]</B>"
            - "OPERATOR" : "<B>eqi</B>"
            - "R. OPERAND" : "<B><font color="Red">[Cisco XDR Token を設定した新規作成 Target]</font></B>" 
        HTTP API Target の中の、Threat Response 用のデフォルト Target である "CTR_API" を指定する必要はありません。指定する新規作成 HTTP Target が "Default Target Group" にアサインされていることを確認します。こちらで指定した Target名 を Default Target Group から検索します。
        - "* Select target group criteria" : "<B>Choose first with matching criteria</B>"

# <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311200/80cb9f8a-885e-1f48-12fe-af035d386b2a.png"> APIによる並列検索処理を追加する
前回バージョンのワークフローでは、単一で順番に処理されるシンプルなワークフローを構成しています。このため途中処理に探そうとする情報が、前のワークフローで実行された`JSON`アウトプットに含まれていない場合、エラーとなりワークフローの実行が完了されません。細かく並列処理で検索を実行し、情報が得られなかったワークフローのグループを `Continue Workflow Execution On Failure` としエラー検索を許容します。

### <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311200/314463a4-d675-d54e-87da-a566ce52ac5b.png"> 分岐処理の作成
分岐ワークフローを作成するために、"<B>Logic</B>" の "<B>Parallel Block</B>" を利用します。"Parallel Block" で分岐されたそれぞれの後続ワークフローの指定の中に "Logic" の "<B>Group</B>" をドラッグ＆ドロップし、それぞれの"Group"のパラメータの "<B>Continue Workflow Execution On Failure</B>" をチェックします。

ワークフロー分岐Logicを増やす場合、"Parallel Block"内の、"<B>Duplicate</B>" により増やしていくことが可能です。

![スクリーンショット 2023-12-20 12.47.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311200/32589527-be3b-8777-6054-9163d0f29270.png)

### <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311200/314463a4-d675-d54e-87da-a566ce52ac5b.png"> 分岐Logic内に検索ワークフローを作成

最初の Enrichment API からの　Response Output の例です。このアウトプット内容を確認しレポートの対象となるパラメータを決定していきます。

```json:Response Body
{
  "data": [
    {
      "module": "Threatscore | Cyberprotect",
      "module_instance_id": "0e1568db-893b-4168-9264-04dc734b40ff",
      "module_type_id": "5482db38-56d7-4508-bdbf-003cd6d0ce0d",
      "data": {}
    },
    {
      "module": "Umbrella",
      "module_instance_id": "102318f2-ab8d-4f63-88d1-933e18d848f0",
      "module_type_id": "188d70f7-29d5-5069-9098-d83a3ec8e797",
      "data": {
        "verdicts": {
          "count": 1,
          "docs": [
            {
              "type": "verdict",
              "disposition": 5,
              "observable": {
                "value": "akubi.info",
                "type": "domain"
              },
              "judgement_id": "transient:5f3fe719-76c9-4ee8-80e3-84223406bfa7",
              "disposition_name": "Unknown",
              "valid_time": {
                "start_time": "2023-12-19T21:12:27.208Z",
                "end_time": "2024-01-18T21:12:27.208Z"
              }
            }
          ]
        },
```
最終的に作成したワークフローでは、"<B>Judgement</B>"、"<B>Virdict</B>"、"<B>Sighting</B>"、"<B>Module</B>"、"<B>Sightingの詳細情報</B>" の5つに分岐させそれぞれを "Parallel Block" の 各 "Group" 内で実行するようにしてみました。各分岐 "Group" の中で実行される処理は以下のようになっています。
1. <B>Read Table from JSON</B>
Enrichment APIからのObservable情報をテーブルに変換
レポートに必要なパラメータと値を JSON Path で指定し抜き出す
2. <B>Convert Table to XML</B>
レポート用のパラメータ整形のため、JSON フォーマットを XML フォーマットに変換
3. <B>Replace Strings</B>
XML タグを文字変換し、HTML フォーマットに変換
4. <B>Set Variables</B>
各処理のレポート用テキストを作成する

Read Table from JSON で Virdict 情報を抜き出しているパラメータのセット例です。

Read Table
|Property Name|
|:---|
|$.data.*.data.sightings.docs.*|

Read Table *COLUMNS TO READ
|Name|Type|
|:---|:---|
|source|String|
|source_uri|String|
|description|String|
|short_description|String|
|title|String|
|confidence|String|
|sensor|String|
|tlp|String|

# <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311200/80cb9f8a-885e-1f48-12fe-af035d386b2a.png"> ワークフロー全体と実行例
主要な変更を実施したワークフローの全体像です。

![スクリーンショット 2023-12-20 5.49.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311200/12dd59a6-9edd-7865-c720-c36b325eaaeb.png)

ワークフローを実行した例です。情報が取得されないワークフロー Group にエラーが起きても、その情報は抜き出さず、検索できたデータだけでレポートを作成します。実行できたワークフロー Group は<font color="Green"><B>緑色</B></font>で終了し、エラーが起きたワークフロー Group は<font color="Red"><B>赤色</B></font>で表示されています。

![スクリーンショット 2023-12-20 6.15.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311200/7ec1c9e1-0688-8dae-570f-ac9e61ea3dcf.png)

成形したテキストを同じくAPIにて、Cisco XDR Casebookとして追加しています。

![スクリーンショット 2023-12-20 13.41.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311200/8d2d1f2f-71cb-ccda-9025-6323a8eb1f41.png)


# <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311200/80cb9f8a-885e-1f48-12fe-af035d386b2a.png"> Git Repo
[1] @sig666
https://github.com/sig666
[2] SecureX-Workflow-ThreatResponse-QuickSearchToCasebook @sig666
https://github.com/sig666/SecureX-Workflow-ThreatResponse-QuickSearchToCasebook

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311200/0a58c0ec-9f5e-048e-c821-b73062692a27.png">