深入調查 Angler 漏洞攻擊工具(EK)

wyzsk發表於2020-08-19
作者: virustracker · 2016/01/22 12:54

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域名陰影技術知識。

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章