永恆之藍漏洞利用機制分析

安芯網盾發表於2020-08-03

近日,Tellyouthepass勒索病毒被發現再次活躍,攻擊者利用了EternalBlue(永恆之藍)內網擴散模組整合到勒索攻擊包中,實現內網蠕蟲式病毒傳播,並已對部分企業進行攻擊,如果沒有采取及時的防護措施,可能給企業帶來巨大的損失。

永恆之藍漏洞利用機制分析

tellyouthepass中永恆之藍的利用程式碼



永恆之藍是何方神聖

永恆之藍是美國國家安全域性開發的漏洞利用程式,於2017年4月14日被駭客組織Shadow Brokers洩漏。永恆之藍包含程式間通訊共享(IPC $),該共享允許空會話。這意味著該連線是透過匿名登入建立的,預設情況下允許空會話,空會話允許客戶端向伺服器傳送不同的命令。

自2018年永恆之藍被WannaCry利用並在全球各國掀起風波之後,熱度至今沒有消減。雖然微軟於2017年釋出過Microsoft Windows補丁,修補了這個漏洞,現在依然有許多駭客利用永恆之藍進行攻擊。與此同時該程式也在不斷進化,甚至形成了每週更新的傳統,曾將EXE攻擊方式逐步切換到利用Powershell指令碼實現無檔案攻擊。


永恆之藍的工作機制

永恆之藍依賴於一個名為srv!SrvOS2FeaListSizeToNt的windows函式。要了解它是如何導致遠端執行程式碼,首先需要了解SMB的工作機制。SMB(伺服器訊息塊)是一種協議,用於透過網路從伺服器系統請求檔案和列印服務。在協議的規範中,有一些結構可以使協議傳達有關檔案擴充套件屬性的資訊,本質上是有關檔案系統上檔案屬性的後設資料。

在此基礎上,永恆之藍利用了協議中的三個不同的錯誤。

永恆之藍漏洞利用機制分析


第一個錯誤是當協議試圖將OS / 2 FileExtended Attribute(FEA)列表結構轉換為NT FEA結構以確定要分配多少記憶體時出現的數學錯誤。錯誤計算會產生整數溢位,導致分配的記憶體少於預期的數量,進而導致緩衝區溢位。如果寫入的資料超出預期,則多餘的資料可能溢位到相鄰的儲存空間中。

第二個錯誤是由於SMB協議對兩個相關子命令:SMB_COM_TRANSACTION2和SMB_COM_NT_TRANSACT的定義不同而導致的緩衝區溢位。兩者都有一個_SECONDARY命令,當單個分組中包含太多資料時使用該命令。TRANSACTION2和NT_TRANSACT之間的關鍵區別在於,後者需要一個資料包,大小是前者的兩倍。如果客戶端使用NT_TRANSACT緊接在前的子命令傳送精心製作的訊息,則會發生TRANSACTION2驗證錯誤。雖然協議識別出兩個分開的子命令已被接收到,其分配的型別和尺寸的資料包(並相應地分配記憶體)僅基於接收到的最後一個資料包的型別。由於最後一個較小,因此第一個資料包將佔用比分配的更多的空間。

一旦攻擊者實現了最初的溢位,他們就可以利用SMBv1中的第三個bug,該bug出現在SMB_COM_SESSION_SETUP_ANDX命令中:該命令的請求依賴於WordCount的值來確定具體的請求格式,當為12時和為13時紅框中的變數會有所區別,利用該漏洞將12型別的請求包透過13型別進行處理,由於兩種型別的請求包格式不一致,透過控制請求包指定偏移的資料,即可以控制SrvAllocateNonPagedPool建立的pool的大小,實現堆噴射,導致在指定地址分配記憶體,使得攻擊者可以編寫和執行Shellcode來控制系統。


如何避免利用永恆之藍的攻擊

首先,確保更新並應用安全補丁MS17-10,其次禁用SMBv1,並且不使任何易受攻擊的計算機訪問網際網路。

當前網路形勢下,已出現疑似永恆之藍病毒變種,例如:wannaRen的病毒,應對這些新的威脅,傳統防護手段很難有效防範,安芯網盾記憶體保護系統透過硬體虛擬化技術對記憶體惡意行為進行監控,能夠有效檢測到記憶體中緩衝區溢位、堆疊溢位、部署shellcode、執行shellcode、等惡意行為,有效防護這類新威脅。


參考文獻:

[1]https://www.sentinelone.com/blog/eternalblue-nsa-developed-exploit-just-wont-die/

[2]https://www.anquanke.com/post/id/86270

[3]https://zh.wikipedia.org/wiki/%E6%B0%B8%E6%81%92%E4%B9%8B%E8%93%9D

[4]https://www.freebuf.com/mob/articles/terminal/153230.html




相關文章