通过 APC 实现 Dll 注入——绕过 Sysmon 监控

发布于 2024-11-17 15:28:05 字数 9833 浏览 7 评论 0

0x00 前言

要对指定进程进行远程注入,通常使用 Windows 提供的 API CreateRemoteThread 创建一个远程线程,进而注入 dll 或是执行 shellcode

Sysmon 可用来监控和记录系统活动,可记录 CreateRemoteThread 操作

注入的方法不只有 CreateRemoteThread,能否通过其他注入方式绕过 Sysmon 的监控呢?

Casey Smith@subTee 在他的文章中给出了答案:

Shellcode Injection via QueueUserAPC - Hiding From Sysmon

地址如下:http://subt0x10.blogspot.com/2017/01/shellcode-injection-via-queueuserapc.html

0x01 简介

本文将要介绍如下内容:

  • Sysmon 配置测试,监控 CreateRemoteThread 操作
  • c++实现通过 APC 对 Dll 注入
  • 绕过 Sysmon 测试
  • Casey Smith@subTee 分享的 C#实现代码和用途

Sysmon:

可用来监控和记录系统活动,并记录到 windows 事件日志,包含如下事件:

  • Event ID 1: Process creation
  • Event ID 2: A process changed a file creation time
  • Event ID 3: Network connection
  • Event ID 4: Sysmon service state changed
  • Event ID 5: Process terminated
  • Event ID 6: Driver loaded
  • Event ID 7: Image loaded
  • Event ID 8: CreateRemoteThread
  • Event ID 9: RawAccessRead
  • Event ID 10: ProcessAccess
  • Event ID 11: FileCreate
  • Event ID 12: RegistryEvent (Object create and delete)
  • Event ID 13: RegistryEvent (Value Set)
  • Event ID 14: RegistryEvent (Key and Value Rename)
  • Event ID 15: FileCreateStreamHash
  • Event ID 255: Error

详情见 https://technet.microsoft.com/en-us/sysinternals/sysmon

注:CreateRemoteThread 为 Event ID 8

Dll 注入

常见方法:

  • 创建新线程
  • 设置线程上下背景文,修改寄存器
  • 插入 Apc 队列
  • 修改注册表
  • 挂钩窗口消息
  • 远程手动实现 LoadLibrary

引用自 http://www.cnblogs.com/uAreKongqi/p/6012353.html

Shellcode Injection via QueueUserAPC - Hiding From Sysmon:

c#实现,通过调用 QueueUserAPC 执行 shellcode,可应用于 InstallUtil.exe 和 Msbuild.exe,能够绕过 Sysmon 对 Event ID 8: CreateRemoteThread 的监控

文章地址:http://subt0x10.blogspot.com/2017/01/shellcode-injection-via-queueuserapc.html

0x02 Sysmon 简介

下载地址:https://technet.microsoft.com/en-us/sysinternals/sysmon

以系统服务和驱动的方式安装在系统上

用来监控和记录系统活动,并记录到 windows 事件日志中

提供进程创建、网络连接以及文件创建时间更改等操作的详细信息

通过事件日志,可识别异常活动,了解攻击者在网络上的操作

注:系统安装 Sysmon 后,新增服务 Sysmon

如图

Alt text

也就是说,如果攻击者获得了主机权限,通过查看已安装服务可以看到 Sysmon 的安装

安装

以默认配置安装:sysmon -accepteula –i -n

以配置文件安装:sysmon -c config.xml

配置文件 config.xml 格式示例如下:

注:xml 大小写敏感

<Sysmon schemaversion="3.20">      
<!-- Capture all hashes -->      
<HashAlgorithms>*</HashAlgorithms>      
<EventFiltering>        
<!-- Log all drivers except if the signature -->       
 <!-- contains Microsoft or Windows -->       
 <DriverLoad onmatch="exclude">          
<Signature condition="contains">microsoft</Signature>         
 <Signature condition="contains">windows</Signature>        
</DriverLoad>       
 <!-- Do not log process termination -->        
<ProcessTerminate onmatch="include" />       
 <!-- Log network connection if the destination port equal 443 -->        
<!-- or 80, and process isn't InternetExplorer -->        
<NetworkConnect onmatch="include">          
<DestinationPort>443</DestinationPort>          
<DestinationPort>80</DestinationPort>        
</NetworkConnect>        
<NetworkConnect onmatch="exclude">          
<Image condition="end with">iexplore.exe</Image>       
 </NetworkConnect>     
 </EventFiltering>    
</Sysmon>

注:该示例引用自 http://www.freebuf.com/sectool/122779.html

查看配置

sysmon -c

注:配置属性保存在注册表如下位置:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SysmonDrv\Parameters

如图

Alt text

查看日志记录

1.通过面板

位置如下:

Control Panel\System and Security-View event logs

Applications and Services Logs-Microsoft-Windows-Sysmon-Operational

如图

Alt text

2.通过 powershell 查看,命令如下:

(管理员权限)

Get-WinEvent -FilterHashtable @{logname="Microsoft-Windows-Sysmon/Operational";}

监控并记录 CreateRemoteThread

配置文件如下:

<Sysmon schemaversion="3.20">      
<!-- Capture all hashes -->      
<HashAlgorithms>*</HashAlgorithms>      
 <EventFiltering>        
<!-- Log all drivers except if the signature -->       
 <!-- contains Microsoft or Windows -->       
<CreateRemoteThread onmatch="include">
<TargetImage condition="end with">calc.exe</TargetImage>
</CreateRemoteThread>
 </EventFiltering>    
</Sysmon>

保存为 RecordCreateRemoteTh.xml

注:该配置文件表示对进程 calc.exe 监控,如果捕获到 CreateRemoteThread,将会写入事件日志

安装配置文件:

Sysmon.exe -c RecordCreateRemoteTh.xml

如图

Alt text

查看配置信息

Sysmon.exe -c

如图

Alt text

启动 calc.exe

执行 CreateRemoteTh.exe,calc.exe 被注入,弹框,如图

Alt text

CreateRemoteTh.exe 的源代码可参照:https://github.com/3gstudent/CreateRemoteThread/blob/master/CreateRemoteThreadTest.cpp

查看日志,发现 Event ID 8

如下图,检测到 CreateRemoteThread

Alt text

通过 powershell 查看 Event ID 8

Get-WinEvent -FilterHashtable @{logname="Microsoft-Windows-Sysmon/Operational";ID=8}

如下图,获取日志 Event ID 8

Alt text

0x03 c++实现通过 APC 对 Dll 注入

使用 APC 注入:

代码如下:https://github.com/3gstudent/Inject-dll-by-APC/blob/master/test.cpp

关于代码的详细说明可参照:http://blogs.microsoft.co.il/pavely/2017/03/14/injecting-a-dll-without-a-remote-thread/

如图,成功注入到 calc.exe

Alt text

使用 ProcessExplorer 查看 calc.exe 加载的 dll,如下图,成功注入 testdll

Alt text

查看日志,并没有产生 Event ID 8,成功绕过 Sysmon 对 CreateRemoteThread 的监控

0x04 Casey Smith@subTee 分享的 C#实现代码和用途

可应用到 InstallUtil.exe 和 Msbuild.exe 的利用上面

InstallUtil.exe:https://gist.github.com/subTee/7bbd8e995ed8e8b1f8dab1dc926def8a

Msbuild.exe:https://gist.github.com/subTee/cf3e1b06cf58fcc9e0255190d30c2d38

调用过程中没有产生 Event ID 8

0x05 小结

本文对 Sysmon 的监控功能做了测试,并介绍如何通过 APC 实现 Dll 注入,绕过 Sysmon 对 CreateRemoteThread 的监控

在特定环境下,如果无法手动关闭 Sysmon 服务,利用 APC 能在一定程度上绕过 Sysmon 对 CreateRemoteThread 的监控

参考资料:

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

0 文章
0 评论
23 人气
更多

推荐作者

qq_7J1imQ

文章 0 评论 0

《一串符号》

文章 0 评论 0

hls.

文章 0 评论 0

雅心素梦

文章 0 评论 0

塔塔猫

文章 0 评论 0

微信用户

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文