攻击者使用 Python 编译的字节码来逃避检测

以 PyPI(Python 包索引)等开源包存储库为目标的攻击者设计了一种新技术,可以将他们的恶意代码隐藏在安全扫描器、人工审查和其他形式的安全分析中。

在一次事件中,研究人员发现恶意软件代码隐藏在 Python 字节码 (PYC) 文件中,该文件可以直接执行,而不是源代码文件由 Python 运行时解释。

安全公司 ReversingLabs 的研究人员在一份报告中说:这可能是第一个利用 Python 字节码文件可以直接执行这一事实的供应链攻击,而且它是在恶意提交到 Python Package Index 的激增之际发生的。

如果是这样,它会带来另一个供应链风险,因为大多数安全工具可能会错过这种类型的攻击,这些工具只扫描 Python 源代码 (PY) 文件。

编译代码与源代码

在公共存储库(例如用于 JavaScript 的 npm、用于 Python 的 PyPI 和用于 Ruby 的 RubyGems)中发现的绝大多数包都包含打包到存档中的开源代码文件。它们很容易解包和阅读,因此已经为这些存储库构建了安全扫描器来处理这种类型的包装。

攻击者一直在与安全公司进行斗争以逃避检测,而对于明文代码,最常见的逃避技术是混淆。这包括使用编程语言本身的特性,如编码、解码或评估,使代码不可读但功能正常。例如,用base64编码恶意代码是一种常用的技术,但安全工具可以处理这种编码。

在 PyPI 生态系统中,W4SP Stealer 恶意软件背后的网络犯罪分子以采用包括 base64 编码、LZMA 压缩和缩小在内的技术而闻名,从代码中删除空格和注释以使其更紧凑但也更难阅读。

该小组使用一些第三方开源工具来实现这一点,例如 pyminifier、Kramer 或 Hyperion。在 W4SP 攻击的一种变体中,文件中混淆的恶意代码被移动到默认屏幕边框的边缘之外,这样手动查看源代码文件的人就看不到它了。

但是,PYC 文件不同。它们不像纯文本 PY 脚本那样是人类可读的。PYC 文件是在 Python 解释器导入或执行 Python 脚本时生成的。因为它们已经是解释(编译)代码,所以它们稍后可以由 Python 解释器直接执行,而无需重新解释原始脚本。这有助于提高性能,因为它具有更快的执行时间,并且此类文件最常见的用途是分发 Python 模块。

在大多数 PyPI 恶意软件实例中,恶意混淆代码旨在访问外部 URL 并下载恶意软件,通常是信息窃取程序,这是安全工具检测可疑行为的另一个机会。

在最近的这起事件中,一个名为 fshec2 的包被发现包含一个恶意 PYC 文件,完整的恶意负载可以隐藏在文件中,如果安全工具不是为反编译它而设计的,就很难检测到它。

在 fshec2 包中发现的加载程序脚本包含最少的 Python 代码,并执行一个简单的操作:加载已编译的 Python 模块,它恰好是一个恶意模块。

检查器是 PyPI 安全团队提供的用于分析 PyPI 包的默认工具,目前不提供任何分析二进制文件以发现恶意行为的方法。编译代码来自.PYC 文件需要反编译才能分析其内容。

发现的 fshec2 包表现出可能意在逃避检测的额外行为。通常,使用 import 指令从 Python 脚本导入模块。然而,在这种情况下,恶意 PYC 模块是使用 importlib 加载的,importlib 是一个实现导入功能的单独包,仅用于特定情况,例如在导入时动态修改导入的库。

在这种情况下,恶意 PYC 没有被修改,因此除了避免使用常规导入指令之外,没有技术理由使用 importlib,可能是为了逃避检测。

凭证窃取似乎是主要目标

一旦在机器上执行,fshec2 恶意负载会收集有关系统的信息,例如用户名、目录列表和主机名,然后在 Linux 上设置 cron 作业或在 Windows 上设置计划任务以执行从远程服务器获取的命令。

这些命令允许恶意软件自我更新,攻击者能够提供新版本以及 Python 脚本形式的其他有效负载。

研究人员分析了命令和控制服务器,发现了允许他们浏览某些信息的错误配置。例如,他们发现受害者机器被赋予了一个递增的 ID,并且能够确认该恶意软件确实是由多个受害者执行的。

这些错误的数量之多可能会让我们得出这样的结论,即这次攻击不是国家支持的行为者所为,也不是高级持续威胁 (APT)。虽然团队没有收集到足够的证据来以某种方式证明这一假设,但通过增加文件 ID 来收集文件名让我们确定在某些情况下攻击是成功的。

我们的研究人员仍然无法说出目标是谁或什么是。但是,我们可以确认开发人员确实安装了恶意 PyPI 包,并且他们的机器名称、用户名和目录列表因此被收集。

在服务器上发现的一些文件名表明攻击者在一些机器上部署了键盘记录功能。

从历史上看,npm 一直是不幸的领导者,PyPI 也参加了比赛,看看哪个开源平台最受恶意软件作者的关注。然而,在过去六个月中,我们和其他人观察到发布到 PyPI 的恶意软件数量显着增加。事实上,在 5 月份,在 PyPI 上创建新用户帐户和项目被暂停了几个小时,因为大量的恶意活动。

我们向 PyPI 安全团队报告了新的攻击媒介,他们删除了软件包并表示他们之前从未见过这种攻击技术。这并不排除其他类似包进入存储库的可能性。

为了应对这些现代软件供应链威胁,组织需要的不仅仅是静态代码分析解决方案。

他们需要的工具还可以监控敏感的开发系统,以发现可疑进程创建、文件执行、未经授权的 URL 访问、信息收集命令以及使用 get_path 或 importlib 等易于滥用的功能。

猜你喜欢

转载自blog.csdn.net/qq_29607687/article/details/131031282