Перед проведением атаки на целевой веб-сайт злоумышленнику необходимо собрать о нем как можно больше информации, а также найти уязвимости. Однако есть способ, который позволит раньше других найти уязвимости и тем самым повысить безопасность веб-сайта. Для этих целей используют специальные типы программ — сканеры уязвимостей. Одним из самых известных и в то же время бесплатных является сканер Nikto.

В статье мы расскажем о базовых функциях сканера и о том, как его можно использовать  в «боевой» среде. Продукт интересен тем, что позиционируется как сканер для поиска уязвимостей на веб-серверах, в то время как большинство аналогов (такие как OWASP ZAP, wapiti, Arachni и другие) предназначены именно для поиска уязвимостей в веб-приложениях.

Nikto – бесплатный (open source) сканер для поиска уязвимостей в веб-серверах. Утилита относиться к классу blackbox сканеров, т. е. сканеров, использующих стратегию сканирования методом черного ящика. Это значит, что заранее неизвестно о внутреннем устройстве программы/сайта (доступ к исходному коду отсутствует) и упор сделан на функциональность. Программа может обнаруживать более 6700 потенциально опасных файлов и уязвимостей. Новые уязвимости добавляются в базу данных программы по мере их возникновения. Помимо поиска уязвимостей, сканер производит поиск на наличие устаревших версий, используемых библиотек и фреймворков. Nikto не позиционируется как стелс сканер (стелс сканеры никогда не устанавливают TCP-соединения до конца, тем самым сканирование происходит скрытно) – при сканировании сайта в логах сайта или в любой другой системе обнаружения вторжений, если она используется, будет отображена информация о том, что сайт подвергается сканированию.

Первая версия Nikto под номером 1.00 была создана в 2001 году Американским инженером по информационной безопасности Крисом Сулло. На текущий момент последней актуальной версией является версия 2.1.6.

Среди функций Nikto можно выделить следующие:

  • поддержка SSL,

  • поддержка HTTP прокси;

  • создание отчетов в текстовом формате, XML, HTML, NBE или CSV;

  • возможность сканирования портов;

  • поиск поддоменов;

  • поддержка плагинов для расширения функционала сканирования.

Установка

Как и многие другие сканеры, Nikto является кроссплатформенным ПО и может быть установлен на Windows, Linux и macOS. Также запуск возможен в контейнере Docker. Для установки и запуска программы, на всех поддерживаемых ОС, требуется заранее предустановленный интерпретатор языка программирования Perl (для Windows можно использовать Strawberry Perl). В этой статье Nikto будет запускаться на ОС Kali Linux.

Перед установкой Nikto на ОС macOS и Windows необходимо проверить наличие Perl:

perl -v

Далее установим Nikto. Для установки в системах, основанных на deb (Ubuntu, Debian, Linux Mint), достаточно выполнить команду:

sudo apt -y install nikto

В дистрибутиве Kali Linux Nikto уже предустановлен в системе (при условии, что на этапе установки ОС в разделе Software selection был выбран пункт default recommended tools или large default selection plus additional tools, в противном случае установить Nikto необходимо вручную).

В дистрибутивах, основанных на rpm (Red Hat Enterprise Linux, CentOS/Fedora, Mandriva Linux), необходимо выполнить команду:

sudo yum -y install nikto (при использовании пакетного менеджера yum),

sudo dnf -y install nikto (при использовании пакетного менеджера dnf),

Для проверки корректной установки в терминале введем:

nikto

Если в выводе команды отобразилась версия программы и ее параметры, значит, установка произведена корректно.

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

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

nikto -h доменное_имя или IP_адрес

Параметр -h обязателен к использованию, иначе программа не сможет запустить сканирование. В качестве первого сканирования возьмем сайт одной из Московских школ — school1366.ru и запустим сканирование:

nikto -h school1366.ru

В начале сканирования всегда отображается следующий блок с информацией:

Target IP: IP адрес сканируемого домена.

Target Hostname: имя хоста (доменное имя) сканируемого сайта;

Target Port: порт, на котором находится сайт;

Start Time: дата и время начала сканирования в формате год-месяц-день час:минута:секунда.

Вывод результатов сканирования имеет несколько форматов:

Формат: Тип компонента сайта: Наименование компонента.

Пример: Server: nginx.

Описание: Nikto умеет определять, какие компоненты использует сайт. Сюда относят наименование веб-сервера, используемой СУБД, фреймворков, языков программирования, а также их версии.

Формат: путь до файла/директории, где найдена уязвимость: описание уязвимости.

Пример: /phpinfo.php: Output from the phpinfo() function was found.

Описание: Один из самых распространенных форматов вывода в Nikto. Отображает полный путь до файла или директории, в которой найдена потенциальная уязвимость. Например, описание /phpinfo.php: Output from the phpinfo() function was found. говорит о том что на сервере найдена страница phpinfo, в которой содержится информация о текущей конфигурации PHP. Переходим по пути /phpinfo.php и проверяем:

Формат: OSVDB-<номер_уязвимости>: путь до файла/директории, где найдена уязвимость: описание уязвимости.

Пример: OSVDB-3268: /images/: Directory indexing found.

Описание: OSVDB (англ. Open Source Vulnerability Database — Открытая база уязвимостей) — это уязвимости, которые хранились на сайте Open Source Vulnerability Database. К сожалению, сайт закрылся в 2016 году. На текущий момент единственный способ просмотреть подробную информацию о найденной уязвимости в формате OSVDB — это использовать сайт cve.mitre.org, сопоставив номер OSVDB к номеру CVE.

В примере выше в описании указано, что найдена уязвимость Directory listing по пути /images. Перейдем по предложенному пути и убедимся, что листинг действительно открыт:

Как было упомянуто ранее, помимо доменного имени, можно использовать IP-адрес:

nikto -h 31.31.198.199

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

nikto -h school1366.ru -p 22,25,2096,3306

Если на сайте используется протокол HTTPS, то можно задать параметр -ssl для отображения подробной информации связанной с HTTPS:

nikto -h freecodecamp.org -ssl

В частности, появится информация об используемом HTTPS сертификате (SSL INFO), а также параметры, связанные с HTTPS.

Просканируем еще один сайт, который использует WordPress в качестве системы управления. Это удалось узнать благодаря строке A Wordpress installation was found:

Для создания отчетов необходимо использовать параметры -output и -Format. Для того чтобы записать результаты в файл results.txt и сохранить их в текстовом формате, необходимо выполнить:

nikto -h school1366.ru -output results.txt -Format text

Параметр -Format поддерживает следующие форматы файлов для сохранения отчетов:

  • CSV

  • HTML

  • XML

  • NBE

  • JSON

  • SQL

Во время сканирования в выводе команды может отобразиться ошибка Error limit (20) reached for host, giving up. Last error: error reading HTTP response:

Бывают случаи, когда сайт неожиданно перестал отвечать на запросы или просто недоступен. В таком случае перед тем, как прервать сканирование, nikto предпримет 20 попыток (значение по умолчанию), чтобы установить связь с сайтом. После этого сканирование завершится. В качестве решения проблемы необходимо увеличить количество отправляемых запросов или вовсе отключить данный параметр. Для этого откроем конфигурационный файл nikto.conf.default при помощи любого текстового редактора:

sudo nano /var/lib/nikto/nikto.conf.default

И в самом конце файла найдем параметр FAILURES:

Его необходимо выключить:

FAILURES=0

Или изменить:

FAILURES=10000

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

Использование nikto с планировщиком cron

В организации где я работал была поставлена цель — найти инструмент который искал бы уязвимости в веб-серверах. Поскольку утилит которые ориентированы именно  на сканирование веб-серверов а не на сами веб приложения, не так много (особенно это касается бесплатных open source утилит) то был выбран популярный сканер nikto который присутствует на рынке с 2015 года. Одним из важных критериев выбора nikto — это наличие обширной базы данных уязвимостей. 

Чтобы не запускать nikto вручную, можно добавить его в cron для того, чтобы запуск осуществлялся в автоматическом режиме. Предположим, что у нас есть некий список, состоящий из 4 сайтов (сами сайты перечислены в отдельном текстовом файле), которые необходимо сканировать каждый месяц в промежутке с 7 числа по 25. Сканирование необходимо начинать в 20:00 часов. Для этого откроем главный файл cron при помощи команды:

crontab -e

И в самом низу пропишем следующую строку:

00 20 7-25 * * nikto -h sites.txt -output /home/alex/report.html

Где sites.txt — файл, в котором уже присутствуют нужные сайты.

По завершению сканирования будет сформирован отчет в формате html с именем report.html и сохранен в домашнюю директорию пользователя alex.

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


НЛО прилетело и оставило здесь промокод для читателей нашего блога:
— 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS

Комментарии (0)