Loki是一款设计简洁的C2远程控制工具(RAT),旨在便捷的提供对受感染机器的远程控制能力。该工具在通信安全方面采用了TLS加密协议,确保控制端与被控端之间的数据传输的机密性。
Loki的服务端(C2)采用Python编写的本地Web服务形式。其通信流程主要围绕控制端、C2 服务器和被控端三方展开,流程可分为四个主要阶段。

1、工具运行流程介绍
(1)第一阶段:控制端启动与登录
1.1 启动控制端:攻击者在C2服务器上运行loki.py脚本,启动控制端Web服务。该服务开始监听默认的5000端口。
1.2 访问Web管理界面:攻击者通过浏览器访问C2服务器的Web管理界面。
1.3 登录C2Web:攻击者使用默认或自定义的凭证登录Web管理界面。此操作将产生POST请求,成功后攻击者获得操作权限。
(2)第二阶段:生成恶意载荷
2 执行脚本生成exe木马:攻击者在C2服务器上执行builder.py脚本,生成包含C2服务器IP和端口信息的恶意载荷(.exe文件)。
(3)第三阶段:受控端上线与指令准备
3.1 运行木马.exe:被控端机器运行恶意载荷,木马主动与C2服务器建立TLS加密连接。
3.2 通过Web界面下发指令/接收结果:攻击者通过登录后的Web界面下发指令和查看结果。
(4)第四阶段:命令控制循环
4.1加密指令(Application Data):C2服务器接收到攻击者的指令后,通过已建立的加密通道,将远控指令封装为加密的Application Data载荷发送给被控端。
4.2加密结果(Application Data):被控端执行接收到的指令后,将执行结果(如命令执行结果、文件内容或系统信息)通过加密通道,以加密的Application Data载荷形式返回给C2服务器。
4.3 HTTP响应(结果展示):C2服务器接收到结果后,通过HTTP响应将结果返回给攻击者的Web界面,完成一次完整的命令控制循环。
2、加密流量分析
Loki作为一个C2控制工具,其加密流量在TLS证书指纹、端口与心跳行为等方面存在通信特征。
(1)默认特征
Loki工具在服务端使用了组织名为”Loki”的自签名证书,这意味着在不修改代码的情况下,该证书携带的信息将成为一个稳定的指纹特征。
图2 证书指纹信息
通过const.py文件中的源代码片段得知受控端访问的服务端端口固定为256,观察流量包中所有受控端请求的上行载荷访问端口均为256。
图 3 受控端访问端口
(2)行为特征
Loki作为C2工具的流量特征分析可以关注的核心点为控制端主动回连产生的心跳特征,shell.py源代码文件中定义了C2服务器会因为受控端不发送数据而断开连接。因此受控端必须定期发送数据来维持连接(即心跳包)。通过监控心跳行为特征可对该C2工具进行有效识别。
图 4 监听逻辑
服务端session.py文件中的代码段确认了数据载荷是JSON格式,包含载荷传输的格式,即code(通信代码)和 args(参数)的形式传输控制命令。
图 5 载荷传输格式
实际报文中呈现出固定重复85字节长度的Application Date流量。
图 6 重复出现的流量
从加密长度判断与一个简短的明文JSON心跳包结构(例如:{"c": 1})经过TLS加密后(使用AES-256-GCM加密会增加一个16字节长度的GCM认证标签Tag)加上固定的数据链路层、传输层与应用层的长度特征完全吻合。
图 7 可疑流量各层数据长度对照表
由此可看出由受控端间隔5秒左右向服务端发送的85字节长度的Application Date即为心跳流量。
中间夹杂着由服务端向受控端发送的不超过100字节长度Application Date流量携带的即为服务端发出的命令载荷。对应其后跟随的长度超过100字节的流量即为受控端在接收到指令后返回的大量数据信息。
图 8 Loki工具建立连接后互相传输的数据流量
观成瞰云(ENS)-加密威胁智能检测系统能够基于通信特征对Loki通信行为进行有效检出。
图 9 观成瞰云(ENS)-加密威胁智能检测系统告警页面
Loki 远控工具的流量传输虽然进行了加密,但其C2架构的本质和功能实现细节还是留下了多处可供识别的特征。通过结合Python自签名证书指纹、固定访问端口、C2工具的心跳行为等特征,可以有效地检测Loki远控工具的C2通信行为。
观成科技安全研究团队将会持续关注其新版本行为特征,并及时更新相应的检测策略,保持对该威胁活动的综合防护能力。