流量检测形同虚设?Merlin Agent远控木马的逃逸高招
字数 1714 2025-08-29 08:30:24

Merlin Agent远控木马流量逃逸技术详解

概述

Merlin是一个功能强大的后渗透利用框架,其Agent组件内置了多种逃避流量检测的技术手段。本文将从技术原理和实操角度详细解析Merlin Agent的流量逃逸技术,包括:

  1. JA3指纹伪造技术
  2. 浏览器模拟技术
  3. UserAgent自定义配置
  4. 心跳包频率控制
  5. 通信数据包混淆技术

1. JA3指纹伪造技术

技术原理

JA3是一种基于SSL/TLS握手过程的特征指纹技术,通过对客户端在建立SSL/TLS连接时发送的数据进行哈希计算生成唯一指纹。Merlin Agent支持通过-ja3参数自定义配置JA3指纹。

Merlin Agent的JA3指纹伪造功能基于对https://github.com/CUCyber/ja3transport/库的优化改造实现。

实操步骤

  1. 启动Merlin Server
  2. 运行Merlin Agent并指定JA3指纹:
    ./merlinAgent -ja3 "771,4865-4866-4867-49196-49195-49188-49187-49162-49161-52393-49200-49199-49192-49191-49172-49171-52392-157-156-61-60-53-47-49160-49170-10,65281-0-23-13-5-18-16-11-51-45-43-10-21,29-23-24-25,0"
    
  3. 捕获通信数据包验证JA3指纹

注意:目前只能使用ja3transport库中提供的JA3指纹值,直接从其他地方复制的JA3指纹可能导致TLS握手失败。

2. 浏览器模拟技术

技术原理

Merlin Agent支持通过-parrot参数模拟特定浏览器信息,底层基于https://github.com/refraction-networking/utls/库实现。该库可以模拟绝大部分情况下的JA3指纹。

支持的浏览器模拟参数值包括:

  • "chrome"
  • "firefox"
  • "safari"
  • "ios"
  • "android"
  • "edge"
  • "opera"

实操步骤

  1. 启动Merlin Server
  2. 运行Merlin Agent并指定模拟浏览器:
    ./merlinAgent -parrot "chrome"
    
  3. 捕获通信数据包验证JA3指纹hash值

模拟Chrome浏览器时,JA3指纹hash值应为b32309a26951912be7dba376398abc3b(对应Chrome 83版本)。

3. UserAgent自定义配置

技术原理

Merlin Agent支持通过-useragent参数自定义HTTP通信的User-Agent值,默认值为:

Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.85 Safari/537.36

自定义UserAgent可实现:

  • 明文通信中模拟各类浏览器
  • 避免加密通信解密后发现UserAgent与JA3指纹不匹配

实操步骤

  1. 启动Merlin Server
  2. 运行Merlin Agent并指定UserAgent:
    ./merlinAgent -useragent "自定义UserAgent字符串"
    
  3. 捕获通信数据包验证HTTP UserAgent请求头

4. 心跳包频率控制

4.1 基础频率配置

Merlin Agent支持通过-sleep参数自定义心跳包频率,默认值为30秒。

技术原理
Agent会根据-sleep参数值周期性调用checkIn()函数:

  1. 首先进行身份认证并发送Agent基本信息
  2. 然后按配置频率发送心跳包
  3. 有指令时在心跳通信中返回指令,无指令时返回固定长度随机数据

实操步骤

./merlinAgent -sleep 10

4.2 频率偏移配置

Merlin Agent支持通过-skew参数配置心跳包频率偏移,默认值为3000(3秒)。

技术原理
心跳包实际发送时间计算公式:

sleepTime = 基础频率 + (0至skew值之间的随机数)

实操步骤

./merlinAgent -sleep 10 -skew 5000

此时心跳包频率将在10-15秒之间波动。

5. 通信数据包混淆技术

Merlin Agent支持通过-padding参数自定义通信包的附加数据大小,默认值为4096。

技术原理

  1. 生成0至-padding值之间的随机数
  2. 生成对应长度的随机字符串
  3. 填充到messages.Base结构体的Padding字段
  4. 序列化后发送

实操步骤

./merlinAgent -padding 200

对比发现:

  • -padding 200的数据包明显小于默认4096的数据包
  • 解密后的有效数据相同,仅填充数据量不同

总结

Merlin Agent提供了全方位的流量逃逸技术,攻击者可以:

  1. 伪造JA3指纹模拟合法客户端
  2. 模拟特定浏览器行为
  3. 自定义UserAgent保持一致性
  4. 灵活控制心跳包频率避免规律检测
  5. 混淆通信数据包大小逃避基于包大小的检测

防御方应关注这些技术特点,开发相应的检测手段,不依赖单一检测维度,采用多维度关联分析提高检测准确率。

Merlin Agent远控木马流量逃逸技术详解 概述 Merlin是一个功能强大的后渗透利用框架,其Agent组件内置了多种逃避流量检测的技术手段。本文将从技术原理和实操角度详细解析Merlin Agent的流量逃逸技术,包括: JA3指纹伪造技术 浏览器模拟技术 UserAgent自定义配置 心跳包频率控制 通信数据包混淆技术 1. JA3指纹伪造技术 技术原理 JA3是一种基于SSL/TLS握手过程的特征指纹技术,通过对客户端在建立SSL/TLS连接时发送的数据进行哈希计算生成唯一指纹。Merlin Agent支持通过 -ja3 参数自定义配置JA3指纹。 Merlin Agent的JA3指纹伪造功能基于对 https://github.com/CUCyber/ja3transport/ 库的优化改造实现。 实操步骤 启动Merlin Server 运行Merlin Agent并指定JA3指纹: 捕获通信数据包验证JA3指纹 注意 :目前只能使用ja3transport库中提供的JA3指纹值,直接从其他地方复制的JA3指纹可能导致TLS握手失败。 2. 浏览器模拟技术 技术原理 Merlin Agent支持通过 -parrot 参数模拟特定浏览器信息,底层基于 https://github.com/refraction-networking/utls/ 库实现。该库可以模拟绝大部分情况下的JA3指纹。 支持的浏览器模拟参数值包括: "chrome" "firefox" "safari" "ios" "android" "edge" "opera" 实操步骤 启动Merlin Server 运行Merlin Agent并指定模拟浏览器: 捕获通信数据包验证JA3指纹hash值 模拟Chrome浏览器时,JA3指纹hash值应为 b32309a26951912be7dba376398abc3b (对应Chrome 83版本)。 3. UserAgent自定义配置 技术原理 Merlin Agent支持通过 -useragent 参数自定义HTTP通信的User-Agent值,默认值为: 自定义UserAgent可实现: 明文通信中模拟各类浏览器 避免加密通信解密后发现UserAgent与JA3指纹不匹配 实操步骤 启动Merlin Server 运行Merlin Agent并指定UserAgent: 捕获通信数据包验证HTTP UserAgent请求头 4. 心跳包频率控制 4.1 基础频率配置 Merlin Agent支持通过 -sleep 参数自定义心跳包频率,默认值为30秒。 技术原理 : Agent会根据 -sleep 参数值周期性调用 checkIn() 函数: 首先进行身份认证并发送Agent基本信息 然后按配置频率发送心跳包 有指令时在心跳通信中返回指令,无指令时返回固定长度随机数据 实操步骤 : 4.2 频率偏移配置 Merlin Agent支持通过 -skew 参数配置心跳包频率偏移,默认值为3000(3秒)。 技术原理 : 心跳包实际发送时间计算公式: 实操步骤 : 此时心跳包频率将在10-15秒之间波动。 5. 通信数据包混淆技术 Merlin Agent支持通过 -padding 参数自定义通信包的附加数据大小,默认值为4096。 技术原理 : 生成0至 -padding 值之间的随机数 生成对应长度的随机字符串 填充到messages.Base结构体的Padding字段 序列化后发送 实操步骤 : 对比发现: -padding 200 的数据包明显小于默认4096的数据包 解密后的有效数据相同,仅填充数据量不同 总结 Merlin Agent提供了全方位的流量逃逸技术,攻击者可以: 伪造JA3指纹模拟合法客户端 模拟特定浏览器行为 自定义UserAgent保持一致性 灵活控制心跳包频率避免规律检测 混淆通信数据包大小逃避基于包大小的检测 防御方应关注这些技术特点,开发相应的检测手段,不依赖单一检测维度,采用多维度关联分析提高检测准确率。