代码使用了什么,是否存在漏洞?It-depends!- Trail of Bits博客
Evan Sultanik
2021年12月16日
supply-chain, research-practice
您刚刚克隆了一个新的源代码仓库,想要快速了解其依赖关系。我们的工具it-depends可以帮您实现。
我们自豪地宣布发布it-depends,这是一个用于自动枚举依赖关系的开源工具。您只需将其指向源代码仓库,它就会构建包含所需依赖关系的图谱。it-depends目前支持cargo、npm、pip、go、CMake和autotools代码库,其关联包管理器中的包,以及Ubuntu apt。
现代编程语言和打包框架越来越多地包含用于枚举依赖关系甚至将其映射到已知漏洞的实用程序(例如npm audit、cargo audit和pip-audit)。it-depends将这些功能统一到一个工具中,并支持没有类似工具的语言和框架,如autotools和CMake。只需在源代码仓库的根目录运行it-depends,该工具就会为仓库可能依赖的所有包生成软件物料清单(SBOM)。it-depends不仅检测已知易受攻击的依赖项,还识别仓库内的重复功能,这可以支持软件减负工作。“为什么这个仓库同时使用libsodium和libssl?”
it-depends使用CVEdb和Google的开源漏洞(OSV)数据库来确定哪些已知漏洞可能从任何包中访问。找到匹配条目后,该工具会生成代码仓库或包中所有可访问CVE的全面列表。
现有方法通常仅解析直接依赖项或依赖包锁定文件。相比之下,it-depends从源代码仓库或包规范开始递归构建项目的依赖关系图,枚举所有可行依赖项解析的超集,而不仅仅是单一解析。这有助于识别可能仅在所有可行依赖项解析宇宙的子集中存在的潜在上游漏洞。
现有解决方案停留在其包管理生态系统的围墙花园内。相比之下,it-depends能够检测本地库的使用和相互依赖关系。例如,it-depends正确识别Python包pytz依赖于本地库libtinfo6,而libtinfo6本身依赖于libcrypt1,libcrypt1又依赖于libc6,依此类推。
it-depends可以生成SBOM、依赖关系图或交互式HTML页面
为什么枚举依赖关系很困难
语义版本控制:我们不仅关心系统上安装的特定版本;我们还想推理所有可以满足依赖关系的可能版本。
一些构建系统(如autotools和CMake)没有包的概念,并且本地库版本控制没有明确定义。
如果使用高级语言(如Python或JavaScript)编写的包使用本地库怎么办?
将CVE映射到源代码包并非易事。
基本功能(常规操作)
it-depends用Python编写,易于扩展。它建立在一组可插拔解析器之上,用于处理不同的包管理器和源代码仓库。每个解析器充当其特定包宇宙的预言机,扩展全局依赖关系图。为新的构建系统或包管理器添加解析器基本上只需要实现一个解析方法:
|
|
本地解析(不那么秘密的武器)
it-depends具有一个通用插件,用于推断给定包的本机操作系统级依赖关系。为实现这一点,每个包都安装在容器中,并使用ptrace监控本地库。文件访问被转换为提供包加载的库文件的Ubuntu包,并且从Ubuntu包存储库中提取本地间依赖关系。建立基线以移除当前正在分析的包类型固有的包。
自己尝试!
it-depends是免费开源的。您可以通过运行pip3 install it-depends
来安装它。进一步的安装说明可在该工具的GitHub页面上找到。请尝试一下,并告诉我们它的效果如何!
致谢
it-depends由Trail of Bits根据DARPA合同号HR001120C0084(分发声明A,批准公开发布:无限制分发)支持的工作开发。本材料中表达的任何意见、发现、结论或建议均为作者的观点,不一定反映美国政府或DARPA的观点。
如果您喜欢这篇文章,请分享: Twitter LinkedIn GitHub Mastodon Hacker News
页面内容 为什么枚举依赖关系很困难 基本功能(常规操作) 本地解析(不那么秘密的武器) 自己尝试! 致谢 近期文章 构建安全消息传递很困难:对Bitchat安全辩论的细致看法 使用Deptective调查您的依赖关系 系好安全带,Buttercup,AIxCC的评分回合正在进行中! 使您的智能合约超越私钥风险 Go解析器中意外的安全隐患 © 2025 Trail of Bits. 使用Hugo和Mainroad主题生成。