![]()
C0deVari4nt 是一个变体分析与可视化工具,用于检查代码库中是否存在相似的漏洞。它利用 CodeQL(一种语义代码分析引擎),基于用户控制的 CodeQL 查询模板对代码进行查询,并将结果传递给基于 vis.js 和 React 构建的客户端界面,以供进一步探索和可视化。这使得基于先前漏洞报告进行快速、全面的变体分析成为可能。vis.js 的可视化功能为开发者提供了对易受攻击代码路径的额外洞察,使他们能够有效地对潜在变体进行优先级排序。

2021 年 12 月的 Log4Shell 事件凸显了开源开发者在响应漏洞报告时面临的困难。在针对 CVE-2021-44228(该漏洞允许未经身份验证的远程攻击者控制运行易受攻击版本 Log4j 2 的设备)发布初始补丁后,Apache 又发布了 3 个额外的补丁来修复相关漏洞和未缓解的边缘情况。
开源开发者通常缺乏全面代码审查方面的培训,并且在识别漏洞变体方面面临困难,从而导致补丁不完整。尽管存在 CodeQL 查询套件以便于对代码库进行快速分析,但这些套件返回的结果可能会产生较高的误报率。此外,这些套件依赖于预定义查询,不支持变体分析,并且未针对单个代码库进行定制。因此,开源项目通常以零散的方式响应漏洞报告,从而遗漏了潜在的变体。
C0deVari4nt 为开发者提供了一个平台,使其能够轻松进行变体分析,而无需承担编写自己的 CodeQL 查询的巨大开销。这为开发者提供了灵活性,可以通过提供代码库特定信息(例如漏洞的特定来源和汇聚点)来定制 CodeQL 模板。结果将显示在由 vis.js 驱动的图形数据库视图中,以便开发者快速识别潜在变体。因此,开发者将能够从单个漏洞报告中有效处理整类缺陷。
C0deVari4nt 使用 Python、CodeQL、vis.js 和 React 构建,创建一个交互式 GUI 应用程序,用于接收用户输入并展示不同易受攻击代码路径之间的关系。

C0deVari4nt 由以下 2 个主要组件组成:
客户端界面的更多详情如下所示:

dbextractor.py <codeql db zip file> 以解压 codeql 数据库内容pip install -r requirements.txtuvicorn main:app --reload 在 8000 端口启动本地开发服务器npm inpm start 启动本地开发服务器
strcat 函数的调用,且源参数未经边界检查strncpy 函数的调用,且源参数未经边界检查snprintf 调用返回值未进行边界检查的情况
malloc、calloc 或 realloc 的调用,且未分配足够内存来容纳指针类型的实例isAdditionalTaintStep 方法在两个不连通的函数之间传递污点isAdditionalTaintStep 方法在运行时具有相同值的指针之间传递污点以下展示了以 recvfrom 为来源、mempool_alloc 为附加污点步骤、memcpy 为汇聚点的查询所对应的 CodeQL 结果:

此结果共产生 27 条不同代码路径中的 180 个节点。结果以简单的 neo4j 界面呈现如下:

通过将此查询输入我们的工具,我们能够识别出每个节点、来源和汇聚点的重复出现,并合并节点之间的关系。
这生成了一个更加清晰的图形,总共只有 11 个唯一节点,同时仍然保留了所有 27 条唯一代码路径:

结果可以通过我们的路径标记功能进一步分类到各自对应的路径中:

