【黑客防范】追蹤迷霧后的真相-被混淆的JavaScript腳本可以這樣調(diào)試
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
惡意軟件常常利用混淆JavaScript腳本的技術(shù),以增加其對(duì)抗分析和檢測(cè)的難度。通過混淆,惡意腳本可以模糊代碼的結(jié)構(gòu)和邏輯,使其變得更加晦澀難懂,從而阻礙安全研究人員和防御系統(tǒng)對(duì)其進(jìn)行分析和檢測(cè)。此外,混淆還可以使得惡意腳本更難以被傳統(tǒng)的靜態(tài)和動(dòng)態(tài)分析工具所識(shí)別,從而增加了攻擊者成功執(zhí)行惡意活動(dòng)的機(jī)會(huì)。因此,混淆JavaScript腳本已成為惡意軟件作者常用的手段之一,用以提高其攻擊的成功率和持久性。 通常,混淆的JS代碼的目的是為了釋放或下載另一個(gè)文件。要調(diào)試此操作,可以利用“shell32.dll”中的特定函數(shù),例如“ShellExecute”用于運(yùn)行命令。JS通過稱為“wscript.exe”的Windows解釋器執(zhí)行,因此要調(diào)試JS,需要在調(diào)試器中打開wscript.exe(路徑:C:/Windows/System32/wscript.exe),然后更改命令行以指向惡意的JS文件: 接下來,需要在上面提到的shell32.dll上設(shè)置斷點(diǎn),方法是轉(zhuǎn)到“斷點(diǎn)”選項(xiàng)卡 > 單擊右鍵 > “添加DLL斷點(diǎn)” > shell32.dll: 現(xiàn)在,需要通過運(yùn)行調(diào)試器(x64dbg, 下載地址:https://x64dbg.com/)來加載shell32.dll — 如果斷點(diǎn)設(shè)置正確,x64dbg將在到達(dá)此DLL后停止執(zhí)行,這意味著在特定API上設(shè)置斷點(diǎn),例如“ShellExecute”,將可用。這可以通過轉(zhuǎn)到“符號(hào)”選項(xiàng)卡 > 單擊shell32.dll > 搜索ShellExecute > 按下F2來設(shè)置斷點(diǎn)(紅色表示斷點(diǎn)已設(shè)置)來完成: 現(xiàn)在,需要禁用針對(duì)shell32.dll的斷點(diǎn),否則它將執(zhí)行此DLL的任何API:“斷點(diǎn)”選項(xiàng)卡 > 右鍵單擊“shell32.dll” > “禁用”。之后,再次運(yùn)行調(diào)試器 — 最終它將停止在先前設(shè)置的API上執(zhí)行。傳遞的參數(shù)可以在堆棧面板中看到 — 在此示例中,它是一個(gè)PowerShell命令: 完整命令可以通過在堆棧面板中右鍵單擊命令 > “跟隨轉(zhuǎn)儲(chǔ)中的Qword” > “轉(zhuǎn)儲(chǔ) *” > 在轉(zhuǎn)儲(chǔ)面板中右鍵單擊 > “文本” > “擴(kuò)展ASCII” 來擴(kuò)展。 看起來JS正在釋放并執(zhí)行PS腳本。腳本的路徑也可見,這意味著可以在不先執(zhí)行JS文件的情況下調(diào)查PS腳本的IOCs。這是由PSDecode(下載地址:https://github.com/R3MRUM/PSDecode)美化的代碼: 在整理腳本后,可以看到這是真正的惡意軟件,而JS只是傳播者。它將嘗試從第一個(gè)URL下載“01b1v2g3.zip”(另存為“s3pch1.zip”,解壓內(nèi)容到創(chuàng)建的“MsEdgeSandbox”隱藏文件夾中,并刪除“s3pch1.zip”),或者從第二個(gè)URL下載(下載“f1lePsa”變量中指定的文件,并將它們保存在同一“MsEdgeSandbox”目錄中)。最后,它啟動(dòng)“client32.exe”并創(chuàng)建注冊(cè)表?xiàng)l目以保持持久性?,F(xiàn)在已知惡意的URL,我們可以直接連接到它們并下載ZIP文件: 存檔包含一些DLL、EXE、INI文件,其中包括“client32.exe”,這可能是真正的惡意軟件: 其中一個(gè)配置文件包含一行,可能包含C2地址以及用于連接的端口: 為了進(jìn)一步確認(rèn)上述行為,可以動(dòng)態(tài)地分析文件,但在此之前,可以先用靜態(tài)分析方法進(jìn)行快速檢查。以下是發(fā)現(xiàn)的文件及數(shù)字簽名信息,如圖: 相同的信息可以從檢查字符串或分析PE頭中提取。NetSupport Manager是合法的遠(yuǎn)程管理應(yīng)用程序,但也被對(duì)手用作遠(yuǎn)程訪問木馬(RAT)??傊?,靜態(tài)分析沒有提供任何新信息,因?yàn)閏lient32.exe正在使用配置文件進(jìn)行連接,因此下面將開始通過動(dòng)態(tài)分析來確認(rèn)這一點(diǎn)。 在動(dòng)態(tài)分析之前,先簡(jiǎn)單介紹幾個(gè)實(shí)用工具。FLARE和Remnux是網(wǎng)絡(luò)連接的組合工具, INetSim(下載地址:https://www.inetsim.org/downloads.html)是一個(gè)用于模擬Internet服務(wù)如:http或smtp的工具。將FLARE的默認(rèn)網(wǎng)關(guān)配置為Remnux的IP, 這樣在FLARE中生成的流量將被定向到Remnux的機(jī)器。通過網(wǎng)絡(luò)分析確認(rèn)了惡意軟件確實(shí)正在連接到配置文件中的域名,以及一個(gè)新的域名, 可能是合法的域名, 因?yàn)榻馕鲇蛑赶? geo.netsupportsoftware.com,以下是Wireshark(下載地址:https://www.wireshark.org/)抓包的結(jié)果: 接下來看一下如果Remnux也在端口1412上運(yùn)行監(jiān)聽器會(huì)出現(xiàn)什么情況(netcat下載地址:https://sectools.org/tool/netcat/): 看來持久性是通過PS腳本實(shí)現(xiàn)的, 但該腳本未執(zhí)行, client32.exe未執(zhí)行這部分功能, 動(dòng)態(tài)分析告一段落。 在模擬普通用戶運(yùn)行后, 的確有一個(gè)PS窗口彈出, 通過調(diào)試JS, 已知釋放的PS腳本在Roaming目錄下, 但運(yùn)行后可能刪除了自身,在該文件夾下無法找到任何文件。 通過檢查MFT(主文件表, 里面包含所有文件的元數(shù)據(jù),路徑為:C:\$MFT) 可以證明js確實(shí)存在, 為了解析$MFT文件,將其保存為CSV格式文件, 這個(gè)可以使用MFTCmd.exe和TimelineExplorer(下載地址:https://ericzimmerman.github.io/#!index.md)組合打開解析后的CSV文件: PS腳本在執(zhí)行后會(huì)刪除自身,因此在$MFT中看不到它,與文件刪除一樣,$MFT中的EntryNumber被標(biāo)記為未分配,并且很快被覆蓋,但還有另一個(gè)名為$UsnJrnl的表(記錄系統(tǒng)上發(fā)生的所有更改;路徑:C:\$Extend\$UsnJrnl)。它有兩個(gè)備用數(shù)據(jù)流:$Max(更改日志)和$J(更改日志的內(nèi)容,其中保存了對(duì)文件的每個(gè)操作)。此外,NTFS以UTC格式存儲(chǔ)時(shí)間值,因此它們不受時(shí)區(qū)更改的影響;我的沙箱上的本地時(shí)間是UTC+2(15:36),因此在$MFT中是-2小時(shí)的時(shí)間(13:26)。下面是來自$J表的PS腳本的創(chuàng)建和刪除條目,證明了其過去確實(shí)存在過;此外,在調(diào)試過程中,腳本的名稱與之前不同,這表明每次執(zhí)行JS時(shí)腳本名稱都是隨機(jī)的。 下載的s3pch1.zip 表現(xiàn)出類似的行為,但在以那個(gè)名稱下載之前,會(huì)創(chuàng)建一個(gè) .tmp 文件,然后將其重命名為腳本中指定的名稱。這意味著重命名也可以通過使用 $J 并通過指定文件的 EntryNumber 進(jìn)行過濾來證明。在需要確認(rèn)已被重命名的可疑文件存在的情況下,這非常有用,因?yàn)?$MFT 表只包含當(dāng)前的文件名: MsEdgeSandbox 文件夾的存在也可以在 $MFT/$J 表中進(jìn)行驗(yàn)證;以下是證明它已被創(chuàng)建為隱藏目錄的證據(jù): $J 表不會(huì)顯示完整路徑,但可以與 $J(在此情況下為83495)中的 ParentEntryNumber 和 $MFT 中的 EntryNumber 進(jìn)行相關(guān)性檢查;$MFT表中的 EntryNumber 83495 指向 Roaming 文件夾,這也證明了PS腳本、s3pch1.zip和MsEdgeSandbox 文件夾是在那里創(chuàng)建的: 在收集了所有名稱之后,可以過濾 $J 表來搜索它們(legit.js 也從 mal.js 重命名過來,EntryNumber 是相同的): 所有惡意文件的存在已通過 $MFT 和 $J 表得到證實(shí)。 所有文件的執(zhí)行證據(jù)都可以在Prefetch文件夾中找到(它包含加速應(yīng)用程序加載時(shí)間所需的數(shù)據(jù), 路徑:C:\Windows\Prefetch)。創(chuàng)建時(shí)間是應(yīng)用程序首次執(zhí)行的時(shí)間,修改時(shí)間是應(yīng)用程序的上次執(zhí)行時(shí)間加上 10 秒 — 在這 10 秒內(nèi),Prefetch文件將記錄可執(zhí)行文件與之交互的所有文件和目錄。Prefetch還包含最后 8 次運(yùn)行時(shí)間,其中第 8 次是修改時(shí)間。如果這是一個(gè)應(yīng)用程序,那么修改時(shí)間將指示上次執(zhí)行時(shí)間 — 但對(duì)于使用特定應(yīng)用程序打開的文件則不然。惡意腳本執(zhí)行后還執(zhí)行了 Powershell — 這就是修改時(shí)間與 wscript.exe 不同的原因,這意味著 Powershell/另一個(gè)腳本的執(zhí)行,而不是這個(gè)特定的惡意腳本。如下所示,兩個(gè)應(yīng)用程序在某個(gè)時(shí)間點(diǎn)打開了惡意腳本,其中 Powershell 還與 s3pch1.zip(通過腳本下載)和 client32.exe(通過腳本執(zhí)行)進(jìn)行了交互;至于 client32.exe,它是一個(gè)應(yīng)用程序,因此修改時(shí)間表示執(zhí)行時(shí)間 +10 秒(所有時(shí)間均為 UTC+2): 在禁用Prefetch的情況下(可以通過更改注冊(cè)表鍵的值來實(shí)現(xiàn):SYSTEM(HKLM)/CurrentControlSet/Control/SessionManager/MemoryManagement/PrefetchParameters/EnablePrefetcher 設(shè)置為 0),執(zhí)行也可以在名為 RecentDocs 的注冊(cè)表鍵中進(jìn)行驗(yàn)證(最近訪問的文件,UTC;路徑:NTUSER.DAT(HKCU)\Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs\*extension*): 證明PowerShell腳本執(zhí)行的最直接證據(jù)可在Windows日志中找到(C:\Windows\System32\winevt\Logs\Microsoft-Windows-PowerShell/Operational.evtx): 對(duì)于 wscript.exe(JS)、powershell.exe 和 client32.exe, 安全日志也可以通過進(jìn)程創(chuàng)建事件來證明執(zhí)行,事件ID為4688: 在執(zhí)行JS后,網(wǎng)絡(luò)流量將如下所示: 首先連接到 tukudewe.com 獲取 zip 文件,然后直接連接到 jokosampbulid (C2),并在 client32.exe 執(zhí)行后進(jìn)行地理位置檢查(UTC 時(shí)間) 腳本還通過在注冊(cè)表中創(chuàng)建自動(dòng)啟動(dòng)項(xiàng)添加了一些持久性。持久性知名位置之一當(dāng)然是Run鍵。有兩個(gè)Run鍵:NTUSER.DAT(HKCU)\Software\Microsoft\Windows\CurrentVersion\Run(此鍵中的值在特定用戶登錄后運(yùn)行)和SOFTWARE(HKLM)\Microsoft\Windows\CurrentVersion\Run(此鍵中的值在任何用戶登錄后運(yùn)行)。在已知持久性的情況下(如本例),更容易刪除,但如果位置未知,則始終可以通過解析注冊(cè)表來查找異常條目。一個(gè)能夠做到這一點(diǎn)的工具是 RegRipper(下載地址:https://github.com/keydet89/RegRipper3.0): 至此, 所有惡意文件的執(zhí)行已通過Prefetch、RecentDocs 鍵和日志證明;網(wǎng)絡(luò)連接通過捕獲流量證明,持久性通過注冊(cè)表解析器證明。 該文章在 2024/3/30 15:40:47 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |