GVM (Greenbone Vulnerability Management) – это решение с открытым исходным кодом для сканирования уязвимостей.
GVM ранее назывался OpenVAS.
Greenbone Vulnerability Manager и OpenVAS широко используются по всему миру, включая экспертов по безопасности и обычных пользователей.
В этой статье мы покажем, как установить и настроить GVM в Ubuntu 20.04, чтобы убедиться, что ваши серверы защищены от атак.
Базовая система
Мы настроим Greenbone Vulnerability Manager 20.08 с базовой установкой системных пакетов на Ubuntu 20.04.
Установим необходимые компоненты
Сначала установите следующие пакеты зависимостей.
sudo su -
apt update &&\
apt -y dist-upgrade &&\
apt -y autoremove &&\
apt install -y software-properties-common &&\
apt install -y build-essential cmake pkg-config libglib2.0-dev libgpgme-dev libgnutls28-dev uuid-dev libssh-gcrypt-dev libldap2-dev doxygen graphviz libradcli-dev libhiredis-dev libpcap-dev bison libksba-dev libsnmp-dev gcc-mingw-w64 heimdal-dev libpopt-dev xmltoman redis-server xsltproc libical-dev postgresql postgresql-contrib postgresql-server-dev-all gnutls-bin nmap rpm nsis curl wget fakeroot gnupg sshpass socat snmp smbclient libmicrohttpd-dev libxml2-dev python3-polib gettext rsync xml-twig-tools python3-paramiko python3-lxml python3-defusedxml python3-pip python3-psutil python3-impacket virtualenv vim git &&\
apt install -y texlive-latex-extra --no-install-recommends &&\
apt install -y texlive-fonts-recommended &&\
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - &&\
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list &&\
apt update &&\
apt -y install yarn &&\
yarn install &&\
yarn upgrade
Создадим пользователя GVM
Вставьте следующие команды в терминал, чтобы создать пользователя gvm, который будет использоваться в процессе установки и компиляции:
echo 'export PATH="$PATH:/opt/gvm/bin:/opt/gvm/sbin:/opt/gvm/.local/bin"' | tee -a /etc/profile.d/gvm.sh &&\
chmod 0755 /etc/profile.d/gvm.sh &&\
source /etc/profile.d/gvm.sh &&\
bash -c 'cat < /etc/ld.so.conf.d/gvm.conf
# gmv libs location
/opt/gvm/lib
EOF'
mkdir /opt/gvm &&\
adduser gvm --disabled-password --home /opt/gvm/ --no-create-home --gecos '' &&\
usermod -aG redis gvm &&\
chown gvm:gvm /opt/gvm/
Теперь войдите от пользователя gvm.
sudo su - gvm
Скачаем и установим программное обеспечение (GVM)
mkdir src &&\
cd src &&\
export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig:$PKG_CONFIG_PATH
git clone -b gvm-libs-20.08 --single-branch https://github.com/greenbone/gvm-libs.git &&\
git clone -b openvas-20.08 --single-branch https://github.com/greenbone/openvas.git &&\
git clone -b gvmd-20.08 --single-branch https://github.com/greenbone/gvmd.git &&\
git clone -b master --single-branch https://github.com/greenbone/openvas-smb.git &&\
git clone -b gsa-20.08 --single-branch https://github.com/greenbone/gsa.git &&\
git clone -b ospd-openvas-20.08 --single-branch https://github.com/greenbone/ospd-openvas.git &&\
git clone -b ospd-20.08 --single-branch https://github.com/greenbone/ospd.git
Установим gvm-libs (GVM)
На этом шаге мы скомпилируем gvm-lib из github:
cd gvm-libs &&\
export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig:$PKG_CONFIG_PATH &&\
mkdir build &&\
cd build &&\
cmake -DCMAKE_INSTALL_PREFIX=/opt/gvm .. &&\
make &&\
make doc &&\
make install &&\
cd /opt/gvm/src
Установим openvas-smb (GVM)
Теперь войдите в каталог openvas-smb и скомпилируйте исходный код:
cd openvas-smb &&\
export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig:$PKG_CONFIG_PATH &&\
mkdir build &&\
cd build/ &&\
cmake -DCMAKE_INSTALL_PREFIX=/opt/gvm .. &&\
make &&\
make install &&\
cd /opt/gvm/src
Установим сканер (GVM)
Как и в предыдущих шагах, мы создадим и установим сканер openvas:
cd openvas &&\
export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig:$PKG_CONFIG_PATH &&\
mkdir build &&\
cd build/ &&\
cmake -DCMAKE_INSTALL_PREFIX=/opt/gvm .. &&\
make &&\
make doc &&\
make install &&\
cd /opt/gvm/src
Настроим redis для установки OpenVAS (root)
Теперь мы должны выйти из текущего сеанса, чтобы вернуться к привилегированному пользователю, набрав «exit» в терминале.
Теперь вставьте в терминал следующий код:
export LC_ALL="C" &&\
ldconfig &&\
cp /etc/redis/redis.conf /etc/redis/redis.orig &&\
cp /opt/gvm/src/openvas/config/redis-openvas.conf /etc/redis/ &&\
chown redis:redis /etc/redis/redis-openvas.conf &&\
echo "db_address = /run/redis-openvas/redis.sock" > /opt/gvm/etc/openvas/openvas.conf &&\
systemctl enable redis-server@openvas.service &&\
systemctl start redis-server@openvas.service
sysctl -w net.core.somaxconn=1024 &&\
sysctl vm.overcommit_memory=1 &&\
echo "net.core.somaxconn=1024" >> /etc/sysctl.conf &&\
echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
cat << /etc/systemd/system/disable-thp.service
[Unit]
Description=Disable Transparent Huge Pages (THP)
[Service]
Type=simple
ExecStart=/bin/sh -c "echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled && echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag"
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload &&\
systemctl start disable-thp &&\
systemctl enable disable-thp &&\
systemctl restart redis-server
Добавьте путь /opt/gvm/sbin к переменной secure_path:
sed 's/Defaults\s.*secure_path=\"\/usr\/local\/sbin:\/usr\/local\/bin:\/usr\/sbin:\/usr\/bin:\/sbin:\/bin:\/snap\/bin\"/Defaults secure_path=\"\/usr\/local\/sbin:\/usr\/local\/bin:\/usr\/sbin:\/usr\/bin:\/sbin:\/bin:\/snap\/bin:\/opt\/gvm\/sbin\"/g' /etc/sudoers | EDITOR='tee' visudo
Добавим прав:
echo "gvm ALL = NOPASSWD: /opt/gvm/sbin/openvas" > /etc/sudoers.d/gvm
echo "gvm ALL = NOPASSWD: /opt/gvm/sbin/gsad" >> /etc/sudoers.d/gvm
Обновим NVT (GVM)
Теперь мы запустим greenbone-nvt-sync, чтобы обновить базу уязвимостей.
Сначала вернитесь к сеансу пользователя GVM:
sudo su – gvm
и запустите:
greenbone-nvt-sync
Если вы получаете ошибки тайм-аута, скорее всего, на пути есть брандмауэр.
Обязательно откройте TCP-порт 873.
Если вы получаете сообщение об отказе в соединении, подождите некоторое время и повторите попытку.
Это занимает очень много времени, поэтому вам придется набраться терпения.
Загрузим плагины в Redis с OpenVAS (GVM)
Это может занять некоторое время в зависимости от вашего оборудования и не дает обратной связи при запуске команды.
sudo openvas -u
Примечание. Если вы получаете сообщения об ошибках в библиотеке, введите следующее (по одной строке за раз):
exit
echo "/opt/gvm/lib > /etc/ld.so.conf.d/gvm.conf
ldconfig
sudo su - gvm
Менеджер установки (GVM)
Теперь войдите в каталог gvmd, чтобы собрать и установить Greenbone Manager:
cd /opt/gvm/src/gvmd &&\
export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig:$PKG_CONFIG_PATH &&\
mkdir build &&\
cd build/ &&\
cmake -DCMAKE_INSTALL_PREFIX=/opt/gvm .. &&\
make &&\
make doc &&\
make install &&\
cd /opt/gvm/src
Настроим PostgreSQL (пользователь Sudoers)
Переключитесь на пользователя в sudoers (не используйте для этого root или gvm).
Пользовательский сеанс будет переключен с помощью приведенной ниже команды “sudo -u postgres bash”.
Выполняйте по одной строке за раз.
exit
cd /
sudo -u postgres bash
export LC_ALL="C"
createuser -DRS gvm
createdb -O gvm gvmd
psql gvmd
create role dba with superuser noinherit;
grant dba to gvm;
create extension "uuid-ossp";
create extension "pgcrypto";
exit
exit
Настроим сертификаты (GVM)
Введите по одной строке за раз:
sudo su - gvm
gvm-manage-certs -a
Создадим пользователя-администратора (GVM)
Не забудьте сменить пароль:
gvmd --create-user=admin --password=admin
Настройка и обновление фидов (GVM)
Чтобы фиды обновлялись полностью, нам нужно установить «Feed Import Owner» на UUID администратора.
Сначала найдите UUID нового пользователя-администратора
gvmd --get-users --verbose
У вас должно получиться что-то вроде этого:
admin fb019c52-75ec-4cb6-b176-5a55a9b360bf
Далее введите:
gvmd --modify-setting 78eceaec-3385-11ea-b237-28d24461215b --value (output string from the above command fb019c52-75ec-4cb6-b176-5a55a9b360bf)
Таким образом, пример команды будет такой:
$ gvmd --get-users --verbose
admin fb019c52-75ec-4cb6-b176-5a55a9b360bf
$ gvmd --modify-setting 78eceaec-3385-11ea-b237-28d24461215b --value fb019c52-75ec-4cb6-b176-5a55a9b360bf
Следующие три команды выполняйте по очереди.
Если вы получаете сообщение об отказе в соединении, попробуйте выполнить команду еще раз, пока она не будет успешной
. Эти команды также займут некоторое время.
greenbone-feed-sync --type GVMD_DATA
greenbone-feed-sync --type SCAP
greenbone-feed-sync --type CERT
Установим gsa (GVM)
Как и в предыдущих шагах, войдите в папку gsa и скомпилируйте исходный код gsa:
cd /opt/gvm/src/gsa &&\
export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig:$PKG_CONFIG_PATH &&\
mkdir build &&\
cd build/ &&\
cmake -DCMAKE_INSTALL_PREFIX=/opt/gvm .. &&\
make &&\
make doc &&\
make install &&\
touch /opt/gvm/var/log/gvm/gsad.log &&\
cd /opt/gvm/src
Настроим OSPD-OpenVAS
Установим virtualenv (GVM)
Примечание. Возможно, вам придется изменить –python python3.8 в соответствии с установленной версией python.
cd /opt/gvm/src &&\
export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig:$PKG_CONFIG_PATH &&\
virtualenv --python python3.8 /opt/gvm/bin/ospd-scanner/ &&\
source /opt/gvm/bin/ospd-scanner/bin/activate
Установим ospd (GVM)
Мы установим ospd с помощью установщика pip:
mkdir /opt/gvm/var/run/ospd/ &&\
cd ospd &&\
pip3 install . &&\
cd /opt/gvm/src
Установим ospd-openvas (GVM)
Снова для ospd-openvas мы будем использовать установщик pip с пакетом, который мы клонировали из github:
cd ospd-openvas &&\
pip3 install . &&\
cd /opt/gvm/src
Создадим скрипт запуска (root)
Сначала введите exit, чтобы выйти в сеанс рута, затем вставьте следующее в терминал:
cat << EOF > /etc/systemd/system/gvmd.service
[Unit]
Description=Open Vulnerability Assessment System Manager Daemon
Documentation=man:gvmd(8) https://www.greenbone.net
Wants=postgresql.service ospd-openvas.service
After=postgresql.service ospd-openvas.service
[Service]
Type=forking
User=gvm
Group=gvm
PIDFile=/opt/gvm/var/run/gvmd.pid
WorkingDirectory=/opt/gvm
ExecStart=/opt/gvm/sbin/gvmd --osp-vt-update=/opt/gvm/var/run/ospd.sock
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
Restart=on-failure
RestartSec=2min
KillMode=process
KillSignal=SIGINT
GuessMainPID=no
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
cat << EOF > /etc/systemd/system/gsad.service
[Unit]
Description=Greenbone Security Assistant (gsad)
Documentation=man:gsad(8) https://www.greenbone.net
After=network.target
Wants=gvmd.service
[Service]
Type=forking
PIDFile=/opt/gvm/var/run/gsad.pid
WorkingDirectory=/opt/gvm
ExecStart=/opt/gvm/sbin/gsad --drop-privileges=gvm
Restart=on-failure
RestartSec=2min
KillMode=process
KillSignal=SIGINT
GuessMainPID=no
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
cat << EOF > /etc/systemd/system/ospd-openvas.service
[Unit]
Description=Job that runs the ospd-openvas daemon
Documentation=man:gvm
After=network.target redis-server@openvas.service
Wants=redis-server@openvas.service
[Service]
Environment=PATH=/opt/gvm/bin/ospd-scanner/bin:/opt/gvm/bin:/opt/gvm/sbin:/opt/gvm/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Type=forking
User=gvm
Group=gvm
WorkingDirectory=/opt/gvm
PIDFile=/opt/gvm/var/run/ospd-openvas.pid
ExecStart=/opt/gvm/bin/ospd-scanner/bin/python /opt/gvm/bin/ospd-scanner/bin/ospd-openvas --pid-file /opt/gvm/var/run/ospd-openvas.pid --unix-socket=/opt/gvm/var/run/ospd.sock --log-file /opt/gvm/var/log/gvm/ospd-scanner.log --lock-file-dir /opt/gvm/var/run/ospd/
Restart=on-failure
RestartSec=2min
KillMode=process
KillSignal=SIGINT
GuessMainPID=no
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
Включим и запустим службы (root)
Теперь мы включим и запустим службы GVM, также от пользователя root:
systemctl daemon-reload &&\
systemctl enable gvmd &&\
systemctl enable gsad &&\
systemctl enable ospd-openvas &&\
systemctl start gvmd &&\
systemctl start gsad &&\
systemctl start ospd-openvas
Проверим сервисы (root)
Убедитесь, что все три службы работают (набирайте по одной строке за раз).
systemctl status gvmd
systemctl status gsad
systemctl status ospd-openvas
Изменим сканер по умолчанию (GVM)
Вернитесь к сеансу GVM.
sudo su - gvm
Сначала получите UUID сканера, у которого есть сокет (ospd.sock)
gvmd --get-scanners
Затем доработайте сканер:
gvmd --modify-scanner=(INSERT SCANNER UUID HERE) --scanner-host=/opt/gvm/var/run/ospd.sock
Пример:
gvmd --get-scanners
08b69003-5fc2-4037-a479-93b440211c73 OpenVAS /var/run/ospd/ospd.sock 0 OpenVAS Default
6acd0832-df90-11e4-b9d5-28d24461215b CVE 0 CVE
gvmd --modify-scanner=08b69003-5fc2-4037-a479-93b440211c73 --scanner-host=/opt/gvm/var/run/ospd.sock
Scanner modified.
Вот и все. Теперь вы можете войти в веб-интерфейс GVM.
Заключение
Мы успешно завершили установку GVM на Ubuntu 20.04.
Теперь вы можете войти в систему, используя IP-адрес вашего сервера.
Логин по умолчанию – admin / admin, как указано выше.
Дайте нам знать, что вы думаете о руководстве, в комментариях ниже.