はじめに
セキュリティ対策は、多くの企業で実施されています。
AWS 環境では、Security Hub や GuardDuty、Inspector などを用いて環境の保護を行っている企業も多いと思います。
セキュリティ対策を始めた企業で、課題に上がるのはセキュリティ運用です。
セキュリティサービスは、昼夜問わず大量のセキュリティイベントを通知することがあります。
運用担当者は、通常の業務に加えて多くのセキュリティ運用に追われています。
今回、これらの課題に対応するため、Amazon Bedrock(AWS の生成 AI サービス) を用いて自動化をしてみました。
生成 AI とは
生成 AI は、昨今多くの場所で活用され、その推論力がビジネスを変革しています。
生成 AI は ChatBot に代表されるような、ユーザー入力への対応をはじめ、RAG (Retrieval-Augmented Generation) による企業内文書に基づく回答の生成など、多くのことができるようになっています。
生成 AI によるセキュリティ運用を考えたとき、推論や RAG などによる文書に基づく対応では不十分であることに直面します。
たとえば、GuardDuty による、暗号通貨マイニング検出 (CryptoCurrency:EC2/BitcoinTool.B
) を検知した際、セキュリティオペレーターは EC2 の Metrics や、Audit ログ、AWS Config による構成のタイムラインなど多くの情報をもとに検知の妥当性を判断します。
運用に関する文書を基にする機能では不十分であり、今の情報を統合的に判断することが求められます。
今回は、生成 AI を用いてこの課題の解決を試みました。
LangChain
生成 AI で広く利用されるライブラリに LangChain があります。
これは、日々進歩する生成 AI の RAG などの支援や、Amazon Bedrock などの生成 AI エンジンに対するサポートなどを行い、開発者に対する支援を行うものです。
LangChain の機能の一つに、Tools という機能があります。
Tools
Tools の機能として、よく利用されるのは数学計算です。
広く知られていることですが、生成 AI は計算が苦手です。
生成 AI は、文脈を理解して、もっともらしい回答を行うことは得意ですが、数値計算のように答えを導くことは苦手としています。
これらの弱点を補うため、数値計算を実施する Tools などを用意し、生成 AI の外部で計算させます。
たとえば、掛け算を行う場合は以下のようなコードを用意します。
(引用、Create tools using the tool function )
import { tool } from "@langchain/core/tools"; import { z } from "zod"; const multiply = tool( ({ a, b }: { a: number; b: number }): number => { /** * Multiply two numbers. */ return a * b; }, { name: "multiply", description: "Multiply two numbers", schema: z.object({ a: z.number(), b: z.number(), }), } );
これだけだと、Tools は計算を行うだけの機能のように思いますが、Tools の本質はそこではありません。
Tools の本質は、生成 AI が欲しいと思っている情報を提示する、外部機能を提供できるということです。
生成 AI によるセキュリティオペレーション
今回の取り組みは、Tools によって必要な機能を生成 AI に提示し推論を行うことで、生成が『調査』を行い、証拠に基づく『判断』を行えるようにしました。
今回使用したテクニックは、プロンプトチューニング、ガードレール、そして、Tools による情報提示です
これらのテクニックを活用して、生成 AI がセキュリティオペレーターとして動作するように対応しています。
LLM モデル
今回利用したモデルは amazon.nova-lite-v1
です。
Nova は Amazon が作成したモデルで 、日本語にも対応したテキスト推論が可能です。
Nova lite は、軽量でコストとパフォーマンスが良いため、今回のテストで採用しました。
(このモデルが最適な選択肢であるか、私は判断ができませんでした)
プロンプトチューニング
プロンプトでは、『役割』『処理方法』『出力方法』などを提示することで、生成 AI は動作が安定します。
そのため、今回は以下のようなプロンプトをシステムプロンプトとして与えました。
You are a risk analyst. Please analyze the detected risk based on the facts and rate the likelihood of it being True Positive on a scale of 1 to 10. 1 is False Positive and 10 is True Positive. If no signs of attack are found, treat it as a false positive. The response to the user should follow the #Template. Please reply in Japanese. # Template 概要: {Summary of analyze result} スコア: {Score of True Positive} *事実* {Bulleted list of supporting facts.} *補足* {Bulleted supplemental survey results.} *必要な対応* {Itemize research requests to the customer, including obtaining additional information.}
証拠に基づき判断することおよび、攻撃の兆候が見られない場合は誤検知とすることを AI に通知しています。
ガードレール
Amazon Bedrock を含め、生成 AI は性的、侮辱的、犯罪行為など、不適切な回答を実施する場合があります。
そのため、Amazon Bedrock には ガードレール という機能が用意されており、生成 AI による不適切な回答をブロックしています。
多くのユースケースでは、そのままの利用で問題ありませんが、特定のユースケースの場合にはチューニングが必要です。
Bedrock のガードレール機能は、生成 AI を悪用した犯罪を抑止する最低限の機能です。
これらを無効化すると、生成 AI は悪意ある回答を行うことが可能なため、実際にビジネスで利用する際は、リスクアセスメントが必要となります。
セキュリティオペレーションでは、特に犯罪行為や暴力的な表現を多く扱います。
判断材料として、攻撃の手法をやり取りしたり、攻撃の対象を具体化するためです。
そのため、今回のソリューションでは、独自のガードレールを作成し MISCONDUCT
や VIOLENCE
に関する検出を無効にしました。
Tools
今回の取り組みの主たるところです。
今回は、効果の検証であるシナリオに基づき、それを支援する最低限のツールを実装しました。
テスト実行するシナリオを実現するため、『AWS Config の変更履歴の作成』、『CloudMetrics から CPU、Network In / Out の Metrics 取得』、『AWS の Document から、GuadDuty Detect type の詳細取得』の 3つの Tools を作成しました。
Amazon Bedrock の Nova は、インスタンス ID や Detect type をこれらのツールに自動的に渡して、生成 AI 自身が必要な情報を取得します。
効果の検証
今回は、これらを実装したうえで GuardDuty 検出を契機として、調査を行い、報告をするというシナリオを実施しました。
もちろん、実際には攻撃は起きていません。
そのため、誤検知 (False Positive) であることを判断して欲しいシナリオとなります。
入力
入力文は以下のとおりです。
ここで注目して欲しい点は、一切の構造化がされていない文書であるという点です。
一般的にシステムが扱えるファイルは、 JSON や YAML などで構造化され、それが連携システム間でやり取りできる場合に限られます。
今回のように自然な文書を扱えることは、生成 AI を利用するメリットの一つです。
AWS GuardDuty は、i-xxxxxxxxxx の EC2 インスタンスにおいて、 CryptoCurrency:EC2/BitcoinTool.B という検出結果を報告しました。 検出内容: インスタンスID: i-xxxxxxxxxx 検出タイプ: CryptoCurrency:EC2/BitcoinTool.B
処理
下記は、LangChain の処理ダンプ情報の一部です。
生成 AI は、Instgance ID や GuardDuty detect type を取得して Tools に渡していることが観測できます。
{ "tool_calls": [ { "id": "tooluse_jbS62FP4SPeX3dRickFXAQ", "name": "guardduty", "args": { "id": "CryptoCurrency:EC2/BitcoinTool.B" }, "type": "tool_call" }, { "id": "tooluse_7HximA0fTv-SMC-Tirv05w", "name": "metricsEc2", "args": { "id": "i-xxxxxxxxxx" }, "type": "tool_call" }, { "id": "tooluse_1n5_q-35RqSHx9NdSAPQcg", "name": "config", "args": { "id": "i-xxxxxxxxxx" }, "type": "tool_call" } ] }
出力
以下は生成 AI による出力文になります。
今回の場合、CPU 使用率やネットワーク入出力を分析して、これが誤検知 (False Positive)である可能性が高いと報告しました。
# Template 概要: EC2 インスタンスでビットコインマイニングツールの使用を示す可能性のある検出が報告されましたが、 メトリクスからは通常の使用パターンとは異なります。このため、検出が誤報である可能性が高いです。 スコア: 3 *事実* - AWS GuardDuty がインスタンス i-xxxxxxxxxx で CryptoCurrency:EC2/BitcoinTool.B の検出を報告しました。 - EC2 インスタンスのメトリクスでは、CPU 使用率とネットワークの入出力が一貫性のない低い値を示しています。 *補足* - 通常、ビットコインマイニングツールが稼働している場合、CPU 使用率は高く、ネットワークの入出力も一貫性のある高い値を示す傾向があります。 *必要な対応* - インスタンスのログを調べ、実際のアクティビティを確認します。 - インスタンスにインストールされたソフトウェアや実行中のプロセスを確認します。 - インスタンスのセキュリティ設定とアクセスログを調査します。
一方、Tools を無効化した状態の出力は以下のとおりです。
この例では、一般的な情報のみの出力となり、セキュリティ運用としては不十分な結果になってることが確認できます。
# テンプレート 概要: 検出されたCryptoCurrency:EC2/BitcoinTool.Bは、 EC2インスタンスで仮想通貨マイニングツールが実行されている可能性を示しています。 しかし、この検出が正当なものであるかどうかは、さらなる調査が必要です。 スコア: 5 *事実* - AWS GuardDutyがi-0d9932474466bfcd2のEC2インスタンスでCryptoCurrency:EC2/BitcoinTool.Bの検出を報告しました。 - 検出タイプはCryptoCurrency:EC2/BitcoinTool.Bです。 *補足* - 過去の類似検出の分析結果は、この検出が悪意のある活動と関連していることが多いことを示しています。 - インスタンスのログとファイルシステムの調査が必要な場合があります。 *必要な対応* - インスタンスのログファイルを確認して、BitcoinTool.Bに関連するプロセスやコマンドの出現を調べる。 - 実行中のプロセスと開いているネットワークポートの詳細情報を取得する。 - インスタンスで実行されているアプリケーションやサービスのリストを提供する。 - 最近の変更や不審なアクティビティについての詳細情報を提供する。
まとめ
効果の検証を見ていただくと分かる通り、今回の試みはセキュリティ運用の生成 AI による支援として有用な結果であると考えます。
セキュリティイベントに対して、Metrics 他、必要な情報を取得して検知の妥当性を判断します。
今回は Metrics 取得の Tool しか用意しませんでしたが、Amazon Bedrock は現状の情報で不足している情報は追加で取得が必要な情報をまとめて提示するなど、実用可能なレベルで動作しました。
必要な情報を与えることで、セキュリティオペレーターのような高度な役割も、生成 AI に実施させることが可能であるということがわかりました。