NSA组织“二次约会”间谍软件功能复现及加解密分析
字数 2289 2025-08-20 18:17:59
NSA组织"二次约会"间谍软件功能复现及加解密分析技术文档
1. 概述
本文档详细分析了NSA组织开发的"二次约会"(SecondDate)间谍软件v1.1.1.1版本的功能实现和加密机制。该软件是一款中间人攻击专用工具,主要功能包括:
- 网络流量嗅探
- 特定网络会话劫持
- 网络流量篡改
- 多层加密通信
2. 样本基本信息
2.1 控制端(Seconddate_CnC)
- 文件大小:277,864字节
- MD5:485A83B9175B50DF214519D875B2EC93
- SHA1:0A7830FF10A02C80DEE8DDF1CEB13076D12B7D83
- CRC32:5869735B
2.2 被控端(Seconddate_Implant)
- 文件大小:223,708字节
- MD5:4A1B659A517ACA1310AA98DB3508940C
- SHA1:DA3CB8AB4632EC36C99C71417D21960846D1FEFE
- CRC32:CB80FA6E
3. 功能复现
3.1 受控端运行
在受控主机执行以下命令即可运行木马:
./Seconddate_Implant
运行后无明显网络行为和文件行为,但会驻留在系统中。
3.2 控制端操作流程
3.2.1 创建网络响应内容
准备篡改后的HTTP响应文件:
cat response
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 87
<html><body>Hello World!!<br><br>Test Seconddate_CnC Tools!!<br></iframe></body></html>
3.2.2 配置劫持规则
启动控制端并配置规则:
./Seconddate_CnC 192.168.184.129 8080
SECONDDATE> rule 1 --dstport 2345 --maxinjections 2 --injectwindow 600 --nocheckregex --injectfile /root/Desktop/response
SECONDDATE> enable 1
3.2.3 规则参数说明
| 参数 | 描述 | 默认值 |
|---|---|---|
| --srcaddr | 源IP地址 | 0.0.0.0 |
| --srcmask | 源IP掩码 | 255.255.255.255 |
| --dstaddr | 目标IP地址 | 0.0.0.0 |
| --dstmask | 目标IP掩码 | 255.255.255.255 |
| --protocol | 协议类型 | 6/TCP |
| --srcport | 源端口 | 0 |
| --dstport | 目标端口 | 0 |
| --mininterval | 最小注入间隔(秒) | 60 |
| --maxinjections | 最大注入次数 | 5 |
| --injectwindow | 注入时间窗口(秒) | 0 |
| --checkhttp | 检查HTTP协议 | 默认启用 |
| --checkregex | 检查正则表达式 | 默认启用 |
| --tcpflag | TCP标志位 | FIN ACK |
| --regexfile | 正则表达式文件 | 无 |
| --injectfile | 注入内容文件 | 无 |
4. 逆向分析
4.1 控制端(Seconddate_CnC)分析
4.1.1 远控指令集
| 指令 | 功能描述 |
|---|---|
| clearlog | 清除规则触发日志 |
| disable [rulenum] | 关闭指定规则 |
| enable [rulenum] | 启用指定规则 |
| help / ? | 显示帮助信息 |
| ping | 测试与受控端的连接 |
| quit / exit | 退出程序 |
| rule [rulenum] [opts...] | 配置规则 |
| getinfo | 获取受控端基本信息 |
| showrule [--all/rulenum] | 显示规则详情 |
| getlog [--log logfile] [entrynum] | 获取日志 |
| uninstall | 卸载受控端模块 |
4.2 受控端(Seconddate_Implant)分析
4.2.1 网络流量嗅探机制
- 监听所有网络流量数据包
- 通过协议类型匹配筛选数据包
- 根据数据包载荷长度进行二次筛选
- 提取特定恶意数据包进行解密处理
4.2.2 远控指令处理流程
- 接收加密UDP数据包
- 执行两层解密算法提取指令
- 根据指令字段执行对应操作
5. 通信数据解密分析
5.1 通信特征
- 使用UDP协议通信
- 每个UDP载荷长度固定为1048字节
- 数据全部加密
5.2 解密流程
5.2.1 第一层解密:异或解密
- 提取前4字节作为异或算子
- 计算:
v83 = 前4字节值 - 0x61E57CC6 - 校验:
v83 + 第5-8字节值 == 0 - 对剩余数据每4字节一组进行异或解密
Go语言解密函数:
func BytesToInt(bys []byte) int {
bytebuff := bytes.NewBuffer(bys)
var data int32
binary.Read(bytebuff, binary.BigEndian, &data)
return int(data)
}
func IntToBytes(n int) []byte {
data := int32(n)
bytebuf := bytes.NewBuffer([]byte{})
binary.Write(bytebuf, binary.BigEndian, data)
return bytebuf.Bytes()
}
func main() {
hex_data, _ := hex.DecodeString(udpdata)
v83 := BytesToInt(hex_data[:4]) - 0x61E57CC6
if (v83 + BytesToInt(hex_data[4:8])) != 0 {
return
}
output := []byte{}
for i := 0xc; i < 1048; i = i + 4 {
aa := bits.ReverseBytes32(uint32(BytesToInt(hex_data[i:i+4]))) ^ bits.ReverseBytes32(uint32(v83))
output = append(output, IntToBytes(int(bits.ReverseBytes32(aa)))...)
}
fmt.Println(hex.EncodeToString(output))
}
5.2.2 第二层解密:修改版RC6算法
-
算法特点:
- 使用非标准RC6算法
- 算子运算被修改
- 使用0x61C88647作为RC6算法的算子
-
RC6初始化函数(Go语言实现):
func New(key []byte) (cipher.Block, error) {
skeytable := make([]uint32, 44)
skeytable[0] = uint32(0xb7e15163)
for i := 1; i < 44; i++ {
skeytable[i] = skeytable[i-1] - uint32(0x61C88647)
}
if l := len(key); l != 16 {
return nil, KeySizeError(l)
}
c := &rc6cipher{}
const keyWords = 3
var L [keyWords]uint32
for i := 0; i < keyWords; i++ {
L[i] = binary.LittleEndian.Uint32(key[:4])
key = key[4:]
}
copy(c.rk[:], skeytable)
var A uint32
var B uint32
var i, j int
for k := 0; k < 3*roundKeys; k++ {
c.rk[i] = bits.RotateLeft32(c.rk[i]+(A+B), 3)
A = c.rk[i]
L[j] = bits.RotateLeft32(L[j]+(A+B), int(A+B))
B = L[j]
i = (i + 1) % roundKeys
j = (j + 1) % keyWords
}
return c, nil
}
- 解密后的数据结构:
66b832f6 # 校验值
48dd9c90 # 校验值
00000009 # 远控指令
... # 指令参数
6. 实际数据包解密示例
原始数据包:
44a06029 # 0x44a06029 - 0x61E57CC6 = 0xe2bae363
1d451c9d # 校验: 0x1d451c9d + 0xe2bae363 = 0
632a58aa # checksum
d32b4ffa... # 加密数据(剩余部分)
第一层解密后:
3191ac993ee855b3 # RC6算法随机IV值
f8a2b1cc05af1425... # RC6加密数据
第二层解密后:
66b832f6 # 校验值
48dd9c90 # 校验值
00000009 # 远控指令
... # 指令参数
7. 防御建议
-
网络层面:
- 监控异常UDP通信(固定1048字节载荷)
- 检测网络边界设备的异常行为
-
主机层面:
- 检查可疑进程(Seconddate_Implant)
- 监控系统异常网络嗅探行为
-
加密特征检测:
- 检测使用0x61C88647作为RC6算子的加密流量
- 关注使用两层加密(UDP载荷先异或后RC6)的通信
8. 总结
"二次约会"间谍软件展示了NSA组织在中间人攻击方面的技术能力,其特点包括:
- 隐蔽的网络流量嗅探和篡改能力
- 精心设计的多层加密通信机制
- 针对网络边界设备的定向攻击能力
- 使用修改版加密算法增加分析难度
通过深入分析其工作原理和加密机制,可以有效检测和防御此类高级威胁。