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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 本文讲的是通过APC实现Dll注入——绕过Sysmon监控,要对指定进程进行远程注入,通常使用Windows提供的API CreateRemoteThread创建一个远程线程,进而注入dll或是执行shellcode
本文讲的是 通过APC实现Dll注入——绕过Sysmon监控

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 简介

本文将要介绍如下内容:

1. Sysmon配置测试,监控CreateRemoteThread操作

2. c++实现通过APC对Dll注入

3. 绕过Sysmon测试

4. 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

如图

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

也就是说,如果攻击者获得了主机权限,通过查看已安装服务可以看到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_MACHINESYSTEMCurrentControlSetservicesSysmonDrvParameters

如图

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

查看日志记录

1.通过面板

位置如下:

Control PanelSystem and Security-View event logs
Applications and Services Logs-Microsoft-Windows-Sysmon-Operational

如图

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

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

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

查看配置信息

Sysmon.exe -c

如图

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

启动calc.exe

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

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

CreateRemoteTh.exe的源代码可参照:

https://github.com/3gstudent/CreateRemoteThread/blob/master/CreateRemoteThreadTest.cpp

查看日志,发现Event ID 8

如下图,检测到CreateRemoteThread

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

通过powershell查看Event ID 8

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

如下图,获取日志Event ID 8

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

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

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

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

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

查看日志,并没有产生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的监控




原文发布时间为:2017年4月20日
本文作者:3gstudent
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
安全 API Windows
3.1 DLL注入:常规远程线程注入
动态链接库注入技术是一种特殊的技术,它允许在运行的进程中注入DLL动态链接库,从而改变目标进程的行为。DLL注入的实现方式有许多,典型的实现方式为远程线程注入,该注入方式的注入原理是利用了`Windows`系统中提供的`CreateRemoteThread()`这个API函数,该函数第四个参数是准备运行的线程,我们将`LoadLibrary()`函数填入其中,这样就可以执行远程进程中的`LoadLibrary()`函数,进而将我们自己准备的DLL加载到远程进程空间中执行,DLL在被装载后则会自动执行初始化部分。
131 0
|
10月前
|
网络协议 安全 API
9.9 Windows驱动开发:内核远程线程实现DLL注入
在笔者上一篇文章`《内核RIP劫持实现DLL注入》`介绍了通过劫持RIP指针控制程序执行流实现插入DLL的目的,本章将继续探索全新的注入方式,通过`NtCreateThreadEx`这个内核函数实现注入DLL的目的,需要注意的是该函数在微软系统中未被导出使用时需要首先得到该函数的入口地址,`NtCreateThreadEx`函数最终会调用`ZwCreateThread`,本章在寻找函数的方式上有所不同,前一章通过内存定位的方法得到所需地址,本章则是通过解析导出表实现。
132 0
9.9 Windows驱动开发:内核远程线程实现DLL注入
|
Windows
3.2 DLL注入:远程APC异步注入
APC(Asynchronous Procedure Call)异步过程调用是一种`Windows`操作系统的核心机制,它允许在进程上下文中执行用户定义的函数,而无需创建线程或等待OS执行完成。该机制适用于一些频繁的、短暂的或非常细微的操作,例如改变线程优先级或通知线程处理任务。在`APC机制`中,当某些事件发生时(例如文件IO,网络IO或定时器触发),这些事件将被操作系统添加到一个`APC队列`中,该队列绑定到执行线程。在下一次发生`ALERTABLE`的事件时(例如调用SleepEx或SignalObjectAndWait时),OS将弹出`APC函数`并在执行线程上下文中调用该函数,并在执
100 0
|
网络协议 Shell Linux
MSSQL站库分离注入绕过WDF提权
MSSQL站库分离注入绕过WDF提权
217 0
|
安全 UED Windows
3.3 DLL注入:突破会话0强力注入
Session是`Windows`系统的一个安全特性,该特性引入了针对用户体验提高的安全机制,即拆分Session 0和用户会话,这种拆分`Session 0`和`Session 1`的机制对于提高安全性非常有用,这是因为将桌面服务进程,驱动程序以及其他系统级服务取消了与用户会话的关联,从而限制了攻击者可用的攻击面。
69 0
|
网络协议
驱动开发:内核RIP劫持实现DLL注入
本章将探索内核级DLL模块注入实现原理,DLL模块注入在应用层中通常会使用`CreateRemoteThread`直接开启远程线程执行即可,驱动级别的注入有多种实现原理,而其中最简单的一种实现方式则是通过劫持EIP的方式实现,其实现原理可总结为,挂起目标进程,停止目标进程EIP的变换,在目标进程开启空间,并把相关的指令机器码和数据拷贝到里面去,然后直接修改目标进程EIP使其强行跳转到我们拷贝进去的相关机器码位置,执行相关代码后,然后再次跳转回来执行原始指令集。
399 0
|
监控 安全 Windows
Metasploit -- 木马生成原理和方法
Metasploit -- 木马生成原理和方法
665 0
Metasploit -- 木马生成原理和方法
|
安全 Linux 网络安全
动态Shellcode注入工具 – Shellter
动态Shellcode注入工具 – Shellter
143 0
|
安全 中间件 Shell
文件包含漏洞利用方式-日志注入getshell
中间件的日志文件会保存网站的访问记录,比如HTTP请求行,User-Agent,Referer等客户端信息 如果在HTTP请求中插入恶意代码,那么恶意代码就会保存到日志文件中,访问日志文件的时候,日志文件中的恶意代码就会执行,从而造成任意代码执行甚至获取shell 比如使用代理工具抓包,在HTTP请求中插入一句话木马,访问日志文件时会执行一句话木马,然后使用蚁剑等工具链接,从而getshell
679 0
文件包含漏洞利用方式-日志注入getshell
|
安全 Shell Linux
命令注入绕过方式总结
前言 命令注入是web中常见的漏洞之一,由于web应用程序未对用户提交的数据做严格的过滤,导致用户输入可以直接被linux或windows系统当成命令执行,一般都会造成严重的危害。
611 0