【技術向】利用ShadowMove巧妙的隱蔽連線

星河Salaxy發表於2021-04-01

一.   ShadowMove簡介


ShadowMove一種透過複製套接字劫持網路連線的技術,該方法允許惡意程式以靜默方式濫用良性程式建立的TCP連線,釋出於2020年USENIX大會上的一篇標題為《ShadowMove: A Stealthy Lateral Movement Strategy》的文章首次討論了這一技術。ShadowMove不需要提權不需要新的連線不需要額外的身份驗證以及不需要程式注入,這使它很難被現有的主機級和網路級防禦機制發現。


二.   技術分析

圖片

ShadowMove的基本思想是複用已建立的合法連線,從而在受感染的網路內橫向移動。如上圖所示,ShadowMove的工作分為三個主要步驟:首先,它複製合法客戶端應用程式用來與伺服器應用程式通訊的套接字。其次,它使用複製的套接字在客戶端和伺服器之間的現有TCP會話中注入資料包。第三,伺服器處理注入的資料包,並無意中儲存和/或啟動ShadowMove的新例項。透過以上步驟,攻擊者會從客戶端計算機秘密移動到伺服器計算機。

這種技術利用了以下方法:AFD(輔助函式驅動程式)檔案控制程式碼被Windows API視為Socket控制程式碼,因此可以使用WSADuplicateSocket()函式來複制它們。採用non-cooperative程式劫持Socket的一種常見模式,是從程式注入開始的,以便載入我們自己的邏輯來查詢和複用目標Socket。但是在ShadowMove技術的幫助下,我們完全不需要注入任何東西,它只需要開啟具有PROCESS_DUP_HANDLE許可權的程式控制程式碼。在這個控制程式碼的幫助下,我們可以開始複製所有其他的檔案控制程式碼,直到找到名為\Device\Afd的檔案控制程式碼,然後使用getpeername()檢查它是否屬於與目標的連線。

三.   ShadowMove復現


 1. 實驗環境

源主機:windows 10,IP:192.168.43.182

目標主機:ubuntu 18.04,IP:192.168.43.183

2. 實現過程

整個ShadowMove復現過程如下動圖所示:

圖片

1. 目標系統192.168.43.183中開啟nc監聽埠5000。

2. 在源系統192.168.43.182中,建立nc到192.168.43.183:5000的tcp連線。

3. 源系統上執行Project1.exe,引數是nc.exe的PID和目標系統的IP。Project1.exe列舉nc.exe在源系統上執行,找到一個連線到目標系統的套接字,複製它並從shadowmove和重用的套接字寫入hello然後在目標系統上接收。

4. 目標系統將從目標到shadowmove的hello寫回同一個套接字,該套接字由接收Project1.exe檔案在源系統上。

   可以看到Project1.exe從始至終都沒有建立TCP連線,而是透過nc.exe建立的TCP連線進行通訊的。


四.   總結

Shadowmove理論上只能應用於缺乏充分源資訊完整性檢查的明文傳輸的協議,如Telnet、ftp,劫持連線後我們通常能直接掠過身份認證的過程。SSL這類能夠執行充分源資訊完整性檢查的加密傳輸協議不受Shadowmove的影響。

這種套接字複製技術可用於攔截和竊取應用程式中的敏感資料,可以注入惡意資料以對客戶端計算機發起網路釣魚攻擊。Shadowmove由於利用的是現有的良性網路連線,並且不需要任何提升的特權、建立新的連線、額外的身份驗證或程式注入。因此,它能夠很容易逃避主機和網路級別防禦機制的檢測。如果想要完全解決該攻擊,將需要重新設計Windows中控制程式碼的訪問控制機制。這也意味著像ShadowMove這樣的技術將在可預見的將來繼續幫助Windows上的攻擊者。


五.   參考連結

https://www.usenix.org/system/files/sec20summer_niakanlahiji_prepub.pdf

https://www.freebuf.com/articles/web/261429.html


相關文章