一个可以免杀国内主流杀软的恶意样本分析
字数 1704 2025-08-20 18:17:07

免杀恶意样本分析与技术解析

1. 免杀技术概述

免杀技术(Anti-Virus Evasion)是指恶意软件通过各种手段绕过杀毒软件的检测机制。本文分析的样本能够绕过国内主流杀毒软件的检测,主要采用了以下几种技术:

  1. Shellcode加密与动态解密
  2. 非标准内存执行技术
  3. 反调试与反分析手段
  4. 合法API滥用

2. Shellcode处理技术

2.1 Shellcode加密与解密

样本中的Shellcode采用了加密存储,运行时动态解密的策略:

  1. 加密存储:原始Shellcode在静态文件中被加密,无法通过特征码检测
  2. 运行时解密:程序执行时在内存中解密Shellcode,避免静态分析

2.2 栈上Shellcode执行问题

用户destroylq提出的关键问题:解密的Shellcode位于栈上,而现代操作系统默认栈区不可执行(Data Execution Prevention, DEP),样本如何解决?

解决方案包括:

  1. VirtualProtect/VirtualAlloc修改内存属性

    • 使用VirtualProtect将栈内存修改为可执行(PAGE_EXECUTE_READWRITE)
    • 或者使用VirtualAlloc分配新的可执行内存并复制Shellcode
  2. Return-Oriented Programming(ROP)

    • 通过精心构造的返回地址链实现代码执行
    • 不直接执行栈上代码,而是利用现有代码片段(gadgets)
  3. 线程本地存储(TLS)回调

    • 在早期执行阶段修改内存权限

3. 非直接函数调用技术

如用户cxaqhq提到的"相当于没有直接调用函数执行",样本采用了间接执行技术:

  1. 回调函数滥用

    • 使用EnumWindowsEnumChildWindows等API的回调机制执行Shellcode
    • 将Shellcode地址作为回调函数传入
  2. 异步过程调用(APC)

    • 使用QueueUserAPC将Shellcode注入到线程上下文中
  3. 进程镂空(Process Hollowing)

    • 创建合法进程挂起状态
    • 替换其内存内容为恶意代码

4. 地址随机化问题

针对用户cxaqhq关于地址随机化的问题:

4.1 Windows地址空间布局随机化(ASLR)

Windows系统也实现了ASLR技术:

  1. DLL随机化:系统DLL加载基址在每次启动时随机化
  2. 堆栈随机化:线程栈和堆的基址随机化
  3. PEB/TEB随机化:进程环境块和线程环境块位置随机化

4.2 绕过ASLR的技术

  1. 信息泄露:利用漏洞泄露内存地址信息
  2. 非ASLR模块:攻击未启用ASLR的第三方DLL
  3. 部分覆盖:只覆盖地址的低位字节
  4. 堆喷射(Heap Spraying):大量分配内存增加预测成功率

5. 反分析技术

样本中可能包含的反分析技术:

  1. 时间检查

    • 检测调试器单步执行的时间差
    • 检测虚拟机环境的指令执行速度
  2. API断点检测

    • 检查关键API是否被下断点
  3. 沙箱检测

    • 检查系统内存、CPU核心数等特征
    • 检测是否存在分析工具进程

6. 防御建议

针对此类免杀样本的防御措施:

  1. 启用完整的内存保护

    • DEP(数据执行保护)
    • ASLR(地址空间随机化)
    • Control Flow Guard(控制流防护)
  2. 行为监控

    • 监控异常的内存权限修改
    • 检测可疑的进程间通信
  3. 应用白名单

    • 只允许授权程序执行
  4. 深度检测

    • 使用沙箱进行动态行为分析
    • 结合静态和动态分析技术

7. 技术验证与复现

如需验证这些技术,可以按以下步骤:

  1. 使用C/C++编写测试程序
  2. 实现Shellcode加密/解密功能
  3. 使用VirtualProtect修改内存属性:
    DWORD oldProtect;
    VirtualProtect(shellcodeAddr, shellcodeSize, PAGE_EXECUTE_READWRITE, &oldProtect);
    
  4. 通过函数指针或汇编跳转执行Shellcode

注意:此类技术仅用于安全研究,实际使用需遵守法律法规。

8. 总结

该免杀样本综合运用了多种高级技术:

  1. 加密混淆核心恶意代码
  2. 动态内存权限管理绕过DEP
  3. 间接执行技术避免直接调用
  4. 针对ASLR的适应性设计

防御此类攻击需要多层次的安全防护,不能仅依赖传统的特征码检测。

免杀恶意样本分析与技术解析 1. 免杀技术概述 免杀技术(Anti-Virus Evasion)是指恶意软件通过各种手段绕过杀毒软件的检测机制。本文分析的样本能够绕过国内主流杀毒软件的检测,主要采用了以下几种技术: Shellcode加密与动态解密 非标准内存执行技术 反调试与反分析手段 合法API滥用 2. Shellcode处理技术 2.1 Shellcode加密与解密 样本中的Shellcode采用了加密存储,运行时动态解密的策略: 加密存储 :原始Shellcode在静态文件中被加密,无法通过特征码检测 运行时解密 :程序执行时在内存中解密Shellcode,避免静态分析 2.2 栈上Shellcode执行问题 用户 destroylq 提出的关键问题:解密的Shellcode位于栈上,而现代操作系统默认栈区不可执行(Data Execution Prevention, DEP),样本如何解决? 解决方案包括: VirtualProtect/VirtualAlloc修改内存属性 : 使用 VirtualProtect 将栈内存修改为可执行(PAGE_ EXECUTE_ READWRITE) 或者使用 VirtualAlloc 分配新的可执行内存并复制Shellcode Return-Oriented Programming(ROP) : 通过精心构造的返回地址链实现代码执行 不直接执行栈上代码,而是利用现有代码片段(gadgets) 线程本地存储(TLS)回调 : 在早期执行阶段修改内存权限 3. 非直接函数调用技术 如用户 cxaqhq 提到的"相当于没有直接调用函数执行",样本采用了间接执行技术: 回调函数滥用 : 使用 EnumWindows 、 EnumChildWindows 等API的回调机制执行Shellcode 将Shellcode地址作为回调函数传入 异步过程调用(APC) : 使用 QueueUserAPC 将Shellcode注入到线程上下文中 进程镂空(Process Hollowing) : 创建合法进程挂起状态 替换其内存内容为恶意代码 4. 地址随机化问题 针对用户 cxaqhq 关于地址随机化的问题: 4.1 Windows地址空间布局随机化(ASLR) Windows系统也实现了ASLR技术: DLL随机化 :系统DLL加载基址在每次启动时随机化 堆栈随机化 :线程栈和堆的基址随机化 PEB/TEB随机化 :进程环境块和线程环境块位置随机化 4.2 绕过ASLR的技术 信息泄露 :利用漏洞泄露内存地址信息 非ASLR模块 :攻击未启用ASLR的第三方DLL 部分覆盖 :只覆盖地址的低位字节 堆喷射(Heap Spraying) :大量分配内存增加预测成功率 5. 反分析技术 样本中可能包含的反分析技术: 时间检查 : 检测调试器单步执行的时间差 检测虚拟机环境的指令执行速度 API断点检测 : 检查关键API是否被下断点 沙箱检测 : 检查系统内存、CPU核心数等特征 检测是否存在分析工具进程 6. 防御建议 针对此类免杀样本的防御措施: 启用完整的内存保护 : DEP(数据执行保护) ASLR(地址空间随机化) Control Flow Guard(控制流防护) 行为监控 : 监控异常的内存权限修改 检测可疑的进程间通信 应用白名单 : 只允许授权程序执行 深度检测 : 使用沙箱进行动态行为分析 结合静态和动态分析技术 7. 技术验证与复现 如需验证这些技术,可以按以下步骤: 使用C/C++编写测试程序 实现Shellcode加密/解密功能 使用 VirtualProtect 修改内存属性: 通过函数指针或汇编跳转执行Shellcode 注意:此类技术仅用于安全研究,实际使用需遵守法律法规。 8. 总结 该免杀样本综合运用了多种高级技术: 加密混淆核心恶意代码 动态内存权限管理绕过DEP 间接执行技术避免直接调用 针对ASLR的适应性设计 防御此类攻击需要多层次的安全防护,不能仅依赖传统的特征码检测。