README!
我们知道一般EDR对可疑程序进行监控一般都会采用往程序里注入到检测的进程中,通过hook一些敏感的3环API来判断程序是否进行一些恶意操作,那么我们可以通过添加流程缓解措施和漏洞利用保护参考来实现保护,从而防止EDR的dll注入对进程进行检测
对于CreateProcess
的底层探究实现。
ETW
全称为Event Tracing for Windows
,即windows事件跟踪,它是Windows提供的原生的事件跟踪日志系统。由于采用内核层面的缓冲和日志记录机制,所以ETW
提供了一种非常高效的事件跟踪日志解决方案,本文基于ETW
探究其攻与防的实现
一般的shellcode加载到内存都是通过LoadLibrary
和GetProcAddress
来获取函数进行shellcode加载,亦或是通过VirtualAllocEx
远程申请一块空间来放入shellcode的地址进行加载。为了隐蔽,攻击者通常会通过PEB找到InLoadOrderModuleList
链表,自己去定位LoadLibrary
函数从而规避杀软对导入表的监控。攻击者先把shellcode加密,在写入时解密存放到内存空间,使用基于文件检测的方法,是无能为力的,那么这种无落地的方式,最终都会在内存中一览无余
通过不落地实现反射注入shellcode到内存似乎是规避杀软hook api的一种好方式,但是无论如何某块内存的详细信息最终都会在vad里一览无余,那么vad作为内存管理的制高点,杀软自然也不会轻易放过。那么当我们反射注入执行的时候,如果杀软监控了vad树,就会捕捉到可疑内存从而查杀,那么我们要做的就是通过了解vad的机制来绕过杀软检测
注册表是windows的重要数据库,存放了很多重要的信息以及一些应用的设置,对注册表进行监控并防止篡改是十分有必要的。在64位系统下微软提供了CmRegisterCallback
这个回调函数来实时监控注册表的操作,那么既然这里微软提供了这么一个方便的接口,病毒木马自然也会利用,这里我们就来探究其实现的原理和如何利用这个回调函数进行对抗
我们要想在32位下实现进程保护很简单,通过SSDT hook重写函数即可实现,但是在64位系统下因为引入了PG
和DSE
的原因,导致SSDT hook
实现起来处处受限。但微软同样为了系统安全,增加了一个对象回调函数的接口,利用该回调可以实现对对象请求的过滤保护自身的进程,目前大部分64位下的安全软件保护机制都是基于该方法,我们深入进行探究
在32位的系统下,我们想要实现某些监控十分简单,只需要找到对应的API实现挂钩操作即可检测进程。但在64位系统下随着Patch Guard
的引入,导致我们如果继续使用挂钩API的方式进行监控会出现不可控的情况发生。微软也考虑到了用户程序的开发,所以开放了方便用户调用的系统回调API函数,在64位系统下的监控,使用系统回调相对于直接hook的方式往往是更值得青睐的一方
我们知道在x64里面,从3环进入0环会调用syscall
,那么如果是32位的程序就需要首先转换为x64模式再通过syscall
进入0环,这里就会涉及到一系列64位寄存器的操作,我们通过探究其实现原理来达到隐藏数据和反调试的效果。