CVE-Manager: различия между версиями
Нет описания правки |
Нет описания правки |
||
(не показано 19 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
<b>cve-manager</b> | <b>cve-manager</b> — консольная программа, предназначенная 1) для формирования базы данных уязвимостей (БДУ) программ, входящих в состав заданных репозиториев rpm-пакетов, а также 2) для осуществления анализа записей сформированной БДУ и подготовки отчётов на основе результатов этого анализа (в том числе с осуществлением рассылки по электронной почте). | ||
Основными входными данными программы являются списки, содержащие названия и версии исходных и бинарных пакетов рассматриваемых репозиториев, а также списки известных уязвимостей. На данный момент поддерживается два источника списков известных уязвимостей - NVD (National Vulnerability Database) и ФСТЭК (Федеральная служба по техническому и экспортному контролю). | Основными входными данными программы являются 1) списки, содержащие названия и версии исходных и бинарных пакетов рассматриваемых репозиториев (в случае, когда | ||
осуществляется анализ пакетов локальной системы, данные, содержащиеся в таких списках, собираются автоматически путём обращения к программе rpm локальной системы), 2) метаданные rpm-пакетов, хранящихся в репозиториях, или rpm-пакетов, установленных в локальной системе, а также 3) списки известных уязвимостей. На данный момент поддерживается два источника списков известных уязвимостей - NVD (National Vulnerability Database) и ФСТЭК (Федеральная служба по техническому и экспортному контролю). | |||
Программа имеет модульную структуру, написана на Python и C++, использует MySQL. Распространяется по лицензии GPLv3.0. | Программа имеет модульную структуру, написана на Python и C++, использует MySQL. Распространяется по лицензии GPLv3.0. | ||
Строка 8: | Строка 9: | ||
<i>cve-manager</i> состоит из следующих модулей: | <i>cve-manager</i> состоит из следующих модулей: | ||
# <b>cve-manager</b> | # <b>cve-manager</b> — предоставляет пользовательский интерфейс для запуска процесса формирования БДУ и осуществляет организацию и контроль данного процесса путём последовательного запуска остальных модулей в установленном порядке в автоматическом режиме; | ||
# <b>cve-backup</b> | # <b>cve-backup</b> — осуществляет резервное копирование/восстановление ранее сформированной БДУ; | ||
# <b>cve-history</b> | # <b>cve-history</b> — осуществляет выборку незакрытых уязвимостей по текущему состоянию БДУ и сохраняет их в отдельной таблице с целью обеспечения возможности сравнения будущего состояния БДУ с этим сохранённым состоянием; | ||
# <b>cve-download</b> | # <b>cve-download</b> — осуществляет загрузку списков уязвимостей, предоставляемых NVD и ФСТЭК, а также загрузку CPE словаря, ACL пакетов исследуемых репозиториев, файлов с хронологией сборок каждого пакета, а также загрузку списков пакетов дистрибутивов; | ||
# <b>cve-import</b> | # <b>cve-import</b> — осуществляет 1) чтение списков RPM-пакетов указанных репозиториев, или формирование списка установленных пакетов локальной системы (далее в предложении - <i>"пакетов"</i>, из репозиториев или локальной системы), 2) чтение ACL пакетов, 3) чтение файлов с хронологией сборок пакетов, 4) чтение загруженных списков уязвимостей и CPE словаря, 5) извлечение URL и идентификаторов исправленных уязвимостей из метаданных пакетов, 6) чтение [https://www.altlinux.org/ALTRepo#Errata ALT Linux errata], 7) внесение собранных таким образом данных в БДУ; | ||
# <b>cpe-map</b> — осуществляет установление соответствия импортированных в БД названий исходных пакетов рассматриваемых репозиториев и 1) названий программных продуктов из импортированного в БД CPE словаря, а также 2) названий программных продуктов из импортированного в БД списка уязвимостей ФСТЭК; | |||
# <b>cpe-map</b> | # <b>cve-issues</b> — осуществляет установление соответствия между данными, внесёнными в БД с помощью модулей <i>cve-import</i> и <i>cpe-map</i>, а именно — формирует записи в БД вида <code><идентификатор уязвимости>, <идентификатор пакета>, <уязвимая версия программного продукта>, <статус уязвимости></code>, где <code><статус уязвимости></code> — значение из следующего набора (или комбинация данных значений): | ||
# <b>cve-issues</b> | #* <i>c</i> (от <i>changelog</i>) — устранение данной уязвимости обозначено в changelog-секции пакета; | ||
#* <i>c</i> (от <i>changelog</i>) | #* <i>e</i> (от <i>excluded</i>) — отсутствие данной уязвимости обозначено в файле <code>/etc/cve-manager/cpe-excluded.csv</code> (поставляется пакетом <i>cve-manager-inner-knowledge</i>); | ||
#* <i>e</i> (от <i>excluded</i>) | #* <i>b</i> (от <i>bigger ver</i>) — версия пакета в репозитории больше данной уязвимой версии; | ||
#* <i>b</i> (от <i>bigger ver</i>) | #* <i>L</i> (от <i>lesser ver</i>) — версия пакета в репозитории меньше данной уязвимой версии; | ||
#* <i>L</i> (от <i>lesser ver</i>) | #* <i>V</i> (от <i>vulnerable</i>) — версия пакета в репозитори совпадает с уязвимой версией программного продукта и устранение данной уязвимости не зафиксировано; | ||
#* <i>V</i> (от <i>vulnerable</i>) | #* <i>a</i> — версия пакета в репозитории больше указанной в ALT Linux errata уязвимой версии; | ||
#* <i>?</i> | #* <i>A</i> — версия пакета в репозитори совпадает c указанной в ALT Linux errata уязвимой версией; | ||
# <b>cve-monitor</b> | #* <i>?</i> — сравнение текущей версии пакета и указанной уязвимой версии программного продукта не удалось осуществить. | ||
# <b>cve-monitor</b> — предназначен для посылки запросов выборки из таблиц БДУ и выдачи результатов (отчётов), например формирование списка всех пакетов с имеющимися незакрытыми уязвимостями или списка всех закрытых уязвимостей одной ветви, которые не закрыты в другой; Формируемые отчёты могут рассылаться на задаваемые адреса электронной почты; Отчёты предоставляются в собственном формате (см. подраздел [[CVE-Manager#Мониторинг_уязвимостей_пакетов|<i>Мониторинг уязвимостей пакетов</i>]]), в перспективе - дополнительная возможность их получения в формате XML и JSON. | |||
Все модули кроме <i>cve-import</i> написаны на Python, <i>cve-import</i> написан на C++. | Все модули кроме <i>cve-import</i> написаны на Python, <i>cve-import</i> написан на C++. | ||
Строка 34: | Строка 36: | ||
Установка только клиентской части: | Установка только клиентской части: | ||
:<code>apt-get install cve-monitor</code> | :<code>apt-get install cve-monitor</code> | ||
Пользователь может установить <i>cve-monitor</i> (не устанавливая при этом <i>cve-manager</i>) и делать запросы к <i>cve-manager</i>, установленному на удалённом сервере. | |||
== Настройка == | == Настройка == | ||
=== Разворачивание инфраструктуры базы данных уязвимостей === | |||
Для работы <i>cve-manager</i> нет необходимости устанавливать MySQL сервер и создавать БДУ в своём окружении — в настройках <i>cve-manager</i> может быть указан адрес удалённого сервера. Тем не менее, это можно сделать, выполнив следующие шаги:<br> | |||
:1. Установить MySQL сервер: | |||
::<code>apt-get install MySQL-server</code> | |||
::Также можно воспользоваться альтернативой (все остальные пункты данного руководства при этом остаются в силе): | |||
::<code>apt-get install mariadb-server</code> | |||
:2. Внести изменения в файл настройки MySQL сервера <i>/etc/my.cnf.d/server.cnf</i>: | |||
::<source lang="text"> | |||
[mysqld] | |||
... | |||
loose-local-infile = 1 | |||
#skip-networking | |||
bind-address = 127.0.0.1 | |||
</source> | |||
:3. Перезапустить MySQL сервер и запустить MySQL консоль: | |||
::<code>su -l -c 'service mysqld restart'</code> | |||
::<code>mysql -u root</code> | |||
:4. Задать пароль пользователя MySQL с именем <i>root</i>: | |||
::<code><b><i>mysql></i></b> SET PASSWORD FOR 'root'@'localhost' = 'root-passwd';</code> | |||
::где <i>root-passwd</i> — задаваемый пароль пользователя <i>root</i>; | |||
:5. Добавить пользователя MySQL, от имени которого будет осуществляться формирование БД (на примере MySQL-server версии 8.*, здесь и далее): | |||
::<code><b><i>mysql></i></b> CREATE USER 'user-name'@'localhost' IDENTIFIED WITH mysql_native_password BY 'user-passwd';</code><br><code><b><i>mysql></i></b> GRANT ALL ON *.* TO 'user-name'@'localhost';</code> | |||
::где <i>user-name</i> — имя пользователя, <i>user-passwd</i> — пароль пользователя; | |||
:6. Добавить пользователя MySQL, от имени которого будут осуществляться запросы на чтение записей БД (мониторинг): | |||
::<code><b><i>mysql></i></b> CREATE USER 'monitor'@'localhost' IDENTIFIED WITH mysql_native_password BY 'monitor';</code><br><code><b><i>mysql></i></b> GRANT SELECT ON *.* TO 'monitor'@'localhost';</code> | |||
=== Настройка серверной части === | === Настройка серверной части === | ||
Параметры <i>cve-manager</i> определяются файлом ini-формата <code>/etc/cve-manager/cve-manager.conf</code>. Данный ini-файл включает следующие обязательные секции: | Параметры <i>cve-manager</i> определяются файлом ini-формата <code>/etc/cve-manager/cve-manager.conf</code>. Данный ini-файл включает следующие обязательные секции: | ||
# <b><i> | # <b><i>db_connection</i></b>, в которой указываются параметры соединения с базой данных MySQL (<i>host, user, password, database</i>); | ||
# <b><i>common</i></b>, | # <b><i>common</i></b>, включающая следующие параметры: | ||
#* <i>download</i> — путь к каталогу, в который <i>cve-download</i> загружает входные данные и откуда <i>cve-import</i> их импортирует в БДУ; | |||
#* <i>master_branch</i> — название основной ветви, значения времени сборки пакетов которой будут учитываться при определении соответствия имён исходных пакетов и имён уязвимых программных продуктов; | |||
#* <i>basealt</i> — путь к каталогу, в который смонтирован корневой каталог alt-сервера; | |||
#* <i>always_verify_tls_certificate</i> — флаг, который следует установить равным <i>1</i> для запрета установления незащищённого соединения для загрузки данных модулем <i>cve-dowload</i>, или же раным <i>0</i> для допущения установления незащищённого соединения; | |||
#* <i>excluded_vulsrc</i> — источники списков уязвимостей, исключаемые из рассмотрения (возможные значения - <i>nvd</i> и <i>fstec</i>); | |||
#* <i>distro_lists_src</i> — обозначение нахождения списков исходных пакетов, из которых собираются бинарные пакеты дистрибутивов, в виде пути к каталогу в файловой системе или в виде адреса репозитория (<i>git</i>-протокол); | |||
#* <i>distro_lists_bin</i> — обозначение нахождения списков бинарных пакетов дистрибутивов в виде пути к каталогу в файловой системе или в виде адреса репозитория (<i>git</i>-протокол). | |||
Параметры <i>download</i> и <i>master_branch</i> являются обязательными. | |||
Прочие секции файла настройки воспринимаются как названия ветвей <i>Sisyphus</i>, информация об уязвимостях которых должна быть помещена в БДУ. Каждая из таких секций может включать определение следующих параметров: | Прочие секции файла настройки воспринимаются как названия ветвей <i>Sisyphus</i>, информация об уязвимостях которых должна быть помещена в БДУ. Каждая из таких секций может включать определение следующих параметров: | ||
:* <i>base_dir</i> | :* <i>base_dir</i> — название основного каталога данного репозитория; | ||
:* <i> | :* <i>bin_list</i> — путь к списку бинарных пакетов (bin.list) данного репозитория; | ||
:* <i> | :* <i>srpms_dir</i> — путь к каталогу с исходными пакетами (SRPMS) данного репозитория; | ||
:* <i> | :* <i>rpms_dirs</i> — пути к каталогам с бинарными пакетами (RPMS) данного репозитория. | ||
По | По умолчанию значения перечисленных параметров соответствуют структуре каталогов alt-сервера. <b>ВНИМАНИЕ</b> — названия секций должны состоять только из латинских символов и цифр. В случае, если название репозитория включает прочие символы, следует воспользоваться переменной <i>base_dir</i> (см. пример, секция <i>x81</i>). | ||
Для анализа локальной системы в файл настройки следует добавить секцию с особым названием - <b><i>local_sys</i></b>. При этом название репозитория, который используется локальной системой, задаётся параметром <i>branch</i> (значение данного параметра по-умолчанию соответствует значению параметра <i>master_branch</i> секции <i>common</i>). | |||
Пример файла настройки: | Пример файла настройки: | ||
:<source> | :<source lang="text"> | ||
[ | [db_connection] | ||
host = "localhost:3306" | |||
user | user = some_username | ||
password = some_password | |||
database = some_dbname | |||
[common] | [common] | ||
Строка 65: | Строка 112: | ||
[p8] | [p8] | ||
[local_sys] | |||
branch = p8 | |||
[x81] | [x81] | ||
base_dir = /space/ALT/x8.1/ | base_dir = /space/ALT/x8.1/ | ||
[ | [some_branch] | ||
bin_list = "/some_branch/lists/bin.list" | |||
srpms_dir = "/some_branch/SRPMS/" | |||
rpms_dirs = "/some_branch/x86_64/RPMS/", "/some_branch/noarch/RPMS/" | |||
</source> | </source> | ||
Строка 79: | Строка 129: | ||
=== Настройка клиентской части === | === Настройка клиентской части === | ||
<i>cve-monitor</i> имеет свой файл настройки <code>/etc/cve-manager/cve-monitor.conf</code>, позволяющий пользователям, не являющимся членами группы <i>cve</i>, осуществлять соединение с БДУ с правом только на чтение (SQL-запрос <i>SELECT</i>) - структура данного файла повторяет структуру файла <code>cve-manager.conf</code> (см. подраздел <i> | <i>cve-monitor</i> имеет свой файл настройки <code>/etc/cve-manager/cve-monitor.conf</code>, позволяющий пользователям, не являющимся членами группы <i>cve</i>, осуществлять соединение с БДУ с правом только на чтение (SQL-запрос <i>SELECT</i>) - структура данного файла повторяет структуру файла <code>cve-manager.conf</code> (см. подраздел [[CVE-Manager#Настройка_серверной_части|<i>Настройка серверной части</i>]]), при этом секция <i>common</i>, а также параметры ветвей ни на что не влияют, за исключением дополнительного параметра ветвей <i>seniors</i>, в котором перечисляются старшие ветви по отношению к данной, и которые будут использованы при формировании предложений по устранению существующих в данной ветви уязвимостей (при передаче флага <code>--cure</code> модулю <i>cve-monitor</i>), например: | ||
:<source> | :<source lang="text"> | ||
[p9] | [p9] | ||
seniors = Sisyphus | seniors = Sisyphus | ||
Строка 88: | Строка 138: | ||
</source> | </source> | ||
Для настройки почтовой рассылки <i>cve-monitor</i> существует другой конфигурационной файл | Для настройки почтовой рассылки <i>cve-monitor</i> существует другой конфигурационной файл — <code>/etc/cve-manager/cve-mail.conf</code>, содержащий настройки соединения с почтовым сервером и списки адресатов, которые задаются группами в секции <i>recipients</i>. При запуске <i>cve-monitor</i> с флагом <code>--mail</code> следует передать название группы адресатов в качестве значения параметра <code>--title</code>. Так, например, пусть файл настройки почтовой рассылки имеет следующее содержимое: | ||
:<source> | :<source lang="text"> | ||
[ | [smtp_connection] | ||
host = some_host.com | host = some_host.com | ||
port = 25 | port = 25 | ||
user = some_mail_account | |||
password = password_of_the_mail_account | |||
raddress = some_mail_account@some_host.com | raddress = some_mail_account@some_host.com | ||
Строка 104: | Строка 154: | ||
</source> | </source> | ||
Тогда, например, для того чтобы результаты команды <code>cve-monitor --show issues unfixed --group</code> после формирования были отправлены группе адресатов <i>daily</i> следует исполнить следующую команду:<br> | Тогда, например, для того чтобы результаты команды <code>cve-monitor --show issues unfixed --group</code> после формирования были отправлены группе адресатов <i>daily</i>, следует исполнить следующую команду:<br> | ||
:<code>cve-monitor --show issues unfixed --group --mail daily</code> | :<code>cve-monitor --show issues unfixed --group --mail --title daily</code> | ||
=== Внутренние знания cve-manager === | === Внутренние знания cve-manager === | ||
Пакет <i><b>cve-manager-inner-knowledge</b></i> содержит ряд файлов с данными, которые могут быть отредактированы пользователем с целью оказания влияния на процесс формирования БДУ: | Пакет <i><b>cve-manager-inner-knowledge</b></i> содержит ряд файлов с данными, которые могут быть отредактированы пользователем с целью оказания влияния на процесс формирования БДУ: | ||
:*<code>cpe-mapping.csv</code> (<code>/etc/cve-manager/cpe-mapping.csv</code>) | :*<code>cpe-excluded.csv</code> и <code>fstec-excluded.csv</code> (<code>/etc/cve-manager/cpe-excluded.csv</code> и <code>/etc/cve-manager/fstec-excluded.csv</code>) — определяют упоминаемые в списках уязвимостей программные продукты, которые должны быть исключены из рассмотрения; | ||
:*<code>cpe-mapping-ignore.csv</code> (<code>/etc/cve-manager/cpe-mapping-ignore.csv</code>) | :*<code>cpe-mapping.csv</code> и <code>fstec-mapping.csv</code> (<code>/etc/cve-manager/cpe-mapping.csv</code> и <code>/etc/cve-manager/fstec-mapping.csv</code>) — предопределяют соответствие имён на начальном этапе работы модуля <i>cpe-map</i>; | ||
:*<code>excluded-issues.csv</code> (<code>/etc/cve-manager/excluded-issues.csv</code>) | :*<code>cpe-mapping-ignore.csv</code> и <code>fstec-mapping-ignore.csv</code> (<code>/etc/cve-manager/cpe-mapping-ignore.csv</code> и <code>/etc/cve-manager/fstec-mapping-ignore.csv</code>) — определяют пары имён, которые должны быть исключены из результатов работы модуля <i>cpe-map</i>; | ||
:*<code>cpe-relatives.txt</code> и <code>fstec-relatives.txt</code> (<code>/etc/cve-manager/cpe-relatives.txt</code> и <code>/etc/cve-manager/fstec-relatives.txt</code>) — предопределяют набор упоминаемых в списках уязвимостей родственных продуктов (если какое-то название продукта из набора было поставлено в соответствие какому-то названию пакета, то каждое название продукта из всех прочих названий продуктов данного набора будет на равных правах поставлено в соответствие данному названию пакета в случае, если данное название продукта не было поставлено в соответствие какому-то другому названию пакета); | |||
:*<code>excluded-issues.csv</code> (<code>/etc/cve-manager/excluded-issues.csv</code>) — определяет уязвимости, которые не следует считать незакрытыми для указанного пакета указанного репозитория начиная с указанной версии пакета (используется модулем <i>cve-issues</i>); | |||
:*<code>groups.csv</code> (<code>/etc/cve-manager/groups.csv</code>) — определяет группы, в которые, в соответствии с заданными в этом файле условиями, в ходе работы программы будут включены пакеты и программные продукты из списков уязвимостей (названию пакета одной группы не может быть поставлено в соответствие название программного продукта другой группы). | |||
Каждая строка файлов <i>cpe-mapping.csv</i> и <i>cpe-mapping-ignore.csv</i> должна быть записана в следующем формате: | Каждая строка файлов <i>cpe-excluded.csv</i> и <i>fstec-excluded.csv</i> должна быть записана в следующем формате (здесь и далее под вендором и названием программного продукта подразумеваются соответствующие составляющие CPE или обозначения продуктов из данных от ФСТЭК, само словосочетание <i>"программный продукт"</i> представлено сокращённой записью <i>"пп"</i>): | ||
:<code><название пакета>, <название | :<code><вендор пп>, <названия пп через пробел></code> | ||
При этом в качестве вендора или названия программного продукта может быть помещён символ <code>*</code>, означающий, соответственно, <i>"все продукты с данным названием продукта"</i> или <i>"все названия продуктов данного вендора"</i>, а также могут быть помещены названия программных продуктов с префиксом <code>!</code>, означающим <i>"все названия продуктов данного вендора, за исключением данного названия"</i>: | |||
:<source lang="text"> | |||
*, <название_пп0> | |||
<вендор пп1>, * | |||
<вендор пп2>, !<название пп21> !<название пп22> !<название пп23> | |||
</source> | |||
Также в файлах <i>cpe-excluded.csv</i> и <i>fstec-excluded.csv</i> возможно использование регулярных выражений. Регулярное выражение должно начинаться с символа <code>r</code> и быть заключено в одинарные или двойные кавычки: | |||
:<source lang="text"> | |||
*, r'for_windows$' | |||
r"^apple[^A-Za-z]?", * | |||
</source> | |||
В виду того, что составляющие обозначений продуктов ФСТЭК не имеют строгого формата (в них могут быть использованы как заглавные, так и строчные буквы, а в качестве разделителей могу быть использованы различные символы), к списку <i>fstec-excluded.csv</i> применяются дополнительные правила, облегчающие задание исключённых продуктов, а именно: | |||
:*Регистр не учитывается; | |||
:*Символ <code>_</code> обозначает наличие какого-либо разделителя; | |||
:*Символ <code>~</code> обозначает возможное наличие какого-либо разделителя. | |||
Так, например, первая строка подойдёт для описания как продукта <i>"Some product"</i>, так и для описания продукта <i>"Some_product"</i> и <i>"SomeProduct"</i>, а вторая строка — только для описания продуктов <i>"Some Product"</i> и <i>"Some_product"</i> (из трёх приведённых названий продуктов): | |||
:<source lang="text"> | |||
*, some~product | |||
*, some_product | |||
</source> | |||
Каждая строка файлов <i>cpe-mapping.csv</i> и <i>cpe-mapping-ignore.csv</i>, а также файлов <i>fstec-mapping.csv</i> и <i>fstec-mapping-ignore.csv</i> должна быть записана в следующем формате: | |||
:<code><название пакета>, <названия пп через пробел></code> | |||
Каждая строка файлов <i>cpe-relatives.txt</i> и <i>fstec-relatives.txt</i> представляет собой последовательность обозначений программных продуктов, разделённых пробелами, каждое обозначение программного продукта при этом записывается в следующем формате: | |||
:<code><вендор пп>:<название пп></code> | |||
Каждая строка файла <i>excluded-issues.csv</i> должна быть записана в следующем формате: | Каждая строка файла <i>excluded-issues.csv</i> должна быть записана в следующем формате: | ||
:<code><ветвь Sisyphus, 'all' если все ветви>, <id уязвимости>, <название пакета>, <версия пакета></code> | :<code><ветвь Sisyphus, 'all' если все ветви>, <id уязвимости>, <название пакета>, <версия пакета></code> | ||
Для того чтобы обозначенные настройки установления соответствия имён вступили в действие следует запустить модуль <i>cpe-map</i> | Каждая строка файла <i>groups.csv</i> должна быть записана в следующем формате (каждый столбец, описанный существительным во множественном числе, допускает внесения последовательности слов, разделённых пробелами): | ||
:<code><условное название группы>, <префиксы пакетов>, <вендоры пп>, <префиксы названий пп>, <суффиксы названий пп>, <url адреса пакетов и пп></code> | |||
Для того чтобы изменения списка <i>cpe-excluded.csv</i> или <i>fstec-excluded.csv</i> вступили в действие, следует запустить формирование БДУ начиная с шага, не ранее чем шаг импорта данных: | |||
:<code>cve-manager -b import</code> | |||
В остальных случаях, для того чтобы обозначенные настройки установления соответствия имён вступили в действие, следует заново запустить модуль <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 -b map</code> | :<code>cve-manager -b map</code> | ||
== Использование == | == Использование == | ||
=== Формат списка пакетов исследуемого репозитория === | === Формат списка пакетов исследуемого репозитория (не относится к анализу локальной системы) === | ||
Список пакетов исследуемого репозитория может быть задан в одном из двух форматов. Первый формат соответствует формату списков бинарных пакетов <i>ALT Linux</i> (<code>alt:/ALT/<branch>/files/list/bin.list</code>), а второй формат исключает всю ненужную информацию: | Список пакетов исследуемого репозитория может быть задан в одном из двух форматов. Первый формат соответствует формату списков бинарных пакетов <i>ALT Linux</i> (<code>alt:/ALT/<branch>/files/list/bin.list</code>), а второй формат исключает всю ненужную информацию: | ||
Строка 140: | Строка 229: | ||
|} | |} | ||
:<code><*></code> | :<code><*></code> — любая комбинация символов, не включающая пробелы; | ||
:<code><bin_package_short_name></code> | :<code><bin_package_short_name></code> — название бинарного пакета без версии и релиза; | ||
:<code><src_package_full_name></code> | :<code><src_package_full_name></code> — полное название исходного пакета, включающее версию и релиз (наличие расширения <i>'src.rpm'</i> не обязательно). | ||
=== Требование к наличию RPM-пакетов (не относится к анализу локальной системы) === | |||
Для выполнения импорта необходимых данных в БДУ для каждого набора наименований RPM-пакетов <code>{src_i, {bin_i0, .. , bin_ij}}</code> (где <code>src_i</code> — название исходного пакета; <code>{bin_i0, .., bin_ij}</code> — названия бинарных пакетов, собранных из <code>src_i</code>) пользователь должен предоставить либо <i>а)</i> исходный пакет, соответствующий <code>src_i</code>, либо <i>б)</i> один из бинарных пакетов, соответствующих <code>{bin_i0, .., bin_ij}</code>. Пути к каталогам, в которых были помещены данные пакеты, должны быть заданы в файле настроек <code>/etc/cve-manager/cve-manager.conf</code> в качестве значений параметров <i>srpms_dir</i> и <i>rpms_dirs</i> соответственно, при этом, бинарные пакеты могут быть расположены в нескольких каталогах, которые в таком случае должны быть перечислены через запятую как это показано в примере файла настройки (см. подраздел [[CVE-Manager#Настройка_серверной_части|<i>Настройка серверной части</i>]]). | |||
=== Подготовка базы данных уязвимостей === | === Подготовка базы данных уязвимостей === | ||
Запуск процесса формирования БДУ:<br> | Запуск процесса формирования БДУ:<br> | ||
:<code>cve-manager [-h] [-a] [-b MODULE_NAME] [-e MODULE_NAME] [-r N_REPEATED_ATTEMPTS] [-l] [--plain] [--silent]</code> | :<code>cve-manager [-h] [-a] [-b MODULE_NAME] [-e MODULE_NAME] [-r N_REPEATED_ATTEMPTS] [-o] [-l] [--plain] [--silent]</code> | ||
{| class="wikitable" style="width: 100%;" | {| class="wikitable" style="width: 100%;" | ||
|- | |- | ||
Строка 166: | Строка 258: | ||
|<code>-r N_REPEATED_ATTEMPTS, --retry N_REPEATED_ATTEMPTS</code> | |<code>-r N_REPEATED_ATTEMPTS, --retry N_REPEATED_ATTEMPTS</code> | ||
|Количество попыток перезапуска последнего выполняемого модуля в случае его неуспешного выполнения | |Количество попыток перезапуска последнего выполняемого модуля в случае его неуспешного выполнения | ||
|- | |||
|<code>-o, --offline</code> | |||
|Не запускать модуль <i>cve-download</i> в процессе формирования БДУ | |||
|- | |- | ||
|<code>-l, --list_modules</code> | |<code>-l, --list_modules</code> | ||
Строка 185: | Строка 280: | ||
Каждый модуль пакета <i>cve-manager</i> является самостоятельной программой и может быть запущен напрямую, например: | Каждый модуль пакета <i>cve-manager</i> является самостоятельной программой и может быть запущен напрямую, например: | ||
:<code>cve-download --everything</code> | :<code>cve-download --everything</code> | ||
:<code>cve-import -- | :<code>cve-import --everything</code> | ||
Вывод справочной информации модуля: | Вывод справочной информации модуля: | ||
:<code><module-name> --help</code> | :<code><module-name> --help</code> | ||
Строка 191: | Строка 286: | ||
=== Мониторинг уязвимостей пакетов === | === Мониторинг уязвимостей пакетов === | ||
Запуск модуля <i>cve-monitor</i>:<br> | Запуск модуля <i>cve-monitor</i>:<br> | ||
:<code>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 | :<code>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 ...]] [--distro_list_src DISTRO_NAME] [--distro_list_bin DISTRO_NAME] [-y YEAR [YEAR ...]] [-v VUL_ID [VUL_ID ...]] [--group] [--cure] [--patch] [-w] [-m] [--title NAME] [--unite]</code> | ||
{| class="wikitable" style="width: 100%;" | {| class="wikitable" style="width: 100%;" | ||
Строка 202: | Строка 297: | ||
|- | |- | ||
|<code>--show WHAT_YOU_WANT_TO_SEE</code> | |<code>--show WHAT_YOU_WANT_TO_SEE</code> | ||
|Вывод списка уязвимостей (<code>issues</code>, является значением по | |Вывод списка уязвимостей (<code>issues</code>, является значением по умолчанию), или вывод новых незакрытых уязвимостей (<code>history</code>), или вывод сравнительного списка по уязвимостям указанных ветвей <i>Sisyphus</i> (<code>comp</code>, требует задания значения параметра <code>--branches</code>, при этом первая указанная ветвь сравнивается с последующими), или вывод полных описаний уязвимостей (<code>vul_desc</code>), или вывод установленного соответствия между названиями пакетов и названиями, используемыми в описаниях уязвимостей (<code>map</code>), или вывод примеров использования (<code>ex</code>) | ||
|- | |- | ||
|<code>-f FIX_STATUS, --fix_status FIX_STATUS</code> | |<code>-f FIX_STATUS, --fix_status FIX_STATUS</code> | ||
|Фильтрация результатов по состоянию уязвимостей (<code>fixed</code> / <code>unfixed</code> / <code>all</code>) | |Фильтрация результатов по состоянию уязвимостей (<code>fixed</code> / <code>unfixed</code> / <code>alt_errata_fixed</code> / <code>alt_errata_unfixed</code> / <code>all</code>) | ||
|- | |- | ||
|<code>-t ISSUES_TYPE, --itype ISSUES_TYPE</code> | |<code>-t ISSUES_TYPE, --itype ISSUES_TYPE</code> | ||
Строка 211: | Строка 306: | ||
|- | |- | ||
|<code>-o ORDER_BY, --order ORDER_BY</code> | |<code>-o ORDER_BY, --order ORDER_BY</code> | ||
| | |Упорядочение результатов по идентификаторам уязвимостей (<code>id</code>), именам пакетов (<code>package</code>), оценке CVSS ver.2 (<code>score2</code>), оценке CVSS ver.3 (<code>score3</code>), или текущему состоянию уязвимости (<code>fix</code>) | ||
|- | |- | ||
|<code>-b BRANCH_NAME [BRANCH_NAME ...],<br>--branches BRANCH_NAME [BRANCH_NAME ...]</code> | |<code>-b BRANCH_NAME [BRANCH_NAME ...],<br>--branches BRANCH_NAME [BRANCH_NAME ...]</code> | ||
|Фильтрация результатов по названиям репозиториев | |Фильтрация результатов по названиям указанных репозиториев | ||
|- | |- | ||
|<code>-p PACKAGE_NAME [PACKAGE_NAME ...],<br>--packages PACKAGE_NAME [PACKAGE_NAME ...]</code> | |<code>-p PACKAGE_NAME [PACKAGE_NAME ...],<br>--packages PACKAGE_NAME [PACKAGE_NAME ...]</code> | ||
|Фильтрация результатов по названиям пакетов | |Фильтрация результатов по названиям указанных исходных пакетов | ||
|- | |||
|<code>--distro_list_src DISTRO_NAME</code> | |||
|Фильтрация результатов по названиям исходных пакетов, перечисленных в списке пакетов указанного дистрибутива (поиск файла со списком пакетов дистрибутива осуществляется сначала в каталоге, имеющем название, которое совпадает с названием указанного репозитория — <code><download>/distro_lists_src/<branch></code>, после чего — в каталоге на уровень выше — <code><download>/distro_lists_src</code>) | |||
|- | |||
|<code>--distro_list_bin DISTRO_NAME</code> | |||
|Фильтрация результатов по названиям бинарных пакетов, перечисленных в списке пакетов указанного дистрибутива (окончание <i>".bnames"</i> в названии файла со списком пакетов дистрибутива может быть отброшено, поиск данного файла при этом осуществляется сначала по указанному названию дистрибутива в каталоге, имеющем название, совпадающее с названием указанного репозитория — <code><download>/distro_lists_bin/<branch></code>, после чего — в каталоге на уровень выше — <code><download>/distro_lists_bin</code>, после чего — в том же порядке и в тех же каталогах, но уже с подставленным окончанием <i>".bnames"</i> в название дистрибутива) | |||
|- | |- | ||
|<code>-y YEAR [YEAR ...], --years YEAR [YEAR ...]</code> | |<code>-y YEAR [YEAR ...], --years YEAR [YEAR ...]</code> | ||
Строка 223: | Строка 324: | ||
|- | |- | ||
|<code>-v VUL_ID [VUL_ID ...],<br>--vul_ids VUL_ID [VUL_ID ...]</code> | |<code>-v VUL_ID [VUL_ID ...],<br>--vul_ids VUL_ID [VUL_ID ...]</code> | ||
|Фильтрация результатов по | |Фильтрация результатов по идентификаторам уязвимостей | ||
|- | |- | ||
|<code>--group</code> | |<code>--group</code> | ||
| | |Группировка результатов по именнам пакетов (работает только при запуске с параметром <code>-f unfixed</code>) | ||
|- | |- | ||
|<code>--cure</code> | |<code>--cure</code> | ||
Строка 232: | Строка 333: | ||
|- | |- | ||
|<code>--patch</code> | |<code>--patch</code> | ||
| | |Дополнение отчёта колонкой со списком ссылок на патчи, которые предположительно закрывают данную уязвимость (ссылки извлекаются из входных списков уязвимостей) | ||
|- | |- | ||
|<code>- | |<code>-w, --write_files</code> | ||
|Запись сформированных отчётов в файл <code><out_dir>/<title>_<branch>:<distro>_<YYYY-MM-DD>_<hh:mm:ss></code>, гдe <code><out_dir></code> - абсолютный путь, указанный в качестве параметра <i>out_dir</i> в файле настройки <i>cve-monitor</i>, <code><title></code> — название отчёта (см. <code>--title</code>), <code><branch></code> и <code><distro></code> - репозиторий и дистрибутив (опционально) для которых сформирован отчёт, <code><YYYY-MM-DD></code> и <code><hh:mm:ss></code> — дата и время в соответствующем формате | |||
|- | |- | ||
|<code>-- | |<code>-m [CONTENT_TYPE], --mail [CONTENT_TYPE]</code> | ||
| | |Почтовая рассылка результатов выполняемого запроса на адреса, которые указаны в соответствующем конфигурационном файле (см. подраздел [[CVE-Manager#Настройка_клиентской_части|<i>Настройка клиентской части</i>]]) и которые соответствуют заданной цели (см. <code>--title</code>), значение параметра определяет тип содержимого - простой текст (<code>plain</code>, является значением по-умолчанию), или HTML (<code>html</code>) | ||
|- | |||
|<code>--title NAME</code> | |||
|Название отчёта, каждому названию может быть поставлена в соответствие какая-то группа адресатов почтовой рассылки | |||
|- | |||
|<code>--unite</code> | |||
|Объединение отчётов по рассматриваемым ветвям (репозиториям) в единственный отчёт при осуществлении почтовой рассылки (см. <code>-m</code>) или записи в файл (см. <code>-w</code>). | |||
|} | |} | ||
Примеры команд и значения полей формируемых отчётов: | Примеры команд и значения полей формируемых отчётов: | ||
:* <code>cve-monitor --show issues -f unfixed -b Sisyphus p9 --group --cure -- | :* <code>cve-monitor --show issues -f unfixed -b Sisyphus p9 --group --cure -m -w --title <some_group_of_recipients></code> — запрос всех неисправленных уязвимостей ветвей <i>Sisyphus</i> и <i>p9</i> с группировкой записей по именам пакетов, с предложениями по устранению и отправкой отчётов по электронной почте группе адресатов <i><some_group_of_recipients></i> и записью отчётов в файлы внутри каталога, указанного в качестве значения параметра <i>out_dir</i> в файле настройки <i>cve-monitor</i>; | ||
:* <code>cve-monitor --show issues -f unfixed -b Sisyphus p9 --order package --cure --patch -- | :* <code>cve-monitor --show issues -f unfixed -b Sisyphus p9 --order package --cure --patch -m --title <some_group_of_recipients></code> — запрос детального отчёта (без группировки по именам пакетов -- каждая строка отводится отдельной уязвимости, наличие которой установлено для отдельного пакета), записи которого упорядочены по именам пакетов, с предложениями по устранению и ссылками на страницы, которые могут содержать патчи для устранения соответствующих уязвимостей, также с отправкой по электронной почте; | ||
:* <code>cve-monitor --show history -b p9</code> | :* <code>cve-monitor --show history -b p9</code> — запрос списка новых уязвимостей пакетов ветви <i>p9</i>, обнаруженных с момента последнего запуска модуля <i>cve-history</i>. | ||
{| class="wikitable" style="width: 100%;" | {| class="wikitable" style="width: 100%;" | ||
! style="width: 27%" | Поле | ! style="width: 27%" | Поле | ||
Строка 271: | Строка 378: | ||
|- | |- | ||
|<code>FIX</code> | |<code>FIX</code> | ||
|Состояние данной уязвимости (<code>[NO FIX]</code> - не закрыта, <code>changelog</code> | |Состояние данной уязвимости (<code>[NO FIX]</code> - не закрыта, <code>changelog</code> — о закрытии говорит запись в chagelog пакета, <code>excluded</code>- об отсутствии данной уязвимости говорит запись в файле <code>/etc/cve-manager/cpe-excluded.csv</code>, <code>bigger ver</code> / <code>[lesser ver]</code> — версия пакета больше/меньше указанных уязвимых версий, <code>unresolved</code> — сравнение версий не удалось осуществить) | ||
|- | |- | ||
|<code>CURE</code> | |<code>CURE</code> | ||
Строка 280: | Строка 387: | ||
|- | |- | ||
|} | |} | ||
== Ссылки == | == Ссылки == |
Текущая версия от 15:46, 15 августа 2024
cve-manager — консольная программа, предназначенная 1) для формирования базы данных уязвимостей (БДУ) программ, входящих в состав заданных репозиториев rpm-пакетов, а также 2) для осуществления анализа записей сформированной БДУ и подготовки отчётов на основе результатов этого анализа (в том числе с осуществлением рассылки по электронной почте).
Основными входными данными программы являются 1) списки, содержащие названия и версии исходных и бинарных пакетов рассматриваемых репозиториев (в случае, когда осуществляется анализ пакетов локальной системы, данные, содержащиеся в таких списках, собираются автоматически путём обращения к программе rpm локальной системы), 2) метаданные rpm-пакетов, хранящихся в репозиториях, или rpm-пакетов, установленных в локальной системе, а также 3) списки известных уязвимостей. На данный момент поддерживается два источника списков известных уязвимостей - NVD (National Vulnerability Database) и ФСТЭК (Федеральная служба по техническому и экспортному контролю).
Программа имеет модульную структуру, написана на Python и C++, использует MySQL. Распространяется по лицензии GPLv3.0.
Структура программы
cve-manager состоит из следующих модулей:
- cve-manager — предоставляет пользовательский интерфейс для запуска процесса формирования БДУ и осуществляет организацию и контроль данного процесса путём последовательного запуска остальных модулей в установленном порядке в автоматическом режиме;
- cve-backup — осуществляет резервное копирование/восстановление ранее сформированной БДУ;
- cve-history — осуществляет выборку незакрытых уязвимостей по текущему состоянию БДУ и сохраняет их в отдельной таблице с целью обеспечения возможности сравнения будущего состояния БДУ с этим сохранённым состоянием;
- cve-download — осуществляет загрузку списков уязвимостей, предоставляемых NVD и ФСТЭК, а также загрузку CPE словаря, ACL пакетов исследуемых репозиториев, файлов с хронологией сборок каждого пакета, а также загрузку списков пакетов дистрибутивов;
- cve-import — осуществляет 1) чтение списков RPM-пакетов указанных репозиториев, или формирование списка установленных пакетов локальной системы (далее в предложении - "пакетов", из репозиториев или локальной системы), 2) чтение ACL пакетов, 3) чтение файлов с хронологией сборок пакетов, 4) чтение загруженных списков уязвимостей и CPE словаря, 5) извлечение URL и идентификаторов исправленных уязвимостей из метаданных пакетов, 6) чтение ALT Linux errata, 7) внесение собранных таким образом данных в БДУ;
- cpe-map — осуществляет установление соответствия импортированных в БД названий исходных пакетов рассматриваемых репозиториев и 1) названий программных продуктов из импортированного в БД CPE словаря, а также 2) названий программных продуктов из импортированного в БД списка уязвимостей ФСТЭК;
- cve-issues — осуществляет установление соответствия между данными, внесёнными в БД с помощью модулей cve-import и cpe-map, а именно — формирует записи в БД вида
<идентификатор уязвимости>, <идентификатор пакета>, <уязвимая версия программного продукта>, <статус уязвимости>
, где<статус уязвимости>
— значение из следующего набора (или комбинация данных значений):- c (от changelog) — устранение данной уязвимости обозначено в changelog-секции пакета;
- e (от excluded) — отсутствие данной уязвимости обозначено в файле
/etc/cve-manager/cpe-excluded.csv
(поставляется пакетом cve-manager-inner-knowledge); - b (от bigger ver) — версия пакета в репозитории больше данной уязвимой версии;
- L (от lesser ver) — версия пакета в репозитории меньше данной уязвимой версии;
- V (от vulnerable) — версия пакета в репозитори совпадает с уязвимой версией программного продукта и устранение данной уязвимости не зафиксировано;
- a — версия пакета в репозитории больше указанной в ALT Linux errata уязвимой версии;
- A — версия пакета в репозитори совпадает c указанной в ALT Linux errata уязвимой версией;
- ? — сравнение текущей версии пакета и указанной уязвимой версии программного продукта не удалось осуществить.
- cve-monitor — предназначен для посылки запросов выборки из таблиц БДУ и выдачи результатов (отчётов), например формирование списка всех пакетов с имеющимися незакрытыми уязвимостями или списка всех закрытых уязвимостей одной ветви, которые не закрыты в другой; Формируемые отчёты могут рассылаться на задаваемые адреса электронной почты; Отчёты предоставляются в собственном формате (см. подраздел Мониторинг уязвимостей пакетов), в перспективе - дополнительная возможность их получения в формате XML и JSON.
Все модули кроме cve-import написаны на Python, cve-import написан на C++.
Установка
cve-manager собран в репозиторий Sisyphus.
Установка полной версии (серверная и клиентская часть):
apt-get install cve-manager
Установка только клиентской части:
apt-get install cve-monitor
Пользователь может установить cve-monitor (не устанавливая при этом cve-manager) и делать запросы к cve-manager, установленному на удалённом сервере.
Настройка
Разворачивание инфраструктуры базы данных уязвимостей
Для работы 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 версии 8.*, здесь и далее):
mysql> CREATE USER 'user-name'@'localhost' IDENTIFIED WITH mysql_native_password BY 'user-passwd';
mysql> GRANT ALL ON *.* TO 'user-name'@'localhost';
- где user-name — имя пользователя, user-passwd — пароль пользователя;
- 6. Добавить пользователя MySQL, от имени которого будут осуществляться запросы на чтение записей БД (мониторинг):
mysql> CREATE USER 'monitor'@'localhost' IDENTIFIED WITH mysql_native_password BY 'monitor';
mysql> GRANT SELECT ON *.* TO 'monitor'@'localhost';
Настройка серверной части
Параметры cve-manager определяются файлом ini-формата /etc/cve-manager/cve-manager.conf
. Данный ini-файл включает следующие обязательные секции:
- db_connection, в которой указываются параметры соединения с базой данных MySQL (host, user, password, database);
- common, включающая следующие параметры:
- download — путь к каталогу, в который cve-download загружает входные данные и откуда cve-import их импортирует в БДУ;
- master_branch — название основной ветви, значения времени сборки пакетов которой будут учитываться при определении соответствия имён исходных пакетов и имён уязвимых программных продуктов;
- basealt — путь к каталогу, в который смонтирован корневой каталог alt-сервера;
- always_verify_tls_certificate — флаг, который следует установить равным 1 для запрета установления незащищённого соединения для загрузки данных модулем cve-dowload, или же раным 0 для допущения установления незащищённого соединения;
- excluded_vulsrc — источники списков уязвимостей, исключаемые из рассмотрения (возможные значения - nvd и fstec);
- distro_lists_src — обозначение нахождения списков исходных пакетов, из которых собираются бинарные пакеты дистрибутивов, в виде пути к каталогу в файловой системе или в виде адреса репозитория (git-протокол);
- distro_lists_bin — обозначение нахождения списков бинарных пакетов дистрибутивов в виде пути к каталогу в файловой системе или в виде адреса репозитория (git-протокол).
Параметры download и master_branch являются обязательными.
Прочие секции файла настройки воспринимаются как названия ветвей Sisyphus, информация об уязвимостях которых должна быть помещена в БДУ. Каждая из таких секций может включать определение следующих параметров:
- base_dir — название основного каталога данного репозитория;
- bin_list — путь к списку бинарных пакетов (bin.list) данного репозитория;
- srpms_dir — путь к каталогу с исходными пакетами (SRPMS) данного репозитория;
- rpms_dirs — пути к каталогам с бинарными пакетами (RPMS) данного репозитория.
По умолчанию значения перечисленных параметров соответствуют структуре каталогов alt-сервера. ВНИМАНИЕ — названия секций должны состоять только из латинских символов и цифр. В случае, если название репозитория включает прочие символы, следует воспользоваться переменной base_dir (см. пример, секция x81).
Для анализа локальной системы в файл настройки следует добавить секцию с особым названием - local_sys. При этом название репозитория, который используется локальной системой, задаётся параметром branch (значение данного параметра по-умолчанию соответствует значению параметра master_branch секции common).
Пример файла настройки:
[db_connection] host = "localhost:3306" user = some_username password = some_password database = some_dbname [common] basealt = /space/ download = ~/.cve-manager/ excluded_vulsrc = fstec master_branch = Sisyphus [Sisyphus] [p8] [local_sys] branch = p8 [x81] base_dir = /space/ALT/x8.1/ [some_branch] bin_list = "/some_branch/lists/bin.list" srpms_dir = "/some_branch/SRPMS/" rpms_dirs = "/some_branch/x86_64/RPMS/", "/some_branch/noarch/RPMS/"
Файл настройки принадлежит пользователю 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
следует передать название группы адресатов в качестве значения параметра --title
. Так, например, пусть файл настройки почтовой рассылки имеет следующее содержимое:
[smtp_connection] host = some_host.com port = 25 user = some_mail_account password = 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 --title daily
Внутренние знания cve-manager
Пакет cve-manager-inner-knowledge содержит ряд файлов с данными, которые могут быть отредактированы пользователем с целью оказания влияния на процесс формирования БДУ:
cpe-excluded.csv
иfstec-excluded.csv
(/etc/cve-manager/cpe-excluded.csv
и/etc/cve-manager/fstec-excluded.csv
) — определяют упоминаемые в списках уязвимостей программные продукты, которые должны быть исключены из рассмотрения;cpe-mapping.csv
иfstec-mapping.csv
(/etc/cve-manager/cpe-mapping.csv
и/etc/cve-manager/fstec-mapping.csv
) — предопределяют соответствие имён на начальном этапе работы модуля cpe-map;cpe-mapping-ignore.csv
иfstec-mapping-ignore.csv
(/etc/cve-manager/cpe-mapping-ignore.csv
и/etc/cve-manager/fstec-mapping-ignore.csv
) — определяют пары имён, которые должны быть исключены из результатов работы модуля cpe-map;cpe-relatives.txt
иfstec-relatives.txt
(/etc/cve-manager/cpe-relatives.txt
и/etc/cve-manager/fstec-relatives.txt
) — предопределяют набор упоминаемых в списках уязвимостей родственных продуктов (если какое-то название продукта из набора было поставлено в соответствие какому-то названию пакета, то каждое название продукта из всех прочих названий продуктов данного набора будет на равных правах поставлено в соответствие данному названию пакета в случае, если данное название продукта не было поставлено в соответствие какому-то другому названию пакета);excluded-issues.csv
(/etc/cve-manager/excluded-issues.csv
) — определяет уязвимости, которые не следует считать незакрытыми для указанного пакета указанного репозитория начиная с указанной версии пакета (используется модулем cve-issues);groups.csv
(/etc/cve-manager/groups.csv
) — определяет группы, в которые, в соответствии с заданными в этом файле условиями, в ходе работы программы будут включены пакеты и программные продукты из списков уязвимостей (названию пакета одной группы не может быть поставлено в соответствие название программного продукта другой группы).
Каждая строка файлов cpe-excluded.csv и fstec-excluded.csv должна быть записана в следующем формате (здесь и далее под вендором и названием программного продукта подразумеваются соответствующие составляющие CPE или обозначения продуктов из данных от ФСТЭК, само словосочетание "программный продукт" представлено сокращённой записью "пп"):
<вендор пп>, <названия пп через пробел>
При этом в качестве вендора или названия программного продукта может быть помещён символ *
, означающий, соответственно, "все продукты с данным названием продукта" или "все названия продуктов данного вендора", а также могут быть помещены названия программных продуктов с префиксом !
, означающим "все названия продуктов данного вендора, за исключением данного названия":
*, <название_пп0> <вендор пп1>, * <вендор пп2>, !<название пп21> !<название пп22> !<название пп23>
Также в файлах cpe-excluded.csv и fstec-excluded.csv возможно использование регулярных выражений. Регулярное выражение должно начинаться с символа r
и быть заключено в одинарные или двойные кавычки:
*, r'for_windows$' r"^apple[^A-Za-z]?", *
В виду того, что составляющие обозначений продуктов ФСТЭК не имеют строгого формата (в них могут быть использованы как заглавные, так и строчные буквы, а в качестве разделителей могу быть использованы различные символы), к списку fstec-excluded.csv применяются дополнительные правила, облегчающие задание исключённых продуктов, а именно:
- Регистр не учитывается;
- Символ
_
обозначает наличие какого-либо разделителя; - Символ
~
обозначает возможное наличие какого-либо разделителя.
Так, например, первая строка подойдёт для описания как продукта "Some product", так и для описания продукта "Some_product" и "SomeProduct", а вторая строка — только для описания продуктов "Some Product" и "Some_product" (из трёх приведённых названий продуктов):
*, some~product *, some_product
Каждая строка файлов cpe-mapping.csv и cpe-mapping-ignore.csv, а также файлов fstec-mapping.csv и fstec-mapping-ignore.csv должна быть записана в следующем формате:
<название пакета>, <названия пп через пробел>
Каждая строка файлов cpe-relatives.txt и fstec-relatives.txt представляет собой последовательность обозначений программных продуктов, разделённых пробелами, каждое обозначение программного продукта при этом записывается в следующем формате:
<вендор пп>:<название пп>
Каждая строка файла excluded-issues.csv должна быть записана в следующем формате:
<ветвь Sisyphus, 'all' если все ветви>, <id уязвимости>, <название пакета>, <версия пакета>
Каждая строка файла groups.csv должна быть записана в следующем формате (каждый столбец, описанный существительным во множественном числе, допускает внесения последовательности слов, разделённых пробелами):
<условное название группы>, <префиксы пакетов>, <вендоры пп>, <префиксы названий пп>, <суффиксы названий пп>, <url адреса пакетов и пп>
Для того чтобы изменения списка cpe-excluded.csv или fstec-excluded.csv вступили в действие, следует запустить формирование БДУ начиная с шага, не ранее чем шаг импорта данных:
cve-manager -b import
В остальных случаях, для того чтобы обозначенные настройки установления соответствия имён вступили в действие, следует заново запустить модуль 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 -b map
Использование
Формат списка пакетов исследуемого репозитория (не относится к анализу локальной системы)
Список пакетов исследуемого репозитория может быть задан в одном из двух форматов. Первый формат соответствует формату списков бинарных пакетов ALT Linux (alt:/ALT/<branch>/files/list/bin.list
), а второй формат исключает всю ненужную информацию:
Формат | Пример |
---|---|
<bin_package_short_name> <*> <*> <*> <src_package_full_name>
|
libcve-manager 0.33.1-alt1 x86_64 libcve-manager-0.33.1-alt1.x86_64.rpm cve-manager-0.33.1-alt1.src.rpm
|
<bin_package_short_name> <src_package_full_name>
|
libcve-manager cve-manager-0.33.1-alt1
|
<*>
— любая комбинация символов, не включающая пробелы;<bin_package_short_name>
— название бинарного пакета без версии и релиза;<src_package_full_name>
— полное название исходного пакета, включающее версию и релиз (наличие расширения 'src.rpm' не обязательно).
Требование к наличию RPM-пакетов (не относится к анализу локальной системы)
Для выполнения импорта необходимых данных в БДУ для каждого набора наименований RPM-пакетов {src_i, {bin_i0, .. , bin_ij}}
(где src_i
— название исходного пакета; {bin_i0, .., bin_ij}
— названия бинарных пакетов, собранных из src_i
) пользователь должен предоставить либо а) исходный пакет, соответствующий src_i
, либо б) один из бинарных пакетов, соответствующих {bin_i0, .., bin_ij}
. Пути к каталогам, в которых были помещены данные пакеты, должны быть заданы в файле настроек /etc/cve-manager/cve-manager.conf
в качестве значений параметров srpms_dir и rpms_dirs соответственно, при этом, бинарные пакеты могут быть расположены в нескольких каталогах, которые в таком случае должны быть перечислены через запятую как это показано в примере файла настройки (см. подраздел Настройка серверной части).
Подготовка базы данных уязвимостей
Запуск процесса формирования БДУ:
cve-manager [-h] [-a] [-b MODULE_NAME] [-e MODULE_NAME] [-r N_REPEATED_ATTEMPTS] [-o] [-l] [--plain] [--silent]
Параметр | Описание |
---|---|
-h, --help
|
Вывод справки |
-a, --run_all
|
Выполнить все шаги формирования БДУ |
-b MODULE_NAME, --beginning_step MODULE_NAME
|
Начальный шаг запускаемого процесса формирования БДУ (название модуля без приставки cve- / cpe- )
|
-e MODULE_NAME, --ending_step MODULE_NAME
|
Конечный шаг запускаемого процесса формирования БДУ (название модуля без приставки cve- / cpe- )
|
-r N_REPEATED_ATTEMPTS, --retry N_REPEATED_ATTEMPTS
|
Количество попыток перезапуска последнего выполняемого модуля в случае его неуспешного выполнения |
-o, --offline
|
Не запускать модуль cve-download в процессе формирования БДУ |
-l, --list_modules
|
Вывод списка доступных модулей (вместе с их описаниями) |
--plain
|
Упрощенный вывод (следует использовать, например, при перенаправлении вывода в файл) |
--silent
|
Запрет вывода |
Пример команды запуска формирования БДУ, при котором автоматически, в установленном порядке, один за другим будут запущены все прочие модули:
cve-manager -a --plain 2>&1 1>$HOME/cve-manager.log
В случае первого запуска cve-manager, когда БДУ не была ранее сформирована, в качестве начального шага следует указывать шаг загрузки входных данных, при этом не будет осуществлён запуск модулей, работа которых имеет смысл только при наличии сформированной БДУ (создание файла с копией текущего состояния БДУ и сохранение текущих незакрытых уязвимостей в специальной таблице БДУ):
cve-manager -b download --plain 2>&1 1>$HOME/cve-manager.log
Каждый модуль пакета cve-manager является самостоятельной программой и может быть запущен напрямую, например:
cve-download --everything
cve-import --everything
Вывод справочной информации модуля:
<module-name> --help
Мониторинг уязвимостей пакетов
Запуск модуля 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 ...]] [--distro_list_src DISTRO_NAME] [--distro_list_bin DISTRO_NAME] [-y YEAR [YEAR ...]] [-v VUL_ID [VUL_ID ...]] [--group] [--cure] [--patch] [-w] [-m] [--title NAME] [--unite]
Параметр | Описание |
---|---|
-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 / alt_errata_fixed / alt_errata_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 ...],
|
Фильтрация результатов по названиям указанных репозиториев |
-p PACKAGE_NAME [PACKAGE_NAME ...],
|
Фильтрация результатов по названиям указанных исходных пакетов |
--distro_list_src DISTRO_NAME
|
Фильтрация результатов по названиям исходных пакетов, перечисленных в списке пакетов указанного дистрибутива (поиск файла со списком пакетов дистрибутива осуществляется сначала в каталоге, имеющем название, которое совпадает с названием указанного репозитория — <download>/distro_lists_src/<branch> , после чего — в каталоге на уровень выше — <download>/distro_lists_src )
|
--distro_list_bin DISTRO_NAME
|
Фильтрация результатов по названиям бинарных пакетов, перечисленных в списке пакетов указанного дистрибутива (окончание ".bnames" в названии файла со списком пакетов дистрибутива может быть отброшено, поиск данного файла при этом осуществляется сначала по указанному названию дистрибутива в каталоге, имеющем название, совпадающее с названием указанного репозитория — <download>/distro_lists_bin/<branch> , после чего — в каталоге на уровень выше — <download>/distro_lists_bin , после чего — в том же порядке и в тех же каталогах, но уже с подставленным окончанием ".bnames" в название дистрибутива)
|
-y YEAR [YEAR ...], --years YEAR [YEAR ...]
|
Фильтрация результатов по датам уязвимостей |
-v VUL_ID [VUL_ID ...],
|
Фильтрация результатов по идентификаторам уязвимостей |
--group
|
Группировка результатов по именнам пакетов (работает только при запуске с параметром -f unfixed )
|
--cure
|
Дополнение отчёта колонкой с названиями ветвей Sisyphus более высокого порядка (например, p9 для p8), в которых данная уязвимость не наблюдается |
--patch
|
Дополнение отчёта колонкой со списком ссылок на патчи, которые предположительно закрывают данную уязвимость (ссылки извлекаются из входных списков уязвимостей) |
-w, --write_files
|
Запись сформированных отчётов в файл <out_dir>/<title>_<branch>:<distro>_<YYYY-MM-DD>_<hh:mm:ss> , гдe <out_dir> - абсолютный путь, указанный в качестве параметра out_dir в файле настройки cve-monitor, <title> — название отчёта (см. --title ), <branch> и <distro> - репозиторий и дистрибутив (опционально) для которых сформирован отчёт, <YYYY-MM-DD> и <hh:mm:ss> — дата и время в соответствующем формате
|
-m [CONTENT_TYPE], --mail [CONTENT_TYPE]
|
Почтовая рассылка результатов выполняемого запроса на адреса, которые указаны в соответствующем конфигурационном файле (см. подраздел Настройка клиентской части) и которые соответствуют заданной цели (см. --title ), значение параметра определяет тип содержимого - простой текст (plain , является значением по-умолчанию), или HTML (html )
|
--title NAME
|
Название отчёта, каждому названию может быть поставлена в соответствие какая-то группа адресатов почтовой рассылки |
--unite
|
Объединение отчётов по рассматриваемым ветвям (репозиториям) в единственный отчёт при осуществлении почтовой рассылки (см. -m ) или записи в файл (см. -w ).
|
Примеры команд и значения полей формируемых отчётов:
cve-monitor --show issues -f unfixed -b Sisyphus p9 --group --cure -m -w --title <some_group_of_recipients>
— запрос всех неисправленных уязвимостей ветвей Sisyphus и p9 с группировкой записей по именам пакетов, с предложениями по устранению и отправкой отчётов по электронной почте группе адресатов <some_group_of_recipients> и записью отчётов в файлы внутри каталога, указанного в качестве значения параметра out_dir в файле настройки cve-monitor;cve-monitor --show issues -f unfixed -b Sisyphus p9 --order package --cure --patch -m --title <some_group_of_recipients>
— запрос детального отчёта (без группировки по именам пакетов -- каждая строка отводится отдельной уязвимости, наличие которой установлено для отдельного пакета), записи которого упорядочены по именам пакетов, с предложениями по устранению и ссылками на страницы, которые могут содержать патчи для устранения соответствующих уязвимостей, также с отправкой по электронной почте;cve-monitor --show history -b p9
— запрос списка новых уязвимостей пакетов ветви p9, обнаруженных с момента последнего запуска модуля cve-history.
Поле | Значение |
---|---|
PACKAGE NAME-VER-REL
|
Название пакета, его версия и релиз |
MAPPED NAME
|
Название программного продукта, поставленное в соответствие названию данного пакета |
VULNERABLE VER
|
Указанные уязвимые версии, или интервалы версий (наличие версии, обозначенной символом * , означает, что набор уязвимых версий точно не установлен)
|
QTY
|
Количество уязвимостей, наличие которых установленно для данного пакета |
CVSS2/3
|
Оценка данной уязвимости по метрике CVSS ver.2 и CVSS ver.3 |
MAX CVSS2/3
|
Максимальная оценка по метрике CVSS ver.2 и CVSS ver.3 из всех оценок уязвимостей данного пакета |
ACL
|
Cписок пользователей и групп пользователей, имеющих право на сборку данного пакета в данный репозиторий с помощью git.alt |
FIX
|
Состояние данной уязвимости ([NO FIX] - не закрыта, changelog — о закрытии говорит запись в chagelog пакета, excluded - об отсутствии данной уязвимости говорит запись в файле /etc/cve-manager/cpe-excluded.csv , bigger ver / [lesser ver] — версия пакета больше/меньше указанных уязвимых версий, unresolved — сравнение версий не удалось осуществить)
|
CURE
|
Ветви Sisyphus, в которых данный пакет не имеет всех или части (указывается особо) уязвимостей, наличие которых установлено для данного пакета |
PATCH
|
Ссылки на страницы, которые могут содержать патчи для устранения соответствующей уязвимостей |