標籤:

APT34攻擊再升級,利用CVE-2017-11882漏洞攻擊中東國家

背景

APT34是長期從事網路攻擊的伊朗黑客組織,該組織從2014年開始活動,活動的主要目的是為了國家利益。APT34組織的攻擊目標廣泛,包括金融業、政府、能源行業、化學行業和電信業,主要攻擊目標在中東。

APT34使用的工具有公開的和非公開的,經常使用魚叉式釣魚攻擊和社會工程系技巧。今年7月,FireEye發現了一起使用基於PowerShell的後門——POWRUNER 和BONDUPDATER對中東的組織進行攻擊活動。BONDUPDATER是含有DGA功能的下載器。該後門利用的是CVE-2017-0199漏洞通過惡意rtf文件進行傳播。

這次攻擊中,APT34利用了最近的office漏洞CVE-2017-11882來應用POWRUNER和BONDUPDATER。

CVE-2017-11882: Microsoft Office棧內存破壞漏洞

CVE-2017-11882影響許多的Office版本,利用該漏洞沒有在內存中合理處理對象,遠程用戶可以在當前用戶環境下執行任意代碼。微軟11月14日就修復了該漏洞,漏洞的報告者1周後公布了POC代碼。

該漏洞存在與老版的公式編輯器(EQNEDT32.EXE)中,公式編輯器是office的組件之一,用於插入數學公式和對公式求值。公式編輯器是用OLE(Object Linking and Embedding,對象連接與嵌入)技術嵌入在office文檔中。

公式編輯器創建後是一個單獨的進程,而不是office應用的子進程。 如果有偽造的公式傳遞給公式編輯器,在拷貝數據時,也是不會合理地檢查數據長度,這會導致棧內存破壞。而且EQNEDT32.exe用的舊版的編譯器進行編譯,也不支持ASLR(address space layout randomization地址空間隨機化),這樣攻擊者就可以很容易地改變程序執行流。ASLR是保護緩衝區溢出問題的安全技術。

漏洞分析

APT34向攻擊的目標組織發送一封惡意的魚叉式釣魚郵件,釣魚郵件附件中含有一個.rtf文件(MD5: a0e6933f4e0497269620f44a083b2ed4)。惡意rtf文件利用CVE-2017-11882破壞內存中的棧,然後將惡意數據送進棧內。惡意軟體會用EQNEDT32.EXE的指令地址覆寫函數地址。覆寫的指令(圖1)用於從kernel32.dll中調用WinExec函數,指令地址為00430c12。

Figure 1覆寫函數地址

利用該漏洞之後,在當前登錄用戶環境下,調用WinExec函數創建了一個子進程mshta.exe。進程mshta.exe會從mumbai-m.site/b.txt下載惡意腳本,並執行,如圖2。

Figure 2 拷貝到破壞的棧緩存的攻擊者數據

執行工作流

惡意腳本通過這些步驟成功地執行,最終建立與C2伺服器的連接。從利用漏洞開始的所有事件如圖3。

Figure 3 CVE-2017-11882和POWRUNER攻擊序列

1. 惡意.rtf文件利用 CVE-2017-11882;

2. 惡意軟體利用EQNEDT32.EXE的現存指令覆寫函數地址;

3. 惡意軟體創建子進程mshta.exe,mshta.exe從mumbai-m.site/b.txt下載惡意腳本;

4. b.txt含有PowerShell命令,可從dns-update.club/v.txt下載一個dropper。PowerShell命令會將v.txt重命名為v.vbs,並執行該腳本。

5. v.vbs腳本會在C:ProgramDataWindowsMicrosoftjava目錄下釋放4個組件,hUpdateCheckers.base,dUpdateCheckers.base,cUpdateCheckers.bat和GoogleUpdateschecker.vbs。

6. v.vbs用CertUtil.exe來解碼hUpdateCheckers.base、dUpdateCheckers.base 2個base64編碼的文件,釋放hUpdateCheckers.ps1 和dUpdateCheckers.ps1到staging目錄。CertUtil.exe是合法的Microsoft命令行程序,是Certificate Services的一部分。

7. 運行cUpdateCheckers.bat來建立一個GoogleUpdateschecker.vbs的計劃任務。

8. GoogleUpdateschecker.vbs在休眠5秒後執行。

9. 然後從staging目錄下刪除cUpdateCheckers.bat 和*.base文件。

Figure 4 Execution Workflow Section of v.vbs的執行工作流部分

在成功執行了Execution Workflow部分的步驟後,Task Scheduler會每分鐘運行一次GoogleUpdateschecker.vbs,輪流執行dUpdateCheckers.ps1 和 hUpdateCheckers.ps1腳本。這些PowerShell腳本是最後一階段的payload,含有DGA功能的下載器和後門組件,可以連接C2伺服器接受命令,並執行其他惡意活動。

hUpdateCheckers.ps1 (POWRUNER)

POWRUNER是一個後門,是可以從C2伺服器發送和接收命令的PowerShell 腳本。POWRUNER可以通過Task Scheduler設定後每分鐘執行一次。

Figure 5 POWRUNER PowerShell腳本hUpdateCheckers.ps1

POWRUNER首先發送隨機的GET請求到C2伺服器,然後等待響應。伺服器會響應一個not_now或11位隨機數。如果響應是隨機數,POWRUNER會發送另一個隨機的GET請求到伺服器,並保存響應消息。然後,POWRUNER檢查保存的隨機數響應的最後一位,並把值翻譯為對應的命令,並執行相應的動作。數字、命令和動作的對應表見表1。

Table 1 POWRUNER命令

成功地執行命令後,POWRUNER發送結果到C2伺服器並停止執行。

C2伺服器可以發送PowerShell命令來獲取受害者系統的截屏並保存。如果fileupload命令執行了,POWRUNER會發送截屏文件到C2伺服器。圖6是發給C2伺服器的PowerShell 「Get-Screenshot」函數。

Figure 6 Powershell截屏函數

dUpdateCheckers.ps1 (BONDUPDATER)

APT34的高級之處就是使用DGA來生成子域名。BONDUPDATER腳本是基於硬編碼的B007命名的,用傳統的DGA演算法來生成與C2伺服器通信的子域名。

DGA 實現

圖7是用BONDUPDATER的DGA生成示例域名的分解過程。

Figure 7 BONDUPDATER創建的子域名的分解

1. 用下面的表達式創建的隨機數生成器:$rnd = -join (Get-Random -InputObject (10..99) -Count (%{ Get-Random -InputObject (1..6)}))

2. This value is either 0 or 1. It is initially set to 0. If the first resolved domain IP address starts with 24.125.X.X, then it is set to 1.

3. 值是0或者1,初始值設定為0。如果域名第一次解析的IP地址為24.125.X.X,就設為1。

4. 初始值設為000,然後每次DNS請求後增加3。

5. 系統UUID的前12個字元。

6. 「B007」硬編碼字元串。

7. 硬編碼的域名mumbai-m.site。

BONDUPDATER 會嘗試解析生成的DGA域名,基於IP地址解析執行下面的動作:

1. 在%temp% 文件夾下創建文件,創建的文件名為解析的IP地址的最後2個8位位元組。

2. BONDUPDATER計算文件名的最後一個字元,執行相應的動作。

Table 2 BONDUPDATER動作

Figure 8 Domain Generation Algorithm

執行後生成的子域名的例子:

143610035BAF04425847B007.mumbai-m.site

835710065BAF04425847B007.mumbai-m.site

376110095BAF04425847B007.mumbai-m.site

網路通信

圖9是POWRUNER後門客戶端和伺服器之間的網路通信示例。

Figure 9 網路通信示例

在本例中,POWRUNER客戶端發送隨機的GET請求到C2伺服器,然後C2伺服器發送隨機數字(99999999990)作為響應。因為響應以0結尾,POWRUNER會發送另1個隨機的GET請求來獲取其他的命令字元串。C2伺服器會返回Base64編碼的響應。如果伺服器返回的響應是not_now,POWRUNER就中止請求並停止執行。

Figure 10 "not now"伺服器響應示例

Batch命令

POWRUNER 可能從C2伺服器接收batch命令來從系統手機host信息。這包括當前登錄的用戶信息、主機名、網路配置數據、激活的連接、進程信息、本地和域名管理帳號、用戶目錄枚舉和其他數據。圖11是batch命令示例。

Figure 11 POWRUNER C2發送的batch命令

POWRUNER / BONDUPDATER的其他使用

2017年7月,APT34就開始使用POWRUNER和BONDUPDATER來攻擊中東的組織了。FireEye發現利用CVE-2017-0199漏洞的惡意rtf文件(MD5: 63D66D99E46FB93676A4F475A65566D8)。該文件用GET請求來從94.23.172.164/dupdatech下載惡意文件。

圖12所示,dupatechecker.doc文件中的腳本嘗試從同一伺服器下載名為dupatechecker.exe的文件。

Figure 12 dupdatechecker.doc腳本的內容

dupatechecker.exe 文件 (MD5: C9F16F0BE8C77F0170B9B6CE876ED7FB) 釋放了BONDUPDATER和POWRUNER。這些文件連接到 proxychecker.pro與C2通信。

IOCs

本文翻譯自:fireeye.com/blog/threat,如若轉載,請註明原文地址: 4hou.com/vulnerable/929 更多內容請關注「嘶吼專業版」——Pro4hou

推薦閱讀:

淺談動態爬蟲與去重(續)
為什麼這麼多商業Android開發者不混淆代碼?
你的深度學習應用可能存在安全風險

TAG:信息安全 |