情报背景
近期,卡巴斯基的研究员发现了一种新的“无文件”攻击技术,恶意程序利用Windows事件日志实现Shellcode的存储,并劫持错误报告程序WerFault.exe执行先前嵌入的Shellcode。本文将就其中出现的攻击手法进行解析。
组织名称 |
未知 |
战术标签 |
防御规避 |
技术标签 |
日志利用 顺序搜索劫持 |
情报来源 |
https://securelist.com/a-new-secret-stash-for-fileless-malware/106393/ |
01 攻击技术分析
亮点一:利用Windows日志隐藏Shellcode
样本通过Windows日志API ReportEvent()将shellcode写入事件类别ID为0x4142的日志中进行存储。
日志操作相关API说明如下:
API |
功能说明 |
RegisterEventSourceA |
创建指定名称的日志 |
ReportEventA |
向指定事件中写入日志消息,支持写入文本数据和二进制数据 |
OpenEventLogA |
打开指定事件的日志句柄 |
ReadEventLogA |
读取指定事件ID的所有日志详情,读取结果存放在EVENTLOGRECORD数组中 |
写日志流程:
读日志流程:
在Sysmon中捕获到的日志写入事件:
数据读取结果输出:
可见,通过合法API调用,可以借助Windows系统日志实现Shellcode的写入。借助日志的载荷存储,一方面可以通过自定义的特殊事件ID实现载荷的分段存储与读取,另一方面也借此很好地在宿主环境中实现了载荷隐藏。
亮点二:DLL加载顺序劫持配合入口Patch规避非预期执行
攻击者利用合法二进制程序WerFault.exe加载恶意wer.dll执行恶意逻辑。WerFault.exe是Windows 的错误报告程序,原本用于上传崩溃报告等信息。攻击者将其副本与恶意载荷wer.dll放置于C:WindowsTasks目录,利用DLL加载顺序劫持执行DLL中的攻击代码,读取Windows日志中嵌入的Shellcode并执行。
恶意wer.dll为了阻断WerFault.exe的后续执行流程,在被加载时,首先Patch自身的入口地址代码,通过修改字节为跳转代码,将控制流执行到函数WaitAndExit()中:
在函数WaitAndExit()中只会调用WaitForSingleObject()然后退出。这一方面使得恶意逻辑得以执行,另一方面,阻止了原WerFault.exe中其余逻辑的执行,避免了非预期的调用,使得劫持过程更加安静可控。
02 总结
1.在本次事件中,基于合法调用的日志功能实现载荷的存储与读取,整个过程均通过合法API完成,不易察觉;
2.配合DLL搜索顺序劫持与自身入口代码修改,在加载恶意代码的同时,避免了非预期调用的出现。
绿盟科技天元实验室专注于新型实战化攻防对抗技术研究。
研究目标包括:漏洞利用技术、防御绕过技术、攻击隐匿技术、攻击持久化技术等蓝军技术,以及攻击技战术、攻击框架的研究。涵盖Web安全、终端安全、AD安全、云安全等多个技术领域的攻击技术研究,以及工业互联网、车联网等业务场景的攻击技术研究。通过研究攻击对抗技术,从攻击视角提供识别风险的方法和手段,为威胁对抗提供决策支撑。
M01N Team
聚焦高级攻防对抗热点技术
绿盟科技蓝军技术研究战队
往期推荐
原文始发于微信公众号(M01N Team):攻击技术研判 | 利用Windows日志的新“无文件”技术