
Forked from https://gitlab.alpinelinux.org/kaniini/secfixes-tracker
Это веб-приложение на Flask, которое отслеживает исправления безопасности в 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Запускает веб-сервер. Это также можно сделать с помощью 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Импортирует сведения о CVE из https://github.com/cisagov/vulnrichment.
flask update-states [repo]Обновляет различные элементы VulnerabilityState на основе текущего содержимого
каналов secfixes, NVD и apkindex. Эту команду следует выполнять после указанных выше
задач импорта на ежечасной основе.
Правила переписывания синхронизируются из Alpine infra/docker/secfixes-tracker. Описание структуры файлов см. в config/README.md.
Приложение Flask использует Python CUSTOM_REWRITERS в secfixes_tracker/application.cfg (продублировано в config/prod.settings.py). Правила представляют собой lambda-функции, сопоставляемые как cpe_vendor:source_pkgname или cpe_vendor:*.
PACKAGE_EXCLUSIONS в том же файле исключает пакеты, накапливающие ложноположительные CVE (например, bridge).
secfixes-cli использует правила на основе expr в config/application.toml (продублировано в 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, схема базы данных будет стабильной.