以中国为目标的DinodasRAT Linux后门剖析及通信解密尝试
字数 2584 2025-08-05 08:20:09
DinodasRAT Linux后门深度分析与通信解密技术
1. DinodasRAT Linux后门概述
DinodasRAT是一种针对Linux系统的远程访问木马(RAT),主要针对中国、台湾、土耳其和乌兹别克斯坦等地区进行攻击。该后门具有多种高级功能,包括持久化、加密通信和广泛的远控能力。
2. 样本信息
分析的两个主要样本特征:
| MD5 | 特点 | 通信协议 |
|---|---|---|
| decd6b94792a22119e1b5a1ed99e8961 | 保留原始函数名 | TCP |
| 8138f1af1dc51cde924aa2360f12d650 | 去除原始函数名 | UDP |
3. 功能分析
3.1 持久化机制
互斥锁实现:
- 在当前目录创建隐藏文件:
.(程序名)(参数).mu - 示例:
/home/kali/Desktop/.testd.mu
自启动机制:
- 检测系统类型(Red Hat/Ubuntu)
- 通过以下方式实现持久化:
/etc/rc.local/etc/init.d/
守护进程:
- 调用
daemon()函数创建守护进程 - 使用父进程PPID作为参数重新执行自身
3.2 信息收集
- 收集主机硬件信息
- 结合当前时间生成唯一设备标识码
- 标识码用于后续心跳通信
3.3 通信特性
硬编码C2地址:
- TCP样本:
103.27.109.31:443 - UDP样本:
45.95.147.221:53
通信协议支持:
- 同时支持TCP和UDP协议
- 所有通信数据经过加密
3.4 远控功能
支持24种远控指令:
| 功能函数 | 描述 |
|---|---|
| DirClass | 列目录 |
| DelDir | 删除目录 |
| UpLoadFile | 上传文件 |
| DownLoadFile | 下载文件 |
| DealChgIp | 修改C2地址 |
| EnumProcess | 枚举进程 |
| StopProcess | 终止进程 |
| EnumService | 枚举服务 |
| ControlService | 控制服务 |
| DealExShell | 执行shell命令 |
| DealProxy | 执行指定文件 |
| StartShell | 开启交互式shell |
| DealFile | 更新后门版本 |
| UninstallMm | 卸载自身 |
(完整列表见原始文档)
3.5 心跳机制
- 定期发送包含设备唯一标识码的数据包
- 使用加密通信保持与C2的连接
4. 通信数据分析
4.1 数据包结构
TCP通信示例:
30 78 00 00 00 [加密数据...]
- 0x30:固定起始字节
- 0x78000000:小端序表示的载荷长度(120字节)
UDP通信特点:
- 在加密数据外额外封装一层结构
- 可从UDP载荷中直接提取加密数据
4.2 加密算法分析
采用修改版的TEA算法,源自Pidgin的libqq qq_crypt库:
加密流程:
- 取前8字节作为初始向量
- 混合随机数据与载荷长度
- 使用TEA算法进行多轮加密
- 每8字节块依赖前一块的加密结果
解密流程:
- 提取前8字节并使用密钥解密
- 计算后续数据的解密密钥
- 逐块解密并验证数据完整性
密钥特征:
- TCP样本密钥:
A101A8EAC010FB120671F318ACA061AF - UDP样本密钥:
A1A118AA10F0FA160671B308AAAF31A1
5. 解密实现
5.1 解密算法实现
使用Golang实现的解密核心函数:
func qq_decipher(input []uint32, key []uint32) (result uint32, output []uint32) {
v7 := uint32(0xE3779B90)
v11 := input[0]
v12 := input[1]
// ... 解密逻辑 ...
return
}
func Decrypt_out(enc_data []uint32, enc_data_len int, key []uint32) []byte {
// 初始化变量
crypted32 := []uint32{0x00, 0x00}
c32_prev := []uint32{0x00, 0x00}
// ... 完整解密流程 ...
return output
}
5.2 解密步骤详解
-
初始解密:
- 解密前8字节获取初始向量
- 计算填充长度:
padding := 2 + output[0]&0x7
-
循环解密:
- 保存前一块加密数据
- 读取新数据块
- 与前一块解密结果异或
- 使用TEA算法解密
- 与加密数据异或得到明文
-
数据处理:
- 处理第一块的额外字节
- 拼接所有解密数据
5.3 完整解密程序
程序结构:
main.go - 主程序入口
common.go - 加解密核心实现
使用示例:
key, _ := hex.DecodeString("A101A8EAC010FB120671F318ACA061AF")
plain, _ := hex.DecodeString("30780000009ef890d8...")
dec_data := common.Decrypt_out(plain_uint32, len(plain_uint32)*4, key_uint32)
6. 检测与防御建议
6.1 检测指标
主机侧检测:
- 检查异常隐藏文件:
.*.mu - 监控
/etc/rc.local和/etc/init.d/的修改 - 检测异常守护进程
网络侧检测:
- 监控与已知C2的通信(103.27.109.31, 45.95.147.221)
- 检测固定起始字节0x30的加密流量
- 识别特定端口(443/TCP, 53/UDP)的异常通信
6.2 防御措施
- 定期更新系统和安全补丁
- 限制不必要的网络出口连接
- 监控系统关键目录的变更
- 部署能够检测TEA加密流量的IDS/IPS
- 对可疑进程进行行为分析
7. 总结
DinodasRAT Linux后门是一个功能完备的高级威胁,具有:
- 多种持久化技术
- 完善的远控功能集
- 基于TEA算法的加密通信
- 针对特定地区的攻击活动
通过分析其通信协议和加密算法,可以有效地检测和阻断此类威胁。提供的解密程序可用于安全分析和事件响应。