Содержание статьи
Пивотинг (от английского pivoting, а не от слова «пиво») — это набор техник, которые позволяют получить доступ к внутренним ресурсам, минуя сетевую изоляцию, сетевые средства защиты, файрвол. Достаточно много было сказано о проведении пивотинга через традиционные службы SSH, OVPN и другие. Но в своем исследовании я продемонстрирую нетрадиционные приемы пивотинга сквозь пограничное сетевое оборудование с использованием протокола GRE.
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
GRE
GRE (Generic Routing Encapsulation) — это протокол инкапсуляции сетевых IP-пакетов, разработанный инженерами Cisco. В продакшене он получил большую популярность, поскольку решает проблемы создания VPN-каналов для организаций. GRE проводит инкапсуляцию напрямую в IP-пакет, минуя транспортный уровень. Кстати говоря, в контексте IP-пакета у GRE есть свой числовой идентификатор — 47
. По сути, GRE не предоставляет никаких средств защиты туннелируемых данных. Поэтому в продакшене обычно скрещивают GRE и IPSec для обеспечения безопасности данных. В этой статье я совсем немного расскажу о GRE, чтобы ты понимал, зачем он нам понадобился.
![Простой пример GRE-туннеля Простой пример GRE-туннеля](https://static.xakep.ru/images/e76e3c8c4fa50dc3d3da045b38229755/29501/gre-tunnel-theory.png)
GRE-туннелирование здесь подразумевает три сущности:
- Delivery Header. Представляет собой IP-пакет с публичными адресами источника/назначения. Благодаря ему инкапсулированный пакет сможет достичь адресата в сети Интернет. Его размер — 20 байт;
- GRE-пакет. Его размер — 4 байта;
- пассажир. Это полезные данные, трафик, сгенерированные легитимными службами.
![Служебные заголовки GRE Служебные заголовки GRE](https://static.xakep.ru/images/e76e3c8c4fa50dc3d3da045b38229755/29500/delivery-gre-passenger.png)
![Структура GRE версии 0 Структура GRE версии 0](https://static.xakep.ru/images/e76e3c8c4fa50dc3d3da045b38229755/29479/159142-gre.jpg)
У GRE есть две версии — 0 и 1. На картинке выше представлена структура нулевой версии протокола GRE. Именно она обычно и используется. Как видишь, большинство заголовков здесь опциональные, то есть хранимые там значения есть не всегда и появляются лишь в специфичных сценариях. GRE также носит идентификатор инкапсулирующего протокола в заголовке Protocol Type. Под каждый протокол есть свой идентификатор: например, для пакета IPv4 этот идентификатор равен 0x0800
.
![Идентификатор IPv4-пакета внутри GRE-заголовка Идентификатор IPv4-пакета внутри GRE-заголовка](https://static.xakep.ru/images/e76e3c8c4fa50dc3d3da045b38229755/29478/gre-prototype.png)
www
Подробнее о GRE читай в документе RFC.
Лабораторная сеть
В качестве лабораторного стенда выступит сеть, изображенная на схеме.
![Топология лабораторной сети Топология лабораторной сети](https://static.xakep.ru/images/accbda26adb620d1259d31eb40ad6ce1/30164/main-map2.png)
Это типичная корпоративная сеть с тремя уровнями (уровень доступа, распределения и ядра). В качестве динамической маршрутизации используется протокол OSPF, для отказоустойчивости доступности шлюза — HSRP. Имеем четыре коммутатора уровня доступа и четыре сети VLAN со своей адресацией. Также подключен отдельный коммутатор уровня распределения, за ним сеть 192.
.
В качестве 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.
для Kali и16. 0. 1 172.
для Cisco CSR);16. 0. 2 - задание адреса источника
212.
;100. 144. 100 - задание адреса назначения
100.
.132. 55. 100
EdgeGW(config)# interface tunnel 1EdgeGW(config-if)# tunnel mode gre ipEdgeGW(config-if)# ip address 172.16.0.2 255.255.255.0EdgeGW(config-if)# tunnel source 212.100.144.100EdgeGW(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.
![Пинг атакующего до второй стороны туннеля Пинг атакующего до второй стороны туннеля](https://static.xakep.ru/images/e76e3c8c4fa50dc3d3da045b38229755/29494/attacker-side-tunnel-csr.png)
![Пинг от Cisco CSR Пинг от Cisco CSR](https://static.xakep.ru/images/e76e3c8c4fa50dc3d3da045b38229755/29493/cisco-csr-ping-to-attacker-gre.png)
Посмотрим на таблицу маршрутизации, добавим некоторые маршруты до подсетей, чтобы проверить доступность.
![Таблица маршрутизации пограничного роутера Cisco CSR Таблица маршрутизации пограничного роутера Cisco CSR](https://static.xakep.ru/images/e76e3c8c4fa50dc3d3da045b38229755/29495/routing-table-csr.png)
Прописываем маршруты до целевых подсетей. Адресом шлюза в данном случае будет адрес логического GRE-интерфейса роутера Cisco CSR — 172.
.
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 внутренней инфраструктуры](https://static.xakep.ru/images/e76e3c8c4fa50dc3d3da045b38229755/29492/nmap-ssh.png)
Примерно так будет выглядеть пакет с инкапсуляцией, если атакующий взаимодействует с внутренней сетью (ICMP, на примере внутренней подсети назначения 192.168.20.0/24).
![](https://static.xakep.ru/images/e76e3c8c4fa50dc3d3da045b38229755/29480/gre-headers.png)
L3 GRE VPN поверх RouterOS
Теперь продемонстрирую пример на оборудовании Mikrotik. Здесь абсолютно те же принципы настройки, разница лишь в синтаксисе и иерархии расположения сущностей (интерфейсы, IP-адресация и так далее).
info
Здесь приведены команды именно для RouterOS v. 6.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»