freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Vanir:一款基于基于源代码的静态分析工具
2025-01-14 22:47:20
所属地 广西

关于Vanir

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

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 库集成到自己的自动化管道中,以高度自动化和系统化的方式验证任何缺失的补丁。

工具架构

工具要求

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 vanir

pip 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-43534

Detailed 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 报告文件:

许可证协议

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

项目地址

Vanir:【GitHub传送门

参考资料

https://www.ieee-security.org/TC/SP2012/papers/4681a048.pdf

https://seulbae-security.github.io/pubs/vuddy-sp17.pdf

# 静态分析技术 # 静态分析 # 源代码审计 # 源代码安全 # 源代码检测
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录