天天看點

利用 Flash 遠端檢測用戶端安裝的殺軟

本文将提供一種檢測使用者已安裝的殺軟的可能的方法。如果我們想對使用者發起攻擊,那麼擷取該使用者已安裝的殺軟資訊是非常有用的。

本文所提供的方法主要基于以下兩點:

1.現在的主流av在檢測惡意軟體時會進行網絡流量的分析。

通常情況下,http 和 smtp/pop3/imap 這類協定已經被分析了。然而,随着 tls

加密傳輸越來越被廣泛的使用,是以,殺軟要分析被加密的網絡傳輸資訊,就需要針對使用者的應用程式和遠端伺服器執行類似中間人攻擊(mitm)的行為。為了繞過證書鍊的檢測,殺軟需要安裝它自己的根證書到使用者電腦上。之後,對加密的網絡傳輸資訊進行攔截,解密和分析。

如下圖所示:

利用 Flash 遠端檢測用戶端安裝的殺軟

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資料包擷取根證書的名稱,名稱中包含了殺軟的名稱。

利用 Flash 遠端檢測用戶端安裝的殺軟

我建立了一個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 遠端檢測用戶端安裝的殺軟

之後我測試了卡巴斯基,但是并沒有成功,卡巴斯基雖然會對浏覽器的請求做攔截,但是并未攔截flash的連接配接請求。

作者:阿諾斯基

來源:51cto