大家好,我是ABC_123。在2023年写了几篇关于美国国家安全局的TAO(特定入侵行动办公室)APT案例分析,并初步介绍了量子注入攻击手法。国外泄露的关于美国APT组织的文档反复提到一款远控,名叫UnitedRake联合耙,ABC_123一直对其十分感兴趣,但是国内外关于其介绍非常少。于是ABC_123收集了大量资料并仔细研读,最终大致弄明白了它的主要功能和设计思路,今天就把我的理解和分析写出来分享给大家。
注:翻译国外的APT分析文章有时候会非常困难。一些单词如server、control、implant、client等在不同的语境中的含义是不同的,所以需要反复推敲琢磨;有些美国NSA的文档会提到一些插件模块、小工具、小脚本等,但是都缺少详细的功能描述。综上所述,文章难免有疏漏之处,欢迎大家批评指正。
为了让大家有一个直观的认识,首先给出这款远控的图形界面,功能特别繁杂,很多细节考虑特别周全,接下来慢慢给大家介绍。
UnitedRake系统,国内将其翻译为联合耙,国外将其简称为UR。UR远控主要由5个子系统组成:服务端、系统管理界面(SMI)、数据库、插件模块和客户端。
服务端:UnitedRake服务端也被称为LP监听站(Listening Port),主要用于接收客户端的反向连接请求,管理客户端(client或implant)与其他子系统间的通讯。UR服务端功能非常复杂,但经过美国NSA的良好的设计和改良,一旦安装成功并不需要太多的人工干预。
系统管理界面:系统管理界面(SMI)是UnitedRake的图形界面,也被称为UR GUI。攻击者可以通过该界面直接查看客户端client的状态,给客户端下发指令,管理插件模块和对客户端的配置进行调整。
插件模块集:插件模块是整套UNITEDRAKE系统最核心的功能,UR服务端对于客户端的操控,主要通过下发这些功能插件模块完成。一个完整的插件模块由一个或多个客户端插件、一个或多个服务端插件、一个或多个系统管理界面控制组件组成的;这些插件可以根据项目需要进行选择安装。
数据库:UNITEDRAKE系统的数据库主要为SQL Server数据库,也可以是支持OLE DB接口的任意数据库源。主要用于存储和管理以下信息:系统配置信息、客户端配置信息、各类状态信息、日志信息等。
客户端:客户端程序(有时候也被称为植入物implant),就是联合耙远控在目标机器植入的隐蔽的后门模块。主要支持以下功能:向服务器发起初始连接、执行客户端插件模块的命令、回复“tipoff”的敲门请求。
用户可以按照自己的需求灵活进行配置,可以将服务器、数据库和SMI界面安装在不同机器上,也可以安装在同一机器上。服务端提供了一个COM接口,其它系统模块可以使用这个接口向服务器请求服务,并从服务器接受通知事件。如果服务端与SMI没有安装在同一机器,可以通过dcomcnfg将服务端配置为“远程激活”模式。不同机器上的SMI可以通过使用分布式组件对象模型(DCOM)操作服务端,进而对同一个客户端client进行操作。数据库服务器与UNITEDRAKE服务器之间的关系是“1对n”。此外,UnitedRake支持多国语言环境,强大的日志功能可帮助攻击者诊断日志和排除故障。
攻击者可以使用Windows安装包(URServer_win32_4.06.xx.xxxx_setup.exe)安装服务端和数据库。在安装过程中,程序会创建一个数据库账号“urservices”和一个复杂的密码,系统会定期提示更改连接密码。这个账号被用来配置服务端的安全设置,官方建议不要使用该账号进行数据库的连接。攻击者可以根据服务端提供的小工具svrdbconfig.exe(桌面的UR服务数据库配置图标)对数据库的配置进行更改。
在启动UR图形界面之前,需要双击桌面的“UR Server DB Config”图标,配置连接到SMI的数据库。
默认情况下,UR服务端必须开启一个HTTP端口或者TCP端口才能启动。服务端会提供一个NT服务,并提供COM接口供其它子系统调用,攻击者可以使用Windows系统的SCM服务管理器及dcomcnfg程序对COM接口进行配置。如下图所示,双击“URServer”服务选项,会弹出一个对话框供攻击者进行调整。
为了对UR服务端进行各种配置,UR系统提供了一个图形界面化的UR服务端管理器,该工具隐藏在桌面任务栏管理器的托盘图标,被称为“小绿人”。
如下图所示,在“小绿人”托盘图标处点击右键会弹出一个图形界面,攻击者可以启动服务、开启服务、刷新服务等,可以对UR数据库进行配置更改。在“Transports”标签下,可以配置监听端口列表,默认情况下,443端口用于监听TCP/IP连接,80端口用于监听HTTP请求连接。
如果服务端开启了HTTP协议的监听端口,比如说80端口,在接收到错误的或者畸形请求包,那么UR服务端会依据不同情况返回不同的html页面,诱骗目标以为是正常网站的返回请求。为了实现这个功能,研发人员做好了几个网页文件,放置在UR服务器的指定目录,这些页面的标题和文件位置存储在注册表中。注册表的位置主要在HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\UnitedRake\Transport\HTTP(HTTP Transport)
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\UnitedRake\Transport\HTTP
注册表的值含义如下:
WebRoot - 所有网页存放的目录。默认就是服务端安装目录中的webroot目录,放置在“webroot”目录中的任何文件都将作为网页可用。
Error 400 - 遇到错误400时返回的页面的文件名。默认情况下,这是\ERROR400.html。
Error 404 - 遇到错误404时返回的页面的文件名。默认情况下,这是\ERROR404.html。
Error 501 - 遇到错误501时返回的页面的文件名。默认情况下,这是\ERROR501.html。
ServerName - 返回“Web服务器”的指纹信息。默认值为“Microsoft - IIS/6.0”。
MaxSimConnections - 允许的最大连接数,默认为600。
WaitForDataDelay - 展示页面前等待的毫秒数。默认值为2000ms。
SMI也通常被称为UR GUI(UnitedRake远控图形界面),攻击者可以通过SMI操控服务端向UR客户端Client下发任务指令。图形界面提供了各种视图,方便攻击者查看UR客户端的运行状态。
Targets面板提供了类似于Windows资源管理器的树状结构,可以把相似的目标机器放到一个组中,Targets面板每60秒刷新。注意看界面中的FoxAcid组,这就是ABC_123曾经介绍的美国“酸狐狸攻击平台”的英文名字。United Rake是一个名称不能更改的默认组,包括_All Targets、_New Targets、_Orphans三个自带的默认组,而且不可删除。_New Targets用于存放那些之前不属于_All Targets组的但是新加入的Client机器,只要该组下边有新加入的机器Client,那么该组的字体就会显示粗体,以引起攻击者的注意;_Orphans为“孤立组”,如果SMI检测到目标Client的父组不存在或者没有指定,将会把目标归类到这组中。在相应的组点击右键,会弹出“Find Target”菜单搜索目标。
信息输出窗口位于软件界面的底部,包括4个选项卡,分别是“系统状态信息”、“控件状态信息”、“初始任务队列”、“服务端传输信息”。其中“控件状态信息”包括每个单独用户界面控件的信息;Initial Contact Queque中存放着客户端client首次连接到服务器时的需要执行的任务队列(插件任务队列),攻击者可以点击右键菜单,对这些任务列表进行管理。大部分的信息都储存在日志文件当中,但服务端传输信息“Server Transport Messages日志量非常大,因此默认是关闭的,用户可以使用“Options”菜单的功能开启。
“FIle”菜单栏中的“Load Targeting Info”可以从一个指定的XML文件中导入目标Client的标志符。“Collection Management”子菜单由“Set Client As Denied”和“Manage Collection Status”组成,可以指定哪些客户端是拒绝连接的。每个客户端在植入后门的时候,都会被分配一个唯一的id标志符。当这些client后门尝试连接时,会将自带的id标志符发送到UR服务器上,如果UR服务器发现该id标志符在拒绝列表中,会拒绝连接并且不会在日志中进行记录。当然也可以手工添加要拒绝连接的Client ID,是16进制格式的,而且去除0x。
每个客户端Client的视图界面由多个标签页组成,每一个标签页代表一个“控件control”,一个“control”可以理解为一个或者多个插件模块收集的客户端信息。如下图所示,第一个标签页是“Client Information”客户端信息控制选项卡,用于展示和设置UR客户端信息和客户端的连接状态,用户可以随时修改client客户端状态信息,这些修改都会同步到UR数据库中。其它的包括“Client Configuration”、“Remote Modules”、“Connections”等等。“Remote Modules”选项卡,展示了安装的所有的插件模块状态信息。
UR的操作围绕一系列可动态加载的服务端和客户端插件模块展开。“Remote Modules”界面允许操作者获取目标机器的状态信息,加载新的插件模块或者卸载存在的插件模块。如下图所示,UR客户端会显示所使用的持久化方法,“Remote File Name”处有Killsuit,一个主机可以运行多个killsuit实例,每个实例可以托管运行一个恶意工具(对于加载器是KSLA,对于SOLARTIME是SOTI,对于JUSTVISITING是JUVI)。点击右键可以对插件进行操作:刷新插件列表、列出当前所用的插件列表、安装插件、升级插件等。
Dialog对话框显示了当前客户端所支持的插件模块。Architechure的值是9,代表是64位的插件模块;标志值是0,代表是32位插件。
点右键移除某个插件时,如果有其它插件的使用是依赖于当前被移除的插件,那么会弹出一个提示框,并给出受影响的插件列表。
在Client视图下边是client正在运行的任务列表,这些任务都是可配置的,显示了命令ID、运行状态、执行的命令,命令参数、提交时间、开始时间、完成时间、执行命令的模式、命令的优先级、错误等等。在每个任务上双击,可以查看该任务的详细信息。
在该窗口下,点击右键会弹出以下菜单,可以调整执行任务的优先级,也就是调整任务执行的先后顺序。优先级可以被更改为紧急、高、中、低,数字值越低,越优先被执行。攻击者也可以对任务进行取消,指定任务在一段时间后才可以执行。
这里比较有意思的一个功能是“Next Connection Mode”,用来指定Client客户端执行命令的方式。它包含4种模式:Batch(批处理)、Restricted(受限模式)、Interactive(交互模式)、Batch/Interactive(批处理/交互模式)。
1 Batch批处理模式。所有命令都被提交到批处理队列,并且按照顺序执行,然后客户端断开连接。
2 交互式模式。所有的交互式命令都会被执行,然后客户端保持在线,一直等待执行攻击者新提交的命令。
3 批处理/交互模式。所有的命令都会被执行,但是客户端一直保持在线,攻击者此时仍然可以提交新的命令。
4 限制模式。与批处理模式类似,但是只有优先级为1-99的命令才会被发送到目标执行。这种模式下,Gui界面的命令的优先级是75,因此用户可以暂停正在执行的批处理命令,以完成特定的需求。
连接超时:默认值是1个小时。当UR客户端以批处理模式连接时,超过这个时间会强制断开连接,未执行完的任务会放在队列中。当client以交互模式连接的时候,如果超过1个小时未提交命令,UR服务器同样会断开连接。
空闲时间:默认值是5分钟。空闲计时器用于保持目标连接到LP监听器的最短持续时间。当队列任务执行完成后开始计时,如果在计时时间之内有新的任务提交,则会重新计时。此功能是为了支持通过Turbine(美国NSA量子注入攻击系统的重要组件)进行的任务。理论上在5分钟空闲时间耗尽之前,UR客户端到LP的连接记录将会通知到Turbine系统,目标是让Turbine赶紧处理先前任务的结果,并根据这些结果提交新任务。
UR远控提供了一个模拟系统正常用户去执行命令的功能。攻击者选择“Impersonate Current User”,远控将会自动选择系统第一个登录的用户的会话令牌去执行命令(部分版本的Client会选择当前在线的用户的会话令牌);攻击者选择“impersonate Particular User”,需要填入域用户的账号密码,或者系统用户的账号密码,系统会尝试登录,然后获取会话令牌模拟该用户去执行命令。
在URServer服务的同时,ur.sys驱动程序也被安装,主要用于管理客户端的“tipoff”连接。“联合耙”系统支持一种名叫tipoff的初始化连接的概念,攻击者可以指定一台服务器向目标客户端发送一个“敲门请求”,这个请求可能是53端口的DNS请求的UDP数据包,里面指定了需要反弹的目标ip及端口。客户端收到这个请求之后会按照给定的时间进行反向连接。这里的“敲门请求”功能非常强大,支持端口复用,支持TCP协议、UDP协议、ICMP协议,攻击者还可以对数据包的TCP标志位、TCP窗口、ICMP类型值等进行深度设置。
如下图所示,Client Sender ID将会向135.2.8.69的53端口(可以端口复用)发送敲门请求数据包,Client接受到请求并处理,反向连接到135.2.8.76的443端口。其中,“Client Sender ID”用于指定由哪一个主机发送敲门请求。这种操作隐蔽性非常高,日常几乎很难发现这个异常流量。Tipoff请求的优先级是最高的,无论是server端还是client端,都会立即执行。
Diffed from LP time选项指定了反向连接到LP监听站的时间。如果超过这个时间,client将立即连接;如果还有5分钟才到时间,那么client会在5分钟后反向连接到LP监听站。
在这个界面下,“Get Current Parameters”将会下发一个任务从client端获取所有敏感信息。“Advanced Configurations”可以用来展示隐藏的一些不常用的参数设置。“Diagnostic Information”可以用来设置implant的日志记录功能。一旦开启日志记录功能,在%SYSTEMROOT%目录会创建一个名为~yh56816.tmp文件,这个文件会在14天之后删除,或者在大小超过256k的时候删除。“Implant Self Destruct”是client自删除功能,在内存中的组件会一直到系统重启才会清除。
“Restrict Callback Times”选项。用于控制client客户端,在一个周的指定哪几天允许连接,也可以设置禁止连接,而且可以设置每一天的开始时间和结束时间,这个时间根据受害公司的员工办公时间进调整。
“Next Connect Time”选项。指定了下一次连接的时间,并提供了客户端时间和服务端时间两种参考。如果这个时间没有设置或者已经过期,那么Client将会自动参考“Modify Callback Interval”的时间去确定下一次的连接时间。
“Data Transmission Throttling”选项。暂时翻译为“数据传输节流”,该值用于控制在每一个指定的时间片段内client发出的最大传输字节数,将任意值设置为0将禁用该功能。
“Backoff Configuration”选项。用于控制失败连接尝试之间的时间间隔,由退避乘数(Backof Multiplier)、退避增量(Backof Delta)和退避最大值(Backof Maximum)按照一个公式I(t) = I(t-1) * 乘数 + 增量进行控制。一旦失败次数达到最大值,将使用默认的服务器地址和端口进行反向连接,而且使用相同的算法。
调整好这些参数之后,点击“Upload New Parameters”按钮会向client下发一个指令,这些参数的更改将会在client的下一次连接产生作用。
其它界面的功能包括:“Connections”选项卡Up time是建立连接的时间;“Down Time”是终止连接的时间;Target net Adress是客户端ip;Target ISP Net Address是互联网服务商的ip地址;LP Address服务端的ip;“Bytes Sent”向客户端发送的数据总量;“Bytes Received”从客户端接收的数据总量;Commands Submitted是发送的待执行命令的数量;“Command Completed”是完成的命令数量,无论是成功还是失败;“Connection Time”客户端连接时长。
UnitedRake可以根据需要添加客户端与服务端之间的传输通道,支持TCP、HTTP和触发器连接。如下图所示,该客户端Client展示了在80、443端口使用了不同的服务器ip
该功能也提供了右键功能菜单,“Reload From Database”从数据库中重新创建传输列表,
使用“Add New Configuration”功能将会允许攻击者添加一个传输通道:如下图所示,为主机135.2.11.85的80端口添加HTTP传输配置,整个过程还可以设置代理程序,包括代理的用户名及密码。在使用操作系统堆栈的时候,除80以外的端口将会触发安全防护软件PSP的告警。
“Add New Trigger Packet Configuration”允许用户自定义TCP、UDP、ICMP数据包,UR将会按照列表库中通道的顺序依次发送数据包,
1. 美国NSA的后门设计隐蔽性做得非常好,对于后门的连接时间的设计,细粒度很高。
2. “tipoff敲门请求”这种方式在美国NSA的各种武器库中非常常见,支持端口复用,支持多种协议。
3. 美国NSA的并不热衷于把各种后门的功能全部集中到一个工具中,它更多的是模块化设计。将各种小功能做成插件模块,同时可以适配不同的美国NSA网军的武器系统。
4. UnitedRake联合耙后门与我们常见的远控后门工作模式不太一样,大家可以把我这篇文章多看几遍,相信就能理解了。后续ABC_123会继续介绍UnitedRake联合耙远控的使用方法,敬请期待。