吉沃运营专员 发表于 2021-9-22 15:34:49

以模板驱动的逃避 AV/EDR 框架

项目地址:https://github.com/klezVirus/inceptor
wiki:https://github.com/klezVirus/inceptor/wiki

一、概述

渗透测试和红队需要绕过常见的 AV/EDR 设备并在目标上执行代码,随着时间的推移,防御会越来越强,绕过也会变得越来越困难。Inceptor 是一个自动化 (绕过 AV/EDR) 工具,不需要你做额外的准备。

二、特性

Inceptor 是一个基于模板的 Windows PE packer,旨在为渗透测试人员和红队人员提供绕过常见的 AV/EDR 方案。当时设计 Inceptor 这款工具的重点是要有可用性,并允许用户自定义。

如果想全面了解,以下资源可能会对你有所帮助:

[*] The path to code execution in the era of EDR, Next-Gen AVs, and AMSI
[*] Inceptor - Bypass AV-EDR solutions combining well known techniques

2.1 ShellCode 转换和加载

Inceptor 能够使用各种开源转换器将现有的 EXE/DLL 转换为 ShellCode:

[*] Donut:由 TheWover 创建,可将 Native、DLL 和 .Net 二进制文件转换为单独的一块 ShellCode;
[*] sRDI:由 Monoxgas 创建,可将现有的 naticcve DLL 转换为 PIC,然后将其作为常规的 ShellCode 注入;
[*] 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 的公共版本已提供以下编码器/压缩器/加密器:

Native
   Xor
   Nop (Insertion)
.NET
   Hex
   Base64
   Xor
   Nop (Insertion)
   AES
   Zlib
   RLE
PowerShell
   Hex
   Base64
   Xor
   Nop (Insertion)
   AES

Inceptor 可以静态和动态验证一系列编码,静态检查解码器的输入/输出类型,动态验证 independent implementation 的实现,用户可以使用 chain-validate.py 轻松验证。

2.3 逃避 AV 机制

Inceptor 本地实现了逃避 AV 机制,因此,它提供了以 “模块” (插件) 的形式将逃避 AV 功能包含到 Payload 中。

可以嵌入的插件有:

AMSI bypass
WLDP bypass
ETW bypass
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 功能可以作为模块启用,唯一的区别是它们需要在支持它们的模板上运行。目前实现的技术有:

Full Unhooking
Manual DLL Mapping
Direct Syscalls

2.5 混淆

Inceptor 支持使用外部工具 (例如 ConfuserEx、Chameleon 和 LLVM-Obfuscator,LLVM-Obfuscator 是基于 IR 的混淆器) 对 Payload 进行混淆。


[*] PowerShell
[*] C#
[*] C/C++


2.6 代码签名

Inceptor 的另一个特点是可以使用 CarbonCopy 工具对生成的二进制文件进行代码签名。通常,对使用代码签名证书签名的文件的分析都不太严格,许多反恶意软件产品不验证/验证这些证书。

2.7 工作流程

以下图概括了完整的工作流程:



三、 安装

Inceptor 被设计在 Windows 下工作,update-config.py 可以找到所需的二进制文件并相应地更新配置,可能需要安装 Microsoft Build Tools、Windows SDK 和 Visual Studio,update-config.py 将指导用户如何安装所需的依赖项。


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

四、笔记

4.1 默认加载器

当前版本的 Inceptor 使用简单的命名约定 (不要更改模板名称) 和用户提供的参数集来定位特定模板。在参数中,还有加载器 (-t) 参数。如果未指定,则用默认:


$ python inceptor.py -hh

Default Loaders
      Input File Extension SpecialCondition   Guessed Filetype Default LoaderDefault Template
0                     .raw            NaN          ShellcodeSimple Loader         Classic
1                     .exe             .NETDotnet Executable          Donut         Classic
2                     .exe            NaNNative Executable   Pe2Shellcode         PE Load
3                     .dll            NaN   Native Library         sRDI         Classic

4.2 模板命名约定

理解模板名称约定也非常重要,以免误解工件行为。

Classic:经典模板通常意味着它使用 VirtualAlloc/VirtualAllocEx 和 CreateThread/CreateRemoteThreadAPI 来分配和执行任意代码
Dinvoke:如果模板仅包含 dinvoke (例如 classic-dinvoke.cs),则表示它使用 dinvoke 的动态函数解析功能
Dinvoke-subtechnique:包含 dinvoke 的模板及使用 dinvoke 的特定功能,如 manual_mapping、overload_mapping 或 Syscalls
Syscalls:顾名思义,此模板使用 Syscalls
PE Load:此模板尝试将完整 PE 映射到内存中,而不进行转换
Assembly Load:此模板尝试使用反射执行 .NET 程序集

五、用法


$ 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

六、下一步发展

新的模板引擎
新的模板
新的编码
C# 代码混淆

七、资源

Inceptor - Bypass AV-EDR solutions combining well known techniques
A tale of EDR bypass methods


页: [1]
查看完整版本: 以模板驱动的逃避 AV/EDR 框架