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