apt34是一個來自于伊朗的apt組織,自2014年起,持續(xù)對中東及亞洲等地區(qū)發(fā)起apt攻擊,涉獵行業(yè)主要包含政府、金融、能源、電信等。攻擊武器庫不斷升級,攻擊手法也不斷推陳出新,而攻擊者不會因為被曝光而停止攻擊行為,這種情況已經持續(xù)多年。
APT34組織背景
4月17日,有國外媒體報道,一個名為“Lab Dookhtegan”的用戶在Telegram上曝光了來自APT34組織的攻擊工具包,一些APT34的受害者數據也同時被曝光出來。該事件如同以前的源代碼泄露事件一樣,極具爆炸性。APT34組織至少從2014年開始,持續(xù)對中東及亞洲的某些國家發(fā)起了多次攻擊,攻擊目標為政府、金融、能源、電信等行業(yè)。該組織的目標一般是伊朗的對立國家,所以有人猜測,該組織是伊朗的某個安全部門,或者是和伊朗政府長期合作的安全公司。該組織善于利用社交媒體,偽造各種身份的互聯網賬號,通過社交工程技巧接近攻擊目標。同時,該組織的攻擊武器庫不斷升級,攻擊手法也越來越高明,他們將魚叉釣魚等攻擊手段與新型攻擊技術相融合,不斷擴大現有目標的滲透范圍。
被曝光的APT34組織成員
根據泄露的Webshell列表,很明顯該組織近期對中國進行了大規(guī)模的攻擊行動。這幅圖表列出了超過10家標注為“China”的網站被攻破,可作為證據來支持針對國內攻擊的論述。
Lab Dookhtegan曾經聲稱每隔幾天就會曝光一名組織人員的個人信息,不過現在Telegram和Twitter上的帳號已經被封鎖。
泄露工具介紹
此次源代碼泄露的事件中,包含了大量APT34組織常用的重要攻擊武器,如:Webshells_and_Panel、 posion frog、Webmask、Glimpse。東巽科技2046Lab使用《鐵穹高級持續(xù)性威脅預警系統(tǒng)》對這些攻擊武器做了威脅檢測,并從技術層面做了深入分析。 ? ?
檢測結果
1.Webshell預警:【高危】
2.文件沙箱檢測預警:【高危】
3.DNS隱蔽信道檢測預警:發(fā)現利用DNS異常長域名傳輸的隱蔽隧道
?
攻擊武器分析
? ?
1.Webshells_and_Panel
Webshells_and_Panel目錄中主要包含了多種C#編寫的Webshell工具,在Webshell目錄中包含兩個主要的文件夾,分別為HighShell和HyperShell。
?1.1?HighShell ?
在HighShell目錄中只有HighShell.aspx,該Shell為針對Windows服務器的WebShell。打開后默認界面如下圖:
通過上面的圖片可以看出,該版本為5.0版本,擁有認證、文件上傳、命令執(zhí)行、數據庫操作等多項功能。
使用該Webshell需要在“Login”標簽后的紅色輸入框中輸入連接密碼( Th!sN0tF0rFAN) 后點“Do it”按鈕,當輸入框變?yōu)榫G色即可通過該Webshell對服務器進行相關操作。下圖為操作“command”命令并獲得服務器信息的操作圖:
?1.2 HyperShell
HyperShell是一個包含多個源碼文件的項目,其中包括多個WebShell的源碼文件。以下為幾個可以使用的webshell的功能。
simple.aspx ?
包含認證、命令執(zhí)行和文件上傳功能的簡易webshell是simple.aspx。打開后如圖所示:
在Password輸入框中輸入連接密碼(MkRg5dm8MOk)點擊“Login”按鈕后,即可對服務器進行命令控制及文件上傳。密碼連接如下圖:
下圖為操作“command”命令并獲得服務器信息的操作圖: ? ?
simpleDownload.aspx ?
simpleDownload.aspx只有一個上傳功能,如下圖:
?HighShelllocal.aspx ?
HighShelllocal.aspx為HighShell的升級版,版本號為8.6.2,該版本功能與獨立的5.0版大致相同主要對界面及功能進行了優(yōu)化,界面圖如下:
2.poison frog
?2.1 Agent
2.1.1 poisonfrog.ps1
Poisonfrog.ps1 is the only file of Agent, which is used to plant backdoor programs on compromised hosts.。該文件運行后,會在失陷主機的C:UsersPublicPublic目錄下留下3個文件,dUpdater.ps1、hUpdater.ps1和UpdateTask.vbs。
主機上留下的后門程序是UpdateTask.vbs腳本,每10分鐘通過計劃任務自動運行。它的作用是運行兩個腳本:dUpdater.ps1和hUpdater.ps1。
2.1.2 ?dUpdater.ps1
此腳本為遠控腳本,它會生成DNS域名并連接控制服務器,從中接收遠程指令,并進行文件的發(fā)送和接收。在生成DNS域名時使用了DGA.Changer算法,動態(tài)地計算服務器域名, 2046Lab對這個DGA.Changer算法進行了復原:
receive函數:
運行EEA函數獲取VVA域名,JJA參數設為r;
嘗試解析VVA域名,若失敗,則拋出異常,并重新生成新域名且嘗試解析新域名,重復操作直到域名解析成功;若成功,則取第一個成功解析的IP,并將該IP的每一段分別取出;
若IP為1.2.3.*,則將NNA設為false,將RRA的值寫入PPA的文件,并退出主函數;
若NNA為true,修改RRA?的值,為IP的前三段,繼續(xù)循環(huán)主函數;
若IP為24.125.*.*,則將IP的第三段與第四段拼接作為C:UsersPublicPublic$DDAreceivebox子文件夾名(PPA),將GGA設為1,將NNA設為true,繼續(xù)循環(huán)主函數;
若IP為11.24.237.110,則停止解析并退出主函數,該IP為OilRig曾經使用的IP。
Send函數:
運行Slaber檢查發(fā)送的文件,運行EEA函數獲取VVA域名,JJA參數設為s;
嘗試解析VVA域名,若失敗,則拋出異常,并重新生成新域名且嘗試解析新域名,重復操作直到域名解析成功;若成功,則取第一個成功解析的IP,并將該IP的每一段分別取出;
若IP為1.2.3.*,則取出IP的第四段得值并循環(huán)主函數;
若IP為11.24.237.110,則停止解析并退出該函數,同時刪除要發(fā)送的文件。
Slaber函數:
檢查發(fā)送的文件大小,超過600kb則報錯,否則運行resolver函數。?
resolver函數:
解析發(fā)送的文件,每30個字符為一組。?
processor函數:
處理接收的文件,MMB為”sendbox”文件夾中的文件;
若接收的文件名以”0”結尾,將接收的文件寫入”sendbox”文件夾內,并使用UTF-8編碼,隨后移除之前接收的文件;
若接收的文件名以”1”結尾,若接收文件內容里存在路徑,則將該路徑作為發(fā)送路徑;
若不存在則將”File not exist”字符串寫入MMB文件,隨后移除之前接收的文件;? ? ? ? ? ? ? ? ? ? ? ? ? ?
若接收的文件名以”2”結尾,將RRB設為”done”文件夾中的文件,將接收的文件移動至”done”文件夾下,再將該文件內容寫入MMB文件,隨后移除之前接收的文件。?
2.1.3 ?hUpdater.ps1 ?
解析”myleftheart.com”的IP,并嘗試連接;
若存在C:UsersPublicPublicfiles cfg.ini文件,則取相應參數字段如srv、usr、pas、prt、dom。將srv與prt的值通過”:”拼接為新字符串,并將該字符串使用http設置為代理服務器,將usr、pas、dom的值作為代理服務器的憑證;若不存在,則獲取默認代理服務器;
OOA:隨機取0至9中的若干個整數,取的個數在1至9個隨機選取,將取出的數拼接;
DDA:為dUpdater.ps1腳本中的DDA;
PPA:DDA的第5位插入OOA所得;
從“http://myleftheart.com/co/$PPA”下載文件,設下載的文件內容為QQA,將QQA以“”作分隔,數組設為SSA。
?p為路徑C:UsersPublicPublicfiles$SSA[0]。
若SSA[2]長度大于0并且SSA[2]不存在“not”字符串,則從http://myleftheart.com/fil/SSA[3]下載文件至C:UsersPublicPublicfiles$SSA[2],再將該內容寫入路徑p;
若SSA[1]長度大于0并且SSA[1]不存在“not”字符串,則上傳路徑p的文件上傳至http://myleftheart.com/res/$PPA$SSA[0];
若SSA[4]長度大于0并且SSA[4]不存在“not”字符串,則上傳路徑SSA[4]d的文件上傳至http://myleftheart.com/res/$PPA$SSA[0];
若SSA中最后一個數據中值為“1”,則循環(huán)運行主函數;
若SSA[0]?長度大于0并且SSA[1]不存在”not”字符串,則上傳路徑p的文件至http://myleftheart.com/res/$PPA$SSA[0],并刪除路徑p的文件。?
2.2??Server Side
Server端是APT34用于管理失陷主機的的總控制端,可以從失陷主機上下載文件,上傳文件到失陷主機。
這個服務端提供了一個簡單的登入界面。
通過一個 JSON 配置文件管理用戶和密碼非常簡單。在泄露的文件中,使用了易于猜測的用戶名(blacktusk)和密碼(fireinthehole)。
下圖中的GUID( /7345SDFHSALKJDFHNASLFSDA3423423SAD22 )的作用是引導瀏覽器進入登陸頁面,這個GUID可以說是很重要的。
The host lists for both HTTP Agent and DNS Agent are also available on the server side.。從這個列表中可以很方便地看到哪些主機現在是受到控制的。
每個HTTP Agent和DNS Agent具有詳細信息的頁面,在這里,就可以對這個失陷的主機下發(fā)C&C的命令,上傳或下載文件了。這里的DNS Agent可能是合并了Glimpse的某些功能,Glimpse在下面做了詳細的介紹。 ? ?
對于失陷主機,APT34使用一個默認的BAT遠控腳本來獲取主機信息,獲取的信息非常的詳細,包括系統(tǒng)、用戶、組、域、特定注冊表、計劃任務、反病毒軟件等等。
3.Webmask
該工具主要部署在攻擊者服務器上,實現DNS代理,針對特定的DNS域名進行劫持,并將域名默認指向本地服務器,通過Squid3+ICAP實現HTTP/HTTPS代理,竊取受害者賬號密碼等敏感信息。
dns-redir目錄:
dnsd.py:DNS代理轉發(fā)腳本config.json:配置文件
dnsd.js: JS類型的DNS代理腳本,和dnsd.py功能類似a。
本地模擬DNS代理功能截圖展示如下:
icap目錄:
icap.py:需要和Squid3結合使用,構建http/https代理,并將代理中的敏感數據記錄到本地。
squid.conf配置文件:
Squid3+ICAP實現透明代理服務器,icap.py腳本對密碼等敏感數據進行提取,記錄到本地log文件中。 ? ?
icap腳本文件中針對應答response_body部分加入了劫持的代碼,在受害者瀏覽器中加載指定的圖片元素。
4.Glimpse
Glimpse包括Agent、Panel和Server三個部分,是一種DNS遠控工具。從Glimpse Server中的某些代碼來看,它的某些功能可能和poison frog是重合的,比如下發(fā)命令的方式。
總體來說,Glimpse和上面介紹的poison frog非常類似。在泄露的資料中,也給了我們Glimpse的使用方法。 ? ?
?4.1 Agent
同樣,Glimpse中的Agent是運行在失陷主機上的后門程序,他的主要功能是接受命令,上傳和下載文件。
?Agent使用主機上的C:UsersPublicLibraries目錄作為其工作目錄。發(fā)送文件、接受文件都會在這個目錄下的子目錄內完成。
Agent可以工作在兩種模式下面,一種是ping模式,另一種是text模式。 ? ?
ping模式主要用來交換主機信息。The text mode is akin to the internal protocol mode between the Agent and Server, which enables the acceptance of internal instructions.。
4.2 Panel
Panel用來查看總控的狀態(tài),可以看到有多少失陷主機被控制,同時在這里可以向失陷主機發(fā)送命令。
可以看到,通過panel對失陷主機發(fā)送命令,并得到了返回結果。
4.3 Server ?
Server是總控端, 通過DNS隧道協議進行通信,能夠 響應Agent發(fā)送的ping模式消息或TXT模式的命令 , 同時也以TXT模式向Agent發(fā)送命令 。根據代碼風格來看,Glimpse和Poison Frog應該是由同一團隊創(chuàng)建的。
Server端支持了更多的TXT模式的協議命令,我們可以簡要的查看一下這些命令的含義。
if (action == 'M') { // in this place we check the request for type of connection ping or text type if (action == 'W') { // in this place we check the request type if its text we response it else if (action == 'D') { else if (action == '0') { // ctrl[0] => action, if 0 = is there any file else if (action == '1') { // ctrl[0] => action, if 1 = sending the file else if (action == '2') {// ctrl[0] => action, if 2 = receiveing the file
IOCs
MD5:
cd0bbff03ce7946cd7c9dc339726d90a9d3d8fe14927172ca5546bdb95d947625e17061bf2dce87d402ddd8531abb49f
域名:
myleftheart.com
IP:
11.24.237.110
防護措施
1.不要輕易打開可疑文件,如電子郵件、可疑鏈接、可疑文檔等等。
2.及時安裝系統(tǒng)補丁,使用最新版本的軟件。
3.安裝殺毒軟件、及時更新病毒庫。