据外媒 MacRumors 报道,安全公司 Red Canary 发现了第二个已知的恶意软件 “Silver Sparrow”(银雀),它被编译成原生运行在 M1 Mac 上。
本月初,Red Canary检测工程师Wes Hurd和Jason Killam发现了一系列macOS恶意软件。鉴于 “Silver Sparrow”这个名字,据说这个恶意包利用 macOS Installer JavaScript API 执行可疑的命令。不过,在观察该恶意软件一周多之后,Red Canary 及其研究伙伴都没有观察到最终的有效数据,因此该恶意软件所带来的具体威胁仍然是个谜。
Red Canary 表示,该恶意软件可能是 “一个相当严重的威胁”。Red Canary检测工程师表示“虽然还没有观察到 Silver Sparrow 提供更多的恶意有效数据,但其前瞻性的 M1 芯片兼容性、全球覆盖范围、相对较高的感染率和操作成熟度表明,Silver Sparrow 是一个相当严重的威胁,其独特的定位可以在一瞬间提供潜在的有影响的有效威胁。”
根据 Malwarebytes 提供的数据,截至 2月 17 日,Silver Sparrow 已经感染了 153 个国家和地区的 29139 个 macOS 系统,其中包括 “美国、英国、加拿大、法国和德国的大量检测”。
尽管尚未观察到Silver Sparrow其他恶意功能,但是其前瞻性的M1芯片兼容性,全球覆盖范围,相对较高的感染率以及操作成熟度表明Silver Sparrow是一个相当严重的威胁,具有独特的定位。
调查发现了两个版本的Silver Sparrow恶意软件,在本文中将其分别称为“版本1”和“版本2”:
l 恶意软件版本1
文件名:updater.pkg(v1的安装程序包)
MD5:30c9bc7d40454e501c358f77449071aa
l 恶意软件版本2
文件名:update.pkg(v2的安装程序包)
MD5:fdd6fb2b1dfe07b0e57d4cbfef9c8149
这两个版本只有一个主要区别是对下载URL和脚本注释的更改。第一个版本包含仅针对Intel x86_64体系结构编译的Mach-O二进制文件(updaterMD5:c668003c9c5b1689ba47a431512b03cc)。在第二个版本中包含针对英特尔x86_64和M1 ARM64架构(taskerMD5:b370191228fef82635e39a137be470af)编译的Mach-O二进制文件。
像在技术分析中详细解释的那样,Mach-O编译的二进制文件并没有做太多事情,因此将它们称为“旁观者二进制文件”。下图代表了Silver Sparrow恶意软件的两个版本的高级视图。
研究者发现发现许多macOS威胁通过恶意广告以PKG或DMG形式的单个独立的安装程序进行分发,它们伪装成合法的应用程序(如Adobe Flash Player)或更新。对手将恶意软件分发为两个不同的程序包:updater.pkg和update.pkg。两种版本都使用相同的技术来执行,只是旁观者二进制文件的编译有所不同。
从外观上看,Silver Sparrow的第一个新颖且值得注意的事情是它的安装程序包利用macOS Installer JavaScript API执行可疑命令。尽管观察到合法软件正在执行此操作,但这是首次在恶意软件中观察到它。这与通常在恶意macOS安装程序中观察到的行为有所偏差,这些行为通常使用安装前或安装后脚本执行命令。在安装前和安装后的情况下,安装会生成特定的遥测模式,该模式通常如下所示:
l 父进程: package_script_service
l 过程:bash,zsh,sh,Python或另一个解释器
l 命令行:包含preinstall或postinstall
这种遥测模式本身并不是恶意软件的高保真度指示器,因为即使合法软件也使用该脚本,但是它通常确实使用安装前和安装后脚本可靠地识别安装程序。Silver Sparrow与在恶意macOS安装程序中看到的不同,它在程序包文件的分发定义XML文件中包含了JavaScript命令。这将产生不同的遥测模式:
l 父进程: Installer
l 过程: bash
与安装前和安装后脚本一样,此遥测模式不足以单独识别恶意行为。安装前和安装后脚本包括命令行参数,这些命令行参数提供了有关实际执行内容的线索。另一方面,恶意的JavaScript命令是使用合法的macOS Installer进程运行的,几乎看不到安装包的内容或该包如何使用JavaScript命令。
代码的入口点位于软件包的Distribution定义XML文件中,该文件包含一个安装检查标记,用于指定在“安装检查”阶段执行的功能:
安装程序使用三个JavaScript函数来完成“ installation_check()”函数中的所有繁重工作:
请注意,在上面的代码中,Silver Sparrow使用Apple的system.run命令来执行。苹果文档的system.run代码启动“的安装包的资源目录规定的程序”,但它并没有限制使用资源目录。正如Silver Sparrow所观察到的,您可以提供执行过程及其参数的完整路径。通过采取这种途径,恶意软件使安装程序产生多个bash进程,然后可以使用这些进程来实现其目标。
函数appendLine,appendLinex和appendLiney扩展了bash带有参数的命令,这些参数将输入写入磁盘上的文件。Silver Sparrow使用JavaScript命令逐行写出了每个组件:
通过动态生成脚本而不是使用静态脚本文件,此方法可以避免简单的静态签名。另外,这些命令可以使敌方决定做出更改时,将其快速修改为更通用的代码。总之,这意味着对手可能试图逃避侦查并简化发展。
写入所有命令后,磁盘上将存在两个新脚本:/tmp/agent.sh和~/Library/Application Support/verx_updater/verx.sh。该agent.sh脚本在安装结束时立即执行,以联系受敌方控制的系统并指示已发生安装。verx.sh由于持久的LaunchAgent可以联系远程主机以获取更多信息,因此该脚本定期执行。
最初对恶意活动的指示是PlistBuddy创建LaunchAgent的过程,因此要探究其重要性。
LaunchAgents提供了一种指示launchdmacOS初始化系统来定期或自动执行任务的方法。它们可以由端点上的任何用户编写,但是它们通常也将以编写它们的用户身份执行。例如,如果用户tlambert写~/Library/LaunchAgents/evil.plist了描述的任务,evil.plist通常将以执行tlambert。有关更多信息,请参阅Apple文档。
尽管osquery和反恶意软件控件之类的工具对LaunchAgents的内容具有出色的可见性,但某些端点检测和响应(EDR)工具却很难获得对LaunchAgents的可见性。EDR工具往往依赖于过程监视,该过程监视可提供对文件创建(但不一定是文件内容)的大量可见性。例如,EDR工具可能会为您提供以下shell命令:
结果,仅使用EDR来检测以恶意LaunchAgent形式存在的持久性机制可能非常困难,因为它需要您分析周围的活动来确定安装程序本身。换句话说:您知道可以将LaunchAgent用作持久性机制,但是由于可能看不到LaunchAgent文件的内容,因此必须依靠上下文确定该LaunchAgent的意图。
值得庆幸的是,有多种方法可以在macOS上创建属性列表(副本),有时对手会使用不同的方法来满足其需求。一种这样的方式是通过PlistBuddy,它是一个内置工具,可让您在端点上创建各种属性列表,包括LaunchAgents。有时,攻击者转向PlistBuddy建立持久性,这样做使防御者可以使用EDR轻松检查LaunchAgent的内容,因为文件的所有属性在写入之前都会在命令行上显示。在Silver Sparrow的情况下,观察到了编写plist内容的命令:
在磁盘上的最终形式中,LaunchAgent Plist XML将类似于以下内容:
持久性LaunchAgent每小时都会告诉launchd执行一个Shell脚本,该脚本将JSON文件下载到磁盘,将其转换为plist,然后使用其属性确定进一步的操作。
下载的version.json文件的结构如下所示:
该downloadUrl属性每小时都会检查其他内容,以供下载和执行。在观察了一个星期的恶意软件后,研究者都没有观察到最终的有效负载,因此,Silver Sparrow活动的最终目标仍然是个谜。
Silver Sparrow在AWS S3上托管的基础架构的使用很有趣,因为AWS提供了高度可用且具有弹性的文件分发方法。对手可以创建存储桶,提供文件并进行操作,而不必担心额外的网络管理和与内部完成所有这些操作相关的开销。此外,此活动群集的回调域利用通过Akamai CDN托管的域。这意味着对手可能了解云基础架构及其在单个服务器或非弹性系统上的优势。此外,可能了解此托管选择的对手允许他们将其与云基础结构流量的正常开销混合在一起。大多数组织负担不起阻止对AWS和Akamai中资源的访问。使用AWS基础设施的决定进一步支持了评估,即这是运营成熟的对手。
除了有效载荷之谜,Silver Sparrow还包括文件检查,该文件检查导致删除了所有持久性机制和脚本。它检查~/Library/._insu磁盘上是否存在磁盘,如果文件存在,Silver Sparrow将从端点删除其所有组件。Malwarebytes(d41d8cd98f00b204e9800998ecf8427e)报告的哈希值表明该._insu文件为空。此功能的存在也是一个谜。
该._insu文件未出现存在默认情况下在MacOS,目前不知道的情况下的文件出现在其下。
在安装结束时,Silver Sparrow执行两个发现命令来构造用于curlHTTP POST请求的数据,指示已发生安装。一个检索系统UUID进行报告,第二个检索更多有趣的信息:用于下载原始程序包文件的URL。
通过执行sqlite3查询,恶意软件会找到PKG从其下载的原始URL,从而使对手有了成功的分销渠道的想法。通常会在macOS上看到这种带有恶意广告软件的活动。
updater.pkg分析的第一版Silver Sparrow恶意软件(MD5:30c9bc7d40454e501c358f77449071aa)包含一个无关的Mach-O二进制文件(updaterMD5:c668003c9c5b1689ba47a431512b03cc),它是为Intel x86_64编译的,似乎在Silver Sparrow执行中没有任何其他作用。最终,该二进制文件似乎已作为占位符内容包含在内,以使PKG可以在JavaScript执行之外分发。它只是说:“Hello,World!”
第二个版本(update.pkgMD5:fdd6fb2b1dfe07b0e57d4cbfef9c8149)也包含一个无关的Mach-O二进制文件(taskerMD5:b370191228fef82635e39a137be470af),该二进制文件已编译为与Intelx86_64和M1 ARM64兼容。像以前一样,该二进制文件似乎已被包含为占位符-这次,显示消息“You did it!”
鉴于 Silver Sparrow 二进制文件 “似乎还没有那么大的作用”,Red Canary 将其称为 “旁观者二进制文件 "”。当在基于英特尔的 Mac 上执行时,恶意包只是显示了一个带有 “Hello, World!”信息的空白窗口,而苹果 silicon 二进制文件则会导致一个红色窗口出现,上面写着 “You did it!”。
您可以通过检查filemacOS或Linux系统上检查二进制文件的命令输出来观察来自外部Mach-O二进制文件版本2的双体系结构支持:
相比之下,file版本1中无关的Mach-O二进制文件的命令输出如下所示:
更新程序:Mach-O 64位x86_64可执行文件,标志:
研究者还没有完全了解Silver Sparrow首次出现的确切时间,但是已经能够通过混合使用开源情报和Red Canary遥测技术来构建以下时间表:
2020年8月18日:创建了恶意软件版本1(非M1版本)回调域api.mobiletraits[.]com(源)
2020年8月31日:恶意软件版本1(非M1版本)已提交给VirusTotal(源)
2020年9月2日:version.json在执行恶意软件版本2的过程中看到的文件已提交给VirusTotal(源)
2020年12月5日:创建api.specialattributes[.]com了恶意软件版本2(M1版本)回调域(源)
2021年1月22日:PKG文件版本2(包含M1二进制文件)已提交给VirusTotal(源)
2021年1月26日:Red Canary检测到Silver Sparrow恶意软件版本1
2021年2月9日:Red Canary检测到Silver Sparrow恶意软件版本2(M1版本)
在发布时,已经发现了一些与Silver Sparrow相关的未知因素,我们要么看不见它们,要么只是没有足够的时间去观察。首先,不确定PKG文件的初始分发方法。研究者怀疑恶意搜索引擎的结果会引导受害者在下载前不久根据受害者浏览器的网络连接下载PKG。接下来,不知道~/Library/._insu出现这种情况的情况。该文件可能是对手希望避免的工具集的一部分;它可能是恶意软件生命周期本身的一部分,是在达到目标后删除组件的一种方式。
此外,此恶意软件的最终目标是一个谜。无法肯定地知道恶意软件将分发什么有效载荷,有效载荷是否已经交付和删除,或者对手是否有未来的分发时间表。根据Malwarebytes与我们共享的数据,将近30,000受影响的主机尚未下载下一个或最终的有效负载。
最后,PKG文件中包含的Mach-O二进制文件的用途也是一个谜。根据脚本执行中的数据,只有当受害者故意找到并启动它时,二进制文件才会运行。观察到的消息“ Hello,World!” 或“You did it” 可能表明威胁正在概念验证阶段进行开发,或者对手仅需要一个应用程序捆绑包即可使该软件包看起来合法。
以下部分包含对有助于检测Silver Sparrow下载器的分析的描述。并不是专门为检测Silver Sparrow而构建这些分析的,因此它们可能对检测各种macOS威胁有用。如果这些分析之一提醒您注意潜在的恶意活动,建议您搜索是否存在指标(如下所列),以确认您是在处理Silver Sparrow感染还是其他问题。
l 寻找看起来PlistBuddy与包含以下内容的命令行一起执行的进程:LaunchAgents和RunAtLoad和true。这种分析有助于我们找到多个建立LaunchAgent持久性的macOS恶意软件家族。
l 寻找出现要在过程sqlite3连同执行包含命令行:LSQuarantine。这种分析有助于找到操纵或搜索下载文件的元数据的多个macOS恶意软件家族。
l 寻找出现要的处理curl结合包含一个命令行执行:s3.amazonaws.com。此分析有助于我们使用S3存储桶进行分发来找到多个macOS恶意软件家族。
在版本1和2中
〜/ Library /._ insu(用于指示恶意软件删除自身的空文件)
/tmp/agent.sh(执行用于安装回调的shell脚本)
/tmp/version.json(从S3下载的文件,以确定执行流程)
/ tmp / version.plist(version.json转换为属性列表)
文件名:updater.pkg(v1的安装程序包)
MD5:30c9bc7d40454e501c358f77449071aa
文件名:更新程序(旁观者Mach-O Intel二进制文件在v1包中)
MD5:c668003c9c5b1689ba47a431512b03cc
mobiletraits.s3.amazonaws [。] com(用于v1的S3存储桶保留了version.json)
〜/ Library / Application Support / agent_updater / agent.sh(每小时执行一次的v1脚本)
/ tmp / agent(如果文件包含最终的v1有效负载,分布式)
〜/ Library / Launchagents / agent.plist(v1持久性机制)
〜/ Library / Launchagents / init_agent.plist(v1持久性机制)
开发人员ID Saotia Seay(5834W6MYX3)– v1旁观者二进制签名已被Apple撤销
包装内容和结构
文件名:update.pkg(v2的安装程序包)
MD5:fdd6fb2b1dfe07b0e57d4cbfef9c8149
tasker.app/Contents/MacOS/tasker(第二版旁观者Mach-O Intel和M1二进制文件)
MD5:b370191228fef82635e39a137be470af
specialattributes.s3.amazonaws [。] com(用于v2的S3存储桶保留了version.json)
〜/ Library / Application Support / verx_updater / verx.sh(每小时执行一次的v2脚本)
/ tmp / verx(如果包含最终v2有效负载,则该文件分布式)
〜/ Library / Launchagents / verx.plist(v2持久性机制)
〜/ Library / Launchagents / init_verx.plist(v2持久性机制)
开发人员ID朱莉·威利(MSZ3ZH74RK)– v2旁观者二进制签名已被Apple撤销
包装内容和结构