概述
QakBot,也称为QBot、QuackBot和Pinkslipbot,是一种已经存在了十多年的银行木马。它于2007年在野外被发现,此后一直在被不断地维护和发展。
近年来,QakBot已成为全球领先的银行木马之一。它的主要目的是窃取银行凭证(例如登录名、密码等),尽管它具有了一些其他的功能,如监视金融业务、自我传播和安装勒索软件,从而最大限度地从受感染组织处获得收益。
直到今天,QakBot在功能方面仍在不断发展,拥有了更多功能和新技术,例如记录击键、后门功能和逃避检测的技术。值得一提的是,后者包括虚拟环境检测、定期自我更新和cryptor/打包器修改。此外,QakBot也在试图使自己免受专家和自动化工具的分析和调试。
QakBot另一个有趣的功能是窃取电子邮件,之后攻击者会向受害者发送有针对性的电子邮件,利用其在电子邮件中获得的信息引诱受害者打开这些电子邮件。
QakBot感染链
众所周知,QakBot主要通过垃圾邮件活动感染受害者。在某些情况下,电子邮件与Microsoft Office文档(Word、Excel)或带有附加文档的受密码保护的档案一起发送。包含宏的文件和受害者被提示打开附件,声称它们包含重要信息(例如发票)。在某些情况下,电子邮件包含指向传播恶意文档的网页的链接。
然而,还有另一种感染媒介,它涉及到通过被攻击bot上的其他恶意软件将恶意QakBot有效负载传播到受害者的bot。
最初的感染媒介可能会有所不同,具体取决于威胁行为者认为目标组织成功的最佳机会。众所周知,各种威胁行为者会事先对目标组织进行侦察(OSINT),以确定最合适的感染媒介。
近期QakBot版本(2020-2021变体)的感染链如下:
· 用户收到一封带有ZIP附件的网络钓鱼电子邮件,其中包含带有嵌入宏的Office文档、文档本身或下载恶意文档的链接。
· 用户打开恶意附件/链接并被诱骗点击“启用内容”。
· 执行恶意宏。某些变体对请求“PNG”的URL执行“GET”请求,但是该文件实际上是二进制文件。
· 加载的有效负载(stager)包括另一个包含加密资源模块的二进制文件。其中一个加密资源具有DLL二进制文件(加载程序),该文件稍后会在运行时解密。
· “Stager”将“Loader”加载到内存中,内存在运行时解密并运行有效负载。配置设置是从其他资源中检索的。
· 有效载荷与C2服务器通信。
· 其他威胁,如ProLock勒索软件,现在可以被推送到受感染的计算机。
典型的QakBot功能
在野外观察到的典型QakBot恶意活动包括:
· 收集有关受感染主机的信息;
· 创建计划任务(权限提权和持久化);
· 凭据收集:
· 凭证转储(Mimikatz,exe access)*;
· 密码窃取(来自浏览器数据和cookies);
· 针对网络银行链接(网络注入)*。
· 密码暴力破解;
· 注册表操作(持久性);
· 创建自身的副本;
· 进程注入以隐藏恶意进程。
C2通信
QakBot恶意软件包含硬编码到加载器二进制资源中的150个IP地址列表。这些地址中的大多数属于其他受感染的系统被用作代理,将流量转发给其他代理或真实的С2。
С2通信是一个带有Base64编码数据的HTTPS POST请求。数据用RC4算法加密。静态字符串“jHxastDcds)oMc=jvh7wdUhxcsdt2”和一个随机的16字节序列用于加密。数据本身采用JSON格式。
通常在感染后,bot发送“PING”消息、“SYSTEM INFO”消息和“ASK for COMMAND”消息,C2回复“ACK”和“COMMAND”消息。如果C2推送了其他模块,则bot人会发送一条“STOLEN INFO”消息,其中包含被模块窃取的数据。
· 'PING'消息 - bot向C2发送带有“BOT ID”的请求消息,以检查С2是否处于活动状态:
· “ACK”消息 – 带有字段“16”的C2响应消息,其中包含受感染系统的外部IP地址,唯一有价值的信息:
· “系统信息”消息 - bot向C2发送请求消息,其中包含收集的有关受感染系统的信息。除了操作系统版本和位数、用户名、计算机名、域、屏幕分辨率、系统时间、系统正常运行时间和bot正常运行时间等一般系统信息外,它还包含以下实用程序和WMI查询的结果:
· whoami /all
· arp -a
· ipconfig /all
· net view /all
· cmd /c set
· nslookup -querytype=ALL -timeout=10 _ldap._tcp.dc._msdcs.{DOMAIN}
· nltest /domain_trusts /all_trusts
· net share
· route print
· netstat -nao
· net localgroup
· qwinsta
· WMI Query ROOT\CIMV2:Win32_BIOS
· WMI Query ROOT\CIMV2:Win32_DiskDrive
· WMI Query ROOT\CIMV2:Win32_PhysicalMemory
· WMI Query ROOT\CIMV2:Win32_Product
· WMI Query ROOT\CIMV2:Win32_PnPEntity
· “ASK for COMMAND”消息 – C2命令执行的响应消息。发送“系统信息”消息后,bot开始向C2请求执行命令。主要字段之一是“14”——SALT。此字段是唯一的,并且在每个请求中都会发生变化,用于防止bot被劫持或接管。收到此请求后,C2在签名过程中使用SALT并将签名放置在响应中,以便bot可以检查签名数据。只有有效且签名的命令会被执行。
· “COMMAND”消息 – 带有要执行的命令的C2响应消息。当前版本bot支持24个命令,其中大部分与下载、执行、删除附加模块和具有不同选项的模块配置文件或设置、更新配置值有关。
这种类型的消息包含SALT的签名值(从bot的请求字段“14”中获得)、命令ID和模块ID。消息的其他值没有签名。在以前的版本中,bot在感染后立即接收模块和命令,并发送“系统信息”消息。现在,C2用一个空命令响应大约一个小时。只有在这之后,C2才会在响应中发送命令和模块。我们认为,这种时间延迟用于使在隔离的受控环境中难以接收和分析新命令和模块。
如果C2推送某些模块,Base64编码的二进制文件将放入消息的字段“20”中。
· “STOLEN INFO”消息 – 向C2发送包含密码、帐户、电子邮件等被盗信息的机器人消息。被盗信息采用RC4加密和Base64编码。RC4加密的密钥以不同的方式生成,基于受感染的系统ID(又名Bot ID)值,而不是像流量加密那样基于静态字符串。
一旦与C2服务器建立通信,QakBot就会下载并使用其他模块来执行其恶意操作。
附加模块因样本而异,可能包括:“Cookie grabber”、“电子邮件收集器”、“凭据采集器”和“代理模块”等。
这些模块可能由威胁行为者自己编写,也可能从第三方存储库中借用和改编。它可能因样品而异,例如,有一些旧样本可能使用Mimikatz进行凭据转储。
以下是我们在研究过程中发现的一些模块。
附加模块
· Cookie Grabber – 从流行浏览器(Edge、Firefox、Chrome、Internet Explorer)收集cookie。
· 隐藏的VNC - 允许威胁行为者连接到受感染的机器并在真实用户不知情的情况下与之交互。
· 电子邮件收集器 - 尝试在受感染机器上查找Microsoft Outlook,然后遍历软件文件夹并递归收集电子邮件。最后,该模块将收集到的电子邮件泄露到远程服务器。
· Hooking模块 - 挂钩一组硬编码的WinAPI和(如果存在)Mozilla DLL挂钩用于执行网络注入、嗅探流量和键盘数据,甚至阻止某些域的DNS解析。Hooking的工作方式如下:QakBot将一个hooking模块注入到适当的进程中,该模块从硬编码集中找到函数并修改函数,使它们跳转到自定义代码。
· Passgrabber模块 - 从各种来源收集登录名和密码:Firefox和Chrome文件、Microsoft Vault存储等。该模块使用自己的算法收集密码,而不是像以前的版本那样使用Mimikatz。
· 代理模块 - 尝试使用UPnP端口转发和tier 2 С2查询来确定哪些端口可用于侦听。比较当前的和旧的代理加载器版本会发现一些有趣的事情:威胁参与者决定从二进制文件中删除cURL依赖项,并使用他们自己的代码执行所有HTTP通信。除了删除cURL之外,他们还删除了OpenSSL依赖项并将所有功能嵌入到单个可执行文件中——不再有代理加载器或代理模块,它现在是一个文件。
在尝试确定端口是否打开以及机器是否可以充当C2 tier 2代理之后,代理模块还启动了一个多线程SOCKS5代理服务器。SOCKS5协议被封装到QakBot代理协议中,该协议由以下部分组成:QakBot代理命令(1字节)、版本(1字节)、会话id(4字节)、总数据包长度(dword)、数据(总数据报长度-10)组成。传入和传出的数据包存储在缓冲区中,可以逐个接收/发送,也可以在单个TCP数据段(流)中的多个数据包中接收/发送。
通常的代理模块执行流程如下:
1.与C2通信,尝试使用UPnP转发端口,确定可用端口并报告给C2。此处通常使用的C2通信协议是HTTP POST RC4加密的JSON数据。
2.下载OpenSSL库。QakBot不会保存下载的文件,而是测量下载速度并删除接收到的文件。
3.设置由stager使用命令37(更新配置)/模块274(代理)接收的外部PROXY-C2连接。
与外部PROXY-C2通信:
1.发送初始代理模块请求。初始请求包含机器人ID、受感染机器的外部IP地址、外部IP地址的反向DNS查找、互联网速度(先前测量)和代理模块启动后的秒数。
2.与PROXY-C2建立连接(proxy命令序列1->10->11)。
3.初始化会话,使用登录名/密码执行socks5授权(使用命令10从PROXY-C2接收)。
4.开始封装在QakBot代理模块协议中的类似SOCKS5的通信。
QakBot代理命令如下:
· Web注入——hooking模块的配置文件
一旦与C2建立通信,下载的附加模块之一就是web-inject模块。它通过将模块注入浏览器进程并挂接网络API来拦截受害者的流量。hooking模块从截获的API中获取执行流程,一旦受害者访问与银行和金融相关的某些网页,就会将额外的JavaScript注入源页面。
QakBot统计
我们分析了从卡巴斯基安全网络(KSN)收集的QakBot攻击的统计数据,其中收集和处理了由卡巴斯基用户自愿提供的匿名数据。2021年前七个月,我们的产品检测到181,869次下载或运行QakBot的尝试。该数字低于2020年1月至7月的检测数量,但受影响的用户数量比上一年增长了65%,达到了17,316人。
我们在2021年第一季度观察到了规模最大的攻击活动,当时有12,704名用户遭遇了QakBot攻击,其中1月有8,068名卡巴斯基用户成为目标,2月有4,007名用户成为攻击目标。
结论
QakBot是一种已知的Trojan-Banker,其技术可能因二进制(旧版本和新版本)而异。它已经活跃了十多年,并且看起来还会存在很长一段时间。恶意软件不断接收更新,威胁行为者不断添加新功能并更新其模块,以窃取信息并最大化收入。
本文翻译自:https://securelist.com/qakbot-technical-analysis/103931/如若转载,请注明原文地址