Microsoft Sentinel を ChatGPT を利用してインシデント運用に役立てる

# 1. 目的
ChatGPT、盛り上がっています！
Microsoft 側も様々なサービスに対して ChatGPT との連携が進んでいますが、Microsoft Sentinel から ChatGPT に連携する手法が公開されたため、今回この内容を取り上げてご紹介したいと思います。

# 2. 元となる情報
OpenAI ChatGPT と Microsoft Sentinel を接続する方法は元情報として以下記事を参考にしています。詳細はこちらをご確認下さい。

https://techcommunity.microsoft.com/t5/manufacturing/introduction-to-openai-and-microsoft-sentinel/ba-p/3761907

# 3. 構成イメージ
Microsoft Sentinel を ChatGPT に連携するイメージは以下のようになります。
実際にはロジックアプリで問い合わせているだけなので様々な応用例が考えられますが、今回は Microsoft Sentinel のインシデント発生時に ChatGPT に連携するパッケージを想定しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/e1781e19-74e7-a3ff-35d7-c579d43d77ad.png)

上記連携を行い Microsoft Sentinel でインシデントが作成されると、インシデントの内容を ChatGPT に連携してルール名やルールの説明文から日本語翻訳や概要をコメントとして返してくれるパッケージになっています（ChatGPTへの問い合わせを prompt で日本語依頼を行い、日本語で返すカスタマイズを行っています）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/db5816ec-d19f-072a-3d47-a05d75c472fb.png)

# [参考] ChatGPT を API 連携で使う場合の注意事項 - ライセンス制限あり
Microsoft Sentinel から ChatGPT 連携を行う場合、API を利用してロジックアプリから連携を行うのですが、ChatGPT の無料アカウントでは使用制限があるのでご注意ください。

>ChatGPTの使い方としては、APIを使用することが一般的で、プログラミングスキルがある場合は自分で実装することもできます。一方、無料版ではAPIの使用制限があり、一定量以上のリクエストを行う場合は有料版の利用が必要です。

https://soune.co.jp/about-chatgpt/

試しに無料のアカウントを作成してみたところ、Usage の欄から使用制限量を確認することが出来ました。2023/3 現在``Grant1`` **5$** 分の利用に限られるため、実運用で利用する場合は有料版への登録を行う必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/bcc6248e-5606-287a-2abc-d99849a3de56.png)

例えば、一番強力な DaVinci Engine を利用する場合、```$0.0200 / 1K tokens``` の費用がかかります。文字量に換算すると 250,000 トークン量になり、500 トークンのデータ量を想定すると 500 回分になります。

https://openai.com/pricing#language-models

なお、ロジックアプリの設定では ChatGPT の Engine の選択が出来ますが、実際に Davinci Engine 以外を使ってテストしてみるとかなり微妙な結果が返ってきたりします。特に和訳に至っては機能せず、といったものもありますので、このあたりは費用との考え方が出てくるところです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/1efc8ff7-5b21-8aff-f34f-3c67b463dfd7.png)

# 4. 事前準備
## 4.1 OpenAI API キーの取得
まだ ChatGPT のアカウント登録を行っていない方は、OpenAI 社ホームページからアカウントを作成して下さい。作成後右上に出てくる設定より ``View API Keys`` から API キー情報を取得します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/12bae94f-7640-b1e7-38d2-2ef08a2430d6.png)

## 4.2 ロジックアプリの作成
Microsoft Sentinel のインシデントトリガーで起動するロジックアプリを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/b1219a80-2bc5-e8e9-0fe3-9bff240f2837.png)

## 4.3 ロジックアプリの組み込み
今回作成したロジックアプリは以下になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/4d5be1f9-8e69-06ea-9789-be0f01c4696f.png)

**注意！**
OpenAI 接続時に API Key を入れますが、``Bearer[スペース][APIキー]``といった形式で設定する必要があります。
![image.png](https://techcommunity.microsoft.com/t5/image/serverpage/image-id/448577i4D37F1E3949F9135/image-size/large?v=v2&px=999)

### 1-1. "GPT3 Incident Title" の構成
"Davinci(New)" Engine を利用して、prompt に日本語訳をお願いする文を入れています。temperature パラメータを 0 に設定し、回答にゆらぎが無いようにチューニングしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/649807c8-fa91-16f5-1648-31dfbd0c7ae9.png)

### 1-2. インシデントタイトル和訳の Sentinel インシデント更新
日本語化したルールタイトルは、 Sentinel コネクタの「インシデントにコメントを追加」するステップを入れて情報を更新させています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/3a2a7a97-049b-609c-9954-0abbd07ca915.png)

### 2-1. "GPT3 Incident Description" の構成
"Davinci(New)" Engine を利用して、prompt に日本語訳をお願いする文を入れています。temperature パラメータを 0 に設定し、回答にゆらぎが無いようにチューニングしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/ba70bb9c-f8e9-64dc-5244-24337ae7efb3.png)

### 2-2. インシデント詳細の日本語化（インシデント更新）
ChatGPT で和訳した内容は Sentinel コネクタの「インシデントを更新する」ステップを用いて、説明を上書きさせています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/78101e57-6a70-cc05-4190-99d779ba957b.png)

## 4.4 チューニング補足
ロジックアプリから ChatGPT に情報を送る際に、幾つかのパラメータが提供されています。こちらのパラメーターを理解すると、期待に沿った回答が得られやすくなります。

| Parameter | OpenAI ground | 説明 |
| --- | --- | --- |
| Engine | DaVinci(New)<BR>DaVinci(Old)<BR>Curie<BR>Babbage<BR>Ada | 補完を生成するモデル。OpenAI コネクタではプレイグラウンドの 'text-davinci-003'、'text-davinci-002'、'text-curie-001'、'text-babbage-001'、および 'text-ada-001' に対応します |
| best_of | - | 複数の入力候補を生成し、最適な入力候補を返します。注意して使用してください-これは多くのトークンを消費します! |
| frequency penalty | 0-2 | 0 から 2 の範囲の数値。値が大きいほど、モデルが行を逐語的に繰り返す可能性は低くなります(代わりに、同義語を見つけたり、行を再記述したりしようとします)。 |
| max tokens | (応答長) | トークンで指定された ChatGPT の応答の最大長。1000 つのトークンは、約 0 文字に相当します。チャットGPTの使用はトークンで価格設定されます。API 呼び出しのコストには、プロンプトと応答のトークン長が含まれるため、応答あたりの最小コストを維持する場合は、プロンプトのトークン長を減算して応答の上限を設定します。 |
| n | - | 各プロンプトに対して生成する入力候補の数。プレイグラウンドでプロンプトを複数回再入力するのと同じです。 |
| presence penalty | 0-2 | 0 から 2 の範囲の数値。値が大きいほど、モデルが応答で既に言及されているトピックを繰り返す可能性は低くなります。 |
| temperature | 0-1 | 応答のランダム性 (または創造性) を定義します。<BR>``0`` に設定すると、高度に決定論的で反復的なプロンプト完了が行われ、モデルは常に最も信頼性の高い選択が返されます。<BR>``1``に設定すると、よりランダムに、または必要に応じてその間に、最大限に創造的な返信ができます。 |

``temperature=0`` を設定するとプロンプトを何度再生成しても、ほぼ同じ結果が得られます。これは、GPT3に専門用語の定義を求めるときにうまく機能します。同じ単語を繰り返し使用するモデルの傾向を減らすために頻度ペナルティを追加することで、応答の読みやすさを向上させることができます。``frequency penalty`` を最大値の2に増やして設定してみます。

# 5. 実行結果
## 5.1 期待した結果が出るイメージ
上記の設定を Microsoft Sentinel のオートメーション機能で設定し、ロジックアプリで ChatGPT に和訳させてみました。期待通り、ルール検知時に表示されるルールの説明が和訳されて表示されているのが分かります！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/850b88e6-547f-3948-7748-f2f3ce0db430.png)

ルール本文については、検知時のアラート原文は残して、コメントで追加するようにロジックアプリ側を組んでみました。こちらも追記されているのが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/ed015e90-e4b0-ca57-a5da-d95bfe63f2a6.png)

## 5.2 通知に役立てる
Microsoft Sentinel からのインシデント通知を実現されている方は多いと思いますが、Description を翻訳することで通知内容も和訳したものを情報として送ることで運用改善に役立ちます。Native English と日本語の感覚の違いだけなのですが、やはり日本語って重要ですね。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/79476805-8530-c777-44cc-d2467f22eb48.png)
通知の設定方法については、以前投稿したこちらをご参照下さい。

https://qiita.com/hisnakad/items/cfaeae8c7b92c7d26365

# 5.3 ダメな例 - 和訳がイマイチなケース
OpenAI 活用をフル日本語化してやろう！とタイトルや補足含めて和訳変換やってみたのですが、ルール名は正確な英語文法になっていないからか日本語がおかしい和訳が出てしまいました。タイトルに表示するルール名は原文で残して、運用でルールの詳細を確認するフローにするのが現実的ではないかと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/e8b45356-dcb2-c5ce-c02f-682770ab1856.png)

# 6. その他 Microsoft Sentinel OpenAI テンプレートサンプル
Microsoft Sentinel の OpenAI を活用するテンプレートは GitHub で公開されています。以下のテンプレートはルール補足から SOC オペレータのアドバイスや、一次分析に用いる KQL を応答させる例です。最初にトライアルしてみたい方は、こちらのテンプレートも参考にしていただければと思います。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/dded51a4-b1e6-ae26-31d9-0a2df3435974.png)

https://github.com/format81/MicrosoftSentinel-ChatGPT-playbook

# 7.まとめ
セキュリティ分析の高度活用検討として、OpenAI の連携が既に出来ることが実感できるのではないかと思います。ご興味がある方は本記事をご参考にしていただき、テストしていただければと思います。本記事がどなたかの参考になれば幸いです。

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