Merlin后渗透利用框架之Merlin Agent通信加解密原理剖析
T0daySeeker 历史精选 690浏览 · 2025-02-19 01:35

概述

简单小结:

春节的喜庆氛围渐行渐远,新的征程已悄然开启。愿在新的一年里,大家都能迎接机遇,开创辉煌,事业蒸蒸日上,财源滚滚而来,收获属于自己的财富与成功!

回到正题:

前期,笔者在《Merlin后渗透利用框架之Merlin Agent远控木马剖析》文章中对Merlin Agent远控木马进行了简单剖析。

为了能够更详细的了解Merlin Agent远控木马的相关技术,笔者将从Merlin Agent远控木马的通信角度对其进行详细的研究和剖析。

经过简单研究,笔者发现:

Merlin Agent远控木马支持多种通信协议上线,同时还支持多种通信协议构建跳板通信;

Merlin Agent远控木马支持自定义用于加密通信数据的预共享密钥;

Merlin Agent远控木马支持自定义开启身份认证,更新用于加密通信数据的共享密钥;

Merlin Agent远控木马支持自定义通信编码/加密算法;

Merlin Agent通信加密代码逻辑

为了能够详细剖析Merlin Agent远控木马的通信原理,笔者将直接基于源码进行剖析,梳理Merlin Agent远控木马的通信原理。

Merlin Agent远控木马的项目地址:https://github.com/Ne0nd0g/merlin-agent

序列化通信数据

在剖析merlin-agent源码时,笔者发现Merlin Agent远控木马的通信数据均是由messages.Base结构体封装的,相关代码截图如下:



进一步分析,才发现Merlin后渗透利用框架原来是将通信结构体代码进行了单独的分离,便于merlin-agent、merlin-server独立更新。

项目地址:https://github.com/Ne0nd0g/merlin-message,相关截图如下:



对merlin-message项目进行简单剖析,发现在init()函数中使用了gob.Register函数显式注册了自定义结构体类型,以便程序进行序列化和反序列化数据。

相关代码截图如下:



在merlin-message项目中,存放了Merlin后渗透利用框架所使用的各类通信数据结构,相关代码截图如下:



通信数据密钥

通过多轮详细剖析,笔者发现merlin-agent在发送通信数据时,将对messages.Base结构通信数据进行编码/加密处理,编码/加密处理所使用的共享密钥存放于client.secret数据中。

相关代码截图如下:





进一步对client.secret数据进行剖析,发现secretClient 结构体的一个成员,相关代码截图如下:



client.secret数据将在两处被赋值:

使用Merlin Agent样本的psk配置信息做SHA256运算,得到预共享密钥;

若Merlin Agent样本开启身份认证,则使用OPAQUE协议进行用户认证,获得新的共享密钥;

相关代码截图如下:



Merlin Agent样本的默认psk配置信息代码截图如下:



merlin项目中对OPAQUE协议的介绍(非对称密码身份验证密钥交换):



Merlin Agent身份认证

通过对merlin-agent源码分析,笔者发现此项目源码大量使用了interface实现了多态,使整个项目的代码可根据具体的需求很好的扩展代码。

在进一步代码研究的过程中,笔者发现merlin-agent可通过-auth参数控制是否开启Merlin Agent远控木马上线过程中的身份认证功能。

Merlin Agent身份认证的interface接口代码如下:



-auth none

若通过-auth none参数运行远控木马,则Merlin Agent通信过程中使用的client.secret共享密钥将直接由psk配置信息的SHA256值生成。

相关代码截图如下:



-auth opaque

若通过-auth opaque参数运行远控木马,则Merlin Agent通信过程中使用的client.secret共享密钥将使用OPAQUE协议用户认证后的新共享密钥生成。

相关代码截图如下:



通信模型对比

尝试对不同-auth运行参数下的网络通信模型进行对比,详情如下:

-auth none(以下是解密后的通信数据)

-auth opaque(以下是解密后的通信数据)

Merlin Agent自定义通信编码/加密算法

通过对merlin-agent源码分析,笔者发现此项目源码支持多种编码、加密算法。

编码算法:base64、gob、hex

加密算法:aes、jwe、rc4、xor

Merlin Agent默认使用的编码/加密算法为:jwe,gob-base

相关代码截图如下:





进一步分析,发现Transformer接口定义了网络通信数据的构造、解构函数,详情如下:

构造通信数据

Merlin Agent远控木马在发送通信数据时,将根据编码/加密算法配置信息先后调用对应的Construct函数进行数据加密和编码。

相关代码截图如下:



解构通信数据

Merlin Agent远控木马在接收通信数据后,将根据编码/加密算法配置信息先后调用对应的Deconstruct函数进行数据解码和解密。

相关代码截图如下:



Merlin Agent多种上线通信协议

根据merlin项目介绍,发现Merlin Agent远控木马支持多种通信协议上线,相关官网介绍如下:



通过多轮测试,梳理不同上线通信协议的区别如下:

协议
加密
基础协议
特性
端口
使用场景
HTTP

TCP
明文传输、无状态
80
无需安全、低速传输的场景
HTTPS

TCP + TLS
安全传输、身份验证、加密
443
需要安全传输的场景(如在线支付、登录)
H2C

TCP
明文传输、使用 HTTP/2 的特性
80
特定优化需求,但不需要加密的场景
HTTP/2

TCP + TLS
二进制协议、多路复用、头压缩
443
需要高效传输的安全场景
HTTP/3

UDP + TLS
基于 QUIC、更快的连接建立、更好的多路复用
443
高延迟或丢包环境下的优化传输

一个误导人的小坑

在Merlin Server中实际操作时,发现命令行中还支持SMB、TCP、UDP通信协议,相关截图如下:



在实际开启监听的过程中,发现SMB、TCP、UDP通信协议是无法正常启动的;进一步基于源码进行剖析,发现SMB、TCP、UDP通信协议对应的开启监听代码是空。(备注:SMB、TCP、UDP通信协议是用于构建跳板通信的

相关代码截图如下:



HTTP通信协议上线

尝试基于HTTP通信协议上线Merlin Agent远控木马,相关操作流程如下:

Merlin Server

Merlin Agent

相关数据包截图如下:



HTTPS通信协议上线

尝试基于HTTPS通信协议上线Merlin Agent远控木马,相关操作流程如下:

Merlin Server

Merlin Agent

相关数据包截图如下:



H2C通信协议上线

尝试基于H2C通信协议上线Merlin Agent远控木马,相关操作流程如下:

Merlin Server

Merlin Agent

相关数据包截图如下:



HTTP2通信协议上线

尝试基于HTTP2通信协议上线Merlin Agent远控木马,相关操作流程如下:

Merlin Server

Merlin Agent

相关数据包截图如下:



HTTP3通信协议上线

尝试基于HTTP3通信协议上线Merlin Agent远控木马,相关操作流程如下:

Merlin Server

Merlin Agent

相关数据包截图如下:



0 条评论
某人
表情
可输入 255