Главная

Saturday, 28 November 2020

Разведка из открытых источников, часть 3.

Всем привет.

Решив отдать должное автору статьи "Разведка из открытых источников, часть 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/имя, и в результате получа­ем ответ удаленной системы. Однако у нее есть существен­ный недостаток - все узлы опрашиваются последовательно, что заметно увеличивает продолжительность опроса.

Обращение сразу к нескольким узла (диапазона) с ис­пользованием ICMP-запросов (Echo) называется ICMP Sweep или Ping Sweep. Для исследования большой сети потребуется утилита, способная посылать ICMP-запросы параллельно. Однако, говоря о Ping Sweep, стоит отметить, что из-за параллельной отправки множества ICMP-запросов системы обнаружения атак легко определят такое сканиро­вание. Рассмотрим некоторые из них в качестве примера.

Исследование с помощью ICMP

Утилита fping

Утилита fping позволяет производить исследование сети с помощью протокола ICMP, также возможен параллельный опрос сразу нескольких узлов, список которых может быть задан пользователем или получен из файла.

Синтаксис:

fping [опции ] [ узлы... ]

Список наиболее используемых опций:

- количество отправляемых пакетов к каждому из узлов;

-bn - количество байт в отправляемом пакете;

-g - указание списка сканируемых узлов;

-f - указание файла со списком сканируемых узлов.

Сканирование сети класса С (192.168.1.0/24.) можно осу­ществить с помощью задания маски:

fping -g 192. 168. 1. 0/24

а можно с помощью задания диапазона сканируемых адре­сов:

fping -g 192.168.1.1 192.168.1.254

Также с помощью данной утилиты можно осуществить сканирование с использованием посылки одного пакета:

fping -g 192.168.2.1 192.168.2.254 -с 1 > alive-hosts

Такой способ сканирования менее заметен для систем обнаружения вторжений и анализаторов трафика.

 

Утилита Nmap

Широко известная утилита Nmap также может быть ис­пользована для опроса устройств. Вообще она может при­меняться для исследования сетевых служб не только с по­мощью ICMP, поэтому мы еще неоднократно будем к ней возвращаться.

Вот пример ее использования для сканирования все той же сети 192.168.2.0/24:

nmap -sP -PI 192.168.2.1-254

где:

ключ sP - это указание производить посылку запросов ICMP Echo.

ключ PI - это отключение АСК-сканирования (оно вклю­чено по умолчанию).

 

Broadcast ICMP

Еще одним способом определения доступности множества узлов является посылка запроса ICMP Echo по широкове­щательному адресу или адресу сети. Данный прием имену­ется Broadcast ICMP.

Если предыдущие способы исследования сети с помо­щью ICMP требовали использования специальных утилит, то Broadcast ICMP можно реализовать с помощью коман­ды ping. Например:

ping 192.168.1.255

или

ping 192.168.1.0

Такой запрос будет получен всеми узлами сети, и тео­ретически ответ от каждого из них должен прийти узлу, по­славшему запрос.

На практике машины под управлением ОС Windows на такие запросы не откликаются. Зато ОС семейства UNIX и некоторые модели сетевого оборудования (напри­мер, бюджетные Wi-Fi-роутеры) могут ответить на запросы, где в качестве адреса получателя указан широковещатель­ный адрес или адрес сети.

В частности, у меня в сети на такой запрос ответили машины под управлением Debian Linux, файловый сервер Synology и Wi-Fi-роутер Asus.

Но и здесь исследователю сети не стоит забывать о том, что системы обнаружения атак обычно фиксируют такие за­просы ICMP Echo, как атака smurf. Действительно, подоб­ный запрос, будучи запущен в цикле, порождает большое количество ответов, направленных на один узел, что может создать ситуацию отказа в обслуживании.

Еще одним более надежным средством исследования с помощью ICMP являются сообщения об ошибках.

ICMP-пакеты, сообщающие об ошибках

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

Приведу небольшой пример. Сообщение ICMP Destination Unreachable (Port Unreachable), полученное в ответ на сете­вой пакет, указывает на то, что требуемый порт на узле за­крыт, но сам узел доступен, поскольку ответ нам все-таки пришел.

Использование ICMP-сообщений об ошибках для обна­ружения устройств сводится к вызову сообщения об ошиб­ке на тестируемом узле. Поскольку это осуществляется, как правило, с помощью других протоколов (не ICMP), дан­ные методы упоминаются далее. Начнем с использования UDP.

Исследование с помощью UDP

Метод определения доступности узла с использовани­ем протокола UDP называется UDP Discovery. Если в от­вет на пакет было получено сообщение ICMP Destination Unreachable (Port Unreachable), это означает, что узел до­ступен (и порт, указанный в UDP-пакете, закрыт).

Если ответ от узла не получен, возможны следующие ва­рианты:

-    узел выключен или недоступен;

-    фильтрация трафика;

-    указанный в UDP-пакете порт открыт.

Использование протокола UDP для обнаружения уст­ройств неэффективно в силу следующих причин:

Во-первых, это высокая степень фильтрации UDP-трафика. Так как из-за архитектурных особенностей (от­сутствие механизма подтверждения доставки) UDP используют мало служб (самыми известными являются DNS, SNMP, Syslog), то этот протокол часто фильтру­ется в сети.

-  Вторым недостатком использования UDP является непредсказуемое поведение системы при получении UDP-пакета на открытый порт.

Дело в том, что многие сканеры отправляют при скани­ровании пустые пакеты. Допустим, такой пакет отправили на 53-й порт сервера DNS. Получив его на открытый порт, система попытается прочитать содержимое. При этом на уровне приложений будут ожидаться данные определен­ного формата (команды, параметры и т.д.). Но так как там никаких данных нет, сервис вполне может повести себя не совсем корректно или, что еще хуже для исследующего, отразить данный инцидент в своих журналах событий и уве­домлениях администратору.

Но некоторые разработчики смогли обойти второй недо­статок UDP-сканирования. В сканере Retina этот метод реа­лизован с учетом указанных недостатков. На данные порты отправляется не пустой UDP-пакет, а осмысленный запрос, на который должен прийти ответ. Реакция будет в любом случае (открыт порт или закрыт), что повышает достовер­ность этого метода при идентификации сетевых объектов.

В следующем примере используется утилита Nmap:

Nmap -sU -р <номер UDP-nopтa> <узел>

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

Например, для проверки определенного порта на узле 192.168.10.30 необходимо выполнить:

hping -2 192.168.10.30 -с 1 -р 137 -п

Получение сообщения Port Unreachable будет означать, что узел включен, но порт 137 на нем закрыт.

Рассмотрев протокол транспортного уровня UDP, пере­йдем к TCP.

Исследование с помощью TCP

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

Метод определения доступности узла с использованием протокола TCP называется TCP ping.

Критичным является выбор значений некоторых полей:

-    Source Port.

-    Destination Port.

-    Сочетание флагов (поле Flags).

Выбор порта источника зависит от фильтрации трафика различного типа, а выбор порта получателя осуществляет­ся также из соображений возможной фильтрации (обычно это порты 21, 22, 23, 25, 80, последний - HTTP - это наибо­лее распространенный вариант). Но основным при иссле­довании сети с помощью TCP является выбор правильного сочетания флагов.

 Для лучшего понимания того, о чем идет речь, рассмотрим еще ­несколько утилит с пояснениями. Утилита hping - удобное средство генерации пакетов с различным сочетанием флагов.

hping <узел> [опции]

Список наиболее используемых опций приведен далее:

- количество отправляемых пакетов

-0 - режим RAW IP

-1 - режим ICMP

-2 - режим UDP

По умолчанию используется режим TCP:

-s - порт источника

-d - порт получателя

Флаги TCP:

-F - fin флаг FIN

-S - syn флаг SYN

-R - rst флаг RST

-P - push флаг PUSH

-А - аск флаг АСК

-U-urg флаг URG

-X - xmas флаг X неиспользуемый (0x40)

-Y - ymas флаг Y неиспользуемый (0x80)

Использование флага SYN

Посылка TCP-пакета с установленным флагам SYN может быть использована для определения доступности узла сле­дующим образом: если в ответ на такой запрос пришел па­кет с установленными в заголовке флагами SYN - АСК или RST, то узел доступен. Если же ответ не приходит, то узел либо недоступен, либо данный тип трафика фильтруется.

Пример посылки пакета с установленным флагом SYN на 80-й порт указанного узла с использованием hping:

hping <узел> -S -р 80 -с 1

Поскольку ответ приходит в любом случае (открыт порт или закрыт), этот способ определения доступности узла довольно эффективен (особенно в условиях фильтрации ICMP). Данный метод и называют TCP ping.

Возможны варианты сканирования и с помощью других флагов, однако здесь возникает ряд сложностей. При по­лучении такого пакета система может неоднозначно на него отреагировать, т.к. реализация стека TCP/IP в раз­ных, особенно старых, ОС может существенно отличать­ся. Кроме того, пакетные фильтры с технологией Stateful Inspection считают такие пакеты ошибочными и «молча» отбрасывают их.

В качестве примера приведу сканирование утилитой hping с использованием флагов SYN+ACK и АСК. SYN-ACK:

hping <узел> -S -А -р 80 -с 1

АСК:

hping <узел> -А -р 80 -с 1

Вообще TCP-сканирование является достаточно мощным инструментом при исследовании сети, поэтому стоит очень ответственно подойти к настройке средств обнаружения вторжений для борьбы с ним.

Исследование с помощью IP

Помимо применения протоколов ICMP, UDP и TCP, при иссле­довании сети можно также воспользоваться протоколом IPОснова методов обнаружения узлов с помощью протоко­ла IP - посылка ошибочных IP-датаграмм. При этом ошибка вносится в заголовок IPПризнаком доступности узла служит получение ICMP- сообщения об ошибке. Для работы с пакетами на уровне заголовков IP можно использовать рассмотренную выше утилиту hping.

Посылки фрагмента IР-датаграммы

Суть метода в том, что отправляется первый фрагмент IP- датаграммы и не посылаются остальные. В ответ должно прийти сообщение ICMP об ошибке Fragment Reassembly Time Exceeded (Type=l1, Code=l).

Пример с использованием hping:

hping 192.0.2.254 -с 1 -х -р 80 -S -V –D

Здесь посылается SYN-запрос на 80-й порт узла с ука­занием, что это не последний фрагмент (опция -х). Допол­нительно включены режимы для вывода максимально под­робной информации (опции -V и -D).

В случае если в ответ было получено сообщение Fragment Reassembly Time Exceeded, можно смело утверж­дать, что исследуемый узел включен.

Ошибочная длина заголовка

В заголовке посылаемой IP-датаграммы указывается оши­бочная длина. В ответ должно прийти сообщение Parameter Problem Message (Туре=12, Code=2). Это сообщение также является признаком активности исследуемого узла.

Неподдерживаемый протокол

В отправляемой IP-датаграмме указывается тип протокола, не поддерживаемый удаленной системой. В ответ приходит сообщение ICMP Protocol Unreachable (Туре=3, Code=2). Пример с использованием hping:

hping <узел> -0 -Н 255 -с 1

В данном случае посылается один пакет с типом прото­кола 255 (ключ -0 в данном случае означает работу с про­токолом IP). Получение сообщений с указанными выше ти­пами ошибок будут свидетельством того, что данный узел включен.

Исследование с помощью ARP

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

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

arping 192.168.1.2 -c 1

Утилита Nmap также позволяет осуществлять ARP для поиска работающих узлов­:

nmap –SP –PA 192.168.1.2 -n –vv –oN results

 

Рассмотрев способы, которые может использовать взломщик для поиска активных хостов в сети необходимо сказать пару слов про возможные меры защиты. Собственно набор средств защиты от сканирования сети не слишком обширен. Это фильтрация трафика и использова­ние систем обнаружения вторжений. Фильтрация трафика основывается на запрете всех протоколов, которые не ис­пользуются для работы легальных служб и приложений. Это относится прежде всего к UDP-пакетам для экзотиче­ских приложений. Также следует учесть что сканирования сети по тем же протоколам необходимо и самому сетевому администратору. Вряд ли в пользовательских сегментах на компьюте­рах пользователей применяются Syslog или SNMP. Поэто­му такой трафик можно смело отфильтровывать, оставив лишь DNSЧто касается систем обнаружения вторжений, то лучше всего протестировать на практике те программы, которые упоминаются в статье, и настроить свои IDS на обнаруже­ние сканирования. Для тех кто интересуется сетевым­ программированием будет полезна книга: Скляров И. Программирование боевого софта под Линукс. БХВ-Петербург, 2007 г.

 

 

No comments:

Post a Comment

А что вы думаете по этому поводу?