При нас­трой­ке средств защиты сетевое обо­рудо­вание час­то оста­ется без вни­мания адми­нис­тра­торов, что повыша­ет веро­ятность взло­ма и получе­ния кон­тро­ля над такими устрой­ства­ми. Что, если зло­умыш­ленник уже добил­ся кон­тро­ля над пог­ранич­ным обо­рудо­вани­ем? Смо­жет ли он подоб­рать­ся к внут­ренней инфраструк­туре?

Пи­вотинг (от англий­ско­го pivoting, а не от сло­ва «пиво») — это набор тех­ник, которые поз­воля­ют получить дос­туп к внут­ренним ресур­сам, минуя сетевую изо­ляцию, сетевые средс­тва защиты, фай­рвол. Дос­таточ­но мно­го было ска­зано о про­веде­нии пивотин­га через тра­дици­онные служ­бы SSH, OVPN и дру­гие. Но в сво­ем иссле­дова­нии я про­демонс­три­рую нет­радици­онные при­емы пивотин­га сквозь пог­ранич­ное сетевое обо­рудо­вание с исполь­зовани­ем про­токо­ла GRE.

warning

Статья име­ет озна­коми­тель­ный харак­тер и пред­назна­чена для спе­циалис­тов по безопас­ности, про­водя­щих тес­тирова­ние в рам­ках кон­трак­та. Автор и редак­ция не несут ответс­твен­ности за любой вред, при­чинен­ный с при­мене­нием изло­жен­ной информа­ции. Рас­простра­нение вре­донос­ных прог­рамм, наруше­ние работы сис­тем и наруше­ние тай­ны перепис­ки прес­леду­ются по закону.

 

GRE

GRE (Generic Routing Encapsulation) — это про­токол инкапсу­ляции сетевых IP-пакетов, раз­работан­ный инже­нера­ми Cisco. В про­дак­шене он получил боль­шую популяр­ность, пос­коль­ку реша­ет проб­лемы соз­дания VPN-каналов для орга­низа­ций. GRE про­водит инкапсу­ляцию нап­рямую в IP-пакет, минуя тран­спортный уро­вень. Кста­ти говоря, в кон­тек­сте IP-пакета у GRE есть свой чис­ловой иден­тифика­тор — 47. По сути, GRE не пре­дос­тавля­ет никаких средств защиты тун­нелиру­емых дан­ных. Поэто­му в про­дак­шене обыч­но скре­щива­ют GRE и IPSec для обес­печения безопас­ности дан­ных. В этой статье я сов­сем нем­ного рас­ска­жу о GRE, что­бы ты понимал, зачем он нам понадо­бил­ся.

Простой пример GRE-туннеля
Прос­той при­мер GRE-тун­неля

GRE-тун­нелиро­вание здесь под­разуме­вает три сущ­ности:

  • Delivery Header. Пред­став­ляет собой IP-пакет с пуб­личны­ми адре­сами источни­ка/наз­начения. Бла­года­ря ему инкапсу­лиро­ван­ный пакет смо­жет дос­тичь адре­сата в сети Интернет. Его раз­мер — 20 байт;
  • GRE-пакет. Его раз­мер — 4 бай­та;
  • пас­сажир. Это полез­ные дан­ные, тра­фик, сге­нери­рован­ные легитим­ными служ­бами.
Служебные заголовки GRE
Слу­жеб­ные заголов­ки GRE
Структура GRE версии 0
Струк­тура GRE вер­сии 0

У GRE есть две вер­сии — 0 и 1. На кар­тинке выше пред­став­лена струк­тура нулевой вер­сии про­токо­ла GRE. Имен­но она обыч­но и исполь­зует­ся. Как видишь, боль­шинс­тво заголов­ков здесь опци­ональ­ные, то есть хра­нимые там зна­чения есть не всег­да и появ­ляют­ся лишь в спе­цифич­ных сце­нари­ях. GRE так­же носит иден­тифика­тор инкапсу­лиру­юще­го про­токо­ла в заголов­ке Protocol Type. Под каж­дый про­токол есть свой иден­тифика­тор: нап­ример, для пакета IPv4 этот иден­тифика­тор равен 0x0800.

Идентификатор IPv4-пакета внутри GRE-заголовка
Иден­тифика­тор IPv4-пакета внут­ри GRE-заголов­ка

www

Под­робнее о GRE читай в до­кумен­те RFC.

 

Лабораторная сеть

В качес­тве лабора­тор­ного стен­да выс­тупит сеть, изоб­ражен­ная на схе­ме.

Топология лабораторной сети
То­поло­гия лабора­тор­ной сети

Это типич­ная кор­поратив­ная сеть с тре­мя уров­нями (уро­вень дос­тупа, рас­пре­деле­ния и ядра). В качес­тве динами­чес­кой мар­шру­тиза­ции исполь­зует­ся про­токол OSPF, для отка­зоус­той­чивос­ти дос­тупнос­ти шлю­за — HSRP. Име­ем четыре ком­мутато­ра уров­ня дос­тупа и четыре сети VLAN со сво­ей адре­саци­ей. Так­же под­клю­чен отдель­ный ком­мутатор уров­ня рас­пре­деле­ния, за ним сеть 192.168.20.0/24.

В качес­тве Edge Router будут выс­тупать Cisco CSR и Mikrotik CHR v. 6.49.6.

С ата­кующей сто­роны машина с Kali Linux и пуб­личным IP-адре­сом — для при­мера ата­ки из интерне­та. Пред­положим, что ата­кующий каким‑то обра­зом получил дос­туп к панели управле­ния пог­ранич­ным мар­шру­тиза­тором, пос­коль­ку про­демонс­три­ровать мы хотим пивотинг, а это, как извес­тно, один из шагов во вре­мя пос­тэкс­плу­ата­ции.

 

L3 GRE VPN поверх Cisco IOS

Про­демонс­три­рую неболь­шой при­мер орга­низа­ции L3-тун­неля во внут­реннюю сеть, которая находит­ся за самим пог­ранич­ным роуте­ром. Вооб­ще, прин­ципы нас­трой­ки GRE не отли­чают­ся у всех вен­доров сетево­го обо­рудо­вания, воп­рос лишь в раз­ном син­такси­се. Давай для начала пос­мотрим, как нас­тра­ивать Cisco.

Кон­фигура­ция GRE в Cisco IOS вклю­чает сле­дующее:

  • соз­дание логичес­кого интерфей­са;
  • ука­зание режима, в котором будет работать тун­нель (GRE);
  • наз­начение адре­са на интерфейс (здесь возь­мем адре­са 172.16.0.1 для Kali и 172.16.0.2 для Cisco CSR);
  • за­дание адре­са источни­ка 212.100.144.100;
  • за­дание адре­са наз­начения 100.132.55.100.
EdgeGW(config)# interface tunnel 1
EdgeGW(config-if)# tunnel mode gre ip
EdgeGW(config-if)# ip address 172.16.0.2 255.255.255.0
EdgeGW(config-if)# tunnel source 212.100.144.100
EdgeGW(config-if)# tunnel destination 100.132.55.100

Те­перь черед вто­рой сто­роны GRE-тун­неля. В нашем слу­чае этой «вто­рой сто­роной» будет хост ата­кующе­го. Linux прек­расно под­держи­вает работу с GRE при наличии необ­ходимо­го модуля ядра ip_gre. А он есть поч­ти вез­де.

Здесь шаги такие:

  • им­порт модуля ядра;
  • соз­дание логичес­кого интерфей­са с ука­зани­ем типа, адре­сов источни­ка и наз­начения;
  • наз­начение адре­са на логичес­ком интерфей­се;
  • вклю­чение интерфей­са.
c4s73r@kali:~$ sudo modprobe ip_gre
c4s73r@kali:~$ sudo ip link add name evilgre type gre local 100.132.55.100 remote 212.100.144.100
c4s73r@kali:~$ sudo ip addr add 172.16.0.1/24 dev evilgre
c4s73r@kali:~$ sudo ip link set evilgre up

Про­верим работу тун­неля через пинг до тун­нель­ного интерфей­са Cisco CSR.

Пинг атакующего до второй стороны туннеля
Пинг ата­кующе­го до вто­рой сто­роны тун­неля
Пинг от Cisco CSR
Пинг от Cisco CSR

Пос­мотрим на таб­лицу мар­шру­тиза­ции, добавим некото­рые мар­шру­ты до под­сетей, что­бы про­верить дос­тупность.

Таблица маршрутизации пограничного роутера Cisco CSR
Таб­лица мар­шру­тиза­ции пог­ранич­ного роуте­ра Cisco CSR

Про­писы­ваем мар­шру­ты до целевых под­сетей. Адре­сом шлю­за в дан­ном слу­чае будет адрес логичес­кого GRE-интерфей­са роуте­ра Cisco CSR — 172.16.0.2.

c4s73r@kali:~$ sudo route add -net 10.10.50.0 netmask 255.255.255.0 gw 172.16.0.2
c4s73r@kali:~$ sudo route add -net 10.10.110.0 netmask 255.255.255.0 gw 172.16.0.2
c4s73r@kali:~$ sudo route add -net 10.10.140.0 netmask 255.255.255.0 gw 172.16.0.2
c4s73r@kali:~$ sudo route add -net 10.10.210.0 netmask 255.255.255.0 gw 172.16.0.2
c4s73r@kali:~$ sudo route add -net 192.168.20.0 netmask 255.255.255.0 gw 172.16.0.2
c4s73r@kali:~$ sudo nmap -n -p 22 -iL targets -oA result
Результаты сканирования SSH внутренней инфраструктуры
Ре­зуль­таты ска­ниро­вания SSH внут­ренней инфраструк­туры

При­мер­но так будет выг­лядеть пакет с инкапсу­ляци­ей, если ата­кующий вза­имо­дей­ству­ет с внут­ренней сетью (ICMP, на при­мере внут­ренней под­сети наз­начения 192.168.20.0/24).

 

L3 GRE VPN поверх RouterOS

Те­перь про­демонс­три­рую при­мер на обо­рудо­вании Mikrotik. Здесь абсо­лют­но те же прин­ципы нас­трой­ки, раз­ница лишь в син­такси­се и иерар­хии рас­положе­ния сущ­ностей (интерфей­сы, IP-адре­сация и так далее).

info

Здесь при­веде­ны коман­ды имен­но для RouterOS v. 6.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Подписаться
Уведомить о
1 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии