一. 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