Эта тема сидит над душой уже долгое время.
Много написано о nmap-е, многие гайды и руководства были переписаны. Я думаю, это потому что люди не до конца понимают все возможности nmap-а.
И смотрят на него как на инструмент сбора, а не на явный инструмент атаки.
Люди предпочитают сосредоточиться на таких инструментах, как metasploit, хотя этот инструмент лежит в основе почти каждого Pentest-ера, Security Review-ера, и т,д.
В этой статье я попытаюсь осветить основные принципы инструмента.
Предупреждение: это не очередной Sheet Cheat или руководство с готовыми командами.
Я постараюсь углубится в трафик, который "бежит" за инструментом, и что это означает для нашего сканирования.
Знания, необходимые для максимальной эффективности статьи: Понимание IP, TCP и UDP.
"Способы подключения"
У nmap-а много способов "подключения"
Ссылка скрыта от гостей
.Эти инструкции "говорят" инструменту как подключится к определенным портам.
Начнем с рассмотрения основных методов сканирования nmap.
Этот метод обозначается аргументом -sT, его можно рассматривать как стандартным способом когда мы думаем о сканировании портов.
Когда мы говорим о сканировании TCP-портов, то что мы хотим знать, это то, что "предлагает" сканируемая машина.
В этом случае мы попытаемся увидеть, какие порты "прослушиваются" на этой машине.
В классической конфигурации стандартного TCP-соединения мы фактически выполняем две посылки и одно получение.
Первый запрос, будет запрос SYN, этот "запрос" на самом деле просто означает, что мы "включили" бит, который говорит, что этот запрос является запросом SYN.
Если на другой стороне есть программное обеспечение, которое "слушает "запросы на соответствующем порту, то оно отправит обратно пакет и "включит" бит, который говорит ACK \ SYN или на "русском" : я готов общатся.
После получения пакета мы отправим обратно пакет ACK (опять же, просто бит в заголовке пакета), а затем мы сможем начать "разговор" по TCP.
Это известный процесс Three Way Handshake, который выполняется при каждом TCP-соединении для начала "разговора".
Когда мы говорим о сканировании TCP-портов, то что мы хотим знать, это то, что "предлагает" сканируемая машина.
В этом случае мы попытаемся увидеть, какие порты "прослушиваются" на этой машине.
В классической конфигурации стандартного TCP-соединения мы фактически выполняем две посылки и одно получение.
Первый запрос, будет запрос SYN, этот "запрос" на самом деле просто означает, что мы "включили" бит, который говорит, что этот запрос является запросом SYN.
Если на другой стороне есть программное обеспечение, которое "слушает "запросы на соответствующем порту, то оно отправит обратно пакет и "включит" бит, который говорит ACK \ SYN или на "русском" : я готов общатся.
После получения пакета мы отправим обратно пакет ACK (опять же, просто бит в заголовке пакета), а затем мы сможем начать "разговор" по TCP.
Это известный процесс Three Way Handshake, который выполняется при каждом TCP-соединении для начала "разговора".
При использовании способа TCP Connect мы производим полное подключение ко всем портам которые сканируем.
Этот метод обозначается аргументом -sS, он уже стал стандартным способом и в прошлом назывался скрытым (stealth), но сегодня это верно только частично.
Этот способ использует частичное "рукопожатие" из того, что обсуждалось в выше.
Здесь мы отправим пакет SYN, опять же если на другой стороне есть кто отвечает, то получим ACK \ SYN, но отправлять обратно пакет ACK мы не будем, таким образом не установив Three Way Handshake.
Многие FireWall-ы пали, а причина тому, то что они основаны на правилах (RuleBase), если настроено правило, то FireWall будет ему следовать.
К примеру, в rulebase настроено, что если былы TCP Connect-ы к более чем 10-ти портам, то значит это "Scan" и этот IP будет заблокирован.
Использовав способ TCP SYN мы не попадаем под это правило.
Этот способ использует частичное "рукопожатие" из того, что обсуждалось в выше.
Здесь мы отправим пакет SYN, опять же если на другой стороне есть кто отвечает, то получим ACK \ SYN, но отправлять обратно пакет ACK мы не будем, таким образом не установив Three Way Handshake.
Многие FireWall-ы пали, а причина тому, то что они основаны на правилах (RuleBase), если настроено правило, то FireWall будет ему следовать.
К примеру, в rulebase настроено, что если былы TCP Connect-ы к более чем 10-ти портам, то значит это "Scan" и этот IP будет заблокирован.
Использовав способ TCP SYN мы не попадаем под это правило.
Объединим несколько различных способов водно сканирование.
FIN -sF - "включит" бит, который говорит, что этот запрос является запросом FIN. (конец "разговора")
NULL -sN - не устанавливает никаких битов в заголовке пакета. (TCP flag header = 0)
XMAS -sX - "включит" биты: URG, FIN и PUSH.
FIN -sF - "включит" бит, который говорит, что этот запрос является запросом FIN. (конец "разговора")
NULL -sN - не устанавливает никаких битов в заголовке пакета. (TCP flag header = 0)
XMAS -sX - "включит" биты: URG, FIN и PUSH.
Сегодня мы видем множество FireWall-ов и IDS/IPS, разбросанных почти позади каждой организации, на которую мы смотрим.
Идея этих сканирований заключается в том, что системы (FireWall, IPS/IDS), которые получают запросы TCP для закрытых портов, должны отвечать пакетом RST, в то время как на открытые порты, которые получают такие запросы (без начального подключения), реагируют дропом пакета или вообще не реагируют. (При условии что система соблюдает RFC793 TCP/IP)
Сканирование портов UDP - очень важная процедура, на которую многие тестировщики не обращают внимания.
Как и порты TCP, UDP порты обеспечивают нам дальнейшее понимание системы.
В некоторых случаях из-за "дизайна" UDP "stateless" мы получаем интересные возможности атаки или средства идентификации инструментов, которые используют UDP.
Кроме того, есть службы, которые могут быть критическими точками в тестировании, такие как SNMP, который использует порт 161 в UDP.
Так как UDP stateless, мы не можем знать порт открыть или нет, но система(таргет) помогает нам.
Когда мы сканируем аргументом -sU, мы отправляем 0-байтные сообщения UDP, если порт открыт, мы можем видеть отсутствия ответа, если порт закрыт, операционная система ответит нам и выведет : ICMP Port Unreachable.
Здесь у нас есть три ньюанса:
Во-первых, когда FireWall блокирует сообщения ICMP Port Unreachable, мы можем ожидать, что nmap вернет нам результаты false-positive.
Вторая проблема - большинство операционных систем ограничивают количество этих сообщений, что означает, что мы можем ожидать медленную скорость сканирования.
В-третьих, Windows не ограничивает эти ответы, так что работать можно быстрей.
Как и порты TCP, UDP порты обеспечивают нам дальнейшее понимание системы.
В некоторых случаях из-за "дизайна" UDP "stateless" мы получаем интересные возможности атаки или средства идентификации инструментов, которые используют UDP.
Кроме того, есть службы, которые могут быть критическими точками в тестировании, такие как SNMP, который использует порт 161 в UDP.
Так как UDP stateless, мы не можем знать порт открыть или нет, но система(таргет) помогает нам.
Когда мы сканируем аргументом -sU, мы отправляем 0-байтные сообщения UDP, если порт открыт, мы можем видеть отсутствия ответа, если порт закрыт, операционная система ответит нам и выведет : ICMP Port Unreachable.
Здесь у нас есть три ньюанса:
Во-первых, когда FireWall блокирует сообщения ICMP Port Unreachable, мы можем ожидать, что nmap вернет нам результаты false-positive.
Вторая проблема - большинство операционных систем ограничивают количество этих сообщений, что означает, что мы можем ожидать медленную скорость сканирования.
В-третьих, Windows не ограничивает эти ответы, так что работать можно быстрей.
В этом типе сканирования (аргумент -sO) - мы пытаемся выяснить, какой IP протокол поддерживается. Чтобы достичь этого, nmap отправит "пустые" сообщения во всех типах протоколов, чтобы увидеть ответ.
Если ответ представляет собой сообщение ICMP с недостижимым протоколом, мы будем знать, что протокол не поддерживается. Обратите внимание, что многие FireWall-ы не пропускают эти сообщения, и результат может быть false-positive.
Если ответ представляет собой сообщение ICMP с недостижимым протоколом, мы будем знать, что протокол не поддерживается. Обратите внимание, что многие FireWall-ы не пропускают эти сообщения, и результат может быть false-positive.
Сканирование ACK будет использоваться в основном для понимания FireWall-а.
Если цель получает пакету ACK напрямую, не устанавливая ранее TCP-соединение, ответ должен быть пакетой RST.
Результаты зависят от того, получам ли мы этот ответ RST.
Если мы не получили пакет RST, тогда что-то заблокировало его.
Если цель получает пакету ACK напрямую, не устанавливая ранее TCP-соединение, ответ должен быть пакетой RST.
Результаты зависят от того, получам ли мы этот ответ RST.
Если мы не получили пакет RST, тогда что-то заблокировало его.
Дополнительная информация
Тайминг - например, параллельные соединения, которые nmap может удерживать в направлении сканируемого устройства, количество портов, с которыми nmap будет "разговаривать" одновременно, интервал между пакетами тд.
-T0
Конечно, мы все хотим использовать только этот режим, но это означает, что nmap будет ждать около 5 минут между пакетами, сканирование одного таргета с 65 000 портов займет около 255 дней.
Это сканирование, вероятно, будет интерпретироваться по многим регистраторам, и любой FireWall будет рассматривать его как незначительный фоновый шум.
-T5
Сканирование T5 существует, но я не рекомендую его. Вы можете потерять большое количество информации и, получить слишком много false-positive, и нужно иметь очень быстрое соединение.
Конечно, мы все хотим использовать только этот режим, но это означает, что nmap будет ждать около 5 минут между пакетами, сканирование одного таргета с 65 000 портов займет около 255 дней.
Это сканирование, вероятно, будет интерпретироваться по многим регистраторам, и любой FireWall будет рассматривать его как незначительный фоновый шум.
-T5
Сканирование T5 существует, но я не рекомендую его. Вы можете потерять большое количество информации и, получить слишком много false-positive, и нужно иметь очень быстрое соединение.
Обнаружение сервисов
Когда мы включаем флаг sV, мы говорим nmap сделать связь и попытатся понять, что за сервис стоит там.
Сначала попытается исполнить "Banner Grabbing", потом nmap попробует, узнать, какой тип сервиса порт имеет, отправляя в соответствии с типом порта или запросы в других протоколах, пока он не сможет идентифицировать сервис.
Если nmap не распознает сервис протокола, мы увидим знак "?" рядом.
Обнаружение ОС
Это не всегда точное обнаружение операционной системы, но NMAP будет пытаться соответствовать ядру "кернель"
[doublepost=1511575811,1511575740][/doublepost]
Путаница врага
Decoy Scan - Этот метод обозначается аргументом -sS, это сканирование подделывает сканирование с дополнительных адресов, nmap не скроет ваш реальный адрес, но будет загружать многие другие адреса.
Фрагментация - это не функция nmap, а метод "разбиения" пакетов в сети.
Есть сети где размер MTU (Maximum Transfer Unit) разные, MTU представляет размер пакеты которую сеть может "передать", при движении между сетями, размер MTU может изменится, когда пакет достигает сети, где MTU меньше, то пакет будет разделен на два( или меньше), на первой пакете включается флаг фрагментация IP, указывая что на пути еще пакеты.
Одним из лучших методов сканирования является разбиение пакетов на более мелкие пакеты. Многие из устройств защиты не знают, как соединять IP Fragmentation куски,но просматривать (куски)пакету отдельно и, следовательно, не поймут смысл всей пакеты
Код:
nmap -f (fragment packets); --mtu (using the specified MTU)
Смена порта источника
У каждого FireWall-а есть исключение (особая ситуация) Пакеты с определенных адресов определяются как пакеты, которые можно пропускать и не имеют проблем.
Одно из правил, которое много раз ставится для предотвращения проблем, заключается в том, что пакеты, которые зашли через порт HTTP (80), являются пакетами, которые возвращаются с определенного сайта и разрешены.
Код:
nmap --source-port <portnumber>; -g <portnumber>
Расширения и добавки
В Nmap есть --script и script-args , чья цель - включить запуск рсширений и добавок для nmap.
К примеру скрипт на брут sql
Код:
nmap -p 1433 --script ms-sql-brute --script-args userdb=users_list.txt passdb=pass_list.txt ip-range
Если мы хотим найти цели в сети совершенно тихим способом, мы можем выполнить "Passive Scan"
Идея заключается в том, чтобы запускать NMAP для прослушивания пакетов, отправленных как broadcast в сети, преимущество такого сканирования заключается в том, что оно является полностью пассивным, тоесть FireWall его не видят.
Код:
nmap --script broadcast-listener --script-args timeout=<seconds>
Заключение
Nmap - отличный инструмент, большинство из нас использует его, не осознавая всего потенциала. Неправильное чтение сканирования может привести к падению теста и может привести к блокировке. Надеюсь, что все читатели статьи смогут лучше изучить инструмент. Удачи в предстоящих тестах.
Последнее редактирование: