Совсем недавно пролетала новость про новый RAT’ник (Remote Access Trojan - троян удаленного доступа) 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, который установит обратную оболочку. Или скомпрометированное устройство может вставить небольшие фрагменты украденных данных в дейтаграмму эхо-запроса.
Недостатки метода
В процессе передачи данных в ICMP-туннеле может возникать задержка, поскольку ICMP-пакеты могут быть приоритетом ниже других типов трафика в сети. Это делает ICMP-туннелирование менее привлекательным, но всё ещё популярным методом обхода систем безопасности для связи с зараженными системами.
Некоторым ОС требуются привилегии root или локального администратора для создания пользовательских дейтаграмм ICMP.
Туннелирование ICMP через межсетевые экраны с отслеживанием состояния или маршрутизаторы преобразования сетевых адресов (NAT) также могут создавать проблемы, поскольку эти устройства фильтруют эхо-ответы ICMP, не имеющие соответствующего эхо-запроса. (Но и их обходят, используя пустые эхо-запросы ICMP с непрерывными интервалами)
В этих случаях туннелирование ICMP может быть не таким надежным.
Модель злоумышленника
Например, пользователь загрузил и запустил ВПО (вредоносное программное обеспечение) или злоумышленник сам воспользовался уязвимостью для установки ВПО на устройстве жертвы. ВПО должно установить туннель С2 изнутри сети для связи с внешним злоумышленником, а ICMP – доверенный протокол, который помогает администраторам, поэтому ICMP-сообщениям часто разрешается проходить через межсетевые экраны и сегменты сети, которые обычно блокируют входящий и исходящий вредоносный трафик.
Как детектировать?
Чтобы в сетевом трафике определять неправомерный, нужно понимать, как выглядит стандартный. Для OC семейства Windows характерен следующий набор данных (алфавит) в data:
А для 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 (определяется в исходниках), который позволяет серверу однозначно определить попытку подключения клиента, а не случайный запрос.
Hans
Это тулза, позволяющая пользователю с привилегиями root создавать виртуальный сетевой канал между двумя компьютерами, инкапсулирующий данные внутри ICMP-пакетов.
При рассмотрении трафика можно заметить использование hanc
в начале каждого поля data в пакетах от клиента, а следующий байт отвечает за тип команды (в нашем случае это TYPE_CONNECTION_REQUEST = 0x02), задающейся в исходниках.
ptunnel
Это приложение, которое позволяет туннелировать TCP-соединения с удаленным узлом, используя эхо-запросы и ответы ICMP, широко известные как ping.
В данном примере для однозначного определения клиента используется последовательность байт "d5 20 08 80", которая зашита в исходниках программы.
ptunnel-ng
Это модификация ранее рассмотренного ptunnel, она переработана и обладает дополнительным функционалом. В её исходниках указаны следующие magic bytes: «de ad c0 de».
icmptunnel
Инкапсулирует трафик в эхо-пакеты ICMP и отправляет на прокси-сервер, где происходит декапсуляция и перенаправление. Входящие пакеты, предназначенные для клиента, снова инкапсулируются в ответные пакеты ICMP и отправляются обратно клиенту. IP-трафик отправляется в поле данных ICMP-пакетов.
Выводы
Итак, ICMP – это протокол, которым все еще пользуются злоумышленники, поэтому, как говорил классик: «Есть те, кого уже взломали, и те, кто ещё не знают, что их взломали», а значит стоит учитывать его в мониторинге и политиках. Как?
Стандартное поведение протокола при эхо-запросах и ответах подразумевает те же идентификаторы и полезные данные по содержимому и размеру. И в это же время всегда подозрительно, когда пакеты ICMP имеют большой и/или динамический размер поля data, тем более, когда само тело в запросах различается.
А что делать и как быть, если нельзя запретить ICMP трафик? Ответ напрашивается как будто сам собой – блокировать на межсетевом экране то, что нам точно не нужно. А дальше с помощью модуля IPS мы можем заглянуть внутрь ICMP пакета, определить попытку туннелирования и заблокировать её.
Любые вопросы по этой теме и не только кидайте в комментарии, постараюсь ответить на все!