攻击中使用的主要函数
上一篇文章中我们对北极星(NorthStar)攻击流程进行了介绍,今天我们就对攻击中使用的主要函数进行分析。
根据研究人员的分析,Torisma代码是一种自定义开发的植入程序,专注于专门的监测。
Torisma的作用是监控添加到系统中的新驱动器以及远程桌面连接,这似乎是一种更加专业的植入程序,专注于对受害者系统进行主动监控,并根据监控的事件触发有效载荷的执行。 Torisma的最终目标是在受害者的系统上执行shellcode,并将结果发送回C2。
Torisma代码首先运行一个用于收集信息的监控循环。
信息收集循环
一般流程
它运行监控例程,但是将首先检查是否基于配置启用监控(默认情况下禁用)。此过程的一般逻辑如下:
如果禁用监控,请返回;
否则调用执行监控的代码,并在完成后暂时禁用监控;
运行时,将根据配置值在指定的时间内执行监控;
返回监控函数后,代码将继续进行命令和控制通信;
如果通信反复失败,植入程序将强制监测1小时,然后重试通信;
永远重复;
根据配置触发监控
监控方式
监控循环将使用GetAdaptersInfo检索WTSEnumerateSessionsW的地址和本地mac地址。
该代码将循环执行,直到经过足够的时间(结束时间已通过参数)或发生感兴趣的事件为止。
监控循环
它将监控逻辑驱动器和远程桌面会话(RDS)数量的增加。如果出现任何一种情况,将设置状态代码(5.新驱动器,6.新RDS会话),并且监控循环停止。
移动追踪
它使用GetlogicalDrives来获得系统上所有可用驱动器的位掩码,然后遍历每个可能的驱动器号。它还将使用GetDriveType来确保新的驱动器不是CD-ROM驱动器。
检查驱动方式
它追踪之前看到的驱动器数量,如果数量增加了,它将返回1。
RDP会话追踪
RDP会话追踪函数的操作与驱动器追踪相同,如果数字增加1,则返回1。它使用WTSEnumerateSessionsW获得一个会话列表,通过迭代这些会话来计算活动会话。
获得活动的RDP会话
继续进行有效的RDP会话
指挥控制通信
C2代码很有趣,是一种自定义实现,此协议的一般流程如下。
生成一个连接ID,该连接ID将在整个步骤中保留为每个模块(0x63)的五个随机字节的十六进制字符串,并随GetTickCount64的输出随机植入。
生成连接ID
接下来,它加载一个目标URL,在植入程序中将三个可用的服务器硬编码为加密的Blob,使用带有硬编码密钥ff7172d9c888b7a88a7d77372112d772的VEST-32加密算法完成解密。
配置解密
选择一个随机的配置号(mod 6)来选择这个配置。
只有3种配置可用,如果选择的配置数大于3,它将继续递增(mod 6),直到其中一个被选择。由于这个过程,配置0更有可能被选择。
选择配置的代码
它将通过一个“VIEW”操作向从配置中检索到的URL发送一个POST请求,它使用以下硬编码的格式字符串构建请求。
进程将寻找你的请求已被接受的字符串的返回,ClientID: {f9102bc8a7d81ef01ba}表示成功。
如果成功,它将通过POST请求从C2检索数据,这次它将使用PREVPAGE操作。
它使用以下格式字符串的POST请求。
从服务器接收到的回复被加密,要解密它,需要以下过程。
1.用+替换空格;
2.Base64解码结果;
3.使用“ff7172d9c888b7a88a7d77372112d772”密钥解密数据;
使用密钥进行服务器解密
对数据进行异或处理
对数据进行异或处理
解密后的数据将用于从服务器执行shell代码并发回数据;
来自服务器的数据将被分割成执行的有效载荷和作为参数传递给它的数据;
从服务器发送的部分数据Blob用于更新用于监控的本地配置;
前8个字节被提供给一个add+xor循环,以生成一个与硬编码值相比较的转换版本;
配置检查
继续配置检查
如果转换后的数据匹配这两个硬编码值中的任何一个,则更新本地配置。此外,服务器可以更新观察(对于驱动器/RDS)循环的持续时间。如果持续时间超过0x7620(21天),那么它将重新启用监控,即使上面详细介绍的配置已经禁用了它。如果转换后的数据不匹配这两个硬编码值中的任何一个,则配置将禁用监控。植入程序将创建一个新的通信线程,并将等待其通知继续。然后它将继续执行shellcode,然后等待另一个线程终止。根据所发生的情况(发生错误或启用/禁用监控),代码将返回一个魔法值,该值将决定代码是否需要再次运行或返回到监控进程。
返回通信循环
通信线程将创建一个新的命名管道(用于与shell代码通信)。一旦管道准备就绪,它就通知另一个线程,然后继续将从管道读取的数据发送到服务器。管道名称为\\.\pipe\fb4d1181bb09b484d058768598b
命名管道代码
它将从管道读取数据,(如果发现“- - - - - - - - - - -”,则将处理标记为完成。
然后,它将以以下格式发送一个POST,将读取的数据发送回C2。
数据按照与之前相同的模式进行加密,首先对数据进行XORED,然后使用VEST-32和以前相同的密钥进行加密,这将重复,直到有效载荷线程发送“- - - - - - - - - -”消息或发布失败为止。
攻击活动识别
攻击者使用活动ID来追踪哪种受害者感染了哪种版本的第一阶段植入程序,这些ID硬编码到第一阶段maldoc检索到的模板文档文件的VB宏中。
如前所述,它们通过NED参数发送到后端服务器,然后由ASP代码读取和解释。
受害者研究
根据Inc-Controller-News.asp的原始访问日志,可以了解哪些国家受到了影响,并且与研究人员在另一个.asp页(view.asp)中发现的日志相匹配,具体原因在后面解释。
根据其中一个C2日志文件,研究人员可以确定有关受害者的以下信息:
俄罗斯国防承包商;
两个以色列ISP地址空间中的两个IP地址;
澳大利亚ISP空间中的IP地址;
俄罗斯ISP地址空间中的IP地址;
印度国防承包商;
Template-letter.asp
在调查过程中,研究人员发现了导致发现其他ASP页的其他信息。在同一台受感染的命令和控制服务器上发现的一个ASP页包含有趣的代码。首先,该ASP页使用VB.Encode以相同的方法进行编码,就像研究人员在提供Torisma植入程序的代码中观察到的那样。其次,该代码似乎是由攻击者管理的核心后端的一部分,并且具有原始文件名board_list.asp。基于野外提交数据,文件board_list.asp首次出现在2017年10月的韩国,这表明此webshell的代码自2017年以来一直在使用。
此外,此ASP页面是一个自定义的webshell,根据研究人员的知识和消息来源,它不是现成的通用webshell,而是专门用于这些攻击的东西。其中一些动作包括浏览文件,执行命令,连接数据库等。向攻击者显示登录页面,可以使用默认的base64编码密码' venus '登录(该值在该页的源代码中被硬编码)。
Template-Letter.ASP主页
执行命令的函数
VIEW.ASP -Torisma后端
此外,此ASP页面是一个自定义的webshell,根据研究人员的知识和消息来源,它不是现成的通用webshell,而是专门用于这些攻击的东西。其中一些动作包括浏览文件,执行命令,连接数据库等。向攻击者显示登录页面,
view.asp文件在代码中包含以下引用:
文件“ FOUND001.CHK”包含一个“日志文件”,因为CONST值名称可能引用“logvault”。
通过分析可能的受害者,研究人员发现了一个有趣的名单:
俄罗斯国防承包商;
两个以色列ISP地址空间中的两个IP地址;
俄罗斯ISP地址空间中的IP地址;
印度国防承包商;
文件“ FOUND002.CHK”包含一个Base64字符串,该字符串解码为:
hxxps://www.krnetworkcloud.org/blog/js/view.php|www.krnetworkcloud.org|2|/blog/js/view.php|NT
鉴于该域名属于一家印度it培训公司,该域名很可能被用来托管恶意代码。
“FOUND002.CHK”的Const值名称为“cfgvault”,前三个字母可能表示“配置”。该ASP代码包含其他函数,这些函数可能指示此页面在整体情况中所扮演的角色。 View.asp是Torisma植入程序的后端代码,具有许多函数,可实现处理来自植入程序的请求,如上所述。根据研究人员对Torisma植入程序和此后端代码的分析,发现了一些有趣的见解。首先在ASP代码中实现的是此后端根据与Torisma的交互可以采取的常规操作。
其中一些动作是由植入程序连接触发的,而其他动作可能是由另一个过程调用的。 ASP主页面实现为根据请求ACTION处理进入的请求,并带有多个可能的调用选项。假设在进行C2通信时,植入程序是由“ACTION”方法驱动的,则可以选择许多这种情况。但是,研究人员仅看到在Torisma中实现的代码来调用和处理NEXTPAGE和PREVPAGE的请求/响应机制,因此攻击者可能会通过其他过程来执行这些其他操作。
View.ASP的常规操作
ViewPrevPage
如分析中所述,ViewPrevPage操作是一个用于处理来自Torisma的传入请求以获取数据的函数。发送到Torisma的数据显示为~dmf文件的形式。ViewPrevPage操作的内容以shellcode的形式出现,目的是根据对植入程序本身的分析在受害者端执行。
ViewPrevPage函数
ViewNextPage
Torisma使用这个方法将从指定管道读取的数据发送回C2服务器,这是通过ViewPrevPage操作在受害者系统上执行shellcode的结果,并且使用此函数发送和处理了执行结果。
植入程序将数据发送到C2
ViewGallery
Torisma中没有实现直接调用该功能的函数,它可能从另一个管理工具调用,可能是在上游服务器中实现的。对该方法的静态分析表明,它可能用于检索base64编码格式的日志文件并编写响应。类似于Torisma植入程序,调用组件会收到一个响应字符串,该响应字符串指示已成功检索日志文件,然后应删除该日志文件。
以base64格式检索和写入日志文件内容(ViewGallery)
ViewMons
Torisma也不使用的另一个函数是设置本地配置文件,似乎使用了与ACTION不同的请求方法。在这种情况下,它使用MAILTO。根据从Torisma收集的见解,研究人员可以推测这与植入程序使用的配置文件有关。
ViewMons函数
SendData
此函数专门用于RedirectToAdmin方法中,并且是用于将数据发送到上游C2的机制,它取决于基于cfgvault变量中存储的值的GetConfig函数。
SendData函数
RedirectToAdmin
此函数用于将受感染受害者的信息重定向到上游的主服务器。这是一个有趣的函数,表明除了研究人员观察到的Torisma通信的直接C2之外还有其他基础设施。
RedirectToAdmin
WriteAgentLog
在使用Torisma追踪受害者的过程中,ASP代码具有写入日志文件的函数。这些生成的日志文件表明在运行Torisma的受害者上成功执行了Shellcode。此日志记录方法捕获与受监控的受害者关联的用户代理和IP地址。通过RedirectToAdmin方法将信息发送到主服务器时,将调用此函数。
对服务器日志的分析表明,以下国家/地区在2020年7月连接到View.ASP页。
印度
澳大利亚
以色列
芬兰
Webshell
在研究人员的分析中,研究人员能够确定在某些情况下攻击者使用webshell来维护访问。在另一个被攻击的服务器上,同一个攻击者用相同类型的代码发现了一个名为Viper 1337 Uploader的PHP Webshell。基于研究人员的分析,这是Viper 1337上传者的一个变体。
一些附加的日志文件分析显示,扩展名为a. jpg的dotm文件被一个以色列IP地址访问。这个IP地址可能属于一个在以色列执行主DOCX的受害者。根据对属于以色列IP地址 Microsoft+Office+Existence+Discovery的user-agent字符串的分析,表明问题中的dotm文件是从Microsoft Office内部下载的(模板注入)。
攻击源
根据研究人员的分析,攻击者访问并发布了一个恶意的ASP脚本“模板信”。来自IP地址104.194.220.87,日期为2020年9月7日。进一步的研究表明,攻击者起源于纽约州称为VPN Consumer的服务。
从显示攻击者IP 104.194.220.87的日志文件中删除
在相同的日志文件中,研究人员观察到以下用户代理字符串:
“Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+10.0;+Win64;+x64;+Trident/7.0;+.NET4.0C;+.NET4.0E;+ms-office;+MSOffice+16)”
对用户代理字符串进行解码后,研究人员可以得出以下结论:攻击者使用的是64位Windows 10平台和Office 2016。
Office版本与研究人员在操作NorthStar的文档分析部分中描述的Word文档创建中观察到的版本相同。
总结
研究人员很少有机会获得C2服务器代码页和相关的日志来进行分析,从研究人员对第一阶段有效载荷的初步分析开始,逐层地解码和揭示,从而获得对该攻击活动的独特分析结果。
通过对日志文件的分析,研究人员发现了一些潜在的目标,这些目标是研究人员在对北极星行动进行第一次分析时没有发现到的,包括互联网服务提供商和设在俄罗斯和印度的国防承包商。
研究人员的分析揭示了一个以前未知的称为Torisma的第二阶段植入程序,该植入程序根据特定的受害者配置文件执行自定义的shell代码以运行自定义攻击行动。它还说明了在长达一年的行动中,攻击者如何利用意大利和其他地区(属于诸如拍卖行和印刷公司之类的随机组织)的被攻击域来收集有关多个国家的受害者组织的数据。
这个攻击活动的有趣之处在于,有一个特定的目标列表,而在决定发送第二个植入程序(32位或64位)以进行进一步和深入的监测之前,该列表已被验证。C2发送的植入程序的进展被监控,并写入一个日志文件,让攻击者了解哪些受害者被成功渗透,并可以被进一步监控。
还没有评论,来说两句吧...