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