最近微軟發布了一系列博客文章,來分析ShadowBrokers于2017年4月發布的漏洞,特別是其中一些較少被研究的漏洞。本周來看一下Eternal Synergy,這是一個SMBv1認證漏洞。其實它特別有趣,因為許多開發步驟純粹是基于分組的,而不是本地的shellcode執行。像其他SMB漏洞一樣,MS17-010也解決了CVE-2017-0143這一問題。該漏洞利用可以在Windows 8上進行,但不能像任何較新的平臺一樣進行寫入。
這篇文章分為四個主要部分。將深入探討該漏洞,隨后討論如何將該漏洞武器化以創建在整個漏洞利用中用作構建塊的讀/寫/執行的基元。接下來,將繼續執行EternalSynergy,看看這些基元如何被用來提供一個完整的漏洞。最后,將簡要討論近期的一些緩解措施的提出對漏洞利用技術的影響。
漏洞:CVE-2017-0143
此漏洞的根本原因在于確定消息是否是事務(Transaction)的一部分時,不考慮SMB消息的命令類型。換句話說,只要在SMB頭UID,PID,TID和OtherInfo字段匹配相應的事務(Transaction)字段,該消息將被認為是事務(Transaction)的一部分。
通常,該OtherInfo字段存儲一個MID。但在SMB_COM_WRITE_ANDX消息的情況下,它會存儲一個FID。這將產生一個潛在的消息類型混淆:給定一個現有的SMB_COM_WRITE_ANDX事務,MID等于事務FID的傳入SMB消息將被包含在事務中。
開發
當SMB消息到達時,相應的處理程序將其內容復制到相應的事務(Transaction)緩沖區中,即InData。該SMB_COM_TRANSACTION_SECONDARY處理器假定InData地址指向緩沖區的開始。
然而,在SMB_COM_WRITE_ANDX的事務(Transaction)情況下,每當接收到該事務的SMB時,該InData地址被更新以指向現有數據的結束。
利用數據包混淆,攻擊者可以在SMB_COM_WRITE_ANDX事務中插入一個消息SMB_COM_TRANSACTION_SECONDARY。在這種情況下,InData將指向緩沖區的開頭,因此SMB_COM_TRANSACTION_SECONDARY在復制傳入的消息數據期間,處理程序可以溢出緩沖區。
接手事務(Transaction)
為利用過程中中使用的RWX基元構建塊然后通過利用上一節中描述的消息混淆來接手事務結構。首先,通過SMB_COM_TRANSACTION客戶端消息分配“控制”事務。
然后,SMB_COM_WRITE_ANDX發送一個消息,用于利用數據包混淆。因此,InData控制事務的指針被破壞以指向緩沖區的開始。在這里,它是通過0x200字節被關閉的。
接下來,將SMB_COM_TRANSACTION_SECONDARY消息發送到同一事務,并通過利用損壞的InData指針來修改相鄰的“受害者”事務。我們再次訪問來了解下面如何去計算目標寫入地址。
傳入的消息dataDisplacement足夠大以到達相鄰的事務。
具體來說,它將OtherInfo使用攻擊者控制的值(在這種情況下為0)來覆蓋事務的字段,以便將使用的所有將來的消息MID=0指向受害者事務。下面我們看到在覆蓋發生之前的受害者事務。
在接管受害者交易之后,漏洞利用可以預測性地在相同或其他事務中繼續破壞領域,并通過向事務發送消息來可靠地觸發它們。請注意,為了使這種技術有效,攻擊者必須能夠可預測地分配一對鄰近的事務。
遠程任意寫入原語
任意寫入原語可以使得攻擊者修改受害者系統上的內存內容,并作為此漏洞中使用的其余技術的基礎。為了破壞內存,它利用了上一節中描述的技術。具體來說,寫入原語分為兩個步驟:
在步驟1中,受害者事務InData緩沖區地址被覆蓋,使其指向目標寫入地址。
接下來在步驟2中,攻擊者可以通過發送到受害者事務來覆蓋任意內核內存。收到消息后,其內容將被復制到InData緩沖區; 然而,在這一情況下,緩沖區地址被破壞,所以內容被復制到攻擊者控制的地址。下面是一個示例數據包,其中包含“Extra byte parameters”中的shellcode將被復制到受害計算機。
遠程任意讀取原語
任意讀取原語可以使得攻擊者從目標系統遠程讀取任何內存地址的內容。要使用這個原語,攻擊者必須成功進行以下內容:
1、采取連接,并建立了寫入原語,如上所述。
2、泄漏一個有效的TRANSACTION結構
正如下圖中我們所看到的,我們有鄰近于受害者#1交易用于寫原語和受害者#2事務的控制事務處理。消息#1使用寫入原語來破壞受害者#1 InData緩沖區地址,使其指向受害者#2基地址。這意味著針對受害人#1交易的任何消息將導致在消息的“數據移位”字段指定的偏移量下破壞受害者#2事務。受害者#2是泄漏的TRANSACTION結構,其基址可以通過其內容推斷。
其余消息包含Transaction Secondary命令(0x26),并使用相同的TID,PID和UID。消息#2-5定位受害者#1交易(MID = 0),并執行受害人#2交易的特定字段的覆蓋。下表總結了每條消息的修改:
作為示例,下面是發送以執行遠程讀取操作的消息。payload在“Extra byte parameters”中指定“Data Displacement”中的目標地址和“Data Count”字段中的大小。
消息#5是一個虛擬數據包,具有一個非零MID對象,受害者#2事務,發送到觸發服務器響應。在響應消息期間,將損壞的DataOut指針的內存地址的內容復制出去并發送回SMB客戶端。此類消息的示例如下所示:
代碼執行
前面章節討論的技術主要在內存中運行,利用過程中仍然需要一種方式來改變控制流并以可重復的方式調用執行。而這一利用需要通過破壞SMB消息處理程序的指針來實現此目的。
首先,它通過寫入原語利用執行目標的地址覆蓋0xe入口的srv!SrvTransaction2DispatchTable。這是一個dispatch表,其中包含SMB消息處理程序的指針。針對TRANS2_SESSION_SETUP子命令處理程序的此特定條目是非常方便的,因為它未被實現,因此不期望由“正?!盨MB流量使用。有關如何將這個全局指針發現并泄漏回攻擊者的詳細信息將在下一節中介紹。
接下來,SMB_COM_TRANSACTION2設置的類型和子命令的消息TRANS2_SESSION_SETUP被發送到受害者,觸發損壞的函數指針的執行。此消息的目標事務并不重要。下面可以看到一個示例數據包。
把所有的都放在一起
在本節中,我們將詳細介紹這些漏洞,并了解上述構建的塊如何組合以實現遠程內核代碼執行。
在這個階段,一個TRANSACTION結構從受害者機器泄漏出來。這種結構可以以兩種方式使用。首先,它包含EndpointSpinLock用作發現其他有用地址的基礎的指針。第二,它被用作受害者#2事務,因為為了構建一個Read原語,攻擊者需要一個有效TRANSACTION結構的細節。用于泄漏指針的方法類似于 Eternal Champion漏洞中描述的方法。
以下是SMB_COM_TRANSACTION包含泄露池內存的消息的內容。泄漏的TRANSACTION結構從偏移開始0xb0。我們可以看到,除其他事項外, 該事務包含 TID,PID,UID和OtherInfo。此外,諸如InData(offset 0x130)的指針允許攻擊者確定事務的基本內存地址。
SMB_COM_TRANSACTION發送一系列消息以分配一對相鄰的控制 – 受害者事務。具體來說,“groom”數據包包含SMB消息,用于創建數據包混淆,或換句話說,有資格成為控制事務?!癇ride”數據包創建了一個作為破壞候選者的事務,即受害者事務。
漏洞利用了對R / W原語使用的鄰居受害者事務的控制。
讀取的原語是多次執行,以便發現srv!SrvTransaction2DispatchTable全局指針的位置,使用觸發器shellcode執行。
讀取的原語被多次使用以發現基礎ntoskrnl.exe。上面發現的RWX內存被用作一個暫存頁面,其中shellcode被寫入和執行,返回值被存儲。由于RWX部分存在此頁面ntoskrnl.exe。值得注意的是ntoskrnl.exe,Windows 8.1及更高版本沒有RWX部分。
這是在受害者機器上復制和執行shellcode時的情況。首先,使用寫入原語,將exploit shellcode復制到scratch頁面。這個shellcode只是一個在池中分配內存的存根功能nt!ExAllocatePoolWithTag。然后,SMB_COM_TRANSACTION2發送一條消息來執行shellcode。返回值以臨時頁面上的固定偏移量保存,并使用讀取原語泄漏回攻擊者。我們可以看到stub功能如下:
最后,清除頁面,將攻擊者提供的shellcode寫入池分配的頁面,并發送一條消息以觸發執行。
緩解措施對利用的影響
由于幾個內核安全性的改進,利用此漏洞的技術已經不能直接適用于較新的平臺了。特別是:
1、虛擬機管理程序強制的代碼完整性(HVCI)可防止未簽名的內核頁面被執行,并防止攻擊者復制和執行代碼,即使存在RWX內存。
2、控制流程保護(CFG)可防止無效的間接函數調用,例如調用損壞的函數指針,此漏洞利用的技術可觸發代碼執行。
1024你懂的国产日韩欧美_亚洲欧美色一区二区三区_久久五月丁香合缴情网_99爱之精品网站
責任編輯:韓希宇
免責聲明:
中國電子銀行網發布的專欄、投稿以及征文相關文章,其文字、圖片、視頻均來源于作者投稿或轉載自相關作品方;如涉及未經許可使用作品的問題,請您優先聯系我們(聯系郵箱:cebnet@cfca.com.cn,電話:400-880-9888),我們會第一時間核實,謝謝配合。