本文將提供一種檢測用戶已安裝的殺軟的可能的方法。如果我們想對用戶發起攻擊,那么獲取該用戶已安裝的殺軟信息是非常有用的。
本文所提供的方法主要基于以下兩點:
1.現在的主流AV在檢測惡意軟件時會進行網絡流量的分析。
通常情況下,http 和 smtp/pop3/imap 這類協議已經被分析了。然而,隨著 TLS 加密傳輸越來越被廣泛的使用,因此,殺軟要分析被加密的網絡傳輸信息,就需要針對用戶的應用程序和遠程服務器執行類似中間人攻擊(MITM)的行為。為了繞過證書鏈的檢測,殺軟需要安裝它自己的根證書到用戶電腦上。之后,對加密的網絡傳輸信息進行攔截,解密和分析。
如下圖所示:
2. Flash 支持原始的TCP套接字。
事實上,內嵌在瀏覽器網頁中的swf文件即Flash 可以接受或發送任意TCP數據包到一個遠程服務器的任何一個端口。但是為了安全起見,Flash socket 也支持跨域策略。如果一個Flash想要通過 socket 連接到一臺服務器時,它會連接遠程服務器的 843 端口并且發送一個請求,這個請求的目的是獲取 跨域策略對應的xml文件,即crossdomain.xml也就是我們所說的“主策略文件”。這個xml文件包含了安全策略的具體信息,比如:哪些域名才能連接該服務器的哪些端口等等。
Flash socket crossdomain.xml文件示例:
利用以上兩點,就可以產生奇妙的結果。當我們利用一個Flash文件發起TLS連接,連接請求到遠程服務器的指定端口(如:443,587等等),之后殺軟將會攔截該請求。因此,Flash就會接受到一個由殺軟生成的TLS證書,那么,通過根證書的名稱就可以判斷出用戶安裝了何種殺軟。
整個攻擊流程如下:
0) 用戶訪問我們的網站,用戶的瀏覽器加載了網站中的惡意swf文件。
1)Flash通過socket連接我們的服務器的843端口請求crossdomain.xml文件的內容并獲取請求權限。
2)Flash連接到我們的服務器的一個端口(如443,465等等)并且發送了一個“Client Hello”的TLS數據包。
3)服務器發送“Server Hello”的TLS響應數據包,該數據包攜帶有服務器的證書信息。
4)殺軟攔截了此次傳輸,生成了新的證書并且利用殺軟自己的根證書進行了簽名。
5)Flash接收到了上一步中(已經被殺軟處理過)的TLS數據包,之后再發送給我們的服務器。
6)通過解析TLS數據包獲取根證書的名稱,名稱中包含了殺軟的名稱。
我創建了一個POC (https://github.com/GrrrDog/FlashAV)可能離實際的攻擊效果相差很遠,POC包含了一個特定的Flash和一個Python編寫的 Socket Server。swf 發送原始的TLS請求(SSLv3),并且發送被殺軟處理過的響應數據包到Python Socket Server。Python Socket Server 被用于解析數據包的證書名稱以及構建crossdomain.xml文件內容。
我最初利用 Avast 殺軟進行了測試,IE 和 Chrome 可以測試成功,但是Firefox卻不行,在火狐瀏覽器中 Avast 并未對Flash連接443端口的請求做攔截。但是,在火狐瀏覽器中的Flash連接遠程服務器的465或者587,993等端口時殺軟則會攔截并且也能成功獲取到用戶安裝的殺軟名稱。
之后我測試了卡巴斯基,但是并沒有成功,卡巴斯基雖然會對瀏覽器的請求做攔截,但是并未攔截Flash的連接請求。