新聞中心
0x00 前言

在進(jìn)行威脅狩獵的過程中,如果想要找到惡意軟件,首先需要對(duì)平臺(tái)和操作系統(tǒng)具有一定的了解。如果想要甄別合法軟件和惡意軟件,首先必須明確哪些是合法的。
作為一個(gè)具有30多年歷史之久的操作系統(tǒng),由于Windows的復(fù)雜性,往往使我們很難實(shí)現(xiàn)上面這一點(diǎn)。
也正因如此,惡意軟件作者通常會(huì)編寫惡意軟件,模仿合法的Windows進(jìn)程。因此,我們可能會(huì)看到惡意軟件偽裝成svchost.exe、rundll32.exe或lsass.exe進(jìn)程,攻擊者利用的就是大多數(shù)Windows用戶可能都不清楚這些系統(tǒng)進(jìn)程在正常情況下的行為特征。
此前,我們討論過svchost.exe進(jìn)程及其命令行選項(xiàng)。在這篇文章中,我們將深入挖掘rundll32.exe,以期對(duì)其有所了解。
0x01 關(guān)于RUNDLL32.EXE
顧名思義,rundll32.exe可執(zhí)行文件是用于運(yùn)行DLL(RUN DLL),即運(yùn)行動(dòng)態(tài)鏈接庫(kù)的。
在MSDN中,對(duì)DLL的定義如下:
動(dòng)態(tài)鏈接庫(kù)(DLL)是一個(gè)模塊,其中包含可以由另一個(gè)模塊(應(yīng)用程序或DLL)使用的函數(shù)和數(shù)據(jù)。
以下是使用rundll32.exe的最基本語(yǔ)法:
rundll32
rundll32.exe可執(zhí)行文件可以是子進(jìn)程,也可以是父進(jìn)程,具體要取決于執(zhí)行的上下文。為了確定一個(gè)rundll32.exe實(shí)例是否屬于惡意,我們需要確認(rèn)幾件事。首先,需要確認(rèn)啟動(dòng)它的路徑,其次是命令行。
合法的RUNDLL32.EXE進(jìn)程始終位于:
\Windows\System32\rundll32.exe
\Windows\SysWOW64\rundll32.exe(64位系統(tǒng)上的32位版本)
至于rundll32.exe實(shí)例的命令行,完全取決于要運(yùn)行的內(nèi)容,例如CPL文件、DLL安裝等等。
接下來,我們來看幾個(gè)例子。
0x02 運(yùn)行DLL
在其基本形式中,rundll32.exe將僅執(zhí)行一個(gè)DLL,因此,如果我們看到了rundll32.exe實(shí)例,首先要檢查被調(diào)用的DLL的合法性。
我們始終要檢查DLL的調(diào)用位置。例如,如果是從%temp%調(diào)用kernel32.dll,這種情況顯然是惡意的。此外,我們還需要在VirusTotal這樣的站點(diǎn)上檢查其哈希值。
0x03 SHELL32.DLL – “OpenAs_RunDLL”
Rundll32.exe還可以執(zhí)行DLL中的特定函數(shù)。例如,當(dāng)選擇一個(gè)文件并右鍵單擊時(shí),將會(huì)顯示出一個(gè)上下文菜單,其中包含多個(gè)選項(xiàng)。這里的一個(gè)選項(xiàng)是“OpenWith”(打開方式)。在點(diǎn)擊后,將會(huì)出現(xiàn)一個(gè)彈出窗口,可以從系統(tǒng)上安裝的應(yīng)用程序中進(jìn)行選擇。
實(shí)際上,在此過程的背后,是使用shell32.dll和OpenAs_RunDL函數(shù)啟動(dòng)rundll32.exe實(shí)用程序。
- C:\Windows\System32\rundll32.exe C:\Windows\System32\shell32.dll,OpenAs_RunDLL < file_path >
這種在DLL中調(diào)用特定函數(shù)的行為非常普遍,因此我們恐怕無(wú)法將所有函數(shù)都了解全面。下面的兩篇文章詳細(xì)介紹了一系列rundll32.exe調(diào)用和對(duì)應(yīng)的作用。
https://www.tenforums.com/tutorials/77458-rundll32-commands-list-windows-10-a.html
http://chagdali.free.fr/dcs/RunDll.htm
0x04 SHELL32.DLL – “Control_RunDLL”、“Control_RunDLLAsUser”和控制面板程序
我們發(fā)現(xiàn)與shell32.dll一起使用的另一個(gè)常見函數(shù)是Control_RunDLL或Control_RunDLLAsUser。這兩個(gè)函數(shù)用于運(yùn)行.CPL文件或控制面板選項(xiàng)。
例如,如果我們要更改計(jì)算機(jī)的日期和時(shí)間,可以從控制面板啟動(dòng)對(duì)應(yīng)的applet。
在后臺(tái),Windows實(shí)際上是使用以下命令行啟動(dòng)了rundll32.exe實(shí)例。
- C:\WINDOWS\System32\rundll32.exe C:\WINDOWS\System32\shell32.dll,Control_RunDLL C:\WINDOWS\System32\timedate.cpl
除了驗(yàn)證DLL的合法性。在使用Control_RunDLL或Control_RunDLLAsUser函數(shù)時(shí),應(yīng)該始終檢查.CPL文件的合法性。
0x05 控制面板選項(xiàng)(.CPL)
CPL即Control Panel Items(控制面板選項(xiàng)),是控制面板所提供功能對(duì)應(yīng)的程序,或者換而言之,它們是導(dǎo)出CPIApplet函數(shù)的DLL。
.CPL文件可以包含一個(gè)applet索引可以引用的多個(gè)applet,每個(gè)applet可以包含一個(gè)選項(xiàng)卡索引可以引用的多個(gè)選項(xiàng)卡。
我們可以通過rundll32.exe實(shí)用程序訪問和請(qǐng)求此信息,如下所示。
例如,System32文件夾中的main.cpl文件包含兩個(gè)applet,分別是鼠標(biāo)和鍵盤屬性。如果我們要在鼠標(biāo)屬性中更改指針,實(shí)際的操作如下。
- C:\WINDOWS\System32\rundll32.exe C:\WINDOWS\System32\shell32.dll,Control_RunDLL C:\WINDOWS\System32\main.cpl,@0,1
如我們所見,我們可以輕松使用惡意版本來替換原始的main.cpl文件,不了解這方面知識(shí)的用戶很容易注意不到這一點(diǎn)。實(shí)際上,這正是惡意軟件作者感染計(jì)算機(jī)的方式。
在正常情況下,使用Control_RunDLL函數(shù)的rundll32.exe實(shí)例的父進(jìn)程應(yīng)該是explorer.exe或者control.exe。
其他進(jìn)程也可以使用該函數(shù)啟動(dòng)rundll32.exe。例如,當(dāng)運(yùn)行inetcpl.cpl進(jìn)行代理或網(wǎng)絡(luò)配置時(shí),rundll32.exe的父進(jìn)程有可能是Google Chrome、MSGEDGE或IE。
如果大家想了解有關(guān)CPL以及惡意軟件如何濫用的,可以閱讀這篇趨勢(shì)科技對(duì)CPL惡意軟件的研究報(bào)告( https://www.trendmicro.de/cloud-content/us/pdfs/security-intelligence/white-papers/wp-cpl-malware.pdf )。
0x06 DEVCLNT.DLL – “DavSetCookie”(Web Dav客戶端)
Rundll32.exe實(shí)例有一個(gè)神秘的命令行,可能會(huì)大量出現(xiàn)在日志中,其格式如下。
- C:\WINDOWS\System32\rundll32.exe C:\Windows\system32\davclnt.dll,DavSetCookie < Host > < Share >
當(dāng)使用file://協(xié)議時(shí),無(wú)論是在Word文件中,還是通過共享窗口,有時(shí)(如果SMB被禁用)會(huì)使用WebDav客戶端來請(qǐng)求這些文件。在此時(shí),會(huì)通過rundll32.exe實(shí)用程序發(fā)出請(qǐng)求。
這類請(qǐng)求的父進(jìn)程是svchost.exe,其中的“-s WebClient”參數(shù)并不是必須添加的。
- C:\Windows\system32\svchost.exe -k LocalService -p -s WebClient
類似Emotet這樣的惡意軟件在此前已經(jīng)利用了這種技術(shù)。因此,我們始終需要分析這類命令行中包含的主機(jī),并確保全部都是合法的。
0x07 RUNDLL32.EXE – “-sta”或“-localserver”標(biāo)志
有一個(gè)鮮為人知的命令行參數(shù),就是“-sta”和“-localserver”。二者均可以用于加載惡意注冊(cè)的COM對(duì)象。
如果我們?cè)谌罩局锌吹揭韵聝?nèi)容,或者發(fā)現(xiàn)有進(jìn)程使用了下面的命令行參數(shù)運(yùn)行:
- rundll32.exe –localserver < CLSID_GUID >
- rundll32.exe –sta < CLSID_GUID >
我們就需要驗(yàn)證相應(yīng)的注冊(cè)表項(xiàng)\HKEY_CLASSES_ROOT\CLSID\
我強(qiáng)烈推薦大家閱讀@bohops的文章,以詳細(xì)了解這種技術(shù)。在hexacorn的博客中,詳細(xì)介紹了“-localserver”的變體。
Abusing the COM Registry Structure: CLSID, LocalServer32, & InprocServer32
0x08 RUNDLL32.EXE – 執(zhí)行HTML或JavaScript
攻擊者可能會(huì)在rundll32.exe中使用的另一個(gè)命令行參數(shù)是“javascript”標(biāo)志。
實(shí)際上,rundll32.exe實(shí)例可以使用mshtml.dll和javascript關(guān)鍵詞來運(yùn)行HTML或JavaScript代碼。
- rundll32.exe javascript:"\..\mshtml,RunHTMLApplication < HTML Code >
我從未見過這種方式的任何一次合法使用。因此,一旦我們?cè)谌罩局邪l(fā)現(xiàn)了這類使用方法,就應(yīng)該立即進(jìn)行應(yīng)急排查。
可以通過下面的資源,了解這種技術(shù)的更詳細(xì)信息:
AppLocker Bypass – Rundll32
AppLocker – Case study – How insecure is it really? – Part 1
https://lolbas-project.github.io/lolbas/Binaries/Rundll32/
0x09 總結(jié)
感謝大家的閱讀,希望能通過本篇文章對(duì)Rundll32有所了解。
如果大家有任何反饋或建議,歡迎通過Twitter @nas_bench與我聯(lián)系。
0x0A 參考文章
[1] https://bohops.com/2018/06/28/abusing-com-registry-structure-clsid-localserver32-inprocserver32/
[2] https://threathunterplaybook.com/evals/apt29/report.html
[3] https://www.hexacorn.com/blog/2020/02/13/run-lola-bin-run/
[4] https://www.trendmicro.de/cloud-content/us/pdfs/security-intelligence/white-papers/wp-cpl-malware.pdf
[5] https://support.microsoft.com/en-us/help/149648/description-of-control-panel-cpl-files
[6] https://isc.sans.edu/forums/diary/Lets+Trade+You+Read+My+Email+Ill+Read+Your+Password/24062/
[7] https://blog.didierstevens.com/2017/11/13/webdav-traffic-to-malicious-sites/
本文翻譯自:https://medium.com/@nasbench/a-deep-dive-into-rundll32-exe-642344b41e90如若轉(zhuǎn)載,請(qǐng)注明原文地址。
網(wǎng)頁(yè)題目:盤點(diǎn)RUNDLL32.EXE的多種濫用方式及檢測(cè)特征
網(wǎng)頁(yè)鏈接:http://www.5511xx.com/article/coccihh.html


咨詢
建站咨詢
