应急响应与分析

安天是中国网络安全应急响应体系中重要的企业节点,打造了“第一时间启动,同时应对多线威胁,三体系联动,四作业面协同”的应急体系,在高级持续性威胁(APT)的发现、监测和分析方面进行了大量工作。

方程式组织CDR解析器样本分析报告

时间 :  2024年05月13日  来源:  安天CERT

1.概述


CDR(Call Detail Record)又名呼叫详细记录,是由电话交换机类电信设备生成的数据记录,记录了通过电信设备的呼叫或其他电信交易的详细信息。该记录包含呼叫的各种属性,例如时间、持续时间、完成状态、源号码和目的地号码。

2016年8月,“影子经纪人”称其入侵了NSA下属部门方程式组织,该黑客团伙公开了大量NSA的网络攻击工具。安天对相关工具进行分析梳理,在其中发现一类针对呼叫详细记录(Call Detail Record)的解析提取工具并分析形成报告初稿,本报告则基于该历史报告初稿完善形成。

该CDR解析器位于orleans文件夹下,共计16个文件,涉及的操作系统包括SunOS、AIX5.1(Advanced Interactive eXecutive 5.1)。其中AIX架构样本7个,版本号从v2.2到v3.1.0.1。SPARC架构样本9个。SPARC架构样本全部基于SunOS系统,其中SunOS5.8的样本8个,SunOS5.9的样本1个,版本号从v2.0到v3.1.0.1。CDR解析器能够按照指定的匹配条件(如时间范围等)对CDR文件进行搜集,随后根据加密的参数文件内容(如位置区域码,电话号码等)对搜集到的CDR文件数据进行解析。调查模式还能够使攻击者对具有多个SIM卡的设备ID,与每一个移动交换中心关联的小区ID列表进行收集。

2.样本分析


通过对影子经纪人泄露的众多文件进行分析,我们在\Linux\doc\old\etc目录下找到了名称为user.tool.orleansstride.COMMON的使用说明文件。该COMMON文件记录了通过orleansstride.v1.0.SunOS5.8进行CDR解析的详细指令。根据该CDR解析器的名称可知:攻击者将CDR解析器工具内部命名为orleansstride,orleansstride.v1.0.SunOS5.8为orleansstride基于SunOS5.8系统的v1.0版本。

2.1 orleansstride使用说明(user.tool.orleansstride.COMMON)

表2-1 orleansstride使用说明文档

原始文件名

user.tool.orleansstride.COMMON

MD5

b1ddd062b8ab90f08b437d6cc58220c5

文件大小

7.21 KB (7,392 bytes)

文件格式

Text

该COMMON文件内部名称为ORLEANSSTRIDE PARSING,是一份orleansstride.v1.0.SunOS5.8的使用说明文档。CDR数据的解析还需要orleansstride与加解密工具cryptTool一起搭配来完成。cryptTool被用于参数文件的加密,以及收集到的CDR数据的解密。cryptTool在对CDR数据进行解密时,需要同时指定参数选项“-d -c”。除cryptTool以外,CDR解析器orleansstride的主要参数信息如下表所示。

表2-2 orleansstride主要参数信息

主要参数

说明

参数文件

以加密的形式作为orleansstride参数,原始内容为待解析CDR信息(如电话号码、位置区码等)。

环境变量“B

保存orleansstride的参数信息。

参数k

指定加解密密钥。密钥通过md5sum生成。

参数z

指定待搜集CDR文件需满足的匹配条件(如特定时间范围)。

参数P

指定参数文件。

参数x

指定orleansstride工作于调查模式。检查具有多个SIM卡关联的设备ID信息。

参数y

指定orleansstride工作于调查模式。生成与每一个移动交换中心关联的小区ID列表。

使用说明文档首先声明了4个后续会使用到的变量。其中,ProjectName用于表示本次解析的项目名称。

图2-1 ORLEANSSTRIDE PARSING 全局声明

加解密使用到的密钥由md5sum指令对特定文件的计算生成,并保存至cryptkey.orleansstride.DDMonYY目录。DDMonYY为当天的日期。

图2-2 获取密钥并保存

当解析所需要的参数文件已经准备就绪时,使用如下指令将参数文件拷贝至/current/down/argfiles目录。

图2-3 拷贝参数文件

参数文件作为orleansstride的参数被用于对CDR数据的解析,必须确保参数文件的格式正确。参数文件的格式需要为Linux格式文件,且不包含空行。

图2-4 参数文件格式调整

如果当前环境没有已准备好的参数文件,攻击者需要对参数文件进行创建。参数文件的内容为攻击者感兴趣的字段信息。参数文件中的每一个字段需要位于单独的行。字段可以是LAC(位置区码)、cell id(小区ID) 或者电话号码等。

图2-5 构造参数文件

此外,攻击者还要保证参数文件的每一行内容必须是排序之后的状态。

图2-6 对参数文件内容排序

准备好参数文件后,攻击者可以使用cryptTool对参数文件进行加密。如下图所示,cryptTool通过k参数指定加密所需的密钥信息。

图2-7 使用cryptTool加密参数文件

使用说明文档还包括对CDR目录进行查找的说明,但并未列出相关查找命令。当查找到CDR目录后,攻击者可以决定要保存数据的日期范围,该日期范围将被用于orleansstride命令的参数。

图2-8 查找CDR目录并确定保存数据日期

一切环境准备就绪后,攻击者上传orleansstride并将其命名为nscd。

图2-9 上传orleansstride

攻击者使用orleansstride对CDR文件数据进行解析如下图所示。其工作方式为:设置名称为“B”的环境变量后直接运行,并将解析结果以加密文件的方式保存。设置的环境变量包括加解密密钥,目标文件匹配指令以及加密的参数文件。

图2-10 CDR数据解析

orleansstride还能在调查模式下运行。调查模式的参数x用于检查具有多个SIM卡ID(IMSI)关联的设备ID(IMEIs)、调查模式的参数y用于生成与每个移动交换中心(MSC)地址关联的小区ID(Cell ID)列表。若要限制使用的内存,需要将参数“xy”修改为“XY”。

图2-11 调查模式

cryptTool解密加密的CDR数据的指令如下图所示。cryptTool通过k参数设置解密需要的密钥,通过“-d -c”选项设定当前为解密模式。

图2-12 cryptTool数据解密

在orleansstride的CDR数据解析动作完成前,攻击者如果要停止其解析动作,可以通过Control-C按键或者kill 指令来完成。

图2-13 停止CDR解析

orleansstride对CDR数据解析完毕后,攻击者拷贝解密后的文件至ProjectName目录下。

图2-14 拷贝解密文件

攻击者最后完成相应的清理工作。删除orleansstride、加密的参数文件以及创建的文件夹。

图2-15 清理动作

2.2 orleans_tride.sunos5.8_v.2.0样本分析

在泄露的所有CDR解析器文件中,orleansstride的最低版本为v2.0,且并未发现v1.0版本的CDR解析器。我们通过对泄露的全部CDR解析器样本的分析,发现不同版本的orleansstride样本功能基本一致。下文将对orleans_tride.sunos5.8_v.2.0样本进行分析说明。

表2-3 orleans_tride.sunos5.8_v.2.0

病毒名

GrayWare/Win32.Presenokere

原始文件名

orleans_tride.sunos5.8_v.2.0

MD5

19DE7C3FD881132C6FAE1F32261D291B

处理器架构

SPARC

文件大小

37.4 KB (38,312 bytes)

文件格式

ELF 32-bit MSB executable

加壳类型

编译语言

C/C++

orleans_tride.sunos5.8_v.2.0样本首先通过调用sigaction来设置当指定信号发生时的处理函数。

图2-16 设置指定信号的处理函数

其设置的信号处理函数用于退出进程,设置的信号如下表所示。

表2-4 进程退出信号

SIGNUM

含义

13

SIGPIPE

管道破损,没有读端的管道写数据

16

SIGSTKFLT

栈溢出

17

SIGCHLD

子进程退出

10

SIGUSR1

用户信号1

3

SIGQUIT

退出

14

SIGALRM

alarm发出的信号

1

SIGHUP

挂起

2

SIGINT

中断

11

SIGSEGV

无效内存访问

15

SIGTERM

终止信号

6

SIGABRT

abort发出的信号   

8

SIGFPE

浮点异常

4

SIGILL 

非法指令

orleans_tride.sunos5.8_v.2.0随后对内置字符串进行解密操作。解密逻辑为:对加密字符串逐字符乘0x1D。

图2-17 字符串解密

orleans_tride.sunos5.8_v.2.0解密后的部分字符串内容如下表所示。

表2-5 orleans_tride.sunos5.8_v.2.0解密字符串

地址

字符串

含义

0x28a20

exec=ORLEANSTRIDE; ver=2.0;

exec=ORLEANSTRIDE; ver=2.0;

0x28a40

Time Stamp,Call Duration,

时间戳,通话时长

0x28a60

Served MSISDN,Served IMEI,Served IMSI,

服务的用户ID,服务的设备ID,服务的SIMID

0x28a88

Served MCC,Served MNC,Served LAC,Served Cell ID,

服务的移动国家代码,服务的移动网络号码,服务的位置区域码,服务的小区ID

0x28ac0

Other MSISDN/Global Title,Other IMEI,

其他用户ID/GT码,其他设备ID

0x28ae8

Other IMSI,Other MCC,Other MNC,Other LAC,

其他SIMID,其他移动国家代码,其他移动网络号码,其他位置区域码

0x28b18

Other Cell ID,Call Direction,

其他小区ID,通信方向

0x28b38

Record Type,Served MSISDN NOA/NP,

记录类型,服务的用户ID NOA/NP

0x28b60

Other Party NOA/NP,MSC Address,MSC Address NOA/NP

其他社区 NOA/NP,移动交换中心地址,移动交换中心地址 NOA/NP

0x28bc8

Telephony

电话

0x28bd8

Emergency

紧急情况

0x28be8

SMS Terminating

短信中断

0x28bf8

SMS Originating

短信发起

0x28c08

FAX and Speech

传真和语音

0x28c18

FAX

传真

0x28c20

Unavailable

不可达

0x28c30

howxyrm:p:P:z:k:X:Y:

程序的选项参数

0x28c48

### Multiple IMSIs for IMEI

设备ID的多个SIMID

0x28c68

###     IMEI:

设备ID

0x28c78

### TIME  IMSI  MSCADDRESS

时间 SIMID MSC地址

0x28cb8

B

环境变量B

0x28cc0

done:

完成

0x28cd0

lb

参数m内容

0x28d58

###MSCID:

移动交换中心ID

0x28d68

###    LOCATION:

位置

orleans_tride.sunos5.8_v.2.0随后对程序的传入参数进行解析,并根据参数解析的结果对指定全局地址进行标记。参数的选项字符串为“howxyrm:p:P:z:k:X:Y:”,不同参数对应的目标地址如下图所示。此外,orleansstride还通过getenv函数获取名称为“B”的环境变量,并根据环境变量的解析结果为程序参数进行赋值。

图2-18 getopt解析参数与对应地址

当orleans_tride.sunos5.8_v.2.0运行参数未指定“p:P:z:k:X:Y”时,用于参数解析的函数返回True,程序打印错误信息并退出。当m参数内容不为“lb”时,地址0x2A96C处的值为0,程序在条件判断后执行exit退出进程。

图2-19退出进程的错误参数判断

orleans_tride.sunos5.8_v.2.0随后对P、k参数对应的内容进行解析。其中对P参数指定的文件内容进行解析的流程如下图所示。

图2-20 对p参数指定的文件进行处理

orleans_tride.sunos5.8_v.2.0随后通过popen函数fork子进程,并对z参数设定的指令内容进行执行。

图2-21 fork子进程解析命令并写入文件

在z参数指令执行完毕后,orleans_tride.sunos5.8_v.2.0读取指令执行结果,在解析处理后生成目标文件。程序在目标文件生成前还会对xy参数进行额外处理。

图2-22 对参数包含xy的情况进行解析

2.3 不同版本差异对比

CDR解析器除了v2.0版本外,还有多个版本,但不同版本的CDR解析器样本功能基本一致,我们仅以其最高版本为例,对v.3.1.0.1版本与v.2.0版本orleansstride样本间的差异进行说明。

表2-6 orleans_stride.sunos5.8_v.3.1.0.1

原始文件名

orleans_stride.sunos5.8_v.3.1.0.1

MD5

1C0A0D7A2FCDC0E059B090859E3B9873

处理器架构

SPARC

文件大小

168 KB (172,804 bytes)

文件格式

ELF 32-bit MSB executable

加壳类型

编译语言

C/C++

2.3.1 函数名称大量混淆

相对于未混淆的v2.0版本orleansstride,v.3.1.0.1版本orleansstride的函数名称被大量混淆。混淆导致程序的函数功能更加难以理解,分析者需要对混淆的大量函数名称进行反混淆处理。混淆的orleans_stride.sunos5.8_v.3.1.0.1如下图所示。

图2-23 orleans_stride.sunos5.8_v.3.1.0.1函数名称混淆

2.3.2 样本选项参数更多

v.3.1.0.1版本orleansstride样本的选项参数为“fgHhklmoOpPrvwxXyYz”,相比v.2.0版本orleansstride额外增加了“fglv”四个参数。分析发现,新增加的四个参数中,参数f,l与参数z存储参数内容的地址相同。此外,四个参数可对其分别指定的全局地址赋予布尔值。

orleans_stride.sunos5.8_v.3.1.0.1在对名称为“B”的环境变量进行解析时,额外增加了参数字符串“--m39@C~5TG”的比较。只有当参数内容包含该字符串时,orleansstride才能继续后续的流程。

图2-24 解密参数字符串

2.3.3 数据解析能力更强

v.3.1.0.1版本orleansstride有两种方式对加密字符串进行解密,分别为逐字节乘0x9和逐字节乘-0x53。v2.0版本orleansstride仅有一种解密算法用于字符串解密,方式为逐字节乘0x1D。

图2-25 orleansstride字符串解密算法

v.3.1.0.1版本orleansstride解析内容不仅包括之前的各种CDR,还包括了CFW(转发记录)、GWO(传出网关记录)等。orleans_stride.sunos5.8_v.3.1.0.1解密得到的部分字符串内容如下表所示。

表2-7 orleans_stride.sunos5.8_v.3.1.0.1解密字符串

地址

内容

含义

解密key

0x345a0

# %d files found. %d files processed. %d records found. %d records processed. %d records output. %d target hits.

发现的文件 处理的文件 发现的记录 处理的记录 输出的记录 命中的目标

0x9

0x346b0

--m39@C~5TG

解析字符串

-0x53

0x34708

MSC Address

MSC地址

0x9

0x34718

MCC

移动国家代码

0x9

0x34720

MNC

移动网络代码

0x9

0x34728

LAC

位置区域码

0x9

0x34730

CI

小区ID

0x9

0x34748

IMEI

设备ID

0x9

0x34750

IMSI

SIMID

0x9

0x34758

Time Stamp

时间戳

0x9

0x347a8

Record Type

记录类型

0x9

0x347b8

Served MSISDN

服务的用户ID

0x9

0x347c8

Served IMEI

服务的设备ID

0x9

0x347d8

Served IMSI

服务的SIMID

0x9

0x347e8

Served LAC

服务的位置区域码

0x9

0x347f8

Served Cell ID

服务的小区ID

0x9

0x34808

Other MSISDN

其他用户ID

0x9

0x34818

Other IMEI

其他设备ID

0x9

0x34828

Other IMSI

其他SIMID

0x9

0x34838

Other LAC

其他位置区域码

0x9

0x34848

Other Cell ID

其他小区ID

0x9

0x34858

Served MSISDN NOA/NP

服务的用户ID NOA/NP

0x9

0x34870

Other MSISDN NOA/NP

其他用户ID NOA/NP

0x9

0x34898

Call Duration

通话时长

0x9

0x348a8

Content Type

内容类型

0x9

0x348b8

Served MCC

服务的移动国家代码

0x9

0x348c8

Served MNC

服务的移动网络号码

0x9

0x348d8

Other MCC

其他移动国家代码

0x9

0x348e8

Other MNC

其他移动网络号码

0x9

0x348f8

MSC Address NOA/NP

MSC地址 NOA/NP

0x9

0x34948

#exec=ORLEANSSTRIDE; ver=

#exec=ORLEANSSTRIDE; ver=

-0x53

0x34968

wp

wp

-0x53

0x34970

; built_for=

构建

0x9

0x34990

; host_os=

主机_操作系统

0x9

0x349a0

AIX

AIX操作系统

0x9

0x34a30

Served IMSI,BSC Number,Served MSISDN,MOSMS Count,Timecounts

服务的SIMID,基站控制器数量,服务的用户ID,短信发送数量,时间计数

0x9

0x34a70

#CATCHER_SURVEY

捕手_调查

0x9

0x34a88

#DATE_OF_DATA=%s

数据日期

0x9

0x34aa8

#SETTINGS<DIGIT=%s,SMS_COUNT=%d,TOTAL_EVENT=%d,BLACK_LIST=%d,RAM_SIZE=%d>

设置<数字,短信数量,事件总数,黑名单,内存大小>

0x9

0x34b28

aCdfgHhklmoOpPrvwxXyYz

选项参数字符串

-0x53

0x34b40

MOC

移动主叫

-0x53

0x34b48

MTC

移动被叫

-0x53

0x34b50

MO_SMS

发送短信

-0x53

0x34b58

MT_SMS

接收短信

-0x53

0x34b60

INCH

INCH

-0x53

0x34b68

GWI

全球信息技术

-0x53

0x34b70

GWO

传出网关记录

-0x53

0x34b78

TRANSIT

传输

-0x53

0x34b80

CFW

转发记录

-0x53

0x34b90

DTMF used

使用的双音多频

-0x53

0x34bc8

C Party Number

C方数量

-0x53

0x34bd8

C Party NOA/NP

C NOA/NP

-0x53

0x34be8

MSRN

移动通信站漫游号码

-0x53

0x34bf0

MSRN NOA/NP

移动通信站漫游号码 NOA/NP

-0x53

0x34c00

Other MSRN

其他移动通信站漫游号码

-0x53

0x34c10

SME Party

公共站管理实体方

-0x53

0x34c20

Raw Location

原始位置

-0x53

0x34c30

DTMF

双音多频

-0x53

0x34c38

done:

完成

0x9

2.3.4 参数内容加密存储

v.3.1.0.1版本orleansstride的参数“flz”内容会被逐字符乘0x39加密后放入对应的地址空间,使用时再次逐字符乘0x9进行解密。以参数z为例,orleansstride获取的z参数内容被加密放入地址0x00086E5C+0x185D处。

图2-26 参数z内容获取并加密

orleans_stride.sunos5.8_v.3.1.0.1随后从0x00086E5C+0x185D地址处获取z参数内容,并进行解密操作。v2.0版本orleansstride则是直接对参数z的原始内容进行处理。

图2-27 参数z内容解密

2.3.5 文件匹配机制升级

相较于v2.0版本orleansstride直接通过popen进行CDR文件匹配的方式,v.3.1.0.1版本orleansstride在获取解密的z参数内容后,z参数内容将被作为正则表达式,随后利用编译后的正则表达式对目标文件进行匹配。

图2-28 正则匹配目标文件

3.CDR解析器对应的ATT&CK映射图谱


图3-1 技术特点对应ATT&CK的技战术映射

具体ATT&CK技术行为描述表:

表3-1 ATT&CK技术行为描述表

ATT&CK阶段/类别

具体行为

注释

执行

利用命令和脚本解释器

通过shell执行CDR解析器

利用进程间通信

通过popen创建子进程,并读取管道传递的数据

防御规避

混淆文件或信息

通过加密的方式隐藏明文字符串

发现

发现文件和目录

查找指定格式的CDR文件和目录

发现系统信息

查找指定名称的环境变量

收集

压缩/加密收集的数据

对收集的数据进行加密处理

收集信息库数据

CDR文件进行收集

命令与控制

使用动态参数

通过传递指定参数的执行结果作为输入并解析

影响

操纵数据

对数据文件进行加密或删除

4.小结


运营商作为一个数据通讯、数据汇聚的枢纽节点,在美方情报机构眼中有巨大的战略价值,是美方情报机构长期窥伺的目标。据斯诺登曝光的资料显示,“星风”(STELLARWIND)计划中的“主干道”与“核子”就是专门针对全球电信通话数据的收集和监听计划,“主干道”通过与运营商建立合作关系获得相关数据,“核子”则截获电话通话中的对话内容及关键词获得指定数据。

本报告分析的CDR工具就是美方专门针对电信数据获取的工具,从本次分析工具的技术细节来看,该工具符合美方模块化的作业和严格加密的习惯和特点,该工具仅负责数据筛选和获取并加密存储,并不负责回传。攻击者可以在入侵之后通过参数构建各种条件规则进行针对性的数据获取,并搭配数据解密、数据回传工具进行完整的入侵窃密攻击。