Remcos RAT通信模型剖析及攻防技术对抗
字数 1607 2025-08-19 12:42:20
Remcos RAT通信模型剖析及攻防技术对抗教学文档
1. Remcos RAT概述
Remcos是一款商业远程访问木马(RAT),自2016年发布以来持续更新维护,被多个APT组织用于数据窃取活动。其主要特点包括:
- 采用模块化设计,功能丰富
- 通信模型随版本迭代不断优化
- 支持多种通信协议和加密方式
- 提供图形化控制界面,操作便捷
2. Remcos版本演进与通信模型
2.1 历史版本通信模型演变
| 版本 | 时间范围 | 通信模型特点 |
|---|---|---|
| v1.x | 2016.7.21-2018.2.2 | 使用socket套接字通信,RC4算法静态密钥加密 |
| v2.x | 2018.2.2-2021.1.30 | 重写连接协议,提高效率和速度 |
| v3.x | 2021.1.30-2023.11.26 | 新增TLS1.3协议选项 |
| v4.x | 2022.11.16-2023.11.26 | 优化处理大量连接时的性能 |
| v4.9.3 | 2023.11.26 | 当前最新版本 |
2.2 v4.9.3版本通信模型
最新版本支持两种通信模式:
-
TLS1.3通信协议
- 使用TLS协议加密传输数据
- 配置时需要手动填写密码(用于TLS连接建立后的数据校验)
- 密钥套件固定为TLS_AES_128_GCM_SHA256 (0x1301)
-
Socket套接字连接
- 使用TCP协议明文传输
- 取消"Secure Connection(TLS1.3)"选项即可启用
3. Remcos通信数据格式剖析
3.1 数据包通用结构
24 04 ff 00 # 固定魔术值
0c 00 00 00 # 后续有效数据大小(小端序)
01 00 00 00 # 有效数据-指令编号(小端序)
30 7c 1e 1e 1f 7c 33 30 # 有效数据-数据载荷
3.2 典型数据包示例
-
初始化连接包
24 04 ff 00 0c 00 00 00 01 00 00 00 30 7c 1e 1e 1f 7c 33 30 -
文件操作包
24 04 ff 00 64 00 00 00 4c 00 00 00 30 7c 1e 1e 1f 7c 43 00 3a 00 5c 00... # 文件路径等数据
4. Remcos攻防技术对抗
4.1 配置信息提取
-
提取方法:
- 从"SETTINGS"资源段读取配置
- 第一个字节为RC4密钥长度
- 后续为密钥和加密的配置数据
-
解密流程:
func main() { fileData, _ := ioutil.ReadFile("remcos_a_SETTINGS") key_len := fileData[0] key := fileData[1:key_len+1] cipherText := fileData[key_len+1:] decipher, _ := rc4.NewCipher(key) decryptedText := make([]byte, len(cipherText)) decipher.XORKeyStream(decryptedText, cipherText) ioutil.WriteFile("decrypted_config", decryptedText, 0664) }
4.2 通信解密技术
- TLS1.2与TLS1.3解密对比:
| 特性 | TLS1.2 | TLS1.3 |
|---|---|---|
| 握手阶段加密 | 不加密 | 加密 |
| 私钥解密 | 支持(非DH算法) | 不支持 |
| CLIENT_RANDOM | 支持 | 不支持 |
| 所需密钥 | Master-Secret | CLIENT_HANDSHAKE_TRAFFIC_SECRET等 |
- 解密难点:
- TLS1.3握手阶段已加密,无法直接获取密钥
- 需要获取内存中的会话密钥才能解密
4.3 检测识别方法
-
流量特征检测:
- 固定使用TLS_AES_128_GCM_SHA256密钥套件
- 30秒间隔的心跳包
- 加密数据包长度相对固定
-
行为检测:
- 主会话维持+子会话数据传输模式
- 特定指令编号的固定格式
5. Remcos控制端模拟实现
5.1 系统架构
main.go - 主程序入口
common/ - 通用功能
common.go - 字节处理、文件操作等
remcos_xx/ - Remcos协议实现
remcos_xx.go - 基础通信功能
initconnect.go - 初始化连接
heartbeat.go - 心跳维持
command_*.go - 各指令处理
5.2 关键功能实现
- 指令处理框架:
func handle_Remcos_Connection(conn net.Conn) {
recvdata, _ := remcos_xx.RecvBuf(conn)
command := remcos_xx.ParseCommand(recvdata[:4])
switch hex.EncodeToString(command) {
case "0000004b": // 初始化连接
remcos_xx.Initconnect(conn)
go remcos_xx.Heartbeat(conn)
case "00000010": // 屏幕截图
remcos_xx.Command_Screen_Capture(conn)
case "00000093": // 命令行
remcos_xx.Command_Command_Line(conn)
}
}
- 数据包收发:
func RecvBuf(conn net.Conn) ([]byte, error) {
for {
buffer := make([]byte, 4096)
bytesRead, _ := conn.Read(buffer)
buf_recv = append(buf_recv, buffer[:bytesRead]...)
if hex.EncodeToString(buf_recv[:4]) == "2404ff00" {
hex_len := buf_recv[4:8]
common.Reversedata(&hex_len)
buflen := common.BytesToInt(hex_len)
if len(buf_recv)-8 >= buflen {
return buf_recv[8:], nil
}
}
}
}
- 指令示例:
- 进程管理:
func Command_Process_Manager(buf_recv []byte) { datas := bytes.Split(buf_recv, []byte{0x7c,0x1e,0x1e,0x1f,0x7c}) list_process := datas[0] pid_current := datas[1] fmt.Println("current process PID:"+string(pid_current)) fmt.Println("Process Name\tPath\tPID") // 处理进程列表数据显示... }
- 进程管理:
6. 防御建议
-
网络层防御:
- 监控异常TLS连接,特别是固定使用TLS_AES_128_GCM_SHA256套件的
- 检测30秒间隔的固定心跳通信
-
主机层防御:
- 监控从"SETTINGS"资源段读取数据的行为
- 检测RC4解密操作
-
取证分析:
- 提取并解密配置信息获取C2地址
- 内存分析获取TLS会话密钥
- 网络流量记录与行为分析
7. 总结
Remcos作为一款持续更新的商业RAT,其通信模型经历了多次迭代,最新版本采用TLS1.3等现代加密技术增加了分析难度。通过深入理解其通信协议、配置存储方式和指令体系,可以有效提升对该威胁的检测和对抗能力。控制端模拟实现为研究其行为模式提供了有效手段,而针对性的流量和行为检测方法则有助于在实际环境中发现此类威胁。