LXF161: Аудит сети NMap
|
|
|
Аудит безопасности сети. Как побольше узнать об удаленном компьютере
Содержание |
Nmap: Сканируем Паутину
Внимание Игоря Штомпеля привлекло кроссплатформенное приложение, с помощью которого вы узнаете многое...
Игорь Штомпель каждый день открывает в Linux что-то новое и использует его где только возможно. А Unity ему в этом ничуть не мешает. Многих пользователей волнуют вопросы сетевой безопасности. Одним из инструментов ее достижения является программа Nmap, новая версия которой вышла недавно. Мы расскажем, как начать с ней работать.
Знакомство с Nmap
Nmap (http://nmap.org/) – это свободное (доступно на условиях лицензии GNU GPLv2) кроссплатформенное программное обеспечение, которое позволяет осуществлять исследование и аудит сетевой безопасности. Платформы, на которых может работать Nmap – Linux, семейство BSD (Free-, Net-, Open-), Mac OS X, Solaris, Windows и ряд других. Хотя сегодня программа доступна для различных операционных систем, первоначально она создавалась для систем семейства *NIX.
История создания Nmap такова. Ее автор Гордон Лайон [Gordon Lyon] был недоволен возможностями доступных на тот момент (вторая половина 90-х гг.) сетевых сканеров безопасности (SATAN, Strobe от небезызвестного Джулиана Ассанжа [Julian Assange] и других). Он пытался модифицировать существующие программы, но результат его не устраивал. После этого Лайон решил сам написать программное обеспечение, которое бы обладало всеми необходимыми ему возможностями.
Что же это за возможности, которые были необходимы будущему разработчику Nmap? Все довольно просто: ему не требовалось ничего необычного, хотя по тем временам, наверно, это и было необычно: поддержка всех видов сканирования, быстрая работа. Именно этого он не мог получить от существующих к моменту начала разработки Nmap сетевых сканеров безопасности.
Итак, поставив указанные требования во главу угла, Лайон разрабатывает свою программу, пользуется ею и сперва тестирует ее самостоятельно, а затем передает Nmap в электронный журнал Phrack (где 1 сентября 1997 года был опубликован исходный код: http://www.phrack.org/issues.html?issue=51&id=11#article). С тех пор Nmap продолжает свое развитие, успел получить широкое распространение в соответствующей сфере безопасности информационных технологий, а для многих стал незаменимым инструментом аудита и сканирования Всемирной паутины.
Установка Nmap
21 мая 2012 года был представлен новый релиз Nmap – шестая версия. В репозиториях Ubuntu 12.04 (именно в ней мы будем осуществлять всю работу со сканером) доступна только старая версия, 5.21, что и понятно: ведь операционная система была выпущена в апреле. Поэтому установим Nmap 6 в Ubuntu 12.04 из архива с исходным кодом.
Загрузить данный архив можно со специальной страницы официального сайта Nmap (http://nmap.org/download.html). Версия Nmap, доступная на момент написания статьи – 6.01. Мы загрузили соответствующий архив: nmap-6.01.tar.bz2. Теперь произведем установку.
Скопируйте архив Nmap 6.01 в каталог назначения, где вы будете осуществлять установку. Далее извлеките файлы из архива:
$ bzip2 -cd nmap-6.01.tar.bz2 | tar xvf -
После удачного завершения выполнения команды вы увидите новый каталог – nmap-6.01. Перейдем в него:
$ cd nmap-6.01
Далее произведем конфигурирование стандартным ./configure.
В случае успешного завершения конфигурирования вы увидите примерно то, что показано на рис. 1.
Осталось осуществить сборку программы –
$ make
и, конечно, ее установить (не забудьте получить права суперпользователя):
$ sudo make install
В итоге в выводе этой команды вы должны увидеть следующее:
NMAP SUCCESSFULLY INSTALLED
Вот и все – установка завершилась успешно, и Nmap готов к использованию.
Новшества Nmap 6
Скажем несколько слов о новшествах, которые включила шестая версия Nmap. Основные большие изменения затронули шесть областей (http://nmap.org/6/#6changes): поддержку NSE-скриптов (специальные скрипты на базе Nmap Scripting Engine, которые позволяют автоматизировать стандартные действия при сканировании); улучшение сканирования web-сервисов; полная поддержка IPv6; новая утилита nping; усовершенствование Zenmap; увеличение скорости сканирования.
Дадим подробности. Так, число NSE-скриптов, по сравнению с Nmap 5, увеличено с 59 до 348. Поддержка сканирования web-сервисов позволяет получить информацию о параметрах web-сервера (техники кэширования, поддержка HTTP и т. д.). Кроме того, количество NSE-скриптов для сканирования web-сервисов возросло с 6 до 54. Реализация полной поддержки IPv6 позволяет производить сканирование с помощью raw-пакетов портов систем, использующих IPv6. Новая утилита nping ориентирована на анализ пришедших пакетов и времени их прихода, а также поддерживает различные сетевые протоколы, для которых позволяет генерировать соответствующие произвольные пакеты. Графический интерфейс Zenmap получил новую функциональность – например, появились локализации интерфейса (в том числе поддержка русского языка) и возможности по фильтрации хостов. В новом релизе Nmap также повысилась скорость сканирования. В частности, был переписан код системы трассировки, с целью достижения высокой производительности работы и реализации новых возможностей распараллеливания операций для движка NSE и системы определения версий.
Сканирование с Nmap
Nmap обладает богатым арсеналом возможностей по получению информации об удаленном компьютере, локальной сети и т. д. Целой книги не хватит, чтобы описать все методы работы с программой. Но начинать с чего-то надо, и мы начнем с простого – разберем формат команды nmap, который используется для сканирования:
nmap [Тип(ы) сканирования] [Опции] [Цель]
Здесь название [Тип(ы) сканирования] говорит само за себя, о типах подробнее далее; [Опции] – специальные опции, которые специфицируют сканирование (не являются обязательными); [Цель] – цель сканирования (например, локальная петля 127.0.0.1).
Прежде чем перейти непосредственно к изучению сканирования с помощью Nmap, обратим ваше внимание на важный момент. Все опции, начинающиеся с -s, относятся к осуществлению сканирования:
» -sP – пинг-сканирование; » -sV – получить информацию о версии сервисов; » -sU – UDP-сканирование; » -sO – сканирование протоколов; » -sS/-sT/-sA/-sW/-sM – различные виды TCP SYN-сканирования; » -sN – TCP Null-сканирование; » -sF – FIN-сканирование; » -sX – Xmas-сканирование. Некоторых из приведенных методов мы опишем поподробнее.
Для начала осуществим пинг-сканирование, применяемое для определения доступности цели сканирования. В отличии от утилиты ping, отправляющей так называемые «эхо-запросы» на основе протокола ICMP, которые нередко блокируются на исследуемых хостах, Nmap отправляет по умолчанию ACK-пакеты на порт 80. ACK – это флаг пакета протокола TCP, который призван сообщать о том, что предыдущий пакет был получен. Итак, произведем сканирование:
$ sudo nmap -sP scanme.nmap.org
Сканируемый узел оказался доступен.
Кстати, просканировать несколько машин можно, например, таким образом:
$ sudo nmap -sP 192.168.0.1, 20-25
В данном случае будут просканированы 7 IP-адресов (192.168.0.1 и, соответственно, в этом же адресном диапазоне с 20 по 25).
Есть и другие способы:
$ sudo nmap -sP 192.168.0.*
$ sudo nmap -sP 192.168.0.1/24
Обратите внимание, что для пинг-тестирования можно воспользоваться дополнительными опциями (более полный перечень доступен в страницах руководств):
» -PA [список портов] – отправка ACK-пакетов; » -PE – пингование с использованием эхо-запросов на базе протокола ICMP; » -PN – пропустить обнаружение хостов, считать все хосты работающими; » -PO [список протоколов] – пингование с использованием протокола IP; » -PR – ARP-пингование; » -PS [список портов] – отправка SYN-пакетов (SYN – это флаг TCP-пакета, который информирует о начале TCP-соединения); » -PU [список портов] – UDP-пингование. Проведем сканирование без использования опций, что позволит нам получить информацию о запущенных сервисах и открытых портах на цели сканирования. В качестве цели сканирования мы воспользуемся сайтом, который разработчики Nmap реализовали и предоставили специально для тренировки в использовании программы – scanme.nmap.org:
$ nmap scanme.nmap.org
Кстати, если во время сканирования нажимать какую-нибудь клавишу (за исключением функциональных – F1 и т. д.), то можно увидеть информацию о текущем состоянии процесса сканирования (см. рис. 2).
В выводе мы видим, что на цели сканирования открыты порты 22, 25, 80 и 9929, на которых запущены соответствующие сервисы (ssh, smtp, http, nping-echo). Кстати о сервисе, работающем на порту 9929: он предназначен для исследования работы новой утилиты nping, о которой мы упоминали выше.
Еще несколько слов о предыдущем выводе Nmap. Условно говоря, в нем мы увидели три столбца:
» PORT – информация о номере порта и протоколе;
» STATE – состояние портов (open – открыт, т. е. пакеты на этом порту будут приниматься и обрабатываться соответствующим сервисом; closed – никакой сервис на порту не работает, но порт может быть открыт; filtered – порт закрыт фильтром, например, брандмауэром, который, возможно, его блокирует, и поэтому нельзя точно определить, закрыт порт или открыт; unfiltered означает, что порты обслуживают пакеты, которые отправляет Nmap, но последний не определил, открыты они или закрыты.);
» SERVICE – название сервиса.
Давайте попытаемся определить операционную систему. Для этого в Nmap доступна опция -O:
$ nmap -O scanme.nmap.org
Но, выполнив эту команду, мы не получили желанного результата – запуск Nmap выполнялся без прав суперпользователя, необходимых при использовании методов идентификации операционной системы на основе результатов сканирования с использованием протоколов TCP/IP (“TCP/IP fingerprinting (for OS scan) requires root privileges”).
Повторим попытку:
$ sudo nmap -O scanme.nmap.org
Теперь сканирование завершилось удачно.
Nmap позволяет осуществить сканирование сразу нескольких целей. Для примера, модифицируем команду, которую мы отдавали выше, добавив в качестве дополнительной цели локальную:
$ sudo nmap -O scanme.nmap.org 127.0.0.1
В выводе этой команды мы увидим, как показано на рис. 3, условно, два отчета, по каждой цели сканирования.
На удаленных хостах имеется ряд нюансов определения операционных систем, и для этого предусмотрены дополнительные опции. Скажем, с опцией --osscan-limit –
$ sudo nmap -O --osscan-limit scanme.nmap.org
– Nmap не будет определять операционные системы тех целей сканирования, которые не имеют как минимум одного открытого и одного закрытого порта. По утверждению разработчика программы, определение операционной системы будет более эффективно именно в таком случае. Пропуск при сканировании не удовлетворяющих этому условию целей позволяет оптимизировать процесс сканирования. Например, при сканировании большого количества целей таким образом можно сократить время сканирования без ущерба для его качества.
Nmap может «угадывать» результаты сканирования, задействовав опции --osscan-guess или --fuzzy:
$ sudo nmap -O --osscan-guess scanme.nmap.org
Такое сканирование эффективно в ситуациях, когда Nmap не может точно определить операционную систему на цели сканирования. В результате программа выводит процент соответствия «угаданной» операционной системы реальной.
В ситуации, когда необходимо точное соответствие, можно задействовать опцию --max-os-tries, которая позволяет задать максимальное количество попыток определения операционной системы на цели сканирования:
$ sudo nmap -O --max-os-tries 10 scanme.nmap.org
Дело в том, что по умолчанию Nmap в «благоприятных» условиях для сканирования совершает две попытки, а в «неблагоприятных» – пять. При малом количестве попыток Nmap может пропускать некоторые результаты сканирования, которые при последующих попытках помогли бы в определении операционной системы.
Общую информацию о цели сканирования мы научились получать в виде запущенных сервисов и открытых портов. Теперь исследуем, какие версии сервисов запущенных на интересующей на цели. Для этого воспользуемся опциями -sV.
Итак, получим информацию о версиях сервисов на цели сканирования:
$ sudo nmap -sV scanme.nmap.org
Как видно из рис. 4, на цели сканирования запущены сервисы OpenSSH 5.3p1, Apache 2.2.14 и, по всей вероятности, стоит операционная система Ubuntu. По крайней мере, точно известно, что на цели сканирования работает операционная система Linux: см. в выводе Service Info: OS:.
Перейдем к следующему виду сканирования. Обратим внимание читателей на то, что ряд важных сервисов может работать по протоколу UDP (например, DNS, RPC и другие). Поскольку UDP-сканирование scanme.nmap.org у нас прошло неудачно (программа продолжала работать, а вывода, соответственно, не было, причем продолжительное время), мы решили просканировать локальный адрес:
$ sudo nmap -sU 127.0.0.1
Выполнение команды завершилось успешно, и мы увидели вывод с информацией о портах и соответствующих сервисах.
Еще один метод получил название сканирования протоколов. Дело в том, что протоколы транспортного уровня стека TCP/IP имеют номера. Так, в поле с названием protocol пакета IP содержится информация о заголовке пакета и номере протокола, соответственно, транспортного уровня. Nmap отправляет на цель сканирования пакеты с номерами протоколов, и если соответствующие ответы получены, то протокол на цели сканирования доступен. Воспользуемся опцией -sO для осуществления данного типа сканирования:
$ sudo nmap -sO 127.0.0.1
В выводе мы увидим, что ряд протоколов доступен: это ICMP (номер 1), TCP (6), UDP (17).
Рассмотрим некоторые возможности, которые могут расширить и детализировать процесс сканирования тех или иных целей. Nmap позволяет специфицировать порты, которые необходимо просканировать. Для этого существует опция -p:
$ sudo nmap -p 1-100 scanme.nmap.org
Здесь мы сканируем только те порты на удаленном хосте, которые нас интересуют. Обратите внимание, что начальное или конечное значение диапазона портов может быть опущено (весь диапазон возможныых значений – от 1 до 65535). Приведем пример без начального значения:
$ sudo nmap -p -100 scanme.nmap.org
В данном случае будут сканироваться порты с 1 по 100. А вот пример с пропущенным конечным значением диапазона портов:
$ sudo nmap -p 1- scanme.nmap.org
Просканированы будут порты с 1 по 65535, т. е. полный диапазон портов. Полный диапазон портов можно также просканировать, указав следующее:
$ sudo nmap -p- scanme.nmap.org
Диапазон портов можно указать также с помощью квадратных скобок:
$ sudo nmap -p [-23] scanme.nmap.org
Будут просканированы порты с номерами от 23 и менее.
А как быть в ситуации, когда необходимо просканировать отдельный порт? Позволяет ли это делать Nmap? Конечно! Помимо указания диапазона портов, в Nmap можно специфицировать отдельные порты. Например, порт 80:
$ sudo nmap -p 80 scanme.nmap.org
При сканировании TCP/UDP-портов Nmap позволяет специфицировать протокол. Для TCP необходимо указывать перед номером порта T:, а для UDP – U:. Приведем пример:
$ sudo nmap -p T:21,80,U:137 scanme.nmap.org
Мы специфицировали как TCP порты 21 и 80, а 137 – как UDP. Допустимо указывать и диапазон портов:
$ sudo nmap -p T:21-23,U:137
В этом случае порты с 21 по 23 будут сканироваться в качестве TCP-портов.
И еще, обратите внимание на то, что если не указан определитель протокола (T: или U:), то порт будет сканироваться для всех протоколов.
Вместо числовых значений порты могут быть специфицированы и по именам, которыми они обозначены в файле nmap-services. Это файл находится в каталоге /usr/share/nmap. Просмотреть его содержимое вы можете, например, так:
$ less /usr/share/nmap/nmap-services
Рассмотрим примеры сканирования с указанием имен портов вместо указания их номеров. Воспользуемся двумя последними приведенными выше примерами. Для первого у нас получится следующее:
$ sudo nmap -p T:ftp,http,U:netbios-ns
а для второго –
$ sudo nmap -p T:ftp,ssh,telnet,U:netbios-ns
Как видим, к сожалению, во втором случае, как и вообще при использовании имен вместо номеров портов, указывать диапазон портов не получается.
Кроме того, вы можете использовать символы ? и * при специфицировании имен протоколов. Традиционно, символ ? означает один пропущенный символ, а * – множество. Приведем пример:
$ sudo nmap -p T:htt? scanme.nmap.org
В выводе мы увидим порты, полное имя которых – http. Для нашего случая со scanme.nmap.org это порты 80 и 8080.
Рассмотрим другой пример:
$ sudo nmap -p T:htt* scanme.nmap.org
В этом случае вывод будет гораздо более обширным. В нем мы увидим следующие порты: 80 – http, 280 – http-mgmt, 443 – https, 591 – http-alt, 593 – http-rpc-epmap, 8000 – http-alt, 8008 – http, 8080 – http-proxy, 8443 – https-alt. Итак, как видим, Nmap вывел порты, имена которых начинаются с htt.
На этом мы завершим рассмотрение работы с Nmap. Во второй части урока мы поговорим о работе с графическими оболочками для Nmap (например, Zenmap, Umit), утилите hping3.
Заключение
Nmap – мощное средство исследования Сети, доступное для различных платформ, а что касается Linux, то во многих дистрибутивах из репозиториев. Правда, с новой версией Nmap репозитории иногда отстают. Однако установка программы не составляет проблем и осуществляется достаточно традиционно.
В целом, Nmap предоставляет богатые возможности по сканированию Сети, а само сканирование осуществляется быстро. Применяя те или иные опции, можно оптимизировать процесс сканирования – в частности, сократить его время и получить только интересующую информацию.
Настоятельно рекомендуем использовать Nmap исключительно в исследовательских или рабочих целях, согласовав использование программы со всеми заинтересованными лицами, а также исключительно в рамках действующего законодательства. Следует учитывать и то, что, например, многие провайдеры в договорах со своими абонентами запрещают производить сканирование Сети. |