
Forked from https://gitlab.alpinelinux.org/kaniini/secfixes-tracker
这是一个 Flask Web 应用程序,用于跟踪 Alpine 中的安全修复。
通过使用 Alpine secdb,我们通常可以推断哪些 CVE 已修复,哪些尚未修复。将添加对 secfixes 报告模式的一些扩展,以允许软件包维护者标记误报。
在不久的将来,当引擎处理状态更改时,这些更改将被报告到安全公告列表中。
你应该以通常的方式创建一个 virtualenv,然后执行 pip3 install -r requirements.txt。
如果你想使用 sqlite 以外的数据库,你需要安装相应的驱动程序,例如 pip3 install psycopg2。
最后,你需要编写一个配置文件:复制示例文件并根据你的需求进行修改。
然后,你需要设置以下环境变量为有用的值:
SECFIXES_TRACKER_CONFIG: 配置文件的路径FLASK_APP: 应用程序的名称,secfixes_tracker完成后,使用 flask init-db 初始化数据库。
可选地,运行 make 来构建 secfixes-cli。这需要安装 go。
环境配置完成后,你可以运行各种任务:
flask run运行 Web 服务器。这也可以使用 gunicorn 之类的工具来完成,但此处不涉及。
flask init-db初始化数据库。
flask import-apkindex [repo]导入已配置的仓库。
flask import-secfixes [repo]导入已配置的 secdb 数据源。
flask import-nvd [feed-name]导入 NVD 数据源,例如 2021 或 recent。
一旦导入了年度数据源,你只需要每天导入 recent 数据源。
./secfixes-cli import-vulnrich从 https://github.com/cisagov/vulnrichment 导入 CVE 详细信息。
flask update-states [repo]根据 secfixes、NVD 和 apkindex 数据源的当前内容更新各种 VulnerabilityState 项目。应在上述导入任务之后每小时运行一次。
重写器规则从 Alpine infra/docker/secfixes-tracker 同步。有关文件布局,请参阅 config/README.md。
Flask 应用程序使用 secfixes_tracker/application.cfg 中的 Python CUSTOM_REWRITERS(在 config/prod.settings.py 中有镜像)。规则是 lambda 函数,匹配形式为 cpe_vendor:source_pkgname 或 cpe_vendor:*。
同一文件中的 PACKAGE_EXCLUSIONS 排除那些累积误报 CVE 的软件包(例如 bridge)。
secfixes-cli 使用 config/application.toml 中基于 expr 的规则(在 config/prod.application.toml 中有镜像)。规则基于 expr。
示例规则如下:
[[rewriters]]
predicate = "target_sw == 'python'"
rewrite_rule = "product | lower() | replace('_', '-') | fmt('py3-%s')"
predicate 决定规则是否适用,而 rewrite_rule 决定应如何重写 cpe。一个名为 field 的可选第三选项指定 CPE 的哪个字段将被重写。如果未提供,则默认为 product。
表达式的环境中可使用以下变量:
vendorproducttarget_swversionfmt 是使用 fmt.Sprintf 实现的,但只接受 2 个参数。第一个参数可以是字符串或切片。这使得它可以与管道一起使用。
你需要运行导入任务,然后运行 update-states 任务。这就是需要做的全部。
电子邮件相关内容正在重新设计,以更好地适应跟踪引擎的实现方式。一旦电子邮件相关功能准备好,请留意此处的设置说明。
目前,数据库模式不稳定。升级此软件时,你需要重建数据库。一旦我们达到 1.0 版本,数据库模式将保持稳定。