“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

时间:2022-09-13 作者:奇安信威胁情报中心

分享到:

    概述

    在报告“Bvp47-美国NSA方程式组织的顶级后门”(参考1)的描述中,Bvp47本身像是一个巨大的壳或压缩包,共包含了18个分片,盘古实验室展示了对于Bvp47后门程序的归属分析和部分技术细节的描述,比如BPF隐蔽隧道,但依然还有部分其他模块值得深入探究,这些模块既可以作为Bvp47的一部分一起执行任务,也可以被独立使用。

    在2015年对国内某国家重要关键信息基础设施的Solaris系统取证中,盘古实验室提取到了一份独立存活于Solaris平台看起来与Bvp47关系密切的样本,后经确认,样本文件内容与“影子经纪人”(TheShadowBrokers)揭露出的“饮茶”(Suctionchar_Agent)木马程序原文件一致。该木马程序搭配Bvp47中的Dewdrop、Incision等模块和控制程序tipoff,可以轻松窃取目标系统用户在执行ssh、passwd、sudo等命令时的账号密码,随即将其隐蔽保存在目标系统中。这些被加密隐藏的密码文件同样也需要RSA算法的私钥来解密。

    基于特征的入侵分析取证发现,国内大量重要组织机构受到了这个美国国家安全局(NSA)来源的“饮茶”(Suctionchar_Agent)木马程序的侵袭,其中就包括了近期披露的被网络渗透的西北工业大学。有证据显示,NSA利用“饮茶”(Suctionchar_Agent)木马程序窃取了世界各国难以确切估量的账号密码,在美国各地建立了多个高度机密的账号密码海量数据存储中心,供NSA的行动部门TAO随时查询并“合法”进入受害者的信息系统。

    追踪Bvp47的过程更像是在摸索一张迷雾下的拼图,在奇安盘古实验室与国家计算机病毒应急处理中心的通力合作下,这份报告将会通过对“饮茶”(Suctionchar_Agent)、Dewdrop、Bvp47_loader等程序和系统模块的技术分析来进一步理解Bvp47这个顶级后门平台的部分工作方式和执行逻辑。

    “饮茶”嗅探木马(Suctionchar_Agent)攻击场景还原

    攻击场景

    经过全面而深入的技术模拟分析,盘古实验室还原了“饮茶”嗅探木马(Suctionchar_Agent)与Bvp47后门程序其他组件配合实施联合攻击的场景,具体执行过程如下图所示:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    运行于内核层的sum会辅助“饮茶”嗅探木马(Suctionchar_Agent)窃取passwd、telnet、su等进程中的账号密码;

    窃取到的账号密码会同步发送给运行于Ring3的“饮茶”嗅探木马(Suctionchar_Agent);

    “饮茶”嗅探木马(Suctionchar_Agent)会将账号密码保存到名为“/var/tmp/.xxxxxxxx”的隐藏目录中;

    美国国家安全局(NSA)的攻击实施者远程发送执行ish反弹的触发包到内核层的BPF过滤程序;

    BPF过滤器捕获到特征包后传送给Ring3的Dewdrop程序模块;

    Dewdrop进行数据包解密并收到ish反弹指令,随即转送给Incision程序;

    Incision程序主动回联到callback地址,美国国家安全局(NSA)的攻击实施者利用ish接受窃取的密码文件;

    美国国家安全局(NSA)的攻击实施者将被RSA公钥加密的密码文件进行私钥解密并还原密码文件;

    场景复现

    1.运行tipoff控制端程序,功能列表如下:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    2.具体功能列表如下:

    3.支持UDP包的远程shell获取

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    4.UDP报文如下

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    5.在获取到的shell中可以看到被隐藏的进程和文件

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    6.“/var/tmp/”目录下被加密的文件如下:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    7.使用suctionchar_decode对“/var/tmp/”目录下被加密的文件解密:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    “饮茶”嗅探木马(Suctionchar_Agent)技术细节

    文件信息

    样本关联溯源发现,盘古实验室2015年提取到的样本为“影子经纪人”(TheShadowBrokers)泄漏的文件之一,即suctionchar_agent__v__3.3.7.9_sparc-sun-solaris2.9,文件相关信息如下:

    鉴于盘古实验室提取的样本本身为SPARC架构,比较少见,为方便读者理解并采取有效措施进行防范,我们选择基于x86架构、功能相同的木马程序样本进行分析,具体x86架构的文件信息如下:

    样本关联

    根据盘古实验室提取的“饮茶”嗅探木马样本(Suctionchar_Agent),研究人员从“影子经纪人”(TheShadowBrokers)揭露出的文件中找到了对应的原始文件为“linux/bin/suctionchar_agents.tar.bz2/suctionchar_agent__v__3.3.7.9_sparc-sun-solaris2.9”,二者完全一致。相关压缩包中还包含了适合多个平台和版本的“suctionchar”木马程序,文件最早可追溯到2007年:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    技术分析

    字符串解密

    如下图所见,字符串加密也就是“Bvp47”研究报告中所描述的0x47函数加密:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    解密后的字符串列表如下:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    相关解密脚本如下:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    功能模块设计

    文件“Linux\etc\opscript.txt”中对Suctionchar_Agent的功能作了相关说明,即驻留窃取SSH、TELNET、FTP、PASSWD、SU、RSH、LOGIN、CSH等程序中的账号密码信息。“饮茶”(Suctionchar_Agent)程序是这个木马程序的应用层代理,它与相关联的内核模块通信,接收所需信息并加密写入文件。内核模块sum文件(TheShadowBrokersLeaks未包含该文件)可由modload程序加载,成功加载内核模块后会清空落地的文件,防止内容被恢复:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    “饮茶”(Suctionchar_Agent文件本身既可以使用默认配置,也可以从外部读取配置文件,文件格式主要包括3.x以上版本的xml格式和早期的conf格式。

    3.x以上版本的xml格式(“Linux\bin\suctionchar_configure.xml”):

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    “Linux\doc\old\etc\suctionchar.sample.filter.conf”:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    “饮茶”(suctionchar_configure)将生成“dc9cb44a723d0e75201d933159834173“文件,该文件供Suctionchar_Agent使用:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    密码获取线程

    在“饮茶”(Suctionchar_Agent)中存在一个独立的线程,与内核模块sum保持通信,接收账号密码并写入到/var/tmp/文件夹中,即sub_8049EF0函数内部:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    回调函数sub_8049A00:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    密码保存文件的路径生成算法

    在函数get_hidden_path_0804BDF0中描述了隐藏文件”/var/tmp/.e33ff11cb8e3b4ff/a0b973925e397d9acd80e85e2eaa6e60/d5373a146ff9f200a2376054dde25677”的生成算法:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    还原的代码大致如下:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    “饮茶”木马(suctionchar_decode)程序中的私钥

    正如攻击场景一章中所描述的那样,文件“/var/tmp/.e33ff11cb8e3b4ff/a0b973925e397d9acd80e85e2eaa6e60/d5373a146ff9f200a2376054dde25677”可以被“linux\bin\suctionchar_decode”程序所解密,加密算法需要用RSA私钥解密RC6对称密钥后才能解密出文件,同Dewdrop模块中的私钥一样,这个RSA私钥也可以佐证该后门与“影子经纪人”(TheShadowBrokers)泄露数据包的关联关系。

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    Dewdropversion3.x技术细节

    Dewdrop模块承担了最主要的隐蔽后门功能,即BPF过滤功能,本章节主要讨论BPF引擎通信对应的实现过程。

    BPF隐蔽通信初始化过程

    1.BPF隐蔽后门的初始化是从函数_554a7941开始的;

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    2.其中sec_bpf_init返回了bpf_program的结构体

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    3.stru_8008300结构具体值如下:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    4.bpf_program和bpf_insn结构分别如下:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    5.经过bpf反汇编过后的代码如下:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    6.实际运行时的bpf伪代码如下,即满足该规则的payload数据会被捕获进入到下一个处理流程;

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    BPF隐蔽通信数据处理过程

    在满足BPF的捕获规则后,数据包会进入下一个流程来进行处理。

    1.在函数sec_f_9b510b03中可以看到Dewdrop使用select模型来处理对应的数据包

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    2.sec_f_6a42f4c9_allinone执行伪代码如下:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    3.在sec_decode_packet中就开始了payload数据包的解密工作,内部涉及到一处作了变形处理的RSA解密算法。

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    BPF隐蔽通信数据格式与加密算法

    1.Dewrop模块v3系列的载荷(payload)数据包格式如下:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    2.tipoff中对Dewdrop模块的载荷(payload)数据包流程如下:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    3.payload数据包中的RSA数据加密

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    Bvp47_loader技术细节

    loader模块的入口函数图具体如下,中间会涉及到:

    1.检测运行时环境是否正常;

    2.读取文件尾部的payloads;

    2.映射和校验payload有效性;

    4.解密payload,如果需要解密;

    5.解压缩payload,如果需要解压缩;

    6.装载内核模块;

    7.调用通知隐藏内核模块的ELF文件头;

    8.fork执行Dewdrop模块后门;

    9.fork执行“饮茶”(Suctionchar_Agent)程序后门;

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    字符加密函数

    在样本分析过程中,首先需要处理应对的是一系列的字符串加密函数,共8处。

    1.异或0x47函数类型1:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    2.异或0x47函数类型2:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    3.变序加密函数:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    4.异或0x47函数类型3:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    5.异或0x47类型4:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    6.异或0x47

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    7.加密函数

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    8.异或0x47函数类型5

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    载荷(payload)相关的加密方式

    载荷(payload)在被装载过程中主要有5种解密方式。

    方式一:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    方式二:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    方式三:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    方式四:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    方式五:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    载荷(payload)解密流程

    如前面所见到的main函数主体流程,载荷(payload)解析过程是一个相对复杂的循环体流程,且伴随了诸多加密对抗。

    映射和加载:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    解析流程:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    涉及到的解压缩流程:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    linux_gzip函数:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    linux_gzip_inflate_fixed函数:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    linux_gzip_inflate_dynamic函数:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    linux_gzip_inflate_codes函数:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    linux_gzip_fill_buf函数:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    linux_gzip_huft_build函数:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    整体抽象出来的大致C语言代码如下(未能完全覆盖):

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    已知的payload文件格式如下:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    在实际样本运行过程中,在上述Decode回调调用过程中也会直接开始尝试加载so类型的文件:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    在试图加载后也会去尝试补丁elf文件格式的plt:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    Bvp引擎初始化与内核模块加载

    内核模块的解密与加载也会在main流程里执行,会经历如下的几个步骤:

    1.解密payload包;

    2.初始化Bvp引擎,适配对应内核版本结构;

    3.开始尝试装载ko模块,主要用于进程、文件、网络的隐藏等;

    具体如下:

    1.尝试解密ko的payaload;

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    2.Bvp整体处理函数;

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    对应的伪代码:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    3.Bvp引擎的初始化serial_bvp函数

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    对应的伪代码:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    4.serial_bvp流程

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    5.加载第一个模块qmr

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    6.校验发行版:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    7.该发行版对应了TSB中的版本:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    8.校验2:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    9.内核模块加载时的参数验证1:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    10.内核模块2加载时的参数验证2:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    11.最终开始装载内核模块:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    自删除的一种绕过手段

    在main函数中有2处unlink函数的调用,实际调试过程中可以暴力修改流程绕过unlink所出现的自删除:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    基于Hash的API函数调用

    在Bvp47的运行过程会有制作一张类似作基于Hash值的API函数查找的查找表。

    1.面对如下的一张Hash表;

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    2.在sub_804C2E0函数中尝试初始化

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    3.在serial_bind_0x7bbf2c88_函数中进一步初始化

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    伪C语言代码:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    部分shellcode

    在loader模块中还有部分是部分不太完整的加密ELF文件,经过解密后是几个shellcode形式的代码。

    1.对应的ELF头部格式定义如下:

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    2.中间的几段shellcode会互相跳转

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    3.共6段shellcode

“电幕行动”(Bvp47)技术细节报告(二)——关键组件深度揭秘

    结论

    “饮茶”嗅探木马(Suctionchar_Agent)程序的功能专一,综合分析Bvp47_loader、Dewdrop等模块可以看出,“电幕行动”(Bvp47)在设计上体现了良好的架构能力。美国国家安全局(NSA)的攻击实施者可以通过Bvp47各个功能模块的灵活组合,隐蔽完成攻击任务,同时大幅降低该木马程序的暴露几率。尽管美国国家安全局(NSA)实施的攻击窃密活动具有高度的隐密性,但盘古实验室通过自有数据视野范围内的分析取证材料,结合对来源数据的深度挖掘,仍然完整地还原了世界顶级黑客组织“方程式”的攻击窃密手法。

    通过现有证据可以断定,遍布国际互联网的无数服务器和网络终端,以及交换机、路由器、网关、防火墙等设备,正在被美国国家安全局(NSA)的“饮茶”嗅探木马(Suctionchar_Agent)类似程序实时监测,数以亿计的账号密码被窃取并存储到美国国家安全局(NSA)的数据库中,变成你工作生活中的重大安全隐患。

    参考

    1.Bvp47-美国NSA方程式组织的顶级后门

    https://www.pangulab.cn/post/the_bvp47_a_top-tier_backdoor_of_us_nsa_equation_group/

    2.TheShadowBrokers:x0rz-EQGRP

    https://github.com/x0rz/EQGRP/blob/master/Linux/up/suctionchar_agents.tar.bz2

    4.jtcriswell/bpfa

    https://github.com/jtcriswell/bpfa

    5.bpf-asm-explained

    https://github.com/Igalia/pflua/blob/master/doc/technical/bpf-asm-explained.md

    6.cloudflare/bpftools

    https://github.com/cloudflare/bpftools

奇安信 95015网络安全服务热线

95015网络安全服务热线

扫一扫关注

奇安信 在线客服 奇安信 95015

您对奇安信的任何疑问可用以下方式告诉我们

将您对奇安信的任何疑问

用以下方式告诉我们