Найти в Дзене

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 уделяет приоритетное внимание уязвимостям высокой степени, используя установленную систему их ранжирования из своей базы данных.

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

-2
  • 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

-3

Он установил все необходимые зависимости. Далее человек установит 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

-4

Установка и настройка словаря 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

-5

Далее, нужно сделать его доступным в своей системе. Для этого необходимо скопировать его в /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

-6

Теперь нужно извлечь данные об уязвимостях из 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 года по текущий момент. Человек может копировать или загружать данные, представленные в любом году.

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

-7

Установка и настройка словаря 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

-8

Человек скопирует его в /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

-9

Установка и настройка 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

-10

Следует не забыть сделать его доступным глобально, а затем связать его базу данных с /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

-11

Установка и настройка 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

-12

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

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"

-13

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

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

HOME/vulsrepo/server
cd $HOME/vulsrepo/server
./vulsrepo-server

-14

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

http://localhost:5111

-15

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

Шаг 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

-16

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

-17

Systemd (systemctl)

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

sudo cp $HOME/vulsrepo/server/scripts/vulsrepo.service /lib/systemd/system/vulsrepo.service
nano /lib/systemd/system/vulsrepo.service

-18

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

-19

start vulsrepo-server
systemctl start vulsrepo

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

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

http://<server-address>:5111

DigestAuth

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

./vulsrepo-server -h
./vulsrepo-server -m

-20

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

nano vulsrepo-config.toml

-21

Использование 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

-22

Запуск сервера 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

-23

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

[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"]

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

-24

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

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

vuls configtest

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

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

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

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

vuls scan

-25

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

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

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

vuls tui

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

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

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

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

-27

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

-28

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

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

-29

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

-30

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

Шаг 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 root@192.168.29.219 -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"

-31

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

vuls configtest

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

vuls scan

-32

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

-33

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

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

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

ПОДПИСЫВАЙТЕСЬ НА НАШ TELEGRAM КАНАЛ