Изучите основы Nmap и методы сканирования

NmapNmapBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы узнаете основы Nmap, мощного инструмента для сканирования сетей, который обычно используется в области кибербезопасности для обнаружения сетей и проведения аудиторских проверок безопасности. Вы научитесь использовать Nmap для сканирования сетей, поиска открытых портов и идентификации запущенных служб.

Освоив эти методы, вы приобретете важные навыки для администрирования сетей и оценки безопасности. Этот практический опыт предоставит вам полезные знания, которые можно применять в реальных ситуациях, и поможет вам понять структуру сетевой инфраструктуры и аспекты безопасности.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/installation("Installation and Setup") nmap/NmapGroup -.-> nmap/port_scanning("Port Scanning Methods") nmap/NmapGroup -.-> nmap/timing_performance("Timing and Performance") nmap/NmapGroup -.-> nmap/stealth_scanning("Stealth and Covert Scanning") subgraph Lab Skills nmap/installation -.-> lab-415937{{"Изучите основы Nmap и методы сканирования"}} nmap/port_scanning -.-> lab-415937{{"Изучите основы Nmap и методы сканирования"}} nmap/timing_performance -.-> lab-415937{{"Изучите основы Nmap и методы сканирования"}} nmap/stealth_scanning -.-> lab-415937{{"Изучите основы Nmap и методы сканирования"}} end

Понимание основ Nmap

Nmap (сокращение от Network Mapper) — это открытый инструмент, который играет важную роль в обнаружении сетей и проведении аудиторских проверок безопасности. В мире кибербезопасности он похож на детектива, который использует простые IP - пакеты для сбора информации. С помощью Nmap вы можете определить, какие хосты находятся в сети, какие службы они предоставляют, какая операционная система запущена на них и другие важные характеристики.

Начнем наше знакомство с основами Nmap. Сначала нам нужно открыть терминал. Терминал — это своего рода командный центр, где вы можете вводить команды для взаимодействия с системой. Вы можете открыть его, нажав на иконку терминала в панели задач или нажав комбинацию клавиш Ctrl+Alt+T.

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

cd /home/labex/project

Теперь, когда мы находимся в нужном месте, проверим версию Nmap, установленную на нашей системе. Знание версии важно, так как разные версии могут иметь разные функции и поведение. Чтобы проверить версию, выполните следующую команду:

nmap --version

После выполнения команды вы должны увидеть вывод, похожий на этот. Этот вывод показывает версию Nmap, установленную на вашей системе, а также дополнительную информацию о библиотеках, с которыми он был скомпилирован, и доступных nsock - движках.

Nmap version 7.80 ( https://nmap.org )
Platform: x86_64-pc-linux-gnu
Compiled with: liblua-5.3.3 openssl-1.1.1f libpcre-8.39 libpcap-1.9.1 nmap-libdnet-1.12 ipv6
Compiled without:
Available nsock engines: epoll poll select

Теперь выполним наш первый простой скан с использованием Nmap. Мы будем сканировать локальный хост (localhost), что эквивалентно самопроверке своей собственной системы. Этот скан поможет нам узнать, какие порты открыты на нашей системе. Порты можно сравнить с дверьми в здании; разные службы используют разные порты для обмена данными. Выполните следующую команду:

nmap localhost

Эта команда сканирует 1000 самых распространенных портов на вашем локальном хосте. После выполнения команды вы должны увидеть вывод, похожий на этот. Вывод сообщает, какие порты открыты на вашей системе. Например, порт 22 обычно используется для SSH (Secure Shell) — протокола для безопасного доступа к удаленному компьютеру, а порт 80 — для HTTP (веб - службы). Имейте в виду, что ваш вывод может показать другие открытые порты в зависимости от запущенных на вашей системе служб.

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-30 15:45 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 0.08 seconds

Для следующего упражнения нам нужна служба для сканирования. Мы создадим простую службу с помощью netcat, который представляет собой универсальную утилиту для работы с сетью. Эта служба будет прослушивать порт 8888. Выполните следующую команду:

nc -lk 8888 &

Разберем эту команду. Опция -l сообщает netcat о том, что он должен прослушивать входящие соединения. Опция -k заставляет netcat продолжать прослушивание даже после отключения клиента. Символ & в конце запускает команду в фоновом режиме, чтобы вы могли продолжать использовать терминал для других задач.

Чтобы убедиться, что служба запущена, мы можем использовать следующую команду:

netstat -tuln | grep 8888

Эта команда выводит список всех сетевых соединений и фильтрует вывод, чтобы показать только информацию, связанную с портом 8888. Если служба запущена, вы должны увидеть вывод, похожий на этот:

tcp        0      0 0.0.0.0:8888            0.0.0.0:*               LISTEN

Этот вывод подтверждает, что наша тестовая служба запущена и прослушивает порт 8888.

Исследование методов сканирования портов с использованием Nmap

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

Сначала выполним простой скан TCP - соединения, специально нацеленный на наш порт 8888. Сканирование TCP - соединения представляет собой простой способ проверить, открыт ли порт. Он работает путем попытки установить полноценное TCP - соединение с целевым портом. Если соединение установлено успешно, порт считается открытым.

nmap -p 8888 localhost

В этой команде опция -p используется для указания того, какие порты мы хотим сканировать. Здесь мы сообщаем Nmap сканировать порт 8888 на localhost, что означает текущую машину. После выполнения этой команды вы должны увидеть вывод, похожий на следующий:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-30 15:50 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).

PORT     STATE SERVICE
8888/tcp open  sun-answerbook

Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds

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

Теперь попробуем выполнить SYN - скан. SYN - скан является более скрытым методом по сравнению с сканированием TCP - соединения. Он не завершает полноценное TCP - соединение, что делает его менее вероятным для обнаружения системами обнаружения вторжений.

sudo nmap -sS -p 8888 localhost

Опция -sS указывает, что мы хотим выполнить SYN - скан. Этот тип сканирования требует привилегий суперпользователя (root), так как он включает отправку простых сетевых пакетов, что является низкоуровневой операцией. Именно поэтому мы используем команду sudo. Вывод должен быть похож на вывод предыдущего скана:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-30 15:55 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).

PORT     STATE SERVICE
8888/tcp open  sun-answerbook

Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds

Далее попробуем выполнить UDP - скан. UDP (User Datagram Protocol) представляет собой другой тип сетевого протокола по сравнению с TCP. В то время как TCP обеспечивает надежную, ориентированную на соединение службу, UDP является протоколом без установления соединения. Мы используем UDP - скан, чтобы проверить, открыт ли порт 8888 для UDP - трафика.

sudo nmap -sU -p 8888 localhost

Опция -sU указывает на выполнение UDP - скана. UDP - сканы могут быть более затратными по времени, чем TCP - сканы, так как UDP не имеет такого же встроенного механизма подтверждения, как TCP, поэтому Nmap должен ждать дольше, чтобы определить, открыт или закрыт порт. Вывод может выглядеть следующим образом:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-30 16:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).

PORT     STATE  SERVICE
8888/udp closed sun-answerbook

Nmap done: 1 IP address (1 host up) scanned in 0.15 seconds

Обратите внимание, что UDP - порт показан как закрытый. Это ожидаемо, так как наша служба netcat прослушивает TCP - соединения, а не UDP.

Наконец, выполним скан для определения версии службы. Этот тип сканирования помогает нам определить, какая конкретная служба и ее версия запущены на определенном порте.

nmap -sV -p 8888 localhost

Опция -sV сообщает Nmap выполнить определение службы/версии. Он пытается отправить специальные запросы на открытые порты и проанализировать ответы, чтобы определить службу и ее версию. Вывод может выглядеть следующим образом:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-30 16:05 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).

PORT     STATE SERVICE VERSION
8888/tcp open  http    Apache httpd
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Nmap done: 1 IP address (1 host up) scanned in 6.51 seconds

Определение версии может не точно идентифицировать нашу службу netcat как настоящее приложение, но оно демонстрирует, как Nmap пытается определить, что запущено на открытых портах.

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

nmap -p 8888 localhost > /home/labex/project/nmap_scan_results.txt

В этой команде символ > используется для перенаправления вывода сканирования Nmap в файл с именем nmap_scan_results.txt, расположенный в директории /home/labex/project.

Вы можете просмотреть сохраненные результаты с помощью следующей команды:

cat /home/labex/project/nmap_scan_results.txt

Команда cat используется для отображения содержимого файла.

Таким образом, мы завершили исследование различных методов сканирования портов с использованием Nmap.

Понимание шаблонов времени и производительности

При выполнении сканирования с помощью Nmap время имеет решающее значение. Если ваши сканы слишком агрессивные, они могут быть обнаружены системами обнаружения вторжений (IDS, Intrusion Detection System). IDS представляет собой инструмент безопасности, который отслеживает сетевой трафик на предмет подозрительной активности. Агрессивные сканы также могут перегрузить целевую систему, что приведет к ее неисправности или неоткликчивости. С другой стороны, если ваши сканы слишком медленные, они могут занять непозволительно много времени на выполнение, что неэффективно, особенно когда у вас большое количество целей для сканирования.

Nmap предоставляет шаблоны времени, которые позволяют вам контролировать скорость и агрессивность сканирования. Эти шаблоны варьируются от T0 (параноидальный) до T5 (безумный). Чем выше номер, тем быстрее и более агрессивным будет скан.

Вот подробное описание шаблонов времени:

  • -T0 (Параноидальный): Это чрезвычайно медленный шаблон времени. Он в основном используется, когда вы хотите обойти системы обнаружения вторжений. Отправляя запросы очень медленно, он менее вероятно вызовет тревогу в IDS.
  • -T1 (Хитрый): Подобно параноидальному шаблону, он также медленный и используется для обхода IDS. Он отправляет запросы немного быстрее, чем параноидальный шаблон, но все еще достаточно медленно, чтобы избежать обнаружения.
  • -T2 (Вежливый): Этот шаблон замедляет сканирование, чтобы использовать меньше пропускной способности и ресурсов на целевой машине. Это хороший выбор, когда вы не хотите вызывать никаких нарушений на целевой системе.
  • -T3 (Нормальный): Это шаблон времени по умолчанию в Nmap. Он находит баланс между скоростью и надежностью, подходящий для большинства общих сканирований.
  • -T4 (Агрессивный): Этот шаблон ускоряет сканирование, предполагая, что вы работаете в достаточно быстрой и надежной сети. Он отправляет запросы быстрее, что может сократить общее время сканирования.
  • -T5 (Безумный): Это очень агрессивный шаблон времени. Он предполагает, что у вас есть чрезвычайно быстрая сеть. Он отправляет запросы с очень высокой скоростью, что может значительно сократить время сканирования, но также увеличивает риск обнаружения.

Начнем с выполнения сканирования с использованием шаблона времени по умолчанию (T3). Мы будем использовать команду time для измерения времени выполнения сканирования. Команда time представляет собой полезный инструмент, который показывает, сколько реального времени, времени пользователя и системного времени занимает выполнение команды.

time nmap -T3 -p 8888 localhost

После выполнения этой команды вы должны увидеть вывод, похожий на следующий:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-30 16:10 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).

PORT     STATE SERVICE
8888/tcp open  sun-answerbook

Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds

real    0m0.115s
user    0m0.033s
sys     0m0.015s

Теперь попробуем более агрессивный шаблон времени (T4). Мы будем использовать ту же команду time для измерения времени сканирования.

time nmap -T4 -p 8888 localhost

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

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-30 16:15 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).

PORT     STATE SERVICE
8888/tcp open  sun-answerbook

Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds

real    0m0.105s
user    0m0.032s
sys     0m0.014s

Чтобы увидеть более заметную разницу в времени сканирования, попробуем сканировать все порты с использованием шаблонов T3 и T4.

time nmap -T3 -p- --max-retries 0 localhost | grep "open" > /dev/null

Опция -p- сообщает Nmap сканировать все 65535 портов на целевой системе. Опция --max - retries 0 уменьшает количество повторных попыток для каждого сканирования порта, что помогает ускорить сканирование. Мы перенаправляем вывод в grep для фильтрации только строк, содержащих слово "open", а затем перенаправляем результат в /dev/null, чтобы сосредоточиться на времени выполнения сканирования.

time nmap -T4 -p- --max-retries 0 localhost | grep "open" > /dev/null

Вы должны заметить более значительную разницу в времени сканирования при этих комплексных сканах.

Теперь, как было запрошено в исходном лабораторном задании, сохраним результат скрытого сканирования в файл. Мы будем использовать шаблон времени T4, чтобы найти баланс между скоростью и надежностью.

nmap -T4 -p 8888 localhost > /home/labex/project/nmap_stealthy_scan.txt

Вы можете просмотреть сохраненные результаты с помощью команды cat:

cat /home/labex/project/nmap_stealthy_scan.txt

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

Форматы вывода и анализ результатов сканирования

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

Nmap поддерживает следующие основные форматы вывода:

  1. Нормальный вывод (по умолчанию): Это текстовый формат, удобный для чтения человеком. Он представляет результаты сканирования так, чтобы вы могли сразу понять их, похоже на отчет.
  2. XML - вывод (-oX): XML представляет собой структурированный формат. Он организует данные иерархически и систематически, что очень удобно для программного разбора и обработки.
  3. Греп - совместимый вывод (-oG): Этот формат разработан для простого разбора с использованием таких инструментов, как grep и другие текстовые утилиты. Он имеет определенную структуру, которая позволяет легко извлекать соответствующую информацию.
  4. Все форматы (-oA): При использовании этой опции Nmap сохранит результаты сканирования одновременно в нормальном, XML и grep - совместимом форматах. Это полезно, когда вы хотите иметь все типы выводов для разных нужд.

Попробуем каждый из этих форматов по очереди:

Сначала сохраним скан в нормальном формате. Следующая команда выполнит сканирование порта 8888 на localhost и сохранит результаты в текстовый файл:

nmap -p 8888 localhost -oN /home/labex/project/normal_output.txt

Теперь сохраним скан в XML - формате. Эта команда выполнит то же сканирование порта 8888 на localhost и сохранит результаты в XML - файл:

nmap -p 8888 localhost -oX /home/labex/project/xml_output.xml

Далее сохраним скан в grep - совместимом формате. Следующая команда выполнит сканирование порта 8888 на localhost и сохранит результаты в файл, который можно легко разобрать с помощью grep:

nmap -p 8888 localhost -oG /home/labex/project/grep_output.txt

Наконец, сохраним скан во всех форматах. Следующая команда создаст три файла с разными форматами для того же сканирования порта 8888 на localhost:

nmap -p 8888 localhost -oA /home/labex/project/all_formats

В результате будут созданы три файла: all_formats.nmap, all_formats.xml и all_formats.gnmap.

Теперь изучим каждый из этих файлов, чтобы понять различия в их форматах.

Для просмотра нормального вывода используем команду cat:

cat /home/labex/project/normal_output.txt

Вы должны увидеть стандартный вывод Nmap, который легко читается человеком. Вот пример того, как он может выглядеть:

## Nmap 7.80 scan initiated Mon Oct 30 16:45:00 2023 as: nmap -p 8888 -oN /home/labex/project/normal_output.txt localhost
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00010s latency).

PORT     STATE SERVICE
8888/tcp open  sun-answerbook

## Nmap done at Mon Oct 30 16:45:00 2023 -- 1 IP address (1 host up) scanned in 0.04 seconds

Для просмотра XML - вывода также используем команду cat:

cat /home/labex/project/xml_output.xml

Этот формат структурирован для простого разбора программами. Вот пример XML - вывода:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE nmaprun>
<nmaprun scanner="nmap" args="nmap -p 8888 -oX /home/labex/project/xml_output.xml localhost" start="1698684307" startstr="Mon Oct 30 16:45:07 2023" version="7.80" xmloutputversion="1.04">
<scaninfo type="connect" protocol="tcp" numservices="1" services="8888"/>
<verbose level="0"/>
<debugging level="0"/>
<host starttime="1698684307" endtime="1698684307"><status state="up" reason="conn-refused" reason_ttl="0"/>
<address addr="127.0.0.1" addrtype="ipv4"/>
<hostnames>
<hostname name="localhost" type="user"/>
<hostname name="localhost" type="PTR"/>
</hostnames>
<ports><port protocol="tcp" portid="8888"><state state="open" reason="syn-ack" reason_ttl="0"/><service name="sun-answerbook" method="table" conf="3"/></port>
</ports>
<times srtt="100" rttvar="5000" to="100000"/>
</host>
<runstats><finished time="1698684307" timestr="Mon Oct 30 16:45:07 2023" elapsed="0.04" summary="Nmap done at Mon Oct 30 16:45:07 2023; 1 IP address (1 host up) scanned in 0.04 seconds" exit="success"/><hosts up="1" down="0" total="1"/>
</runstats>
</nmaprun>

Для просмотра grep - совместимого вывода снова используем команду cat:

cat /home/labex/project/grep_output.txt

Этот формат разработан для простого разбора с помощью таких инструментов, как grep. Вот пример grep - совместимого вывода:

## Nmap 7.80 scan initiated Mon Oct 30 16:45:15 2023 as: nmap -p 8888 -oG /home/labex/project/grep_output.txt localhost
Host: 127.0.0.1 (localhost)	Status: Up
Host: 127.0.0.1 (localhost)	Ports: 8888/open/tcp//sun-answerbook///
## Nmap done at Mon Oct 30 16:45:15 2023 -- 1 IP address (1 host up) scanned in 0.04 seconds

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

grep "open" /home/labex/project/grep_output.txt

Вывод должен быть следующим:

Host: 127.0.0.1 (localhost)	Ports: 8888/open/tcp//sun-answerbook///

Вы также можете использовать более сложные фильтры. Следующая команда извлекает только номер открытого порта:

grep -E "Ports:.*open" /home/labex/project/grep_output.txt | cut -d':' -f3 | cut -d'/' -f1

Вывод будет следующим:

 8888

Эти различные форматы вывода позволяют вам интегрировать результаты сканирования Nmap с другими инструментами и рабочими процессами, делая его универсальным дополнением к вашему набору инструментов безопасности.

Резюме

В этом лабораторном занятии вы изучили основы Nmap, мощного инструмента для сканирования сетей и оценки безопасности. Вы начали с освоения базового использования Nmap, такого как сканирование хостов и определение открытых портов. Затем вы исследовали различные техники сканирования портов, такие как TCP connect - сканы, SYN - сканы и UDP - сканы, каждая из которых имеет уникальные преимущества и области применения.

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