
Desktopla 一、病毒危害 蠕蟲(chóng)病毒入侵并完全控制一臺(tái)計(jì)算機(jī)之后,就會(huì)把這臺(tái)機(jī)器作為宿主,進(jìn)而掃描并感染其他計(jì)算機(jī)。當(dāng)這些新的被蠕蟲(chóng)入侵的計(jì)算機(jī)被控制之后,蠕蟲(chóng)會(huì)以這些計(jì)算機(jī)為宿主繼續(xù)掃描并感染其他計(jì)算機(jī),這種行為會(huì)一直延續(xù)下去。蠕蟲(chóng)使用這種遞歸的方法進(jìn)行傳播,按照指數(shù)增長(zhǎng)的規(guī)律分布自己,進(jìn)而及時(shí)控制越來(lái)越多的計(jì)算機(jī)。嚴(yán)重的占用有限的網(wǎng)絡(luò)資源,最終引起整個(gè)網(wǎng)絡(luò)的癱瘓,使用戶(hù)不能通過(guò)網(wǎng)絡(luò)進(jìn)行正常的工作。 二、病毒分析 在對(duì)樣本進(jìn)行分析之前,先用 PEiD對(duì)樣本進(jìn)行查殼:
通過(guò)PEiD可以發(fā)現(xiàn),該樣本加了UPX殼,手動(dòng)脫掉之后的文件為upDesktopla Phase1: 1-1:獲取 IE 路徑并驗(yàn)證 IE 可執(zhí)行文件是否存在 (3種方法): 如果三種方法均不能找到 IE 路徑并驗(yàn)證對(duì)應(yīng)路徑下IE可執(zhí)行文件的存在,則樣本行為就此終止。 (1-1-1)通過(guò)注冊(cè)表 "HKEY_CLASSES_ROOT\http\shell\open\command" 獲取 IE 路徑并驗(yàn)證 IE 可執(zhí)行文件是否存在 (1-1-2)通過(guò)絕對(duì)路徑 "C:\Program Files\Internet Explorer\IEXPLORE.EXE" 獲取 IE 路徑并驗(yàn)證 IE 可執(zhí)行文件是否存在 (1-1-3)通過(guò)注冊(cè)表 "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\ CurrentVersion\App Paths\IEXPLORE.EXE" 獲取 IE 路徑并驗(yàn)證 IE 可執(zhí)行文件是否存在 1-2:依次嘗試在 1:"C:\Program Files\"; 2:"C:\Program Files\Common Files\ "; 3:"C:\Documents and Settings\Administrator\ "; 4:"C:\Documents and Settings\Administrator\Application Data\ "; 5:"C:\WINDOWS\system32\ "; 6:"C:\WINDOWS\ "; 7:"C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\"; 下創(chuàng)建" Microsoft"目錄并寫(xiě)入臨時(shí)文件,用于測(cè)試能否在該目錄下成功創(chuàng)建文件,為后續(xù)在該目錄下創(chuàng)建文件 "Desktopla 這里演示僅以第一個(gè)路徑作為示例: (1-2-1)創(chuàng)建文件夾 "C:\Program Files\Microsoft" 新創(chuàng)建的文件夾" Microsoft ": (1-2-2)通過(guò)在該文件夾下創(chuàng)建一個(gè)臨時(shí)文件以檢驗(yàn)?zāi)芊裨谠撐募聞?chuàng)建新文件 (1-2-3)刪除剛剛創(chuàng)建的臨時(shí)文件 1-3:釋放一個(gè)新樣本到之前創(chuàng)建的目錄下,名命為 “Desktopla (1-3-1)獲取當(dāng)前應(yīng)用程序路徑名稱(chēng) (1-3-2)釋放新樣本到新創(chuàng)建的文件夾下,新文件名稱(chēng)為 “Desktopla
釋放的新樣本文件: (1-3-3)啟動(dòng) "C:\Program Files\Microsoft\Desktopla Phase2: 2-1 驗(yàn)證特定文件夾(Phase1創(chuàng)建的文件夾)下是否存在樣本文件:
2-2 獲取 ntdll.dll 的一些導(dǎo)出函數(shù)地址保存到全局變量中,便于后續(xù)代碼的調(diào)用:
2-3:Hook ZwWriteVirtualMemory (2-3-1) 獲取 ntdll.dll 的模塊基地址
(2-3-2) 獲取 ZwWriteVirtualMemory 的函數(shù)地址
(2-3-3) 更改 ZwWriteVirtualMemory 函數(shù)頭前 0X10 字節(jié)的內(nèi)存屬性為 PAGE_EXECUTE_READWRITE
(2-3-4) 計(jì)算 ZwWriteVirtualMemory 函數(shù)頭能夠被修改的字節(jié)數(shù)
(2-3-5) 申請(qǐng) 0XF 大小的內(nèi)存空間,存放 Hook ZwWriteVirtualMemory 過(guò)程中的一些數(shù)據(jù)
(2-3-6) 具體的 Hook 過(guò)程中
(2-3-7) 修改之前申請(qǐng)的 0XF 大小的內(nèi)存空間屬性為只讀
(2-3-8) 還原 ntdll.ZwWriteVirtualMemory 的內(nèi)存屬性
(2-3-9) Hook ntdll.ZwWriteVirtualMemory 前后機(jī)器碼以及函數(shù)執(zhí)行流程對(duì)比 (2-3-9-1) 機(jī)器碼對(duì)比 被 Hook 之前的 ZwWriteVirtualMemory
被 Hook 之后的 ZwWriteVirtualMemory
(2-3-9-2) 函數(shù)執(zhí)行流程對(duì)比 調(diào)用原來(lái)的流程 新添加的流程
2-4:調(diào)用 CreateProcessA 來(lái)啟動(dòng) iexplorer.exe 進(jìn)程, 內(nèi)部完成對(duì) iexplorer.exe 的注入
通過(guò)對(duì) VirtualAllocEx 和 WriteProcessMemory 的斷點(diǎn)可以詳細(xì)的看到為 iexplorer.exe 申請(qǐng)空間并寫(xiě)入數(shù)據(jù)的過(guò)程5次為 IE 進(jìn)程申請(qǐng)空間 為 IE 進(jìn)程第1次申請(qǐng)內(nèi)存空間(Addr = 20010000, Size = 0000D000)
為 IE 進(jìn)程第2(Addr = 00020000, Size = 00000233)、 3(Addr = 00030000, Size = 000000DF)、 4(Addr = 00040000, Size = 000000A5 )、 5(Addr = 00050000, Size = 00000138 )、 次申請(qǐng)內(nèi)存空間
6次 向IE 進(jìn)程寫(xiě)入數(shù)據(jù) 向 IE 進(jìn)程第1次寫(xiě)入數(shù)據(jù)(Addr = 20010000, Size = 0000D000)
向 IE 進(jìn)程第2(Addr = 00020000, Size = 00000233)、 3(Addr = 00030000, Size = 000000DF)、 4(Addr = 00040000, Size = 000000A5)、 5(Addr = 00050000, Size = 00000138) 次寫(xiě)入數(shù)據(jù)
向 IE 進(jìn)程第6次寫(xiě)入數(shù)據(jù)(Addr = 00401A25, Size = 0000000C) 00401A25 為 IE 的 OEP,這里實(shí)際上是更改 IE 的OEP 在該 API調(diào)用執(zhí)行之前,修改 DesktopL.0040DFA7內(nèi)存處的首字節(jié)為 0XCC(同時(shí)記下原來(lái)的字節(jié)數(shù)據(jù):0XBF,用于恢復(fù)), 即可用 OD 段下新啟動(dòng)的IE進(jìn)程
Phase3: 3-1 注入前后 iexplorer.exe 機(jī)器碼和流程對(duì)比: 正常的 IE 入口點(diǎn)代碼 被修改過(guò)后的 IE 入口點(diǎn)代碼(修改了前 0X0C 字節(jié))
由此可見(jiàn),原程序的的路程跳轉(zhuǎn)到了 40000 處 3-2 注入后的 iexplorer.exe 創(chuàng)建工作線(xiàn)程之前的行為分析: (3-2-1) 處理內(nèi)存 PE 的導(dǎo)入表
(3-2-2) 處理內(nèi)存 PE 的節(jié)信息
(3-2-3) 利用 "KyUffThOkYwRRtgPP" 創(chuàng)建互斥體,依據(jù)返回值判斷當(dāng)前是否該樣本的其他實(shí)例在運(yùn)行
(3-2-4) 初始化 SOCKET (3-2-5) 對(duì) 2001A010 處的數(shù)據(jù)進(jìn)行解密
(3-2-6) 獲取本機(jī)信息并生成字符串 (3-2-7) 獲取當(dāng)前系統(tǒng)時(shí)間, 在 iexplorer.exe 目錄下創(chuàng)建 dmlconf.dat 文件并將系統(tǒng)時(shí)間寫(xiě)入
3-3 創(chuàng)建6個(gè)工作線(xiàn)程: 創(chuàng)建第1個(gè)線(xiàn)程(ThreadFunction:20017ACA)
創(chuàng)建第2個(gè)線(xiàn)程(ThreadFunction:20017626)
創(chuàng)建第3個(gè)線(xiàn)程(ThreadFunction:2001781F)
創(chuàng)建第4個(gè)線(xiàn)程(ThreadFunction:2001790C)
創(chuàng)建第5個(gè)線(xiàn)程(ThreadFunction:20016EA8)
創(chuàng)建第6個(gè)線(xiàn)程(ThreadFunction:20016EC2)
3-4 工作線(xiàn)程行為分析: (3-4-1):Thread1(ThreadFunction:20017ACA) 功能描述: 每隔 1 秒就打開(kāi)注冊(cè)表項(xiàng): HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon 并讀取 Userinit 的鍵值,然后檢查路徑 c:\program files\microsoft\desktopla
獲取注冊(cè)表項(xiàng)的 "Userinit" 鍵值
檢查樣本文件路徑是否在注冊(cè)表鍵值中
樣本文件路徑不在注冊(cè)表鍵值中時(shí),將樣本文件路徑添加到注冊(cè)表中
休息 1S 之后,再次檢查注冊(cè)表
(3-4-2):Thread2(ThreadFunction:20017626) 功能描述: 間歇性的測(cè)試同 google.com 的 80 端口、bing.com 的 80 端口、yahoo.com 的 80 端口的連通性,只要有一個(gè)連通,就不再測(cè)試后面的網(wǎng)址并在全局變量 2001A23B 處保存兩次能夠連通的時(shí)間差(秒單位) 獲取網(wǎng)址和端口號(hào)
(3-4-3):Thread3(ThreadFunction:2001781F) |