Featured image of post 红队利用Windows事件日志存储与执行Payload的技术解析

红队利用Windows事件日志存储与执行Payload的技术解析

本文详细解析了如何利用Windows事件日志存储二进制Payload并通过C#程序检索执行的技术,包括事件日志结构、权限约束、Payload注入方法及实战演示,揭示了这一隐蔽持久化技术的实现原理与防御挑战。

Windows事件日志在红队行动中的应用

你是否知道Windows事件日志中可能隐藏着什么?2022年5月,我读到一篇关于攻击者利用Windows事件日志隐藏无文件恶意软件以维持持久化的新技术文章。该方法简单却强大,让我既惊讶又挫败。

Windows事件日志基础

Windows事件日志包含操作系统、服务(如Office和SQL Server)的日志,采用结构化数据格式便于搜索分析。通过事件查看器(eventvwr.exe)可访问主要日志分类:

  • 应用程序
  • 安全
  • 安装程序
  • 系统
  • 转发事件

此外,“应用程序和服务日志"文件夹包含单个应用及硬件事件日志(如PowerShell)。每个日志条目包含标准字段:日志/键、源、日期/时间、事件ID、任务类别、级别、计算机、事件数据(消息和二进制数据)。

用户权限与大小限制

写入事件日志需注意权限:部分日志(如系统日志)要求本地管理员权限。事件消息字符串最大字符限制为31,839,约束了存储数据量。管理员还可创建全新事件日志。

创建事件日志条目

通过PowerShell的Write-EventLog命令可轻松创建条目:

1
Write-Event -LogName $1 -Source $2 -EventID $3 -EventType Information -Category 0 -Message $4

需确保:

  • -LogName是用户有写入权限的有效日志
  • -Source是在注册表中注册的源(如Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\下)
  • 使用有效事件ID避免可疑错误消息(如未注册事件ID时系统提示"组件未安装”)

注入与检索Payload

通过-RawData参数可将二进制数据(如Hex字符串转换的字节数组)嵌入日志条目。实战中:

  1. 使用msfvenom生成Payload(如Hex格式的Windows exec或反向Shell)
  2. 选择合适日志和源(如Key Management Service日志和KmsRequests源)
  3. 创建包含Payload的日志条目

检索与执行通过C#程序实现:

  • 搜索特定事件ID(如31337)的日志条目
  • 提取二进制数据
  • 使用常见Shellcode注入技术(如注入当前进程)执行Payload

代码示例(详见GitHub:EventLogForRedTeams)成功执行了calc.exe和Metasploit反向Shell(windows/x64/shell_reverse_tcp),尽管Windows Defender最终会检测并终止未混淆的Metasploit载荷。

持久化与防御挑战

该技术可用于建立持久化(如通过Cobalt Strike的execute-assembly运行SharpEventPersist工具)。尽管基础演示未涉及高级规避,但显示了事件日志存储Payload的潜力:完全打补丁的Windows 11系统可运行无混淆Cobalt Strike Beacon(HTTPS Beacon效果更佳)。

结论

Windows事件日志可轻易存储并检索恶意Payload,为红队提供了隐蔽的持久化方法。防御方需警惕异常日志条目,加强监控与分析。

参考工具:

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计