巧用Windows事件日志“隱藏”載荷
背景
根據(jù)卡巴斯基發(fā)布的研究報(bào)告發(fā)現(xiàn)一項(xiàng)惡意活動,其中的技術(shù)涉及將shellcode直接放入Windows事件日志,Windows事件日志可以被攻擊者用來掩蓋特洛伊木馬病毒的惡意使用。實(shí)現(xiàn)了”無文件”攻擊技術(shù),下面就利用該涉及的技術(shù),簡單嘗試一下。
前置知識
Windows事件日志
Windows默認(rèn)事件日志查看器為eventvwr.msc,能實(shí)現(xiàn)簡單的使用,Win+R鍵后輸入eventvwr回車即能打開。Windows主要的日志在“Windows 日志”中,該文件夾中包含所有Windows系統(tǒng)上的五個標(biāo)準(zhǔn)類別。比較常用的Windows日志有系統(tǒng)日志、安全日志、應(yīng)用程序日志這三個日志內(nèi)容。
- 應(yīng)用程序
- 安全
- Setup
- 系統(tǒng)
- Forwarded Events
事件查看器的另一個“應(yīng)用程序和服務(wù)日志”文件夾里,包含Windows系統(tǒng)中其它各類重要服務(wù)組件的事件日志。Windows PowerShell日志在該集合中。
Windows事件日志文件實(shí)際上是以特定的數(shù)據(jù)結(jié)構(gòu)的方式存儲內(nèi)容,每條記錄事件的數(shù)據(jù)結(jié)構(gòu)由9個字段組成,包括日志名稱、來源、記錄時間、事件ID、任務(wù)類別、級別、計(jì)算機(jī)、事件數(shù)據(jù)(EventData)等信息。其中事件數(shù)據(jù)僅支持消息和二進(jìn)制數(shù)據(jù)。
寫入事件日志
我們可以使用PowerShell操作Windows事件日志,其中Write-EventLog命令可以將事件寫入事件日志,參考微軟官方文檔,其中參數(shù)對應(yīng)上面介紹的字段:
執(zhí)行命令
在事件查看器中,可以看到事件ID為65535的日志成功創(chuàng)建在應(yīng)用程序日志中,消息為Hello World!
簡單復(fù)現(xiàn)
寫入載荷
只需在Write-EventLog中使用-RawData參數(shù),就可以在事件日志字段中包含二進(jìn)制數(shù)據(jù),而且必須將二進(jìn)制數(shù)據(jù)作為字節(jié)數(shù)組傳到-RawData參數(shù)中。我們可以將其包含數(shù)據(jù)的十六進(jìn)制字符串轉(zhuǎn)換為字節(jié)數(shù)組,然后再傳遞。
首先,使用msfvenom生成彈計(jì)算器 payload。輸出格式為十六進(jìn)制字符串
利用工具網(wǎng)站轉(zhuǎn)為字節(jié)數(shù)組
使用密鑰管理服務(wù)日志和KmsRequests作為源進(jìn)行事件日志寫入。
執(zhí)行后,Payload已成功存儲到事件日志當(dāng)中。于事件日志的詳細(xì)信息就能查看到。
執(zhí)行載荷
為了提取并執(zhí)行寫入的載荷,這邊用非常簡單的C++程序和Python腳本進(jìn)行證明,代碼放在??這里??。
用Visual Studio編譯PoC代碼后放在環(huán)境中執(zhí)行,從”隱藏”在事件日志Key Management Services的第一條日志中提取二進(jìn)制載荷數(shù)據(jù)并且成功執(zhí)行。過程中defender并未對其進(jìn)行告警。
另外使用Python的win32evtlog實(shí)現(xiàn)讀取事件日志內(nèi)容,然后也用非常常見的shellcode注入技術(shù)執(zhí)行該載荷。
同樣成功執(zhí)行隱藏在事件日志中的載荷:
可以看到,對Windows事件日志寫入和讀取Shellcode,都是使用合法的API調(diào)用,所以能借此很好的對載荷進(jìn)行隱藏。作為一種持久化方法,還是能有更好的玩法。例如配合DLL搜索順序劫持加載惡意代碼等。
注意事項(xiàng)
用戶限制
事件日志的寫入權(quán)限問題。為了能在事件日志條目中存儲有效負(fù)載,我們拿到的權(quán)限必須要能寫入日志。
大小限制
需要注意的另一個限制是,事件日志中可以存儲的數(shù)據(jù)量有大小限制?;谑录⒆址淖畲笞址拗茷?1,839個字符。
更持久
在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\對應(yīng)的日志名稱下的條目中,存在一個EventMessageFile屬性。如果在注入載荷的時候,事件ID不存在于該屬性指定的源關(guān)聯(lián)的事件消息文件中,則會出現(xiàn)下圖這個日志消息:
為了能夠更加的持久化不被發(fā)現(xiàn),事件ID和級別等字段都應(yīng)該偽裝成日常日志的樣子,以免被應(yīng)急人員察覺到異常。
參考:
??https://threatpost.com/attackers-use-event-logs-to-hide-fileless-malware/179484??
??https://securelist.com/a-new-secret-stash-for-fileless-malware/106393??
??https://learn.microsoft.com/zh-cn/windows/win32/api/winbase/nf-winbase-readeventloga???
本文作者:supersaiyan, 轉(zhuǎn)載請注明來自??FreeBuf.COM??