Nikto: сканер веб-сервера для своих систем

0
4
Обложка статьи: Nikto: сканер веб-сервера для своих систем

Устаревшая версия веб-сервера и забытый файл .env в корне сайта — из тех находок, которые злоумышленник найдёт за минуты автоматическим сканированием. Nikto делает ту же проверку для вас: простой сканер, который перебирает тысячи известных путей и сверяет версию сервера со списком. Проверка выполняется только на своих серверах или по письменному разрешению владельца.

Статья опирается на логику направления «Тесты на проникновение» из методики зрелости Группы Сбер (источник); это методика для крупных компаний, мы используем её как ориентир и пересказываем своими словами. Проверка выполнена Nikto 2.6.1 против тестового сервера nginx в контейнере, после неё всё удалено.

Что должно получиться

Уровень Что это значит на практике
1. Начальный Публичный веб-сервер периодически проверяется на самые очевидные и известные проблемы, а не остаётся непроверенным между внешними аудитами

Критерии сформулированы нами по мотивам методики, это ориентир, а не оценка соответствия.

Запуск

git clone https://github.com/sullo/nikto.git
cd nikto/program
perl nikto.pl -h http://ваш-домен.ru

Для HTTPS добавьте -ssl, для нестандартного порта — -p 8443. Сканирование занимает от нескольких секунд до пары минут в зависимости от числа проверяемых путей — тестовый запуск ушло около 8000 запросов за 5 секунд.

Результат проверки

На тестовом nginx с версией сервера 1.22.1 и забытым файлом .env в корне сайта Nikto нашёл:

Находка Что значит
.env file found. The .env file may contain credentials Файл с переменными окружения (часто пароли от БД, ключи API) оказался доступен по прямой ссылке — частая ошибка при выкладке через простое копирование файлов
nginx/1.22.1 appears to be outdated (current is at least 1.31.3) Версия сервера видна в заголовке и давно не обновлялась — не само по себе уязвимость, но облегчает подбор эксплойта под известные CVE этой версии
Отсутствующие заголовки (permissions-policy, CSP, referrer-policy, HSTS, X-Content-Type-Options) Тот же набор, что показывают OWASP ZAP и Nuclei — устраняется на уровне конфигурации сервера: заголовки безопасности в nginx

В этом же прогоне Nikto не нашёл файлы index.php.bak и backup.zip, которые я заранее положил в корень для проверки, — сканер ищет по собственному списку известных имён и путей, который не покрывает абсолютно все возможные варианты. Отсутствие находки не означает отсутствие проблемы: для забытых файлов нужна ещё и явная инвентаризация того, что реально лежит в корне сайта, а не только сканер снаружи.

Порядок внедрения

  1. Запускайте по расписанию (еженедельно для публичного периметра) и сравнивайте с прошлым прогоном — новая находка важнее полного списка.
  2. Скрывайте версию сервера в заголовке ответа, даже если само обновление запланировано отдельно — это не защита, но снижает шум для автоматических сканеров злоумышленников.
  3. Проверяйте процесс выкладки, а не только сканируйте результат: файл .env в вебруте — ошибка процесса публикации, которую проще исключить на этапе CI, чем ловить сканером постфактум.
  4. Сочетайте с другими инструментами: OWASP ZAP для логики приложения, testssl.sh для TLS — Nikto закрывает конфигурацию самого веб-сервера.

Диагностика

Симптом Причина и что делать
ERROR: Required module not found: XML::Writer Не хватает Perl-модуля. Установите libxml-writer-perl (на Debian/Ubuntu) и libnet-ssleay-perl для HTTPS
Сканирование отнимает много времени на крупном сайте Ограничьте набор проверок (-Tuning) под конкретную задачу вместо полного прогона каждый раз
Известный забытый файл не найден сканером Имя файла нестандартное и не входит в базу Nikto. Дополните процесс инвентаризацией содержимого вебрута, не полагайтесь только на сканер
Много срабатываний по CGI-директориям на сайте без CGI Это информационные проверки «на всякий случай». Используйте -C all только если реально нужен полный перебор, иначе игнорируйте

Ограничения

Nikto ищет по базе известных сигнатур и путей — он не находит логические уязвимости и не заменяет более глубокий анализ приложения или полноценный пентест. Это быстрая первая проверка, а не финальный вердикт о безопасности сервера.

Где это в модели зрелости

Материал относится к направлению «Тесты на проникновение» (материалы направления, карта зрелости). Начальный уровень требует хотя бы базовой периодической проверки публичного периметра: Nikto даёт быстрый способ найти самые очевидные упущения без привлечения внешнего исполнителя для каждой мелкой проверки.

Как проверить

  1. Сканирование публичного веб-сервера проводится по расписанию, результаты сравниваются с прошлым прогоном.
  2. Версия сервера не видна в заголовке ответа либо обновление запланировано со сроком.
  3. Проверка дополнена инвентаризацией содержимого вебрута, а не ограничена только внешним сканированием.
  4. Проверка применяется только к собственным серверам или по письменному разрешению владельца.

Источники

  • Методика оценки уровня зрелости кибербезопасности компании, Группа Сбер: sberbank.ru.
  • Исходный код и документация Nikto: github.com/sullo/nikto.

Комментарии закрыты.