アップデート一覧に戻る
New releaseAug 23, 2026

Kestrel v.1.1.0

ネイティブ ADSI/COM インターフェースを使用した低観測性の Active Directory セキュリティ列挙ツール。.NET や PowerShell を使用せずに ACL、委任、信頼、ADCS、Kerberoast ターゲット、攻撃経路を列挙し、BloodHound 互換の出力を生成します。

共有

Kestrel

build license language dependencies

BloodHoundは経路を示す。Kestrelは、内部にすでに存在するものを示す。

誰もが同じものをマッピングする。攻撃経路、すなわち 誰がDomain Adminに到達できるか だ。それは正しい問いであり、それに答えるツールも素晴らしい。しかし「誰が誰に到達できるか」というグラフは、ある種の問題全体に対して盲目だ。Active Directoryにおける最悪の脅威のいくつかは、経路ではまったくないのだから。

それらは属性に溶接されたバックドアだ。パスワードがリセットされた後も長く認証し続ける証明書。スキーマ自体に刻印された権限で、以後作成されるすべてのオブジェクトが黙って継承する。誰かが静かに復元権限を保持し続けた削除済みアカウント。単一のdeny-read ACEによって列挙から隠されたオブジェクト。

それらのどれもグラフのエッジではない。そしてすべてが、今この瞬間もあなたのディレクトリの中に存在している。 Kestrelはそれを読み取る。ネイティブなWindows呼び出しと通常のドメインユーザー権限だけで。サーバーも、Pythonも、エージェントも不要で、ドメインコントローラ上のフットプリントはイベント単位で文書化されるほどに抑制されている。

1つの.exe。1つのコマンド。以下がすべて。


あなたは間違った方向を見てきた

攻撃的なADエコシステム(SharpHound、impacket、Certipy、そしてそれらの背後にあるグラフ)は素晴らしい。しかし、それらはすべて同じ表面、すなわち到達可能性だけを見ている。Kestrelは、その表面では表現できない3つの次元を見る。

  • 時間。 グラフはスナップショットだ。Kestrelはレプリケーションメタデータを読み取る。Tier-0属性がいつ変更され、どのDCがそれを発信したか。昨夜付与されたDCSync権限は、何年も前から存在するものと同じ発見事項ではない。そして、そのうちの1つだけが「今まさに攻撃されている」ことを意味する。
  • エッジではなく属性の中の永続化。 シャドウクレデンシャル、SID履歴、トゥームストーンの復活、スキーマのdefaultSecurityDescriptorバックドア、隠しオブジェクト、OWNER RIGHTSのdeny-ACE、AD FSのDKMキー。グラフツールはこれらを収集しない。描くべきエッジがないからだ。
  • 逆転した防御態勢。 「誰が攻撃できるか」ではなく「何が保護されていないか」。サイロの外にあるTier-0アカウント、誰もタグ付けしていないランダムなRIDを持つ同期アカウント、スプレー攻撃を一切抑制しないロックアウトポリシー。

Kestrelがグラフより速いという話ではない。Kestrelは、グラフが問うことすらできない質問に答えるのだ。


ADのあらゆる罪を、1つのネイティブexeで

Kestrelが見つけるものフラグ
レプリケーションと委任DCSync権限(レプリケーションを実行することなく、誰がレプリケーションできるか)、制約なし/制約付き/RBCD/S4U委任--acl · --delegation
証明書の悪用AD CS ESC1–5/9、NTAuthストア内の不正CA、長期間有効な証明書による永続化、AD FS DKMキーACL - Golden SAMLの前提条件--adcs · --adfs
属性内の永続化シャドウクレデンシャル、SID履歴の注入、トゥームストーン復活権限隠しオブジェクトスキーマのdefaultSecurityDescriptorバックドア、孤立したadminCount--shadowcreds · --sidhistory · --acl · --schema · --adminsdholder
平文・クラック可能な認証情報SYSVOL全体のGPP cpasswordunattend/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

通常なら十数本のスクリプトと2つの言語に分散する20以上のチェックが、ここでは1つのバイナリに集約される。そして最後には、重大度順に並べられた単一の判定結果で締めくくられる。


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

出力の羅列ではない。重要な発見事項だけがランク付けされ、それぞれに修正コマンドが付いている。


1つのexe。Red、Blue、Purple。

  • Red / Grey - グラフが見落とす永続化と委任を列挙し、そのままBloodHound CE OpenGraph(--opengraph)にエクスポートして既存のコレクションと融合させるか、任意のプリンシパルからピボットする(--from)。
  • Blue - 優先順位付けされ修復策付きの発見事項リスト。先週のスナップショットとの--diff変化したものを捉える。さらに、正確な検出フットプリントが公開されているため、ホワイトリスト登録や、それに合わせた独自アラートの調整ができる。
  • Purple - 双方が同じように読む1つの成果物。Redが見つけ、Blueが修正し、全員が同じ行番号を指す。

設計上、検出可能

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

フラグスキャン内容
--aclACLエッジ、DCSync権限、所有者/継承/カノニカルハイジーン、隠しオブジェクト、トゥームストーン復活
--groups推移的な特権メンバーシップ+外部セキュリティプリンシパル
--delegation制約なし/制約付き/RBCD/S4U2Self
--paths / --fromTier-0への攻撃経路分析(任意で特定のプリンシパル起点)
--adcsAD CS証明書テンプレート/CA監査(ESC1–5/9)+NTAuthストア+有効性
--adfsAD FS DKMキーACL(Golden SAMLの前提条件)
--schemaスキーマのdefaultSecurityDescriptorバックドア監査
--trustドメイン/フォレストの信頼状態
--machinesMachineAccountQuota経由で作成されたマシンアカウント(mS-DS-CreatorSID
--roastKerberoast可能+AS-REP-roast可能なアカウント
--shadowcredsシャドウクレデンシャル(msDS-KeyCredentialLink
--sidhistorysIDHistoryの注入(特権/外部)
--adminsdholder孤立したadminCount=1オブジェクト
--gppSYSVOLシークレットスイープ - GPP cpasswordunattend、スクリプト認証情報
--gpolateralGPOローカルグループ→横移動エッジ(AdminTo / CanRDP / CanPSRemote / ExecuteDCOM)
--policyGPOセキュリティポリシー(LLMNR / NBT-NS / WDigest / NTLMv1)
--pwdpolicyパスワード/PSOポリシー · krbtgtの経過期間 · MachineAccountQuota
--hygiene認証情報ハイジーン(PASSWD_NOTREQD / DONT_EXPIRE / 可逆暗号化 / descriptionからの漏えい)
--gmsagMSAパスワードリーダーの列挙
--lapsLAPSカバレッジ(レガシー+Windows LAPS 2023+)
--stalelastLogonTimestampによる非アクティブなコンピュータ
--topologySPNデコードによるコンピュータトポロジ
--adwsADWSエンドポイント検出(各DCの9389/TCP)

出力と相互運用: --report <file>.html / .json / .yaml) · --opengraph <file>(BloodHound CE) · --diff <snapshot.json> · --verbose


設計不変条件

これらは好みではなく約束だ。本番環境で実行しても安全な理由そのものである。このいずれかを破ることはセキュリティバグと見なされる(SECURITY.mdを参照)。

  • 読み取り専用 - ディレクトリオブジェクトを作成・変更・削除することは決してない。発生するのは読み取り/アクセスイベントのみで、変更イベントは決して発生しない。
  • 通常のドメインユーザー - 権限昇格なし、SeSecurityPrivilegeなし、DACLのみのセキュリティマスク。
  • レプリケーションなし - 誰がDCSyncできるかを検出するだけで、DRSUAPI自体を呼び出すことはない。
  • ディレクトリとSYSVOLのみ - メンバーホストへのRPC/SMBは行わない。
  • 回避なし - クエリの断片化も、タイミングの細工も、ログ改ざんもない。FOOTPRINT.mdを参照。
  • オンプレミスのみ - Entra / Graph / クラウドへの呼び出しは一切ない。ハイブリッド環境がAD内に残すフットプリントを監査する。
  • ネイティブ&自己完結 - pure C、サードパーティ依存ゼロ、単一の.exe

ロードマップ

バージョン状態マイルストーン
v0.13参入条件の状態
v0.14ACLの深さ+横移動エッジ
v0.15ACL構造監査(ADelegクラス)
v0.16ステルス永続化+SYSVOL / ADCSの深掘り
v0.17クロスドメイン+ハイブリッドフットプリント
v0.18クエリハイジーン+誠実なフットプリント
v1.0機能完成: 優先順位付き発見事項+修復、CI、Apache 2.0
v1.1🔲時系列タイムライン · 不正DC / DCShadow検出 · ADIDNS · 防御態勢パス

ドキュメント

  • FOOTPRINT.md - 各スキャンが残す正確なLDAP / SYSVOLトレースと、生成する(そしてできない)DCイベント。
  • SECURITY.md - 報告方法、適用範囲、そして検証可能な保証としての設計不変条件。
  • LICENSE - Apache 2.0。

関連プロジェクト

親プロジェクト: NetEnum - ADSI / COM / LDAPによるAD列挙。

作者

@ssteelfactor-oss - セキュリティリサーチとCOM / Windows内部構造。

ライセンス

Apache License 2.0の下でライセンスされている。LICENSEを参照。無保証で「現状のまま」提供される。監査を許可されたディレクトリに対してのみ実行すること。

カテゴリ