以中国为目标的DinodasRAT Linux后门攻击场景复现
字数 1608 2025-08-04 22:51:28
DinodasRAT Linux后门攻击场景复现与分析
概述
DinodasRAT是一种针对Linux系统的远程访问木马(RAT),本文档将详细分析其攻击场景、通信机制和控制功能实现。该后门具有多种远控功能,包括文件操作、进程管理、命令执行等,并采用加密通信机制。
技术特点
- 跨平台性:专门针对Linux系统开发
- 隐蔽性:采用加密通信,可卸载自身
- 多功能性:支持文件操作、进程管理、命令执行等多种功能
- 持久性:可长期驻留受控主机
攻击场景复现
环境准备
- 控制端:模拟构建的DinodasRAT控制程序(Golang实现)
- 被控端:植入DinodasRAT Linux后门的主机
- 通信端口:默认使用TCP 80端口
功能演示
控制端支持以下主要功能指令:
********支持功能如下********
DirClass:查看目录
DelDir:删除目录
EnumProcess:查看进程
DealExShell:执行shell命令
UninstallMm:卸载自身
**************************
1. 执行Shell命令(DealExShell)
>DealExShell
DealExShell指令-请输入需执行的shell命令:
>ifconfig
返回结果包含网络接口详细信息,证明命令执行成功。
2. 目录查看(DirClass)
>DirClass
DirClass指令-请输入需查看的目录路径:
>/tmp/
返回/tmp/目录下的文件列表,包括文件大小、修改时间等信息。
3. 进程枚举(EnumProcess)
>EnumProcess
返回系统所有进程列表,包括进程名、用户、PID等信息。
4. 自我卸载(UninstallMm)
>UninstallMm
*******************UninstallMm:*******************
UninstallMm ok
成功执行后,后门程序将从系统中移除。
关键代码分析
通信框架
DinodasRAT采用加密通信机制,主要特点:
- 心跳机制:定期发送心跳包维持连接
- 双向加密:所有通信数据均加密传输
- 固定密钥:使用内置密钥
A101A8EAC010FB120671F318ACA061AF
加密算法实现
采用类似TEA的加密算法,关键函数:
func qq_decipher(input []uint32, key []uint32) (result uint32, output []uint32) {
sum := uint32(0xE3779B90)
delta := uint32(0x9E3779B9)
y := input[0]
z := input[1]
// ... 16轮加密运算
}
远控功能与指令对应表
| 远控函数 | 远控功能 | 指令编号(hex) |
|---|---|---|
| DirClass | 列目录 | 0x02 |
| DelDir | 删除目录 | 0x03 |
| UpLoadFile | 上传文件 | 0x05 |
| DownLoadFile | 下载文件 | 0x08 |
| DealChgIp | 修改C&C地址 | 0x0E |
| EnumProcess | 枚举进程列表 | 0x11 |
| StopProcess | 终止进程 | 0x12 |
| EnumService | 枚举服务 | 0x13 |
| DealExShell | 执行shell | 0x18 |
| StartShell | 开启shell | 0x1B |
| DealFile | 下载并更新后门版本 | 0x27 |
| UninstallMm | 卸载自身 | 0x2E |
通信模型剖析
数据包结构
1. 发送数据包结构
#原始数据
20000000e703881435b674f7de23a2f80fe35ac0ba1a46c7d96e08a8747889eacf6b1950
#解密后
1800000000080000006966636f6e666967
#解析
1800000000 #DealExShell功能对应的远控指令
08000000 #载荷长度
6966636f6e666967 #字符串:ifconfig
2. 接收数据包结构
包含随机填充、指令编号、设备标识和返回数据:
57ffffffffffffff4aec1800000000370000007b0300004c696e75785f32303234303530355f30346662373038313830326634326638336134323434383732343063623237375f343533325f5637...
心跳通信
心跳包特征:
- 固定以0x30开头
- 包含设备标识信息
- 固定长度数据包
示例心跳包:
3078000000c7c338a7d4639d4beef26f76764f604d2a126b3ae06a8d2da8b0e78a154df6c996f06d0cffbd341be6fa4ce0c72b9c185ea9c2e48ecc4d239c33585a3d598442f069dffa971841eadd5144084626b95de5f3ef937a77bed91e7c6161fb94ea8240ea939d04b0ee32eda9ddd917e9393aaca0c7ecb483d069
控制端模拟实现
核心代码结构
- main.go - 主控制逻辑
- common.go - 通用函数和工具
- dinodasrat_de.go - 解密实现
- dinodasrat_en.go - 加密实现
关键功能实现
1. 命令发送
func Sendbuf(conn net.Conn, buf []byte) {
sendbuf := []byte{}
key, _ := hex.DecodeString("A101A8EAC010FB120671F318ACA061AF")
output := Qq_encrypt(buf, len(buf), key)
sendbuf = append(sendbuf, IntToBytes_little(len(output))...)
sendbuf = append(sendbuf, output...)
conn.Write(sendbuf)
}
2. 数据接收处理
func KeepHeart_Recv(conn net.Conn, encdata chan []byte) {
for {
recvbuf, err := common.RecvBuf(conn)
if err != nil {
continue
}
// 解密和处理接收到的数据
// ...
}
}
3. 加密实现
func Qq_encrypt(plain []byte, plain_len int, key []byte) (output []byte) {
// 添加随机填充
padding := (plain_len + 10) % 8
if padding > 0 {
padding = 8 - padding
}
randomBytes := make([]byte, 20)
rand.Read(randomBytes)
// 执行加密算法
// ...
}
检测与防御
检测特征
-
网络特征:
- 固定端口通信(默认80)
- 心跳包固定结构(0x30开头)
- 使用固定加密密钥
-
主机特征:
- 可疑进程行为
- 异常网络连接
- 自我卸载功能
防御建议
- 监控异常网络通信模式
- 检查系统可疑进程和服务
- 限制不必要的网络访问
- 定期更新系统和安全补丁
- 使用EDR类产品检测异常行为
总结
DinodasRAT Linux后门是一个功能完备的远程控制工具,具有高度隐蔽性和多种控制功能。通过分析其通信协议和功能实现,可以更好地检测和防御此类威胁。安全团队应关注其网络特征和行为模式,建立相应的检测规则。