一个可以免杀国内主流杀软的恶意样本分析
字数 1704 2025-08-20 18:17:07
免杀恶意样本分析与技术解析
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修改内存属性:DWORD oldProtect; VirtualProtect(shellcodeAddr, shellcodeSize, PAGE_EXECUTE_READWRITE, &oldProtect); - 通过函数指针或汇编跳转执行Shellcode
注意:此类技术仅用于安全研究,实际使用需遵守法律法规。
8. 总结
该免杀样本综合运用了多种高级技术:
- 加密混淆核心恶意代码
- 动态内存权限管理绕过DEP
- 间接执行技术避免直接调用
- 针对ASLR的适应性设计
防御此类攻击需要多层次的安全防护,不能仅依赖传统的特征码检测。