Vanir:一款基于基于源代码的静态分析工具

admin 2025年2月11日15:04:57评论15 views字数 3610阅读12分2秒阅读模式
Vanir:一款基于基于源代码的静态分析工具
关于Vanir

Vanir是是一款基于源代码的静态分析工具,可自动识别目标系统中缺失的安全补丁列表。默认情况下,Vanir 会从开源漏洞 (OSV) 中提取最新的 CVE 及其相应的签名,以便用户可以透明地扫描缺失的补丁以获取最新的 CVE 列表。

Vanir:一款基于基于源代码的静态分析工具

Vanir 目前支持 C/C++ 和 Java 源代码,Google 提供的 Vanir 签名涵盖自 2020 年 7 月以来通过Android 安全公告发布的 CVE。Vanir 的主要设计目的是以可持续且可扩展的方式检测缺失的安全补丁,且误报率较低。

工具特性

1、代码差异容忍度:Vanir 可以从定制补丁中识别出缺失的安全补丁。这对于下游分支维护者(例如 Android 设备供应商和自定义内核维护者)尤其有益,他们通常需要对上游代码进行额外更改以使其适应他们的设备,并且还希望确保其设备的安全性与最新的安全更新保持一致。

2、与元数据无关的检测:Vanir 从根本上不依赖目标系统的元数据,例如版本号、提交历史记录和 SBOM。Vanir 直接分析目标系统的实际源代码并确定需要特定安全补丁的文件/功能。虽然 Vanir 用户可以选择通过提供元数据来过滤掉不需要的发现,但其核心检测逻辑与元数据无关。这使 Vanir 用户可以灵活地使用该工具,并使用各种选项来实现不同的目的。

3、自动签名生成:Vanir 签名生成过程高度自动化,使漏洞发布者(如 CNA 和生态系统安全维护者)能够有效利用 Vanir 并确保其下游分支维护者采用安全补丁,从而简化工作流程并优化资源分配。

4、运行时间:由于 Vanir 使用基于源代码的静态分析来检测缺失的补丁,因此与基于二进制的静态分析工具或动态分析工具相比,运行时间会更短。

5、透明度:Vanir 是一款独立的、完全开源的应用程序。这使用户能够独立调查和解决 Vanir 发现的任何漏洞,而无需依赖或受外部服务提供商的响应阻碍。

6、持续更新的漏洞数据:Vanir 工具与漏洞数据分离,Vanir 的更新 Android 漏洞数据将由OSV中的 Google Android 安全团队维护。这样一来,Vanir 用户只需运行 Vanir 即可获得最新的漏洞数据,而无需每月更新。其他 CNA或系统安全维护人员的进一步贡献将使用户能够将 Vanir 用于其他生态系统。

7、CI/CD 集成:Vanir 也以 Python 库的形式提供。用户可以将 Vanir 库集成到自己的自动化管道中,以高度自动化和系统化的方式验证任何缺失的补丁。

工具架构

Vanir:一款基于基于源代码的静态分析工具

Vanir:一款基于基于源代码的静态分析工具

工具要求

requests

absl-py

mmh3

unidiff

jinja2

typing_extensions>=4,<5

python-dateutil

工具安装

由于该工具基于Python 3开发,因此我们首先需要在本地设备上安装并配置好最新版本的Python 3环境。

接下来,广大研究人员可以直接使用下列命令将该项目源码克隆至本地:

git clone https://github.com/google/vanir.git

然后切换到项目目录中,使用pip命令和项目提供的requirements.txt安装该工具所需的其他依赖组件:

cd vanirpip install -r requirements.txt
工具使用

根据所有已知签名扫描其中的所有存储库:

./bazel-bin/detector_runner repo_scanner Android ~/android-src

针对位于的本地内核代码运行:

./bazel-bin/detector_runner android_kernel_scanner /tmp/test_kernel

针对本地检出的 Android 框架/基本源运行:

./bazel-bin/detector_runner       package_scanner Android platform/frameworks/base /tmp/test_fwk_base

针对目录中所有受支持的源文件的所有签名运行:

./bazel-bin/detector_runner       {{ '<strong>' }}--target_selection_strategy all_files{{ '</strong>' }}       offline_directory_scanner /some/directory/with/code

下列命令即可输出结果:

Scanned 833 source files (skipped 106253 source files likely unaffected by known vulnerabilities).Found 12 potentially unpatched vulnerabilities: CVE-2020-11116, CVE-2020-26139, CVE-2020-26141, CVE-2020-26145, CVE-2020-26146, CVE-2020-3698, CVE-2021-0476, CVE-2021-1977, CVE-2021-30319, CVE-2022-22065, CVE-2022-25670, CVE-2023-43534Detailed report: - /tmp/vanir/report-20240321182302.html - /tmp/vanir/report-20240321182302.json

报告文件示例:

{    "options": "--target_root=/tmp/test_kernel_simple --vulnerability_file_name=/tmp/vanir_vul_with_sign_20230705.json",    "covered_cves": [        "CVE-2017-18509",        ...        "CVE-2023-20938"    ],    "missing_patches": [        {            "ID": "ASB-A-174737742",            "CVE": [                "CVE-2020-15436"            ],            "OSV": "https://osv.dev/vulnerability/ASB-A-174737742",            "details": [                {                    "unpatched_code": "fs/block_dev.c::blkdev_get",                    "patch": "https://android.googlesource.com/kernel/common/+/49289b1fa5a67011",                    "matched_signature": "ASB-A-174737742-1030258c"                },                {                    "unpatched_code": "fs/block_dev.c",                    "patch": "https://android.googlesource.com/kernel/common/+/49289b1fa5a67011",                    "matched_signature": "ASB-A-174737742-339e9e91"                }            ]        },        ...        {            "ID": "ASB-A-185125206",            "CVE": [                "CVE-2021-39698"            ],            "OSV": "https://osv.dev/vulnerability/ASB-A-185125206",            "details": [                {                    "unpatched_code": "fs/signalfd.c::signalfd_cleanup",                    "patch": "https://android.googlesource.com/kernel/common/+/9537bae0da1f",                    "matched_signature": "ASB-A-185125206-c9d43168"                },                {                    "unpatched_code": "fs/signalfd.c",                    "patch": "https://android.googlesource.com/kernel/common/+/9537bae0da1f",                    "matched_signature": "ASB-A-185125206-e8972c8a"                }            ]        }    ]}
工具运行演示

假设目标项目源代码路径为~/my/android/repo,可以直接运行下列命令:

bazel build //:detector_runner

./bazel-bin/detector_runner repo_scanner Android ~/my/android/repo


接下来,可以直接在/tmp/vanir/report-YYYYMMDDhhmmss.html和/tmp/vanir/report-YYYYMMDDhhmmss.json中找到Vanir识别出的缺失补丁。

HTML 报告文件:

Vanir:一款基于基于源代码的静态分析工具

许可证协议

本项目的开发与发布遵循BSD-3-Clause开源许可协议。

项目地址

Vanir

https://github.com/google/vanir

原文始发于微信公众号(FreeBuf):Vanir:一款基于基于源代码的静态分析工具

 

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月11日15:04:57
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Vanir:一款基于基于源代码的静态分析工具https://cn-sec.com/archives/3643617.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息