|
一、概述
渗透测试和红队需要绕过常见的 AV/EDR 设备并在目标上执行代码,随着时间的推移,防御会越来越强,绕过也会变得越来越困难。Inceptor 是一个自动化 (绕过 AV/EDR) 工具,不需要你做额外的准备。
二、特性
Inceptor 是一个基于模板的 Windows PE packer,旨在为渗透测试人员和红队人员提供绕过常见的 AV/EDR 方案。当时设计 Inceptor 这款工具的重点是要有可用性,并允许用户自定义。
如果想全面了解,以下资源可能会对你有所帮助:
2.1 ShellCode 转换和加载
Inceptor 能够使用各种开源转换器将现有的 EXE/DLL 转换为 ShellCode:
- [1] Donut:由 TheWover 创建,可将 Native、DLL 和 .Net 二进制文件转换为单独的一块 ShellCode;
- [2] sRDI:由 Monoxgas 创建,可将现有的 naticcve DLL 转换为 PIC,然后将其作为常规的 ShellCode 注入;
- [3] Pe2Sh:由 Hasherazade 创建,可将原生的 EXE 转换为 PIC ShellCode,也可以作为普通的 EXE 运行;
2.2 LI 编码器 vs LD 编码器
Inceptor 可以使用不同的方式对 ShellCode 进行编码、压缩或加密。在开发该工具时,分两种,一种为 loader-independent (LI) 编码,另一种为 loader-dependent (LD) 编码。
LI 编码是一种不受使用者 (loader) 选择的模板管理的编码,通常这意味着解码 Stub 不是模板的一部分,而是被嵌入的 ShellCode 本身。Inceptor 使用开源工具 sgn (使 Payload 具有多态性,通用签名无法检测到) 让自身具有此项特性。
Shikata-Ga-Nai 并不真正适合某些模板,即便它很强大。出于这个原因,Inceptor 还实现了 Loader-dependent 的编码器,这些编码器旨在让加载器负责解码。因此,LD 编码器直接在模板中安装解码 Stub。 这种在 Inceptor 中实现的编码器也是 "可组合的",这意味着它们可以组合在一起以对 Payload 进行编码。
虽然使用一系列编码器有时可以改善给定 Payload 的混淆,但这种技术也 "透明",反而可帮助防御者更好地提出相关特征数据。出于这个原因,Inceptor 提供了多种方法来混淆最终工件,强化 RE 过程。
在撰写本文时,Inceptor 的公共版本已提供以下编码器/压缩器/加密器:
[1] Native
Xor
Nop (Insertion)
[2] .NET
Hex
Base64
Xor
Nop (Insertion)
AES
Zlib
RLE
[3] PowerShell
Hex
Base64
Xor
Nop (Insertion)
AES
Inceptor 可以静态和动态验证一系列编码,静态检查解码器的输入/输出类型,动态验证 independent implementation 的实现,用户可以使用 chain-validate.py 轻松验证。
2.3 逃避 AV 机制
Inceptor 本地实现了逃避 AV 机制,因此,它提供了以 “模块” (插件) 的形式将逃避 AV 功能包含到 Payload 中。
可以嵌入的插件有:
[1] AMSI bypass
[2] WLDP bypass
[3] ETW bypass
[4] Sandbox (Behavioural) Deception
2.4 逃避 EDR 机制
Inceptor 还实现了逃避 EDR 机制,例如 full unhooking、direct syscall 和 manual DLL Mapping。direct syscall 是在 C# 中使用优秀的 DInvoke 项目实现的,也是由 TheWover 实现的。在C/C++中,Syscalls 由 Jackson_T 使用 SysWhispers 和 SysWhispers2 项目实现。此外,Inceptor 还内置了对 x86 Syscalls 的支持。
AV bypass 功能可以作为模块启用,唯一的区别是它们需要在支持它们的模板上运行。目前实现的技术有:
[1] Full Unhooking
[2] Manual DLL Mapping
[3] Direct Syscalls
2.5 混淆
Inceptor 支持使用外部工具 (例如 ConfuserEx、Chameleon 和 LLVM-Obfuscator,LLVM-Obfuscator 是基于 IR 的混淆器) 对 Payload 进行混淆。
- [1] PowerShell
- [2] C#
- [3] C/C++
2.6 代码签名
Inceptor 的另一个特点是可以使用 CarbonCopy 工具对生成的二进制文件进行代码签名。通常,对使用代码签名证书签名的文件的分析都不太严格,许多反恶意软件产品不验证/验证这些证书。
2.7 工作流程
以下图概括了完整的工作流程:
三、 安装
Inceptor 被设计在 Windows 下工作,update-config.py 可以找到所需的二进制文件并相应地更新配置,可能需要安装 Microsoft Build Tools、Windows SDK 和 Visual Studio,update-config.py 将指导用户如何安装所需的依赖项。
[pre]
git clone --recursive https://github.com/klezVirus/inceptor.git
cd inceptor
virtualenv venv
venv\Scripts\activate.bat
pip install -r requirements.txt
cd inceptor
python update-config.py
[/pre]
四、笔记
4.1 默认加载器
当前版本的 Inceptor 使用简单的命名约定 (不要更改模板名称) 和用户提供的参数集来定位特定模板。在参数中,还有加载器 (-t) 参数。如果未指定,则用默认:
[pre]
$ python inceptor.py -hh
Default Loaders
Input File Extension SpecialCondition Guessed Filetype Default Loader Default Template
0 .raw NaN Shellcode Simple Loader Classic
1 .exe .NET Dotnet Executable Donut Classic
2 .exe NaN Native Executable Pe2Shellcode PE Load
3 .dll NaN Native Library sRDI Classic
[/pre]
4.2 模板命名约定
理解模板名称约定也非常重要,以免误解工件行为。
[1] Classic:经典模板通常意味着它使用 VirtualAlloc/VirtualAllocEx 和 CreateThread/CreateRemoteThreadAPI 来分配和执行任意代码
[2] Dinvoke:如果模板仅包含 dinvoke (例如 classic-dinvoke.cs),则表示它使用 dinvoke 的动态函数解析功能
[3] Dinvoke-subtechnique:包含 dinvoke 的模板及使用 dinvoke 的特定功能,如 manual_mapping、overload_mapping 或 Syscalls
[4] Syscalls:顾名思义,此模板使用 Syscalls
[5] PE Load:此模板尝试将完整 PE 映射到内存中,而不进行转换
[6] Assembly Load:此模板尝试使用反射执行 .NET 程序集
五、用法
[pre]
$ usage: inceptor.py [-h] [-hh] [-Z] {native,dotnet,powershell} ...
inceptor: A Windows-based PE Packing framework designed to help
Red Team Operators to bypass common AV and EDR solutions
positional arguments:
{native,dotnet,powershell}
native Native Binaries Generator
dotnet .NET Binaries Generator
powershell PowerShell Wrapper Scripts Generator
optional arguments:
-h, --help show this help message and exit
-hh Show functional table
-Z, --check Check file against ThreatCheck
[/pre]
六、下一步发展
[1] 新的模板引擎
[2] 新的模板
[3] 新的编码
[4] C# 代码混淆
七、资源
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|