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

Материал из ALT Linux Wiki
Нет описания правки
Нет описания правки
Строка 1: Строка 1:
<b>cve-manager</b> - консольная программа для отслеживания уязвимостей программного обеспечения, имеет модульную структуру, написана на Python и C++. Распространяется по лицензии GPLv3.0.
<b>cve-manager</b> - консольная программа, предназначенная для отслеживания уязвимостей программного обеспечения, имеет модульную структуру, написана на Python и C++. Распространяется по лицензии GPLv3.0.


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


cve-manager состоит из следующих модулей:<br>
cve-manager состоит из следующих модулей:<br>
- <b>cve-manager</b> - диалоговый интерфейс для запуска всех остальных модулей, написан на Python;<br>
# <b>cve-manager</b> - диалоговый интерфейс для запуска всех остальных модулей, написан на Python;<br>
- <b>cve-backup</b> - осуществляет резервное копирование базы данных сформированной cve-manager, написан на Python;<br>
# <b>cve-backup</b> - осуществляет резервное копирование/восстановление ранее сформированной базы данных уязвимостей, написан на Python;<br>
- <b>cve-download</b> - осуществляет загрузку по https списков уязвимостей, предоставляемых NVD (National Vulnerability Database) и ФСТЭК (Федеральная служба по техническому и экспортному контролю), а также CPE словаря, написан на Python;<br>
# <b>cve-download</b> - осуществляет загрузку по https списков уязвимостей, предоставляемых NVD (National Vulnerability Database) и ФСТЭК (Федеральная служба по техническому и экспортному контролю), а также CPE словаря, написан на Python;<br>
- <b>cve-import</b> - осуществляет для выбранных репозиториев внесение списка пакетов, которые размещены на alt-сервере (например "/ALT/Sisyphus/files/list/src.listа"), а также внесение загруженных списков уязвимостей и CPE словаря в базу данных (БД) MySQL, написан на C++;<br>
# <b>cve-import</b> - осуществляет для выбранных репозиториев внесение списка пакетов, которые размещены на alt-сервере (например "/ALT/p8/files/list/src.list" и "/ALT/p8/files/list/bin.list" для ветви p8), а также внесение загруженных списков уязвимостей и CPE словаря в базу данных (БД) MySQL, написан на C++;<br>
- <b>cpe-map</b> - осуществляет установление соответствия импортированных в БД названий исходных пакетов рассматриваемых репозиториев и product из импортированного в БД CPE словаря, написан на Python;<br>
# <b>cve-fixes</b> - извлекает 'Fixes' записи и URL из метаданных всех исходных пакетов рассматриваемых репозиториев, написан на Python, использует <i>gb-x-parse-vulns-from-changelog</i>;<br>
- <b>cve-fixes</b> - извлекает 'Fixes' записи и URL из метаданных всех исходных пакетов рассматриваемых репозиториев, написан на Python, использует <i>gb-x-parse-vulns-from-changelog</i>;<br>
# <b>cpe-map</b> - осуществляет установление соответствия импортированных в БД названий исходных пакетов рассматриваемых репозиториев и 1) product из импортированного в БД CPE словаря, а также 2) названий программ из списка уязвимостей ФСТЭК, написан на Python;<br>
- <b>cve-issue</b> - осуществляет установление соответствия между данными, внесёнными в БД с помощью модулей <i>cve-import</i>, <i>cpe-map</i>, <i>cve-fixes</i>, а именно - записи в БД вида "<CVE или ФСТЭК идентификатор>, <название пакета>, <наличие 'Fixes' записи>", написана на Python;<br>
# <b>cve-issues</b> - осуществляет установление соответствия между данными, внесёнными в БД с помощью модулей <i>cve-import</i>, <i>cpe-map</i>, <i>cve-fixes</i>, а именно - записи в БД вида "<CVE или ФСТЭК идентификатор>, <название пакета>, <Fix-status>", где <Fix-status> - значение из следующего набора:<br>
- <b>cve-monitor</b> - предназначен для посылки запросов в БД, например получение списка всех пакетов с имеющимися незакрытыми уязвимостями.<br>
## <i>changelog</i> - устранение данной уязвимости обозначено в changelog-секции пакета;<br>
## <i>bigger version</i> - версия пакета в репозитории больше данной уязвимой версии;<br>
## <i>lesser version</i> - версия пакета в репозитории меньше данной уязвимой версии;<br>
## <i>[NO FIX]</i> - версия пакета в репозитори совпадает с уязвимой версией пакета и устранение данной уязвимости не зафиксировано;<br>
::написана на Python;<br>
# <b>cve-monitor</b> - предназначен для посылки запросов в БД, например получение списка всех пакетов с имеющимися незакрытыми уязвимостями.<br>


== Настройка ==
== Настройка ==


Параметры <i>cve-manager</i> определяются файлом ini-формата <code>/etc/cve-manager/cve-manager.conf</code>. Данный ini-файл состоит из следующих секций:<br>
Параметры <i>cve-manager</i> определяются файлом ini-формата <code>/etc/cve-manager/cve-manager.conf</code>. Данный ini-файл состоит из следующих секций:<br>
1) <i>database</i>, содержащей параметры соединения с базой данных MySQL;<br>
# <b><i>database</i></b>, содержащей параметры соединения с базой данных MySQL;<br>
2) <i>branches</i>, содержащей метки о рассмотрении (значение 1) или не рассмотрении (значение 0) соответствующей ветви Sisyphus;<br>
# <b><i>branches</i></b>, содержащей метки о рассмотрении (значение 1) или не рассмотрении (значение 0) соответствующей ветви Sisyphus;<br>
3) <i>paths</i>, в которой указывается путь к корневому каталогу alt-сервера, а также путь к каталогу, в который <i>cve-download</i> загружает входные данные и откуда <i>cve-import</i> их импортирует в БД.<br>
# <b><i>paths</i></b>, в которой указывается путь к корневому каталогу alt-сервера, а также путь к каталогу, в который <i>cve-download</i> загружает входные данные и откуда <i>cve-import</i> их импортирует в БД.<br>
Файл настройки принадлежит пользователю <i>root</i>, относится к группе <i>cve</i> и имеет режим <i>rw-r-----</i>. Таким образом, изменять файл настроек может только пользователь <i>root</i>, а для его чтения следует добавить нужного пользователя в группу <i>cve</i> (без возможности чтения файла настроек <i>cve-manager</i> работать не будет).
Файл настройки принадлежит пользователю <i>root</i>, относится к группе <i>cve</i> и имеет режим <i>rw-r-----</i>. Таким образом, изменять файл настроек может только пользователь <i>root</i>, а для его чтения следует добавить нужного пользователя в группу <i>cve</i> (без возможности чтения файла настроек <i>cve-manager</i> работать не будет).


Строка 26: Строка 31:
<code>cve-manager [-h] [-a] [-t] [-p] [-d]</code>
<code>cve-manager [-h] [-a] [-t] [-p] [-d]</code>
<br>
<br>
<i>-h, --help</i> - Вывод справки;<br>
:<i>-h, --help</i> - Вывод справки;<br>
<i>-a, --auto</i> - Запуск модулей один за другим в автоматическом режиме;<br>
:<i>-a, --auto</i> - Запуск модулей один за другим в автоматическом режиме;<br>
<i>-s MODULE_NAME, --starting_step MODULE_NAME</i> - Запуск работы в автоматическом режиме с указанного шага (название модуля без приставки "cve-")<br>
:<i>-s MODULE_NAME, --starting_step MODULE_NAME</i> - Запуск работы в автоматическом режиме с указанного шага (название модуля без приставки "cve-")<br>
<i>-t, --timer</i> - Задействование таймера, который измеряет интервалы времени исполнения запускаемых модулей;<br>
:<i>-t, --timer</i> - Задействование таймера, который измеряет интервалы времени исполнения запускаемых модулей;<br>
<i>-p, --plain</i> - Упрощенный вывод (следует использовать, например, при записи в файл).<br>
:<i>-p, --plain</i> - Упрощенный вывод (следует использовать, например, при записи в файл).<br>


При запуске без параметра "<i>-a</i>" cve-manager работает в диалоговом режиме - на каждом шаге выводится справочная информация о возможных действиях. На первом шаге следует выбрать нужный для использования в данный момент модуль, при выборе модуля выводится справочная информация данного модуля. При начале работы с нуля следует запускать модули в том порядке, в котором они перечислены в разделе "Структура программы".
При запуске без параметра "<i>-a</i>" cve-manager работает в диалоговом режиме - на каждом шаге выводится справочная информация о возможных действиях. На первом шаге следует выбрать нужный для использования в данный момент модуль, при выборе модуля выводится справочная информация данного модуля. При начале работы с нуля следует запускать модули в том порядке, в котором они перечислены в разделе "Структура программы".
Строка 38: Строка 43:
Для работы cve-manager нет необходимости устанавливать MySQL сервер и создавать БД уязвимостей в своём окружении - в настройках cve-manager может быть указан адрес удалённого сервера. Тем не менее, это можно сделать, выполнив следующие шаги:<br>
Для работы cve-manager нет необходимости устанавливать MySQL сервер и создавать БД уязвимостей в своём окружении - в настройках cve-manager может быть указан адрес удалённого сервера. Тем не менее, это можно сделать, выполнив следующие шаги:<br>
1) Установить MySQL сервер:<br>
1) Установить MySQL сервер:<br>
<code>apt-get install MySQL-server</code>
::<code>apt-get install MySQL-server</code>


2) Внести изменения в файл настройки MySQL сервера <i>/etc/my.cnf.d/server.cnf</i>:<br>
2) Внести изменения в файл настройки MySQL сервера <i>/etc/my.cnf.d/server.cnf</i>:<br>
<code>#skip-networking<br>
::<code>#skip-networking<br>bind-address = 127.0.0.1</code>
bind-address = 127.0.0.1</code>


3) Перезапустить MySQL сервер и запустить MySQL консоль:<br>
3) Перезапустить MySQL сервер и запустить MySQL консоль:<br>
<code>su -l -c 'service mysqld restart'</code><br>
::<code>su -l -c 'service mysqld restart'</code><br>
<code>mysql -u root</code>
::<code>mysql -u root</code>


4) Задать пароль пользователя MySQL с именем <i>root</i>:<br>
4) Задать пароль пользователя MySQL с именем <i>root</i>:<br>
<code><b><i>mysql></i></b> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('root-passwd');</code><br>
::<code><b><i>mysql></i></b> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('root-passwd');</code><br>
, где <i>root-passwd</i> - задаваемый пароль пользователя <i>root</i><br>
::, где <i>root-passwd</i> - задаваемый пароль пользователя <i>root</i>;<br>


5) Добавить пользователя MySQL, от имени которого будет осуществляться работа с БД:<br>
5) Добавить пользователя MySQL, от имени которого будет осуществляться работа с БД:<br>
<code><b><i>mysql></i></b> grant all privileges on *.* to 'user-name'@'localhost' identified by 'user-passwd';</code><br>
::<code><b><i>mysql></i></b> grant all privileges on *.* to 'user-name'@'localhost' identified by 'user-passwd';</code><br>
, где <i>user-name</i> - имя пользователя, <i>user-passwd</i>- пароль пользователя.
::, где <i>user-name</i> - имя пользователя, <i>user-passwd</i>- пароль пользователя;<br>


6) При использовании MySQL-server версии >= 5.7 может возникнуть его несовместимость с C++ и Python MySQL-фреймворками;<br>
6) При использовании MySQL-server версии >= 5.7 может возникнуть его несовместимость с используемыми C++ и Python MySQL-фреймворками;<br>
Для исправления этого следует (например, для совместимости с версией 5.6):<br>
Для исправления этого следует (например, для совместимости с версией 5.6):<br>
6.1) Задать режим обратной совместимости в mysql консоли:<br>
:6.1) Задать режим обратной совместимости в mysql консоли:<br>
<code>mysql -u root -p</code><br>
:::<code>mysql -u root -p</code><br>
<code><b><i>mysql></i></b> set @@global.show_compatibility_56=ON;</code><br>
:::<code><b><i>mysql></i></b> set @@global.show_compatibility_56=ON;</code><br>
6.2) Добавить в файл <i>/etc/my.cnf.d/server.cnf</i> строку:<br>
:6.2) Добавить в файл <i>/etc/my.cnf.d/server.cnf</i> строку:<br>
<code>show_compatibility_56 = 1</code>
:::<code>show_compatibility_56 = 1</code>


== Ссылки ==
== Ссылки ==

Версия от 19:13, 10 сентября 2018

cve-manager - консольная программа, предназначенная для отслеживания уязвимостей программного обеспечения, имеет модульную структуру, написана на Python и C++. Распространяется по лицензии GPLv3.0.

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

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

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

Настройка

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

  1. database, содержащей параметры соединения с базой данных MySQL;
  2. branches, содержащей метки о рассмотрении (значение 1) или не рассмотрении (значение 0) соответствующей ветви Sisyphus;
  3. paths, в которой указывается путь к корневому каталогу alt-сервера, а также путь к каталогу, в который cve-download загружает входные данные и откуда cve-import их импортирует в БД.

Файл настройки принадлежит пользователю root, относится к группе cve и имеет режим rw-r-----. Таким образом, изменять файл настроек может только пользователь root, а для его чтения следует добавить нужного пользователя в группу cve (без возможности чтения файла настроек cve-manager работать не будет).

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

Запуск cve-manager:
cve-manager [-h] [-a] [-t] [-p] [-d]

-h, --help - Вывод справки;
-a, --auto - Запуск модулей один за другим в автоматическом режиме;
-s MODULE_NAME, --starting_step MODULE_NAME - Запуск работы в автоматическом режиме с указанного шага (название модуля без приставки "cve-")
-t, --timer - Задействование таймера, который измеряет интервалы времени исполнения запускаемых модулей;
-p, --plain - Упрощенный вывод (следует использовать, например, при записи в файл).

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

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

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

apt-get install MySQL-server

2) Внести изменения в файл настройки MySQL сервера /etc/my.cnf.d/server.cnf:

#skip-networking
bind-address = 127.0.0.1

3) Перезапустить MySQL сервер и запустить MySQL консоль:

su -l -c 'service mysqld restart'
mysql -u root

4) Задать пароль пользователя MySQL с именем root:

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('root-passwd');
, где root-passwd - задаваемый пароль пользователя root;

5) Добавить пользователя MySQL, от имени которого будет осуществляться работа с БД:

mysql> grant all privileges on *.* to 'user-name'@'localhost' identified by 'user-passwd';
, где user-name - имя пользователя, user-passwd- пароль пользователя;

6) При использовании MySQL-server версии >= 5.7 может возникнуть его несовместимость с используемыми C++ и Python MySQL-фреймворками;
Для исправления этого следует (например, для совместимости с версией 5.6):

6.1) Задать режим обратной совместимости в mysql консоли:
mysql -u root -p
mysql> set @@global.show_compatibility_56=ON;
6.2) Добавить в файл /etc/my.cnf.d/server.cnf строку:
show_compatibility_56 = 1

Ссылки

Проект на git.altlinux.org