CVE-Manager: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
Нет описания правки
Строка 118: Строка 118:


Для того чтобы обозначенные настройки установления соответствия имён вступили в действие следует запустить модуль <i>cpe-map</i> заново для соответствующих ветвей (<code>cpe-map -b [<branch_name> ...]</code>), или для всех ветвей (<code>cpe-map -e</code>); При этом следует заново запустить модуль <i>cve-issues</i> для данных ветвей (<code>cve-issues -b [<branch_name> ...]</code>), или для всех ветвей (<code>cve-issues -b all</code>); В случае, если допустима обработка всех ветвей, запуск модулей <i>cpe-map</i> и <i>cve-issues</i> можно осуществить путём запуска автоматического формирования БДУ начиная с шага установления соответствия имён:
Для того чтобы обозначенные настройки установления соответствия имён вступили в действие следует запустить модуль <i>cpe-map</i> заново для соответствующих ветвей (<code>cpe-map -b [<branch_name> ...]</code>), или для всех ветвей (<code>cpe-map -e</code>); При этом следует заново запустить модуль <i>cve-issues</i> для данных ветвей (<code>cve-issues -b [<branch_name> ...]</code>), или для всех ветвей (<code>cve-issues -b all</code>); В случае, если допустима обработка всех ветвей, запуск модулей <i>cpe-map</i> и <i>cve-issues</i> можно осуществить путём запуска автоматического формирования БДУ начиная с шага установления соответствия имён:
:<code>cve-manager -a -b map</code>.
:<code>cve-manager -a -b map</code>


== Использование ==
== Использование ==

Версия от 13:12, 6 января 2020

cve-manager - консольная программа, предназначенная 1) для формирования базы данных уязвимостей (БДУ) программ, входящих в состав заданных репозиториев rpm-пакетов, а также 2) для осуществления анализа записей сформированной БДУ и подготовки отчётов на основе результатов этого анализа (в том числе с осуществлением рассылки по электронной почте).

Основными входными данными программы являются списки исходных и бинарных пакетов рассматриваемых репозиториев, а также списки известных уязвимостей. На данный момент поддерживается два источника списков известных уязвимостей - NVD (National Vulnerability Database) и ФСТЭК (Федеральная служба по техническому и экспортному контролю).

Программа имеет модульную структуру, написана на Python и C++, использует MySQL. Распространяется по лицензии GPLv3.0.

Структура программы

cve-manager состоит из следующих модулей:

  1. cve-manager - диалоговый интерфейс для запуска всех остальных модулей, в том числе для последовательного запуска модулей в автоматическом режиме;
  2. cve-backup - осуществляет резервное копирование/восстановление ранее сформированной БДУ;
  3. cve-history - осуществляет выборку незакрытых уязвимостей по текущему состоянию БДУ и сохраняет их в отдельной таблице с целью обеспечения возможности сравнения будущего состояния БДУ с этим сохранённым состоянием;
  4. cve-download - осуществляет загрузку по HTTPS списков уязвимостей, предоставляемых NVD и ФСТЭК, а также CPE словаря;
  5. cve-import - осуществляет для выбранных репозиториев внесение списка пакетов, которые размещены на alt-сервере (например /ALT/p8/files/list/src.list и /ALT/p8/files/list/bin.list для ветви p8), а также внесение загруженных списков уязвимостей и CPE словаря в БД MySQL; Имеет возможность фильтрации импортируемых списков пакетов в соответствии с содержимым предоставляемого текстового файла, каждая строка которого является названием пакета, информация о котором должна быть учтена в БДУ;
  6. cve-fixes - извлекает 'Fixes' записи и URL из метаданных всех исходных пакетов рассматриваемых репозиториев, использует gb-x-parse-vulns-from-changelog;
  7. cpe-map - осуществляет установление соответствия импортированных в БД названий исходных пакетов рассматриваемых репозиториев и 1) названий программных продуктов из импортированного в БД CPE словаря, а также 2) названий программных продуктов из импортированного в БД списка уязвимостей ФСТЭК;
  8. cve-issues - осуществляет установление соответствия между данными, внесёнными в БД с помощью модулей cve-import, cpe-map и cve-fixes, а именно - формирует записи в БД вида <CVE/ФСТЭК идентификатор>, <название пакета>, <CPE/ФСТЭК название уязвимого программного продукта>, <версия пакета>, <уязвимая версия программного продукта>, <fix-status>, где <fix-status> - значение из следующего набора (или комбинация из данных значений):
    1. changelog - устранение данной уязвимости обозначено в changelog-секции пакета;
    2. bigger ver - версия пакета в репозитории больше данной уязвимой версии;
    3. [lesser ver] - версия пакета в репозитории меньше данной уязвимой версии;
    4. [NO FIX] - версия пакета в репозитори совпадает с уязвимой версией программного продукта и устранение данной уязвимости не зафиксировано.
  9. cve-monitor - предназначен для посылки запросов выборки из таблиц БДУ и выдачи результатов (отчётов), например формирование списка всех пакетов с имеющимися незакрытыми уязвимостями или списка всех закрытых уязвимостей одной ветви, которые не закрыты в другой; Формируемые отчёты могут рассылаться на задаваемые адреса электронной почты; На данный момент (версия 0.28) отчёты предоставляются в собственном формате (см. подраздел "Мониторинг уязвимостей пакетов"), в перспективе возможность их получения в формате XML и JSON.

Все модули кроме cve-import написаны на Python, cve-import написан на C++.

Установка

cve-manager собран в репозиторий Sisyphus.

Установка полной версии (серверная и клиентская часть):

apt-get install cve-manager

Установка только клиентской части:

apt-get install cve-monitor

Настройка

Настройка серверной части

Параметры cve-manager определяются файлом ini-формата /etc/cve-manager/cve-manager.conf. Данный ini-файл включает следующие обязательные секции:

  1. database, в которой указываются параметры соединения с базой данных MySQL (server, user, passwd, schema);
  2. common, в которой указывается путь к корневому каталогу alt-сервера (basealt), путь к каталогу, в который cve-download загружает входные данные и откуда cve-import их импортирует в БД (download), а также источники списков уязвимостей, исключаемые из рассмотрения (excluded_vulsrc с возможными значениями nvd и fstec).

Прочие секции файла настройки воспринимаются как названия ветвей Sisyphus, информация об уязвимостях которых должна быть помещена в БДУ. Каждая из таких секций может включать определение следующих параметров:

  • base_dir - название основного каталога данного репозитория;
  • src_list - путь к списку исходных пакетов (src.list) данного репозитория;
  • bin_list - путь к списку бинарных пакетов (bin.list) данного репозитория;
  • srpms_dir - путь к каталогу с исходными пакетами (SRPMS) данного репозитория.

По-умолчанию значения перечисленных параметров соответствуют структуре каталогов alt-сервера. ВНИМАНИЕ - названия секций должны состоять только из латинских символов и цифр. В случае, если название репозитория включает прочие символы, следует воспользоваться переменной base_dir (см. пример, секция x81).

Пример файла настройки:

[database]
server  = "localhost:3306"
user    = some_username
passwd  = some_passwd
schema  = some_dbname

[common]
basealt = /space/
download = ~/.cve-manager/
excluded_vulsrc = fstec

[Sisyphus]

[p8]

[x81]
base_dir = /space/ALT/x8.1/

[some_custom_branch]
src_list = /some_custom_branch/lists/src.list
bin_list = /some_custom_branch/lists/bin.list
srpms_dir = /some_custom_branch/SRPMS/

Файл настройки принадлежит пользователю root, относится к группе cve и имеет режим rw-rw----. Также группе cve принадлежат все модули, кроме модуля cve-monitor. Таким образом вносить изменения в БДУ помимо пользователя root могут только члены группы cve. Добавить пользователя в группу cve можно с помощью следующей команды:

usermod -a -G cve <user-name>

Настройка клиентской части

cve-monitor имеет свой файл настройки /etc/cve-manager/cve-monitor.conf, позволяющий пользователям, не являющимся членами группы cve, осуществлять соединение с БДУ с правом только на чтение (SQL-запрос SELECT) - структура данного файла повторяет структуру файла cve-manager.conf (см. подраздел "Настройка серверной части"), при этом секция common, а также параметры ветвей ни на что не влияют, за исключением дополнительного параметра ветвей seniors, в котором перечисляются старшие ветви по отношению к данной, и которые будут использованы при формировании предложений по устранению существующих в данной ветви уязвимостей (при передаче флага --cure модулю cve-monitor), например:

[p9]
seniors = Sisyphus

[p8]
seniors = ${p9:seniors}, p9

Для настройки почтовой рассылки cve-monitor существует другой конфигурационной файл - /etc/cve-manager/cve-mail.conf, содержащий настройки соединения с почтовым сервером и списки адресатов, которые задаются группами в секции recipients; При запуске cve-monitor с флагом --mail следует передать название группы адресатов; Так, например, пусть файл настройки почтовой рассылки имеет следующее содержимое

[connection]
host = some_host.com
port = 25
username = some_mail_account
passwd = password_of_the_mail_account
raddress = some_mail_account@some_host.com

[recipients]
weekly = "some_email1@altlinux.org", "some_email2@basealt.ru", "some_email3@basealt.ru"
daily  = "some_email4@altlinux.org", "some_email5@basealt.ru"
some_other_group_of_recipients = "some_other_email@some_other_host.com"

Тогда, например, для того чтобы результаты команды cve-monitor --show issues unfixed --group после формирования были отправлены группе адресатов daily следует исполнить следующую команду:

cve-monitor --show issues unfixed --group --mail daily

Внутренние знания cve-manager

Пакет cve-manager-inner-knowledge содержит ряд файлов с данными, которые могут быть отредактированы пользователем с целью оказания влияния на процесс формирования БДУ:

  • cpe-mapping.csv (/etc/cve-manager/cpe-mapping.csv) - предопределяет соответствие имён на начальном этапе работы модуля cpe-map;
  • cpe-mapping-ignore.csv (/etc/cve-manager/cpe-mapping-ignore.csv) - определяет пары имён, которые исключаются из результатов работы модуля cpe-map;
  • excluded-issues.csv (/etc/cve-manager/excluded-issues.csv) - определяет уязвимости, которые не следует считать незакрытыми для указанного пакета указанного репозитория начиная с указанной версии пакета (используется модулем cve-issues).

Каждая строка файлов cpe-mapping.csv и cpe-mapping-ignore.csv должна быть записана в следующем формате:

<название пакета>, <название программного продуката, используемое NVD>

Каждая строка файла excluded-issues.csv должна быть записана в следующем формате:

<ветвь Sisyphus, 'all' если все ветви>, <id уязвимости>, <название пакета>, <версия пакета>

Для того чтобы обозначенные настройки установления соответствия имён вступили в действие следует запустить модуль cpe-map заново для соответствующих ветвей (cpe-map -b [<branch_name> ...]), или для всех ветвей (cpe-map -e); При этом следует заново запустить модуль cve-issues для данных ветвей (cve-issues -b [<branch_name> ...]), или для всех ветвей (cve-issues -b all); В случае, если допустима обработка всех ветвей, запуск модулей cpe-map и cve-issues можно осуществить путём запуска автоматического формирования БДУ начиная с шага установления соответствия имён:

cve-manager -a -b map

Использование

Подготовка базы данных уязвимостей

Запуск модуля cve-manager:

cve-manager [-h] [-a [-b MODULE_NAME] [-e MODULE_NAME]] [-m] [-t] [--plain] [--silent]
Параметр Описание
-h, --help Вывод справки
-a, --auto Запуск модулей один за другим в автоматическом режиме
-b MODULE_NAME, --beginning_step MODULE_NAME Начальный шаг работы в автоматическом режиме (название модуля без приставки cve- / cpe-)
-e MODULE_NAME, --ending_step MODULE_NAME Конечный шаг работы в автоматическом режиме (название модуля без приставки cve- / cpe-)
-t, --timer Задействование таймера, который измеряет интервалы времени исполнения запускаемых модулей
--plain Упрощенный вывод (следует использовать, например, при перенаправлении вывода в файл)
--silent Запрет вывода
-m, --multithreading Создание отдельных вычислительных потоков для каждой исследуемой ветви при запуске модулей cve-fixes, cpe-map и cve-issues в автоматическом режиме (флаг -a)

При запуске без параметра -a cve-manager работает в диалоговом режиме - на каждом шаге выводится справочная информация о возможных действиях. На первом шаге следует выбрать нужный для использования в данный момент модуль, при выборе модуля выводится справочная информация данного модуля. При начале работы с нуля следует запускать модули в том порядке, в котором они перечислены в разделе "Структура программы".

Каждый модуль пакета cve-manager является самостоятельной программой и может быть запущен напрямую, например:

cve-download --everything
cve-import --prepare

Вывод справочной информации модуля:

<module-name> --help

В автоматическом режиме модули будут запущены один за другим в установленном порядке, при этом при передаче флага -m, --multithreading часть операций будет выполняться параллельно, с задействованием всех доступных микропроцессорных ядер; Пример команды запуска формирования БДУ в автоматическом режиме:

cve-manager -a -m --plain 2>&1 1>$HOME/cve-manager.log

Мониторинг уязвимостей пакетов

Запуск модуля cve-monitor:

cve-monitor [-h] [--show WHAT_YOU_WANT_TO_SEE] [-f FIX_STATUS] [-t ISSUES_TYPE] [-o ORDER_BY] [-b BRANCH_NAME [BRANCH_NAME ...]] [-p PACKAGE_NAME [PACKAGE_NAME ...]] [-y YEAR [YEAR ...]] [-v VUL_ID [VUL_ID ...]] [--group] [--cure] [--patch] [-m REPORT_CATEGORY [REPORT_CATEGORY ...]]
Параметр Описание
-h, --help Вывод справки
--show WHAT_YOU_WANT_TO_SEE Вывод списка уязвимостей (issues, является значением по-умолчанию), или вывод новых незакрытых уязвимостей (history), или вывод сравнительного списка по уязвимостям указанных ветвей Sisyphus (comp, требует задания значения параметра --branches, при этом первая указанная ветвь сравнивается с последующими), или вывод полных описаний уязвимостей (vul_desc), или вывод установленного соответствия между названиями пакетов и названиями, используемыми в описаниях уязвимостей (map), или вывод примеров использования (ex)
-f FIX_STATUS, --fix_status FIX_STATUS Фильтрация результатов по состоянию уязвимостей (fixed / unfixed / all)
-t ISSUES_TYPE, --itype ISSUES_TYPE Фильтрация результатов по типу источника записей об уязвимостях (nvd / fstec)
-o ORDER_BY, --order ORDER_BY Осуществление упорядочения результатов по идентификаторам уязвимостей (id), иманам пакетов (package), оценке CVSS ver.2 (score2), оценке CVSS ver.3 (score3), или текущему состоянию уязвимости (fix)
-b BRANCH_NAME [BRANCH_NAME ...],
--branches BRANCH_NAME [BRANCH_NAME ...]
Фильтрация результатов по названиям репозиториев
-p PACKAGE_NAME [PACKAGE_NAME ...],
--packages PACKAGE_NAME [PACKAGE_NAME ...]
Фильтрация результатов по названиям пакетов
-y YEAR [YEAR ...], --years YEAR [YEAR ...] Фильтрация результатов по датам уязвимостей
-v VUL_ID [VUL_ID ...],
--vul_ids VUL_ID [VUL_ID ...]
Фильтрация результатов по идентификаторами уязвимостей
--group Осуществление группировки результатов по именнам пакетов (работает только при запуске с параметром -f unfixed)
--cure Дополнение отчёта колонкой с названиями ветвей Sisyphus более высокого порядка (например, p9 для p8), в которых данная уязвимость не наблюдается
--patch Список ссылок на патчи, предположительно закрывающие данную уязвимость (ссылки извлекаются из входных списков уязвимостей)
-m REPORT_CATEGORY [REPORT_CATEGORY ...],
--mail REPORT_CATEGORY [REPORT_CATEGORY ...]
Осуществить почтовую рассылку с формируемым результатом на адреса, указанные в соответствующем конфигурационном файле (см. Настройка клиентской части)

Примеры команд и значения полей формируемых отчётов:

  • cve-monitor --show issues -f unfixed -b Sisyphus p9 --group --cure --mail <some_group_of_recipients> - запрос всех неисправленных уязвимостей ветвей Sisyphus и p9 с группировкой записей по именам пакетов, с предложениями по устранению и отправкой отчёта по электронной почте группе адресатов <some_group_of_recipients>;
  • cve-monitor --show issues -f unfixed -b Sisyphus p9 --order package --cure --patch --mail <some_group_of_recipients> - запрос детального отчёта (без группировки по именам пакетов -- каждая строка отводится отдельной уязвимости, наличие которой установлено для отдельного пакета), записи которого упорядочены по именам пакетов, с предложениями по устранению и ссылками на страницы, которые могут содержать патчи для устранения соответствующих уязвимостей, также с отправкой по электронной почте;
  • cve-monitor --show history -b p9 - запрос списка новых уязвимостей пакетов ветви p9, обнаруженных с момента последнего запуска модуля cve-history.
Поле Значение
PACKAGE NAME-VER-REL Название пакета, его версия и релиз
MAPPED NAME Название программного продукта, поставленное в соответствие названию данного пакета
VULNERABLE VERSIONS Указанные уязвимые версии, или интервалы версий (наличие версии, обозначенной символом * означает, что набор уязвимых версий точно не установлен)
N CVE Количество уязвимостей, наличие которых установленно для данного пакета
SCORE2 Оценка данной уязвимости по метрике CVSS ver.2
SCORE3 Оценка данной уязвимости по метрике CVSS ver.3
MAX SCORE2 Максимальная оценка по метрике CVSS ver.2 из всех оценок уязвимостей данного пакета
MAX SCORE3 Максимальная оценка по метрике CVSS ver.3 из всех оценок уязвимостей данного пакета
FIX Состояние данной уязвимости ([NO FIX] - не закрыта, changelog - о закрытии говорит запись в chagelog пакета, bigger ver / [lesser ver] - версия пакета больше / меньше указанных уязвимых версий)
CURE Ветви Sisyphus, в которых данный пакет не имеет всех или части (указывается особо) уязвимостей, наличие которых установлено для данного пакета
PATCH Ссылки на страницы, которые могут содержать патчи для устранения соответствующей уязвимостей

Разворачивание инфраструктуры базы данных уязвимостей

Для работы cve-manager нет необходимости устанавливать MySQL сервер и создавать БДУ в своём окружении - в настройках cve-manager может быть указан адрес удалённого сервера. Тем не менее, это можно сделать, выполнив следующие шаги:

1. Установить MySQL сервер:
apt-get install MySQL-server
Также можно воспользоваться альтернативой (все остальные пункты данного руководства при этом остаются в силе):
apt-get install mariadb-server
2. Внести изменения в файл настройки MySQL сервера /etc/my.cnf.d/server.cnf:
[mysqld]
...
loose-local-infile = 1
#skip-networking
bind-address = 127.0.0.1
3. Перезапустить MySQL сервер и запустить MySQL консоль:
su -l -c 'service mysqld restart'
mysql -u root
4. Задать пароль пользователя MySQL с именем root:
mysql> SET PASSWORD FOR 'root'@'localhost' = 'root-passwd';
, где root-passwd - задаваемый пароль пользователя root;
5. Добавить пользователя MySQL, от имени которого будет осуществляться формирование БД:
MySQL server ver 8.* MySQL server ver 5.*
mysql> CREATE USER 'user-name'@'localhost' IDENTIFIED WITH mysql_native_password BY 'user-passwd';
mysql> GRANT ALL ON *.* TO 'user-name'@'localhost';
mysql> GRANT ALL PRIVILEGES ON *.* to 'user-name'@'localhost' IDENTIFIED BY 'user-passwd';
, где user-name - имя пользователя, user-passwd - пароль пользователя;
6. Добавить пользователя MySQL, от имени которого будут осуществляться запросы на чтение записей БД (мониторинг):
MySQL server ver 8.* MySQL server ver 5.*
mysql> CREATE USER 'monitor'@'localhost' IDENTIFIED WITH mysql_native_password BY 'monitor';
mysql> GRANT SELECT ON *.* TO 'monitor'@'localhost';
mysql> GRANT SELECT ON *.* TO 'monitor'@'localhost' IDENTIFIED BY 'monitor';
7. При использовании MySQL-server версии >= 5.7 может возникнуть его несовместимость с используемыми C++ и Python MySQL-фреймворками; Для исправления этого следует (например, для совместимости с версией 5.6):
7.1. Задать режим обратной совместимости в mysql консоли:
mysql -u root -p
mysql> set @@global.show_compatibility_56=ON;
7.2. Добавить в файл /etc/my.cnf.d/server.cnf строку:
show_compatibility_56 = 1

Ссылки

Проект на git.altlinux.org
cve-manager-inner-knowledge