Всем привет.
Решив отдать должное автору статьи "Разведка из открытых источников, часть 2" Андрею Бирюкову я публикую еще одну часть из его журнальной серии "Системный администратор". 3-я часть посвящена технической стороне разведки, а именно сканированию сети.
Сканирование сети является неотъемлемой частью
сетевых атак. Для успешной защиты необходимо понимать, как осуществляется
обнаружение узлов в сети. Мы проведем исследование тех служб, которые применяются
в сети. Сначала рассмотрим, как злоумышленник может идентифицировать работающие
узлы. Затем перейдем к тому, как определить, какие службы запущены на данных
машинах. Для идентификации активных узлов в локальной
сети можно использовать различные протоколы сетевого и транспортного уровня,
такие как ICMP, UDP и TCP. Но обо всем
по порядку.
ICMP как простой инструмент исследования сети
Протокол ICMP служит для выявления проблем, связанных с сетевым уровнем. Как правило,
в локальных сетях его не блокируют, так как он часто используется самими системными
администраторами для поиска неполадок в сети.
Прежде всего рассмотрим основные принципы
работы данного протокола. Сообщения ICMP передаются в
виде IP- датаграмм, то есть к ним прибавляется заголовок IP.
Существует несколько типов сообщений ICMP, каждый имеет свой формат, при этом все они содержат следующие три поля:
- 8-битного целого числа, обозначающего тип сообщения (TYPE);
- 8-битного поля кода (CODE), который конкретизирует назначение сообщения;
- 16-битного поля контрольной суммы (CHECKSUM).
Все типы сообщений ICMP можно условно поделить на две группы.
- Сообщения об ошибках (например, Destination Unreachable).
- Запросы и ответы (например, Echo Request и Echo Reply).
Начнем с рассмотрения сообщений об ошибках. Они
содержат заголовок и первые 64 бита данных пакета IP, при передаче которого возникла ошибка. Это делается для того, чтобы
узел-отправитель смог более точно проанализировать причину ошибки, так как все
протоколы прикладного уровня стека TCP/IP содержат наиболее важную информацию
для анализа именно в первых 64 битах своих сообщений. Для сообщений об ошибках
задействовано поле кода. В основном для исследования сети используются Echo Reply, Echo Request и Timestamp.
Наилучшим методом определения доступности узла
является посылка сообщения ICMP Echo (Туре 8). Если система работает и отсутствует
фильтрация графика данного типа, то в ответ придет сообщение ICMP Echo Reply (Type 0).
Идентификация (то есть обнаружение) сетевых устройств
с помощью протокола ICMP может быть выполнена двумя способами.
- посылкой запроса, получением ответа;
- вызовом ситуации ошибки, получением сообщения об ошибке.
В основу идентификации заложен следующий
принцип. Узел, отправляющий ICMP-запрос, устанавливает значения полей Identifier, эти значения позволяют определить ответы, пришедшие от
разных узлов. А для того, чтобы отличить несколько ответов, пришедших от
одного узла, используется поле Sequence Number. В поле Code записывается ноль, поле данных произвольно
(например, алфавит). Отвечающая сторона должна заменить значение поля Туре на
0 и отправить датаграмму обратно.
Для выполнения обнаружения узла обычно
используется утилита ping, входящая в состав большинства ОС. В качестве
параметра ping указывается IP/имя, и в результате получаем ответ удаленной
системы. Однако у нее есть существенный недостаток - все узлы опрашиваются
последовательно, что заметно увеличивает продолжительность опроса.