深度剖析信息竊取工具DUQU2.0木馬

責(zé)任編輯:editor005

作者:virustracker

2015-06-16 13:54:29

摘自:烏云知識庫

今年年初,卡巴斯基實(shí)驗(yàn)室在安全掃描過程中,檢測到了幾個影響了自家內(nèi)部系統(tǒng)的網(wǎng)絡(luò)入侵行為。攻擊開始時,首先遍歷下列產(chǎn)品的硬編碼注冊表項(xiàng)和注冊表值,來識別卡巴斯基產(chǎn)品的安裝路徑:

0x00 前言

今年年初,卡巴斯基實(shí)驗(yàn)室在安全掃描過程中,檢測到了幾個影響了自家內(nèi)部系統(tǒng)的網(wǎng)絡(luò)入侵行為。

接著我們大范圍調(diào)查了這些入侵事件。我們分析發(fā)現(xiàn)了一個全新的木馬平臺,這個平臺出自Duqu APT小組之手。Duqu APT小組是世界上最神秘,水平最高的APT小組。這個小組從2012年開始銷聲匿跡,直到今天又卷土重來。我們分析了這新一輪攻擊,結(jié)果表明這是2011年Duqu木馬的升級版,懷疑與Stuxnet木馬有關(guān)。我們把這個新木馬和相關(guān)的平臺命名為"Duqu 2.0"。

Duqu利用了0-day漏洞CVE-2015-2360(WindowsKernel中的漏洞)和另外兩個0-day漏洞,攻擊了卡巴斯基實(shí)驗(yàn)室。微軟在2015年6月9日修復(fù)了第一個漏洞,另兩個漏洞在近期也得到了修復(fù)。

0x01 木馬剖析

Filename:隨機(jī) / 根據(jù)具體樣本而定

MD5 (根據(jù)具體樣本而定): 14712103ddf9f6e77fa5c9a3288bd5ee

Size: 503,296 bytes

文件屬性

MSI文件具有一下屬性

Composite Document File V2 Document

Little Endian

OS: Windows, Version 6.1

Code page: 1252

Title: {7080A304-67F9-4363-BBEB-4CD7DB43E19D} (randomly generated GUIDs)

Subject: {7080A304-67F9-4363-BBEB-4CD7DB43E19D}

Author: {7080A304-67F9-4363-BBEB-4CD7DB43E19D}

Keywords: {7080A304-67F9-4363-BBEB-4CD7DB43E19D}

Comments: {7080A304-67F9-4363-BBEB-4CD7DB43E19D}

Template: Intel;1033

Last Saved By: {7080A304-67F9-4363-BBEB-4CD7DB43E19D}

Revision Number: {4ADA4205-2E5B-45B8-AAC2-D11CFD1B7266}

Number of Pages: 100

Number of Words: 8

Name of Creating Application: Windows Installer XML (3.0.5419.0)

Security: 4

其他攻擊中使用的MSI文件可能具有另外一些屬性。例如,我們還發(fā)現(xiàn)了另外幾個字段:

Vendor: Microsoft or InstallShield

Version: 1.0.0.0 or 1.1.2.0 or 2.0.0.0

在Windows資源管理器的文件屬性對話框中,可以查看某些字段。

enter image description here

  這個MSI數(shù)據(jù)包中有兩個二進(jìn)制文件:

ActionDll是一個dll文件,ActionData0是一個經(jīng)過Camellia加密,LZJB壓縮的數(shù)據(jù)payload(不同情況下的加密算法和壓縮算法也不同)。實(shí)際上,經(jīng)過加密或壓縮的二進(jìn)制數(shù)據(jù)塊中,會有好幾層可執(zhí)行代碼。

enter image description here

  在后面的文章中,我們詳細(xì)地說明了這些組件。

第一層:ActionDLL(msi.dll)

原文件名: msi.dll

MD5: e8eaec1f021a564b82b824af1dbe6c4d

Size: 17’920 bytes

Link時間: 2004.02.12 02:04:50 (GMT)

類型: 64-bit PE32+ executable DLL for MS Windows

這個DLL只有一個StartAction導(dǎo)出函數(shù),msiexec.exe進(jìn)程的上下文會調(diào)用這個函數(shù)。當(dāng)這個函數(shù)被調(diào)用時,這個函數(shù)就會獲取一個MSI屬性-PROP,并用這個值來解密actionData0包。

enter image description here

接下來,這段代碼會遍歷12個需要解密并啟動的payload。這些payload是MSI的一部分,可能會包含以下名稱:ActionData0, ActionData1, ActionData2。

我們的這個數(shù)據(jù)包中只包含一個paylioad-“ActionData0”。

第二層:ActionData0

主代碼會被壓縮和加密到這個二進(jìn)制數(shù)據(jù)包中。這個二進(jìn)制的組成包括可執(zhí)行程序,位置無關(guān)代碼塊,和內(nèi)嵌的數(shù)據(jù)對象。這些代碼似乎遵循著某種框架,使用了很多輔助結(jié)構(gòu)。輔助結(jié)構(gòu)中包含了一些系統(tǒng)API的指針和內(nèi)部數(shù)據(jù)塊的偏移量。這些結(jié)構(gòu)能反映出開發(fā)者的風(fēng)格。當(dāng)代碼初始化時,一個字段(一般是前四個字節(jié))中的magic值就會識別結(jié)構(gòu)的狀態(tài)和類型。

這名編碼員還喜歡根據(jù)模塊和輸出名稱的哈希來導(dǎo)入系統(tǒng)API。在可執(zhí)行代碼的很多層上都使用了這個哈希算法。通過兩個DWORD常量就能識別:0x8A20C27和0x67F84FC6。

一般情況下,ActionData0中的代碼會在一個內(nèi)嵌的可執(zhí)行程序-“klif.dll”上運(yùn)行,由這個DLL文件的導(dǎo)出函數(shù)表上的第二個函數(shù)執(zhí)行。也就是說,函數(shù)名稱無所謂,就是要按照函數(shù)表上的順序。當(dāng)調(diào)用這個導(dǎo)出函數(shù)時,下一階段的輔助結(jié)構(gòu)指針就會傳遞到這個函數(shù)上,這樣指針就能使用上一層中設(shè)置的一些值。

enter image description here

但是,在klif.dll執(zhí)行之前,代碼會嘗試另一條路徑。首先,代碼會查找“api-ms-win-shell-XXXX.dll”,其中X可以是任意的十進(jìn)制數(shù)。如果當(dāng)前進(jìn)程中沒有這種名稱形式的模塊,名稱就是無效的。這樣的話,代碼就會遍歷查找任何符合名稱形式的模塊,首先從api-ms-win-shell-0000.dll, api-ms-win-shell-0001.dll, api-ms-winshell-0002.dll開始。這應(yīng)該是Duqu平臺組件的一個依賴選項(xiàng)。

在找到名稱后,代碼會嘗試按照名稱來映射內(nèi)核(section kernel object)對象,這些名稱是使用PRNG算法生成的。節(jié)名稱的格式“BaseNamedObjects{XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX}”,其中X是根據(jù)當(dāng)前系統(tǒng)的啟動時間生成的十六進(jìn)制數(shù)字。到目前為止,節(jié)名稱都是根據(jù)“machine/boot time” 來確定的,這樣每個節(jié)名稱都不一樣,但是如果有其他模塊的進(jìn)程也使用了相同的名稱生成算法,進(jìn)程就能定位這樣的節(jié)。以O(shè)SBoot節(jié)為例,一旦生成了節(jié)名稱,代碼就會打開節(jié),如果能找到節(jié),代碼就會從節(jié)中選取幾個值,然后嘗試打開特定的設(shè)備,并把ICTL代碼發(fā)送到驅(qū)動上。驅(qū)動設(shè)備的名稱和IOC代碼都在KMART.dll 內(nèi)的一個節(jié)中。

這名編碼員非常喜歡用節(jié)來訪問數(shù)據(jù)。在映射klif.dll的代碼/數(shù)據(jù)時,還是要用節(jié)。另外也可以通過硬編碼magic QWORD數(shù): 0xA1B5F8FC0C2E1064來找到這個節(jié)。一旦在當(dāng)前進(jìn)程的地址空間中找到了節(jié),就由這個節(jié)來運(yùn)行代碼。當(dāng)前的MSI文件數(shù)據(jù)包并不能應(yīng)用這種執(zhí)行路徑,但是這種執(zhí)行路徑出現(xiàn)在了代碼中,我們猜測這可能是為了使用通用代碼模版來創(chuàng)建當(dāng)前的MSI數(shù)據(jù)包。當(dāng)然,這也說明,其他的Duqu平臺組件還具有另外的特征。

第三層:klif.dll

Original filename: klif.dll

MD5: 3fde1bbf3330e0bd0952077a390cef72

Size: 196’096 bytes

Link time: 2014.07.06 08:36:50 (GMT)

Type: 64-bit PE32+ executable DLL for MS Windows

很顯然,這個文件偽裝成了卡巴斯基產(chǎn)品的名稱-“klif.sys”。雖然代碼和文件信息與卡巴斯基產(chǎn)品完全不同,但是,這個模塊的導(dǎo)出函數(shù)名稱使用了卡巴斯基實(shí)驗(yàn)室的縮寫:KLInit 和KLDone。

當(dāng)這個DLL加載到一個新進(jìn)程中時,DLL的內(nèi)部結(jié)構(gòu)就會初始化,比如給系統(tǒng)API提供指針的結(jié)構(gòu)。

這個模塊的payload位于KLDone導(dǎo)出函數(shù)上,是導(dǎo)出函數(shù)列表上的第二個函數(shù)。這個導(dǎo)出函數(shù)是從上一層代碼中調(diào)用的。 首先,模塊會確保全局應(yīng)用結(jié)構(gòu)和關(guān)鍵函數(shù)ntdll.dll, kernel32.dll and user32.dll,已經(jīng)初始化。在調(diào)用系統(tǒng)API函數(shù)時,需要使用導(dǎo)出函數(shù)名稱的哈希。哈希算法與前文提到的算法相同,并且也使用了相同的magic常量:0x8A20C27 和0x67F84FC6。

接下來,代碼會遍歷正在運(yùn)行的進(jìn)程列表,并且獲取每個進(jìn)程的小寫名稱哈希。這個哈??梢允?x3E3021CB 的硬編碼值,也就是“avp.exe”字符串的哈希。

攻擊 AVP.EXE

如果“avp.exe”進(jìn)程正在運(yùn)行,模塊就會嘗試打開OSBoot-section,并且嘗試攻擊avp.exe進(jìn)程。攻擊開始時,首先遍歷下列產(chǎn)品的硬編碼注冊表項(xiàng)和注冊表值,來識別卡巴斯基產(chǎn)品的安裝路徑:

在模塊所查詢的注冊表值中包含了卡巴斯基產(chǎn)品的根目錄路徑,如“C:Program FilesKasperskyLabKaspersky Internet Security 15.0.0”

一旦找到了注冊表項(xiàng)和注冊值,模塊就會確認(rèn)avp.exe是不是在那個路徑下面。另外它還會對文件執(zhí)行一些額外的檢查:環(huán)境變量的檢查,文件能否被讀取的檢查,是否是一個PE文件的檢查.

之后這個模塊執(zhí)行如下動作:1.把a(bǔ)vp.exe映射到它內(nèi)部2.改變內(nèi)存區(qū)域的屬性讓代碼執(zhí)行3.改變avp.exe內(nèi)的字符4.使用SSE2 CPU擴(kuò)展對avp.exe打補(bǔ)丁.

接著,模塊會嘗試啟動一個新的線程,線程的開始位置就是其中一個補(bǔ)丁的位置。到目前為止,新的線程會首先調(diào)用avp.exe模塊,這個模塊會執(zhí)行其他的一些調(diào)用,比如,跳回到klif.dll。很顯然,這次攻擊是為了讓avp.exe相信后續(xù)的調(diào)用是安全的,相信調(diào)用堆棧是來自一個合法的avp.exe模塊。繼續(xù)研究代碼,發(fā)現(xiàn):新線程會立刻從avp.exe跳轉(zhuǎn)會klif.dll,并且會嘗試與卡巴斯基產(chǎn)品的微過濾器,也就是klif.sys通信。

事實(shí)上,在與klif.sys通信之前,新線程會打開OSBoot-section,并獲取一個IOCTL代碼和驅(qū)動設(shè)備的名稱,然后把這個IOCTL代碼發(fā)送給設(shè)備。這個節(jié)和相應(yīng)的驅(qū)動(KMART.dll)會給當(dāng)前模塊提供一定的支持。代碼會獲取當(dāng)前進(jìn)程名稱的哈希,并且驗(yàn)證哈希是不是下列三個哈希之一:0x3E3021CB (avp.exe), 0xDE6D4DA0 (msiexec.exe), 0xB915B2D8 (rundll32.exe)。

如果能識別當(dāng)前進(jìn)程名稱的哈希,模塊就會打開KlifComm微過濾器的通信端口,并且發(fā)送一些驅(qū)動通信信息,來和klif.sys通信。通過分析這些信息,我們發(fā)現(xiàn)這項(xiàng)技術(shù)能讓klif發(fā)現(xiàn)不了進(jìn)程或線程操作。所有的殺毒產(chǎn)品都會認(rèn)為這個注冊過的項(xiàng)目是受信任的,所以不會掃描其活動,也不會檢測或攔截其進(jìn)程。另外,這個模塊會要求卡巴斯基產(chǎn)品的自我防御支持,這個功能是防止木馬利用系統(tǒng)技術(shù)來殺掉安全產(chǎn)品的進(jìn)程。這樣的話,即使是管理員用戶也無法終止模塊的進(jìn)程。

我們測試了卡巴斯基的其他一些產(chǎn)品,結(jié)果發(fā)現(xiàn),這些產(chǎn)品都會檢查進(jìn)程的自定義數(shù)字簽名來驗(yàn)證caller進(jìn)程。截至目前,如果沒有額外的驅(qū)動支持,這項(xiàng)技術(shù)不會成功。從2010年開始,如果有進(jìn)程嘗試打開KlifComm微過濾器的通信端口,卡巴斯基的產(chǎn)品就會驗(yàn)證這些進(jìn)程的數(shù)字簽名。這種攻擊只能影響舊版的卡巴斯基產(chǎn)品,比如在2009年發(fā)布的KIS2010。

ima

一般來說,攻擊者現(xiàn)在不會攻擊卡巴斯基在2009年之前發(fā)布的產(chǎn)品。所以,我們有分析了另一種比較合理的解釋。

通常來說,這類攻擊不會攻擊我們的產(chǎn)品,因?yàn)槲覀兊漠a(chǎn)品會檢查進(jìn)程的自定義數(shù)字簽名,來驗(yàn)證進(jìn)程的合法性。為了繞過這種檢測,Duqu 2.0的一個“KMART.dll”模塊給內(nèi)存中的“klif.sys”打了補(bǔ)丁。因?yàn)?“KMART.dll”已經(jīng)利用Windows內(nèi)核漏洞在內(nèi)核模式下運(yùn)行了,所以這種攻擊才能發(fā)揮作用。

enter image description here

  在發(fā)送完代碼后,模塊會繼續(xù)下一階段,也就是進(jìn)程遷移。

CTwoPENC.dll zero-day and KMART.dll

第三層-klif.dll會執(zhí)行多個函數(shù),來保證木馬能駐進(jìn)內(nèi)存,并且繞過殺毒檢測。

很重要的一點(diǎn)就是獲取內(nèi)核權(quán)限。在64位系統(tǒng)上,如果驅(qū)動沒有簽名,用戶就不能加載和運(yùn)行它。雖然其他攻擊者,例如Equation 或 Turla,他們會選擇利用第三方簽名的驅(qū)動,但是Duqu 2.0平臺使用的手段要高明很多。

其中一個payload-“CTwoPENC.dll”捆綁了“klif.dll”。這是一個Windows內(nèi)核漏洞(CVE-2015-2360)。利用這個漏洞,payload就能使用最高權(quán)限來運(yùn)行代碼。我們恢復(fù)了幾個版本的“CTwoPENC.dll”,存在32位和64位版本,編譯時間戳如下:

2014.08.25 01:20:04 (GMT)

2014.08.25 01:19:03 (GMT)

2014.07.06 09:17:03 (GMT)

不同于Duqu 2.0的其他模塊,這些時間戳看起來都是合法的。至于為什么會這樣,我們還不清楚-可能Duqu平臺的開發(fā)者使用的是其他人編寫的模塊,而開發(fā)者忘了修改編譯時間戳。

“CTwoPENC.DLL”是 “win32k.sys” 中存在的一個0-day漏洞,利用這個漏洞,非權(quán)限用戶也能獲取到內(nèi)核權(quán)限。這個模塊會利用漏洞來創(chuàng)建窗口,線程的類別名稱分別是“CPer”, “Zero”, “CTwo”, “Vero” ,并且模塊還能操控回調(diào)指針。

enter image description here

  部分漏洞代碼會注冊窗口類并創(chuàng)建新的窗口

這個漏洞的目的是加載一個“KMART.dll”驅(qū)動。如果漏洞攻擊成功,“KMART.dll”就會從模塊中解壓縮,然后在內(nèi)核模式下發(fā)動攻擊。“KMART.dll”既有32位也有64位版本。然后,這個驅(qū)動會執(zhí)行一個內(nèi)核模式攻擊,攻擊目標(biāo)就是卡巴斯基產(chǎn)品的過濾器“klif.sys”。“KMART.dll”會給系統(tǒng)API函數(shù)-PsGetCurrentProcessId, PsLookupProcessByProcessId的導(dǎo)入表地址打補(bǔ)丁,也會給殺毒驅(qū)動-klflt.sys的輸出函數(shù)KlGetStringRef 打補(bǔ)丁。在函數(shù)被攔截之前,惡意代碼已經(jīng)把惡意模塊偽裝成來自進(jìn)程/文件“avp.exe”(使用殺毒組件的真實(shí)位置),這樣就能繞過殺毒軟件的監(jiān)視。

在測試期間,所有的Windows版本(32位和64位的XP, Vista, 7, 8, 8.1)上都受這個漏洞的影響。微軟于2015年6月9日修復(fù)了這個漏洞。

0x02 PAYLOAD容器和遷移

payload容器中包含一個短代碼節(jié),用于描述目標(biāo)CPU的架構(gòu),payload類型和目標(biāo)進(jìn)程的名稱或哈希。當(dāng)模塊使用某些內(nèi)嵌代碼或文件時,代碼中一般會有兩個代碼變量:32位和64位。每個payload的運(yùn)行類型都是根據(jù)單一字符來識別。當(dāng)前模塊支持這5種payload 運(yùn)行類型:g,i,k,l,q。開發(fā)者使用的字符按照字母表順序排列,也就是說,代碼中原來可能還有其他的payload類型,只不過被移除了。

運(yùn)行類型為“L”的payload

首先,代碼會在其他進(jìn)程中查找權(quán)限。進(jìn)程句柄是硬編碼的,或者是通過查找當(dāng)前運(yùn)行進(jìn)程,獲取進(jìn)程的名稱,然后對比已知哈希來獲得的。模塊中包括下列硬編碼進(jìn)程的哈希: 0x31283314 (services.exe), 0x1026D1BA (lsass.exe), 0x3BD2498C (svchost.exe)。

如果發(fā)現(xiàn)了任何識別出的進(jìn)程,模塊就會打開進(jìn)程標(biāo)記,并驗(yàn)證下列的權(quán)限是否可用:

SeDebugPrivilege

SeTcbPrivilege

SeAssignPrimaryTokenPrivilege

SeIncreaseQuotaPrivilege

SeImpersonatePrivilege

SeRestorePrivilege

如果這些權(quán)限可用,模塊就會復(fù)制進(jìn)程標(biāo)記并保存到內(nèi)部結(jié)構(gòu)中,以便日后使用。

模塊在當(dāng)前系統(tǒng)中,查找一個可用的殺毒軟件和一些通用進(jìn)程。如果什么都沒有發(fā)現(xiàn),模塊就會嘗試查找下列軟件的可執(zhí)行文件:

20多個卡巴斯基的產(chǎn)品

McAfee VSCore, SystemCore, HIP

Symantec Internet Security ·

Bitdefender

ESET ·

H+BEDV ·

TrendMicro Network Security Component ·

Rising AV ·

Avast ·

AVG 2012/2013/2014/2015 ·

F-Secure ·

Qihoo 360 Security ·

通用Windows 進(jìn)程:

o %programfiles(x86)%windows DefendermsmpEng.exe

o %systemroot%syswow64svchost.exe

o %systemroot%system32lsass.exe

o %systemroot%system32svchost.exe

當(dāng)模塊發(fā)現(xiàn)了一個這樣的可執(zhí)行程序后,模塊會從發(fā)現(xiàn)的位置上運(yùn)行一個新的進(jìn)程,并使用自己的代碼替換當(dāng)前可執(zhí)行文件中的可執(zhí)行代碼,代碼會經(jīng)過加密和壓縮。

如果代碼能從具有安全權(quán)限的進(jìn)程中,找到一個安全標(biāo)記,代碼就會使用CreateProcessAsUser API來創(chuàng)建一個新的進(jìn)程,在這時,代碼就會使用得到的安全標(biāo)記。否則,代碼只會簡單地生成一個新的進(jìn)程。

這個新進(jìn)程在啟動時,處于掛起和調(diào)試狀態(tài)。在新進(jìn)程啟動前,為了簡化代碼注入和數(shù)據(jù)操控,子進(jìn)程的DEP是禁用的。這樣,從外表上看,這個進(jìn)程就像是一個殺毒程序的進(jìn)程,但是它的內(nèi)部代碼可完全不是合法的模塊。

運(yùn)行模式為“G”的payload

這種payload與上面的payload幾乎一樣,但是這個payload的載入程序更簡單-這個Loader不進(jìn)行hijack和提權(quán)步驟。注入進(jìn)程的選擇是自動的,只要是可用進(jìn)程就可以。

運(yùn)行模式為“I”的payload

這種payload類似于G類 payload,但是它的載入程序在解析payload的標(biāo)頭時有區(qū)別:這個載入程序只會選取4個字節(jié)來作為進(jìn)程的哈希,而是不是進(jìn)程名稱字符串。這種方法可能是為了隱藏目標(biāo)進(jìn)程的名稱,但是,并不是整個模塊都應(yīng)用了這種方法。

運(yùn)行模式為“K”的payload

這種payload會在當(dāng)前進(jìn)程的上下文中運(yùn)行。代碼僅僅會復(fù)制需要在獨(dú)立內(nèi)存中執(zhí)行的代碼,然后在單獨(dú)的線程中運(yùn)行這些代碼。在線程完成執(zhí)行后,執(zhí)行就會被攔截。

運(yùn)行模式為“Q”的payload

這種payload與 Q類 payload一樣,但是這種payload不會攔截新線程的執(zhí)行。目前來看,新代碼是異步運(yùn)行的。

在payload容器打開后,代碼就會遷移到另一個進(jìn)程,安全軟件會保護(hù)這個進(jìn)程,這樣真正的惡意代碼就啟動了。在多數(shù)情況下,我們稱其為后門通道,能監(jiān)聽協(xié)調(diào)器的通信。在很少的情況下,某些設(shè)備上的協(xié)調(diào)器模塊才能與C2通信,這是才可以作為一個雙向代理,來提供大量的二級插件。

插件化模塊平臺

除了基本的遠(yuǎn)程后門,攻擊者還在域控制器上和受害者的設(shè)備上,部署了更復(fù)雜的數(shù)據(jù)包。這些MSI軟件包包括很多模塊,各自的作用也不同。

具備完整功能的軟件包很大-18MB,基本的遠(yuǎn)程后門只有500KB。這兩者的結(jié)構(gòu)相同,都有ActionDll和加載程序,但是軟件還有用于載入和運(yùn)行的插件。

分析中,我們識別了100多種插件的變種。關(guān)于插件的描述如下。我們使用MD5的前兩個字節(jié)創(chuàng)建了虛擬標(biāo)識符,來區(qū)分插件。

03B7-Duqu2.0的主要模塊,大師手筆

1、與cc的通信可以以多種協(xié)議進(jìn)行

2、可以創(chuàng)建一個自簽名證書的中間cc代理程序

3、可以啟動插件框架,加載管理所有的附加插件

可以使用HTTP HTTPS SMB網(wǎng)絡(luò)管道 或者加密的TCP直連的方式通信.跟2011duqu一樣它可以把交互隱藏在Jpeg或者gif圖片中通過http的方式來進(jìn)行.請求名字,url,和user-agent在不同的攻擊中可能是不同的.

已知其他變種:3026, 4F11。

0682 –收集基本系統(tǒng)信息:

當(dāng)前運(yùn)行進(jìn)程的列表

活動桌面和終端會話

收集到的信息會通過caller提供的命名管道來傳輸。

已知其他變種:C0B7

073C **–在客戶端和服務(wù)器上應(yīng)用完整的Windows Socket傳輸**。提供工廠類來封裝網(wǎng)絡(luò)函數(shù)。

0872-當(dāng)Windows安裝程序啟動了惡意軟件安裝包時,MSI CustomAction library就會被激活。然后,加載包含payload的加密二進(jìn)制,接著解密,并在內(nèi)存中執(zhí)行。

版本信息中的名稱有好幾個:svcmsi_32.dll, msi3_32.dll, MSI.dll, msi4_32.dll。

加密算法也不同:Camellia 256, AES, XXTEA。

從MSI參數(shù)中提取出的解密密鑰可能是:PROP,HASHVA, CKEY。

通過前綴(根據(jù)具體情況)來搜索加密的二進(jìn)制對象:ActionData, CryptHashs, CAData。

已知存在32位和64位版本。其他已知變體:8D7C, 16EF, E6E5,434C, 44BD, F708。

09A0-64位變體,能竊取文件內(nèi)容。搜索符合下列規(guī)則的文件:

*.inuse, *.hml

包括“data.hmi” 或 “val.dat”的文件名

/Int/HMI/ 或/LG/HM/文件夾的文件

enter image description here

enter image description here

09A0 插件感興趣的文件名稱和目錄名稱

已知其他變體:8858

0AB8 –提供25個函數(shù),這些函數(shù)能操控文件和目錄:

列出目錄下的文件

上傳或下載任意文件

讀/寫文件內(nèi)容

在某些情況中,模塊會搜索目錄-“int”, “lg”, “ofmd”, “ l”, “ak”,以及擴(kuò)展名-“.part”, “.manual”, “.inuse”。

enter image description here

  0AB8 插件感興趣的文件目錄名稱

其他已知變體:A69E

0B97-網(wǎng)絡(luò)傳輸。利用API來連接socket和caller提供的管道。其他變體:56A2。

152B-網(wǎng)絡(luò)和域發(fā)現(xiàn)。

枚舉域中所有的服務(wù)器

嘗試鏈接遠(yuǎn)程注冊表并枚舉“HKEY_USERS”中所有的用戶。然后把用戶名轉(zhuǎn)換成SID。

枚舉所有可見的網(wǎng)絡(luò)共享

其他已知樣本:A987

1C71-把文件數(shù)據(jù)放到內(nèi)存中。

2125-網(wǎng)絡(luò)感染模塊。嘗試從正在運(yùn)行的進(jìn)程中,獲取管理憑證。然后使用Windows共享來連接到一個目標(biāo)設(shè)備。接著,惡意DLL后門成功感染設(shè)備;目標(biāo)目錄是變化的,可能在UPDROOT$, ADMIN$ 或 C$。使用自定義SMB數(shù)據(jù)包來識別目標(biāo)OS的版本。然后使用新創(chuàng)建的服務(wù)“svcmsi_32@”,來啟動目標(biāo)惡意DLL。這個模塊通過Windows管道與目標(biāo)后門通信。其他變體:DB65。除了惡意DLL,模塊還會上傳一個新的MSI數(shù)據(jù)包,并且依賴MSIEXEC.EXE 通過新創(chuàng)建的服務(wù)“msisvc_32@”來啟動MSI,目標(biāo)MSI的名稱是隨機(jī)生成的,名稱模版是“tmp%x.tmp”。

enter image description here

  在被感染時,Windows創(chuàng)建的事件日志(系統(tǒng))項(xiàng)目

模塊通過竊取當(dāng)前運(yùn)行進(jìn)程的token來獲取管理憑證。這些進(jìn)程需要是管理員權(quán)限用戶啟動的。所以,模塊首先會直接在域控制器中,查詢當(dāng)前域中的100個管理員用戶名。

enter image description here

  網(wǎng)絡(luò)感染模塊使用的遠(yuǎn)程位置

24B7-遠(yuǎn)程桌面管理。獲取屏幕截圖,同時可以發(fā)送輸入到桌面,移動鼠標(biāo)光標(biāo)。存在32位和64位版本的變體。其他的已知變體:65BE, 7795, BDC8, DEE2

26D6-檢測正在運(yùn)行的網(wǎng)絡(luò)嗅探器(wireshark, tcpview, netstat, dumpcap, perfmon),設(shè)置一個TCP服務(wù)器,并通過網(wǎng)絡(luò)管道通信。內(nèi)部名稱:“P.dll。

2829-收集系統(tǒng)信息

監(jiān)控USB設(shè)備連接

收集USB驅(qū)動器的歷史記錄

枚舉網(wǎng)絡(luò)共享,窗口標(biāo)題,系統(tǒng)路由表

讀寫加密文件

2913-WMI數(shù)據(jù)收集

枚舉具有SID的配置文件

提取每個配置文件目錄下lnk文件的信息

通過WMI(CIMV2)來枚舉進(jìn)程,包括已結(jié)束進(jìn)程

從可用的遠(yuǎn)程注冊表中提取用戶信息

其他已知變體:C776

29D4-模塊2125利用服務(wù)msisvc_32@; DLL backdoor來感染網(wǎng)絡(luò),通過管道“Global{B54E3268-DE1E-4c1e-A667- 2596751403AD}”來接收命令。存在32位和64位變體。

其他已知變體:6F92, A505, D242

2B46-收集系統(tǒng)和用戶信息

域控制器名稱

域中的用戶列表

管理員的域名

枚舉域信任

TCP表

UDP表

SNMP發(fā)現(xiàn)(OS,解析所有的回復(fù))

USB驅(qū)動器的歷史記錄,已掛載設(shè)備

安裝的程序

時區(qū)

OS安裝日期

ODBC.ini,SQL服務(wù)器的S instance info,Oracle ALL_HOMES, SyBase, DB2, MS SQL,MySQL 的最后連接

DHCP/routing

網(wǎng)絡(luò)配置

零配置參數(shù)

已連接的打印機(jī)

WinRAR, WinZip, Office使用的MRU列表,IE類URL,已映射的網(wǎng)絡(luò)設(shè)備,Visual Studio MRU

終端服務(wù)客戶端的默認(rèn)用戶名提示

用戶協(xié)助歷史記錄

PuTTY主機(jī)密鑰和會話

已登錄用戶

網(wǎng)絡(luò)適配器配置

VNC客戶端密碼

使用SMB數(shù)據(jù)包來掃描網(wǎng)絡(luò)并識別OS

模塊收集到的一些注冊位置

已知變體:A7F8

2BF7-實(shí)用工具DLL。提供基本的API來創(chuàng)建新的MSI數(shù)據(jù)包,加載并注入任意PE模塊。同時負(fù)責(zé)加載惡意MSI文件中,VFS的第一層。存在32位和64位變體。

已知名稱:“ntdll.dll”, “klif.dll”, “apiset.dll”.

其他已知變體:6DA1, 32DB, 8304, 9931, 9E60, A2D4, ABA9, B3BB, DC5F, DD32, F7BB

3395-MS SQL發(fā)現(xiàn)模塊。這個模塊能向網(wǎng)絡(luò)發(fā)送ARP數(shù)據(jù)包,同時發(fā)現(xiàn)MS SQL Server端口。其他函數(shù)負(fù)責(zé)連接額讀取遠(yuǎn)程注冊表內(nèi)容。

35E9-文件系統(tǒng)發(fā)現(xiàn)。

枚舉網(wǎng)絡(luò)共享

枚舉本地驅(qū)動器

遍歷文件系統(tǒng)的層級結(jié)構(gòu)并枚舉文件;識別重分析點(diǎn)

3F45-管道后門。打開一個新的全局可見的Windows管道,接收并執(zhí)行加密的命令。“magic”字符串說明加密的協(xié)議是“tttttttt”。

枚舉正在運(yùn)行的進(jìn)程

加載并執(zhí)行任意PE文件

存在32位和64位版本。

已知的管道名稱:

.pipe{AAFFC4F0-E04B-4C7C-B40A-B45DE971E81E} .pipe{AB6172ED-8105- 4996-9D2A-597B5F827501}

.pipe{0710880F-3A55-4A2D-AA67-1123384FD859} .pipe{6C51A4DB-E3DE- 4FEB-86A4-32F7F8E73B99}

.pipe{7F9BCFC0-B36B-45EC-B377-D88597BE5D78}, .pipe{57D2DE92-CE17- 4A57-BFD7-CD3C6E965C6A}

其他已知變體:6364, 3F8B, 5926, A90A, DDF0, A717, A36F, 8816, E85E, E927

4160-密碼竊取程序

提取Google Chrome 和 Firefox的登錄數(shù)據(jù)

LSA證書

使用這些數(shù)據(jù)來定位Chrome保存的登錄信息

其他已知 變體:B656

41E2-密碼竊取程序。64位模塊。提取:

IE IntelliForms 歷史

POP3/HTTP/IMAP 密碼

TightVNC,RealVNC,WinVNC3/4密碼

Outlook設(shè)置

SAM,LSASS緩存

Windows Live,Net Passport密碼

該模塊收集的信息

其他已知變體:992E,AF68,D49F

482F-收集系統(tǒng)信息

枚舉驅(qū)動器

獲取正在運(yùn)行進(jìn)程的列表

大范圍收集進(jìn)程信息包括進(jìn)程運(yùn)行了多長時間

內(nèi)存信息

SID信息

其他已知變體:F3F4

559B-調(diào)查Active Directory

用ADSI連接Active Directory GC

枚舉AD中所有對象

用人類可讀的格式來顯示所有條目

ActiveDirectory詳細(xì)路徑

580C-收集系統(tǒng)和網(wǎng)絡(luò)信息

檢索域控制器名稱

枚舉域中所有的用戶和小組

收集計劃任務(wù)日志

收集硬盤信息,可移動硬盤的歷史記錄

檢索防火墻策略

枚舉所有命名系統(tǒng)對象

枚舉所有系統(tǒng)服務(wù)

5B78-收集系統(tǒng)信息及實(shí)用工具。

它有兩個導(dǎo)出函數(shù)其中一個的名字是"Getreport"

枚舉正在運(yùn)行的進(jìn)程,提取tokens和SID,收集時間信息

explicit credentials 登陸用戶

以當(dāng)前進(jìn)程來模擬用戶權(quán)限

用硬編碼模版創(chuàng)建新32位和64位shellcode

存在32位和64位版本。

其他已知變體:E8C7,EE6E

5C66-經(jīng)過加密的文件I/O,實(shí)用工具

文件I/O操作:打開/查詢/讀取/編寫

管理經(jīng)過壓縮和加密的臨時文件

622B-生成非常規(guī)格式的XML

計算機(jī)名稱

Windows目錄

枚舉所有邏輯驅(qū)動器

列舉所有文件

OS序列號

域名

網(wǎng)絡(luò)適配器配置:IP地址,MAC,MTU,適配器列表

生成系統(tǒng)報告的XML標(biāo)簽

6302-實(shí)用工具。

內(nèi)部名稱“d3dx9_27.dll”。執(zhí)行基于時間的事件。

其他已知變體:FA84

669D-實(shí)用工具。

列舉文件名稱和目錄,檢查它們是否存在。

其他已知變體:880B

6914-Sniffer網(wǎng)絡(luò)攻擊。

使用合法WinPcap驅(qū)動器“npf.sys”。檢測NBNS(NetBIOS協(xié)議)感興趣的請求并發(fā)送響應(yīng)

響應(yīng)WPAD請求(NBNS數(shù)據(jù)包中的“FHFAEBE”)

向HTTP GET請求發(fā)送響應(yīng)

網(wǎng)絡(luò)過濾器基于BPF庫。HTTP和WPAD的payload由外部提供.

深度剖析信息竊取工具DUQU2.0木馬

  虛假HTTP響應(yīng)及相關(guān)狀態(tài)信息

6FAC-文件API

獲取文件大小,屬性

安全刪除文件

打開/關(guān)閉/讀寫/文件內(nèi)容

其他已知變體:A7EE

7BDA-收集系統(tǒng)信息

使用wscapi.dll api的防火墻狀態(tài) 當(dāng)前殺毒軟件狀態(tài)

檢查sqlservr.exe是否運(yùn)行中

計算機(jī)名稱

工作小組信息

域控制器名稱

網(wǎng)絡(luò)適配器配置

時間及時區(qū)信息

CPU頻率

其他已知變體:EF2E

7C23-從文件中提取元數(shù)據(jù)并收集系統(tǒng)信息

計算機(jī)名稱

系統(tǒng)卷標(biāo)序列號

完整的文件API,如6FAC中提到的

搜索文件、檔案及implements routines中的信息并提?。?/p>

電子郵件信息:eml,msg

圖片文件:jpg,jpe,jpeg,tif,tiff,bmp,png

多媒體文件:wmv,avi,mpeg,mpg,m4a,mkv,wav,aac,ac3,dv,flac,flv,h264,mov,3gp,3g2,mj2,mp3,mpegts,ogg,asf.上述文件都經(jīng)libffmpeg重加密。

PDF文件內(nèi)容

微軟Office:doc,docx,xlsx,pptx.專用路徑為:“OfficeRipDoc”,“OfficeRipDocx”,“OfficeRipXlsx”,“OfficeRipPptx”。提取PPT幻燈片,將其轉(zhuǎn)換成HTML摘要

檔案:gz,gzip,gzX3,zip,rar

創(chuàng)建擴(kuò)展名為“.fg4”的臨時文件。

其他已知變體:EB18,C091

深度剖析信息竊取工具DUQU2.0木馬

  感興趣的文件擴(kuò)展名及其對應(yīng)的狀態(tài)信息列表

8172——嗅探攻擊。執(zhí)行 NBNS(NetBIOS協(xié)議)名稱解析來欺騙:

WPAD請求

以“SHR”開頭的名字

以“3142”(只限日志)開頭的名字

深度剖析信息竊取工具DUQU2.0木馬

  附加功能:該組件能夠在硬編碼模板中新建shellcode blob。

81B7——驅(qū)動程序管理

把驅(qū)動程序?qū)懭氪疟P

啟動/關(guān)閉驅(qū)動程序

從磁盤中安全刪除驅(qū)動程序文件

其他已知變體: C1B9

8446——Oracle DB和ADOdb客戶端

使用 “oci.dll” API訪問Oracle數(shù)據(jù)庫

從數(shù)據(jù)庫中獲取所有可用信息

還會連接到 ADOdb pviders

深度剖析信息竊取工具DUQU2.0木馬

  8912——處理加密文件,收集系統(tǒng)信息

shared file mapping communication

將加密數(shù)據(jù)寫入文件

枚舉窗口

枚舉網(wǎng)絡(luò)共享和本地磁盤

檢索USB設(shè)備歷史記錄

收集網(wǎng)絡(luò)路由表

已知互斥體和映射名:

Global{DD0FF599-FA1B-4DED-AC70-C0451F4B98F0} Global{B12F87CA-1EBA- 4365-B90C-E2A1D8911CA9},

Global{B03A79AD-BA3A-4BF1-9A59-A9A1C57A3034} Global{6D2104E6-7310- 4A65-9EDD-F06E91747790},

Global{DD0FF599-FA1B-4DED-AC70-C0451F4B98F0} Global{B12F87CA-1EBA- 4365-B90C-E2A1D8911CA9}

其他已知變體: D19F, D2EE

9224——運(yùn)行控制臺應(yīng)用程序。使用桌面"default"創(chuàng)建進(jìn)程,附加到命令行窗口,把i/o重定向到命名管道.

92DB——修改cmd.exe shell。

深度剖析信息竊取工具DUQU2.0木馬

9F0D(64位), D1A3(32位)——NPF.SYS這個驅(qū)動是伴隨著VFS插件一起分發(fā)的,它有合法的簽名.。它被用來執(zhí)行嗅探攻擊。

A4B0——網(wǎng)絡(luò)調(diào)查

用DHCP Server Management API (DHCPSAPI.DLL)來枚舉所有DHCP服務(wù)器的客戶端

查詢所有已知的DHCP子網(wǎng)

搜索開放了udp1434 udp137端口的電腦

枚舉所有網(wǎng)絡(luò)服務(wù)器

枚舉網(wǎng)絡(luò)共享

嘗試連接到遠(yuǎn)程注冊表以枚舉HKEY_USERS下的所有用戶,將這些用戶名轉(zhuǎn)換成SID。

B6C1 - WNet API。為WnetAddConnection2和WNetOpenEnum函數(shù)提供wrappers

其他已知變體:BC4A

C25B——嗅探攻擊。運(yùn)行一個偽造SMB服務(wù)器來誘騙其他電腦用NTLM進(jìn)行驗(yàn)證。

執(zhí)行SMB v1命令

深度剖析信息竊取工具DUQU2.0木馬

  開放虛假ipc$ A:share

接受用戶身份驗(yàn)證請求

處理HTTP “GET /”請求

深度剖析信息竊取工具DUQU2.0木馬

  ED92——文件系統(tǒng)調(diào)查

枚舉所有本地驅(qū)動器,并連接到網(wǎng)絡(luò)共享

列出文件

EF97——文件操作動作

枚舉文件

創(chuàng)建和刪除目錄

復(fù)制/移動/刪除文件和目錄

從文件中獲取版本信息

計算文件的哈希函數(shù)

其他已知變體:F71E

0x03 結(jié)束語

一般來說,刻畫黑客的犯罪過程是一件很困難的事情,duqu2.0尤甚.

duqu除了使用大量的代理來隱蔽自身的犯罪行為外,還額外使用了一些小伎倆:比如它會在代碼中植入幾個虛假的標(biāo)記,ugly.gorilla&romanian.antihacker, LZJB算法,前者會讓我們錯誤的認(rèn)為此次攻擊事件是由中國人干的或者這是一次來自羅馬尼亞的黑客攻擊,后者會讓我們錯誤的認(rèn)為這個木馬來源于miniduke家族.

duqu的攻擊具有多地域特征,受害者既有西方國家,也有中東和亞洲國家.關(guān)于duqu背后的黑客我們發(fā)現(xiàn)了很有趣的一點(diǎn),那就是他們不僅會盜竊,還會偷方便盜竊用的工具.比如為了投放木馬他們在2011年攻擊了匈牙利的一家管理數(shù)字證書的企業(yè).

duqu2.0的攻擊目標(biāo)和duqu1.0的攻擊目標(biāo)有很多重合的地方.伊朗核設(shè)施和一些工控企業(yè)始終是他們覬覦的目標(biāo).

對一家網(wǎng)絡(luò)安全公司來說,承認(rèn)系統(tǒng)被入侵是一件不可想象的事情,但是對卡巴斯基來說不是這樣的,因?yàn)槲覀儽泄_透明的原則,基于對用戶安全的考量,我們選擇公布了此次事件的調(diào)查結(jié)果.---|||---|||為了用戶的信任 我們會戰(zhàn)斗到底。

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號-6京公網(wǎng)安備 11010502049343號