
Desktopla 一、病毒危害 蠕(ru)(ru)蟲(chong)病毒入侵(qin)并(bing)完(wan)全控制(zhi)一(yi)臺(tai)計算機之(zhi)后,就會把這(zhe)(zhe)臺(tai)機器作為宿(su)主(zhu),進而(er)掃描并(bing)感染(ran)其他計算機。當這(zhe)(zhe)些(xie)新的(de)(de)(de)被(bei)蠕(ru)(ru)蟲(chong)入侵(qin)的(de)(de)(de)計算機被(bei)控制(zhi)之(zhi)后,會以這(zhe)(zhe)些(xie)計算機為宿(su)主(zhu)繼續掃描并(bing)感染(ran)其他計算機,這(zhe)(zhe)種(zhong)行(xing)(xing)為會一(yi)直延(yan)續下(xia)去(qu)。蠕(ru)(ru)蟲(chong)使用(yong)這(zhe)(zhe)種(zhong)遞(di)歸的(de)(de)(de)方(fang)法(fa)進行(xing)(xing)傳播,按(an)照指數增長的(de)(de)(de)規律分布自己,進而(er)及時控制(zhi)越來越多的(de)(de)(de)計算機。嚴(yan)重的(de)(de)(de)占用(yong)有限的(de)(de)(de)網絡(luo)(luo)資源(yuan),最終引起整個(ge)網絡(luo)(luo)的(de)(de)(de)癱瘓,使用(yong)戶不(bu)能通過網絡(luo)(luo)進行(xing)(xing)正常的(de)(de)(de)工作。 二、病毒分析 在對樣(yang)(yang)本(ben)進行(xing)分析之(zhi)前(qian),先用 PEiD對樣(yang)(yang)本(ben)進行(xing)查殼:
通過PEiD可以發現,該樣本加了UPX殼,手動脫掉之后的文件為upDesktopla Phase1: 1-1:獲取 IE 路徑并(bing)驗(yan)證 IE 可執(zhi)行文件(jian)是否存在 (3種方法): 如果三種方法均不能找到(dao) IE 路徑并(bing)驗(yan)證對應路徑下(xia)IE可執(zhi)行文件(jian)的存在,則(ze)樣本行為就此終止。 (1-1-1)通過注冊表 "HKEY_CLASSES_ROOT\http\shell\open\command" 獲取 IE 路(lu)徑并驗證 IE 可執行(xing)文件(jian)是否(fou)存在 (1-1-2)通過絕對(dui)路徑 "C:\Program Files\Internet Explorer\IEXPLORE.EXE" 獲取 IE 路徑并驗證(zheng) IE 可(ke)執(zhi)行(xing)文件是否存(cun)在 (1-1-3)通過(guo)注冊表 "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\ CurrentVersion\App Paths\IEXPLORE.EXE" 獲取 IE 路徑并驗證 IE 可執(zhi)行文(wen)件是否存在 1-2:依次(ci)嘗試在 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\"; 下創建" Microsoft"目錄并寫入臨時文件,用于測試能否在該目錄下成功創建文件,為后續在該目錄下創建文件 "Desktopla 這里演示(shi)僅以第一個路徑作為示(shi)例: (1-2-1)創(chuang)建文(wen)件夾 "C:\Program Files\Microsoft" 新創建的文件夾" Microsoft ": (1-2-2)通過在(zai)該(gai)文(wen)件(jian)(jian)夾(jia)下(xia)創建一個臨時(shi)文(wen)件(jian)(jian)以檢(jian)驗能否在(zai)該(gai)文(wen)件(jian)(jian)下(xia)創建新文(wen)件(jian)(jian) (1-2-3)刪(shan)除剛剛創建的(de)臨(lin)時文件 1-3:釋放一個新樣本到之前創建的目錄下,名命為 “Desktopla (1-3-1)獲(huo)取當前應用程序路徑名稱 (1-3-2)釋放新樣本到新創建的文件夾下,新文件名稱為 “Desktopla
釋放的新樣本文件: (1-3-3)啟動 "C:\Program Files\Microsoft\Desktopla Phase2: 2-1 驗證特定文件夾(Phase1創建的文件夾)下是否存在樣本文件:
2-2 獲取 ntdll.dll 的一些導出函數地址保存(cun)到全局變量(liang)中,便于后續(xu)代碼的調用:
2-3:Hook ZwWriteVirtualMemory (2-3-1) 獲取 ntdll.dll 的模塊(kuai)基地址
(2-3-2) 獲取 ZwWriteVirtualMemory 的函數地址
(2-3-3) 更改 ZwWriteVirtualMemory 函數頭前 0X10 字節的內存屬性為(wei) PAGE_EXECUTE_READWRITE
(2-3-4) 計算 ZwWriteVirtualMemory 函數頭能(neng)夠被修(xiu)改(gai)的字節數
(2-3-5) 申(shen)請 0XF 大小的內存空間,存放 Hook ZwWriteVirtualMemory 過程(cheng)中的一(yi)些數(shu)據
(2-3-6) 具體的(de) Hook 過程中
(2-3-7) 修改之前申請的 0XF 大(da)小的內(nei)存空間屬(shu)性為(wei)只(zhi)讀(du)
(2-3-8) 還原 ntdll.ZwWriteVirtualMemory 的內存屬性
(2-3-9) Hook ntdll.ZwWriteVirtualMemory 前后機(ji)器碼以(yi)及(ji)函數(shu)執行流程對比 (2-3-9-1) 機器碼對比(bi) 被 Hook 之(zhi)前的 ZwWriteVirtualMemory
被 Hook 之后的 ZwWriteVirtualMemory
(2-3-9-2) 函數(shu)執行流程對比(bi) 調用原來的流程 新添加的流程
2-4:調用 CreateProcessA 來啟(qi)動 iexplorer.exe 進(jin)程, 內部(bu)完(wan)成對(dui) iexplorer.exe 的注入
通過對 VirtualAllocEx 和 WriteProcessMemory 的(de)(de)斷(duan)點可以詳細的(de)(de)看(kan)到為 iexplorer.exe 申請空間并寫(xie)入數據的(de)(de)過程5次為 IE 進程申請空間 為 IE 進程第1次申請(qing)內存空間(Addr = 20010000, Size = 0000D000)
為(wei) IE 進程第2(Addr = 00020000, Size = 00000233)、 3(Addr = 00030000, Size = 000000DF)、 4(Addr = 00040000, Size = 000000A5 )、 5(Addr = 00050000, Size = 00000138 )、 次(ci)申請內(nei)存空間
6次(ci) 向IE 進程寫入數據(ju) 向 IE 進程第1次寫入數據(Addr = 20010000, Size = 0000D000)
向(xiang) IE 進程第2(Addr = 00020000, Size = 00000233)、 3(Addr = 00030000, Size = 000000DF)、 4(Addr = 00040000, Size = 000000A5)、 5(Addr = 00050000, Size = 00000138) 次(ci)寫入數據
向 IE 進程第6次寫入數據(Addr = 00401A25, Size = 0000000C) 00401A25 為 IE 的 OEP,這(zhe)里實際上是(shi)更改 IE 的OEP 在該 API調用執行之前,修改 DesktopL.0040DFA7內存處的首字節為 0XCC(同時記下原來的字節數據:0XBF,用于恢復), 即可用 OD 段下新啟動的IE進程
Phase3: 3-1 注(zhu)入前后 iexplorer.exe 機器碼(ma)和流程對比: 正常的 IE 入口點代碼 被(bei)修改(gai)過后的 IE 入口點代碼(修改了前 0X0C 字節)
由(you)此可見,原程序(xu)的(de)的(de)路程跳轉到(dao)了 40000 處 3-2 注入(ru)后的 iexplorer.exe 創建工作線程(cheng)之前的行(xing)為分(fen)析: (3-2-1) 處理內存 PE 的導入(ru)表
(3-2-2) 處理內存 PE 的節信息
(3-2-3) 利用 "KyUffThOkYwRRtgPP" 創建(jian)互(hu)斥體(ti),依據(ju)返回值判斷當前是否該樣本的(de)其他實例(li)在運行(xing)
(3-2-4) 初始化 SOCKET (3-2-5) 對 2001A010 處的數據進行解密
(3-2-6) 獲(huo)取本機(ji)信(xin)息并生成字符(fu)串(chuan) (3-2-7) 獲取當前系統時(shi)間, 在(zai) iexplorer.exe 目(mu)錄下創建 dmlconf.dat 文件并將系統時(shi)間寫入
3-3 創(chuang)建6個工作線程: 創建(jian)第1個線程(ThreadFunction:20017ACA)
創建第2個線程(ThreadFunction:20017626)
創建第3個線程(ThreadFunction:2001781F)
創建第4個線程(ThreadFunction:2001790C)
創建第5個線程(ThreadFunction:20016EA8)
創建第6個線程(ThreadFunction:20016EC2)
3-4 工作線(xian)程(cheng)行為分(fen)析(xi): (3-4-1):Thread1(ThreadFunction:20017ACA) 功能描述: 每隔 1 秒就打開注冊表項: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon 并讀取 Userinit 的鍵值,然后檢查路徑 c:\program files\microsoft\desktopla
獲取(qu)注冊表項(xiang)的 "Userinit" 鍵值
檢查樣(yang)本(ben)文件路徑(jing)是(shi)否在注冊表鍵值中
樣(yang)本文件路(lu)徑不(bu)在注冊表鍵值中時,將樣(yang)本文件路(lu)徑添(tian)加到注冊表中
休息 1S 之后,再次檢查注冊表
(3-4-2):Thread2(ThreadFunction:20017626) 功能描述: 間歇(xie)性(xing)的測試(shi)同 google.com 的 80 端口、bing.com 的 80 端口、yahoo.com 的 80 端口的連通性,只要有一個連通,就不再測試后面的網址并在全局變量 2001A23B 處保存兩次能夠連通的時間差(秒單位) 獲取網址和端口號
(3-4-3):Thread3(ThreadFunction:2001781F) |