深入調查 Angler 漏洞攻擊工具(EK)
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年起,活動數量又開始攀升:
Figure 1-根據每週檢測量畫出的Angler增長趨勢
由於Blackhole EK在2013年10月停止了活動,相關的攻擊者也被逮捕,所以其他的EK得以發展,並分割了市場份額,但是占主導地位的還是Angler EK。為了顯示Angler的受歡迎程度,我們分析了在3個不同時期中,各個EK的活動情況(2014年9月、2015年2月、2015年5月):
圖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元素:
圖3-注入的JavaScript和HTML(檢測為Troj/JSRedir-OA)
在載入頁面時,使用者會看到一個對話方塊,提示使用者點選“Yes”或“Cancel”。根據注入的JavaScript來看,無論點哪個,Go() 函式都會執行,移除這個彈窗,新增一個IFRAME佔位符,然後提交表單:
圖4-當使用者的瀏覽器注入Troj/JSRedir-OA時顯示的彈窗
表單傳送的資料包括3個值(經過編碼),可能是為了協助犯罪分子管理這一重定向機制:
- IP地址
- User-Agent 字串
- URL
接著,響應POST表單的是HTML和JavaScript(載入到IFRAME佔位符中),用於重定向使用者:
圖5- HTTP POST請求的響應中包含用於進行重定向的JavaScript
幾個月後,我們發現了相似的技術,但是這次是一個Flash元件。被攻破的網站經過篡改,會包含有HTML,這個HTML會載入來自另一個被攻破網站的惡意Flash檔案。
然後,這個Flash檔案中的ActionScript 會獲取各種引數,併發出 HTTP POST 請求。
圖6-在Flash版 Troj/JSRedir-OA中使用的ActionScript
HTTP POST請求的響應和以前一樣(圖5),返回的HTML和JavaScript會重定向使用者。有趣的是,在2015年初,我們發現Nuclear EK也使用了後面這種重定向技術來傳送流量。
2.2 域名生成演算法
另外我們還觀察到Angler 使用了域名生成演算法(DGA)來進行重定向。在2014年,大量的合法網站都被注入了JavaScript,這個JavaScript中新增了一個指令碼元素從遠端網站上載入內容,這個遠端網站的主機名是根據當前日期的雜湊確定的。這種思路就是要每天都使用不同的域名,但是惡意指令碼中不會有以後要使用的域名。這些DGA重定向曾經使用了.EU和.PW域名。
圖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。
圖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功能來判斷本地系統上的檔案資訊。這樣是為了檢測系統上的安全工具和虛擬化產品。
圖9-Angler登入頁上的程式碼段,這些程式碼會檢測不同的安全工具和虛擬化產品
在反沙盒檢測的下面是第二層混淆。某個函式會被呼叫,用於把幾個長字串轉換成Unicode(雙位元組)資料,其中一些資料實際是隨後新增到網頁上的指令碼內容。在大多數情況下是JavaScript,但是有時是VBScript內容(尤其針對的是CVE-2013-2551):
圖10-第二層混淆,隱藏shellcode資料和新增到頁面上的額外指令碼內容(在這裡CVE-2013-2551是要針對的漏洞,所以JS和VBS內容都要新增)
在各個版本的登入頁中,增加的指令碼內容是為了針對特定的漏洞。但是,所有新增的指令碼中都會有程式碼來:
- 動態構建 shellcode
- 從Angler登入頁中的一個陣列中獲取資料(如下)
Angler登入頁中包含有一個加密的字串陣列,在解碼頁面上,JavaScript函式會提供一個簡單的代換密碼來解碼一個每個字串。(有時候,編碼字串會儲存到一個變數序列中,但是,更常用的是一個陣列。)在木馬中使用的秘鑰通常是陣列中的第一個字串(uhBNwdr[0] 下):
圖11-在Angler登入頁上使用的替換密碼
這個陣列的大小和內容會根據這版EK所針對的漏洞而變化。在陣列中儲存的資料包括:
- 託管EK的伺服器名稱
- 用於定位Silverlight內容的資料夾
- 用於定位Flash內容的資料夾
- 有效載荷 URLs.
- Flash 有效載荷字串 (編碼的 shellcode 獲URL資料)
必須要獲取和解碼這些資料。在這,你可以看到相關的有效載荷字串都整合到了動態生成的shellcode中:
圖12-用於建立unicode字串的JavaScript函式,隨後,當shellcode在利用CVE-2014-6332時,會解碼這個unicode字串
用於載入惡意Flash元件的程式碼很直接。假設已經透過了反沙盒檢測,三個很有特點的(get*)函式會獲取和解碼登入頁上的字串。然後,這些字串會用於建立HTML物件元素,然後這個物件會新增到文件中:
圖13-用於載入惡意Flash內容的Angler登入頁程式碼
3.2 Flash內容
經過多年的發展,Angler的Flash內容也發生了很大的變化。這些樣本會使用不同的技術進行混淆,包括:
另外,Angler使用了內嵌的Flash物件。從登入頁上載入的初始Flash並不是惡意的,而僅僅是作為一個loader透過一個內部Flash來投放漏洞。這個內部Flash可能是一個binaryData物件,或編碼成ActionScript內部中的一個字串。無論是哪種情況,資料會使用RC4加密。下面是一個1月份的例子:
圖14-最外部的Flash運載著使用了RC4和Base64編碼的內部Flash
登入頁上的資料會透過使用登入頁HTML中的一個FlashVars引數,傳遞到Flash上-這是近期EK經常使用的一種技術。
透過loaderInfo物件的引數屬性,就可以訪問ActionScript 。很多EK都利用這種機制,以便:
- 在有效載荷URL資料中傳遞.
- 在shellcode中傳遞
這種靈活效能允許動態地修改shellcode,並且不需要重新編譯Flash本身。
圖15中是近期Angler Flash物件中使用的ActionScript程式碼段,用於從登入頁上獲取編碼資料(“exec”變數)。另外,你可以使用某些函式中的控制流混淆來增加分析難度:
圖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)呼叫的。
圖16-VBScript的程式碼段,用於構建針對CVE-2014-6332 漏洞的shellcode
透過分析VBScript(圖16中的buildshell1)提供的其他Unicode資料,證實了這些程式碼是可執行程式碼,並且在這些程式碼中實際包含了一個解密迴圈,用於解密shellcode其他部分中的位元組,包括有效載荷URL和解密秘鑰。這個解密迴圈會逆向圖12中的encData() 函式,而有效載荷URL和有效載荷秘鑰就是在這裡加密的。
圖17-shellcode的程式碼段,例證了VBScript提供的解密迴圈
我們又檢查了另一個登入頁樣本,這次針對的是CVE-2013-2551,這個樣本使用了同樣的技術,但是這次,解密迴圈新增到了JavaScript中:
圖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”):
圖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字元的字串,可能是為了允許攻擊者跟蹤和確定流量的來源(可能是為了統計和付款)。
圖20-Angler(2015年5月)使用的域名陰影(2級子域名)
在其他的一些例子中,我們發現Angler利用了1級DNS攻擊:
圖21-Angler(2015年5月)使用的域名陰影(1級子域名)
在其他一些情況下,子域名中使用的字串似乎與陰影域名相關。這就說明有人的參與,而不是由程式隨機生成的字串。
域名陰影需要犯罪分子能夠修改合法的DNS記錄,很可能是透過竊取到的憑證做到的。網站所有者並不都理解DNS記錄的關鍵性,所以很多供應商/註冊商也不會關心DNS配置。
大多數網站所有者很少需要更新DNS記錄,所以任何更新都需要更多的保護手段,而不僅僅是依靠使用者憑證。下面是一些改進建議:
- 實現雙重認證
- 在更改了DNS後,傳送郵件通知
透過與Nominet研究人員的合作,我們得以更進一步調查Angler使用的域名陰影活動。我們想要藉此確定DNS記錄被攻擊的時間。我們集中調查了一些DNS查詢活動,這些DNS查詢活動來自一些與遭到攻擊的使用者賬戶相關聯的域名,攻擊者主要是利用了2級域名陰影來發動了攻擊(圖20)。
圖22中是2015年2月26日的DNS查詢活動,包括有3個域名的資料(都是來自同一個遭入侵的賬戶)。綠圈表示的是總體查詢量;紫色方塊突出的是超過平均水平的查詢量;白圈表示的是快速增加的查詢量,當時,攻擊者開始在Angler的流量中使用這些域名。
圖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%)漏洞投放的:
圖23-在2015年4月投放Angler有效載荷時利用的漏洞
這一點也符合我們最近找到的Angler登入頁資料,我們還沒有發現Angler利用了Silverlight或Java漏洞。但是,根據受害者的計算機配置比Angler自己更能說明結果,因為Angler不會漏洞攻擊沒有安裝的元件。
這些drive-by下載活動安裝了下列的木馬載入:
圖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域名陰影技術知識。
相關文章
- 網站被攻擊怎麼辦 如何查詢網站漏洞攻擊源2019-06-25網站
- SQL隱碼攻擊漏洞測試工具比較2012-02-02SQL
- APP滲透測試 深入挖掘漏洞以及如何防止攻擊2019-12-13APP
- 騰訊安全釋出《容器安全在野攻擊調查》2022-03-10
- 網站漏洞檢測工具對CSRF攻擊詳情2019-05-21網站
- XSS漏洞自動化攻擊工具XSSer2017-08-30
- 年度網路攻擊大調查:SSH埠最易受網路攻擊,HTTPS其次!2019-09-19HTTP
- CSRF 攻擊深入淺出2018-04-12
- 前端攻擊 XSS 深入解析2018-04-12前端
- 【漏洞分析】Penpie 攻擊事件:重入攻擊構造獎勵金額2024-09-05事件
- 微軟Word曝零日攻擊漏洞2014-03-25微軟
- Nacos Derby SQL隱碼攻擊漏洞2024-06-27SQL
- DDoS攻擊工具HOIC分析2014-11-27
- Redis漏洞攻擊植入木馬逆向分析2020-08-19Redis
- Web 安全漏洞之 XSS 攻擊2018-11-19Web
- Rails 3爆SQL隱碼攻擊漏洞2012-06-05AISQL
- Mura CMS processAsyncObject SQL隱碼攻擊漏洞2024-05-14ObjectSQL
- 攻擊不斷!QNAP 警告利用0day漏洞Deadbolt 勒索軟體攻擊2022-09-06
- 三星Android OS加密漏洞分析:IV重用攻擊與降級攻擊2022-03-13Android加密
- 安全漏洞在網路攻擊中影響多大?勒索組織趁漏洞修補時機發起攻擊2021-11-11
- 【web安全】深入淺出XSS攻擊2019-05-02Web
- MySQL隱碼攻擊工具sqlsus2017-05-25MySql
- 【漏洞分析】ReflectionToken BEVO代幣攻擊事件分析2023-05-09事件
- httpoxy漏洞遠端攻擊PHPPython應用2017-09-01HTTPPHPPython
- PHP常見漏洞(1)–SQL隱碼攻擊2017-11-08PHPSQL
- 前端面試查漏補缺--(七) XSS攻擊與CSRF攻擊2019-02-23前端面試
- 【網路安全】什麼是SQL隱碼攻擊漏洞?SQL隱碼攻擊的特點!2021-09-06SQL
- 【漏洞】OA辦公系統“烽火狼煙”,高危漏洞攻擊爆發2019-09-24
- 如何做好防護SQL隱碼攻擊漏洞2020-06-01SQL
- 網站被攻擊 如何修復網站漏洞2019-07-29網站
- 安全漏洞問題6:SQL隱碼攻擊2017-11-21SQL
- WordPress SQL隱碼攻擊漏洞與提權分析2015-08-25SQL
- 修復SQL隱碼攻擊漏洞 兩種方法2011-03-16SQL
- 無線攻擊工具NETATTACK 22017-06-28
- 應用服務攻擊工具clusterd2017-09-04
- 【漏洞分析】DoughFina 攻擊事件分析:不做任何引數檢查的去槓桿合約2024-07-15事件
- 漏洞利用查詢工具sandi2017-11-14
- Sophos:2021年66%的受調查組織受到勒索軟體攻擊2022-04-28