一個廣告Banner,不需要任何交互就能讓你的PC感染惡意程序,是不是感覺很牛掰?據說就目前為止,已經有上百萬PC因為這樣的原因被感染。而且很多大型網站似乎都中招了,其中就包括雅虎和MSN,如果你最近看到過下面這樣的廣告,就真的要小心了!注意,只是看到就要小心。
像素中的惡意代碼
安全公司ESET的惡意軟件研究專家在本周二發布了報告,將這個Exploit Kit稱為Stegano。Stegano可以將惡意代碼嵌入banner廣告的像素中,而這些banner廣告通常都在一些廣為人知的大型網站上,每日訪問量超百萬。按照ESET的說法,很多是新聞類媒體網站。
Stegano第一次出現可以追溯到2014年,但是從今年10月初開始演變成了如今這種利用banner廣告在各大型網站傳播的方式。
Stegano這個名字衍生于Steganography(隱寫術)這個詞,這門技術其實是通過一些技術手段將信息或內容隱藏在一些數字圖像之中,因為肉眼不可見而實現所謂的隱形效果。
其實Stegano是將惡意代碼隱藏在透明PNG圖像的阿爾法通道(Alpha Channel)之中,學設計的同學應該知道,圖像的Alpha通道可以通過更改每一個像素的透明度值來定義它們的透明程度。而惡意代碼的傳遞竟然是通過Alpha通道的值來傳遞的,實在是相當高端。接下來,就如大家所知道的那樣,有人將這個包裝后的惡意廣告部署在了一些流量較大的主流網站上。
從左到右依次為初始版本;惡意版本和為了演示效果的惡意版本增強型
“由于這種修改十分細微,被惡意修改過的廣告跟初始版本看起來基本沒有什么差別。”
能看出來下面這兩張圖哪張是原圖,哪張含惡意代碼么~
專家還提到,這些惡意廣告會顯示名為Browser Defence或者Broxu的軟件宣傳內容,隱蔽性極強!最近瀏覽大型網站,如果你也看到這兩個軟件的廣告了,那就得警惕起來了!
“這些banner廣告位于URL為hxxps://browser-defence.com或hxxps://broxu.com的遠程域。”
發起了這次攻擊的組織叫做AdGholas,他們擅長使用一些有效的技術手段來通過廣告傳播惡意軟件,即大家所知道的惡意廣告。他們上次實施攻擊就在7月,僅在一天內就利用惡意軟件感染了超過一百萬PC。
Malwarebytes惡意軟件情報分析的負責人Jerome Segura提到,在短時間內阻止AdGholas的攻擊還是可能實現的,但他們很快就可以利用在線廣告的其他安全漏洞繼續發起攻擊。從Segura的觀察來看,受災的網站至少就包括了雅虎和MSN。
“這是我見過手段最先進的惡意廣告攻擊之一。”Segura說道。
Stegano原理
一旦有用戶訪問了存在這種惡意廣告的網站,這個嵌入在廣告中的惡意腳本就可以在不跟用戶交互的情況下將用戶電腦的信息發送給攻擊者的遠程服務器。
這個惡意腳本針對的是用IE瀏覽器的用戶,它會先利用IE的CVE-2016-0162漏洞來掃描用戶電腦,看看自己是否在沙箱或者某些安全軟件的虛擬環境之中。
在驗證了用戶瀏覽器之后,惡意腳本會通過TinyURL(短網址)服務將瀏覽器重定向到一個網址。之后會加載一個Flash文件,這個文件能夠根據用戶使用的不同Flash Player版本來利用Flash Player的不同漏洞(CVE-2015-8651,、CVE-2016-1019、CVE-2016-4117),雖然這幾個漏洞現在已經補上了。
“在執行成功之后,Stegano會再次檢查自己是否被監控,它的執行Shell代碼會收集一些安全產品安裝或者執行的數據,這些行為就可以看出Stegano的開發者十分多疑。”ESET的安全專家在blog中提到,“如果攻擊者發現檢查的結果沒什么問題,就會試圖再次從這個服務器下載一個加密payload,然后把它偽裝成一個gif圖片。”
過程中會下載偽裝的的“GIF圖片”,再解密其中的payload,然后通過egsvr32.exe或rundll32.exe執行。惡意payloads的類型可能包括后門、間諜軟件、銀行木馬、文件竊取等。
下面這張ESET的圖表可能能讓你更直觀的了解Stegano的攻擊過程:
2到3秒你就被黑了?
以上所有操作都是自動的,僅發生在2到3秒之間,期間未與用戶產生任何交互。
截止目前,Stegano exploit kit已經被廣泛利用,包括著名的Ursnif銀行木馬和Ramnit惡意軟件。
Stegano在2014年使用時,目標是荷蘭用戶;2015年春天開始針對捷克;到了最近,殃及范圍擴大到加拿大、英國、澳大利亞、西班牙和意大利這5個國家。
而且這次攻擊中,Stegano每個攻擊國家采用特定的exploit包,以達到最大范圍的轉播。
由于AdGholas對攻擊目標電腦的安全環境進行多次審查,致使在研究他們攻擊方式的時候也遇到了不少麻煩。最后他是用了一臺家用電腦并下載了Wireshark,這個不會被監測到的網絡抓包工具才讓他有幸觀察到了一次完整的攻擊。
Segura先是在11月27日發現了針對雅虎的攻擊,沒想到兩天后惡意廣告又出現了。AdGholas在這次攻擊中僅僅是改變了域,連域所在的IP地址都沒變。
“如果沒看出來的話我們就遇到大麻煩了。” Segura說道,“這些攻擊在沒有人意識到的情況下就已經發生了。”
就算通過各種方式掃描惡意廣告,但像AdGholas這樣的入侵者還是防不勝防。“只要在線廣告存在一天,問題同樣存在。”Segura說,“當然,也不能夠以偏概全,合法的在線廣告還是占了大多數的。”
ESET的報告中并沒有提到受災的具體包含哪些大型網站。對普通用戶來說,最好的防御辦法就是保證你的電腦運行最新版的軟件和App,同時使用能監測到這種惡意廣告的殺毒軟件吧。
有關Stegano的技術分析
如前文所述,Stegona實際上2014年就已經出現了,不過當前的版本經過了極大加強。據ESET所說,和Stegona比起來,其他一些比較有名的Exploit Kits,比如說Angler和Neutrino實在是小巫見大巫了。
在絕大部分感染場景中,存在問題的廣告都會展示一個名叫Browser Defence的產品,最近還有在展示Broxu軟件的。以下的分析僅針對Browser Defence。
惡意廣告本身位于browser-defence.com這個域名下,URI構造類似于下面這樣(注意還是用的https):
hxxps://browser-defence.com/ads/s/index.html?w=160&h=600
這里的index.html會加載countly.min.js,為腳本提供提供初始參數。這里的countly可不是隨便從GitHub復制一段代碼,其中的代碼進行了大量混淆和自定義修改。這些代碼主要負責的是初始環境檢查。隨后初始環境信息會發回服務器(當成11 gif文件的XOR加密過的參數發回),形如下面這樣:
systemLocale^screenResolution^GMT offset^Date^userAgent^pixelRatio
隨后腳本就會請求廣告Banner了。根據前面初始環境檢查結果,返回惡意廣告,或者也可能是不存在惡意的廣告。
腳本接下來就會加載Banner,然后讀取RGBA結構(有興趣的可以去了解RGBA color space色彩空間,即紅綠藍三個通道+Alpha通道)。如果說加載的是惡意banner,就會從圖片的Alpha通道中解碼一部分JS。
至于具體怎么解碼Alpha通道中的代碼,這里面具體是有一套算法的,是不是感覺很有意思?詳情參見ESET的原文。
某些像素的Alpha通道包含了一些值,所以我們從圖片中看起來,圖片會呈現出一些噪點,主要就是因為這些存在惡意的值。現在知道上面這兩張圖的差別了嗎?實際上,這也的確很難檢測到。
在成功解碼之后,JS代碼還會跟圖片最后編碼的哈希值來校驗其完整性,最終再執行。這些代碼才正式對計算機環境和瀏覽器本身進行檢查,利用的是IE漏洞CVE-2016-0162。檢查的主要是抓包、沙盒還有虛擬化軟件是否存在,當然還有環境中是否存在安全軟件;主要會檢查下面這些東東是否存在:
C:WindowsSystem32driversvmci.sys
C:Program FilesVMwareVMware Toolsvmtoolsd.exe
C:Program Files (x86)VMwareVMware Toolsvmtoolsd.exe
C:WindowsSystem32driversvboxdrv.sys
C:WindowsSystem32vboxservice.exe
C:Program FilesOracleVirtualBox Guest AdditionsVBoxTray.exe
C:Program Files (x86)OracleVirtualBox Guest AdditionsVBoxTray.exe
C:WindowsSystem32driversprl_fs.sys
C:Program FilesParallelsParallels Toolsprl_cc.exe
C:Program Files (x86)ParallelsParallels Toolsprl_cc.exe
C:WindowsSystem32VMUSrvc.exe
C:WindowsSystem32VMSrvc.exe
C:Program FilesFiddlerFiddler.exe
C:Program Files (x86)FiddlerFiddler.exe
C:Program FilesFiddler2Fiddler.exe
C:Program Files (x86)Fiddler2Fiddler.exe
C:Program FilesFiddler4Fiddler.exe
C:Program Files (x86)Fiddler4Fiddler.exe
C:Program FilesFiddlerCoreAPIFiddlerCore.dll
C:Program Files (x86)FiddlerCoreAPIFiddlerCore.dll
C:Program FilesCharlesCharles.exe
C:Program Files (x86)CharlesCharles.exe
C:Program FilesWiresharkwireshark.exe
C:Program Files (x86)Wiresharkwireshark.exe
C:Program FilesSandboxieSbieDll.dll
C:Program Files (x86)SandboxieSbieDll.dll
檢查下來,如果一切順利就會建立僅1個像素的iframe,設定window.name屬性,通過HTTPS重定向至TinyURL。然后TinyURL再通過HTTP重定向至漏洞利用landing頁面。
漏洞利用階段
在成功重定向之后,landing頁面會檢查瀏覽器userAgent(IE),加載一個Flash文件,然后通過一個加密的JSON文件來設定FlashVars參數。在此,landing頁面是作為中間人的角色存在的,提供基本的加密解密功能。
FLash文件內實際上還嵌入了另一個Flash文件(和Neutrino類似),根據Flash版本采用3種不同的exploits。
第二階段,Flash文件會對FlashVars解密。其中包含了一個JSON文件(URI)、針對ExternalInterface的JS函數名、回調函數名和部分其他數據:
{“a”:”/e.gif?ts=1743526585&r=10&data=”,”b”:”dUt”,”c”:”hML”,”d”:true,”x”:”/x.gif?ts=1743526585&r=70&data=”}
接下來,就會通過ExtelnalInterface.call()來調用一個JS,檢查Flash版本,然后通過landing頁面發往服務器。這個過程是通過針對GIF文件請求的加密URI參數完成的。加密算法比較簡單,用到了廣告中的window.name。
而服務器給出的響應就是個GIF圖片,這個圖片前面的部分字節會被丟棄,針對剩下的部分進行解密,然后回傳給Flash。
實際上這里的響應就是個JSON,其中包含了利用三個漏洞(CVE-2015-8651、CVE-2016-1019或者是CVE-2016-4117)的指示字符,還有相應exploit的密碼,以及為下一階段payload做準備的shell code URI。
Shell代碼
利用階段的最后,shell代碼解密,下載加密后的payload——整個過程還是偽裝成GIF圖片。在這個階段,還是會再度執行一次檢查,看看自己有沒有被察覺。
針對文件名包含下面這些字符的軟件,它會格外在意。一旦發現有什么可疑的,就不會再下載payload:
vmtoolsd.exe
VBoxService.exe
prl_tools_service.exe
VBoxHook.dll
SBIEDLL.DLL
fiddler.exe
charles.exe
wireshark.exe
proxifier.exe
procexp.exe
ollydbg.exe
windbg.exe
eset*, kasper*, avast*, alwil*, panda*, nano a*, bitdef*, bullgu*, arcabi*, f-secu*, g data*, escan*, trustp*, avg*, sophos*, trend m*, mcafee*, lavaso*, immune*, clamav*, emsiso*, superanti*, avira*, vba32*, sunbel*, gfi so*, vipre*, microsoft sec*, microsoft ant*, norman*, ikarus*, fortin*, filsec*, k7 com*, ahnlab*, malwareby*, comodo*, symant*, norton*, agnitu*, drweb*, 360*, quick h
Payload部分
接收到Payload之后,也就是上面說的GIF圖片!GIF圖片的前42個字節會被丟棄,對剩下的進行解密,通過下面的某一種方式將其保存到文件中:
1.CreateFile, WriteFile
2.CreateUrlCacheEntryA(*” http://google.com/”,,,,), CreateFileA, CreateFileMappingA, MapViewOfFile, {loop of moving bytes}, FlushViewOfFile, UnmapViewOfFile
隨后再通過regsvr32.exe或者rundll32.exe來執行payload。ESET的分析發現了下面這些payload會被下載,應該還有其他的payload。
Win32/TrojanDownloader.Agent.CFH
Win32/TrojanDownloader.Dagozill.B
Win32/GenKryptik.KUM
Win32/Kryptik.DLIF
從整個過程來看,這個惡意廣告的作者還是花了相當多的心思來確保隱蔽性。不過鑒于利用的漏洞都已經被修復,所以將軟件升級到最新版,這個看起來非常有趣和恐怖的攻擊過程就無法得逞了。
* 參考來源:ESET,inforisktoday,孫毛毛&歐陽洋蔥編譯,轉載請注明來自FreeBuf.COM