新聞中心
0x00 前言

在進(jìn)行威脅狩獵的過程中,如果想要找到惡意軟件,首先需要對平臺和操作系統(tǒng)具有一定的了解。如果想要甄別合法軟件和惡意軟件,首先必須明確哪些是合法的。
作為一個具有30多年歷史之久的操作系統(tǒng),由于Windows的復(fù)雜性,往往使我們很難實(shí)現(xiàn)上面這一點(diǎn)。
也正因如此,惡意軟件作者通常會編寫惡意軟件,模仿合法的Windows進(jìn)程。因此,我們可能會看到惡意軟件偽裝成svchost.exe、rundll32.exe或lsass.exe進(jìn)程,攻擊者利用的就是大多數(shù)Windows用戶可能都不清楚這些系統(tǒng)進(jìn)程在正常情況下的行為特征。
此前,我們討論過svchost.exe進(jìn)程及其命令行選項(xiàng)。在這篇文章中,我們將深入挖掘rundll32.exe,以期對其有所了解。
0x01 關(guān)于RUNDLL32.EXE
顧名思義,rundll32.exe可執(zhí)行文件是用于運(yùn)行DLL(RUN DLL),即運(yùn)行動態(tài)鏈接庫的。
在MSDN中,對DLL的定義如下:
動態(tài)鏈接庫(DLL)是一個模塊,其中包含可以由另一個模塊(應(yīng)用程序或DLL)使用的函數(shù)和數(shù)據(jù)。
以下是使用rundll32.exe的最基本語法:
rundll32
rundll32.exe可執(zhí)行文件可以是子進(jìn)程,也可以是父進(jìn)程,具體要取決于執(zhí)行的上下文。為了確定一個rundll32.exe實(shí)例是否屬于惡意,我們需要確認(rèn)幾件事。首先,需要確認(rèn)啟動它的路徑,其次是命令行。
合法的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安裝等等。
接下來,我們來看幾個例子。
0x02 運(yùn)行DLL
在其基本形式中,rundll32.exe將僅執(zhí)行一個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)選擇一個文件并右鍵單擊時,將會顯示出一個上下文菜單,其中包含多個選項(xiàng)。這里的一個選項(xiàng)是“OpenWith”(打開方式)。在點(diǎn)擊后,將會出現(xiàn)一個彈出窗口,可以從系統(tǒng)上安裝的應(yīng)用程序中進(jìn)行選擇。
實(shí)際上,在此過程的背后,是使用shell32.dll和OpenAs_RunDL函數(shù)啟動rundll32.exe實(shí)用程序。
- C:\Windows\System32\rundll32.exe C:\Windows\System32\shell32.dll,OpenAs_RunDLL < file_path >
這種在DLL中調(diào)用特定函數(shù)的行為非常普遍,因此我們恐怕無法將所有函數(shù)都了解全面。下面的兩篇文章詳細(xì)介紹了一系列rundll32.exe調(diào)用和對應(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一起使用的另一個常見函數(shù)是Control_RunDLL或Control_RunDLLAsUser。這兩個函數(shù)用于運(yùn)行.CPL文件或控制面板選項(xiàng)。
例如,如果我們要更改計算機(jī)的日期和時間,可以從控制面板啟動對應(yīng)的applet。
在后臺,Windows實(shí)際上是使用以下命令行啟動了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ù)時,應(yīng)該始終檢查.CPL文件的合法性。
0x05 控制面板選項(xiàng)(.CPL)
CPL即Control Panel Items(控制面板選項(xiàng)),是控制面板所提供功能對應(yīng)的程序,或者換而言之,它們是導(dǎo)出CPIApplet函數(shù)的DLL。
.CPL文件可以包含一個applet索引可以引用的多個applet,每個applet可以包含一個選項(xiàng)卡索引可以引用的多個選項(xiàng)卡。
我們可以通過rundll32.exe實(shí)用程序訪問和請求此信息,如下所示。
例如,System32文件夾中的main.cpl文件包含兩個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文件,不了解這方面知識的用戶很容易注意不到這一點(diǎn)。實(shí)際上,這正是惡意軟件作者感染計算機(jī)的方式。
在正常情況下,使用Control_RunDLL函數(shù)的rundll32.exe實(shí)例的父進(jìn)程應(yīng)該是explorer.exe或者control.exe。
其他進(jìn)程也可以使用該函數(shù)啟動rundll32.exe。例如,當(dāng)運(yùn)行inetcpl.cpl進(jìn)行代理或網(wǎng)絡(luò)配置時,rundll32.exe的父進(jìn)程有可能是Google Chrome、MSGEDGE或IE。
如果大家想了解有關(guān)CPL以及惡意軟件如何濫用的,可以閱讀這篇趨勢科技對CPL惡意軟件的研究報告( 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í)例有一個神秘的命令行,可能會大量出現(xiàn)在日志中,其格式如下。
- C:\WINDOWS\System32\rundll32.exe C:\Windows\system32\davclnt.dll,DavSetCookie < Host > < Share >
當(dāng)使用file://協(xié)議時,無論是在Word文件中,還是通過共享窗口,有時(如果SMB被禁用)會使用WebDav客戶端來請求這些文件。在此時,會通過rundll32.exe實(shí)用程序發(fā)出請求。
這類請求的父進(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)志
有一個鮮為人知的命令行參數(shù),就是“-sta”和“-localserver”。二者均可以用于加載惡意注冊的COM對象。
如果我們在日志中看到以下內(nèi)容,或者發(fā)現(xiàn)有進(jìn)程使用了下面的命令行參數(shù)運(yùn)行:
- rundll32.exe –localserver < CLSID_GUID >
- rundll32.exe –sta < CLSID_GUID >
我們就需要驗(yàn)證相應(yīng)的注冊表項(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
攻擊者可能會在rundll32.exe中使用的另一個命令行參數(shù)是“javascript”標(biāo)志。
實(shí)際上,rundll32.exe實(shí)例可以使用mshtml.dll和javascript關(guān)鍵詞來運(yùn)行HTML或JavaScript代碼。
- rundll32.exe javascript:"\..\mshtml,RunHTMLApplication < HTML Code >
我從未見過這種方式的任何一次合法使用。因此,一旦我們在日志中發(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é)
感謝大家的閱讀,希望能通過本篇文章對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)載,請注明原文地址。
分享題目:盤點(diǎn)RUNDLL32.EXE的多種濫用方式及檢測特征
標(biāo)題路徑:http://www.dlmjj.cn/article/coccihh.html


咨詢
建站咨詢
