随着技术的发展,世界之间的联系变得更加紧密,攻击者使用的技术也在不断发展。攻击者通过不断地利用供应链和代码库中复杂的相互依赖关系,对组织、个人和社区造成重大风险。
近年来最令人担忧的攻击趋势之一是供应链攻击的增加,尤其是那些对代码库的攻击,这是全球网络安全领域的一个难题。根据欧盟网络安全机构(ENSA)发布的一份报告,62%的组织受到第三方网络事件的影响,只有40%的受访组织表示他们了解第三方网络和隐私风险。更令人担忧的是,38%的受访组织表示,他们不知道哪些网络问题是由第三方组件引起的,最近涉及供应链的网络攻击包括Apache Log4j, SolarWinds Orion和3CX的3CXDesktopApp。
在现代软件开发中,开发人员依赖第三方组件来简化开发过程,这使开发人员能够创建成本效益高、效率高且功能丰富的应用程序。但是,当这些受信任的组件受到攻击时会发生什么?
攻击者可以通过组织供应链中不太安全的元素,如第三方供应商或软件存储库间接渗透系统,甚至允许他们破坏受信任的组件,从而在更大、更安全的环境中获得立足点。恶意代码经常嵌入看似合法的软件库中,当开发人员集成这些组件,就会不知不觉地将漏洞和其他网络安全风险引入他们的核心系统。
本文深入研究了攻击者在看似合法的应用程序和代码库中植入恶意有效负载的复杂方法,并以最近示例作为研究对象。
技术分析
攻击者复制合法GitHub存储库的示例研究,然后用恶意代码进行木马化和攻击,策略性地用关键字填充其存储库描述部分,以最大限度地提高其在GitHub搜索中的可见性。
通过此分析,我们可以深入了解攻击者攻击第三方组件的攻击过程和技术,以下部分将使用活动命令与控制(C&C)服务器研究其中一个被木马化的项目,了解其内部工作原理。
通过exec smuggling web请求发起攻击
Discord-Boost-Tool的存储库名称和存储库的所有者
在所举示例中,攻击的第一阶段采用了一种我们称之为exec smuggling的新技术。该技术在一长串空白字符之后放置一个有效负载,将恶意内容从屏幕上推送出去。使用这种技术,下一阶段通过恶意请求调用检索,≠≠使用Python内置方法exec()执行。接下来,我们将根据示例概述exec smuggling 的具体实现步骤。
导入必要的依赖项
在导入request和fernet之前,恶意软件使用以下命令在Python中安装必要的依赖项,通过该命令安装依赖项包:
恶意软件安装并导入必要的依赖项
将恶意代码对象移出白名单
攻击者会添加一长串空白字符(在本例中是521个空格),将恶意代码移出白名单,从而隐藏代码对象,不被人发现。
使用exec()执行恶意负载
最后,通过调用Python的exec方法来执行代码对象。以下是解密后的恶意代码片段:
此代码对象向攻击者的命令和控制(C&C)服务器发出web请求,该服务器包含恶意负载,然后导致第二阶段的攻击。
执行走私后攻击进入第二阶段
攻击的第二阶段
据分析,攻击的第二阶段侧重于为进一步开发准备攻击环境。
设置环境
第二阶段包括准备环境的滴管,最初,它安装一系列Python包,如requests、httpx、pyperclip、pyotp、winregistry、psutil、pycryptodomex和asyncio等。然后,它识别用户系统上安装的所有Python版本,并检查每个版本的site-packages中是否存在Cryptodome目录。如果找到,它将此目录复制为Crypto,可能是为了确保与原有库的向后兼容性。随后,脚本创建一个解密有效负载,将其写入用户APPDATA目录中的一个名为pl.py的文件,在执行它而不显示窗口。
第二阶段使用Python的子进程模块进一步准备环境
攻击的第三阶段
环境准备好后,恶意软件进入攻击过程的第三阶段。
BlackCap-Grabber
第三阶段包含一个修改版的开源信息窃取项目,名为BlackCap-Grabber。它具有以下功能:
提取浏览器密码、cookie和浏览历史记录;
检索系统信息;
从应用程序和工具(如Steam, MetaMask和Exodus)窃取登录凭据;
绕过TokenProtector;
劫持Windows剪贴板以更改加密货币地址,将其内容替换为攻击者的钱包地址以及其他功能。
重要的是,原来的BlackCap-Grabber包括双钩(dual hook)技术,使用这种技术,代码的开发者也将收到由攻击者(BlackCap-Grabber用户)窃取的信息的副本。像BlackCap-Grabber-NoDualHook这样的项目会从源代码中移除植入的DualHook。
在执行时,恶意软件将受攻击系统的ComputerName发送到其C&C服务器。然后安装必要的Python包以确保恶意软件的功能。请注意,此代码不是原始BlackCap-Grabber的一部分,而是由攻击者添加的。
恶意软件发送带有受害者计算机名的POST请求,并安装额外的依赖项
下图展示了由恶意软件及其处理受害者信标的请求处理程序生成的初始网络流量的示例。
向包含受害者用户名的/ downloadhandler发出POST请求
攻击者添加的另一个功能是出口注入(exodus-injection),这在原始的BlackCap-Grabber源代码中不存在。出口注入允许攻击者使用攻击技术从Exodus Crypto Wallet(一种受新加密货币用户欢迎的加密货币钱包)窃取凭证和其他敏感信息。攻击者在其攻击链中使用多个开源的Exodus-Injection项目(https://github.com/loTus04/Exodus-Injection和https://github.com/dropout1337/exodus-injection)。
BlackCap-Grabber配置
BlackCap-Grabber的主要功能是劫持Windows剪贴板以更改加密货币地址,从受攻击的系统中检索敏感信息,并从各种web浏览器将其保存到文件中以供泄露。
BlackCap-Grabber准备敏感信息,如浏览器cookie、加密货币地址和剪贴板信息
BlackCap-Grabber使用upload()方法处理敏感信息数据,以便上传到攻击者的基础设施
BlackCap-Grabber使用LoadRequests方法从受害者发送POST请求以进行数据提取
使用上图中的逻辑,攻击者向基础结构发送包含泄露的密码、cookie和加密货币地址的POST请求。
攻击者通过POST请求将泄露的数据发送到/handler终端
在此示例中,恶意软件将包含浏览器cookie等内容的恶意包从受攻击系统中泄漏到攻击者控制的主机。攻击者使用web请求处理程序来处理从受害设备上成功窃取的包。
另外一个密码示例通过POST请求发送到/handler终端
以上是我们发现的附加POST请求,其中包含由攻击者从受攻击的受害者向处理程序/句柄泄露的敏感信息。
探索Exodus和ElectronJS组件
经过调查,我们确定Exodus桌面钱包是使用ElectronJS框架构建的,基于本地Exodus安装的资源目录中存在的app.asar文件,该框架用于捆绑和打包应用程序的资源。Asar压缩文件类似于.zip或.tar文件,但专门为ElectronJS应用程序设计。
攻击链第三阶段的一个主要组成部分涉及通过操作底层的ElectronJS应用程序在受攻击用户的设备上植入恶意的Exodus桌面钱包应用程序,这使得攻击者可以窃取与Exodus钱包相关的凭证,从而实施攻击,并最终窃取属于受害者的加密货币和不可替代代币(nft)。
ElectronJS和Exodus这两个漏洞是由关联的。早在2018年,基于远程代码执行漏洞CVE-2018-1000006(CVSS 8.8)的Electron就可以被利用。研究人员很快指出,攻击者可以通过滥用电子协议处理程序来利用这个漏洞。
如前所述,ElectronJS应用程序被打包为app.asar压缩文件,其中包含应用程序的源代码和各种应用程序资产。Asar压缩文件类似于.zip或.tar文件,是专门为ElectronJS应用程序设计。
什么是Exodus?
Exodus是一个数字资产平台,允许用户存储、管理和交换加密货币和NFT。
Exodus提供各种钱包,如Web3钱包、移动钱包、桌面钱包、Trezor硬件钱包,以及与加密货币应用程序的集成。
Exodus桌面钱包应用程序
Exodus桌面钱包(Exodus Desktop Wallet)是Exodus的桌面应用程序。Exodus桌面钱包支持所有主要的操作系统,如微软、MacOS和Linux,通过用户友好的图形用户界面(GUI),可以存储和交易主要的加密货币和NFT。
通过web GUI访问Exodus桌面钱包
Exodus桌面钱包提供了一个直观的界面来访问加密货币钱包。解锁加密货币钱包需要密码,如Exodus桌面钱包应用程序GUI所示。
在设置用于备份钱包的助记符秘密短语时,Exodus会让用户打印助记符密钥作为安全设备。
使用物理助记键恢复Exodus钱包
当用户试图恢复钱包时,Exodus可能会要求他们参考助记秘钥的打印副本,并根据提供的数字选择正确的单词。出于安全考虑,Exodus被设计成一个使用密码和助记短语组合的自我保管钱包。
探索Exodus ElectronJS应用程序的主要组件
Exodus桌面钱包的app.asar文件可以解压缩到目标目录。在这个目录中,我们看到了应用程序的根目录,其中包括node_modules、src和应用程序的package.json。
Exodus桌面钱包的NodeJS后端
关键后端文件相关的Exodus桌面钱包
Exodus ElectronJS应用程序的主要组件包括应用程序的主逻辑(包含在src/app/main/index.js中)、钱包组件(包含在src/app/wallet/index.js中)和表示逻辑(包含在src/app/static/中),后者将NodeJS后端文件导入到应用程序的前端表示中。
正在攻击Exodus桌面钱包的ElectronJS应用程序
通过使用注入技术,攻击者可以通过替换app.asar压缩,将Exodus桌面钱包的ElectronJS应用程序替换为恶意的ElectronJS应用程序,该压缩文件由Exodus桌面钱包读取。这个应用程序是一个全功能的复制品Exodus桌面钱包,攻击者将其功能改变,以窃取钱包信息,包括密码和助记符信息。
inject()函数负责注入恶意的Exodus桌面钱包
在上图所示的代码中,攻击者执行一系列检查,以确定受攻击的设备是否安装了Exodus Desktop Wallet。
下面的代码片段是在Windows安装中Exodus应用程序使用的app.asar文件的位置。
Exodus钱包桌面Windows app.asar路径:
同时,下面的代码片段是Linux安装中Exodus应用程序使用的app.asar文件的位置:
Exodus钱包桌面Linux app.asar路径:
如果发现Exodus,恶意代码将继续如下操作:
1.从攻击者控制的基础设施下载并读取恶意修复的app.asar文件。
2.终止现有的Exodus进程。
3.将恶意的app.asar写入Exodus应用程序资源目录中的Exodus app.asar文件中。
如果在设备上找不到Exodus桌面钱包的行为
如果在目标设备上没有找到Exodus,恶意代码将继续下载文件stromrechung.py到\Microsoft\Windows\Start Menu\Programs\Startup。该文件将在系统启动时执行。
如果没有找到Exodus,“miner.exe”将从另一个攻击者域下载并安装
Python用于执行恶意批处理文件,其中包含“miner.exe”的下载和运行逻辑。
恶意文件stromrechnung.py是一个python文件,包含以下逻辑:
1.为Windows批处理文件创建一个Python函数;
2.使用陆地驱动程序(LoLDrivers)编写逻辑以绕过UAC;
3.编写PowerShell命令将加密货币挖矿器(miner.exe)下载到受害者的设备上;
4.运行Python函数,该函数使用 subprocess.popen 方法执行批处理文件。
在Exodus桌面钱包的ElectronJS应用程序中注入代码
在示例中,有三个不同的文件被攻击者改变了,具体将在后面介绍。
恶意注入后端unlock()函数(src/app/wallet/index.js)
主要注入发生在src/wallet/index.js中,攻击者在解锁函数中注入恶意POST请求。POST请求包含钱包密码、助记密钥和钱包目录。
文件src/app/wallet/index.js被攻击,泄露密码、助记符和钱包信息给攻击者
允许打开钱包域(4.9.1.2. src/app/main/index.js)
即使在干净的Exodus应用程序将钱包域限制为Exodus的位置,攻击者也可以修改主index.js文件以允许所有钱包域。
文件src/app/main/index.js修改域名列表以允许所有钱包域名
4.9.1.3. src/static/wallet.html:禁用内容安全策略(CSP)
内容安全策略(CSP)作为一个额外的安全层,用于识别和抵御特定形式的攻击,例如跨站点脚本(XSS)和数据注入攻击。connect-src指令限制了可以通过脚本接口加载的url。
文件src/app/main/index.js被修改为禁用应用程序的CSP
我们发现,攻击者有效地禁用了CSP,以允许从所有url到Exodus wallet.js组件的数据连接。
Discord-Boost-Tool GitHub存储库
接下来,我们将探讨Discord-Boost-Tool的特性及其一些有趣的组件。
discord-boost-tool的起源
在本文所列举的示例中,受攻击的Discord-Boost-Tool源自2022年底的原始Discord-Boost-Tool存储库。这个工具允许用户使用NitroBot帐户来提升他们的Discord服务器,它被GitHub用户PatrickPagoda迅速分叉(fork)并修改,通过恶意PyPi包攻击不知情的用户,该用户多次将恶意Python包上传到PyPi注册表中。值得一提的是,与PatrickPagoda相关的原始GitHub帐户在7月底至8月的某个时候被删除了。根据我们所做的分析和PatrickPagoda从GitHub上删除后的时间框架,我们强烈怀疑所分析的存储库与这个已死亡的用户有关。fork是UNIX或类UNIX中的分叉函数,fork函数将运行着的程序分成2个(几乎)完全一样的进程,每个进程都启动一个从代码的同一位置开始执行的线程。这两个进程中的线程继续执行,就像是两个用户同时启动了该应用程序的两个副本。fork系统调用用于创建一个新进程,称为子进程,它与进程(称为系统调用fork的进程)同时运行,此进程称为父进程。创建新的子进程后,两个进程将执行fork()系统调用之后的下一条指令。子进程使用相同的pc(程序计数器),相同的CPU寄存器,在父进程中使用的相同打开文件。
来自PatrickPagoda的Discord-Boost-Tool
PatrickPagoda版本的Discord-Boost-Tool使用了恶意的PyPi包
通过GitHub代码库进行供应链攻击的后果
尽管PatrickPagoda的GitHub帐户已被停用,但源自PatrickPagoda存储库的初始分叉仍然存在,同时还包含有攻击的PyPi包。这种情况反映了供应链攻击中的一种令人担忧的模式,攻击者可以通过合并有攻击的依赖关系来污染工具。
随后,他们通过上传到GitHub等平台来传播这些工具。然后,社区继续分叉这些受攻击的存储库,这反过来又导致进一步的分叉,从而扩大了攻击的范围。关于代码共享的滥用,也说明了组织采用全面的供应链风险管理(SCRM)程序的必要性。
使用PatrickPagoda的恶意存储库“installpylibsqlite”的示例存储库
使用PatrickPagoda恶意存储库“pipcryptliberyV2”的示例存储库
通过GitHub社区传播
这些工具在GitHub、Discord和Telegram等平台上激增,许多用户只是手动共享工具。不过使用者并不知道这些工具的起源,这是令人担忧的,因为理想情况下,只有当用户能够确认他们正在交互的代码库的完整性时,才应该使用软件。
用户随机共享受感染的工具
用户从未经验证的来源共享工具
我们还发现,一些用户也在Telegram上出售这个工具。
在Telegram上分享和销售工具
这个修改后的工具在GitHub存储库中以不同的形式出现,并在Telegram和Discord等平台上传播。
分析Discord-Boost-Tool恶意提交史
恶意的Discord-Boost-Tool首次提交是在2023年7月10日,到现在总共有78次提交。在第一次提交时,攻击者试图从update.py中的PyPi安装一个名为pipcoloringskitsV1的恶意包。此外,所有其他Python文件都被exec和request .get的组合所攻击。
攻击者的提交历史
exec smugglingGitHub提交
此攻击者使用exec smuggling技术来执行恶意有效负载的检索。
exec smuggling提交到" utils/checker.py "
exec smuggling提交“utils/token .py”
恶意提交PyPi
开发者还有一个重要的提交历史,其中恶意PyPi包被用来攻击和危害受害者。
将恶意PyPi包" pipcoliringskitsV1 "提交到" update.py "
pipcoloringskitsV1包只包含一个名为__init__.py的文件,它与我们之前分析的最新版本stage 2 Python释放器脚本相同。
“pipcolorinskitsV1”包包含一个文件(__init__.py)
恶意PyPi包包含一个文件(__init__.py)
通过2023年7月10日到2023年8月7日的分析,攻击者传播恶意有效负载的技术包括推送恶意PyPi包。
用恶意GitHub提交替换恶意PyPi包
从2023年8月8日开始,攻击者对update.py中的传播方法进行了更改。攻击者没有传播恶意的PyPi包,而是直接在存储库中下载并执行后续阶段的有效负载。在checker.py和token .py中也采用了类似的技术。然而,C&C服务器的详细信息是用Fernet加密的。
恶意PyPi包的历史
攻击者有使用恶意PyPi包很长时间了,以下是开发者在各种GitHub提交中推送的包列表:
包和提交的数量突出了这种特定攻击者能够使用各种恶意包来攻击受害者的敏捷性和灵活性。
示例" pythoncoloringsmodsv2 "可在PyPi存储库中获得
德国犯罪市场exec smuggling工具
在调查过程中,我们发现了使用exec smuggling技术的其他攻击工具。这些工具在德国犯罪论坛上很受欢迎,原因是攻击做了一个广告,广告是一个用户用德语写的。
德国犯罪论坛上的帖子
在分析这些广告时,研究人员发现该用户在一个受欢迎的德国犯罪论坛的欺诈板块做了广告,作为一种利用加密货币设备人“窃取”俄罗斯用户加密货币资产的赚钱方式。这名用户通过这种方式,向那些同情俄罗斯的德语使用者发出呼吁,同时也利用欧洲与俄罗斯之间的紧张关系来吸引人们对受攻击工具的兴趣。
5月27日论坛帖子示例
受攻击工具示例
该工具伪装成Tether (USDT)的清理工具,USDT是领先的稳定加密货币,其价值与美元挂钩,旨在欺骗毫无戒心的受害者。在这些论坛上宣传的工具使用了exec smuggling技术,该技术对我们上述分析的相同域执行恶意GET请求。
使用exec smuggling技术攻击GET请求
文章翻译自:https://www.trendmicro.com/en_us/research/23/j/infection-techniques-across-supply-chains-and-codebases.html如若转载,请注明原文地址