专栏名称: 黑鸟
一介草民,自封威胁分析师。
目录
相关文章推荐
包头新闻网  ·  降温!下雪!时间就在...... ·  昨天  
内蒙古自治区文化和旅游厅  ·  指南 | ... ·  昨天  
内蒙古自治区文化和旅游厅  ·  指南 | ... ·  昨天  
南京日报  ·  “碰一下钱就没了”?支付宝紧急回应 ·  2 天前  
南京日报  ·  “碰一下钱就没了”?支付宝紧急回应 ·  2 天前  
奔腾融媒 新闻天天看  ·  【26-27日·天气预报】内蒙古晴天大风在线 ... ·  2 天前  
长城新媒体  ·  支付宝紧急声明! ·  2 天前  
长城新媒体  ·  支付宝紧急声明! ·  2 天前  
51好读  ›  专栏  ›  黑鸟

抽丝剥茧:复盘美国中央情报局CIA的复杂网络武器杀伤链

黑鸟  · 公众号  ·  · 2019-09-30 22:00

正文



由于原文大部分为技术分析,为了对整个关于CIA的网络武器泄露事请进行完整复 盘,黑鸟在此给各位交代一下背景。


首先,万恶之源来源于维基解密泄露的CIA文档,其中对于CIA的网络武器


2017年3月7日,维基解密(WikiLeaks)网站公布了大量据称是美国中央情报局(CIA)的内部文件,其中包括了CIA内部的组织资料,对电脑、手机等设备进行攻击的方法技术,以及进行网络攻击时使用的代码和真实样本。利用这些技术,不仅可以在电脑、手机平台上的Windows、iOS、Android等各类操作系统下发起入侵攻击,还可以操作智能电视等终端设备,甚至可以遥控智能汽车发起暗杀行动。


维基解密将这些数据命名为“7号军火库”(Vault 7),一共有8761份文件,包括7818份网页以及943个附件。在公布时,维基解密对文件内容进行了一些删节处理,包括个人真实信息(姓名、邮件地址等),数以万计的IP地址,以及真实的二进制文件。


维基解密表示在对文件进行进一步的分析之后,会逐步公开这些被删节的信息。同时,维基解密称此次公布的数据只是一系列CIA机密材料的第一部分,被称为“元年”(Year Zero),后续还会有更多资料陆续公布。


其中有几个很著名的模块,本文的分析便是基于其中的Athena项目进行进一步的扩展分析。


项目介绍

https://wikileaks.org/vault7/


数据地址

https://wikileaks.org/ciav7p1/


所有项目名称



本文提到的雅典娜项目文件



以下内容全程技术分析,建议收藏文章慢慢观看,无论是对于排查是否入侵以及后续进一步的跟踪行动都有奇效。网络战争的一项重要元素便是对敌方网络武器的了解程度,这一点在本文体现的淋漓尽致。


引言

2017 3 7 日,维基解密首次在其网站对外曝光了美国中央情报局( CIA )相关资料,并且代号为 Vault7[ 参考链接 : 5] ,并且从当月直至 9 7 日每周都会对外披露其中一个项目的相关资料内容 [4] 。在这批泄露资料中,主要涉及其相关网络武器库和行动项目的代号和对应文档介绍,鲜有具体的涉及 implant (植入物)的技术实现和利用细节。

2017 4 月,国外安全厂商赛门铁克和卡巴斯基分别发布了对相关网络武器库的研究报告,其分别命名为 Longhorn[1] The Lamberts[2] 。在相关的研究报告中给出了涉及多种网络武器的命名和分类,以及其归属的关联性判断依据等,但涉及实际技术分析的内容依然很少。

奇安信威胁情报中心红雨滴团队对历史曝光的 CIA 网络武器及相关资料进行研究,并发现了多种网络武器文件,并且根据分析的结果与现有公开资料内容进行了关联和判定。并且我们还发现这些网络武器曾用于攻击中国的目标人员和机构,其相关攻击活动主要发生在 2012 年到 2017 年(与 Vault7 资料公开时间相吻合),并且在其相关资料被曝光后直至 2018 年末,依然维持着部分攻击活动,目标可能涉及国内的航空行业。

本报告是结合对具体网络武器样本的技术分析,并与公开情报中的相关资料和代号相对应起来。


网络武器

Athena (雅典娜)项目

简介

Athena (雅典娜)项目是维基解密于 2017 5 19 日披露的,其用于在 Windows 系统(从 XP Windows 10 )上提供远程信标( beacon )和程序加载的木马程序,从其功能介绍也可以推断出其更可能用于获取到攻击立足时,向目标主机植入的攻击模块,并用于加载和执行下阶段载荷。 Athena 是由 CIA 与美国本土的 Siege Technologies 公司合作开发的(后者于 2016 年被 Nehemiah Security 收购)。

我们找到了和 Athena 相关的样本文件,并且发现其就是卡巴斯基报告中提及的 Black Lambert


Loader模块

这里对样本进行分析,该样本也在卡巴报告中的 Black Lambert 中所提及,该样本曾出现在利用 Windows 字体 0day 漏洞 CVE-2014-4148 的攻击事件中。可以看到其导出函数并不是正常的字母名字,而是一个数字编号。我们也发现这一特征在多种攻击样本中出现,这也符合 Vault7 相关泄露资料中,其关于相关攻击代码的开发的约定策略。


样本运行之后首先会检测一些 windows 中的指定进程是否存在(可以看到这些都是一些比较少见的 windows 相关进程),如果存在则获取对应的 processid ,否则获取当前进程的 processid ,用于之后的注入。

其从样本指定偏移的位置读取 payload ,这个字段的偏移通过遍历节表,找到正常节代码最后的部分,该部分是一个去掉头的 payload ,获取到对应的位置后,读取其中的内容并修复对应的 pe 头,并且加载执行。


Payload模块

Loader 模块释放的 pe 文件如下所示,从该后门的函数量可以看出这是一个功能复杂的攻击模块,其入口函数为 winlib_1

其实现了非常丰富的控制指令,其中也包括一些特殊功能,如:

支持 GUI 程序的后台点击;

支持作为隧道转发工具;

使用共享命名管道实施横向移动和模块执行。

字符串解密算法

该后门对其中使用的字符串都进行了加密,每一个加密的字符串实际上是以下的格式保存的,即前四个字节保存了加密字符中 block 的个数,通过 xor key 保存,每个 block 4 个字节,通过 do while 循环中的算法解密。

控制指令

控制指令相关同样是加密存放,下面对解密后的部分重要指令进行说明:

指令

功能

cmd_at

该指令用于计划任务相关的设置。

cmd_idlewatch

该指令主要通过 GetLastInputInfo 监控机器设备的活动情况

cmd_wincontrol

通过 postMessage 向指定 gui 发送消息,结合 SendInput 鼠标左键的操作,再配合一开始设置的隐藏桌面,以实现对用户机器上任意 GUI 应用的控制。

cmd_catInstall

该指令主要通过 DCOM loader 设置 IPC$,ADMIN$ 共享的方式以实现在局域网的传播。

其中 cmd_catInstall 通过共享的方式传播下发后续的载荷,代码下发之后删除该共享,所以这里其实需要攻击者获取到相关设备的访问凭据,否则无法设置对应的共享。

关联和归属

从下图可以看到 Payload 模块实现的指令几乎涵盖了维基解密泄露的 Athena 项目文档中所提及的所有相关控制指令。这也是我们将 Black Lambert Athena 项目相关联的原因。


下阶段植入物

下阶段植入物是由 Payload 模块通过 IPC$ 共享方式下发和执行的,并且在分析过程中,我们确实找到了相关的佐证依据。

下阶段植入物为一个 dll 模块,其落地文件名可能以随机字符串文件名或伪装成网络协议相关,如 Winhttp32 winDNS winftp32 winrdp64 等。其启动主要通过两种方式:一是通过远程 IPC 管道利用 regsvr32 注册安装,二是首次在目标机器安装后,后续以服务形态执行和持久性维持。结合其启动方式特点,推测该模块主要用于内网横向移动阶段,并维持持久性。

这里我们以模块名为 winhttp32.dll 为例分析,其主要通过服务的方式启动:

将自身注册为 NativeService 的服务。

其通过命名管道的方式,和自身拷贝的子进程进行通信。

其实现了包括可以注入代码到进程,获取系统版本信息以及执行代码的三种功能。

关联和归属

在分析过程中,我们发现下阶段植入物用于运行不止一种载荷类型,其中常见的为分发运行 Fluxwire Node 模块,以及另外一种未知的执行模块。


Fluxwire Node

简介

Fluxwire CIA 为了实现 mesh networking 而创建的项目,在泄露的文档中包括了一份关于 Fluxwire Linux 版本控制端的介绍和使用手册:

通过手册内容,可以看到整个 fluxwire 是支持多个平台,覆盖了 window linux mac os 等,且支持多个指令集的平台。

从文档中可以看到 fluxwire 一直到 2015 11 月都还在更新,遗憾的是整个 fluxwire 的文档主要在说明相关的攻击端使用,对用于失陷机器上植入的木马的设计并未详细介绍,只是说明其植入的模块称为 Node


Node模块

如下所示可以看到其依赖于两个参数,这两个参数为命令行中的 argc argv Node 模块启动时确实会传入一个文件路径参数,并通常伪装成数据文件,结合 Node 模块的功能分析,我们推测该数据文件才是具体的功能核心实现。

进入 fun_Entry ,首先判断参数是否为 2 ,即是否传入了路径参数,之后读取参数路径文件中的内容,并搜索指定偏移的位置,根据该偏移进行后续的解密及倒入表的修复。

寻找偏移的算法如下,找到 0x4286A1F5 ,且其后 0x2c 0xF3D781AF 的地址。

之后调用后续的模块,由于传入的文件无法获取,因此不知道攻击的后续。

在分析中,我们发现 Node 模块通常伪装成 Netmeet.exe ,而 Netmeet 是微软在 Win95 WinXP 内置的 VoIP 程序, Vista 以后被移除。这也许就是在后续的失陷机器上我们没有找到对应伪装成 netmeet 载荷的原因之一。

关联和归属

在分析的样本中包含了一个 PDB 路径未被移除。

c:\users\bot\fluxwire-cmake\delta\mswin-x86\build\base\cmake\ddk_node\objfre_wxp_x86\i386\node.pdb

其中的 pdb 路径包含了 fluxwire node 的关键词。我们直接 google 相关关键词,可以找到泄露的 fluxwire 相关文档时间是在 2015 11 月,而我们看到的包含了 pdb 的文件却是在 2015 3 月进行的攻击,因此存在嫁祸的可能性较小。

结合文档中对 Node 启动方式的介绍:

从文档中我们可以得知其 Node 程序在 Windows 下会以 cmd.exe 或者 CreateProcess 两种方式启动。在分析过程中我们确实找到了两种启动方式的证据,而后一种启动为则是通过 winhttp32 模块启动后通过命名管道执行的。

另一种横向移动模块

在分析中,我们找到了另一个直接通过 winhttp32 模块启动的载荷,但代码实现和 fluxware node 不同。

其主函数很简单,就是一个简单的 loader

首先通过动态获取函数地址的方式,获取到 socket 相关的函数,之后通过 xor0x7F 的方式解密的对应的 cc 。通过解密我们发现 cc 只是一个内网地址,因此基本可以确定,该模块是用于攻击者已经控制了内网中的一台主机,并将其转化为了对应的 cc 节点。

下载 cc 下发的模块,经过处理后设置内存页属性,并启动。

我们在研究 Fluxwire 使用手册时,其确实是支持在内网下做更多模块下发,并且有的还支持命名管道的通信方式。由于缺乏必要的证据链,我们暂时无法猜测该模块和 Node 的更多关联性。


Gray Lambert

我们找到了几个样本和卡巴报告中的 Gray Lambert 相似,由于暂未和 CIA 已知项目联系起来,所以这里延续卡巴的命名。

Loader模块

poolstr.dll 是一个服务启动的 dll ,其可以由 winhttp32 模块启动。

其首先会读取资源,并解密。原始资源和解密后的字符串如下。

通过访问注册表的 SYSTEM\CurrentControlSet\Services ,这里应该是利用的 lanmanserver ,并写入 Parameters 下的 ServiceDll


接下来动态获取文件相关 API ,分配内存,并创建线程

从上述来看该 dll 应该是主要维持持久化的。


另一个Loader模块

msapi32.dll 同样是一个服务 dll 。其有两个资源文件:

在线程中首先解密两个资源, 1024 资源是解密释放文件的路径:

然后从 1023 资源解密 tlb 文件,并写入目标路径,最后将其运行。

我们在一个主机上看到 poolstr.dll msapi32.dll 几乎同时存在,我们推测 poolstr 是用来持久化运行 msapi32.dll 的。


Payload模块

mwapi32 是一个网络流量监控和过滤模块,是由 msapi32.dll 从资源释放加载。

其首先尝试通过驱动获取过滤的流量。该 dll 会从下图的注册表项获取 Description 值,其中存储的是驱动注册的文件名,从而实现和驱动的通信。

若不存在对应驱动,那么其采用 Windows ETW 机制来实现网络流量的过滤。其会启动 ndiscap 服务。

接着通过 etw 机制对网络日志进行监控。

其注册的监控 session 名为“ K432ISD ”加上一个 UUID 字符串。


White Lambert

在分析过程中,我们发现了多个样本与卡巴披露的 White Lambert 类似,其包含一个用户态 dll NDIS 过滤驱动。

用户态模块

该样本为一个 dll ,其导出函数如下所示,其主要功能在 DllMain 中,该样本最终加载一个驱动。可以看到部分导出名同样以数字序号的形式存在。

DllMain 中开启新线程以执行主要的功能。

样本中的主要字符串经过加密,加密算法如下,前四字节中保存了 xor 后的长度,之后按 4 字节一个 block 的模式进行解密。

之后从中解密出两个驱动,并分别加载,其中驱动的加密方式和字符串一致,并通过 RtlDecompressBufferat 解压缩,相关驱动的信息保存到一段名为 var_Driverinfo 的内存中,其中第一个加载的驱动应该是一个测试驱动,第二个驱动才是真正的恶意代码。

var_Driverinfo 格式如下所示

之后设置对应的服务注册表,并通过函数 NtLoadDriver 将对应的驱动加载运行起来。

可以看到第一个驱动为 speedfan.sys ,第二个驱动为 UNC.sys

可以看到 speedfan 实际上是一款系统监控相关的软件。

Speedfan.sys 入口如下,简单创建了一下设备及对应的设备链接,对应的 MajorFuncton 中的 dispatch 函数也只是针对系统层的调用返回一些参数,因此这个地方猜测其作用应该是作为第一个驱动先加载,以确保其能正确加载起来,再加载之后的恶意驱动。

恶意驱动如下所示,加载之后首先同样是通过和之前一致的算法在配合 RtlDecompressBufferat 解压出最终的驱动,并寻址到入口并调用。

驱动模块

这个驱动似乎并不能通过 osr driverloader 的方式进行加载,因此推测其应该有自己实现的加载器。

这个驱动本身是一个加载器,解密出的内容是一个 pe 文件,其同样是个驱动。

后续解密的驱动是一个通过 ndis 流量过滤的 rookit ,通过过滤指定的 cc 流量以实现具体的功能,函数首先通过 fun_Searchndissys 确保系统中存在 ndis.sys 驱动,之后在函数 fun_NdisRegisterProtocol 中通过 ndis 注册了一个自有的协议,通过这个的回调来过滤对应网卡中的流量数据。

如下所示, fun_NdisRegisterProtocol 中实际调用的是 NdisRegisterProtocol ,该函数用于注册一个自有的协议,其中的第三个参数中包含了对应的协议回调函数,这里奇怪的是这些回调函数似乎都没有实现,其中包含最终重要的 ReceiveHandler (表示网卡收到数据时,会把对应的流量传入到该回调函数中),这里需要注意的是,攻击者注册的自有协议名为“ KAPERSKY ”与卡巴斯基名称 kaspersky 仅一字之差。这个函数最后将 NdisRegisterProtocol 注册成功之后的 ndis 句柄给返回了。

前面说到自有协议在实现的时候并没有设置回调函数,但是事实上并非如此,通过返回的 ndis 句柄直接在内存中搜索对应的 TCPIP 字段,然后将其中的内存地址替换成具体的函数,这里猜测,应该是通过 ndis 句柄的方式搜索回调函数在内存中的位置,并手动替换(因为驱动本身是在内核中,因此是可以通过一个句柄搜索到具体的回调对象中函数指针的位置的)。

通过流量过滤出攻击这个特殊流量,解析之后通过 va_Dispitchtable 调用指定的处理函数,如下所示可以看到 THIS_IS_OUR_EOF ,这句话的意思就是“这是我们的流量”

整个样本支持的功能如下所示:

指令

含义

Copy

拷贝文件

Move

移动文件

Rename

修改文件名

Info

获取系统信息

Exit

设置退出标记

Close

同上

Quit

同上

Uninstall

卸载该驱动

Ndisls

列举自有协议信息

Dir

列目录

Ls

同上

Pwd

获取当前目录

Cd

切换目录

touch

创建文件

del

删除文件

rm

同上

Rmdir

删除目录

Mkdir

创建目录

Cat

查看文件

Type

同上

view

同上

Ps

列举进程

lsmod

加载驱动

Kill

关闭进程

Fexec

文件执行

bexec

脚本执行

Close

文件句柄关闭

of

打开文件

cf

关闭文件句柄

rf

读文件

wf

写文件


Backdoor.Trojan.LH1

我们结合 Twitter 上一条相关推文进行扩展。

根据该推文的线索进行拓展,我们发现其中一个样本被检出为 LH1 ,即为赛门铁克报告中提到的一类后门。

其注册为 BiosSrv 服务运行。

主体逻辑通过创建线程执行,并且随机休眠一段时间。

其首先从资源当中提取 C2 PFX 证书信息,其中 101 PFX 证书, 102 为域名。

PFX 证书导出 key 为空,通过“ opensslpkcs12 -in 1.pfx -out 1.key ”命令导出其中的证书和私钥信息。

然后获取主机信息,包括 Mac 地址,计算机名,以及当前用户。

创建注册表 SOFTWARE\\BiosInnovations ,生成用户 UUID ,该 UUID 会作为标识并用于后续 HTTPS 通信头部的 X-MV-Host 字段。

该模块与远程服务器域名进行 HTTPS 通信,并接收如下指令:

控制命令

功能描述

相关网络行为


初始行为,获取指令

GET /agent/checkin

get-scanner

获取扫描模块

GET /agent/get-scanner

run-scanner

运行扫描模块,并回传扫描结果

POST /agent/put-scan

回传扫描结果

exfil-file

压缩并回传文件

POST /agent/put-file

上传文件

destroy-agent

销毁



Green Lambert

Green Lambert 为可执行文件,并且与 LP Listening Post )通信。其也是唯一一个目前发现同时存在 Windows 版本和 Mac 版本的项目。

Windows版本

该样本为一个 exe ,通过分析之后发现这个样本的主要功能用于和远端的 LP 进行连接设置,同时具备浏览器相关凭据窃取及模块加载的功能。

代码的入口如下所示,首先通过函数 fun_Init 进行初始化,之后创建一个服务运行之后的主流程,服务名为 smcsrv

该样本中 fun_init 的操作中做了很多有意思的操作。

首先在 fun_getallstr 中一次解密出大量之后使用的字符串。

之后在 fun_Getconf 中解密出对应的配置文件,其中可以看到远端的 LP 配置。

fun_InitfunBlock 中按功能函数地址 + 功能字符的格式将对应的功能函数保存到一块内存中,如下所示可以看到其主要功能是设置对应的 LP 及简单的模块装载功能,其实现的指令集比 Black Lambert 少一些。

LP 通信,首次连接主要通过 .login.php getconf.php 做登陆及配置文件更新的操作。

通过 getfile.php 下载后续攻击代码。

通过 upload2.php 上传相关数据。

同时该样本通过访问 signons.sqlite 文件获取 firefox 相关的凭据,需要注意的是 firefox 2017 年之后就将相关的文件由 signons.sqlite 变成 logins.json

通过 pstorec.dll PStoreCreateInstance 函数来提取 IE 凭证信息。

使用 guid abe2869f-9b47-4cd9-a358-c22904dba7f7 ”解密保存的 IE 密码。


如下所示可以看到该样本中生成的函数结构体和 BlackLambert 也是完全一致的。

早期版本

我们还发现一个 dll 版本,其中的配置文件没有加密,猜测是早期的版本。

提取所有 Windows 版本的 GreenLambert 如下所示,第一列为配置文件中提取的样本 id ,其中红色的版本在卡巴的文章中出现过,而其他的版本则是之前未知的,这里猜测其每一个样本在攻击的行动中设定了特定的代号。


Mac OSX版本

Green Lambert 存在一个 Mac OSX 版本。

其导出表中可以看出存在诸多初始化执行的方法,其会在 main 函数前执行。其主要用于初始化一些功能函数指针和参数。

例如这里将对应的函数指针添加到一个链表中,保存在全局的指针中。

可以看到这里有个版本号信息

这里对 20 InitFunc 的接口功能进行总结:

函数名

功能

InitFunc_0

获取版本信息

InitFunc_1

通过 /etc/init.d /etc/rc.d 写入 ConfigInitdFile 维持持久化

InitFunc_2

通过写入多种 shell 的配置文件维持持久化

InitFunc_3

通过写入 XSession 相关配置文件维持持久化

InitFunc_4

从代理 URL 中解析网络代理

InitFunc_5

URL 相关解析

InitFunc_6

常量赋值

InitFunc_7

生成 UUID

InitFunc_8

从系统环境变量获取代理配置

InitFunc_9

HTTP 通信函数初始化

InitFunc_10

HTTP 通信接口函数

InitFunc_11

HTTP 代理函数初始化

InitFunc_12

本地环回接口处理

InitFunc_13

TCP 通信函数初始化

InitFunc_14

密钥链访问,实现







请到「今天看啥」查看全文