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, которые я заранее положил в корень для проверки, — сканер ищет по собственному списку известных имён и путей, который не покрывает абсолютно все возможные варианты. Отсутствие находки не означает отсутствие проблемы: для забытых файлов нужна ещё и явная инвентаризация того, что реально лежит в корне сайта, а не только сканер снаружи.
Порядок внедрения
- Запускайте по расписанию (еженедельно для публичного периметра) и сравнивайте с прошлым прогоном — новая находка важнее полного списка.
- Скрывайте версию сервера в заголовке ответа, даже если само обновление запланировано отдельно — это не защита, но снижает шум для автоматических сканеров злоумышленников.
- Проверяйте процесс выкладки, а не только сканируйте результат: файл
.envв вебруте — ошибка процесса публикации, которую проще исключить на этапе CI, чем ловить сканером постфактум. - Сочетайте с другими инструментами: 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 даёт быстрый способ найти самые очевидные упущения без привлечения внешнего исполнителя для каждой мелкой проверки.
Как проверить
- Сканирование публичного веб-сервера проводится по расписанию, результаты сравниваются с прошлым прогоном.
- Версия сервера не видна в заголовке ответа либо обновление запланировано со сроком.
- Проверка дополнена инвентаризацией содержимого вебрута, а не ограничена только внешним сканированием.
- Проверка применяется только к собственным серверам или по письменному разрешению владельца.
Источники
- Методика оценки уровня зрелости кибербезопасности компании, Группа Сбер: sberbank.ru.
- Исходный код и документация Nikto: github.com/sullo/nikto.

















