
ネイティブ ADSI/COM インターフェースを使用した低観測性の Active Directory セキュリティ列挙ツール。.NET や PowerShell を使用せずに ACL、委任、信頼、ADCS、Kerberoast ターゲット、攻撃経路を列挙し、BloodHound 互換の出力を生成します。
BloodHoundは道筋を示す。Kestrelはすでに内部にあるものを示す。
誰もが同じものをマッピングしている。攻撃経路、つまり誰がDomain Adminに到達できるかだ。それは正しい問いであり、それに答えるツールは優れている。しかし「誰が誰に到達できるか」というグラフは、ある種の問題群に対しては盲目だ。なぜなら、Active Directoryにおける最悪のもののいくつかは、経路などではないからだ。
それらは属性に溶接されたバックドアだ。パスワードがリセットされた後もずっと認証を続ける証明書。スキーマ自体に刻印されたアクセス許可で、これ以降に作成されるすべてのオブジェクトがそれを静かに継承する。誰かが密かに復元する権利を保持していた削除済みアカウント。単一の拒否読み取りACEによって列挙から隠されたオブジェクト。
そのいずれもグラフのエッジではない。そのすべてが今、あなたのディレクトリに存在している。 Kestrelはそれを読み取る。ネイティブWindows呼び出し、通常のドメインユーザー権限を使用し、サーバーもPythonもエージェントも不要で、ドメインコントローラーへのフットプリントは極めて控えめで、イベントごとに文書化されている。
1つの.exe。1つのコマンド。以下すべて。
攻撃側のADエコシステム、すなわちSharpHound、impacket、Certipy、そしてその背後にあるグラフは素晴らしいものであり、すべて同じ表面、つまり到達可能性を見ている。Kestrelは、その表面では表現できない3つの次元を見る。
defaultSecurityDescriptorバックドア、隠しオブジェクト、OWNER RIGHTS拒否ACE、AD FS DKMキー。グラフツールはこれらを収集しない。なぜなら描くべきエッジが存在しないからだ。Kestrelがグラフより速いという話ではない。グラフが問えない問いに答えるのだ。
| 観点 | Kestrel が見つけるもの | フラグ |
|---|---|---|
| レプリケーションと委任 | DCSync 権限(誰がレプリケーションを実行できるか - 実際にレプリケーションを行わなくても)、非制約 / 制約 / RBCD / S4U 委任 | --acl · --delegation |
| 証明書の悪用 | AD CS ESC1–5/9、NTAuth ストア内の不正な CA、長期間有効な証明書による永続化、AD FS DKM キーの ACL - Golden SAML の前提条件 | --adcs · --adfs |
| 属性への永続化 | シャドウクレデンシャル、SID 履歴の注入、tombstone-reanimation 権限、隠しオブジェクト、スキーマ defaultSecurityDescriptor のバックドア、孤立した adminCount | --shadowcreds · --sidhistory · --acl · --schema · --adminsdholder |
| 平文およびクラック可能な認証情報 | GPP の cpassword、SYSVOL 全体にわたる unattend/sysprep のシークレットとスクリプトのパスワード、Kerberoast 可能および AS-REP-roast 可能なアカウント、LAPS のカバレッジの隙間 | --gpp · --roast · --laps |
| クロスドメインとハイブリッド | 特権グループ内の外部プリンシパル、Tier-0 とタグ付けされた Entra Connect 同期アカウント、信頼の態勢、MachineAccountQuota 経由で作成されたマシンアカウント(mS-DS-CreatorSID) | --groups · --trust · --machines |
| 態勢と偵察 | パスワード / PSO ポリシー、krbtgt の経過期間、LLMNR / NBT-NS / WDigest / NTLMv1 の GPO 設定、gMSA リーダー、古いコンピューター、委任トポロジ | --pwdpolicy · --policy · --gmsa · --stale |
| 考古学 | 孤立した危険な ACE(削除されたプリンシパルが保持する権限 - SID が誰にも解決されない)、古い特権アカウント(忘れ去られ、過剰な権限を持ち、パスワードが古い) | --archaeology |
| ドメインの堅牢化 | dSHeuristics の匿名 LDAP / AdminSDHolder 除外フラグ、Pre-Windows 2000 Compatible Access の広範なメンバーシップ | --hardening |
| サービスの態勢 (AD から読み取り、サービスへのパケット送信なし) | Exchange から DA への昇格と EOL、SCCM コンテナの乗っ取りとサイトマップ、ADIDNS ゾーンポイズニング(Authenticated Users がレコードを作成可能) | --exchange · --sccm · --dns |
通常は十数個のスクリプトと 2 つの言語に分散している 20 以上のチェック。ここではそれらが 1 つのバイナリにまとめられ - そして単一の、重大度で並べ替えられた判定で終わります。
Kestrel.exe --all --report audit.html
すべてを実行します。完全なHTMLレポートを取得します。そして、コンソールの最後に、重要な部分が表示されます:
═══ Kestrel - Prioritized Findings ═══
CRITICAL DCSync CORP\svc_sql - non-default principal can replicate directory changes (DCSync)
→ fix: remove GetChanges/GetChangesAll from the principal on the domain head (dsacls) unless it is a DC
CRITICAL AD FS CN=... - read access to the DKM key (Golden SAML precondition)
→ fix: remove non-default read ACEs on the DKM object (dsacls) and rotate the token-signing certificate
HIGH Persistence CN=... - object hidden from enumeration via a broad deny-read ACE
→ fix: inspect the hidden object and remove the broad deny-read ACE (dsacls)
[=] 2 critical · 1 high · 0 medium · 0 low
出力の壁ではない。重要な発見を順位付けし、それぞれに解決するためのコマンドを添える。
--opengraph) へ直接エクスポートして既存のコレクションと統合する、あるいは任意のプリンシパルからピボットする (--from)。--diff で変化したものを捉え、正確な検出フットプリントが公開されているツールによりホワイトリスト化して独自のアラートを調整できる。Kestrel は読み取り専用である。ディレクトリへの書き込みは一切行わず、レプリケーションも行わず、SeSecurityPrivilege を必要とせず、クラウドにも一切触れない。誰が DCSync をできるかを読むことは、ワイヤ上では DCSync を行うこととはまったく異なる - DRSUAPI もなく、レプリケーション署名の 4662 もない。実行するすべてのクエリと、生成できる(および生成できない)すべてのイベントは FOOTPRINT.md にカタログ化されている。監査ツールが防御者に捕まえ方を正確に教えることは矛盾ではない - それがまさに要点である。
ビルドを取得する。 グリーンの CI 実行ごとに Kestrel.exe アーティファクトが公開される - Actions タブ からダウンロードでき、ツールチェーンは不要である。
または自分でビルドする。 Visual Studio (v143+) または MSBuild:
git clone https://github.com/ssteelfactor-oss/Kestrel.git
cd Kestrel
msbuild Kestrel.vcxproj /p:Configuration=Release /p:Platform=x64
Pure C、サードパーティ依存ゼロ。/MT をビルドすれば単一の自己完結型実行可能ファイルになる - ドメイン参加ホストに置き、通常のユーザーとして実行するだけ。
実行する。
Kestrel.exe --all --report audit.html # everything, HTML report + ranked findings
Kestrel.exe --acl --adcs --adfs # pick specific checks
Kestrel.exe --paths --from CORP\jdoe # attack paths from one principal
Kestrel.exe --all --diff last-week.json # what changed since the last snapshot
Kestrel.exe --all --opengraph graph.json # export to BloodHound CE OpenGraph
--all を実行するか、任意のサブセットを選択します。完全なヘルプ: Kestrel.exe --help。
| フラグ | スキャン |
|---|---|
--acl | ACL エッジ、DCSync 権限、所有者/継承/正規の衛生状態、隠しオブジェクト、reanimate-tombstones |
--groups | 推移的な特権メンバーシップ + 外部セキュリティプリンシパル |
--delegation | 無制約 / 制約付き / RBCD / S4U2Self |
--paths / --from | Tier-0 への攻撃パス分析(任意で指定プリンシパルから) |
--adcs | AD CS 証明書テンプレート / CA 監査(ESC1–5/9)+ NTAuth ストア + 有効性 |
--adfs | AD FS DKM キー ACL(Golden SAML の前提条件) |
--schema | スキーマ defaultSecurityDescriptor バックドア監査 |
--trust | ドメイン / フォレスト信頼の態勢 |
--machines | MachineAccountQuota(mS-DS-CreatorSID)経由で作成されたマシンアカウント |
--roast | Kerberoast 可能 + AS-REP-roast 可能なアカウント |
--shadowcreds | シャドウ資格情報(msDS-KeyCredentialLink) |
--sidhistory | sIDHistory インジェクション(特権 / 外部) |
--adminsdholder | 孤立した adminCount=1 オブジェクト |
--gpp | SYSVOL シークレットスイープ - GPP cpassword、unattend、スクリプト資格情報 |
--gpolateral | GPO ローカルグループ → ラテラルエッジ(AdminTo / CanRDP / CanPSRemote / ExecuteDCOM) |
--policy | GPO セキュリティポリシー(LLMNR / NBT-NS / WDigest / NTLMv1) |
--pwdpolicy | パスワード / PSO ポリシー · krbtgt の経過時間 · MachineAccountQuota |
--hygiene | 資格情報の衛生状態(PASSWD_NOTREQD / DONT_EXPIRE / 可逆 / 説明の漏洩) |
--gmsa | gMSA パスワード読み取り者列挙 |
--laps | LAPS カバレッジ(レガシー + Windows LAPS 2023+) |
--stale | lastLogonTimestamp による古いコンピューター |
--topology | SPN デコードによるコンピュータートポロジー |
--adws | ADWS エンドポイント検出(DC ごとに 9389/TCP) |
--archaeology | 孤立した危険な ACE(死んだ所有者、生きた権限)+ 古い特権アカウント |
--hardening | ドメインハードニングフラグ: dSHeuristics 匿名アクセス / SDProp 除外 + Pre-Windows 2000 Compatible Access |
--exchange | Exchange 態勢: バージョン/EOL + Exchange から DA への昇格(ドメイン上の WriteDACL)(サービス; オプトイン) |
--sccm | SCCM/MECM 態勢: System Management コンテナ ACL + 管理ポイント / サイトマップ (サービス; オプトイン) |
--dns | AD 統合 DNS(ADIDNS): ゾーン CreateChild DACL + wpad/isatap/ワイルドカード + DnsAdmins (サービス; オプトイン) |
サービス態勢(--exchange · --sccm · --dns)はオプトインであり、--all には含まれません。レイヤー全体を実行するには --services を使用します。検出結果には MITRE ATT&CK テクニックタグが付与されるようになりました。