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

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

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

Введение

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

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

Настройка веб - сервера для сканирования

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

1. Переход в рабочий каталог

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

Для перехода в каталог проекта используйте команду cd. Команда cd означает "change directory" (изменить каталог). Вот команда, которую вам нужно выполнить:

cd /home/labex/project

2. Создание Dockerfile

Dockerfile является важной частью создания образов Docker. Это текстовый документ, содержащий последовательность команд, которые Docker использует для создания образа. В данном случае мы создадим Dockerfile для простого веб - сервера на основе Nginx, популярного программного обеспечения для веб - серверов.

Для создания нового файла с именем Dockerfile мы воспользуемся текстовым редактором nano. nano - это простой и удобный в использовании текстовый редактор, который можно использовать непосредственно в терминале. Выполните следующую команду:

nano Dockerfile

После выполнения этой команды откроется редактор nano, и вы сможете начать добавлять содержимое в Dockerfile. Добавьте в файл следующие строки:

## Use the nginx image as the base
FROM nginx

## Expose port 80
EXPOSE 80

Команда FROM сообщает Docker, что нужно использовать образ nginx в качестве базового для нашего нового образа. Команда EXPOSE указывает, что контейнер будет прослушивать порт 80.

Для сохранения файла нажмите Ctrl+O, а затем Enter. Чтобы выйти из редактора, нажмите Ctrl+X.

3. Создание образа Docker

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

Для создания образа выполните следующую команду:

docker build -t cyber-seed-portal .

В этой команде флаг -t используется для присвоения тега образу. Мы присваиваем нашему образу тег "cyber - seed - portal". Точка в конце команды сообщает Docker, что текущий каталог должен быть использован в качестве контекста сборки.

При выполнении этой команды Docker начнет процесс сборки, и вывод будет выглядеть примерно так:

Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM nginx
latest: Pulling from library/nginx
a803e7c4b030: Pull complete
8b625c47d697: Pull complete
4d3239651a63: Pull complete
0f816efa513d: Pull complete
01d159b8db2f: Pull complete
5fb9a81470f3: Pull complete
Digest: sha256:32da30332506740a2f7c34d5dc70467b7dfe6c23451f6c66c84eeb3cdadab213
Status: Downloaded newer image for nginx:latest
 ---> 61395b4c586d
Step 2/2 : EXPOSE 80
 ---> Running in 1c2d5e2a8e7f
Removing intermediate container 1c2d5e2a8e7f
 ---> 7683abcf62b0
Successfully built 7683abcf62b0
Successfully tagged cyber-seed-portal:latest

4. Запуск контейнера Docker

После создания образа мы можем создать и запустить контейнер на его основе. Контейнер представляет собой запущенный экземпляр образа.

Для запуска контейнера используйте следующую команду:

docker run --name cyber-seed-server -d -p 8080:80 cyber-seed-portal

Разберем эту команду по частям:

  • --name cyber-seed-server: Это присваивает контейнеру имя "cyber - seed - server". Присвоение имени контейнеру упрощает его управление и идентификацию.
  • -d: Это запускает контейнер в отсоединенном режиме, что означает, что контейнер будет работать в фоновом режиме, и вы сможете продолжать использовать терминал для других задач.
  • -p 8080:80: Это сопоставляет порт 8080 вашего компьютера с портом 80 контейнера. Таким образом, когда вы обращаетесь к порту 8080 на своем компьютере, запрос будет перенаправлен на порт 80 внутри контейнера.
  • cyber-seed-portal: Это указывает образ, на основе которого будет создан контейнер.

При выполнении этой команды в качестве вывода вы получите идентификатор контейнера, например:

3a7b1a23c3c5d17b3e4b3e5e6f7g8h9i

Теперь вы успешно настроили веб - сервер, работающий в контейнере Docker. Вы можете обратиться к этому серверу по адресу http://localhost:8080. Этот сервер станет целью для ваших сканирований с помощью Nmap на следующих этапах.

Обнаружение открытых портов с помощью Nmap

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

Понимание Nmap

Nmap (от Network Mapper) представляет собой бесплатный и открытый инструмент. Он в основном используется для обнаружения сетей и проведения аудиторских проверок безопасности. Представьте его как детектива для вашей сети. Администраторы систем и сетей часто используют Nmap для отслеживания того, что находится в их сети, планирования обновления служб и проверки, запущены ли хосты или службы.

Сканирование на наличие открытых портов

Теперь мы используем Nmap для сканирования вашего локального хоста с IP - адресом 127.0.0.1 в поисках открытых портов. Опция -p- в Nmap означает, что нужно проверить каждую возможную дверь (порт) на вашем компьютере. Всего существует 65535 TCP - портов, и эта опция заставляет Nmap проверить их все.

Выполните следующую команду в терминале:

nmap -p- localhost

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

Starting Nmap 7.80  at 2024-03-15 10:59 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00011s latency).
Not shown: 65529 closed ports
PORT      STATE SERVICE
22/tcp    open  ssh
3000/tcp  open  ppp
3001/tcp  open  nessus
3002/tcp  open  exlm-agent
8080/tcp  open  http-proxy
36921/tcp open  unknown

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

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

Результаты сканирования предоставляют нам много полезной информации о вашем компьютере. Разберем столбцы:

  • PORT: Этот столбец показывает номер порта и протокол, в данном случае TCP. Номер порта можно сравнить с конкретным адресом двери на вашем компьютере, а TCP - это способ передачи данных через эту дверь.
  • STATE: Этот столбец сообщает, открыт ли порт, закрыт или отфильтрован. Открытый порт означает, что на этом порту работает служба и готова принимать соединения. Закрытый порт означает, что на нем нет работающей службы. Отфильтрованный порт может быть заблокирован брандмауэром.
  • SERVICE: Этот столбец показывает общую службу, которая обычно использует этот порт.

В результатах сканирования вы должны увидеть порт 8080/tcp как открытый. На предыдущем этапе мы сопоставили этот порт с нашим контейнером Docker. Служба "http - proxy" указывает, что этот порт обычно используется для HTTP - прокси - служб, но в нашей ситуации он используется веб - сервером Nginx.

Другие открытые порты, которые вы можете увидеть:

  • Порт 22 (SSH): Этот порт используется для безопасного удаленного доступа. Он позволяет вам подключиться к вашему компьютеру с другого места в безопасном режиме.
  • Порты 3000 - 3002: Эти порты используются различными службами. Они могут быть связаны с средой разработки или другими приложениями, работающими на вашем компьютере.
  • Порт 36921: Это неизвестная служба. Это может быть пользовательская служба или что - то, что Nmap не может сразу идентифицировать.

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

Определение версии служб с помощью Nmap

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

Понимание определения версии служб

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

Выполнение сканирования для определения версии служб

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

Проведем сканирование для определения версии служб на вашем локальном компьютере (localhost). Локальный компьютер - это ваш собственный компьютер. Для этого выполните следующую команду в терминале:

nmap -sV localhost

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

Вывод команды будет выглядеть примерно так:

Starting Nmap 7.80 ( https://nmap.org ) at 2024-03-15 11:30 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00011s latency).
Not shown: 994 closed ports
PORT     STATE SERVICE     VERSION
22/tcp   open  ssh         OpenSSH 8.2p1 Ubuntu 4ubuntu0.9 (Ubuntu Linux; protocol 2.0)
3000/tcp open  ppp?
3001/tcp open  nessus?
3002/tcp open  ssl/nessus?
8080/tcp open  http        nginx 1.23.4
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 11.94 seconds

Понимание результатов сканирования для определения версии служб

Вывод сканирования для определения версии служб предоставляет подробную информацию о службах, работающих на каждом открытом порте. Разберем важные части:

  • Порт 22: Вывод показывает, что порт 22 открыт и работает служба SSH (Secure Shell). Конкретная версия - OpenSSH 8.2p1, которая работает на системе Ubuntu. SSH - это протокол, используемый для безопасного удаленного доступа к компьютеру.
  • Порт 8080: Этот порт открыт и работает служба HTTP, а именно веб - сервер Nginx версии 1.23.4. Nginx - это популярный веб - сервер, используемый для предоставления веб - страниц.

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

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

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

Определение операционной системы с помощью Nmap

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

Понимание определения операционной системы

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

Выполнение сканирования для определения операционной системы

Для выполнения сканирования для определения операционной системы мы будем использовать опцию -O в Nmap. Однако эта функция требует привилегий суперпользователя (root), так как она включает отправку определенных типов сетевых пакетов, которые обычные пользователи не имеют права отправлять. Поэтому нам нужно использовать sudo для выполнения команды с административными привилегиями.

Выполните следующую команду в терминале:

sudo nmap -O localhost

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

Вывод будет похож на следующий:

Starting Nmap 7.80 ( https://nmap.org ) at 2024-03-15 12:00 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00013s latency).
Not shown: 994 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3000/tcp open  ppp
3001/tcp open  nessus
3002/tcp open  ssl/nessus
8080/tcp open  http-proxy
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 0 hops

OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 3.36 seconds

Понимание результатов определения операционной системы

Результаты определения операционной системы предоставляют нам много полезной информации о целевой операционной системе. Разберем разные части результатов:

  • Device type (Тип устройства): Это сообщает нам общую категорию устройства. Например, это может быть компьютер общего назначения, маршрутизатор или принтер. В нашем случае указано "general purpose" (общего назначения), что означает, что это, вероятно, обычный компьютер.
  • Running (Работает): Это показывает обнаруженную семейство операционной системы и диапазон версий. Здесь указано "Linux 4.X|5.X", что означает, что Nmap определил, что на компьютере работает операционная система Linux с версией ядра в диапазоне 4.X или 5.X.
  • OS CPE (Общие перечисления платформ): Это расшифровывается как Common Platform Enumeration. Он предоставляет стандартизованные идентификаторы для операционной системы, которые можно использовать для дальнейшего исследования и анализа уязвимостей.
  • OS details (Подробности ОС): Это дает более конкретную информацию о версии операционной системы. В нашем примере указано "Linux 4.15 - 5.6", что означает, что версия ядра находится между 4.15 и 5.6.
  • Network Distance (Сетевой диапазон): Это показывает, сколько сетевых прыжков (hops) находится между вами и целью. Поскольку мы сканируем localhost (локальный компьютер), сетевой диапазон равен 0 прыжков.

В этом случае Nmap правильно определил, что на компьютере работает Linux, а именно версия ядра между 4.15 и 5.6.

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

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

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

На этом последнем этапе мы рассмотрим скриптовый движок Nmap (NSE - Nmap Scripting Engine). NSE является очень важной частью Nmap, которая делает его еще более полезным. Он позволяет пользователям писать и обмениваться скриптами для автоматизации различных сетевых задач. Это означает, что вы можете использовать скрипты для выполнения задач быстрее и эффективнее, чем вручную.

Понимание скриптового движка Nmap (NSE)

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

Эти скрипты могут использоваться для различных целей:

  • Сетевой поиск (Network discovery): Это помогает определить, какие устройства находятся в сети.
  • Определение версии: Вы можете узнать, какие версии программного обеспечения работают на устройстве.
  • Определение уязвимостей: Может найти уязвимости безопасности в системе.
  • Поиск бэкдоров: Помогает обнаружить скрытые пути, которые злоумышленники могут использовать для доступа к системе.
  • Эксплуатация уязвимостей: Хотя это должно выполняться в легальном и этическом тестовом окружении, оно может показать, как злоумышленник может воспользоваться уязвимостью.

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

Выполнение базового скриптового сканирования

Для начала базового скриптового сканирования мы будем использовать опцию -sC. Эта опция сообщает Nmap запустить набор стандартных скриптов. Эти стандартные скрипты разработаны так, чтобы быть безопасными и неинвазивными. Это означает, что они не причинят вреда целевой системе при выполнении своей задачи.

Запустим следующую команду:

nmap -sC localhost

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

Starting Nmap 7.80 ( https://nmap.org ) at 2024-03-15 12:30 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00010s latency).
Not shown: 994 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
| ssh-hostkey:
|   3072 01:23:45:67:89:ab:cd:ef:01:23:45:67:89:ab:cd:ef (RSA)
|   256 fe:dc:ba:98:76:54:32:10:fe:dc:ba:98:76:54:32:10 (ECDSA)
|_  256 01:23:45:67:89:ab:cd:ef:01:23:45:67:89:ab:cd:ef (ED25519)
3000/tcp open  ppp
3001/tcp open  nessus
3002/tcp open  ssl/nessus
8080/tcp open  http-proxy
|_http-title: Welcome to nginx!

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

Запуск конкретного скрипта

Если вы хотите запустить определенный скрипт, вы можете использовать опцию --script. После этой опции вам нужно указать имя скрипта или категорию, к которой он относится.

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

nmap --script=http-title -p 8080 localhost

Эта команда сообщает Nmap запустить скрипт http - title на порту 8080 вашего локального компьютера. Вывод будет выглядеть так:

Starting Nmap 7.80 ( https://nmap.org ) at 2024-03-15 12:35 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00011s latency).

PORT     STATE SERVICE
8080/tcp open  http-proxy
|_http-title: Welcome to nginx!

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

Понимание результатов скриптового сканирования

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

  • Для службы SSH на порту 22 скрипт ssh - hostkey извлек ключи хоста. Эти ключи важны для безопасного обмена данными по протоколу SSH.
  • Для службы HTTP на порту 8080 скрипт http - title извлек заголовок веб - страницы, который является "Welcome to nginx!".

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

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

Очистка

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

Запустите следующую команду:

docker stop cyber-seed-server && docker rm cyber-seed-server

Эта команда сначала останавливает запущенный контейнер Docker с именем cyber - seed - server, а затем удаляет его из вашей системы.

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

Резюме

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

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