DecoyMini 技术交流社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7739|回复: 0

[免杀技术] 以模板驱动的逃避 AV/EDR 框架

[复制链接]

188

主题

35

回帖

30

荣誉

Rank: 9Rank: 9Rank: 9

UID
2
积分
354
精华
1
沃币
2 枚
注册时间
2021-6-24

论坛管理

发表于 2021-9-22 15:34:49 | 显示全部楼层 |阅读模式


一、概述

渗透测试和红队需要绕过常见的 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 使用 SysWhispersSysWhispers2 项目实现。此外,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
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|小黑屋|DecoyMini 技术交流社区 (吉沃科技) ( 京ICP备2021005070号 )

GMT+8, 2024-12-22 21:33 , Processed in 0.062887 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表