用 Yara 对红队工具 "打标"(三)——免杀类规则提取
字数 1080 2025-08-06 18:07:54

Yara规则对红队免杀工具的特征提取与分析

前言

本文是基于奇安信攻防社区文章《用Yara对红队工具"打标"(三)——免杀类规则提取》的详细教学文档,重点讲解如何通过Yara规则对红队免杀工具进行特征提取和分析。

混淆类工具特征提取回顾

混淆类和免杀类工具的特征提取方法类似,都是分析提取被"处理过"文件的特征。

PHPFuck特征提取

PHPFuck仅使用7个不同字符([、]、+、!、(、)、.)来编写和执行PHP代码,通过异或和加运算产生其他字符。

Yara规则示例:

rule PHPFuck {
    meta:
        decription = "phpfuck only uses 7 characters to write, so use these 7 characters as metadata."
    strings:
        $s1 = "[].[]" 
        $s2 = "[]^[]"
        $s3 = "["
        $s4 = "[][[]]"
    condition:
        all of ($s*) and for any of them:(# > 10 )
}

JSFuck特征提取

JSFuck与PHPFuck类似,仅使用6个不同字符。

Yara规则示例:

rule JSFuck {
    meta:
        decription = "jsfuck only uses 6 different characters, so just include the metadata of these characters directly."
    strings:
        $s1 = "[]+[]"
        $s2 = " and for any of them:(# > 10 )
}

免杀类工具特征提取方法

bypassAV工具分析

项目特点

  • 条件触发式远控
  • VT 5/70免杀率
  • 可免杀国内杀软及Defender、卡巴斯基等主流杀软

源码结构

  1. go_shellcode_encode.py:简单base64加密payload并替换字符
  2. main.go:包含解密和执行逻辑

免杀原理

  1. 动态加载函数调用(kernel32.dll的VirtualAlloc、RtlMoveMemory)
  2. 内存中自定义变形小算法解密
  3. 条件触发机制躲避沙盒检测

PE文件结构基础

了解PE文件结构对特征提取至关重要:

  1. PE文件头部:索引整个文件,编译时计算填充
  2. PE文件身体
    • .text节:代码段
    • .rdata节:常量段(含导入表)
    • .data节:变量段
    • .reloc节:重定位表

特征提取策略

  1. 选择代码还是数据

    • 优先选择代码段(.text)特征
    • 数据段(.rdata)特征通常过于通用
  2. 机器码特征分析

    • 从IDA反汇编中提取机器码
    • 识别不变部分:
      • 寄存器操作数和立即数
      • 传入参数和局部变量的引用(相对于esp/rsp的位置)
    • 可变部分:
      • 内存操作数(受编译参数影响)
      • 函数调用地址(段间相对偏移)

bypassAV的Yara规则

rule BypessAV {
    meta:
        reference = "https://github.com/Threekiii/Awesome-Redteam"
    strings:
        $x1 = { 
            49 3B 66 10 0F 86 85 01 00 00 48 83 EC 60 48 89 
            6C 24 58 48 8D 6C 24 58 48 89 44 24 68 48 8D 0D 
            00 BF 01 00 00 00 48 8D 35 ?? ?? ?? 00 49 89 F8 
            49 C7 C1 FF FF FF FF E8 48 8D 0D 00 BF 01 00 00 
            00 48 8D 35 ?? ?? ?? 00 49 89 F8 49 C7 C1 FF FF 
            FF FF 0F 1F 40 00 E8 48 8D 0D 00 BF 01 00 00 00 
            48 8D 35 ?? ?? ?? 00 49 89 F8 49 C7 C1 FF FF FF 
            FF E8 48 8D 0D 00 BF 01 00 00 00 48 8D 35 ?? ?? 
            ?? 00 49 89 F8 49 C7 C1 FF FF FF FF E8 48 8B 15 
            ?? ?? ?? 00 48 89 D9 48 89 C3 48 89 D0 E8 48 89 
            44 24 48 48 89 5C 24 38 48 8D 05 ?? ?? ?? 00 E8 
            48 8B 54 24 38 48 89 50 08 48 C7 40 10 00 30 00 
            00 48 C7 40 18 40 00 00 00 4C 8B 15 ?? ?? ?? 00 
            48 89 C3 B9 04 00 00 00 48 89 CF 4C 89 D0 E8 48 
            8B 54 24 38 48 85 D2 76 73 48 89 44 24 40 48 8B 
            4C 24 48 48 89 4C 24 50 48 8D 05 ?? ?? ?? 00 E8 
            48 8B 4C 24 40 48 89 08 48 8B 54 24 50 48 89 50 
            08 48 8B 54 24 38 48 89 50 10 48 8B 15 ?? ?? ?? 
            00 48 89 C3 BF 03 00 00 00 48 89 D0 48 89 F9 0F 
            1F 44 00 00 E8 48 8B 44 24 40 31 DB 48 89 D9 48 
            89 CF 48 89 CE E8 48 8B 6C 24 58 48 83 C4 60 C3
        }
        $x2 = {FF 20 47 6F 20 62 75 69 6C 64 20 49 44 3A}
    condition:
        uint16be(0) == 0x4D5A and all of them
}

规则绕过方法

  1. 添加无关代码
func build(ddm string) {
    str1 := strings.Replace(ddm, "#", "A", -1)
    str2 := strings.Replace(str1, "!", "H", -1)
    fmt.Println("666") // 添加无关代码
    str3 := strings.Replace(str2, "@", "1", -1)
    // ...其余代码
}
  1. 函数拆分
func build1(ddm string) {
    str1 := strings.Replace(ddm, "#", "A", -1)
    str2 := strings.Replace(str1, "!", "H", -1)
    return str2
}

func build2(ddm2 string) {
    str3 := strings.Replace(ddm2, "@", "1", -1)
    // ...其余代码
}
  1. 变量名随机化
  • 对基于二进制代码的规则无效
  • 可能对抗基于字符串的规则

总结与思考

  1. 规则提取限制

    • 不能过于宽泛(导致误报)
    • 不能过于狭窄(容易被绕过)
  2. 免杀对抗本质

    • 攻防一体,了解防御方法才能更好攻击
    • 特征提取与免杀技术是持续对抗过程
  3. 其他检测方法

    • 特征代码法
    • 校验和法
    • 行为监测法
    • 软件模拟法
    • 启发式扫描

通过本文介绍的方法,可以系统性地分析和提取红队免杀工具的特征,同时也为绕过这些检测提供了思路。在实际应用中,需要结合多种检测方法才能构建更全面的防御体系。

Yara规则对红队免杀工具的特征提取与分析 前言 本文是基于奇安信攻防社区文章《用Yara对红队工具"打标"(三)——免杀类规则提取》的详细教学文档,重点讲解如何通过Yara规则对红队免杀工具进行特征提取和分析。 混淆类工具特征提取回顾 混淆类和免杀类工具的特征提取方法类似,都是分析提取被"处理过"文件的特征。 PHPFuck特征提取 PHPFuck仅使用7个不同字符([ 、]、+、 !、(、)、.)来编写和执行PHP代码,通过异或和加运算产生其他字符。 Yara规则示例: JSFuck特征提取 JSFuck与PHPFuck类似,仅使用6个不同字符。 Yara规则示例: 免杀类工具特征提取方法 bypassAV工具分析 项目特点 : 条件触发式远控 VT 5/70免杀率 可免杀国内杀软及Defender、卡巴斯基等主流杀软 源码结构 : go_shellcode_encode.py :简单base64加密payload并替换字符 main.go :包含解密和执行逻辑 免杀原理 : 动态加载函数调用(kernel32.dll的VirtualAlloc、RtlMoveMemory) 内存中自定义变形小算法解密 条件触发机制躲避沙盒检测 PE文件结构基础 了解PE文件结构对特征提取至关重要: PE文件头部 :索引整个文件,编译时计算填充 PE文件身体 : .text 节:代码段 .rdata 节:常量段(含导入表) .data 节:变量段 .reloc 节:重定位表 特征提取策略 选择代码还是数据 : 优先选择代码段(.text)特征 数据段(.rdata)特征通常过于通用 机器码特征分析 : 从IDA反汇编中提取机器码 识别不变部分: 寄存器操作数和立即数 传入参数和局部变量的引用(相对于esp/rsp的位置) 可变部分: 内存操作数(受编译参数影响) 函数调用地址(段间相对偏移) bypassAV的Yara规则 规则绕过方法 添加无关代码 : 函数拆分 : 变量名随机化 : 对基于二进制代码的规则无效 可能对抗基于字符串的规则 总结与思考 规则提取限制 : 不能过于宽泛(导致误报) 不能过于狭窄(容易被绕过) 免杀对抗本质 : 攻防一体,了解防御方法才能更好攻击 特征提取与免杀技术是持续对抗过程 其他检测方法 : 特征代码法 校验和法 行为监测法 软件模拟法 启发式扫描 通过本文介绍的方法,可以系统性地分析和提取红队免杀工具的特征,同时也为绕过这些检测提供了思路。在实际应用中,需要结合多种检测方法才能构建更全面的防御体系。