HardHat C2
クロスプラットフォームで協調的な、C#で書かれたコマンド&コントロールフレームワーク。レッドチーム活動と使いやすさを考慮して設計されています。

HardHatは、レッドチーム活動やペネトレーションテストを支援するために設計された、マルチユーザー対応のC# .NETベースのコマンド&コントロール(C2)フレームワークです。堅牢で使いやすいC2フレームワークを提供することで、活動中のクオリティ・オブ・ライフを向上させることを目指しています。
HardHatには3つの主要コンポーネントがあります:
- ASP.NETチームサーバー
- Blazor .NETクライアント
- 組み込みのC#ベースのインプラント
- 他の言語によるサードパーティインプラントのサポート
完全なドキュメントはhttps://docs.hardhat-c2.net/で入手できます。
注意: HardHatはアルファリリースです。バグ、不足している機能、予期しない動作が発生する可能性があります。お試しいただき、ありがとうございます。問題や不足している機能があれば報告してください。対応いたします。
コミュニティ
HardHat C2、プログラミング、レッドチーム活動、一般的なサイバーセキュリティの話題について話すために、Discordコミュニティに参加してください。ヘルプを求めたり、バグや新機能を報告したり、最新の追加情報を入手するのにも最適な場所です。
コードの貢献も歓迎します!機能リクエストやプルリクエストの送信、またはDiscordでアイデアをお寄せください。
機能
カスタムアセットサポート
- アセットとは、チームサーバーとクライアントのためのインプラントと関連プラグインです。利用可能なものを見たり、さらに作成する方法を学ぶには、HardHat Toolboxをチェックしてください。
チームサーバー&クライアント
- ロールベースのアクセス制御(RBAC)を備えた個別のオペレーターアカウント
- アカウントのカスタマイズを許可
- 特定の機能への制限付きアクセスを許可(例:閲覧専用ゲストロール、チームリーダーのopsec承認(WIP))
- マネージャー(リスナー)
- 動的ペイロード生成(EXE、DLL、シェルコード、PowerShellコマンド)
- クライアントでのC2プロファイルのその場での作成と編集
- ペイロード生成のカスタマイズ
- スリープ時間/ジッター
- キル日付
- 稼働時間
- タイプ(EXE、DLL、シェルコード、PowerShellコマンド)
- 含まれるコマンド(WIP)
- ConfuserExを実行するオプション
- ファイルアップロードとダウンロード
- グラフビュー
- ファイルブラウザGUI
- イベントログ
- イベントとタスクのJSONログ
- 戦利品追跡
- 侵害指標(IOC)追跡
- ピボットプロキシ(SOCKS 4a、ポート転送)
- 認証情報ストア
- オートコンプリートコマンド履歴
- 詳細ヘルプコマンド
- クライアントがLinuxの場合は対話型bashターミナル、Windowsの場合はPowerShell
- proxychainsのようなターミナルコマンドの自動解析とログ記録を可能にする
- チームサーバーアイテム(ユーザーアカウント、マネージャー、エンジニア、イベント、タスク、認証情報、ダウンロード、アップロードなど)の永続的なデータベースストレージ
- Reconエンティティ追跡(ユーザー/デバイスに関する情報、必要に応じてランダムなメタデータを追跡)
- 一部のコマンドの共有ファイル(詳細はチームサーバーページを参照)
- コマンド発行のためのタブベースのインタラクトウィンドウ
- 一部のコマンド(例:
ls、psなど)のテーブルベースの出力オプション
- Seatbeltの出力を自動解析して「recon entities」を作成し、便利な参照を提供
- ダークテーマとライトテーマ🤮

エンジニア
- Windowsデバイス向けのC# .NETフレームワークインプラント(現在はCLR/.NET 4のみサポート)
- 現時点では1つのインプラントのみですが、他の追加を検討中
- EXE、DLL、シェルコード、またはPowerShellステイガーとして生成可能
- スリープ時のペイロードメモリとヒープのRC4暗号化(EXE/DLLのみ)
- すべてのネットワーク通信のAES暗号化
- 難読化のためのConfuserEx統合
- HTTP、HTTPS、TCP、SMB通信
- TCPとSMBはバインドまたはリバース構成でピアツーピア(P2P)動作が可能
- コンパイル時に生成されるインプラントごとのユニークキー
- C2プロファイルに応じた複数のコールバックURI
- Windows API呼び出しのためのP/InvokeおよびD/Invoke統合
- SOCKS 4aサポート
- リバースポートフォワードとポートフォワード
- すべてのコマンドは非同期でキャンセル可能なジョブとして実行
- インラインアセンブリ実行とインラインシェルコード実行
- DLLインジェクション
- アセンブリ実行とMimikatz統合
- Mimikatzはインプラントに組み込まれておらず、特定のコマンドが発行されたときにプッシュされる
- さまざまなローカルおよびネットワーク列挙ツール
- トークン操作コマンド
- ラテラルムーブメントコマンド
- ジャンプ(psexec、wmi、wmi-ps、winrm、dcom)
- リモート実行(WIP)
- アンチマルウェアスキャンインターフェース(AMSI)およびWindowsイベントトレーシング(ETW)パッチ
- アンマネージドPowerShell
- スクリプトストアにより複数のスクリプトを一度にロード可能
- Spawn & Inject
- Run、execute、shell

はじめに
インストール
Docker
- DockerとDocker Composeをインストール
docker compose up -dを実行
- オプションで、環境変数として
HARDHAT_ADMIN_USERNAMEやHARDHAT_ADMIN_PASSWORDを指定可能。省略した場合、デフォルトの管理者ユーザー名とランダム生成されたパスワードが初回実行時にチームサーバーログに書き込まれます。
- ブラウザでhttps://localhost:7096/にアクセス
手動
- Microsoftから.NET 7 SDKをインストール
.\TeamServerディレクトリからdotnet runを実行してチームサーバーをビルドして起動
HardHatC2Clientディレクトリからdotnet run https://<TEAMSERVER_HOST>:<TEAMSERVER_PORT>を実行
- 例えば、チームサーバーが同じホストとデフォルトポートで動作している場合:
dotnet run https://127.0.0.1:5000
- ブラウザでhttps://localhost:7096/にアクセス
チームサーバーのリスニングアドレス(クライアントが接続する場所)を設定するには、.\TeamServer\Properties\LaunchSettings.jsonを編集し、"applicationUrl": "https://127.0.0.1:5000"を希望の場所とポートに変更します。
セットアップ
- 環境変数で設定されたか、チームサーバーがSTDOUTに出力したユーザー名とパスワードを使用してクライアントWeb UIにログイン
- 設定ページに移動し、新しいユーザーアカウントを作成
- 成功するとメッセージが表示されます。その後、そのアカウントでログインして完全なクライアントにアクセスできます。
リリース追跡
- Alpha 0.2 リリース - 2023年7月6日
- Alpha リリース - 2023年3月29日