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 远控指令处理流程

  1. 接收加密UDP数据包
  2. 执行两层解密算法提取指令
  3. 根据指令字段执行对应操作

5. 通信数据解密分析

5.1 通信特征

  • 使用UDP协议通信
  • 每个UDP载荷长度固定为1048字节
  • 数据全部加密

5.2 解密流程

5.2.1 第一层解密:异或解密

  1. 提取前4字节作为异或算子
  2. 计算:v83 = 前4字节值 - 0x61E57CC6
  3. 校验:v83 + 第5-8字节值 == 0
  4. 对剩余数据每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算法

  1. 算法特点:

    • 使用非标准RC6算法
    • 算子运算被修改
    • 使用0x61C88647作为RC6算法的算子
  2. 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
}
  1. 解密后的数据结构:
66b832f6    # 校验值
48dd9c90    # 校验值
00000009    # 远控指令
...         # 指令参数

6. 实际数据包解密示例

原始数据包:

44a06029    # 0x44a06029 - 0x61E57CC6 = 0xe2bae363
1d451c9d    # 校验: 0x1d451c9d + 0xe2bae363 = 0
632a58aa    # checksum
d32b4ffa... # 加密数据(剩余部分)

第一层解密后:

3191ac993ee855b3    # RC6算法随机IV值
f8a2b1cc05af1425... # RC6加密数据

第二层解密后:

66b832f6    # 校验值
48dd9c90    # 校验值
00000009    # 远控指令
...         # 指令参数

7. 防御建议

  1. 网络层面:

    • 监控异常UDP通信(固定1048字节载荷)
    • 检测网络边界设备的异常行为
  2. 主机层面:

    • 检查可疑进程(Seconddate_Implant)
    • 监控系统异常网络嗅探行为
  3. 加密特征检测:

    • 检测使用0x61C88647作为RC6算子的加密流量
    • 关注使用两层加密(UDP载荷先异或后RC6)的通信

8. 总结

"二次约会"间谍软件展示了NSA组织在中间人攻击方面的技术能力,其特点包括:

  • 隐蔽的网络流量嗅探和篡改能力
  • 精心设计的多层加密通信机制
  • 针对网络边界设备的定向攻击能力
  • 使用修改版加密算法增加分析难度

通过深入分析其工作原理和加密机制,可以有效检测和防御此类高级威胁。

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 受控端运行 在受控主机执行以下命令即可运行木马: 运行后无明显网络行为和文件行为,但会驻留在系统中。 3.2 控制端操作流程 3.2.1 创建网络响应内容 准备篡改后的HTTP响应文件: 3.2.2 配置劫持规则 启动控制端并配置规则: 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语言解密函数: 5.2.2 第二层解密:修改版RC6算法 算法特点: 使用非标准RC6算法 算子运算被修改 使用0x61C88647作为RC6算法的算子 RC6初始化函数(Go语言实现): 解密后的数据结构: 6. 实际数据包解密示例 原始数据包: 第一层解密后: 第二层解密后: 7. 防御建议 网络层面: 监控异常UDP通信(固定1048字节载荷) 检测网络边界设备的异常行为 主机层面: 检查可疑进程(Seconddate_ Implant) 监控系统异常网络嗅探行为 加密特征检测: 检测使用0x61C88647作为RC6算子的加密流量 关注使用两层加密(UDP载荷先异或后RC6)的通信 8. 总结 "二次约会"间谍软件展示了NSA组织在中间人攻击方面的技术能力,其特点包括: 隐蔽的网络流量嗅探和篡改能力 精心设计的多层加密通信机制 针对网络边界设备的定向攻击能力 使用修改版加密算法增加分析难度 通过深入分析其工作原理和加密机制,可以有效检测和防御此类高级威胁。