AIが攻撃者を欺くオープンソースのハニーポットフレームワーク「Beelzebub」
要約
Beelzebubは、サイバー脅威の検出と分析のための安全な環境を作成するためのオープンソースのハニーポットフレームワークです。低コードデザインによる簡単な導入と、AIを使ったハイインタラクションハニーポットの動作エミュレーションが特徴です。
詳細分析
主なポイント
- Beelzebubは、さまざまなハニーポットファミリー(WordPress、Joomla、SSH、MySQL など)を簡単に設定・管理できるオープンソースのフレームワークです。
- YAML ファイルを使って簡単に設定でき、迅速なセットアップと拡張性を実現しています。
- 従来のハニーポットとは異なり、Beelzebubは LLM モジュールによる高度なエミュレーションを行うことで、人的監視の必要がありません。
- 今後は、アラート管理、リアルタイムモニタリング、ワンクリックの継続的デプロイメントなどの機能を持つSaaSバージョンをリリースする予定です。
社会的影響
- Beelzebubのようなオープンソースのハニーポットツールの登場は、セキュリティ研究者やセキュリティチームにとって有益です。
- 自動化された高度なハニーポットの利用により、サイバー攻撃の検知と分析が容易になり、セキュリティ対策の強化につながります。
- Beelzebubのようなツールの普及は、サイバーセキュリティ分野における技術革新と、オープンソースコミュニティの活性化に寄与するでしょう。
編集長の意見
Beelzebubは、AIが攻撃者に対してインタラクティブに対応してくれるという、従来なかったハニーポットのための革新的なフレームワークです。低コードデザインと高度なAIエミュレーションにより、セキュリティ担当者の負担を大幅に軽減できます。今後このようなプロダクトのSaaSバージョンが登場すると、大規模なハニーポット環境の構築と管理が容易になると期待されます。AIとオープンソースの活用によって、セキュリティ分野の技術革新が加速することが期待できます。
本日はこのBeelzebubについて深掘りしていきます。
解説
AIで攻撃者をあざむけ! Beelzebub
Beelzebubは、サイバー攻撃を検出し分析するための安全な環境を構築するために設計された、オープンソースのハニーポットフレームワークです。低コード設計により容易に実装でき、AIを活用して高インタラクションハニーポットの挙動を模倣します。
Beelzebubの具体的な使用方法と、攻撃者を欺くためのコード例を以下に示します。
Beelzebubの利用シナリオ
- 多様なハニーポットの展開: Beelzebubは、WordPress、Joomla、SSH、MySQLなど、さまざまな種類のハニーポットを迅速に設定し管理するために開発されました。YAMLファイルを使用して設定を簡素化し、迅速なセットアップと拡張性を実現します。
- 高インタラクションハニーポット: Beelzebubは、従来のハニーポットとは異なり、LLM(大規模言語モデル)モジュールを搭載した高インタラクションハニーポットとして機能します。これにより、人間の監視を必要とせずに、攻撃者とのインタラクションをシミュレートし、より詳細な攻撃情報を収集できます。
- 脅威分析: Beelzebubは、サイバー攻撃の検出と分析のための安全な環境を提供します。攻撃者の行動を記録し、分析することで、組織のセキュリティ体制を強化するための洞察を得ることができます。
- 開発・テスト環境: Beelzebubは、DevSecOps、DevOps、CI/CDなどの環境で利用できます。
- クラウド環境での利用: Beelzebubは、DockerおよびKubernetesと統合されており、クラウド環境へのデプロイが容易です。
コード例と攻撃者の欺き方
Beelzebubの設定はYAMLファイルで行います。以下に、HTTPハニーポットとSSHハニーポットの例を示します。
HTTP ハニーポットの例
-
ポート80のHTTPハニーポット
この設定例では、ポート80で稼働するWebサーバーを模倣しています。
/index.php
、/index.html
、/
へのリクエストに対しては、WordPress 6のテストページを模倣したHTMLコンテンツを返します。/wp-login.php
または/wp-admin
へのリクエストに対しては、ログインフォームを表示します。その他のリクエストに対しては404エラーを返します。apiVersion : " v1 " protocol : " http " address : " :80 " description : " Wordpress 6.0 " commands : - regex : " ^(/index.php|/index.html|/)$ " handler : <html> <header> <title>Wordpress 6 test page</title> </header> <body> <h1>Hello from Wordpress</h1> </body> </html> headers : - " Content-Type: text/html " - " Server: Apache/2.4.53 (Debian) " - " X-Powered-By: PHP/7.4.29 " statusCode : 200 - regex : " ^(/wp-login.php|/wp-admin)$ " handler : <html> <header> <title>Wordpress 6 test page</title> </header> <body> <form action="" method="post"> <label for="uname"><b>Username</b></label> <input type="text" placeholder="Enter Username" name="uname" required> <label for="psw"><b>Password</b></label> <input type="password" placeholder="Enter Password" name="psw" required> <button type="submit">Login</button> </form> </body> </html> headers : - " Content-Type: text/html " - " Server: Apache/2.4.53 (Debian) " - " X-Powered-By: PHP/7.4.29 " statusCode : 200 - regex : " ^.*$ " handler : <html> <header> <title>404</title> </header> <body> <h1>Not found!</h1> </body> </html> headers : - " Content-Type: text/html " - " Server: Apache/2.4.53 (Debian) " - " X-Powered-By: PHP/7.4.29 " statusCode : 404
-
ポート8080のHTTPハニーポット
この設定例では、ポート8080で認証を求めるApacheサーバーを模倣しています。全てのリクエストに対して、「Unauthorized」というメッセージと401ステータスコードを返します。
apiVersion : " v1 " protocol : " http " address : " :8080 " description : " Apache 401 " commands : - regex : " .* " handler : " Unauthorized " headers : - " www-Authenticate: Basic " - " server: Apache " statusCode : 401
SSH ハニーポットの例
-
OpenAI GPT-4を使用したインタラクティブSSHハニーポット
この設定例では、ポート2222でSSHサーバーを模倣しています。
regex
で指定されたコマンドをplugin
のLLMHoneypot
で処理します。llmModel
で指定されたGPT-4モデルを使って応答を生成し、攻撃者をインタラクティブなセッションに引き込みます。指定されたパスワード(root, qwerty, Smoker666, 123456, jenkins, minecraft, sinus, alex, postgres, Ly123456)を許可します。apiVersion : " v1 " protocol : " ssh " address : " :2222 " description : " SSH interactive OpenAI GPT-4 " commands : - regex : " ^(.+)$ " plugin : " LLMHoneypot " serverVersion : " OpenSSH " serverName : " ubuntu " passwordRegex : " ^(root|qwerty|Smoker666|123456|jenkins|minecraft|sinus|alex|postgres|Ly123456)$ " deadlineTimeoutSeconds : 60 plugin : llmModel : " gpt4-o " openAISecretKey : " sk-proj-123456 "
-
Ollama Llama3を使用したインタラクティブSSHハニーポット
この設定例では、ポート2222でSSHサーバーを模倣しています。
plugin
のLLMHoneypot
でOllama Llama3を使用して応答を生成します。apiVersion : " v1 " protocol : " ssh " address : " :2222 " description : " SSH Ollama Llama3 " commands : - regex : " ^(.+)$ " plugin : " LLMHoneypot " serverVersion : " OpenSSH " serverName : " ubuntu " passwordRegex : " ^(root|qwerty|Smoker666|123456|jenkins|minecraft|sinus|alex|postgres|Ly123456)$ " deadlineTimeoutSeconds : 60 plugin : llmModel : " llama3 " host : " http://example.com/api/chat " # default http://localhost:11434/api/chat
-
カスタムプロンプトを使用したインタラクティブSSHハニーポット
この設定例では、GPT-4を使用し、カスタムプロンプトを用いて応答を生成します。
apiVersion : " v1 " protocol : " ssh " address : " :2222 " description : " SSH interactive OpenAI GPT-4 " commands : - regex : " ^(.+)$ " plugin : " LLMHoneypot " serverVersion : " OpenSSH " serverName : " ubuntu " passwordRegex : " ^(root|qwerty|Smoker666|123456|jenkins|minecraft|sinus|alex|postgres|Ly123456)$ " deadlineTimeoutSeconds : 60 plugin : llmModel : " gpt4-o " openAISecretKey : " sk-proj-123456 " prompt : " You will act as an Ubuntu Linux terminal. The user will type commands, and you are to reply with what the terminal should show. Your responses must be contained within a single code block. "
-
ポート22のSSHハニーポット
この設定例では、ポート22で稼働するSSHサーバーを模倣しています。
ls
、pwd
、uname -m
、docker ps
などのコマンドに対して、あらかじめ定義された応答を返します。その他のコマンドに対しては、「command not found」というメッセージを返します。apiVersion : " v1 " protocol : " ssh " address : " :22 " description : " SSH interactive " commands : - regex : " ^ls$ " handler : " Documents Images Desktop Downloads .m2 .kube .ssh .docker " - regex : " ^pwd$ " handler : " /home/ " - regex : " ^uname -m$ " handler : " x86_64 " - regex : " ^docker ps$ " handler : " CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES " - regex : " ^docker .*$ " handler : " Error response from daemon: dial unix docker.raw.sock: connect: connection refused " - regex : " ^uname$ " handler : " Linux " - regex : " ^ps$ " handler : " PID TTY TIME CMD \n 21642 ttys000 0:00.07 /bin/dockerd " - regex : " ^(.+)$ " handler : " command not found " serverVersion : " OpenSSH " serverName : " ubuntu " passwordRegex : " ^(root|qwerty|Smoker666)$ " deadlineTimeoutSeconds : 60
Beelzebubの実行方法
- Docker Composeを使用する場合
$ docker-compose build $ docker-compose up -d
- Goコンパイラを使用する場合
$ go mod download $ go build $ ./beelzebub --confCore ./configurations/beelzebub.yaml --confServices ./configurations/services/
--confCore
オプションでコア設定ファイルを指定し、--confServices
オプションでサービス設定ファイルのディレクトリを指定します。 - Kubernetesにデプロイする場合
$ helm install beelzebub ./beelzebub-chart
$ helm upgrade beelzebub ./beelzebub-chart
技術的なポイント
- 低コード: Beelzebubは、YAMLファイルによる設定を基本としており、複雑なコードを書く必要がありません。
- AIによる高度な模倣: LLMモジュールを使用することで、攻撃者との高度なインタラクションをシミュレートし、リアルタイムの攻撃情報を収集します。
- 多様なプロトコル: SSH、HTTP、TCPなど、さまざまなプロトコルに対応したハニーポットを構築できます。
- 拡張性: Docker、RabbitMQ、Kubernetesとの統合により、大規模なハニーポット環境を容易に展開できます。
- カスタマイズ性: サービスとポートごとに設定ファイルを記述し、柔軟に設定をカスタマイズできます。
- リアルタイム攻撃通知: Telegramボットを通じてリアルタイムで攻撃通知を受け取ることができます。
そして、AI的な要素として、Beelzebub における大規模言語モデル (LLM) を活用した攻撃者対応の技術的詳細を、日本語でまとめてみました。
攻撃者の行動に応じて、どのようにLLMを利用してリアルタイムで応答を生成し、解析するのかについて、各コンポーネントの役割や設定例、データフローまで詳細に深掘りしてみましたので、ぜひ読んでみてください。
BeelzebubにおけるLLM統合の概要
Beelzebubは、従来の固定応答型ハニーポットとは異なり、LLM(例:OpenAI GPT-4、Ollama Llama3)を利用して、攻撃者との対話をリアルタイムでシミュレートします。これにより、攻撃者は実際のシステムとやり取りしていると錯覚し、より多くの情報や手法が引き出される可能性があります。
-
リアルなシステムの模倣:
攻撃者の入力に応じて、Ubuntu Linuxターミナルなどの実際のシステムのような応答を動的に生成します。 -
動的な出力生成:
攻撃者がls
やdocker ps
といったコマンドを入力すると、LLMがその場でファイル一覧やコンテナ情報を模擬した出力を生成します。 -
攻撃意図の解析:
攻撃者の入力を解析することで、攻撃の手口や目的を把握し、後続のセキュリティ対策やインシデント対応のための貴重なインテリジェンスを提供します。
アーキテクチャの詳細
A. 接続とコマンドのハンドリング
-
接続リスナー:
- 指定されたポート(例:SSHの場合はポート2222)で接続を監視し、攻撃者からの接続を検出します。
-
正規表現によるフィルタ:
- コマンド入力を
^(.+)$
のような正規表現でキャプチャし、すべてのコマンドを漏れなく取得します。
- コマンド入力を
-
コマンドルーター:
- キャプチャされたコマンドは解析され、適切なプラグイン(ここでは LLMHoneypot モジュール)に転送されます。
B. LLMハニーポットモジュール
-
プラグインの設定:
- YAML設定ファイルで
LLMHoneypot
プラグインを指定し、以下のパラメータを設定します:llmModel
: 利用するLLMモデル(例:"gpt4-o" や "llama3")openAISecretKey
: APIキー(外部API利用時の認証用)prompt
: LLMに与えるカスタムプロンプト。例えば、「Ubuntuターミナルとして振る舞う」指示を与え、攻撃者の入力に応じた自然な応答生成を促します。
- YAML設定ファイルで
-
LLM APIの呼び出し:
- 指定されたエンドポイント(例:Ollamaの場合は
http://localhost:11434/api/chat
)に対し、攻撃者のコマンドとプロンプトを送信し、応答を生成します。
- 指定されたエンドポイント(例:Ollamaの場合は
-
動的応答生成:
- 生成された応答は、システムの出力を模倣する形で一つのコードブロック内に整形され、攻撃者に返送されます。
C. 応答解析とログ記録
-
リアルタイムの攻撃分析:
- LLMが生成する応答に加え、攻撃者の入力を解析してその意図や攻撃手法を抽出します。
-
ログの記録とアラート:
- 全てのインタラクションを詳細に記録し、攻撃パターンを追跡します。さらに、Telegramなどの通知システムを通じてリアルタイムにセキュリティチームへアラートが送信されます。
D. インフラ統合
-
低コードのYAML設定:
- 複雑なコードを記述することなく、YAMLファイルで柔軟かつ迅速にハニーポットの設定・展開が可能です。
-
クラウド対応と拡張性:
- Docker、Kubernetes、RabbitMQなどのクラウドインテグレーションにより、大規模な環境への展開と運用が容易です。
YAML設定例
先ほどの例にもありましたが、念のため、ここでも。OpenAI GPT-4を利用した場合の、インタラクティブSSHハニーポットの設定例です。
apiVersion: "v1"
protocol: "ssh"
address: ":2222"
description: "SSH インタラクティブ OpenAI GPT-4"
commands:
- regex: "^(.+)$"
plugin: "LLMHoneypot"
serverVersion: "OpenSSH"
serverName: "ubuntu"
passwordRegex: "^(root|qwerty|Smoker666|123456|jenkins|minecraft|sinus|alex|postgres|Ly123456)$"
deadlineTimeoutSeconds: 60
plugin:
llmModel: "gpt4-o"
openAISecretKey: "sk-proj-123456"
prompt: "You will act as an Ubuntu Linux terminal. The user will type commands, and you are to reply with what the terminal should show. Your responses must be contained within a single code block."
ポイント:
- ポート2222: SSH接続用に設定されたポート。
- 正規表現 (
^(.+)$
): 攻撃者が入力するあらゆるコマンドをキャプチャ。 - パスワードフィルタ: 攻撃者を誘導するために、特定の(しばしば弱い)パスワードのみを許可。
- LLM設定: 使用するモデル、APIキー、カスタムプロンプトにより、実際のターミナル出力を模倣。
詳細なインタラクションフロー
-
接続の確立:
- 攻撃者が指定されたポート(例: 2222)にSSH接続を行います。
- 接続リスナーがセッションを検出し、処理を開始します。
-
コマンドのキャプチャ:
- 攻撃者の入力が正規表現フィルタでキャプチャされ、全てのコマンドが取りこまれます。
- キャプチャされたコマンドは、LLMHoneypotプラグインに転送されます。
-
LLMの呼び出しと動的応答生成:
- プラグインが攻撃者のコマンドとカスタムプロンプトをLLMに送信します。
- LLMがリアルタイムにシナリオに沿った応答を生成します。
-
応答の整形と返送:
- 生成された応答は、コードブロック形式で整形され、攻撃者に返送されます。
- これにより、攻撃者は実際のターミナルと対話しているかのような錯覚を抱きます。
-
解析とログ記録:
- 攻撃者の行動がリアルタイムで解析され、詳細なログとして記録されます。
- 必要に応じて、攻撃の疑いがある場合は即座にアラートがトリガーされ、セキュリティ担当者へ通知されます。
-
クラウドおよびインフラ統合:
- Docker、Kubernetes、RabbitMQなどのインフラと統合し、複数のハニーポットインスタンスを管理・展開します。
- 集約されたログ情報は、中央のセキュリティダッシュボードやSIEMシステムに送信され、詳細に分析されます。
詳細なアーキテクチャとデータフローの図
以下は、Beelzebubの内部構造とインタラクションフローを複雑かつ高度に詳細化したMermaid図です:
(clickで画像を拡大) ---まとめ
Beelzebubは、最新のLLM技術を活用することで、従来のハニーポットを大きく進化させています。
-
リアルな欺瞞:
攻撃者は、本物のシステムと対話しているかのような自然な応答を受け取り、より多くの情報を引き出す可能性が高まります。 -
動的な適応:
攻撃者の入力に応じたリアルタイムな応答生成と解析により、攻撃の手法や意図を的確に把握できます。 -
深い脅威インテリジェンス:
詳細なログ記録と行動解析により、攻撃パターンや潜在的な脅威を迅速に特定し、セキュリティ体制の強化に寄与します。 -
柔軟な拡張性:
低コードのYAML設定、クラウド統合、メッセージブローカーを活用することで、大規模な環境への展開が容易に行えます。
ぜひ、興味を持たれた方は、一度、試してみてください。
AIを活用したハニーポットシステムを構築して、AIで攻めてくる攻撃者を撃退させましょう。
背景情報
- ハニーポットは、サイバー攻撃者を引き付けて行動を観察するためのシステムです。
- 従来のハニーポットは、人手による設定と監視が必要でしたが、Beelzebubはそれを自動化しています。
- Beelzebubの開発者であるMario Candelaは、研究活動でさまざまなハニーポットを展開する必要があったことがきっかけで、このフレームワークを開発しました。