◆吳 紅 蘭沂梅 羅 晨
NTLM中繼攻擊技術淺析
◆吳 紅 蘭沂梅 羅 晨
(國網四川省電力公司眉山供電公司 四川 620010)
本文對NTLM認證協(xié)議的認證過程進行了研究,介紹了在不安全的網絡環(huán)境中利用NTLM中繼攻擊獲取服務器權限的可能方式,并通過搭建環(huán)境模擬實現(xiàn)了利用NTLM中繼攻擊得到服務器最高權限的過程。最后,本文總結了針對于此類攻擊的防御辦法。
網絡安全;NTLM協(xié)議;中間人攻擊;NTLM中繼攻擊;遠程代碼執(zhí)行
Windows質詢/響應(NTLM)是在包含運行Windows操作系統(tǒng)的系統(tǒng)和獨立系統(tǒng)的網絡上使用的身份驗證協(xié)議。NTLM認證協(xié)議作為一種歷史遺留協(xié)議,被廣泛用于Windows操作系統(tǒng)各內部組件及服務,是作為身份驗證的基礎架構[1]。其認證過程簡單,必需的通信流量較小,在對通信安全性要求較低,性能要求較高的網絡環(huán)境中很適合。NTLM認證本身隱含著一種極為危險的攻擊面,即中間人攻擊。當用戶與服務器通信時,若信道本身遭到攻擊者破壞與竊聽,則攻擊者可能充當“中間人”的角色,假冒用戶的身份與服務器通信,從而危及服務器的安全,該攻擊方式被稱為“NTLM中繼攻擊”[2]。NTLM中繼操作較為簡單,并能造成極大的危害,例如遠程代碼執(zhí)行,敏感信息讀取等。
NTLM中繼攻擊自出現(xiàn)起至今已存在十余年。2008年MS08-068漏洞影響范圍巨大,危害可觀,它利用NTLM中繼將用戶的憑據(jù)反射到受害者計算機上,從而導致遠程代碼執(zhí)行[3]。自那以后,微軟阻止了在SMB協(xié)議,即Windows文件共享服務所使用協(xié)議中的NTLM反射攻擊,這是一種NTLM中繼攻擊的變種。2016年,安全研究員發(fā)現(xiàn)NTLM反射攻擊仍能在HTTP協(xié)議到SMB及DCE/RPC協(xié)議到SMB中工作;2019年,又有研究員發(fā)現(xiàn)繞過SMB到LDAP協(xié)議(在微軟活動目錄數(shù)據(jù)庫中使用)限制的方式,這使得NTLM中繼攻擊的威力更上一層樓,這個漏洞的出現(xiàn)讓NTLM中繼攻擊在2019年再次熱門了起來。
這里從三個方面對NTLM中繼攻擊進行研究:
NTLM是一種質詢/響應認證方案,其認證過程分為三步:
(1)協(xié)商(Type1消息)
客戶端向服務器發(fā)送Type 1消息。這主要包含客戶端支持和服務器請求的功能列表。
(2)質詢(Type2消息)
服務器響應Type 2消息。其中包含服務器支持和同意的功能列表。但最重要的是,它包含服務器生成的挑戰(zhàn)數(shù)(Challenge)。
(3)響應(Type3消息)
客戶端使用Type 3消息回復挑戰(zhàn)數(shù)。其中包含有關客戶端的若干信息,包括客戶端用戶的域和用戶名。它還包含對Type 2挑戰(zhàn)的一個或多個響應。
NTLM認證大體過程如圖1所示:
NTLM認證中,挑戰(zhàn)(Challenge)是服務器生成的一個8字節(jié)的隨機數(shù),而響應則包含客戶端使用用戶的密碼hash與該挑戰(zhàn)經過單向函數(shù)計算后得出的一組數(shù)據(jù)[4]。由于服務端也持有用戶的密碼hash,則它能通過相同的計算來比較響應是否正確,從而確定用戶是否認證成功。
NTLM中繼攻擊屬于一種中間人攻擊。在NTLM認證中,攻擊者若處于客戶端和服務端信道之間,則他能轉發(fā)并修改往來的任何消息,如圖2所示:
圖2 NTLM中繼攻擊流程
在圖2中,對于客戶端,攻擊者扮演服務器的角色;對服務端,他扮演客戶端的角色。攻擊者首先轉發(fā)客戶端所發(fā)送的Type1消息到服務端,并獲取服務端的響應。由于服務端并不知道客戶端的真實身份,它會發(fā)送挑戰(zhàn)。當攻擊者收到該挑戰(zhàn)后,將挑戰(zhàn)發(fā)回客戶端??蛻舳擞嬎愠鲰憫?,將響應發(fā)送給攻擊者,攻擊者再次發(fā)送到服務端。這樣,在服務端看來,攻擊者已經是經過驗證的合法客戶端,因此攻擊者能假冒真正的客戶端做任何他有權限做的操作。
由于NTLM認證僅是諸多認證協(xié)議中的一種,在真實世界中,它必須與其他協(xié)議相配合使用[5]。SMB協(xié)議是Windows文件共享服務所使用的協(xié)議。Windows文件共享服務默認開啟并綁定445端口,高權限用戶能使用該服務執(zhí)行命令。SMB協(xié)議可以使用NTLM認證作為其認證協(xié)議,因此,使用NTLM中繼攻擊能使攻擊者獲取到訪問SMB服務的權限,進而執(zhí)行命令,危及服務器安全。
互聯(lián)網上有很多開源的工具能使攻擊者實施此類攻擊,其中最著名也是最成熟的工具是Impacket工具包中的ntlmrelayx。Impacket是Python的網絡協(xié)議庫,其中實現(xiàn)了smb、ldap、kerberos等多種協(xié)議,并有大量使用該庫的工具。在實驗環(huán)境如下:
攻擊者IP:172.17.129.177;客戶端IP:172.17.8.4;
服務端IP:172.17.129.163。
“操作員是服務端”缺點如下:
攻擊者啟動smbrelay,命令為:smbrelayx.py -h 172.17.129.163 -c whoami。
該工具監(jiān)聽445端口,并轉發(fā)NTLM認證至-h指定的服務器。在客戶端上,執(zhí)行:dir \172.17.129.177”命令模擬訪問smbrelay所啟動的smb服務器。
Dir命令后接UNC路徑,即以\開頭的URL,Windows將以SMB協(xié)議訪問該地址。
Smbrelay接收到訪問請求后,將啟動NTLM中繼過程。從攻擊者到服務器的三次認證捕獲流量如圖3所示:
圖3 攻擊者到服務器之間的NTLM流量
從客戶端到攻擊者的三次認證捕獲流量如圖4所示:
圖4 客戶端到攻擊者之間的NTLM流量
比較上面兩張圖可以看出,三次認證的流量幾乎是一模一樣的,這也說明攻擊者在認證中扮演著中間人的角色,負責轉發(fā)雙方的流量。當攻擊者假冒客戶端認證成功后,他便能通過若干DCE/RPC調用在服務器上寫入木馬并啟動。
最終smbrelay將能執(zhí)行任意代碼,如圖5所示,攻擊者執(zhí)行whoami命令,查看服務器上用戶:
圖5 攻擊者得到惡意命令執(zhí)行的結果
NTLM中繼攻擊雖然危害巨大,但微軟早已準備大量應對方案。NTLM認證協(xié)議屬于歷史遺留協(xié)議,其本身并不安全,必要時也可放棄使用,轉而使用更安全的Kerberos協(xié)議[6]。管理員可在本地安全策略中限制傳入與傳出的NTLM流量。
同時在SMB服務器上啟用SMB簽名。SMB簽名可對SMB協(xié)議中的數(shù)據(jù)包進行數(shù)字簽名,以防止中間人攻擊,這是一種非常有效的方式。
圖6 啟用SMB數(shù)字簽名
本文對NTLM協(xié)議的通信機制做了簡單介紹,舉例實現(xiàn)了對在SMB服務中扮演認證角色的NTLM協(xié)議的中繼攻擊,并對防范此種NTLM協(xié)議中繼攻擊做了介紹。NTLM技術的應用十分廣泛,針對NTLM協(xié)議的攻擊方式也多種多樣,如何能徹底解決NTLM技術在應用中的安全問題,仍需要進一步的研究。
[1]潘志剛.從Windows2003服務器遠程登錄失敗以識NTLM協(xié)議[J]. 電大理工大學學報,2013(2):39-41.
[2]邱奇志. 剖析Windows的用戶驗證機制[J].現(xiàn)代計算機(專業(yè)版),2005(02):61-64+78.
[3]肖道舉,郭杰,陳曉蘇.一種對中間人攻擊的防范策略的研究[J].計算機工程與科學,2004(09):9-10+17.
[4]黎松,段海新,李星.域間路由中間人攻擊的實時檢測系統(tǒng)[J].清華大學學報(自然科學版),2015(11):1229-1234.
[5]汪定,馬春光,翁臣,等.強健安全網絡中的中間人攻擊研究[J].計算機應用,2012(01):48-50+71.
[6]徐恒,陳恭亮,楊福祥. 密鑰交換中中間人攻擊的防范[J].信息安全與通信保密,2009(02):96-98.