
収集 収集 収集

Jackdawは、ドメイン内のすべての情報を収集し、SQLデータベースに保存し、ドメインオブジェクトが互いにどのように相互作用するか、そして潜在的な攻撃者がこれらの相互作用をどのように悪用する可能性があるかを示す美しいグラフを表示するためのツールです。 また、ハッシュ/パスワード/ユーザーを保存、検索、レポートすることで、パスワードクラッキングプロジェクトを支援する便利な機能も備えています。
dbinit で最初に空のデータベースを作成する必要があります。enum を実行する必要があります。Windowsでは実行ファイルをダブルクリックするか、jackdaw.exe auto と入力することで自動的に実行できます。nest を実行してWebインターフェースを起動します。デフォルトでは http://127.0.0.1:5000/nest で提供され、http://127.0.0.1:5000/ui にはSWAGGERドキュメント化されたAPIがあります。Generate graph cache をクリックして(一度だけ)エッジ情報をキャッシュファイルに保存する必要があります。時間がかかる場合がありますが、コマンドラインに進行状況バーが表示されます。graph view でグラフを操作できますが、左上の正しいキャッシュ番号を選択することを忘れないでください。このセクションはユーザーフィードバックに基づいて定期的に更新されます。
ここではアドバイスはありません。コード上で改善できる点はありますが、汎用的なものでは何もできません。
各グラフに対して一度だけ実行する必要があるグラフデータキャッシュファイルの生成は、デフォルトのsqlalchemyツールを使用すると時間がかかる場合があります。
SQLiteバックエンドを使用し、かつ sqlite3 コマンドラインユーティリティを PATH のどこかに置くことで、パフォーマンスと速度を大幅に向上させることができます(速度は50倍以上、メモリは20分の1未満)。すべてのユーザーにこれを推奨します。
ここが大きなトレードオフの部分です。Jackdawの初期実装では、グラフバックエンドとして networkx モジュールを使用していました。これは完全にPythonで書かれているためです。しかし、これには非常に大きなメモリと速度のコストがかかりました。Jackdawを純粋なPythonのままにする場合、このオプションはまだ存在しますが、現在は igraph バックエンドを使用するのがデフォルトです。
注: igraph はC++ライブラリで、Pythonバインディングがあります。Windowsおよび主要なLinuxディストリビューション向けのプリコンパイル済みホイールがありますが、Jackdawを他の環境(組み込みシステム/モバイル/Webブラウザ)で使用する場合は、networkx に戻すか、長時間のコンパイル時間を受け入れる必要があります。
データベースを事前に初期化する必要はありません。自動的に行われます。
配布バイナリを使用する場合は、jackdaw.exe をダブルクリックするだけです。
Pythonスクリプトとして使用する場合: jackdaw auto
jackdaw --sql sqlite:///<フルパス>/test.db dbinit
Linuxシステムでは <フルパス> に先頭の / が含まれるため、ファイル名の前に //// の4つのスラッシュが入ります。驚かないでください。
jackdaw --sql sqlite:///test.db enum 'ldap+sspi-ntlm://<ドメイン>\<プレースホルダ>@10.10.10.2' 'smb+sspi-ntlm://<ドメイン>\<プレースホルダ>@10.10.10.2'
パスワードは Passw0rd! です。
jackdaw --sql sqlite:///test.db enum 'ldap+ntlm-password://TEST\victim:[email protected]' 'smb+ntlm-password://TEST\victim:[email protected]'
パスワードは Passw0rd! です。
jackdaw --sql sqlite:///test.db ldap 'ldap+ntlm-password://TEST\victim:[email protected]'
jackdaw --sql sqlite:///<DBのフルパス> nest
APIの場合は http://127.0.0.1:5000/ui を開きます。
UIのビルド方法については、下の「UIのビルド」セクションを参照してください。ビルドが完了したら:
グラフインターフェースの場合は http://127.0.0.1:5000/nest を開きます(グラフは表示されますが、完全には機能していません)。
LDAP列挙フェーズでは、AD情報、ユーザー、マシン、OU、グループオブジェクトのデータを収集します。これらはグラフ内のノードとして、またDB内の個別のテーブルとして表現されます。さらに、上記のすべてのオブジェクトのセキュリティ記述子が解析され、DACLのACLがDBに追加されます。これはメンバーシップ情報とともに、グラフ内のエッジとして表現されます。また、必要に応じて上記のデータタイプに対してカスタムSQLクエリを実行することもできます。
SMB列挙フェーズでは、ドメイン内の各マシン(LDAPで取得)に接続して、共有、ローカルグループ、セッション、NTLMデータを収集します。
Kerberosモジュールは自動的にKerberoastingとAS-REP Roastingを実行します。
このフレームワークでは、LSASSメモリダンプをアップロードして資格情報を保存し、セッション情報テーブルを拡張できます。これらは両方ともグラフ内の追加エッジとして使用されます(それぞれ共有パスワードとセッション)。フレームワークはこの情報を使用して、脆弱/共有/クラック済み資格情報のパスワードレポートを作成します。
このフレームワークでは、impacketのDCSYNCファイルをアップロードして資格情報を保存できます。これはグラフ内の追加エッジとして使用されます(共有パスワード)。フレームワークはこの情報を使用して、脆弱/共有/クラック済み資格情報のパスワードレポートを作成します。
このフレームワークでは、利用可能なDBをあらゆる面で手動で拡張できます。例:特定のコンピュータ上のユーザーセッション情報が(自動列挙以外で)発見された場合、これらのセッションを手動でアップロードすることが可能で、それによりDBが更新され、結果のグラフにも反映されます。
このフレームワークは、データベース内の利用可能な情報を使用してグラフを生成し、Web UI(nest)を介してプロットできます。さらに、グラフ生成とパス計算は、Web API(/ui エンドポイント)またはグラフオブジェクトの関数を使用してプログラム的に呼び出すことができます。
このフレームワークは、グラフ生成なしで一般的なADの設定ミスを特定できます。現在はWeb API経由のみです。
ユーザー異常検出には、安全でないUAC権限や過剰なユーザー記述値の検出が含まれます。この機能セットは、将来新機能が実装されるにつれて拡大する予定です。
マシン異常検出には、安全でないUAC権限、必須でないSMB署名、古いOSバージョン、ドメイン外のマシンの検出が含まれます。この機能セットは、将来新機能が実装されるにつれて拡大する予定です。
このフレームワークはクラッキング自体は行わず、ハッシュとクラッキング結果の整理のみを行います
現在の主な焦点は、impacketとaiosmbのdcsync結果(NTハッシュとLMハッシュのみ)です!
サンプルプロセスは以下の通りです:
作者からの注: この機能は攻撃者と防御者の両方を対象として実装されました。個人的にはどちらの側にもあまり付加価値はないと思います。なぜなら、ユーザーのNTハッシュを入手した時点で、それはパスワードと同じくらい有用だからです... とはいえ、パスワード強度のエクササイズを実施する企業が増えており、この機能はそれらの企業を支援するでしょう。攻撃者にとっては、単なる見せびらかしですが、ご自由にお使いください。追加ポイントとして経営陣を脅かすかもしれません。
このプロジェクトは実験段階です!つまり、以下のことを意味します:
JackdawはSQLAlchemy ORMモジュールを使用しており、任意のSQL DBバックエンドを使用するオプションがあります。テストは主に明らかな理由からSQLiteで行われています。このプロジェクトでは、ユーザーを制限するバックエンド固有のコマンドは使用されません。
これは、GIT経由でインストールする場合、および/またはUIコードを変更する場合にのみ必要です
UIはReactで書かれています。初回使用/インストール前にビルドする必要があります。そのためには、nodejs と npm がインストールされている必要があります。その後:
jackdaw/nest/site/nui に移動します。npm install を実行します。npm run build を実行します。上記が完了すると、UIを使用する準備が整います。
「もし私が遠くを見ることができたなら、それは巨人の肩の上に立っていたからです。」
BloodHoundチーム
@dirkjanm (https://github.com/dirkjanm/)
Zsolt Imre (https://github.com/keymandll)
aiosmb および msldap モジュールの謝辞セクションを参照してください。