NSA组织“二次约会”freebsd平台样本剖析
字数 1368 2025-08-20 18:18:40

NSA组织"二次约会"FreeBSD平台样本深度剖析

概述

本文档深入分析NSA组织"二次约会"间谍软件在FreeBSD平台的样本实现,涵盖样本特征、通信模型、逆向分析技巧及环境构建方法。该间谍软件支持多种操作系统,包括Linux、FreeBSD、Solaris和JunOS等。

样本版本演变

通信特征演变

  • 早期版本:使用大载荷通信(1048/1060字节)
  • 中期版本:演变为小载荷通信(56/60字节)
  • 最新版本:采用不定长通信载荷

检测难度:

  • 大载荷UDP通信数据量少,检测系统性能影响小
  • 不定长UDP通信需校验大多数数据包,性能影响大

通信算法演变

  • 大载荷版本:修改版RC6算法(修改了RC6算子和keyWords循环次数)
  • 小载荷版本:修改版RC6算法(仅修改RC6算子)
  • 不定长版本:Salsa20算法(性能更优)

代码优化趋势

  1. 逆向分析难度增加:代码复杂度随版本迭代提高
  2. 网络流量捕获方式
    • 早期:使用libpcap和libnet库
    • 新版:采用BPF技术
  3. 编译选项优化
    • 早期版本保留明显符号标记
    • 新版删除符号标记但保持相同库调用
  4. 远控指令简化
    • 指令数量从11个增至19个
    • 新增交互式配置指令(如rulewizard)
  5. 字符串加密
    • 低版本:部分字符串明文存储
    • 高版本:全部字符串加密且相同字符串加密结果不同

FreeBSD环境构建

系统选择

  • 样本支持的FreeBSD版本:4.4(2001)、5.0(2003)、5.4(2004)
  • 实际使用版本:FreeBSD 12.4 RELEASE i386

必要工具安装

# 更新软件包索引
pkg update

# 安装逆向工具
pkg install gdb

# 解决依赖问题
pkg install misc/compat4x
pkg install misc/compat5x
pkg install misc/compat6x
pkg install misc/compat7x
pkg install misc/compat8x
pkg install misc/compat9x

样本逆向分析技巧

异常处理技巧

  1. 绕过fork异常

    • 问题:样本调用fork函数时异常退出
    • 解决方案:使用GDB修改EIP强制绕过
    b *0x08049906  # 定位到fork调用处
    c
    set $eip=0x0804990B  # 修改EIP跳过fork调用
    
  2. 绕过网络嗅探异常

    • 问题:获取网卡信息函数失败
    • 解决方案:手动构造数据包并跳转到处理函数

核心函数定位

  1. 数据包处理函数:sub_8051A64
  2. 关键断点设置:
    b *0x08051AE9  # UDP数据解密函数
    b *0x08051AEE
    

强制调试方法

# 设置初始断点
b *0x080495F4
r

# 绕过fork异常
b *0x08049906
c
set $eip=0x0804990B
ni

# 跳转到数据包处理函数
b *0x08049A9B
c
set $ebx=0xffbfed00
set $eip=0x08050BC0

# 手动注入IP数据包
set {int}($ebx+0x0)=0x54000045
set {int}($ebx+0x4)=0x0040c8bd 
[...后续数据包内容...]

通信模型分析

解密流程

  1. 第一层解密:
    • 取前4字节0x7ee0b85f
    • 计算异或值:0x7ee0b85f - 0x61E57CC6 = 0x1CFB3B99
  2. 数据校验:
    • 检查output[4:8] + 异或值 == 0
    • 示例:0xe304c467 + 0x1CFB3B99 = 0
  3. 完整性验证:
    • 第一层解密后数据按4字节循环异或结果应等于output[8:0xc]
    • 示例:31d66c5e

RC6算法修改点

  1. 初始化S表使用固定值0xb7e15163
  2. 后续值计算:S[i] = S[i-1] - 0x61C88647
  3. 轮密钥生成:
    c.rk[i] = bits.RotateLeft32(c.rk[i]+(A+B), 3)
    L[j] = bits.RotateLeft32(L[j]+(A+B), int(A+B))
    

解密示例

加密数据包:

7ee0b85f    # 0x7ee0b85f - 0x61E57CC6 = 0x1CFB3B99
e304c467    # 校验和
31d66c5e    # 完整性校验值
d08b0669
85a6c2be
9967379e73f4043a4c3b2fcec3b6ba9d71dbd5c7af757e1aeaab6e3b242370570d388056

解密后数据:

cc703df0995df927    # RC6随机IV
9e1a833a            # 固定值
0833fa27            # 序列号(每次交互+1)
00000001
00000009            # 指令代码
[...填充数据...]

总结与对抗建议

关键发现

  1. 样本通过版本迭代不断增强隐蔽性
  2. 采用环境适配检测机制,异常时自动退出
  3. 通信模型保持一致性但算法细节有变化

检测建议

  1. 监控异常fork调用和网络嗅探行为
  2. 检测RC6算法修改特征:
    • 特殊的S表初始化值
    • 减量常数0x61C88647
  3. 关注UDP通信中的特殊校验模式

分析技巧

  1. 使用GDB强制跳转绕过环境检测
  2. 手动构造数据包注入分析
  3. 对比不同版本样本的算法差异

本分析展示了即使在样本无法正常运行的情况下,通过巧妙的调试技巧仍可提取关键功能逻辑,为同类样本分析提供了有效方法论。

NSA组织"二次约会"FreeBSD平台样本深度剖析 概述 本文档深入分析NSA组织"二次约会"间谍软件在FreeBSD平台的样本实现,涵盖样本特征、通信模型、逆向分析技巧及环境构建方法。该间谍软件支持多种操作系统,包括Linux、FreeBSD、Solaris和JunOS等。 样本版本演变 通信特征演变 早期版本 :使用大载荷通信(1048/1060字节) 中期版本 :演变为小载荷通信(56/60字节) 最新版本 :采用不定长通信载荷 检测难度: 大载荷UDP通信数据量少,检测系统性能影响小 不定长UDP通信需校验大多数数据包,性能影响大 通信算法演变 大载荷版本:修改版RC6算法(修改了RC6算子和keyWords循环次数) 小载荷版本:修改版RC6算法(仅修改RC6算子) 不定长版本:Salsa20算法(性能更优) 代码优化趋势 逆向分析难度增加 :代码复杂度随版本迭代提高 网络流量捕获方式 : 早期:使用libpcap和libnet库 新版:采用BPF技术 编译选项优化 : 早期版本保留明显符号标记 新版删除符号标记但保持相同库调用 远控指令简化 : 指令数量从11个增至19个 新增交互式配置指令(如rulewizard) 字符串加密 : 低版本:部分字符串明文存储 高版本:全部字符串加密且相同字符串加密结果不同 FreeBSD环境构建 系统选择 样本支持的FreeBSD版本:4.4(2001)、5.0(2003)、5.4(2004) 实际使用版本:FreeBSD 12.4 RELEASE i386 必要工具安装 样本逆向分析技巧 异常处理技巧 绕过fork异常 : 问题:样本调用fork函数时异常退出 解决方案:使用GDB修改EIP强制绕过 绕过网络嗅探异常 : 问题:获取网卡信息函数失败 解决方案:手动构造数据包并跳转到处理函数 核心函数定位 数据包处理函数: sub_8051A64 关键断点设置: 强制调试方法 通信模型分析 解密流程 第一层解密: 取前4字节 0x7ee0b85f 计算异或值: 0x7ee0b85f - 0x61E57CC6 = 0x1CFB3B99 数据校验: 检查 output[4:8] + 异或值 == 0 示例: 0xe304c467 + 0x1CFB3B99 = 0 完整性验证: 第一层解密后数据按4字节循环异或结果应等于 output[8:0xc] 示例: 31d66c5e RC6算法修改点 初始化S表使用固定值 0xb7e15163 后续值计算: S[i] = S[i-1] - 0x61C88647 轮密钥生成: 解密示例 加密数据包: 解密后数据: 总结与对抗建议 关键发现 样本通过版本迭代不断增强隐蔽性 采用环境适配检测机制,异常时自动退出 通信模型保持一致性但算法细节有变化 检测建议 监控异常fork调用和网络嗅探行为 检测RC6算法修改特征: 特殊的S表初始化值 减量常数 0x61C88647 关注UDP通信中的特殊校验模式 分析技巧 使用GDB强制跳转绕过环境检测 手动构造数据包注入分析 对比不同版本样本的算法差异 本分析展示了即使在样本无法正常运行的情况下,通过巧妙的调试技巧仍可提取关键功能逻辑,为同类样本分析提供了有效方法论。