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