阿里云的用户们遭到最新的供应链攻击

在 2023 年 9 月,一名攻击者通过 Pypi 执行了一次针对性的攻击,将使用阿里云服务、AWS 和 Telegram 的开发人员吸引到恶意软件包。

这些软件包中的恶意代码不是自动执行,而是巧妙地隐藏在函数中,旨在仅在这些函数被调用时才触发。

攻击者利用误植域名和星标劫持(Starjacking)这两种技术将开发人员引诱到恶意软件包。

其中一个恶意软包模仿一个流行的代码存储库,利用了它在 Pypi 软件包管理器中的缺失大做文章。

在今年 9 月份,一个化名为 "kohlersbtuh15" 的攻击者试图通过向 PyPi 软件包管理器上传一系列恶意软件包来钻开源社区的空子。

从这些软件包的名称及其中所含的代码来看,攻击者的目标似乎是使用阿里云服务、Telegram 和 AWS 的开发人员。


图 1. kohlersbtuh15 用户帐户


攻击者实施了诸多技术,包括误植域名和星标劫持(指攻击者通过将软件包链接到 GitHub 上一个毫不相关的不同软件包的代码存储库,以操纵衡量软件包受欢迎程度的星标),以诱骗受害者下载恶意软件包。

这种攻击的特别之处在于,不同于在 Python 软件包的设置文件中植入恶意代码这种常见策略(一旦软件包安装就会自动执行),这个攻击者将恶意脚本嵌入到软件包的深处,嵌入到特定的函数中。这意味着恶意代码只会在正常使用期间特定函数被调用时执行。

这种隐藏恶意代码的独特方法不仅有助于隐藏代码,还针对特定的操作或功能,从而使攻击更有效、更难检测。此外,由于许多安全工具扫描查找可自动执行的恶意脚本,将代码嵌入到函数中加大了规避这类安全措施的可能性。

攻击途径:误植域名

误植域名利用开发人员在输入安装命令时所犯的击键错误来利用人为错误,威胁分子可能会发布名称与目标软件包相似的恶意软件包。

此外,如果开发人员在浏览网页时不小心拼错了合法软件包的名称,他们可能会在浑然不觉的情况下进入到恶意软件包的网站。

攻击者的手法是制作一个酷似合法软件包的软件包,但添加了一个隐藏的恶意依赖项,从而触发恶意脚本在后台运行。攻击者也可能将恶意代码直接嵌入到软件包中。

从受害者的角度来看,软件包似乎正常运行,掩盖了幕后开展的恶意活动。

攻击途径:星标劫持

对于开源开发人员说,通常的工作流程包括在 GitHub 上托管项目,并通过 NPM 或 PyPi 等软件包管理器分发可使用的软件包。

从软件包管理器中选择软件包时,开发人员通常查看该软件包的受欢迎程度,通常是通过其 GitHub 统计数据来查看,一些软件包管理器直观地显示这个指标,以此表明其质量和维护水平。

然而,软件包管理器显示的统计数据并没有经过任何验证,伪造这些统计数据很简单。

星标劫持是将托管在软件包管理器上的软件包链接到 GitHub 上另一个毫不相关的软件包的代码存储库的做法。然后,毫无防备的开发人员上当受骗,以为这是值得信赖的软件包。

为了最大限度地扩大攻击范围,攻击者将星标劫持和误植域名结合在同一个软件包中,而这正是攻击者决定对其许多软件包所做的操作,"Telethon2" 就是一个例子。


图 2


Telethon 2

其中一个引人注目的软件包是 python 软件包 Telethon2,它模仿了流行的 "Telethon" 软件包(下载量达 6900 万次),它还通过使用 "telethon" 软件包的 GitHub 官方代码存储库来执行星标劫持。

负责这起活动的攻击者从官方 "telethon" 软件包复制了完全相同的源代码,只有一点不同:在 "telethon/client/messages.py" 文件中嵌入了以下两行恶意代码。


图 3. 恶意代码隐藏在 telethon2-1.30.3/telethon/client/messages.py 的 send_message 函数中。


恶意代码不是在软件包下载时自动执行,而是在 "send message" 函数被调用才被激活。

这段代码从 "hxxps [ : ] //tg [ . ] aliyun-sdk-requests [ . ] xyz/telegram" 中获取 base64 编码的外部内容,然后将其解码以执行操作系统命令。

enumerate-iam

另一个引人注目的软件包是 "enumerate-iam" 软件包。攻击者利用了一个名为 "enumerate-iam" 的流行 GitHub 代码存储库,该代码存储库并没有相应的 Python 软件包,攻击者创建了自己的恶意 Python 软件包,与合法代码存储库同名。


图 4. 合法 GitHub 代码存储库:enumerate-iam



图 5. 恶意软件包:"enumerate-iam"


与攻击者的其他软件包一样,恶意代码隐藏在软件包中的一个函数中,一旦函数被激活,就会试图窃取敏感凭据。


图 6


对于在 GitHub 上维护项目的维护者来说,这个迹象充分表明至少要有一个占位符软件包,以防止攻击者利用这条攻击途径。


图 7. 该列表显示了恶意软件包及其相应的攻击技术



图 8. 按国家或地区划分的恶意软件包总下载量百分比分布


影响

通过瞄准 Telegram、AWS 和阿里云等平台上使用的流行软件包,攻击者展示了很高的精准度。这不是一起随机的行为,而是一起蓄意的行为,以攻击依赖这些广泛使用的平台的特定用户,可能影响数百万人。

这起攻击的潜在损害并不仅限于受攻击的系统,还涉及与这些平台相关的特定数据,包括来自 Telegram 的通讯内容细节、来自 AWS 的敏感云数据以及来自阿里云的业务相关信息。

攻击者在特定函数中嵌入恶意代码,以确保有害脚本在这些函数被调用之前保持潜伏状态。这种方法不仅绕过了通常检测自动执行脚本的许多常规安全扫描,还允许发动更有针对性的攻击。当毫无戒心的开发人员或用户调用这些函数时,他们不知不觉中激活了恶意代码,使攻击既隐蔽又高效。