
自動ペネトレーションテスト用マルチエージェントシステム (MASAPT)
❗ 免責事項
このツールは大学の講義の一環として、学術・研究目的で開発されています。 同意なしにMASAPTを標的への攻撃に使用することは違法です。
開発者は本ツールによって生じたいかなる損害についても責任を負わず、 MASAPTの悪質な使用を非難します。このツールは現時点ではプロフェッショナルな環境での使用を意図しておらず、 基礎となる理論モデルの 概念実証 に過ぎません。
自動ペネトレーションテストのためのマルチエージェントシステム 🐱💻

SPADE エージェントがXMPPを介して通信し、ペネトレーションテストを調整・実行する自律システムです。CLIツールです!
URLを渡して、少し待って、レポートを読んでください!

これはPythonで開発された 概念実証 のマルチエージェントシステムであり、構造化されたインテリジェントな方法でペネトレーションテストのプロセスを自動化することを目的としています。
最終目標は、ペネトレーションテストタスクの自動化に使用できる、実用的で柔軟かつ分散型のCLIベースのペネトレーションツールを作成することです。
現在の機能:
今後の計画と機能はこちらに記載されています。
難しい。
インストールすべき前提条件と要件はかなりの数があります:
PythonやKaliにあるペネトレーションテストツールに加えて、何らかのXMPPサービスへのアクセスも必要です。システムのテストにはローカルで動作する ejabberd を使用しました。
選択したXMPPサーバーでエージェントを実行するには、以下のユーザーを作成する必要があります。もちろん他のユーザーを作成しても構いませんが、その場合は_masapt_スクリプトでエージェントを作成する際に新しいJIDとPWDパラメータを渡す必要があります。
| JID | PASSWORD |
|---|---|
| repoter@domain | repoterSecret |
前提条件がインストールされ、XMPPがセットアップされた後:
プロジェクトフォルダにcdする
cd ../MASAPT
PATHにディレクトリを追加する
export PATH=$PATH:/path/to/MASAPT
source ~/.bashrc
Pythonの要件をインストールする
pip install -r requirements.txt
masapt スクリプトを実行可能にする
chmod +x masapt
以下のコマンドでシステムを起動します:
masapt -t url/to/target
さらにエージェント追加:
Explorer.py を拡張して以下の機能を追加:
SQLinjector.py を拡張して以下の機能を追加:
Coordinator.py を拡張して以下の機能を追加:
MASAPTシステムは、モジュール式、分散型、実用的 であることを想定して設計されました。つまり、システムを構成するエージェントはメインプロセスから独立しており、アップグレード可能で、既存の「実戦で試された」ペネトレーションテストツールを使用します。
想定された目標を達成するために、エージェントは標準的なペンテストフェーズ(計画 - 実行 - 実行後)から派生した 3層モデル の一部として開発されています。このモデルの概要は下記のImg1で確認できます。
この概要で説明されているすべての理論的概念は(将来のアイデアである**Img 8.**を除き)既にコードに実装されています。これらの概念は、システムへの将来のアップグレードでも引き続き実装されるべきです。
3層モデル の背後にある主なアイデアは、このシステム内のエージェントを整理および分類するためのフレームワークを提供することです。
モデルの第1層には、OSINTの実施とターゲットに関する有用な情報の収集を任務とするExplorerエージェントが含まれます。
第2層には、CoordinatorエージェントとExploitエージェントが含まれます。Coordinatorは、現在のテストにどのエクスプロイトエージェントが参加するかを決定する単一のエージェントです。Exploitエージェントは、その名の通り、SQLインジェクション、XSS、DoS、バッファオーバーフローなどのエクスプロイトを実行するエージェントです。これらのエクスプロイトエージェントは多数存在する可能性があります。
第3層には、すべてのエクスプロイトデータ、結果、データダンプを収集し、最終レポートにまとめる任務を持つReporterが含まれます。レポートはユーザーに表示され、ローカルに保存されます。
最初の画像では、太い矢印がモデル内のデータの流れを表しています。

Img2は最初の画像と同じモデルをより詳細に示しています。エージェントはそれぞれの層にはっきりと表示されています。この画像の 実線 矢印は再びモデル内のデータの流れを表しており、結果としてどのエージェントが相互に通信しているかを示しています。ExplorerエージェントがCoordinatorエージェントにデータを送信し、Coordinatorが次にExploitエージェント(SQLinjector、agent2、agent3)にデータを送信していることがわかります。最後に、エクスプロイトエージェントが収集したすべてのデータはReporterエージェントに渡され、Reporterがそれをコンパイルし、要約してユーザーに提示します。
また、ExplorerエージェントとExploit(SQLinjector)エージェントのみが外部環境(テストターゲット)と対話していることもわかります。これは双方向の 点線 矢印で表されています。
前述の通り、MASAPTシステムの特徴の1つは分散型であることです。この側面の一部は既に実装されており、すべてのエージェントが独立したプログラムとして実装され、メインの(masapt)スクリプトによって実行されます。
Img 3. は、現在のシステムがどのようにセットアップされ、テストされたかを示しています。エージェントはSPADE環境を使用して、ローカルシステム上にセットアップされたXMPP(ejabberd)サーバーを介して通信していることがわかります。テストターゲット(SQLi Labs)もローカルシステム上にセットアップされています。このセットアップはシステムのテストには適していますが、分散システムとしてのMASAPTの完全な能力を示しているわけではありません。
一方、Img 4. はMASAPTの将来の実装の可能性の1つを示しています。これはXMPPを使用して通信し、Dockerを使用して多くの異なるシステム間で実行される分散マルチエージェントシステムを示しています。実線 矢印は再びシステムの通信とデータフローの側面を示し、エージェントが中央XMPPサーバーを介してデータを送受信する方法を示しています。
エージェントがXMPPを介して通信する主な理由は、エージェント間の信頼性が高く言語に依存しない通信手段を提供するためです。このアプローチにより、将来のすべてのエージェントがPythonで記述されたり、SPADE環境を使用したりする必要がなくなります。
その背後にある考え方は、将来的に別のシステムがMASAPTの一部になるユースケースがあるかもしれない(例:他のプログラミング言語で書かれたエージェント)ということです。したがって、この「XMPPアプローチ」は、システムにその種の柔軟性を提供する最善の方法です。
通信能力に加えて、動作はエージェントの2番目に重要な側面です。MASAPTエージェントとその動作は、状態のセットでモデル化されており、それによって有限状態機械になります。SPADE環境は有限状態機械の作成を強力にサポートしています。
以下の図は、エージェントが任意の時点でとりうるすべての状態を示しています。また、どのイベントがエージェントを次の状態に遷移させるかも示しています。将来のすべてのエージェントも同様の方法で実装されるべきです。
将来のすべてのエクスプロイトエージェント(例:DoS、XSS...)は、Img 8. の図をテンプレートとして実装されるべきです。


[1] Audi-1 氏と彼の素晴らしい SQLI labs に大感謝。エラーベース、ブラインドブール、時間ベースのSQLインジェクションのテストに使用しました。
| explorerSecret |
| coordinator@domain | coordinatorSecret |
| sqlinjector@domain | injectorSecret |