Совсем недавно пролетала новость про новый RAT’ник (Remote Access Trojan - троян удаленного доступа) RomCom.

RomCom
RomCom

Помимо прочего функционала он умеет использовать ICMP-протокол для подключения к С2-серверу (Command and Control). Кстати, несмотря на то, что ICMP-туннели - уже довольно бородатая история, они по-прежнему используются злоумышленниками для обхода средств защиты информации (СЗИ).

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

Кто такой этот ваш ICMP?

Существует такой протокол: ICMP (Internet Control Message Protocol - протокол межсетевых управляющих сообщений), который располагается на сетевом уровне. Он помогает устанавливать проблемы с сетевой передачей, например, когда IP-пакет не может достичь пункта назначения, маршрутизатор отправляет ICMP-сообщение о проблеме (недостижимом сетевом пункте назначения или превышении времени и др.) Это очень важный и необходимый инструмент для работы системных администраторов и сетевых инженеров. Обычный пользователь мог косвенно с ним сталкиваться, используя утилиту ping. Она предназначена для проверки связи (может подтвердить работоспособность сетевых соединений).

Ping использует два типа контрольных сообщений:

  • Type: 0 - Echo Replay

  • Type: 8 - Echo Request

Что мы видим, когда "пинги" проходят
Что мы видим, когда "пинги" проходят
Что мы видим, когда "пинги" не проходят
Что мы видим, когда "пинги" не проходят

За исключением средств проверки связи и отслеживания маршрутов пользователи редко взаимодействуют с ICMP.

ICMP - больше, чем диагностический протокол, он умеет передавать данные между двумя системами ⇒ это делает ICMP привлекательным вектором, например для туннелирования, чтобы тайно передавать команды и извлекать данные. Это возможно благодаря тому, что в RFC 792, в котором описана работа ICMP, не определено, что должно быть в поле данных, а значит часть полезной нагрузки является произвольной и не проверяется большинством межсетевых экранов. Получается, что мы можем в payload вставить ЛЮБЫЕ данные, включая backdoor-приложение.

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

Какие данные встраивают в ICMP?

В дейтаграмму ICMP могут быть встроены различные типы данных – от небольших фрагментов кода до больших инкапсулированных пакетов HTTP, TCP, SSH etc. Дейтаграмма похожа на пакет, но дейтаграммы не требуют установленного соединения или подтверждения того, что передача была получена (в отличие от TCP). Дейтаграммы ICMP включают раздел данных любого размера (см. RFC 792). Например, если злоумышленник хочет создать обратную оболочку SSH (которая позволяет удаленному злоумышленнику взаимодействовать с жертвой), злоумышленник может вставить пакет SSH в раздел данных дейтаграммы ICMP, который установит обратную оболочку. Или скомпрометированное устройство может вставить небольшие фрагменты украденных данных в дейтаграмму эхо-запроса.

SSH внутри ICMP
SSH внутри ICMP
HTTP внутри ICMP
HTTP внутри ICMP
Фрагмент украденных данных (имя файла)
Фрагмент украденных данных (имя файла)

Недостатки метода

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

  2. Некоторым ОС требуются привилегии root или локального администратора для создания пользовательских дейтаграмм ICMP.

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

В этих случаях туннелирование ICMP может быть не таким надежным.

Модель злоумышленника

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

Как детектировать?

Чтобы в сетевом трафике определять неправомерный, нужно понимать, как выглядит стандартный. Для OC семейства Windows характерен следующий набор данных (алфавит) в data:

ICMP Echo Request OS Windows
ICMP Echo Request OS Windows

А для Linux:

ICMP Echo Request от OS Linux
ICMP Echo Request от OS Linux

Также стоит обратить внимание на ttl (time to live): Windows - 128, Linux - 64.

Итак, какие индикаторы могут служить активностью ICMP туннеля:

  • необычно большой объем трафика ICMP между хостами;

  • размер пакета, размер поля data одного пакета ICMP может достигать 65'507 байт, однако стандартное значение mtu - 1'500 => размер data сокращается до возможных 1472 байт;

  • нестандартные или необычные дейтаграммы ICMP;

  • легитимные эхо-запросы и эхо-ответы имеют совпадающие идентификаторы и полезные данные фиксированного или стандартного размера (стандартное поведение выглядит так: когда сервер получает эхо-запрос, он просто копирует полезную нагрузку в эхо-ответ).

Можно ли полностью предотвратить ICMP-туннелирование?

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

Как определить ICMP-туннель в трафике

icmptx

Это инструмент, позволяющий пользователю с привилегиями root создавать виртуальный сетевой канал между двумя компьютерами, инкапсулирующий данные внутри ICMP-пакетов.

Отличительной чертой является то, что при установлении туннеля отправляется ICMP Echo request (Type:8) с пустым полем data и конкретным Identifier: 7537 (определяется в исходниках), который позволяет серверу однозначно определить попытку подключения клиента, а не случайный запрос.

icmptx ICMP-packet
icmptx ICMP-packet
Захардкоженная переменная
Захардкоженная переменная

Hans

Это тулза, позволяющая пользователю с привилегиями root создавать виртуальный сетевой канал между двумя компьютерами, инкапсулирующий данные внутри ICMP-пакетов.

При рассмотрении трафика можно заметить использование hanc в начале каждого поля data в пакетах от клиента, а следующий байт отвечает за тип команды (в нашем случае это TYPE_CONNECTION_REQUEST = 0x02), задающейся в исходниках.

hans ICMP-packet
hans ICMP-packet
hans типы команд
hans типы команд

ptunnel

Это приложение, которое позволяет туннелировать TCP-соединения с удаленным узлом, используя эхо-запросы и ответы ICMP, широко известные как ping.

В данном примере для однозначного определения клиента используется последовательность байт "d5 20 08 80", которая зашита в исходниках программы.

ptunnel ICMP-packet
ptunnel ICMP-packet
magic bytes
magic bytes

ptunnel-ng

Это модификация ранее рассмотренного ptunnel, она переработана и обладает дополнительным функционалом. В её исходниках указаны следующие magic bytes: «de ad c0 de».

ptunnel-ng ICMP-packet
ptunnel-ng ICMP-packet
magic bytes
magic bytes

icmptunnel

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

Выводы

Итак, ICMP – это протокол, которым все еще пользуются злоумышленники, поэтому, как говорил классик: «Есть те, кого уже взломали, и те, кто ещё не знают, что их взломали», а значит стоит учитывать его в мониторинге и политиках. Как?

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

А что делать и как быть, если нельзя запретить ICMP трафик? Ответ напрашивается как будто сам собой – блокировать на межсетевом экране то, что нам точно не нужно. А дальше с помощью модуля IPS мы можем заглянуть внутрь ICMP пакета, определить попытку туннелирования и заблокировать её.

Любые вопросы по этой теме и не только кидайте в комментарии, постараюсь ответить на все!

Комментарии (6)


  1. DKlinkov
    13.07.2023 14:10

    Спасибо за интересную статью. Только не совсем понятно, что все-таки делать, чтобы предотвратить это? Может посоветуете какие-нибудь готовые решения, которые это умеют?
    Ну или хотя бы сигнатуры для IPS.
    Посмотрел в модуле СОВ одного продукта и ничего похожего не нашел в готовом виде.


    1. accessorio Автор
      13.07.2023 14:10
      +1

      Добрый день, спасибо за комментарий! Если говорить в целом про обнаружение и предотвращение вторжений, то в нашем NGFW есть правила на этот случай. Но, если решение, которым Вы пользуетесь, не располагает достаточной собственной экспертизой (обнаруживать и предотвращать попытки вредоносных коммуникаций по ICMP-протоколу), можем посоветовать следующий сценарий:
      1. По умолчанию блокируете любой ICMP-трафик во внешнюю сеть.
      2. В ситуациях, где сетевым инженерам требуется доступ по этому протоколу во внешнюю сеть - отменяете политику, пока они не закончат работу.


      1. DKlinkov
        13.07.2023 14:10

        Может подскажете где в Вашем NGFW это можно найти? В сигнатурах СОВ по фильтру ICMP не нашел.


        1. accessorio Автор
          13.07.2023 14:10

          Добрый день! Ответил вам в ЛС.


  1. kindshubin
    13.07.2023 14:10

    за обзор тулзов спасибо!

    но по факту ответ в самой статье как с этим бороться дан - не надо разрешать icmp гонять наружу.

    интересно другое. есть ли примеры взломов когда через такой туннель смогли слить данные или реально осуществлять удаленное управление?


    1. accessorio Автор
      13.07.2023 14:10

      Добрый день! Спасибо за вопрос!

      Anchor использует ICMP для коммуникаций с С2. Также Cobalt Strike может быть сконфигурирован таким образом, чтобы использовать ICMP для коммуникации с С2. Ещё есть PHOREAL, PingPull, Regin, RemSec, SombRAT, TSCookie и многие другие. Также в статье мы уже упоминали о RomCom, который также использует ICMP для связи с С2. Существует большое количество кейсов, где организации были взломаны с помощью такого ВПО, и, раз злоумышленники используют этот канал в современных кейсах, значит он работает)