# 2. Практическая работа “Nmap”. Базовые возможности
> ### Выполнил Тихонов Артём!!! ББСО-01-22
### **Цель работы:**
* Научиться работать с NMAP
## 1. Базовые возможности
Для начала стоит определится с тем как запускать **nmap**. В зависимости от прав пользователся, **nmap** реализует TCP подключения по разному. Если root права отсутствуют, используется системный вызов connect(), в обратном случае **nmap** берет реализацию целиком на себя. В чем преимущество? В отсутсвии логгирования на стороне сервера и увеличении производительности.</p>
По умолчанию **nmap** сканирует стандартные порты, однако это совсем не эффективно, так как порты сервисов можно перенастроить.
Проведем скан портов в диапазоне 1-5000 используя TCP SYN

### 1.1 Определяем название и версию сервиса на порте
**nmap** способен определить имя службы, работующей на порте, однако результат не гарантирован.

Мы смогли получить версии двух из трех сервисов. Этого уже достаточно, чтобы сказать, что конечная машина - Raspberry pi.
## 2. Определяем имя и версию ОС
Для более подробного исследования OC удаленной машины будем использовать ключ -O. Данное исследование базируется на определенных паттернах, таких как время ответа и значения TCP флагов.

Чтобы провести более детальный анализ служб с помощью скриптов NSE, используем ключ -A 
## 3. Повышаем скорость сканирования
Для настройки агрессивности сканирования можно воспользоваться ключем -T (0-5), где 0 - самое скртыное, а 5 - самое агрессивное сканирование (задержка менее 5 мс).

## 4. Скрываем следы
Увеличение задержки между пробором портов - не единственный способ запутывания IDS. С помощью ключа -D можно запустить дополнительные потоки сканирования с фиктивными IP адресами возврата

Обратим внимание на отправляемые пакеты

Еще более изощренным способом сокрытия следов - idle сканирование. Этот метод базируется на недостатке старых OC, инкрементирующих IPDC, поэтому техника не практична.
## 5. Обходим IDS и брандмауэры
**nmap** может обнаружить брандмауэр даже без использования специальных параметров, так как по умолчанию используется TCP SYN сканирование. Обычно вместо отправки FIN пакета при попытке подключения к закрытому порту брандмауэр просто не отправляет ответ. **nmap** отслеживает, при пробе каких портов не было получено ответа, и помечает эти порты filtered.
Еще одна техника обнаружения брандмауэра заключается в том, чтобы заставить **nmap** генерировать «невероятные пакеты», такие как NULL-пакеты (-sN), FIN-пакеты (-sF) и Xmas-пакеты, содержащие флаги FIN, PSH и URG (-sX). RFC описывает все эти ситуации, поэтому любое расхождение с RFC **nmap** интерпретирует как наличие брандмауэра.
Многие брандмауэры блокируют новые TCP подключения, но они также обязаны пропускать существующие. Поэтому при помощи последовательной отправки SYN и ACK пакетов возможно точно определить наличие брандмауэра.

Однако есть stateful-брандмауэры, отслеживающие состояние TCP соединений, определяющие какие соединения были открыты на самом деле. В данном случае ACK пакет был пропущен, значит это не stateful-брандмауэр.
Для скрытия факта сканирования от IDS можно воспользоваться методом фрагментации запросов (-f), в надежде на то, что запрос не будет собран воедино. TCP заголовок запроса будет разбиваться по 8 байт.

</p>
Либо можно выставить размер TCP заголовка по своему желанию.

</p>
Некоторые IDS определяют факт сканирования по размеру пакета, поэтому в **nmap** предусмотрена возможность (--data-len) добавления случайных данных указанной длинны в пакет


Кроме сканирования портов и исследования брандмауэров **nmap** подходит для поиска машин в сети. **nmap** имеет следующие типы сканирования:
* ICMP Echo request (-PE)
* SYN-пакет (-PS)
* ACK-пакет (-PA)
* ICMP timestamp request. (-PP)
* UDP-пакет (-PU)
Проверку доступности легко отключить, используя опцию -PN, о чем сам Nmap сообщит, если не сможет удостовериться в доступности порта

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

А так можно попросить **nmap** просканировать всю подсеть:

Типы сканирования можно комбинировать в одной команде

Относительно новая фишка **nmap** — поддержка скриптов, расширяющих функциональность сканера. **nmap** поставляется с более чем 500 скриптами, которые могут относиться к одной или нескольким из четырнадцати категорий:
* auth — проверка возможности логина. Например, скрипт ftp-anon пробует выполнить анонимный логин на FTP-сервер и выводит список файлов, помечая доступные для записи файлы;
* broadcast — различные виды обнаружения хостов в сети. Пример: broadcast-upnp-info — скрипт для поиска UPnP-сервисов;
* brute — реализация техник брутфорса паролей. Пример: http-brute — брутфорс паролей от веб-сервера;
* default — скрипты, запускаемые автоматически при указании опции -A или -sC. Обычно это простые быстрые скрипты, собирающие дополнительную информацию о машине, вроде уже приведенного выше ftp-anon;
* discovery — практически аналог broadcast. Пример: smb-enum-shares — поиск расшаренных с помощью протокола SMB дисков;
* dos — скрипты для организации DoS-атак. Пример: smb-vuln-regsvc-dos — выводит из строя Windows 2000 путем эксплуатации уязвимости MSRC8742;
* exploit — эксплуатация или проверка на уязвимость. Пример: smb-vuln-ms06-025 — проверка машин Windows на уязвимость MS06-025;
* external — скрипты, использующие внешние ресурсы для получения дополнительной информации о машине. Пример: whois;
* fuzzer — скрипты, посылающие удаленной стороне неожиданные и неправильно сформированные данные с целью поиска уязвимостей или попытки выполнить DoS. Пример: dns-fuzz;
* intrusive — скрипты, выполняющие активные действия в отношении машины. Пример: snmp-brute — брутфорс SNMP-сервера;
* malware — проверка на зараженность машины вирусами и бэкдорами. Пример: smtp-strangeport — поиск SMTP-сервера на нестандартном порте, что может быть свидетельством заражения машины трояном, рассылающим спам;
* safe — «безопасные» скрипты, которые не совершают активных действий в отношении машины, не забивают канал пакетами и не эксплуатируют уязвимости. Пример: ssh-hostkey — получает публичные ключи SSH-сервера;
* version — получение версий работающих служб. Пример: pptp-version — выводит на экран дополнительную информацию о PPTP-сервере;
* vuln — проверка служб на уязвимости.
Если указать опции -A или -sC, скрипты категории default будут запускаться автоматически. Для запуска скриптов других категорий можно использовать опцию --script.


## 6. Поднимаем веб-сервер
В комплекте с **nmap** идет ncat - аналог netcat. С его помощью можно запустить простейший веб сервер.

Проверим работоспособность сервиса в браузере

### **Выводы:**
* В ходе выполнения практической работы были изучены основные возможности NMAP, такие как:
* сканирование портов
* исследование брандмауэров и их обход
* сканирование сетей
* запуск встроенных скриптов
* запуск простейшего web сервера