免杀初探(一)
字数 2513 2025-08-09 16:00:17

免杀技术初探:原理、工具与实践

前言与基础概念

在当今网络安全环境中,杀毒软件作为第一道防线被广泛使用。研究防病毒软件的工作原理、发现其引擎漏洞并找到绕过方法,对于评估安全解决方案的有效性至关重要。

基础工具介绍

Process Explorer (微软官方工具):

  • 功能:监控进程及其详细信息
  • 关键参数解读:
    • Process:进程文件名及图标
    • CPU:进程CPU占用百分比
    • Private Bytes:进程分配的内存量
    • Working Set:进程占用的RAM量
    • PID:进程标识符
    • Description:进程描述
    • Company Name:所属公司名称

Process Monitor

  • 用于监控防病毒软件的文件扫描过程
  • 关键信息:
    • Event:事件日期、操作结果、可执行路径
    • Process:相关流程信息
    • Stack:进程堆栈

Autoruns

  • 显示系统中所有自启动位置,包括:
    • 注册表路径:
      • HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
      • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
      • HKLM\System\CurrentControlSet\Services
      • HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
    • 文件路径:
      • %AppData%\Microsoft\Windows\Start Menu\Programs\Startup

Regshot

  • 开源注册表比对工具
  • 使用方法:
    1. 安装前拍摄第一个快照
    2. 安装后拍摄第二个快照
    3. 比较两次快照差异

Windows安全机制

核心安全特性

  1. ASLR (地址空间布局随机化):

    • 随机化内存地址空间布局
    • 防止利用固定内存位置漏洞
  2. DEP (数据执行保护):

    • 阻止在非可执行内存区域执行代码
    • 缓解缓冲区溢出攻击
  3. SEHOP (结构化异常处理覆盖保护):

    • 防止滥用SEH结构的攻击
    • 可通过组策略部署

保护环与权限模型

  • Windows访问控制列表(ACL/DACL)
    • 每个文件/对象都有权限设置
    • 包含两部分:
      • 接收权限的安全主体
      • 对象获得的特定权限

防病毒软件漏洞类型

1. 权限相关问题

  • 静态签名文件权限不足

    • 低权限用户可能修改/删除签名文件
    • 导致扫描时比对失效
  • 未引用的服务路径

    • 服务可执行路径包含空格且未加引号
    • 利用方法:
      • 在服务路径中的特定位置创建恶意可执行
      • 系统将优先执行恶意文件而非防病毒服务

2. DLL劫持

  • 利用Windows不安全的DLL加载机制
  • 当软件使用LoadLibrary()加载DLL时:
    • 可替换原始DLL为同名恶意DLL
    • 可能导致防病毒软件加载恶意DLL而失效
  • 常用于"白+黑"技术

3. 缓冲区溢出

两种类型

  • 基于堆栈的缓冲区溢出
  • 基于堆的缓冲区溢出

利用步骤

  1. 使程序崩溃定位漏洞点
  2. 确定溢出所需字节数
  3. 覆盖EIP/RIP寄存器
  4. 注入shellcode
  5. (可选)注入NOP雪橇
  6. 跳转到payload执行

防病毒场景应用

  • 利用防病毒解压引擎的strcpy()等不安全函数
  • 溢出缓冲区导致引擎崩溃或跳过检测

进程注入技术

基本原理

将代码注入到目标进程的内存地址空间并执行,可注入:

  • Shellcode
  • DLL文件
  • 完整EXE文件

技术实现

DLL注入

  • 使用API:
    • OpenProcess:获取目标进程句柄
    • VirtualAllocEx:分配内存
    • WriteProcessMemory:写入恶意负载
    • CreateRemoteThread:创建远程线程执行
    • LoadLibrary/GetProcAddress:获取函数地址

Process Hollowing

  1. 创建挂起状态的合法进程(如notepad.exe)
  2. 使用ZWUnmapViewOfSection取消映射进程节
  3. VirtualAllocEx分配新内存
  4. WriteProcessMemory写入恶意内容
  5. SetThreadContext和ResumeThread恢复执行

Process Doppelgänging

  • 基于NTFS事务特性(TxF)
  • 关键API:
    • CreateFileTransacted
    • WriteFile
    • NtCreateSection
    • RollBackTransaction
    • 系列创建和执行函数

PE文件结构

主要部分

  1. PE头:

    • DOS头:标识PE文件的魔数
    • DOS存根:遗留信息(可能被用于免杀)
    • PE头:声明文件格式
    • 可选头:包含代码大小、入口点等信息
    • 区段表
  2. PE节:

    • 代码节:CPU执行的机器码
    • 导入节:从DLL导入的函数
    • 数据节:变量和函数参数

DLL执行方式

  • 使用rundll32.exe:
    RUNDLL32.EXE <dllname>,<entrypoint> <argument>
    
  • 使用LoadLibrary()/LoadLibraryEx()

内存轰炸技术(Memory Bombing)

原理

通过分配超大内存迫使杀毒软件因资源限制放弃检测

实现方法

使用C函数

  • malloc():分配未初始化内存
  • calloc():分配并初始化为零的内存
  • free():释放分配的内存

POC示例

int main(){
    char *memory_bombing = NULL;
    memory_bombing = (char *)calloc(200000000, sizeof(char));
    if(memory_bombing != NULL){
        free(memory_bombing);
        payload();
    }
    return 0;
}

技术优势

  • 利用防病毒引擎的内存扫描限制
  • 大内存分配导致引擎放弃扫描
  • 不影响最终恶意代码执行

研究与实践建议

  1. 环境准备

    • 使用最新版杀毒软件并更新签名库
    • 断开互联网连接避免云检测干扰
    • 使用最新版操作系统
  2. 检测方法

    • 静态代码分析:检测特定函数组合
    • 运行时监控:识别进程注入行为
  3. 工具链

    • Process Explorer/Monitor:进程分析
    • Autoruns:持久化位置检查
    • Regshot:注册表变更分析
    • 调试器(IDA Pro/x64dbg):漏洞分析
  4. 绕过方法分类

    • 基于漏洞的绕过(如缓冲区溢出、DLL劫持)
    • 基于检测的绕过(如进程注入、内存轰炸)

通过深入理解这些技术和原理,安全研究人员可以更有效地评估防病毒解决方案的实际防护能力,并开发相应的防御措施。

免杀技术初探:原理、工具与实践 前言与基础概念 在当今网络安全环境中,杀毒软件作为第一道防线被广泛使用。研究防病毒软件的工作原理、发现其引擎漏洞并找到绕过方法,对于评估安全解决方案的有效性至关重要。 基础工具介绍 Process Explorer (微软官方工具): 功能:监控进程及其详细信息 关键参数解读: Process:进程文件名及图标 CPU:进程CPU占用百分比 Private Bytes:进程分配的内存量 Working Set:进程占用的RAM量 PID:进程标识符 Description:进程描述 Company Name:所属公司名称 Process Monitor : 用于监控防病毒软件的文件扫描过程 关键信息: Event:事件日期、操作结果、可执行路径 Process:相关流程信息 Stack:进程堆栈 Autoruns : 显示系统中所有自启动位置,包括: 注册表路径: HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce HKLM\System\CurrentControlSet\Services HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run 文件路径: %AppData%\Microsoft\Windows\Start Menu\Programs\Startup Regshot : 开源注册表比对工具 使用方法: 安装前拍摄第一个快照 安装后拍摄第二个快照 比较两次快照差异 Windows安全机制 核心安全特性 ASLR (地址空间布局随机化): 随机化内存地址空间布局 防止利用固定内存位置漏洞 DEP (数据执行保护): 阻止在非可执行内存区域执行代码 缓解缓冲区溢出攻击 SEHOP (结构化异常处理覆盖保护): 防止滥用SEH结构的攻击 可通过组策略部署 保护环与权限模型 Windows访问控制列表(ACL/DACL) : 每个文件/对象都有权限设置 包含两部分: 接收权限的安全主体 对象获得的特定权限 防病毒软件漏洞类型 1. 权限相关问题 静态签名文件权限不足 : 低权限用户可能修改/删除签名文件 导致扫描时比对失效 未引用的服务路径 : 服务可执行路径包含空格且未加引号 利用方法: 在服务路径中的特定位置创建恶意可执行 系统将优先执行恶意文件而非防病毒服务 2. DLL劫持 利用Windows不安全的DLL加载机制 当软件使用LoadLibrary()加载DLL时: 可替换原始DLL为同名恶意DLL 可能导致防病毒软件加载恶意DLL而失效 常用于"白+黑"技术 3. 缓冲区溢出 两种类型 : 基于堆栈的缓冲区溢出 基于堆的缓冲区溢出 利用步骤 : 使程序崩溃定位漏洞点 确定溢出所需字节数 覆盖EIP/RIP寄存器 注入shellcode (可选)注入NOP雪橇 跳转到payload执行 防病毒场景应用 : 利用防病毒解压引擎的strcpy()等不安全函数 溢出缓冲区导致引擎崩溃或跳过检测 进程注入技术 基本原理 将代码注入到目标进程的内存地址空间并执行,可注入: Shellcode DLL文件 完整EXE文件 技术实现 DLL注入 : 使用API: OpenProcess:获取目标进程句柄 VirtualAllocEx:分配内存 WriteProcessMemory:写入恶意负载 CreateRemoteThread:创建远程线程执行 LoadLibrary/GetProcAddress:获取函数地址 Process Hollowing : 创建挂起状态的合法进程(如notepad.exe) 使用ZWUnmapViewOfSection取消映射进程节 VirtualAllocEx分配新内存 WriteProcessMemory写入恶意内容 SetThreadContext和ResumeThread恢复执行 Process Doppelgänging : 基于NTFS事务特性(TxF) 关键API: CreateFileTransacted WriteFile NtCreateSection RollBackTransaction 系列创建和执行函数 PE文件结构 主要部分 : PE头: DOS头:标识PE文件的魔数 DOS存根:遗留信息(可能被用于免杀) PE头:声明文件格式 可选头:包含代码大小、入口点等信息 区段表 PE节: 代码节:CPU执行的机器码 导入节:从DLL导入的函数 数据节:变量和函数参数 DLL执行方式 : 使用rundll32.exe: 使用LoadLibrary()/LoadLibraryEx() 内存轰炸技术(Memory Bombing) 原理 通过分配超大内存迫使杀毒软件因资源限制放弃检测 实现方法 使用C函数 : malloc() :分配未初始化内存 calloc() :分配并初始化为零的内存 free() :释放分配的内存 POC示例 : 技术优势 利用防病毒引擎的内存扫描限制 大内存分配导致引擎放弃扫描 不影响最终恶意代码执行 研究与实践建议 环境准备 : 使用最新版杀毒软件并更新签名库 断开互联网连接避免云检测干扰 使用最新版操作系统 检测方法 : 静态代码分析:检测特定函数组合 运行时监控:识别进程注入行为 工具链 : Process Explorer/Monitor:进程分析 Autoruns:持久化位置检查 Regshot:注册表变更分析 调试器(IDA Pro/x64dbg):漏洞分析 绕过方法分类 : 基于漏洞的绕过(如缓冲区溢出、DLL劫持) 基于检测的绕过(如进程注入、内存轰炸) 通过深入理解这些技术和原理,安全研究人员可以更有效地评估防病毒解决方案的实际防护能力,并开发相应的防御措施。