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

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

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

Еще по теме: Как создать VPN-туннель на Windows и Linux

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

ICMP (Internet Control Message Protocol) — про­токол сетево­го уров­ня, исполь­зуемый для диаг­ности­ки сети.

Ути­литы ping и tracert — два основных инс­тру­мен­та адми­нис­тра­тора для диаг­ности­ки неис­прав­ностей в сети. Без них диаг­ности­ка сети прев­раща­ется для инже­нера в ад. Поэто­му тра­фик ICMP прак­тичес­ки никог­да не огра­ничи­вает­ся. Сог­ласно RFC 792, пакеты ICMP вклю­чают в себя поле Data, содер­жимое и фор­мат которо­го стро­го не опре­деле­ны, что откры­вает воз­можность для инкапсу­ляции любых дан­ных.

Для ICMP-тун­нелиро­вания сущес­тву­ют раз­ные инс­тру­мен­ты, такие как icmpsh, ptunnel и icmptunnel. Важ­ный момент: для отправ­ки модифи­циро­ван­ных пакетов ICMP в Linux тре­буют­ся пра­ва адми­нис­тра­тора сис­темы.

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

На GitHub вы можете най­ти код кли­ента и сер­вера, которые переп­равля­ют дан­ные через зап­росы echo, исполь­зуя встро­енные методы клас­са Ping из сис­темной сбор­ки.

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

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

Сиг­натура­ми при детек­тирова­нии тун­нелей могут слу­жить такие парамет­ры, как силь­ное откло­нение раз­мера пакетов от нор­мы и слиш­ком плот­ный и про­дол­житель­ный поток тра­фика ICMP от какого‑то одно­го хос­та. Но глав­ный мар­кер — это, конеч­но, поле Data.

Впро­чем, необ­ходимо пом­нить, что поле Data исполь­зуют и впол­не легитим­ные ути­литы. Нап­ример, такая при­выч­ная вещь, как ути­лита ping, в каж­дом пакете зап­роса echo запол­няет в том чис­ле и поле Data. И в зависи­мос­ти от ОС поле будет запол­нено по‑раз­ному. Так, для Windows это будет стро­ка:

В Linux у ping пер­вые два бай­та Data отли­чают­ся от пакета к пакету, но осталь­ное содер­жимое не меня­ется. В сыром HEX оно выг­лядит так:

В дам­пе будет сра­зу замет­но окон­чание ASCII-стро­ки:

Это еще один параметр для фин­гер­прин­тинга ОС, такого как TTL.

Как обойти ICMP-туннелирование?

Как и с дру­гими спо­соба­ми, тут мно­гое зависит от пра­вил детек­тирова­ния. Под­ста­нов­ка в начале пос­ледова­тель­нос­ти abcdef поз­волит при­дать нашим пакетам вид легитим­ных. Для борь­бы с тун­нелями ICMP обыч­но бло­киру­ют зап­росы echo, одна­ко час­то не бло­киру­ют дру­гие типы ICMP. Нап­ример, destination unreachable.

Кро­ме того, если наша задача — толь­ко вывод дан­ных, без обратной свя­зи от сер­вера, то дос­таточ­но односто­рон­него тун­неля, а зна­чит, мы можем генери­ровать слу­чай­ные IP-адре­са источни­ка (нап­ример, с исполь­зовани­ем scapy). Это поз­волит обой­ти филь­тра­цию и детект боль­шого потока пакетов от одно­го IP. Кро­ме того, этот при­ем поз­волит замас­кировать реаль­ный адрес машины, слу­жащей источни­ком утеч­ки.

ВКонтакте
OK
Telegram
WhatsApp
Viber

Добавить комментарий

Ваш адрес email не будет опубликован.