CVE-Manager
cve-manager - консольная программа, предназначенная для формирования базы данных уязвимостей программ заданных репозиториев rpm-пакетов, а также для предоставления интерфейса к записям сформированной базы данных (например, для дальнейшего их представления на web-ресурсе и осуществления почтовой рассылки).
На данный момент поддерживается два источника списков уязвимостей - NVD (National Vulnerability Database) и ФСТЭК (Федеральная служба по техническому и экспортному контролю).
Имеет модульную структуру, написана на Python и C++, использует MySQL. Распространяется по лицензии GPLv3.0.
Структура программы
cve-manager состоит из следующих модулей:
- cve-manager - диалоговый интерфейс для запуска всех остальных модулей, в том числе для последовательного запуска модулей в автоматическом режиме;
- cve-backup - осуществляет резервное копирование/восстановление ранее сформированной базы данных уязвимостей (БДУ);
- cve-download - осуществляет загрузку по HTTPS списков уязвимостей, предоставляемых NVD и ФСТЭК, а также CPE словаря;
- cve-import - осуществляет для выбранных репозиториев внесение списка пакетов, которые размещены на alt-сервере (например
/ALT/p8/files/list/src.list
и/ALT/p8/files/list/bin.list
для ветви p8), а также внесение загруженных списков уязвимостей и CPE словаря в БД MySQL; Имеет возможность фильтрации импортируемых списков пакетов в соответствии с содержимым предоставляемого текстового файла, каждая строка которого является названием пакета, информация о котором должна быть учтена в БДУ; - cve-fixes - извлекает 'Fixes' записи и URL из метаданных всех исходных пакетов рассматриваемых репозиториев, использует gb-x-parse-vulns-from-changelog;
- cpe-map - осуществляет установление соответствия импортированных в БД названий исходных пакетов рассматриваемых репозиториев и 1) названий программных продуктов из импортированного в БД CPE словаря, а также 2) названий программных продуктов из импортированного в БД списка уязвимостей ФСТЭК;
- cve-issues - осуществляет установление соответствия между данными, внесёнными в БД с помощью модулей cve-import, cpe-map, cve-fixes, а именно - записи в БД вида
<CVE/ФСТЭК идентификатор>, <название пакета>, <CPE/ФСТЭК название уязвимого программного продукта>, <версия пакета>, <уязвимая версия программного продукта>, <fix-status>
, где<fix-status>
- значение из следующего набора:- changelog - устранение данной уязвимости обозначено в changelog-секции пакета;
- bigger version - версия пакета в репозитории больше данной уязвимой версии;
- lesser version - версия пакета в репозитории меньше данной уязвимой версии;
- [NO FIX] - версия пакета в репозитори совпадает с уязвимой версией программного продукта и устранение данной уязвимости не зафиксировано.
- cve-monitor - предназначен для посылки запросов выборки из таблиц БДУ и выдачи результатов, например формирование списка всех пакетов с имеющимися незакрытыми уязвимостями или списка всех закрытых уязвимостей одной ветви, которые не закрыты в другой; На данный момент (версия 0.17.0) результаты представляются в произвольной текстовой форме, в ближайшей перспективе возможность их получения в формате XML/JSON/YAML.
Все модули кроме 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-файл включает следующие обязательные секции:
- database, в которой указываются параметры соединения с базой данных MySQL;
- common, в которой указывается путь к корневому каталогу alt-сервера, а также путь к каталогу, в который cve-download загружает входные данные и откуда cve-import их импортирует в БД.
Прочие секции файла настройки воспринимаются как названия ветвей 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/ [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. Таким образом вносить изменения в БДУ могут только члены группы cve. Добавить пользователя в группу cve можно с помощью следующей команды:
usermod -a -G cve <user-name>
При этом cve-monitor имеет свой файл настройки /etc/cve-manager/cve-monitor.conf
, позволяющий пользователям, не являющимся членами группы cve, осуществлять соединение с БДУ с правом только на чтение (SQL-запрос SELECT) - структура данного файла повторяет структуру файла cve-manager.conf
, при этом секция common, а также параметры ветвей ни на что не влияют, поэтому могут быть опущены.
Процесс установления соответствия имён, осуществляемый модулем cpe-map, может быть скорректирован путём добавления следующих CSV файлов:
/etc/cve-manager/<cpe или fstec>_common.csv
/etc/cve-manager/<cpe или fstec>_<название ветви>.csv
Каждая строка таких файлов должна представлять собой пару следующего вида:
<название пакета>, <CPE или ФСТЭК название>
При этом пары, указанные в cpe_common.csv
, включаются во все описания cpe_<название ветви>.csv
для конкретных ветвей, а пары, указанные в fstec_common.csv
, включаются во все описания fstec_<название ветви>.csv
для конкретных ветвей.
Использование
Запуск cve-manager:
cve-manager [-h] [-a] [-t] [-p] [-d]
-h, --help
- Вывод справки;-a, --auto
- Запуск модулей один за другим в автоматическом режиме;-b MODULE_NAME, --beginning_step MODULE_NAME
- Запуск работы в автоматическом режиме с указанного шага (название модуля без приставкиcve-
/cpe-
);-e MODULE_NAME, --ending_step MODULE_NAME
- Запуск работы в автоматическом режиме до указанного шага, включительно (название модуля без приставкиcve-
/cpe-
);-t, --timer
- Задействование таймера, который измеряет интервалы времени исполнения запускаемых модулей;-p, --plain
- Упрощенный вывод (следует использовать, например, при перенаправлении вывода в файл).
При запуске без параметра -a
cve-manager работает в диалоговом режиме - на каждом шаге выводится справочная информация о возможных действиях. На первом шаге следует выбрать нужный для использования в данный момент модуль, при выборе модуля выводится справочная информация данного модуля. При начале работы с нуля следует запускать модули в том порядке, в котором они перечислены в разделе "Структура программы".
При этом, так как каждый модуль является самостоятельной программой, можно запускать модули напрямую, например:
cve-download --everything
cve-import --prepare
Вывод справочной информации модуля:
<module-name> --help
Разворачивание базы данных уязвимостей
Для работы 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:
#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' = PASSWORD('root-passwd');
- , где root-passwd - задаваемый пароль пользователя root;
- 5. Добавить пользователя MySQL, от имени которого будет осуществляться формирование БД:
mysql> GRANT ALL PRIVILEGES ON *.* to 'user-name'@'localhost' IDENTIFIED BY 'user-passwd';
- , где user-name - имя пользователя, user-passwd- пароль пользователя;
- 6. Добавить пользователя MySQL, от имени которого будут осуществляться запросы на чтение записей БД (мониторинг):
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
- 7.1. Задать режим обратной совместимости в mysql консоли: