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

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

1 概述

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

2 特性

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

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

2.1 ShellCode 转换和加载

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

  • donut 由 TheWover 创建,可将 Native、DLL 和 .Net 二进制文件转换为单独的一块 ShellCode
  • sRDIr 由 Monoxgas 创建,可将现有的 naticcve DLL 转换为 PIC,然后将其作为常规的 ShellCode 注入
  • pe_to_shellcode 由 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++;

2.6 代码签名

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

2.7 工作流程

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

图片[1]-以模板驱动的逃避 AV/EDR 框架-零度非安全

3 安装

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 笔记

默认加载器

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

$ 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

模板命名约定

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

  • 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 程序集

5 用法

$ 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

6 下一步发展

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

7 资源

  1. Inceptor – Bypass AV-EDR solutions combining well known techniques
  2. A tale of EDR bypass methods
© 版权声明
THE END
喜欢就支持一下吧
点赞13赞赏 分享
评论 抢沙发

请登录后发表评论