修改Metasploit x64模板实现反病毒规避技术

本文详细介绍了如何通过修改Metasploit框架中的64位可执行模板来绕过Avast等反病毒软件的检测,包括模板源码分析、缓冲区大小调整以及实际测试效果验证。

修改Metasploit x64模板实现反病毒规避

Joff Thyer
注意:本文所述技术可能已过时,但仍可作为学习现代工具技术演进的参考案例。

在针对Windows桌面的渗透测试中,测试人员常使用Veil’s Powershell Empire等工具将shellcode直接注入内存。这种技术能有效规避磁盘写入和端点防护软件的检测。但有时我们需要使用实际恶意软件可执行文件进行更全面的测试,以评估防御技术的检测阈值。

现状分析

反病毒引擎对Metasploit框架生成的32位恶意软件检测效果显著,但对64位变种检测能力较弱。研究发现,AV引擎不仅检测shellcode,还会匹配msfvenom生成的可执行文件中存根加载器的汇编代码特征。

技术原理

Metasploit生成payload时使用预编译的模板可执行文件:

  • 32位模板:C语言源码(位于/usr/share/metasploit-framework/data/templates/src/pe/exe
  • 64位模板:汇编语言源码

模板功能均为:

  1. 分配4096字节内存缓冲区
  2. 写入"PAYLOAD:“标记字符串
  3. msfvenom将选定payload(经编码处理后)注入该缓冲区

实验过程

  1. 原始模板测试:Avast立即触发警报(基于汇编指令特征匹配)
  2. 缓冲区扩容测试:将缓冲区改为8192字节后,Avast完全漏报
  3. 完整修改测试
    • 修改全部汇编代码数值为8192
    • 生成两种payload(含XOR编码/无编码)
    • 成功绕过Avast的"深度扫描"并获取shell

技术验证

1
2
3
4
5
6
7
8
9
; 修改后的x64汇编代码片段8192字节缓冲区)
section .text
    mov rcx, 8192
    call VirtualAlloc
    mov rsi, payload_start
    mov rdi, rax
    mov rcx, 8192
    rep movsb
    call rax

结论

实验证实AV厂商主要检测模板特征而非shellcode本身。仅通过简单修改汇编代码(如调整缓冲区大小)即可有效绕过64位payload检测。该方法对其他AV引擎的适用性有待进一步验证。

提示:完整技术细节和编译说明请参考原文中的汇编源码注释。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计