При настройке мер безопасности сетевое оборудование часто остается без присмотра администраторов, что повышает вероятность взлома и получения контроля над такими устройствами. Что делать, если злоумышленник уже получил контроль над пограничным оборудованием? Сможет ли он подобраться к внутренней инфраструктуре?
Пивотирование (от англ. pivoting, а не от слова «пиво») — это набор техник, позволяющих получить доступ к внутренним ресурсам, обойти сетевую изоляцию, средства сетевой защиты и брандмауэр. Довольно много было сказано о повороте через традиционные сервисы, такие как SSH, OVPN и другие. Тем не менее, в своем исследовании я продемонстрирую нетрадиционные методы обхода граничного сетевого оборудования с использованием протокола GRE.
GRE
GRE (Generic Routing Encapsulation) — это протокол инкапсуляции сетевых пакетов IP, разработанный инженерами Cisco. В производстве он приобрел большую популярность, так как решает проблемы создания каналов VPN для организаций. GRE инкапсулирует непосредственно в IP-пакет и обходит транспортный уровень. Кстати, в контексте IP-пакета у GRE есть свой числовой идентификатор — 47
. На самом деле GRE не обеспечивает защиты туннелируемых данных. Поэтому в продакшене обычно скрещивают GRE и IPSec для обеспечения безопасности данных. В этой статье я совсем немного расскажу о GRE, чтобы вы поняли, зачем он нам нужен.
Туннелирование GRE здесь включает три объекта:
- раздаточная головка. Представляет IP-пакет с общедоступными адресами источника/назначения. Благодаря ему инкапсулированный пакет сможет добраться до адресата в Интернете. Размер 20 байт;
- пакет ГРЭ. Размер 4 байта;
- пассажир. Это полезная нагрузка, трафик, генерируемый законными сервисами.


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

Лабораторная сеть
Сеть, показанная на схеме, будет выполнять роль лабораторной стойки.

Это типичная корпоративная сеть с тремя уровнями (доступ, распределение и ядро). Протокол 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.
для Кали и16. 0. 1 172.
для Cisco CSR);16. 0. 2 - адрес адрес источник
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.
EdgeGW(config-if)# tunnel source 212.100.144.100
EdgeGW(config-if)# tunnel destination 100.132.55.100
Теперь пришло время для другой стороны туннеля GRE. В нашем случае этой «второй стороной» будет хост злоумышленника. Linux отлично поддерживает GRE с необходимым модулем ядра ip_gre
. И это почти везде.
Вот шаги:
- импорт основных модулей;
- создание логического интерфейса с указанием типа, адресов источника и назначения;
- адрес выделения логического интерфейса;
- включение интерфейса.
[email protected]:~$ sudo modprobe ip_gre
[email protected]:~$ sudo ip link add name evilgre type gre local 100.132.55.100 remote 212.100.144.100
[email protected]:~$ sudo ip addr add 172.16.0.1/24 dev evilgre
[email protected]:~$ sudo ip link set evilgre up
Проверим работу туннеля через пинг до интерфейса туннеля Cisco CSR.


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

Прописываем маршруты к целевым подсетям. Адрес шлюза в этом случае будет адресом логического GRE-интерфейса маршрутизатора Cisco CSR — 172.
.
[email protected]:~$ sudo route add -net 10.10.50.0 netmask 255.255.255.0 gw 172.16.0.2
[email protected]:~$ sudo route add -net 10.10.110.0 netmask 255.255.255.0 gw 172.16.0.2
[email protected]:~$ sudo route add -net 10.10.140.0 netmask 255.255.255.0 gw 172.16.0.2
[email protected]:~$ sudo route add -net 10.10.210.0 netmask 255.255.255.0 gw 172.16.0.2
[email protected]:~$ sudo route add -net 192.168.20.0 netmask 255.255.255.0 gw 172.16.0.2
[email protected]:~$ sudo nmap -n -p 22 -iL targets -oA result

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

L3 GRE VPN поверх RouterOS
Сейчас я продемонстрирую пример оборудования Mikrotik. Это абсолютно те же принципы настройки, разница только в синтаксисе и иерархии расположения устройств (интерфейсы, IP-адресация и так далее).
Информация
Вот команды, характерные для RouterOS v. 6.