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指纹:
./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" - 捕获通信数据包验证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并指定模拟浏览器:
./merlinAgent -parrot "chrome" - 捕获通信数据包验证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指纹不匹配
实操步骤
- 启动Merlin Server
- 运行Merlin Agent并指定UserAgent:
./merlinAgent -useragent "自定义UserAgent字符串" - 捕获通信数据包验证HTTP UserAgent请求头
4. 心跳包频率控制
4.1 基础频率配置
Merlin Agent支持通过-sleep参数自定义心跳包频率,默认值为30秒。
技术原理:
Agent会根据-sleep参数值周期性调用checkIn()函数:
- 首先进行身份认证并发送Agent基本信息
- 然后按配置频率发送心跳包
- 有指令时在心跳通信中返回指令,无指令时返回固定长度随机数据
实操步骤:
./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。
技术原理:
- 生成0至
-padding值之间的随机数 - 生成对应长度的随机字符串
- 填充到messages.Base结构体的Padding字段
- 序列化后发送
实操步骤:
./merlinAgent -padding 200
对比发现:
-padding 200的数据包明显小于默认4096的数据包- 解密后的有效数据相同,仅填充数据量不同
总结
Merlin Agent提供了全方位的流量逃逸技术,攻击者可以:
- 伪造JA3指纹模拟合法客户端
- 模拟特定浏览器行为
- 自定义UserAgent保持一致性
- 灵活控制心跳包频率避免规律检测
- 混淆通信数据包大小逃避基于包大小的检测
防御方应关注这些技术特点,开发相应的检测手段,不依赖单一检测维度,采用多维度关联分析提高检测准确率。