JFrog 安全研究团队近期发现并报告了一起严重的安全事件,在一个托管于Docker Hub上的公共Docker容器内存在管理员权限的访问令牌。这个令牌可以访问 Python、PyPI 和 Python 软件基金会 (PSF) 的 GitHub 存储库,从而泄露了敏感信息。
作为一项面向互联网社区的服务,JFrog安全研究团队持续监控Docker Hub、NPM和PyPI等公共仓库,并通过扫描寻找恶意软件包及泄露的密钥。一旦检测到潜在威胁,研究团队会立刻向维护人员发送通知,确保任何可能存在的漏洞能在被攻击者利用之前得到修复。尽管过去JFrog研究团队多次检测到类似泄露密钥的安全隐患,但鉴于此次事件潜在影响范围广泛,后果极其严重——假设攻击者将恶意代码注入PyPI软件包中或替换所有Python包,这将有可能会影响整个Python语言!
JFrog安全研究团队第一时间发现了泄露的密钥并立即通知了PyPI的安全团队后者迅速行动仅仅用了不到20分钟就移除了这个危险令牌避免了一场可能发生的潜在安全灾难。
如今 Python 编程语言被广泛应用到绝大部分数字系统中,包括:
l YouTube、Instagram、Facebook、Reddit、Pinterest以及其他各类社交媒体网站
所有基于机器学习和人工智能的技术系统
金融支付系统如Venmo、Zelle,还有摩根大通和高盛这些银行的内部操作系统。
我们将深入探讨JFrog如何及时发现并处理一起可能影响整个Python基础设施的GitHub个人访问令牌泄露事件。这次案例通过强调“右移”策略的重要性,即确保不仅在源代码中识别密钥,还应加强对二进制文件和生产制品的安全检测。
我们发现的什么
在Docker Hub的一个公共仓库里,我们发现了一条“传统”GitHub令牌,这与更新后的细粒度令牌存在差异。这些传统的GitHub令牌会授予用户访问所有仓库的基本权限,这种机制可能导致未经授权的人员使用它们来窃取敏感信息或者滥用公共资源。
在这个例子中,故事的主角持有对Python核心基础设施仓库(包括PSF、PyPI和Python语言本身)的所有管理权限。

可能会产生的影响
如果有人发现这份被泄露的令牌的话,则会对安全系统造成严重威胁。此令牌将赋予其持有者管理所有 Python 项目的完全访问权,同时也能操纵 PyPI 并进行大规模的供应链攻击。
如果出现这一情况可能会发生供应链攻击,其中一种方式是恶意代码被藏匿于CPython中,该组件包含核心库——由C语言编写的Python语言。由于Python的应用广泛性,一旦这种恶意代码混入了Python的分发版之中,私家侦探,侦探公司,调查公司,查人找物,商务调查,出轨外遇调查,婚外情调查,私人调查,19209219596那么它将对全球数以千万计的计算机产生影响。

另一种可能遭受袭击的情形是:不法之徒渗入了仓库代码中,插入恶意程序,该程序负责管理PyPI的包管理系统。若攻击者成功获得访问仓库权限后,他们可以随意修改热门包,并将其改造成包含有害代码或完全覆盖原有内容的恶意程序,尽管这种入侵行为技术并不算高明,但其危害却极其严重不可忽视。

为什么这种令牌只可以在二进制文件中被发现?
在Docker容器内的一个编译后的Python文件——__pycache__/build.cpython-311.pyc中发现了身份验证令牌:

然而,尽管该令牌位于一个具有相同功能的源代码文件中,它却没有出现在同一部分。
这意味着原作者是指的
曾经他们添加到源代码中的授权令牌以及随后运行的源代码。
这个正在执行的Python脚本(二进制文件)包含有授权凭据。
尽管原作者从源代码中删除了授权令牌,但是却没有同步清理.pyc文件。
将修正后的源码以及未修正的 .pyc二进制文件打包成docker镜像
举例来说,在python-3.11.build.cpython.pyc和Docker容器中的源码之间进行比较,可以看到两者的细微差别。

从二进制文件“build.cpython-311.pyc”中重构的源代码

Docker容器中匹配文件的实际源代码
可以察觉到,尽管经过将.pyc后缀文件中的逆编译代码与原始程序相当接近,但仍包含了包含有有效GitHub令牌的授权头部数据。
仅检查源代码中搜索密钥不是足够的
鉴于此事件的发生警醒我们,在预防此类安全隐患方面,尽管在二进制文件中搜索泄露机密信息要比文本文件更难,但在很多情况下关键数据都存在其中,因此彻底审核发布Docker镜像中的源代码和二进制数据是最佳解决途径。

PyPI 的快速回应
在本报告中,我们对PyPI安全团队给予的热情回应深表敬意。
企业及有关组织须以最快的速度采取有效措施来减缓可能发生的泄漏危害。
此次事件中,JFrog发现令牌后立即将此情况通知了PyPI的安全团队和令牌的所有者。PyPI的安全团队立即作出响应,在收到通知后的17分钟内迅速回应并撤销了这一有安全隐患的令牌。同时,PyPI进行了全面检查以确认该令牌是否涉及具有安全威胁可疑活动。
我们可以从密钥检查中吸取什么教训?
通过这次经历,我们可以吸取宝贵的教训。
在源代码和文本文件中检测密钥不足以排除潜在的安全隐患。现代集成开发环境私家侦探,侦探公司,调查公司,查人找物,商务调查,出轨外遇调查,婚外情调查,私人调查,19209219596(IDE)和开发工具虽然可以在源代码中发现并阻止密钥的泄露,然而它们对构建和打包工具生成的二进制制品的处理范围有限,这通常只局限于代码领域,而忽视了由这些工具生成的环境、配置和其他二进制文件中的密钥。我们遇到开源注册表中大部分密钥往往位于环境、配置和二进制文件等位置。
2. 将旧的GitHub令牌替换为新的令牌以提升可见性。最初,GitHub使用十六进制编码长度40个字符的令牌字符串与SHA1哈希字符串无异,大多数密钥扫描工具都无法检测到这种形式的字符串。2021年,GitHub更改了令牌格式,并未强制要求所有用户重新生成他们的令牌。新的令牌格式包含一个可识别前缀ghp_以及嵌入了校验和的令牌,这允许密钥检测工具更容易、更准确地识别它们。
3. 令牌只能访问它所授权的应用程序所需的资源。不要将权限设置为最大,这是不理智的想法。两年前,GitHub引入了新的细粒度令牌,与传统的令牌不同。它们允许用户选择个人访问令牌可使用的所有权限,并将其限制在特定的任务所需的操作范围之内。我们强烈建议您采用此功能,从而最大程度上防止像在辅助项目或临时的"hello-world"应用程序中被泄露整个基础设施最终访问权的令牌这种情况发生。 请注意:以上内容为简化版,请参照原文获取更多信息。

JFrog Secrets Detection – 二进制优势
即使关键令牌存在于编译后的Python二进制文件(.pyc)中,JFrog的密钥检测引擎仍然能正确地识别它。这些原因之所以能够有效发挥作用是因为关键令牌泄露的主要两个重要因素。
JFrog Secrets Detection 已在开发者 IDE 之内实现了左移运行,并且还可以在已经部署的 Docker 容器内进行右移运行。
JFrog Secrets Detection 能够让您实时、全面地保护文档中的机密信息不被泄露。
JFrog的检测基于JFrog Xray针对配置文件、文本文件和二进制文件进行扫描,查找纯文本凭据、私钥、令牌和类似的密钥信息。JFrog使用专有的通用密钥匹配器以及超过150种特定类型的证书列表,持续更新其数据库,从而实现最佳的文件覆盖范围。
顶: 6踩: 8868





评论专区