VULS | Безагентный сканер уязвимостей

Дата: 05.10.2020. Автор: Игорь Б. Категории: Главное по информационной безопасности, Статьи по информационной безопасности
VULS | Безагентный сканер уязвимостей

В этой статье пойдет речь о VULS, безагентном сканере уязвимостей с открытым исходным кодом, написанном на языке GO для систем Linux. Читатели ближе познакомятся с этим инструментом.

Для администратора сервера ежедневное выполнение обновлений программного обеспечения и анализа уязвимостей системы безопасности может стать настоящей проблемой. VULS поможет автоматизировать этот процесс, чтобы избежать постоянного ручного выполнения анализа уязвимостей программного обеспечения, установленного в системе. Инструмент использует несколько баз данных уязвимостей, таких как Metasploit, Exploit DB, NVD (National Vulnerability Database).

Особенности и архитектура VULS

Ключевые особенности:

  • VULS предоставляет возможность автоматизации поиска уязвимостей для Linux;
  • VULS может быть установлен на все дистрибутивы Linux, например: Linux, Ubuntu, Debian, FreeBSD, CentOS, Solaris;
  • VULS имеет возможность сканирования нескольких систем одновременно с помощью протокола SSH и отправки отчетов по Slack или электронной почте;
  • VULS использует три режима сканирования Fast, Fast Root и Deep, которые пользователь может выбрать в зависимости от ситуации или в соответствии с его требованиями;
  • Результаты сканирования можно просмотреть с помощью TUI и GUI (графический интерфейс);
  • При создании отчетов VULS уделяет приоритетное внимание уязвимостям высокой степени, используя установленную систему их ранжирования из своей базы данных.

Архитектура:

VULS | Безагентный сканер уязвимостей
  • Fast Scan: инструмент выполняет сканирование без привилегий root без зависимостей и нагрузки на целевой сервер сканирования;
  • Fast-root Scan: инструмент выполняет сканирование с привилегиями root без зависимостей и нагрузки на целевой сервер сканирования;
  • Deep Scan: инструмент выполняет сканирование с правами root со всеми зависимостями и полной нагрузкой на целевой сервер;

Offline Scan Mode: все типы сканирования в режиме автономной проверки. VULS может проводить сканирование без доступа в Интернет в этом режиме.

Теперь пора узнать о том, как установить и настроить VULS в качестве сканера уязвимостей для дальнейших практических действий.

Условия для установки программы

Чтобы настроить VULS на своей платформе Ubuntu, есть некоторые предварительные условия, необходимые для его установки:

  • Ubuntu 20.04.1 с минимальным объемом оперативной памяти 4 ГБ и 2 процессорами;
  • Доступ SSH с правами Root;
  • Порт межсетевого экрана: 5111;
  • Несколько запущенных серверов (ubuntu 20.04 или любой другой уязвимый сервер), если человек хочет настроить VULS для удаленного сканирования.

Установка и настройка зависимостей

Настала пора начинать процесс установки.

Важно: весь процесс установки займет много времени, так что следует сесть максимально комфортно и запастись едой.

Установка зависимостей

В этом разделе пользователь создаст папку Vuls-data. VULS использует SQLite для хранения своей информации об уязвимостях. Пользователь собирается установить SQLite, Go (язык программирования) и другие необходимые зависимости.

Человек будет хранить все данные, связанные с VULS, в каталоге /usr/share/vuls-data. Чтобы создать его, нужно выполнить действия, как описано ниже.

mkdir /usr/share/vuls-data

Теперь пользователь создал папку vuls-data, где он будет хранить все данные. Это будет его рабочим пространством, прежде чем приступать к установке необходимых зависимостей.

Он собирается установить:

  • SQLite: VULS использует SQLite для хранения информации об уязвимостях;
  • Debian-goodies: это утилита check restart, которая предоставляет человеку информацию о том, какой пакет необходимо перезапустить;
  • GCC: GNU compiler collection — это компиляторная система. GCC — это набор инструментов и стандартный компилятор для Unix и подобных систем;
  • Wget;
  • Make: Make используется для автоматического определения того, какая часть программы должна быть перекомпилирована, а также выдачи команд для ее перекомпиляции;

Пользователь установит все эти зависимости с помощью следующей команды:

apt install sqlite git debian-goodies gcc make wget
VULS | Безагентный сканер уязвимостей

Он установил все необходимые зависимости. Далее человек установит GO с помощью диспетчера пакетов Snap, выполнив следующую команду:

snap install go --classic

Затем ему нужно будет настроить несколько переменных среды для Go, которые определяют его рабочий каталог.

Чтобы предотвратить установку этих переменных каждый раз при входе пользователя в систему необходимо автоматизировать этот процесс путем создания исполняемого файла go-env.sh в разделе /etc/profile.d. Он будет запускать каталог каждый раз, когда пользователи входят в систему. Чтобы автоматизировать этот процесс, следует выполнить следующие команды:

nano /etc/profile.d/go-env.sh

А также ввести:

export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin:/snap/bin

И все же файл go-env.sh не является исполняемым. Его нужно сделать таким, запустив и изменив разрешение этого файла или непосредственно введя следующую команду:

chmod +x /etc/profile.d/go-env.sh

После этого необходимо перезагрузить переменные среды, выполнив следующую команду:

source /etc/profile.d/go-env.sh
VULS | Безагентный сканер уязвимостей

Установка и настройка словаря Go-CVE

Нужно скачать и установить словарь Go-CVE. Он обеспечивает доступ к NVD (национальной базе данных уязвимостей). NVD — это правительственное хранилище уязвимостей кибербезопасности, о которых публично сообщалось; оно содержит идентификаторы уязвимостей (CVE-Common Vulnerabilities and Exposures), сводки и анализ их воздействия на систему в доступном формате. Человек может получить доступ к NVD с помощью пакета Go. Затем ему нужно будет запустить и получить данные об уязвимостях для использования VULS.

Надо установить словарь Go-CVE по пути $GOPATH/src/, клонировав GO-пакеты из GitHub, которые были созданы Kotakanbe. Они будут также скомпилированы.

Стоит начать с создания каталога, в котором будет храниться словарь Go-CVE. Для этого выполняется следующая команда:

mkdir -p $GOPATH/src/github.com/Kotakanbe

Пользователь переходит к нему и сохраняет словарь Go-CVE из GitHub, выполнив следующую команду:

cd $GOPATH/src/github.com/kotakanbe
git clone https://github.com/kotakanbe/go-cve-dictionary.git

А затем следует перейти к сохраненному пакету и запустить установку.

cd go-cve-dictionary
make install
VULS | Безагентный сканер уязвимостей

Далее, нужно сделать его доступным в своей системе. Для этого необходимо скопировать его в /usr/local/bin, выполнив нижеприведенную команду:

cp $GOPATH/bin/go-cve-dictionary /usr/local/bin

Словарь Go-CVE требует каталога вывода данных журнала. Журналы обычно создаются в разделе /var/logs/.

Следует создать такой каталог для него: этот каталог журнала будет доступен всем, кроме текущего пользователя. Выполняется следующая команда:

mkdir /var/log/vuls
chmod 700 /var/log/vuls
VULS | Безагентный сканер уязвимостей

Теперь нужно извлечь данные об уязвимостях из NVD и сохранить их в рабочей области VULS в разделе /usr/share/vuls-data:

for i in `seq 2014 $(date +"%Y")`; do sudo go-cve-dictionary fetchnvd -dbpath /usr/share/vuls-data/cve.sqlite3 -years $i; done

В данном случае пользователь копирует базу данных CVE 2014 года: это позволит ему загрузить данные NVD с 2014 года по текущий момент. Человек может копировать или загружать данные, представленные в любом году.

Важно: этот процесс займет много времени, можно выпить чашечку кофе.

VULS | Безагентный сканер уязвимостей

Установка и настройка словаря Goval

Настала пора скачать и установить словарь Goval. С помощью него человек сможет скопировать OVAL (Open Vulnerability and Assessment Language). Он является языком Open Source, используемым для показания результатов проверок при наличии уязвимостей программного обеспечения в данной системе. Язык также обеспечивает доступ к базе данных OVAL для Ubuntu.

Словарь Goval был создан Kotakanbe, поэтому его стоит установить в ту же папку, которая была создана ранее в разделе $GOPATH/src/github.com/Kotakanbe, а затем скачать его пакет из GitHub, выполнив следующую команду:

cd $GOPATH/src/github.com/kotakanbe
git clone https://github.com/kotakanbe/goval-dictionary.git

После этого пользователь перейдет к скачанному пакету, а затем скомпилирует и установит его с помощью Make, выполнив следующую команду:

cd goval-dictionary
make install
VULS | Безагентный сканер уязвимостей

Человек скопирует его в /usr/local/bin, чтобы сделать его глобально доступным, а затем извлечет данные для Ubuntu 20.x или другой версии системы в соответствии с требованиями. Для этого выполняется следующая команда:

cp $GOPATH/bin/goval-dictionary /usr/local/bin
goval-dictionary fetch-ubuntu -dbpath=/usr/share/vuls-data/oval.sqlite3 20
VULS | Безагентный сканер уязвимостей

Установка и настройка Gost

Нужно скачать и установить Gost. Gost — это багтрекер Debian, который собирает всю информацию о состоянии уязвимостей пакетов, распространяемых вместе с Debian, и предоставляет доступ к своей базе данных.

Нужно установить этот пакет в новую папку, выполнив следующую команду:

mkdir -p $GOPATH/src/github.com/knqyf263

Следует теперь перейти в папку, которую пользователь только что создал. После этого он скопирует пакеты Gost из GitHub, а затем выполнит установку. Используется следующая команда:

cd $GOPATH/src/github.com/knqyf263
sudo git clone https://github.com/knqyf263/gost.git

После всего этого он введет следующие команды:

cd gost
make install
VULS | Безагентный сканер уязвимостей

Следует не забыть сделать его доступным глобально, а затем связать его базу данных с /usr/share/vuls-data, выполнив следующую команду:

cp $GOPATH/bin/gost /usr/local/bin
ln -s $GOPATH/src/github.com/knqyf263/gost/gost.sqlite3  /usr/share/vuls-data/gost.sqlite3

Необходимо также создать каталог файлов журнала для Gost. Он требует доступа к каталогу выходных данных журнала, а затем ограничивает доступ для текущего пользователя. Это происходит с помощью следующей команды:

mkdir /var/log/gost
chmod 700 /var/log/gost

А затем человек извлекает данные багтрекера Debian, выполнив следующую команду:

gost fetch debian
VULS | Безагентный сканер уязвимостей

Установка и настройка VULS

Пользователь уже установил все необходимые зависимости VULS. Теперь он может скачать и установить Vuls. После этого следует настроить сервер VULS reps, что и является графическим интерфейсом программы.

Пользователь создает новый каталог, содержащий путь к репозиторию Vuls, выполнив следующую команду:

mkdir -p $GOPATH/src/github.com/future-architect

Он переходит в созданный каталог, а затем скачивает Vuls с GitHub, выполнив следующую команду:

cd $GOPATH/src/github.com/future-architect
git clone https://github.com/future-architect/vuls.git

Человек открывает папку с пакетами, а затем компилирует ее. Производится установка:

cd vuls
make install
VULS | Безагентный сканер уязвимостей

Также стоит сделать ее доступной глобально.

cp $GOPATH/bin/vuls /usr/local/bin

Пользователь успешно установил VULS в своей системе.

Установка и настройка сервера VULS repo (GUI)

VulsRepoэто удивительный веб-интерфейс OSS для VULS. С помощью VulsRepo человек сможет анализировать результаты сканирования в виде сводной таблицы Excel.

Условия для установки:

Чтобы настроить VULS на своей платформе Ubuntu, есть некоторые предварительные условия, необходимые для установки:

Установка

Чтобы установить сервер Vuls repo на свою платформу Ubuntu, следует выполнить следующие действия:

Шаг 1. Установка.

Человек скачает Vuls repo с GitHub, выполнив следующую команду:

cd $HOME
git clone https://github.com/usiusi360/vulsrepo.git

Шаг 2. Изменить настройки сервера.

Следует выбрать путь в соответствии с вашей средой.

cd $HOME/vulsrepo/server
cp vulsrepo-config.toml.sample vulsrepo-config.toml
nano vulsrepo-config.toml
[Server]
rootPath = "/root/vulsrepo"
resultsPath  = "/usr/share/vuls-data/results"
serverPort  = "5111"
VULS | Безагентный сканер уязвимостей

Шаг 3. Запуск сервера.

Нужно запустить сервер Vuls repo, выполнив приведенную ниже команду в каталоге:

HOME/vulsrepo/server
cd $HOME/vulsrepo/server
./vulsrepo-server
VULS | Безагентный сканер уязвимостей

Пользователь также может проверить, работает ли он или нет, открыв приведенный ниже URL-адрес: нужно убедиться, что порт 5111 открыт на своем сервере. Затем человек сможет получить доступ к серверу через веб-интерфейс по адресу:

http://localhost:5111
VULS | Безагентный сканер уязвимостей

Хорошо!! Как видно, сервер успешно установлен.

Шаг 4.  Постоянно активный сервер.

System (/etc/init.d).

Нужно скопировать файл запуска и изменить переменную в соответствии со средой.

cp $HOME/vulsrepo/server/scripts/vulsrepo.init /etc/init.d/vulsrepo
chmod 755 /etc/init.d/vulsrepo
nano /etc/init.d/vulsrepo
VULS | Безагентный сканер уязвимостей

А затем внести изменения в файл conf в соответствии со средой.

VULS | Безагентный сканер уязвимостей

Systemd (systemctl)

Нужно скопировать файл запуска и изменить переменную в соответствии со средой.

sudo cp $HOME/vulsrepo/server/scripts/vulsrepo.service /lib/systemd/system/vulsrepo.service
nano /lib/systemd/system/vulsrepo.service
VULS | Безагентный сканер уязвимостей

А затем внести изменения в файл conf в соответствии со средой, как показано ниже:

VULS | Безагентный сканер уязвимостей
start vulsrepo-server
systemctl start vulsrepo

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

Получение доступа к браузеру:

http://<server-address>:5111

DigestAuth

Создание файла аутентификации для выполнения дайджест-аутентификации.

./vulsrepo-server -h
./vulsrepo-server -m
VULS | Безагентный сканер уязвимостей

Редактирование vulsrepo-config.toml

nano vulsrepo-config.toml
VULS | Безагентный сканер уязвимостей

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

Пользователь создаст SSL-сертификат, выполнив следующую команду:

openssl genrsa -out key.pem 2048
openssl req -new -x509 -sha256 -key key.pem -out cert.pem -days 3650

Он также отредактирует файл vulsrepo-config.toml, как показано ниже, выполнив следующую команду:

nano vulsrepo-config.toml
blank

Запуск сервера Vuls repo

Следует выполнить перезагрузку сервера, введя следующую команду:

systemctl restart vulsrepo-server

А затем открыть веб-интерфейс, введя учетные данные для входа, созданные в процессе установки, чтобы получить доступ к графическому интерфейсу. Как только пользователь войдет в систему, у него будет готовая панель управления графическим интерфейсом VULS, чтобы расправиться с уязвимостями.

Конфигурация файла TOML

Теперь пришло время создать конфигурационный файл для Vuls. Пользователь вернется обратно в раздел /usr/share/vuls-data:

cd /usr/share/vuls-data

Vuls хранит конфигурацию в файле TOML, который называется config.toml. Выполняется следующая команда:

nano config.toml
blank

И вводится следующая конфигурация:

[cveDict]
type = "sqlite3"
SQLite3Path = "/usr/share/vuls-data/cve.sqlite3"
[ovalDict]
type = "sqlite3"
SQLite3Path = "/usr/share/vuls-data/oval.sqlite3"
[gost]
type = "sqlite3"
SQLite3Path = "/usr/share/vuls-data/gost.sqlite3"
[servers]
[servers.localhost]
host = "localhost"
port = "local"
scanMode = [ "fast" ]
#scanMode = ["fast", "fast-root", "deep", "offline"]

Затем изменения сохраняются, и файл закрывается.

blank

Отлично! Пользователь успешно создал файл config.toml.

Чтобы проверить правильность файла конфигурации, следует выполнить следующую команду:

vuls configtest

Ура!! Пользователь установил и настроил Vuls для сканирования локального сервера на своей платформе Ubuntu.

Запуск локального сканирования

Режим сканирования по умолчанию является достаточно быстрым.

Чтобы запустить сканирование, следует выполнить следующую команду:

vuls scan
blank

Ух ты! Как видно на картинке, инструмент просканировал всю систему и сгенерировал отчет.

Однако этого недостаточно – стоит взглянуть, что там внутри отчета.

Чтобы проверить отчет на TUI (Terminal based user interface), нужно выполнить следующую команду:

vuls tui

Vuls делит сгенерированный отчет на четыре части, как показано ниже:

  • Просканированные хосты: расположенный в левом верхнем углу список хостов, которые были просканированы Vuls;
  • Найденные уязвимости: расположенный справа от списка хостов он показывает уязвимости, которые VULS нашел в установленных пакетах;
  • Информация об уязвимостях: она находится в левой части экрана: там показывается подробная информация об уязвимости, найденной в базе данных;
  • Уязвимые пакеты: расположенный справа от подробной информации этот раздел показывает уязвимые пакеты и их версии.
blank

Стоит посмотреть, как графический интерфейс показывает эти результаты.

Пользователь вернется на панель мониторинга графического интерфейса, а затем отметит и отправит туда сгенерированный отчет, который он хочет просмотреть, как показано ниже.

blank

Волшебство произошло!

blank

Как видно на картинке, он преобразуется в отчет JSON в графическом интерфейсе и содержит подробную информацию. Нажав на CVE ids, пользователь может получить дополнительную информацию об уязвимости.

Кроме того, человек способен отфильтровать этот отчет в соответствии с требованиями.

blank

Нужно сделать его более информативным, применив фильтры, как показано ниже:

blank

Сканирование нескольких удаленных хост-систем

Шаг 1: Включение SSH на локальном хосте.

Vuls не поддерживает аутентификацию по паролю SSH. Поэтому пользователь должен использовать аутентификацию на основе ключа SSH. Нужно создать пару ключей на локальном хосте, а затем скопировать ключ id_rsa.pub для authorized_keys на удаленном хосте.

На localhost:

ssh-keygen -t rsa

Скопировать ключ /.ssh/id_rsa.pub в буфер обмена.

А затем перейти на удаленный хост и выполнить следующую команду:

mkdir ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys

После вставить ключ rsa.pub из буфера обмена в ~/.ssh/authorized_keys, а затем выполнить следующие действия:

chmod 600 ~/.ssh/authorized_keys

Пользователь возвращается на localhost:

Кроме того, ему нужно подтвердить, что ключи хоста цели во время удаленного сканирования были зарегистрированы в known_hosts локального хоста. Далее, пользователю нужно добавить ключ хоста для удаленного хоста в $HOME/.ssh/known_hosts. Таким образом, он войдет на удаленный хост с помощью SSH перед самим сканированием.

ssh [email protected] -i ~/.ssh/id_rsa

Где 192.168.29.219 — это IP-адрес удаленного хоста.

Шаг 2: Настройка (config.toml), как показано ниже.

cd /usr/share/vuls-data
nano config.toml
[servers.ignite]
 host        = "192.168.29.219"
 port        = "22"
 user        = "root"
 keyPath     = "/root/.ssh/id_rsa"
blank

Пользователю следует проверить config.toml и настройки на сервере перед сканированием:

vuls configtest

Человек начнет сканирование удаленного хоста, выполнив следующую команду:

vuls scan
blank

Отлично! Как видно на картинке, пользователь успешно отсканировал свой удаленный хост. Стоит проверить сгенерированный отчет на панели управления графическим интерфейсом.

blank

Применяя больше фильтров, пользователь может глубже исследовать уязвимые пакеты.

Автор переведенной статьи: Vijay.

Важно! Информация исключительно в учебных целях. Пожалуйста, соблюдайте законодательство и не применяйте данную информацию в незаконных целях.

Игорь Б

Об авторе Игорь Б

Автор на портале cisoclub.ru. Добавляйте ваш материал на сайт в разделе "Разместить публикацию".
Читать все записи автора Игорь Б

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *