Основы Nmap: типы сканирования и флаги
General | Комментировать запись
Nmap — это самый известный инструмент сканирования среди пентестеров и хакеров. По сути, это сканер портов, который помогает сканировать сети и идентифицировать доступные порты и службы, а также предоставляет дополнительную информацию о целях (включая обратные DNS-имена, предположительную операционную систему, типы устройств и MAC-адреса). Он также пригодится во время аудита сети.
Базовый синтаксис Nmap:
$ nmap [FLAGS] [IP]
Обратите внимание, что выполнения некоторых типов сканирования могут потребоваться привилегии sudo.
Флаги Nmap
Nmap — это мощный инструмент сканирования сетей, который позволяет настраивать сканирование с помощью передаваемых через командную строку флагов. Несколько важных флагов:
- -h: вывод краткой справки
- -sS: выполнить сканирование TCP SYN
- -sU: выполнить сканирование UDP
- -sV: проверить открытые порты для определения информации о службе/версии
- -O: включить обнаружение ОС
- -v: включить расширенный вывод (выводит больше информации). Уровень расширенности можно установить следующим образом:
- -vv: 2-й уровень verbosity. Минимальный рекомендуемый уровень verbosity.
- -v3: 3-й уровень verbosity. Указав число, можно задать уровень verbosity.
- -oA: Тот же вывод Nmap в “normal”, XML и grepable форматах. Можно указать нужный формат с помощью:
- -oN: перенаправить обычный вывод в заданное имя файла
- -oX: делать вывод в чистом формате XML и сохранять его в заданном файле.
- -oG: предоставить вывод, который можно обработать через grep, и сохранять его в файл. Это устаревший формат, так как пользователи теперь переходят на XML-выводы.
- -A: Включает “агрессивное” сканирование: обнаружение ОС (-O), сканирование версий (-sV), сканирование скриптов (-sC) и трассировку (-traceroute).
- -p: указать порты для сканирования. Это может быть один порт или диапазон портов. Например:
- nmap -p 80 127.0.0.0.1: сканируется порт 80 на localhost
- nmap -p 1-100 127.0.0.1: сканирует порты с 1 по 100 на localhost.
- nmap -p- 127.0.0.1: сканирует все порты на localhost.
Типы сканирования в Nmap
Nmap поддерживает разные типы сканирования. Самые популярные из них:
1: TCP (-sT)
В этом типе сканирования Nmap отправляет TCP-пакет на порт с установленным флагом SYN. В этом случае может произойти следующее:
- Цель отвечает пакетом RST – значит, порт закрыт.
- Цель вообще не отвечает. Возможно, из-за того, что брандмауэр отбрасывает все входящие пакеты и в этом случае порт будет считаться отфильтрованным.
- Цель отвечает TCP-пакетом с установленными флагами SYN/ACK, значит, порт открыт. А затем Nmap ответит TCP-пакетом с установленным флагом ACK, что завершает трехстороннее рукопожатие TCP.
Это не очень надежный метод сканирования, так как брандмауэр можно легко настроить на ответные пакеты RST или сбрасывание всех входящих пакетов. Кроме того, этот метод очень медленный, поскольку он ожидает всего трехэтапного рукопожатия TCP.
2: Сканирование SYN “Half-open” (-sS)
Сканирование SYN, или так называемое “полуоткрытое”, или “скрытое сканирование” — улучшение по сравнению с предыдущим методом. В предыдущем методе после получения пакета SYN/ACK мы отправляли обратно TCP-пакет с установленным флагом ACK, теперь мы отправляем RST-пакет. Это предотвращает повторные попытки сервера выполнить запросы и значительно сокращает время сканирования.
Этот метод является усовершенствованием предыдущего, потому что:
- Он быстрее
- Может обойти примитивные брандмауэры
- Часто SYN-сканирование не регистрируется приложениями на портах, поскольку большинство приложений начинают регистрировать соединение только после того, как оно полностью установлено, чего нельзя сказать о SYN-сканировании
Однако в производственных средах запускать SYN-сканирование не рекомендуется, так как это может привести к выходу из строя некоторых нестабильных приложений. Также следует отметить, что для сканирования SYN требуются привилегии sudo, поскольку оно требует обработки неформатированных пакетов.
Фактически при запуске с привилегиями sudo nmap по умолчанию использует SYN-сканирование. А в противном случае по умолчанию используется сканирование TCP.
3: Сканирование UDP (-sU)
Сканирование UDP менее надежно, чем два предыдущих, поскольку UDP-соединения не имеют статических данных. Это означает, что нет “фидбек механизма”, такого, как TCP. UDP работает по принципу “сделал и забыл” — он отправляет пакеты, направленные на определенные порты, и надеется, что они дойдут. При этом больше внимания уделяется скорости, а не качеству. Однако отсутствие механизма обратной связи затрудняет идентификацию открытых портов.
При отправке UDP-пакета на целевой порт возможны три сценария:
- Ответ не получен, тогда nmap помечает порт как open|filtered. В таком случае он отправляет еще один UDP-пакет для повторной проверки и если ответа снова нет, он помечает порт как open|filtered и идет дальше.
- Он может получить ответ UDP, но это бывает очень редко. В таком случае порт помечается как open.
- Если порт closed и он получает обратный echo-запрос ICMP, это означает, что порт недоступен.
Специальные виды сканирования в Nmap
Кроме этих типов сканирования, есть несколько менее популярных, которые более “скрытны”, чем сканирование TCP SYN. К ним относятся следующие:
1: Сканирование TCP Null (-sN)
При сканировании TCP Null у отправленных TCP-пакетов нет установленных флагов. Если порт closed, цель должна ответить RST (согласно RFC).
2: Сканирование TCP FIN (-sF)
Этот способ сканирования очень похож на TCP Null, за исключением того, что вместо отправки полностью пустого TCP-пакета он отправляет пакет с установленным флагом FIN, который используется для корректного закрытия соединения. Следовательно, цель должна ответить RST для closed портов, в соответствии с RFC.
3: Сканирование TCP Xmas (-sX)
Сканирование TCP Xmas также похоже на два предыдущих метода, за исключением того, что они используют TCP-пакеты с установленными флагами PSH, URG и FIN. Как и в предыдущих двух типах сканирования, этот тип также ожидает пакеты RST для closed портов в соответствии с RFC.
Ограничения
Поскольку эти сканирования имеют схожее поведение, они также имеют аналогичные результаты с UDP-сканированием. В этом случае могут быть только три ответа:
- open|filtered : когда нет ответа, порт классифицируется так, потому что отсутствие ответа может означать только две вещи:
- Порт открыт
- Порт защищен брандмауэром, поэтому filtered
- filtered: порт защищен брандмауэром, который отправляет обратно ICMP-пинг.
- closed: когда он получает пакет RST
Также отметим, что, хотя RFC 793 требует, чтобы сетевые хосты отвечали на искаженные пакеты TCP-пакетом RST для closed портов и вообще не отвечали для open портов, некоторые системы отвергают это соглашение. Такое поведение в основном наблюдается на серверах Microsoft Windows и некоторых устройствах CISCO, где все некорректно сформированные пакеты отбрасываются по умолчанию.
Сканирование сети на наличие хостов с помощью Nmap
Одна из самых важных вещей, которую нужно сделать при подключении к сети — получить список всех активных хостов в сети перед дальнейшим исследованием. Это можно сделать с помощью “Ping Sweep”, который включает отправку ICMP-пакета на все IP-адреса в сети и ожидает ответы. В этом случае активными считаются хосты, ответившие ICMP-пакетом.
Указать целевые диапазоны IP-адресов можно с помощью дефисов или через CIDR следующим образом:
$ nmap -sn 192.168.0.1-254
Или
$ nmap -sn 192.168.0.0/24
Флаг -sn подавляет любое сканирование портов и заставляет nmap полагаться исключительно на эхо-пакеты ICMP (или ARP-запросы при запуске с привилегиями суперпользователя) для идентификации активных хостов в сети. Он также отправляет TCP-пакет SYN на целевой порт 443 и TCP-запрос ACK (TCP SYN, если запущен с привилегиями суперпользователя) на целевой порт 80.
Скриптовый движок Nmap
Nmap Scripting Engine (NSE) — это мощное дополнение к Nmap, которое позволяет расширить его функционал. Написанный на языке Lua, он позволяет писать сценарии и автоматизировать многие виды задач (к примеру, тестирование на уязвимости и взлом).
Несколько полезных категорий:
- safe: Не влияет на цель
- intrusive: Небезопасный: может повлиять на цель
- vuln: Сканировать на наличие уязвимостей
- exploit: Попытаться использовать уязвимость
- auth: Попытаться обойти аутентификацию для запущенных служб
- brute: Попытаться перебрать учетные данные для запущенных служб
- discovery: Попытка запросить у запущенных служб дополнительную информацию о сети
Для запуска скрипта нужно указать его в виде –script=<script-name>
Также можно указать несколько скриптов для одновременного запуска, разделяя их имена запятыми, например –script=<script-name1>,<script-name2>.
Некоторым скриптам нужен аргумент, который можно указать так –script-args <args>.
Отдельные скрипты имеют встроенное меню справки, которое можно вызвать с помощью:
$ nmap --script-help <script-name>
Полный список скриптов можно найти здесь.
Подводим итоги
У Nmap есть много бесплатных и хорошо оформленных материалов. Вы можете найти больше информации о флагах, скриптах и многом другом на официальном сайте. Поэкспериментируйте с разными флагами и сценариями и посмотрите, как отличаются их результаты в разных средах.
Читайте также: Использование Nmap для сканирования открытых портов на VPS
Tags: Nmap