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

Материал из ALT Linux Wiki
мНет описания правки
Нет описания правки
Строка 1: Строка 1:
<b>cve-manager</b> — консольная программа, предназначенная 1) для формирования базы данных уязвимостей (БДУ) программ, входящих в состав заданных репозиториев rpm-пакетов, а также 2) для осуществления анализа записей сформированной БДУ и подготовки отчётов на основе результатов этого анализа (в том числе с осуществлением рассылки по электронной почте).
<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.
Строка 12: Строка 13:
# <b>cve-history</b> — осуществляет выборку незакрытых уязвимостей по текущему состоянию БДУ и сохраняет их в отдельной таблице с целью обеспечения возможности сравнения будущего состояния БДУ с этим сохранённым состоянием;
# <b>cve-history</b> — осуществляет выборку незакрытых уязвимостей по текущему состоянию БДУ и сохраняет их в отдельной таблице с целью обеспечения возможности сравнения будущего состояния БДУ с этим сохранённым состоянием;
# <b>cve-download</b> — осуществляет загрузку списков уязвимостей, предоставляемых NVD и ФСТЭК, а также загрузку CPE словаря, ACL пакетов исследуемых репозиториев, файлов с хронологией сборок каждого пакета, а также загрузку списков пакетов дистрибутивов;
# <b>cve-download</b> — осуществляет загрузку списков уязвимостей, предоставляемых NVD и ФСТЭК, а также загрузку CPE словаря, ACL пакетов исследуемых репозиториев, файлов с хронологией сборок каждого пакета, а также загрузку списков пакетов дистрибутивов;
# <b>cve-import</b> — осуществляет 1) чтение списков RPM-пакетов указанных репозиториев (далее в предложении <i>"пакетов"</i>), 2) чтение ACL пакетов, 3) чтение файлов с хронологией сборок пакетов, 4) чтение загруженных списков уязвимостей и CPE словаря, 5) извлечение URL и идентификаторов исправленных уязвимостей из метаданных пакетов, 6) внесение собранных таким образом данных в БДУ;
# <b>cve-import</b> — осуществляет 1) чтение списков RPM-пакетов указанных репозиториев, или формирование списка установленных пакетов локальной системы (далее в предложении - <i>"пакетов"</i>, из репозиториев или локальной системы), 2) чтение ACL пакетов, 3) чтение файлов с хронологией сборок пакетов, 4) чтение загруженных списков уязвимостей и CPE словаря, 5) извлечение URL и идентификаторов исправленных уязвимостей из метаданных пакетов, 6) внесение собранных таким образом данных в БДУ;
# <b>cpe-map</b> — осуществляет установление соответствия импортированных в БД названий исходных пакетов рассматриваемых репозиториев и 1) названий программных продуктов из импортированного в БД CPE словаря, а также 2) названий программных продуктов из импортированного в БД списка уязвимостей ФСТЭК;
# <b>cpe-map</b> — осуществляет установление соответствия импортированных в БД названий исходных пакетов рассматриваемых репозиториев и 1) названий программных продуктов из импортированного в БД CPE словаря, а также 2) названий программных продуктов из импортированного в БД списка уязвимостей ФСТЭК;
# <b>cve-issues</b> — осуществляет установление соответствия между данными, внесёнными в БД с помощью модулей <i>cve-import</i> и <i>cpe-map</i>, а именно — формирует записи в БД вида <code><идентификатор уязвимости>, <идентификатор пакета>, <уязвимая версия программного продукта>, <статус уязвимости></code>, где <code><статус уязвимости></code> — значение из следующего набора (или комбинация данных значений):
# <b>cve-issues</b> — осуществляет установление соответствия между данными, внесёнными в БД с помощью модулей <i>cve-import</i> и <i>cpe-map</i>, а именно — формирует записи в БД вида <code><идентификатор уязвимости>, <идентификатор пакета>, <уязвимая версия программного продукта>, <статус уязвимости></code>, где <code><статус уязвимости></code> — значение из следующего набора (или комбинация данных значений):
Строка 46: Строка 47:
:* <i>rpms_dirs</i> — пути к каталогам с бинарными пакетами (RPMS) данного репозитория.
:* <i>rpms_dirs</i> — пути к каталогам с бинарными пакетами (RPMS) данного репозитория.
По умолчанию значения перечисленных параметров соответствуют структуре каталогов alt-сервера. <b>ВНИМАНИЕ</b> — названия секций должны состоять только из латинских символов и цифр. В случае, если название репозитория включает прочие символы, следует воспользоваться переменной <i>base_dir</i> (см. пример, секция <i>x81</i>).
По умолчанию значения перечисленных параметров соответствуют структуре каталогов 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>).


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


[p8]
[p8]
[local_sys]
branch = p8


[x81]
[x81]
Строка 109: Строка 115:


Пакет <i><b>cve-manager-inner-knowledge</b></i> содержит ряд файлов с данными, которые могут быть отредактированы пользователем с целью оказания влияния на процесс формирования БДУ:
Пакет <i><b>cve-manager-inner-knowledge</b></i> содержит ряд файлов с данными, которые могут быть отредактированы пользователем с целью оказания влияния на процесс формирования БДУ:
:*<code>cpe-excluded.csv</code> (<code>/etc/cve-manager/cpe-excluded.csv</code>) - определяет CPE, исключённые из рассмотрения;
:*<code>cpe-mapping.csv</code> (<code>/etc/cve-manager/cpe-mapping.csv</code>) — предопределяет соответствие имён на начальном этапе работы модуля <i>cpe-map</i>;
:*<code>cpe-mapping.csv</code> (<code>/etc/cve-manager/cpe-mapping.csv</code>) — предопределяет соответствие имён на начальном этапе работы модуля <i>cpe-map</i>;
:*<code>cpe-mapping-ignore.csv</code> (<code>/etc/cve-manager/cpe-mapping-ignore.csv</code>) — определяет пары имён, которые исключаются из результатов работы модуля <i>cpe-map</i>;
:*<code>cpe-mapping-ignore.csv</code> (<code>/etc/cve-manager/cpe-mapping-ignore.csv</code>) — определяет пары имён, которые исключаются из результатов работы модуля <i>cpe-map</i>;
:*<code>excluded-issues.csv</code> (<code>/etc/cve-manager/excluded-issues.csv</code>) — определяет уязвимости, которые не следует считать незакрытыми для указанного пакета указанного репозитория начиная с указанной версии пакета (используется модулем <i>cve-issues</i>).
:*<code>cpe-relatives.txt</code> (<code>/etc/cve-manager/cpe-relatives.txt</code>) - предопределяет набор родственных CPE (если какое-то название продукта из набора родственных CPE было поставлено в соответствие какому-то названию пакета, то каждое название продукта из всех прочих CPE данного набора будет на равных правах поставлено в соответствие данному названию пакета в случае, если данное название продукта не было поставлено в соответствие какому-то другому названию пакета);
:*<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-excluded.csv</i> должна быть записана в следующем формате (здесь и далее под вендором и названием программного продукта подразумеваются соответствующие составляющие CPE - обозначений программного обеспечения, которые используются NVD, а само словосочетание <i>"программный продукт"</i> представлено сокращённой записью <i>"пп"</i>):
:<code><вендор пп>, <названия пп через пробел></code>
 
При этом в качестве названия программного продукта может быть помещён символ <code>*</code>, означающий <i>"все названия продуктов данного вендора"</i>, а также могут быть
помещены названия программных продуктов с префиксом <code>!</code>, означающим <i>"все названия продуктов данного вендора, за исключением данного названия"</i>:
:<code><вендор пп1>, *</code>
:<code><вендор пп2>, !<название пп21> !<название пп22> !<название пп23></code>


Каждая строка файлов <i>cpe-mapping.csv</i> и <i>cpe-mapping-ignore.csv</i> должна быть записана в следующем формате:
Каждая строка файлов <i>cpe-mapping.csv</i> и <i>cpe-mapping-ignore.csv</i> должна быть записана в следующем формате:
:<code><название пакета>, <название программного продуката, используемое NVD></code>
:<code><название пакета>, <названия пп через пробел></code>
 
Каждая строка файла <i>cpe-relatives.txt</i> представляет собой последовательность CPE, разделённых пробелами, каждое CPE при этом записывается в следующем формате:
:<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> заново для соответствующих ветвей (<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>groups.csv</i> должна быть записана в следующем формате (каждый столбец, описанный существительным во множественном числе, допускает внесения последовательности слов, разделённых пробелами):
:<code><условное название группы>, <префиксы пакетов>, <вендоры пп>, <префиксы названий пп>, <суффиксы названий пп>, <url адреса пакетов и пп></code>
 
Для того чтобы изменения списка <i>cpe-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>), а второй формат исключает всю ненужную информацию:


Строка 143: Строка 169:
:<code><src_package_full_name></code> — полное название исходного пакета, включающее версию и релиз (наличие расширения <i>'src.rpm'</i> не обязательно).
:<code><src_package_full_name></code> — полное название исходного пакета, включающее версию и релиз (наличие расширения <i>'src.rpm'</i> не обязательно).


=== Требование к наличию RPM-пакетов ===
=== Требование к наличию 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>]]).
Для выполнения импорта необходимых данных в БДУ для каждого набора наименований 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%;"
|-
|-
Строка 168: Строка 194:
|<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>

Версия от 22:54, 4 мая 2022

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

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

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

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

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

  1. cve-manager — предоставляет пользовательский интерфейс для запуска процесса формирования БДУ и осуществляет организацию и контроль данного процесса путём последовательного запуска остальных модулей в установленном порядке в автоматическом режиме;
  2. cve-backup — осуществляет резервное копирование/восстановление ранее сформированной БДУ;
  3. cve-history — осуществляет выборку незакрытых уязвимостей по текущему состоянию БДУ и сохраняет их в отдельной таблице с целью обеспечения возможности сравнения будущего состояния БДУ с этим сохранённым состоянием;
  4. cve-download — осуществляет загрузку списков уязвимостей, предоставляемых NVD и ФСТЭК, а также загрузку CPE словаря, ACL пакетов исследуемых репозиториев, файлов с хронологией сборок каждого пакета, а также загрузку списков пакетов дистрибутивов;
  5. cve-import — осуществляет 1) чтение списков RPM-пакетов указанных репозиториев, или формирование списка установленных пакетов локальной системы (далее в предложении - "пакетов", из репозиториев или локальной системы), 2) чтение ACL пакетов, 3) чтение файлов с хронологией сборок пакетов, 4) чтение загруженных списков уязвимостей и CPE словаря, 5) извлечение URL и идентификаторов исправленных уязвимостей из метаданных пакетов, 6) внесение собранных таким образом данных в БДУ;
  6. cpe-map — осуществляет установление соответствия импортированных в БД названий исходных пакетов рассматриваемых репозиториев и 1) названий программных продуктов из импортированного в БД CPE словаря, а также 2) названий программных продуктов из импортированного в БД списка уязвимостей ФСТЭК;
  7. 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) — версия пакета в репозитори совпадает с уязвимой версией программного продукта и устранение данной уязвимости не зафиксировано;
    • ? — сравнение текущей версии пакета и указанной уязвимой версии программного продукта не удалось осуществить.
  8. 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. db_connection, в которой указываются параметры соединения с базой данных MySQL (host, user, password, database);
  2. common, в которой указывается путь к каталогу, в который cve-download загружает входные данные и откуда cve-import их импортирует в БД (download), название основной ветви, значения времени сборки пакетов которой будут учитываться при определении соответствия имён исходных пакетов и имён уязвимых программных продуктов (master_branch), путь к корневому каталогу alt-сервера (basealt), а также источники списков уязвимостей, исключаемые из рассмотрения (excluded_vulsrc с возможными значениями nvd и fstec), при этом первые два параметра являются обязательными.

Прочие секции файла настройки воспринимаются как названия ветвей 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 (/etc/cve-manager/cpe-excluded.csv) - определяет CPE, исключённые из рассмотрения;
  • cpe-mapping.csv (/etc/cve-manager/cpe-mapping.csv) — предопределяет соответствие имён на начальном этапе работы модуля cpe-map;
  • cpe-mapping-ignore.csv (/etc/cve-manager/cpe-mapping-ignore.csv) — определяет пары имён, которые исключаются из результатов работы модуля cpe-map;
  • cpe-relatives.txt (/etc/cve-manager/cpe-relatives.txt) - предопределяет набор родственных CPE (если какое-то название продукта из набора родственных CPE было поставлено в соответствие какому-то названию пакета, то каждое название продукта из всех прочих CPE данного набора будет на равных правах поставлено в соответствие данному названию пакета в случае, если данное название продукта не было поставлено в соответствие какому-то другому названию пакета);
  • excluded-issues.csv (/etc/cve-manager/excluded-issues.csv) — определяет уязвимости, которые не следует считать незакрытыми для указанного пакета указанного репозитория начиная с указанной версии пакета (используется модулем cve-issues);
  • groups.csv (/etc/cve-manager/groups.csv) - определяет группы, в которые, в соответствии с заданными в этом файле условиями, в ходе работы программы будут включены пакеты и программные продукты из списков уязвимостей (названию пакета одной группы не может быть поставлено в соответствие название программного продукта другой группы).

Каждая строка файла cpe-excluded.csv должна быть записана в следующем формате (здесь и далее под вендором и названием программного продукта подразумеваются соответствующие составляющие CPE - обозначений программного обеспечения, которые используются NVD, а само словосочетание "программный продукт" представлено сокращённой записью "пп"):

<вендор пп>, <названия пп через пробел>

При этом в качестве названия программного продукта может быть помещён символ *, означающий "все названия продуктов данного вендора", а также могут быть помещены названия программных продуктов с префиксом !, означающим "все названия продуктов данного вендора, за исключением данного названия":

<вендор пп1>, *
<вендор пп2>, !<название пп21> !<название пп22> !<название пп23>

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

<название пакета>, <названия пп через пробел>

Каждая строка файла cpe-relatives.txt представляет собой последовательность CPE, разделённых пробелами, каждое CPE при этом записывается в следующем формате:

<вендор пп>:<название пп>

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

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

Каждая строка файла groups.csv должна быть записана в следующем формате (каждый столбец, описанный существительным во множественном числе, допускает внесения последовательности слов, разделённых пробелами):

<условное название группы>, <префиксы пакетов>, <вендоры пп>, <префиксы названий пп>, <суффиксы названий пп>, <url адреса пакетов и пп>

Для того чтобы изменения списка cpe-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 / 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 ...]
Фильтрация результатов по названиям указанных исходных пакетов
--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 ...],
--vul_ids 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, --mail Осуществление почтовой рассылки с результатом выполняемого запроса на адреса, которые указаны в соответствующем конфигурационном файле (см. подраздел Настройка клиентской части) и которые соответствуют заданной цели (см. --title)
--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 Ссылки на страницы, которые могут содержать патчи для устранения соответствующей уязвимостей

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

Для работы 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';

Ссылки

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