https://blogs.sophos.com/2015/07/21/a-closer-look-at-the-angler-exploit-kit/

0x00 前言


在過去的幾年中,犯罪分子廣泛地采用EK(漏洞攻擊工具)來實施木馬感染活動。EK工具通常會出現在名叫Drive-by的攻擊階段,”drive-by”能夠悄悄地把用戶瀏覽器定向到一個惡意網站,而在這個網站上就會放置著某個EK。

然后,EK就會利用安全漏洞,讓用戶感染木馬。整個過程可以是完全隱藏的,并且不需要用戶進行操作。

在本文中,我們研究的就是臭名昭著的Angler EK。

0x01 介紹


Angler最早出現在2013年末,自此以后,Angler在犯罪市場中的受歡迎程度與日劇增。為了繞過安全產品的檢測,Angler使用了多種組件(HTML, JavaScript, Flash, Silverlight, Java等),以及這些組件的不同變種。另外值得一提的是Angler非常活躍。比如,在2015年5月,我們每天都能發現上千個新出現的Angler陷阱網頁,也就是所謂的“Landing page”。

從每周檢測量來看,Angler從2014年中期開始出現,在2014年末突然爆發,接著稍有緩和,然后自2015年起,活動數量又開始攀升:

p1 Figure 1-根據每周檢測量畫出的Angler增長趨勢

由于Blackhole EK在2013年10月停止了活動,相關的攻擊者也被逮捕,所以其他的EK得以發展,并分割了市場份額,但是占主導地位的還是Angler EK。為了顯示Angler的受歡迎程度,我們分析了在3個不同時期中,各個EK的活動情況(2014年9月、2015年2月、2015年5月):

p2 圖2-在2014年9月,2015年2月和2015年5月,根據每周檢測數據衡量的EK活動分布

0x02 流量控制


很明顯,任何EK只有利用了目標計算機上的漏洞并安裝上木馬,才能算是成功。但是,EK還需要大量的輸入流量,才能掌握潛在受害者信息。對于大多數drive-by下載而言,這一點是通過入侵合法網站并注入惡意HTML或JavaScript來實現的。受害網站的級別和受歡迎程度越高,EK能獲取到的流量就會越多。

我們已經發現了好幾種能把用戶的web流量發送給Angler的技術 。其中有很多都利用了簡單的IFRAME(嵌入式 HTML框架)注入,注入的一般是HTML或Javascript,沒有多少意思。但是,Angler使用的某些重定向方法更特殊,值得在這里一提。

2.1 HTTP POST重定向

在前面,我提到過一般來說用戶是看不到重定向過程的。實際上,情況也不一定總是這樣,比如,就從2014年5月的第一個例子來看,我們發現大量的合法網站中既注入了JavaScript也注入了HTML,如下。不同于常規注入,在這里的某些JavaScript中還增加了FORM和DIV元素:

p3 圖3-注入的JavaScript和HTML(檢測為Troj/JSRedir-OA)

在加載頁面時,用戶會看到一個對話框,提示用戶點擊“Yes”或“Cancel”。根據注入的JavaScript來看,無論點哪個,Go() 函數都會運行,移除這個彈窗,添加一個IFRAME占位符,然后提交表單:

p4 圖4-當用戶的瀏覽器注入Troj/JSRedir-OA時顯示的彈窗

表單發送的數據包括3個值(經過編碼),可能是為了協助犯罪分子管理這一重定向機制:

  • IP地址
  • User-Agent 字符串
  • URL

接著,響應POST表單的是HTML和JavaScript(加載到IFRAME占位符中),用于重定向用戶:

p5 圖5- HTTP POST請求的響應中包含用于進行重定向的JavaScript

幾個月后,我們發現了相似的技術,但是這次是一個Flash組件。被攻破的網站經過篡改,會包含有HTML,這個HTML會加載來自另一個被攻破網站的惡意Flash文件。

然后,這個Flash文件中的ActionScript 會獲取各種參數,并發出 HTTP POST 請求。

p6 圖6-在Flash版 Troj/JSRedir-OA中使用的ActionScript

HTTP POST請求的響應和以前一樣(圖5),返回的HTML和JavaScript會重定向用戶。有趣的是,在2015年初,我們發現Nuclear EK也使用了后面這種重定向技術來發送流量。

2.2 域名生成算法

另外我們還觀察到Angler 使用了域名生成算法(DGA)來進行重定向。在2014年,大量的合法網站都被注入了JavaScript,這個JavaScript中添加了一個腳本元素從遠程網站上加載內容,這個遠程網站的主機名是根據當前日期的哈希確定的。這種思路就是要每天都使用不同的域名,但是惡意腳本中不會有以后要使用的域名。這些DGA重定向曾經使用了.EU和.PW域名。

p7 圖7-使用DGA重定向的JavaScript中的代碼段(Troj/JSRedir-OE)

這種重定向方法有缺點,一旦知道了這種算法,安全社區就能夠預測特定日期時使用的目標主機名,并進行攔截,從而有效地阻止攻擊行動。

2.3 HTTP重定向

本章中的最后一個例子利用了web重定向,在這種重定向中使用了HTTP響應代碼302,這個代碼通常是在合法網站上使用,用于轉移其他網站上的訪客。這里會涉及到內容注入,以及與重定向過程中的聯系。在2015年4月,我們注意到用戶在瀏覽eHow網站時會被重定向到Angler。通過分析其流量,我們確定了重定向過程,如圖8。

ehowcdn.com 中的一個合法庫中注入了JavaScript,似乎是從一個Optimizely服務器中加載內容(Optimizely提供了網站分析服務,通常是為了評估web廣告的有效性)。但是,注意在optimizelys.com的主機名結尾有一個“s”,而合法的域名是optimizely.com。

p8 圖8-近期偽裝成Optimizely的重定向

1:eHow網站上的web網頁,2:ehowcdn.com上的腳本會從optimizelys.com上加載腳本,3:用于添加惡意iframe腳本,4:302跳轉到Angler登錄頁

在觀察到這種情況的幾天中,有報告稱其他網站上也發現了相同的重定向(還是cdn3.optimizelys.com)-這次,最后的目標是Nuclear EK。

0x03 漏洞攻擊工具


3.1 Landing page

“Landing page”就是漏洞攻擊工具代碼的起點。通常,登錄頁(Landing page)上會使用HTML和JavaScript內容來識別訪客的瀏覽器以及安裝的插件,這樣EK就能選擇最有可能導致drive-by下載的攻擊手段。

在Angler登錄頁上使用了多種混淆技術。除了增加分析難度,這些技術還能讓犯罪分子更方便地根據每條請求制定不同的內容,從而繞過安全產品的檢測。在過去的幾年中,Angler一直會把自己的主腳本功能編碼成數據字符串,儲存到父HTML中。然后,當瀏覽器加載了登錄頁后,就會獲取和解碼這一內容。有很多惡意威脅都使用了這種anti-emulation技術。

在解碼了最外層的混淆后,就會暴露Angler使用的另一項技術-反沙盒檢查。Angler利用了IE瀏覽器中的XMLDOM功能來判斷本地系統上的文件信息。這樣是為了檢測系統上的安全工具和虛擬化產品。

p9 圖9-Angler登錄頁上的代碼段,這些代碼會檢測不同的安全工具和虛擬化產品

在反沙盒檢測的下面是第二層混淆。某個函數會被調用,用于把幾個長字符串轉換成Unicode(雙字節)數據,其中一些數據實際是隨后添加到網頁上的腳本內容。在大多數情況下是JavaScript,但是有時是VBScript內容(尤其針對的是CVE-2013-2551):

p10 圖10-第二層混淆,隱藏shellcode數據和添加到頁面上的額外腳本內容(在這里CVE-2013-2551是要針對的漏洞,所以JS和VBS內容都要添加)

在各個版本的登錄頁中,增加的腳本內容是為了針對特定的漏洞。但是,所有添加的腳本中都會有代碼來:

  • 動態構建 shellcode
  • 從Angler登錄頁中的一個數組中獲取數據(如下)

Angler登錄頁中包含有一個加密的字符串數組,在解碼頁面上,JavaScript函數會提供一個簡單的代換密碼來解碼一個每個字符串。(有時候,編碼字符串會儲存到一個變量序列中,但是,更常用的是一個數組。)在木馬中使用的秘鑰通常是數組中的第一個字符串(uhBNwdr[0] 下):

p11 圖11-在Angler登錄頁上使用的替換密碼

這個數組的大小和內容會根據這版EK所針對的漏洞而變化。在數組中儲存的數據包括:

  • 托管EK的服務器名稱
  • 用于定位Silverlight內容的文件夾
  • 用于定位Flash內容的文件夾
  • 有效載荷 URLs.
  • Flash 有效載荷字符串 (編碼的 shellcode 獲URL數據)

必須要獲取和解碼這些數據。在這,你可以看到相關的有效載荷字符串都整合到了動態生成的shellcode中:

p12 圖12-用于創建unicode字符串的JavaScript函數,隨后,當shellcode在利用CVE-2014-6332時,會解碼這個unicode字符串

用于加載惡意Flash組件的代碼很直接。假設已經通過了反沙盒檢測,三個很有特點的(get*)函數會獲取和解碼登錄頁上的字符串。然后,這些字符串會用于創建HTML對象元素,然后這個對象會添加到文檔中:

p13 圖13-用于加載惡意Flash內容的Angler登錄頁代碼

3.2 Flash內容

經過多年的發展,Angler的Flash內容也發生了很大的變化。這些樣本會使用不同的技術進行混淆,包括:

  • ActionScript 字符串混淆技術
  • Base64 編碼
  • RC4 加密
  • Flash 混淆/保護工具 (比如,DoSWFsecureSWF)

另外,Angler使用了內嵌的Flash對象。從登錄頁上加載的初始Flash并不是惡意的,而僅僅是作為一個loader通過一個內部Flash來投放漏洞。這個內部Flash可能是一個binaryData對象,或編碼成ActionScript內部中的一個字符串。無論是哪種情況,數據會使用RC4加密。下面是一個1月份的例子:

p14 圖14-最外部的Flash運載著使用了RC4和Base64編碼的內部Flash

登錄頁上的數據會通過使用登錄頁HTML中的一個FlashVars參數,傳遞到Flash上-這是近期EK經常使用的一種技術。

通過loaderInfo對象的參數屬性,就可以訪問ActionScript 。很多EK都利用這種機制,以便:

  • 在有效載荷URL數據中傳遞.
  • 在shellcode中傳遞

這種靈活性能允許動態地修改shellcode,并且不需要重新編譯Flash本身。

圖15中是近期Angler Flash對象中使用的ActionScript代碼段,用于從登錄頁上獲取編碼數據(“exec”變量)。另外,你可以使用某些函數中的控制流混淆來增加分析難度:

p15 圖15-從登錄頁上獲取編碼數據(“exec” 變量),然后通過ActionScript函數解碼

在2015年初,又出現了一些Adobe Flash Player 0-day漏洞(包括,CVE-2015-0310,CVE-2015-0311,CVE-2015-0313, CVE-2015-0315,CVE-2015-0336,CVE-2015-0359),Angler很快就盯上了這些漏洞。

在過去的18個月中,越來越多的攻擊活動利用了Flash漏洞,而不是Java,因為Oracle在Java 7 update 51中默認會阻止使用沒有簽名的瀏覽器。

3.3 分析Shellcode

如上,當瀏覽器加載登錄頁時,shellcode就會在腳本中動態生成。Shellcode的內容會根據目標漏洞而變化,但是,所有的編碼方式和結構都是類似的。下面的分析介紹了針對CVE-2014-6332時使用的shellcode。

第一眼看上去,很明顯shellcode數據(圖10和圖12中的shellcode_part1, shellcode_part2 和shellcode_part3 )中并沒有包含有效的代碼。通過進一步的檢查你就知道原因了-其他的數據是從VBScript組件中加載到了shellcode的開頭。圖12中的JavaScript build_shellcode()函數實際是從VBScript(圖16)調用的。

p16 圖16-VBScript的代碼段,用于構建針對CVE-2014-6332 漏洞的shellcode

通過分析VBScript(圖16中的buildshell1)提供的其他Unicode數據,證實了這些代碼是可執行代碼,并且在這些代碼中實際包含了一個解密循環,用于解密shellcode其他部分中的字節,包括有效載荷URL和解密秘鑰。這個解密循環會逆向圖12中的encData() 函數,而有效載荷URL和有效載荷秘鑰就是在這里加密的。

p17 圖17-shellcode的代碼段,例證了VBScript提供的解密循環

我們又檢查了另一個登錄頁樣本,這次針對的是CVE-2013-2551,這個樣本使用了同樣的技術,但是這次,解密循環添加到了JavaScript中:

p18 圖18-JavaScript代碼段,顯示了和圖17中相同的shellcode解密循環

在完成了這個循環后,主要的shellcode主體就解密出來,可以分析了。

在解析了kernel32的基址后,shellcode會解析導出地址表來尋找需要的函數(通過哈希識別)。然后,shellcode會使用LoadLibrary API加載winhttp.dll,并解析這些導出從而找到需要的函數:

模塊 函數(根據哈希導入)
kernel32.dll CreateThread, WaitForSingleObject, LoadLibraryA, VirtualAlloc, CreateProcessInternalW, GetTempPathW, GetTempFileNameW, WriteFile, CreateFile, CloseHandle
winhttp.dll WinHttpOpen, WinHttpConnect, WinHttpOpenRequest, WinHttpSendRequest, WinHttpReceiveResponse, WinHttpQueryDataAvailable, WinHttpReadData, WinHttpCrackUrl, WinHttpQueryHeaders, WinHttpGetIeProxyConfigForCurrentUser, WinHttpGetProxyForUrl, winHttpSetOption, WinHttpCloseHandle

如果漏洞利用成功,shellcode就會下載有效載荷并使用前面提到的秘鑰解密。Angler會根據不同的利用路徑(Internet Explorer, Flash, Silverlight – 至少已知有兩個秘鑰 )使用不同的秘鑰。

在解析了有效載荷后,shellcode會檢查標頭來識別有效載荷更像是shellcode(一開始會啟動一個什么都不做的NOP函數)還是Windows程序(一開始會識別文本字符串“MZ”):

p19 圖19-shellcode中檢查有效載荷類型的邏輯

如果解密后的有效載荷是一個程序,那么會保存并運行這個程序。如果這是一個第二階段的shellcode,那么在這個shellcode(32位和64位都有)的主體中就會內嵌有最后的可執行有效載荷。

當第二階段的shellcode運行時,有效載荷會被直接插入到漏洞應用進程的內存中,而不會首先寫入到磁盤上。這種“不寫文件”的特性是Angler最近新增的。這種機制是為了讓用戶感染Bedep木馬家族,這種木馬能允許攻擊者額外下載其他的木馬。

0x04 網絡情況


在這一部分,我們會把重點從內容分析轉向Angler的網絡活動。

4.1 最新注冊

在大多數web攻擊中,Angler使用了最新注冊的域名。

在drive-by下載攻擊中,我們經常會看到一些注冊地址會在短時間內解析到相同的IP。

有時候,Angler也會使用免費的動態DNS服務,這是EK廣泛使用的一些技術。

4.2 域名陰影(Domain shadowing)

Angler也大量使用了黑來的域名來添加dns記錄,攻擊者在好幾年的時間中都在使用這種技術,最近這種技術似乎再度流行開來。這些犯罪分子更新了一些合法域名的DNS記錄,添加了多個指向惡意EK的子域名-這種技術叫做域名陰影

圖20中就是一個例子,這些活動發生在2015年5月。在這些攻擊活動中,使用了更高級的技術,其中DNS記錄更新成了通配符項目(*.foo.example.com,*.bar.example.com)。在這次攻擊中,DNS記錄更新成了:

  • *.bro.directorsinstitute.net
  • *.fer.directorsinstitute.org

這樣可以允許攻擊者把陰影域名解析到惡意IP上,在截稿時,這個IP來自俄羅斯的一臺計算機。你可以看到,在Angler重定向中使用的三級域名似乎是一個6字符的字符串,可能是為了允許攻擊者跟蹤和確定流量的來源(可能是為了統計和付款)。

p20 圖20-Angler(2015年5月)使用的域名陰影(2級子域名)

在其他的一些例子中,我們發現Angler利用了1級DNS攻擊:

p21 圖21-Angler(2015年5月)使用的域名陰影(1級子域名)

在其他一些情況下,子域名中使用的字符串似乎與陰影域名相關。這就說明有人的參與,而不是由程序隨機生成的字符串。

域名陰影需要犯罪分子能夠修改合法的DNS記錄,很可能是通過竊取到的憑證做到的。網站所有者并不都理解DNS記錄的關鍵性,所以很多供應商/注冊商也不會關心DNS配置。

大多數網站所有者很少需要更新DNS記錄,所以任何更新都需要更多的保護手段,而不僅僅是依靠用戶憑證。下面是一些改進建議:

  • 實現雙重認證
  • 在更改了DNS后,發送郵件通知

通過與Nominet研究人員的合作,我們得以更進一步調查Angler使用的域名陰影活動。我們想要借此確定DNS記錄被攻擊的時間。我們集中調查了一些DNS查詢活動,這些DNS查詢活動來自一些與遭到攻擊的用戶賬戶相關聯的域名,攻擊者主要是利用了2級域名陰影來發動了攻擊(圖20)。

圖22中是2015年2月26日的DNS查詢活動,包括有3個域名的數據(都是來自同一個遭入侵的賬戶)。綠圈表示的是總體查詢量;紫色方塊突出的是超過平均水平的查詢量;白圈表示的是快速增加的查詢量,當時,攻擊者開始在Angler的流量中使用這些域名。

p22 圖22-3個域名在2015年2月16日的DNS查詢時間

通過這些數據可以看出這次攻擊有兩個階段。首先,攻擊者在早上10點,通過少量的DNS查詢測試了DNS記錄。這些查詢測試的是1級子域名(foo.domain.co.uk),并且所有的查詢都是同一個來源。

一旦攻擊者滿意域名的解析情況,我們發現大量的惡意Angler流量中使用了2級子域名。在圖22中,你可以看到攻擊者在圍繞使用不同的域名,每個域名只會活動很短的時間。這也符合我們的遙測數據檢測,我們也在每個主機名上發現了大量類似的活動。

通過這些信息,我們能更好的了解這些基礎設施,以及對用戶流量的控制管理。

4.3 URL 結構

在Drive-by攻擊中的多個組件都使用了一個URL結構,利用這個URL結構可以很好地識別用戶流量中的惡意活動。在以前,就有EK在不同的組件中使用了可預見的URL結構,致使安全廠商可以更容易的檢測和攔截惡意內容。在某些來自Nuclear和Blackhole EK的樣本中包括:

  • 時間戳作為文件名
  • 文件中使用的哈希和文件夾名稱
  • URL的查詢部分中使用了有特點的文本

相似的缺陷曾還出現在了早期的Angler中,但是Angler自此以后就在不停地進化,逐步移除了這些弱點,包括在組件使用的容易識別的URL。

0x05 有效載荷


最后這一部分,我們概括了通過Angler安裝的木馬。為了調查這些木馬,我們分析了在2015年4月使用的有效載荷。

你可以看到,所有在這段時間中收集的有效載荷都是通過IE(59%)或Flash(41%)漏洞投放的:

p23 圖23-在2015年4月投放Angler有效載荷時利用的漏洞

這一點也符合我們最近找到的Angler登錄頁數據,我們還沒有發現Angler利用了Silverlight或Java漏洞。但是,根據受害者的計算機配置比Angler自己更能說明結果,因為Angler不會漏洞攻擊沒有安裝的組件。

這些drive-by下載活動安裝了下列的木馬加載:

p24 圖24-Angler在2015年4月安裝的木馬家族

很明顯,這里有一個勒索軟件- 有asterisks標簽的都是勒索軟件家族,占了木馬攻擊活動的50%以上。最常用的勒索軟件是Teslacrypt

0x06 總結


在本文中,我們自上而下的分析了Angler EK,強調了Angler如何通過感染web頁面來獲取更多的流量。

在提供保護時,理解這種行為是非常關鍵的。Angler會嘗試繞過各個 層級上的檢測。為了繞過名譽過濾機制,Angler會快速地交換主機名和IP,并使用域名陰影來偽裝成合法域名。為了繞過內容檢測,Angler會根據受害者來動態地生成組件,并使用各種編碼和加密技術。最后,Angler使用了混淆和反沙盒技術來增加樣本的收集和分析難度。

如上所述,Angler在近幾個月中已經超過了其對手。可能的原因有很多:比如Angler通過感染網頁能獲取更多的流量,漏洞利用的成功率很高;在犯罪社區中的宣傳;更具吸引力的價格-換句話說,從使用Angler按照“安裝收費”的回報率更高。

有一件事很明顯,對于當今任何瀏覽網頁的用戶,Angler都會造成嚴重的影響。

0x07 致謝


我們感謝安全社區中對追蹤EK活動做出的貢獻各名用戶。但是,我們要致敬@kafeine@EKwatcher對籌備這篇文章所做出的努力。

另外還要感謝SophosLabs的Richard Cohen 和 Andrew O’Donnell對shellcode組件部分做出的貢獻。

感謝Nominet 的Ben Taylor, Sion Lloyd 和 Roy Arends 提供的DNS域名陰影技術知識。

您的支持將鼓勵我們繼續創作!

[微信] 掃描二維碼打賞

[支付寶] 掃描二維碼打賞