Web- и CGI-сканер Nikto

Максим Афанасьев

Принцип и возможности сканера

Параметры запуска

 

В прошлом году в спецвыпуске, посвященном сетевой безопасности, был рассмотрен сетевой сканер nmap, позволяющий определить наличие открытых портов на компьютере и работу тех или иных сервисов на сервере. Однако зачастую необходимо протестировать определенный сервис на наличие уязвимостей. Одним из узкоспециализированных сканеров является сканер веб-серверов Nikto, ориентированный на определение программного обеспечения web-сервера, наличие дополнительных модулей и типовых скриптов, в которых уязвимости уже известны. Такой инструмент поможет системному администратору вовремя устранить возможные уязвимости и защититься от атак хакеров. Безусловно, этот сканер можно использовать и для предварительной проверки web-сервера перед нападением, поскольку подобные инструменты зачастую применяются как для взлома, так и для защиты.

Сканер Nikto — программа с открытым исходным кодом (Open Source), распространяемая бесплатно по лицензии GPL. Web-сканер Nikto представляет собой скрипт, написанный на языке Perl, который является управляющим. Кроме основного исполняемого файла, в Nikto входит набор дополнительных плагинов, модулей и, что самое главное, баз данных с тестами. Базы данных, так же как и другие компоненты программы, постоянно обновляются. Официальная страница Nikto расположена в Интернете по адресу: http://www.cirt.net/code/nikto.shtml. На этом сайте можно найти сам сканер, набор дополнительных плагинов, которые не включены в конечную сборку программы, а также необходимые обновления и документацию по работе.

Принцип и возможности сканера

Nikto — утилита для обнаружения файлов, которые копируются при установке сервера в папки по умолчанию. Помимо этого она тестирует web- и CGI-серверы на предмет безопасного использования. Во время работы сканер осуществляет многочисленные запросы на удаленный сервер, что в некоторых случаях может вызвать его падение, поскольку такой же принцип применяется в DoS-атаках. Необходимо отметить, что применение данного программного обеспечения для тестирования сервера без предварительного согласования с его владельцем может быть чревато для тестера серьезными неприятностями. В конце концов УК РФ (да и любой другой страны) еще никто не отменял.

Сканер Nikto предназначен для изучения web-серверов на предмет наличия:

  • неправильных конфигурационных файлов;
  • файлов и сценариев, которые остаются после установки сервера;
  • опасных файлов и исполняемых сценариев;
  • устаревшего программного обеспечения.

Для работы c HTTP- и HTTPS-серверами сканер Nikto использует библиотеку LibWhisker (автор — Rain Forest Puppy’s, его персональный сайт — http://wiretrip.net). Она позволяет Nikto проверять серверы, применяя HTTP- и HTTPS-протоколы. Благодаря этой библиотеке осуществляется также сканирование портов. Даже если заранее не известно, какой из портов web-сервера открыт, с ее помощью это можно без труда определить. В последних версиях сканера Nikto добавлена возможность работы совместно со сканером портов nmap. Используя результат работы nmap, сканер Nikto также позволяет определить наличие доступности web-сервера и порт, на котором работает web-сервис. Работа совместно со сканером nmap значительно увеличивает время работы скрипта, однако позволяет более корректно определить наличие web-сервисов, а также обходить некоторые типы защиты.

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

При запуске Nikto наряду со своими базами данных загружает файлы баз данных текущего пользователя. Базы данных пользователя должны находиться в директории plugins, в файле с именем user_scan_database.db. В отличие от основной базы данных тестов (файлы, которые начинаются с символов db_), база данных пользователя не будет уничтожена при загрузке обновлений с опцией -update. Если базы данных, применяемые пользователем, полезны, ими можно поделиться с разработчиками, отправив их по электронной почте на адрес: sullo@cirt.net.

Было бы слишком смело утверждать, что Nikto не оставляет никаких следов при сканировании сервера. Конечно же, он их оставляет, хотя и косвенно: эти следы находятся в логах, которые пишутся автоматически при ошибочных соединениях (например, при вызове несуществующей страницы выдается ошибка 404), а также их можно посмотреть в заголовке User-Agent. Однако значение последнего — $NIKTO{fingerprint} и $NIKTO{useragent} — может быть принудительно изменено на новое в исходном коде. Другой вариант — применение специализированной опции -еvasion, которая позволяет осуществлять технику IDS-уклонений на основе различных алгоритмов. Заметьте, можно без труда выявить деятельность Nikto, когда в логах красивыми рядами стоит большое количество неправильных запросов. Однако, используя технику IDS-уклонений, нельзя со стопроцентной уверенностью определить, что это результат работы именно Nikto. Далеко не все администраторы смотрят лог-файлы каждый день, а ведь при применении Nikto узнать о том, какие ошибки содержит сервер, не составит труда. Поэтому рекомендуется использовать сервис logwatch, который в определенное время автоматически отсылает на почту администратора краткий ликбез основных лог-файлов системы, в частности HTTP-сервера (Apache). Таким образом, можно без труда определить сканирование сервера с помощью данного web-сканера и блокировать хосты, с которых идет атака, поскольку ничего хорошего это не предвещает.

После того как дистрибутив Nikto скачан с сайта, его необходимо разархивировать. Запускать web-сканер можно из-под простого пользователя, так как он не требует привилегий суперпользователя root, что очень удобно и повышает безопасность системы в целом. В корневой директории, где и располагается исполняемый скрипт сканера (nikto.pl), находится конфигурационный файл config.txt. В нем можно указать некоторые специфические настройки, такие как путь к сканеру nmap, настройки прокси-сервера, если необходимо работать через него, настройки обновлений и IP-адрес, с которого Nikto будет скачивать обновления. Также в этом файле можно принудительно указать те порты (или диапазон портов), которые не подлежат сканированию во избежание обнаружения работы сканера. Все остальные параметры задаются через командную строку. Нельзя не отметить тот факт, что, поскольку сканер написан на языке Perl, редактирование основного файла не составит труда для подкованного программиста и изменение необходимых параметров займет совсем немного времени. Полный список дополнительных параметров для запуска с их краткими объяснениями можно получить, запустив из командной строки:

./nikto.pl –Help

Параметры запуска

Прежде всего следует обратить внимание на синтаксис параметров. Все они регистрозависимые — при наборе необходимо учитывать прописные и строчные буквы.

 

Параметр -config

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

 

Параметр -Cgidirs

Опция позволяет явно указать точную директорию на web-сервере, где находятся скрипты cgi. Она также может принимать значение all, которое указывает сканеру на работу со всеми известными директориями cgi. Значение none полностью отключает сканирование cgi-директории.

 

Параметр -Display

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

1 — выводит на экран перенаправления с сервера, если таковые выявлены в процессе сканирования;

2 — показывает содержимое файлов cookies, которые сервер отправляет клиенту;

3 — выводит все успешные запросы (у которых статус 200/OK);

4 — показывает все страницы (URL), которые требуют аутентификации;

D — выводит debug-информацию (что необходимо при отладке);

V — работает в режиме verbose, то есть в режиме показа всей дополнительной информации.

 

Параметр -dbcheck

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

 

Параметр -evasion

Как описывалось ранее, этот параметр отвечает за использование техники уклонений IDS (Intrusion Detection System). Успешное применение методов сокрытия основано на том предположении, что стеки протоколов, реализованные в IDS и в атакуемой (целевой) системе, различаются. Передаваемая по сети информация может быть по-разному обработана IDS и целевой системой. Из-за различий в стеках протоколов возможно создание последовательности пакетов, которая будет принята IDS, но отвергнута целевой системой. В таком случае IDS не знает, что целевая система не приняла пакет, и атакующий может воспользоваться этим для сокрытия факта проведения атаки, посылая специально созданные пакеты. Создавая ситуацию, когда целевая система отбрасывает пакеты, а система обнаружения атак их принимает, нарушитель как бы вставляет данные в анализатор событий IDS. Всего сканер Nikto поддерживает до восьми различных способов уклонений, но одновременно может использоваться только один из них. Перечислим данные тактики:

  • Random URI encoding (non-UTF8);
  • Directory self-reference (/./);
  • Premature URL ending;
  • Prepend long random string;
  • Fake parameter;
  • TAB as request spacer;
  • Change the case of the URL;
  • Use Windows directory separator (\).

Следует отметить, что применение IDS-уклонений в большинстве случаев не скроет полностью работу сканера, однако позволит значительно уменьшить вероятность его обнаружения.

 

Параметр -findonly

Данный параметр указывает сканеру на неполное сканирование исследуемого сервера — лишь на обнаружение открытых HTTP/HTTPS-портов.

 

Параметр -Format

Настоящий параметр позволяет задать метод вывода результатов сканирования в файл. Он может принимать значения txt, htm, csv и xml. Из их названий видно, за какой формат они отвечают. Соответственно эта опция работает лишь с параметром -o (-output).

 

Параметр -host

Данным параметром задается имя исследуемого компьютера или его IP-адрес. В случае если параметр -nolookup указан, необходимо задавать IP-адрес, а не DNS-имя компьютера.

 

Параметр -id

Опция -id позволяет задать имя пользователя и пароль для входа на web-сервер, который требует предварительной авторизации. Пример работы этой команды следующий:

./nikto.pl –id login:password –host testserver, где login — имя пользователя; password — пароль; testserver — название исследуемого компьютера.

 

Параметр -mutate

Задание этого параметра позволяет более подробно поработать в процессе сканирования с директориями и названиями файлов на сервере.

 

Параметр -output

Данный параметр задает название файла, в который будет записан результат сканирования сервера. Название файла может быть любым, но если в дальнейшем указывается дополнительный параметр –Format, то расширение файла будет добавлено автоматически.

 

Параметр -port

Настоящая опция позволяет вручную указать порт, который использует исследуемый web-сервер. По умолчанию этот параметр имеет значение 80. Однако если сканер обнаружил и другие открытые стандартные порты, то он будет их применять в процессе сканирования.

 

Параметр -Pause

С помощью этой опции можно явно задать время в секундах между запросами. По умолчанию оно составляет не более секунды. Увеличение данного параметра даст возможность уменьшить вероятность обнаружения сканирования, однако существенно увеличит время работы сканера.

 

Параметр -ssl

Данная опция отключает сканирование web-сервера по HTTPS-протоколу. В основном она необходима потому, что очень многие серверы требуют дополнительной аутентификации и в любом случае сканирование не осуществится.

 

Параметр -timeout

Задает время в секундах на отклик от сервера при запросах. По умолчанию этот параметр равен 2 с — это оптимальное время для быстрого сканирования.

 

Параметр -useproxy

Данная опция включает режим работы через прокси-сервер, который указывается в конфигурационном файле config.txt. Работа через прокси-сервер более корректна с точки зрения защиты от обнаружения сканирования удаленным компьютером.

 

Параметр -update

Настоящая опция заставляет принудительно запросить сервер, указанный в config.txt, на наличие обновлений для сканера. Если таковые будут найдены, скрипт загрузит обновления с сайта и обновит сканер. Сканирование совместно с этим параметром невозможно.

 

Параметр -Version

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

В качестве примера работы web-сканера Nikto приведен листинг.

./nikto.pl -host 192.168.192.1

- ***** SSL support not available (see docs for SSL install instructions) *****

---------------------------------------------------------------------------

- Nikto 2.02/2.03 - cirt.net

+ Target IP: 192.168.192.1

+ Target Hostname: 192.168.192.1

+ Target Port: 80

+ Start Time: 2008-02-27 16:15:46

---------------------------------------------------------------------------

+ Server: Apache/2.2.2 (ASPLinux)

- Root page / redirects to: php-fusion/news.php

- Allowed HTTP Methods: GET, HEAD, POST, OPTIONS, TRACE

+ OSVDB-877: HTTP method ('Allow' Header): 'TRACE' is typically only used for debugging and should be disabled. This message does not mean it is vulnerable to XST.

+ OSVDB-0: Retrieved X-Powered-By header: PHP/5.1.6

+ PHP/5.1.6 appears to be outdated (current is at least 5.2.5)

+ Apache/2.2.2 appears to be outdated (current is at least Apache/2.2.6). Apache 1.3.39 and 2.0.61 are also current.

+ OSVDB-877: TRACE / : TRACE option appears to allow XSS or credential theft. See http://www.cgisecurity.com/whitehat-mirror/WhitePaper_screen.pdf for details

+ OSVDB-12184: GET /index.php?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000 : PHP reveals potentially sensitive information via certain HTTP requests which contain specific QUERY strings.

+ OSVDB-561: GET /server-status : This reveals Apache information. Comment out appropriate line in httpd.conf or restrict access to allowed hosts.

+ OSVDB-3092: GET /stats/ : This might be interesting...

+ OSVDB-3268: GET /icons/ : Directory indexing is enabled: /icons

+ OSVDB-3233: GET /icons/README : Apache default file found.

+ 4347 items checked: 11 item(s) reported on remote host

+ End Time: 2008-02-27 16:15:56 (10 seconds)

---------------------------------------------------------------------------

+ 1 host(s) tested

Как видно из отчета, это результат сканирования локального web-сервера 192.168.192.1 без каких-либо дополнительных параметров. Nikto определяет версию программного обеспечения, установленного на сервере, а также возможные уязвимости. В качестве комментариев к каждой из найденных уязвимостей предлагается возможное решение проблемы: обновление сервера, замена конфигурационных файлов и т.п. Скорость работы сканера очень высокая, поэтому одновременно можно сканировать сразу несколько компьютеров без потери производительности. При работе задействуется 50% ресурсов центрального процессора и очень малый объем памяти, что позволяет работать со сканером даже нf загруженных серверах.

В заключение отметим, что сканер Nikto является отличным подспорьем и для системного администратора, и для web-программиста, поскольку позволяет определять уязвимости не только серверного программного обеспечения (Apache и др.), но и самих скриптов. Базы данных, поставляемые в комплекте со сканером, содержат записи о тысячах уязвимостей, которые ранее были найдены в популярных скриптах (форумах, голосованиях, CMS). Напоследок поясним, что своим названием — Nikto — web-сканер обязан фильмам «Армия Тьмы» (“Army of Darkness”) и «День, когда Земля остановилась» (“The Day the Earth Stood Still”).

 

В начало В начало

КомпьютерПресс 6'2008