Как хакеры используют ICMP-туннелирование, чтобы завладеть сетью организации

Как хакеры используют ICMP-туннелирование, чтобы завладеть сетью организации

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

image

По мере роста угроз кибербезопасности, менялся и ландшафт средств обеспечения безопасности. От брандмауэров, систем обнаружения и предотвращения вторжений (IDS & IPS) и систем управления информационной безопасностью и событиями безопасности (SIEM) до аналитики поведения пользователей и объектов (UEBA), анализа протоколов с отслеживанием состояния и стеганографии — мониторинг трафика становится все более жестким, и злоумышленники вынуждены найти новые способы остаться незамеченными.

Туннелирование протокола

Одним из основных методов запутывания трафика является туннелирование протокола. При туннелировании протокола вместо явной отправки пакетов данных по выбранному протоколу (например, TCP) злоумышленник будет инкапсулировать пакеты в другой протокол. Такое поведение помогает скрывать вредоносный трафик внутри, казалось бы, безобидных форм связи, способствуя уклонению от обнаружения. Кроме того, туннелирование протокола можно использовать для шифрования данных и маскировки личности злоумышленника.

Помимо создания скрытого канала с С2-сервером и вывода данных между двумя машинами, туннелирование протокола также можно использовать для обхода авторизации на портале для платного Wi-Fi. Во многих случаях системы порталов блокируют большую часть TCP- и UDP-трафика к/от незарегистрированных хостов, но разрешают другие протоколы, такие как ICMP, DNS и т. д. Хакер может использовать это, туннелируя свой трафик внутри пакетов разрешенного протокола.

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

ICMP и туннелирование

ICMP

Одной из распространенных форм туннелирования протоколов, не относящихся к прикладному уровню, является ICMP-туннелирование.

Internet Control Message Protocol (ICMP) — это протокол сетевого уровня OSI (3 уровень), используемый для обнаружения и контроля проблем маршрутизации в сети. Когда сетевые устройства обнаруживают определенные ошибки, они создают ICMP-пакеты для информирования конечных точек об ошибках.

Например, когда в сети возникает маршрутная петля (routing loops), IP-пакеты будут бесконечно циркулировать по петле, и в конечном итоге их значение TTL упадет до нуля. В этот момент последний маршрутизатор, получивший пакет, отправит ICMP-сообщение «Время истекло: TTL истек при передаче» на исходный IP-адрес пакета.

ICMP-сообщения также можно использовать для управления маршрутизацией. Например, если конечная точка отправляет пакет по неэффективному маршруту, маршрутизаторы на пути могут обнаружить это поведение и отправить ICMP-пакет «Redirect Message», который предложит лучший маршрут для использования в следующий раз.

В целом, ICMP-протокол не реализован на конечных машинах, за исключением двух известных инструментов:

  • Ping — сетевая утилита, используемая для проверки доступности хоста по IP и измерения времени приема-передачи. Ping использует ICMP-пакеты «echo» для работы;
  • Traceroute — утилита сетевой диагностики, которая отображает узлы и транзитные задержки маршрута между двумя машинами в IP-сети с использованием ICMP. При «отслеживании маршрута» traceroute отправляет несколько IP-пакетов запрошенному хосту. Пакеты предназначены для того, чтобы каждый маршрутизатор на своем пути отправлял ICMP-сообщение «Time Exceeded» на хост-источник, содержащий различную информацию о маршрутизаторе.

ICMP-туннелирование

Приведём в пример, как ping использует echo-пакеты ICMP для проверки доступности хоста в сети. Пингующий хост отправляет echo-пакет с некоторыми данными на принимающий хост. Затем пингуемый хост ответит echo-ответом, содержащим те же данные. Стоит отметить, что при «пинговании» данные могут быть произвольными.

Злоумышленники могут использовать ICMP-туннелирование для сокрытия вредоносного поведения в сети. Вместо того, чтобы явно связываться с машиной по выбранному протоколу, каждый пакет будет вставлен в пакет «echo» или «echo reply». Коммуникационный поток теперь будет представлять собой серию операций «ping», а не, например, TCP-соединение.

Почему это проблема

ICMP предназначен для обнаружения и контроля сетевых проблем, поэтому его способность устанавливать канал данных между двумя машинами часто упускается из виду. Более того, поскольку ICMP является важной, хорошо зарекомендовавшей себя частью набора протоколов Интернета и протоколом, не относящимся к прикладному уровню, предприятия с меньшей вероятностью будут следить за ним так тщательно, как за обычными подозреваемыми в краже данных — HTTP, HTTPS, TCP, IMAP и т. д.

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

Общие наборы инструментов для туннелирования

Существует несколько общих наборов инструментов для ICMP-туннелирования и каждый из них предоставляет немного разные функции.

ICMPSH

Icmpsh — это простой набор инструментов для запуска обратных оболочек на компьютерах с Windows. Он состоит из клиента, написанного на C и работающего только на компьютерах с Windows, и POSIX-совместимого сервера, доступного на C, Python и Perl.

Некоторые из примечательных особенностей icmpsh:

  • Используется для C&C — в отличие от некоторых других наборов инструментов, icmpsh создает обратную оболочку, что позволяет использовать его для связи C2-сервера с целевыми машинами;
  • Нацелен на машины Windows — клиент представляет собой исполняемый файл Windows и на данный момент может работать только на машинах Windows;
  • Низкие привилегии — клиенту не требуются привилегии администратора для правильной работы;
  • Простота в использовании — как клиентские, так и серверные приложения понятны, переносимы и очень просты в использовании и практически не требуют настройки.

Ptunnel

ptunnel предназначен для обфускации и туннелирования TCP-трафика. При выполнении клиент ptunnel будет туннелировать TCP через ICMP на назначенный сервер ptunnel. Сервер будет действовать как прокси и будет пересылать TCP-пакеты в их фактическое место назначения и обратно. Этот инструментарий может работать только на POSIX-совместимых ОС.

Некоторые из особенностей ptunnel:

  • Надежные соединения — ptunnel может обнаруживать потерянные пакеты и повторно отправлять их при необходимости;
  • Несколько подключений — сервер можно настроить для одновременной обработки нескольких подключений;
  • Поддерживает аутентификацию — чтобы неизвестные хосты не могли использовать ваш прокси-сервер.

Icmptunnel

Icmptunnel имеет похожую на ptunnel архитектуру, но в отличие от ptunnel он может туннелировать любой IP-трафик. Кроме того, Icmptunnel туннелирует все IP-пакеты клиента, а не только один сеанс, порт и т. д. Эти функции делают инструмент полезным для обхода порталов аутентификации Wi-Fi, но менее полезным для скоординированных кибератак. И клиент, и сервер должны быть совместимы с POSIX.

Некоторые из примечательных особенностей icmptunnel:

  • Шифрование данных — полезная нагрузка ICMP шифруется;
  • Универсальность – туннелировать можно любой IP-трафик.

Демонстрация

В этой демонстрации мы будем использовать icmpsh для туннелирования сеанса обратной оболочки между атакующей машиной на Kali Linux и машиной-жертвой на Windows 10.

Мы выбрали icmpsh, потому что этот инструмент портативен и не требует прав администратора для запуска на машине жертвы.

Демонстрационная схема. Злоумышленник 192.168.68.113, жертва 192.168.68.115

Шаг 1. Отключение echo-ответов ядра

Перед запуском icmpsh нам нужно запретить ядру отвечать на эхо-запросы ICMP. Большинство инструментов ICMP-туннелирования реализуют механизмы для синхронизации потока данных между двумя машинами, и ответы ядра могут привести к неожиданным результатам.

Чтобы отключить ping-ответы ядра, мы добавили в файл «/etc/sysctl.conf» следующую строку: «net.ipv4.icmp_echo_ignore_all=1».


Шаг 2 — Запуск сервера и клиента Icmpsh

Сначала мы запустим сервер icmpsh на нашей машине с Kali Linux. Этот инструмент очень прост в использовании и требует всего два аргумента: IP-адреса злоумышленника и жертвы.

Наша машина ожидает ping-запросов от нашей жертвы (IP 192.168.68.115). Теперь мы можем запустить клиент, который представляет собой исполняемый файл, загруженный с GitHub. Вот его аргументы:

Наша машина Kali находится по IP-адресу 192.168.68.113, поэтому это последняя команда:

Запуск icmpsh-клиента на компьютере с Windows 10.

На атакующей стороне мы начинаем получать данные по SSH:

Icmpsh-сервер, отображающий выходные данные клиентской оболочки

Шаг 3 – Выполнение команд оболочки

Теперь, когда все настроено, у нас есть работающая обратная оболочка (reverse shell) на нашем сервере Kali. Например, мы можем ввести «systeminfo» для сбора информации об устройстве жертвы:

При проверке сетевого трафика между двумя машинами мы видим большое количество ICMP-пакетов:

Обширный ICMP-трафик между злоумышленником и жертвой, перехваченный Wireshark после запуска обратной оболочки

Поскольку icmpsh не шифрует данные, мы можем видеть текст оболочки, внедренный внутрь дейтаграмм:

Вывод обратного командного интерпретатора в виде открытого текста (отмечен синим), замаскированный внутри ICMP-пакета.

Смягчение последствий

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

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

  • Широкое использование ICMP. Особенно при туннелировании больших объемов данных может быть обнаружен значительный объем ICMP-трафика, входящего или исходящего из сети;
  • Аномальный размер пакета. Киберпреступники могут уменьшить общее количество пакетов, вставляя более крупные дейтаграммы в каждый запрос или ответ. Как правило, легитимные эхо-запросы и ответы будут иметь фиксированный стандартный размер, поэтому различные размеры дейтаграмм могут указывать на то, что соединение используется для туннелирования;
  • Периодические ping-запросы. Как отмечалось ранее, некоторые инструменты туннелирования периодически отправляют пустые ICMP-запросы, чтобы пробить дыры через NAT и межсетевые экраны с отслеживанием состояния. Эту модель легко обнаружить, но иногда ее сложнее отличить от легитимного поведения;
  • Непроизвольная полезная нагрузка ICMP. С помощью инструментов проверки пакетов данные ICMP-пакетов можно сканировать и сравнивать со структурами и заголовками обычных протоколов для обнаружения туннелирования. Однако данные могут быть зашифрованы, и, если хакер сможет их правильно зашифровать, пакеты будет трудно отличить от безобидной полезной нагрузки ICMP.

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

Ваша приватность умирает красиво, но мы можем спасти её.

Присоединяйтесь к нам!