В этой статье пойдет речь о 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 уделяет приоритетное внимание уязвимостям высокой степени, используя установленную систему их ранжирования из своей базы данных.
Архитектура:
- 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
Он установил все необходимые зависимости. Далее человек установит 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
Установка и настройка словаря 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
Далее, нужно сделать его доступным в своей системе. Для этого необходимо скопировать его в /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
Теперь нужно извлечь данные об уязвимостях из 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 года по текущий момент. Человек может копировать или загружать данные, представленные в любом году.
Важно: этот процесс займет много времени, можно выпить чашечку кофе.
Установка и настройка словаря 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
Человек скопирует его в /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
Установка и настройка 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
Следует не забыть сделать его доступным глобально, а затем связать его базу данных с /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 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
Также стоит сделать ее доступной глобально.
cp $GOPATH/bin/vuls /usr/local/bin
Пользователь успешно установил VULS в своей системе.
Установка и настройка сервера VULS repo (GUI)
VulsRepo — это удивительный веб-интерфейс OSS для VULS. С помощью VulsRepo человек сможет анализировать результаты сканирования в виде сводной таблицы Excel.
Условия для установки:
Чтобы настроить VULS на своей платформе Ubuntu, есть некоторые предварительные условия, необходимые для установки:
- Браузер: Google Chrome или Firefox.
Установка
Чтобы установить сервер 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"
Шаг 3. Запуск сервера.
Нужно запустить сервер Vuls repo, выполнив приведенную ниже команду в каталоге:
HOME/vulsrepo/server
cd $HOME/vulsrepo/server
./vulsrepo-server
Пользователь также может проверить, работает ли он или нет, открыв приведенный ниже URL-адрес: нужно убедиться, что порт 5111 открыт на своем сервере. Затем человек сможет получить доступ к серверу через веб-интерфейс по адресу:
http://localhost:5111
Хорошо!! Как видно, сервер успешно установлен.
Шаг 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
А затем внести изменения в файл conf в соответствии со средой.
Systemd (systemctl)
Нужно скопировать файл запуска и изменить переменную в соответствии со средой.
sudo cp $HOME/vulsrepo/server/scripts/vulsrepo.service /lib/systemd/system/vulsrepo.service
nano /lib/systemd/system/vulsrepo.service
А затем внести изменения в файл conf в соответствии со средой, как показано ниже:
start vulsrepo-server
systemctl start vulsrepo
Использование
Получение доступа к браузеру:
http://<server-address>:5111
DigestAuth
Создание файла аутентификации для выполнения дайджест-аутентификации.
./vulsrepo-server -h
./vulsrepo-server -m
Редактирование vulsrepo-config.toml
nano vulsrepo-config.toml
Использование 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
Запуск сервера 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
И вводится следующая конфигурация:
[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"]
Затем изменения сохраняются, и файл закрывается.
Отлично! Пользователь успешно создал файл config.toml.
Чтобы проверить правильность файла конфигурации, следует выполнить следующую команду:
vuls configtest
Ура!! Пользователь установил и настроил Vuls для сканирования локального сервера на своей платформе Ubuntu.
Запуск локального сканирования
Режим сканирования по умолчанию является достаточно быстрым.
Чтобы запустить сканирование, следует выполнить следующую команду:
vuls scan
Ух ты! Как видно на картинке, инструмент просканировал всю систему и сгенерировал отчет.
Однако этого недостаточно – стоит взглянуть, что там внутри отчета.
Чтобы проверить отчет на TUI (Terminal based user interface), нужно выполнить следующую команду:
vuls tui
Vuls делит сгенерированный отчет на четыре части, как показано ниже:
- Просканированные хосты: расположенный в левом верхнем углу список хостов, которые были просканированы Vuls;
- Найденные уязвимости: расположенный справа от списка хостов он показывает уязвимости, которые VULS нашел в установленных пакетах;
- Информация об уязвимостях: она находится в левой части экрана: там показывается подробная информация об уязвимости, найденной в базе данных;
- Уязвимые пакеты: расположенный справа от подробной информации этот раздел показывает уязвимые пакеты и их версии.
Стоит посмотреть, как графический интерфейс показывает эти результаты.
Пользователь вернется на панель мониторинга графического интерфейса, а затем отметит и отправит туда сгенерированный отчет, который он хочет просмотреть, как показано ниже.
Волшебство произошло!
Как видно на картинке, он преобразуется в отчет JSON в графическом интерфейсе и содержит подробную информацию. Нажав на CVE ids, пользователь может получить дополнительную информацию об уязвимости.
Кроме того, человек способен отфильтровать этот отчет в соответствии с требованиями.
Нужно сделать его более информативным, применив фильтры, как показано ниже:
Сканирование нескольких удаленных хост-систем
Шаг 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"
Пользователю следует проверить config.toml и настройки на сервере перед сканированием:
vuls configtest
Человек начнет сканирование удаленного хоста, выполнив следующую команду:
vuls scan
Отлично! Как видно на картинке, пользователь успешно отсканировал свой удаленный хост. Стоит проверить сгенерированный отчет на панели управления графическим интерфейсом.
Применяя больше фильтров, пользователь может глубже исследовать уязвимые пакеты.
Автор переведенной статьи: Vijay.
Важно! Информация исключительно в учебных целях. Пожалуйста, соблюдайте законодательство и не применяйте данную информацию в незаконных целях.