本文将提供一種檢測使用者已安裝的殺軟的可能的方法。如果我們想對使用者發起攻擊,那麼擷取該使用者已安裝的殺軟資訊是非常有用的。
本文所提供的方法主要基于以下兩點:
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檔案示例:
<?xml version="1.0"?>
<!doctype cross-domain-policy system "/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<site-control permitted-cross-domain-policies="master-only"/>
<allow-access-from domain="*" to-ports="443,995,465,587" />
</cross-domain-policy>
利用以上兩點,就可以産生奇妙的結果。當我們利用一個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的連接配接請求。
作者:阿諾斯基
來源:51cto