0. 前言
这个免杀框架是今天下午在Github看到的,8月2号新鲜出炉。看简介让人有眼前一亮的感觉(Github上免杀框架非常多,但大部分都是劣质项目)
今天推荐的这个项目集成了各种主流的AV/EDR绕过方案,虽然可以遇见它很快就会被各大安全产品标记,但它所集成的技术可以作为一个很好的study list
1. 从我的私有免杀框架说起
我在日常的RedTeam行动中使用的是自己用Rust写的免杀框架,名字叫nucleus(看过美剧硅谷的朋友应该有印象),可能会在未来公开。为了追求更好的免杀效果,nucleus所有的功能都是自实现的(也就是零依赖),代码量大概在5K行左右。
nucleus的免杀处理work flow与今天推荐的项目类似。因为我的框架是偏向于native binary,所以没有集成AMSI bypass,WLDP bypass和.NET Loader等功能。而且OLLVM对LLVM版本的限制与Rust编译链不兼容,所以也没有集成混淆功能,但多了Microsoft signature restricted,ACG和Image path spoof等功能。
2. 今天的主角——inceptor
今天的主角是inceptor[1],项目地址是https://github.com/klezVirus/inceptor
首先看一下它的work flow:
1.针对三种不同的payload格式分别处理,最终都转化为shellcode格式
•Shellcode •EXE,native通过PE2SH或Donut处理,.NET通过Donut处理 •DLL,通过sRDI处理
2.使用Shikata-Ga-Nai进行加载器无关的编码,这个编码器大家应该耳熟能详,是MSF默认集成的编码器里效果最佳的 3.进行和加载器强依赖的编码 4.写入源码,源码模版中集成AV/EDR bypass的技术 5.编译链接,.NET使用CSC,native使用clang 6.混淆
•.NET使用ConfuserEX,AsStrongAsFuck或LoGIC.NET •nativeri使用OLLVM
7.签名,使用CarbonCopy[2]
3. AV Evasion
•AMSI bypass•WLDP bypass•ETW bypass•Sandbox (Behavioural) Deception
都是很常见的技术,就不详细介绍了
4. EDR Evasion
•Full Unhooking•Manual DLL Mapping•Direct Syscalls
inceptor的API Unhooking我没有看代码,我想应该和我的框架做法类似,讲讲我的做法:
我的框架里自实现了kernel32!GetProcAddress,并且实现了PE Loader的功能,我最初是想通过递归调用自实现的PE Loader功能来加载纯净的DLL到用户态内存中,这样被加载的恶意PE文件IAT中指向的都是我维护的用户态DLL。但实现中发现即使解决了api set scheme问题后依然无法加载系统DLL,原因未知
之后我加载DLL的时候,重定位步骤以内存中已存在的DLL为基准,加载完成后拷贝.TEXT段覆盖到内存中已存在的DLL上,完成刷新操作,来实现通用且非侵入式的API Unhooking
inceptor的Direct Syscall实现了x86下的功能,但我认为x86下的Direct Syscall没什么卵用,因为人家直接在Ring0层做Hook了
5. 混淆和签名
native的混淆是通过OLLVM,做一些控制流之类的操作
签名伪造的项目我没有了解过,CarbonCopy这个项目真的可以伪造微软签名吗?有空研究一下
References
[1]
inceptor: https://github.com/klezVirus/inceptor[2]
CarbonCopy: https://github.com/paranoidninja/CarbonCopy
原文始发于微信公众号(0x4d5a):inceptor——一个不错的免杀框架
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论