Так ли безопасны сети провайдеров и крупных компаний, использующих технологии VPN для организации своих внутренних сетей сегодня? Давай проверим.

 

Заводим киску

Одна и та же задача создания виртуальных соединений и сетей (VPN) может быть решена как минимум двумя принципиально разными способами. Первый предполагает создание виртуальных каналов (тоннелей) поверх транспортного протокола, обычно на базе IP или Ethernet. Узел-клиент, используя свои учетные данные, устанавливает соединение «точка-точка» с сервером доступа, и уже через этот вновь образованный канал осуществляет прием и передачу данных. При этом как процедура авторизации, так и информационный обмен может быть зашифрован как весь, так и частично (только заголовок и пароль авторизации). Второй способ строится на базе коммутируемого Ethernet с использованием виртуальных сетей VLAN. Разделение сетей на виртуальные происходит на уровне коммутатора, который имеет возможность выделять на канальном уровне одного или нескольких пользователей в группу по некоторым признакам, которыми могут быть порт или МАС-адрес.

Именно с VLAN мы и будем сегодня экспериментировать. Основной инструмент, который нам понадобится — это Dynamips, позволяющий эмулировать маршрутизаторы Cisco на обычной машине под управлением ОС Windows. С его помощью нам будут доступны все команды реального Cisco IOS (поскольку именно его мы и будем использовать).

Для Dynamips существует как минимум два облегчающих работу фронтэнд-интерфейса: Dynagen и GNS3 (графическая версия Dynamips). Я остановился на Dynagen (dynagen.org). После его установки на рабочем столе появятся четыре ярлыка:

  • Dynagen Sample Labs — примеры конфигурации устройств Cisco;
  • Dynamips Server — непосредственно сам сервер;
  • Network device list – средство просмотра списка сетевых устройств, присутствующих физически в нашей системе (он понадобится нам чуть позже, при подключении моделируемого маршрутизатора к реальной сети);
  • Pemu Server – эмулятор устройств Cisco PIX.

Для эмуляции работы виртуальной частной сети нам понадобится образ программного обеспечения реального маршрутизатора. Образ базовой Cisco IOS 7200, под которую и писался Dynamips, очень тяжелый, долго грузится и вообще нестабильно себя ведет на моем стенде. Поэтому лучше использовать более легкий, например c3745-advipservicesk9-mz.124-15.T6.bin. В принципе Dynagen будет нормально работать и со сжатым файлом, каковым является любой образ Cisco IOS, однако декомпрессия увеличит время загрузки, поэтому неплохо бы его сначала распаковать при помощи 7z или rar, но это не обязательно.

 

Строим виртуальный DATA-центр

Dynagen использует файлы с расширением *.net, в которых содержится информация о конфигурации маршрутизаторов, коммутаторов и соединений между ними.
Мы не будем редактировать сэмплы, а напишем свой конфиг с нуля:

# Simple Cisco 3745 with 2 real interfaces
autostart = False
[localhost]
[[3745]]
image = Program FilesDynamipsimages
c3745-advipservicesk9-mz.124-15.T6.bin
idlepc = 0x613f07b4
npe = npe-300
ram = 160
[[ROUTER R1]]
console = 2000
model = 3745
cnfg = confi gscisco_3745.cfg
slot1 = NM-16ESW
slot2 = PA-2FE-TX
F1/0 = NIO_gen_eth:Device
NPF_{7C94C2DF-C005-489D-9E50-3199AEFE6F27}
F2/1 = NIO_gen_eth:Device
NPF_{3209EAAB-22CD-453A-965A-D02490DB7EDE}

Разобраться, что к чему, не так уж и сложно.

  • [localhost] — хост, на котором запущен Dynamips.
  • [[3745]] — это обозначение подсекции, поэтому скобки двойные. В данном случае это подсекция [localhost].

Все, что описывается здесь, относится только к localhost. Эта секция описывает все значения по умолчанию, относящиеся ко всем маршрутизаторам серии Cisco 3745, которые мы можем моделировать.

  • image — указывает расположение образа Cisco IOS c3745-advipservicesk9-mz.124-15.T6.bin. Достаточно немного погуглить, чтобы найти именно его или любой другой образ.
  • npe = npe-300 — каждый наш маршрутизатор серии 3745 будет использовать Network Processing Engine 300.
  • ram = 160 — каждый моделируемый маршрутизатор будет использовать 160 Мб оперативной памяти. Само собой, объем необходимой памяти зависит от образа, который мы используем, и количества используемых сервисов, поэтому здесь можно руководствоваться принципом «чем больше, тем лучше» и ставить от 256 Мб.
  • idlepc = 0x613f07b4 – опция, которая указывает время задержки процессора. После запуска приложения нагрузка на процессор возрастает до 100%. Чтобы избежать этого, нужно сделать следующее. Подключись к своему маршрутизатору через telnet и удостоверься, что ты в enable-режиме, то есть стадия загрузки прошла. Затем вернись к приложению Dynagen и набери команду «idlepc get routername» (в нашем случае — «idlepc get R1»).

Ты увидишь список из десяти значений, лучшие из которых будут отмечены звездочкой. Выбери одно из них и нажми <Enter>. После этого нагрузка на CPU должна упасть. Если этого не произошло — нужно выбрать другое значение. Для этого набери «idlepc show routername» (в нашем случае – «idlepc show R1»). Будут выведены значения, вычисленные ранее, и ты сможешь выбрать какое-либо другое. После того, как найдешь наилучшее значение, просто подставь его в наш файл конфигурации.

  • [[ROUTER R1]] — подсекция, описывающая непосредственно маршрутизатор. R1 — это просто имя, используемое Dynamips, оно не имеет отношения к hostname в конфигурации.
  • slot1 = NM-16ESW — в слот 1 мы добавили карту NM-16ESW (FastEthernet с 16 портами), и именно на ней будем в дальнейшем ставить эксперименты с безопасностью.
  • slot2 = PA-2FE-TX — в слот 2 мы добавили карту PA-2FE-TX (FastEthernet с 2 портами). Этот порт на самом деле нам не очень важен, хотя его можно задействовать в нашей конфигурации устройства — к примеру, получать через него реальный выход в интернет.
  • cnfg = configscisco_3745.cfg – собственно, сам файл конфигурации маршрутизатора, ты можешь включить в него все что заблагорассудится, но такие тяжёлые штуки как BGP (Border Gateway Protocol, протокол граничного шлюза), особенно если он FullView (общемировой), я бы не рекомендовал на него вешать. В этом случае для экспериментов лучше поднять никсовый комп с какой-нибудь Quagga.

Примеры конфигурации маршрутизаторов ты легко найдешь в интернете. Если же станет интересно разобраться во всех подробностях этих конфигов, то тебе прямая дорога в соответствующие группы в социальных сетях, например в vk.com/club21939124 — здесь много видео для изучения.

После всех приготовлений запускаем Dynamips Server, а затем — созданный нами файл конфигурации 3745_router.net (для этого достаточно дважды щелкнуть по нему). Откроется 2 окна: «Информационное окно Dynamips» и «Управление маршрутизаторами».

Вот некоторые команды управления маршрутизаторами, которые могут пригодиться:

  • List — список и состояние маршрутизаторов;
  • Start — запуск маршрутизаторов;
  • Start /all — запустить все;
  • Start R1 — запустить R1 (регистр имеет значение);
  • Stop — остановка маршрутизаторов;
  • Stop /all — остановить все;
  • Stop R1 — остановить R1 (регистр имеет значение);
  • Telnet — подключение к маршрутизатору;
  • Telnet /all — подключиться ко всем;
  • Telnet R1 — подключиться к R1 (регистр имеет значение).

Теперь ты можешь поиграть с конфигурацией самого роутера, подключившись к нему через Telnet, и настроить порт F1/0 как access port в VLAN1 или как trunk port с native VLAN1 или VLAN2. В общем, полная свобода действий.

Атака на магистраль — поднимаем trunk с помощью DTP Динамический магистральный протокол (Dynamic Trunk Protocol) обычно используют для согласования параметров магистрального соединения между коммутаторами провайдера или крупной корпоративной сети. В коммутаторах Cisco Catalyst по умолчанию порт работает и не в режиме mode access, и не в режиме mode trunk, но DTP изначально активирован на всех портах. По умолчанию магистральный порт является членом всех виртуальных локальных сетей коммутатора, то есть потенциально через него проходит весь трафик всех виртуальных сетей.

Информация о принадлежности отдельных кадров к виртуальной сети передается в соответствующем теге VLAN. В такой ситуации стоит только нам притвориться магистральным коммутатором, как будет установлено транковое соединение, и мы получим доступ ко всем VLAN’ам, сконфигурированным на коммутаторе. После успешной организации магистрали мы получим полный доступ к пересылаемому по ней трафику, в том числе и ко всем передаваемым служебным сообщениям протоколов маршрутизации.

Задача сама по себе не нова, но поскольку Cisco никогда не публиковала спецификацию DTP, подобный метод проникновения в сеть долгое время считался возможным лишь теоретически и только с использованием составляемых вручную пакетов. Однако при помощи инструмента Auxiliary/spoof/ciso/dtp (metasploit.com/modules/auxiliary/spoof/cisco/dtp) можно легко управлять процессом проникновения в магистраль посредством удобного меню. Всего-то нужно вбить в поле RHOST IP-адрес исследуемого коммутатора и нажать кнопку RUN.

Где получить IP-адрес для атаки? В сети, если немного послушать ее WireShark’ом. В ходе эксперимента после инициализации порта стал доступен VLAN 10, который был ранее сконфигурирован на эмуляторе, а теперь стало возможным подключиться к нему и манипулировать передаваемой там информацией. Перед тем как в научных целях искать магистральный порт (например, порт коммутатора SW0) в каком-нибудь офисном центре или на крыше собственного дома, куда приходит оптическая магистраль, лучше в домашних условиях потренироваться поднимать и захватывать trunk на эмуляторе Cisco. Один важный момент – DТР работает только на коммутаторах Cisco, и если ты увидишь на коммутаторе надпись D-Link, то про DТР ты можешь забыть и переходить к исследованию STP.

 

Атака на провайдера

Конечно, DTP хорош в магистральных сетях, но чаще проводные провайдеры, предоставляющие услуги доступа в интернет по технологии xDSL или FTTP, в своих городских сетях используют протокол STP на оборудовании D-Link с распределением трафика по VLAN’ам. STP применяется для автоматического управления топологией сети с дублирующими каналами. Действительно, если сетевое оборудование связано для надежности избыточным чис лом соединений, то без принятия дополнительных мер кадры будут доставляться получателю в нескольких экземплярах, что приведет к сбоям.

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

Допустим, наш компьютер оснащен двумя сетевыми интерфейсами, один из которых подключен к клиентскому сегменту, а другой — к серверному (например, к SW0 и SW1 или SW0 и R1).

Посылая соответствующие BPDU с помощью metasploit-модуля Forge Spanning-Tree BPDU’s, мы инициируем выборы назначенного моста для обоих сегментов и выигрываем их. Существующий канал между коммутаторами SW0 и SW1 (или между SW0 и R1) выключается, и весь межсегментный трафик направляется через наш компьютер. Что нужно для того, чтобы начать рассылку пакетов изменения дерева сети? Ethernet-розетка, установленная дома и подключенная непосредственно в порт к одному из коммутаторов провайдера, или ADSL-модем, настроенный в режиме моста.

Этот модуль работает еще проще, чем в случае с DТР – тут не надо указывать вообще ничего (даже ip), нужно просто включить компьютер в сеть и нажать RUN, остальное Metasploit сделает сам. MAC-адрес и сетевой интерфейс подставляются в модуль автоматически. Да, чуть не забыл! При таком раскладе, если ты собираешься пропустить через свой компьютер трафик работающих абонентов провайдера, то чтобы этот трафик пошел дальше, нужно задействовать службу маршрутизации, встроенную в Windows XP, как написано тут: support.microsoft.com/kb/315236. Причем если мы выиграли выборы между SW0 и R1, то через наш компьютер пойдет весь трафик этой сети, который мы можем также посмотреть при помощи WireShark.

Однако совсем не обязательно иметь включение в маршрутизатор R1, можно задействовать внешний канал интернета другого провайдера и перенаправить весь трафик фиксированных абонентов на него – в этом случае шанс успешного проникновения в сеть и захвата трафика есть потенциально у любого абонента данной сети.

Соответственно, если VLAN’ов много, то для пропуска трафика мы должны также сконфигурировать их все на своей машине. Тут совсем не обязательно использовать Windows XP, в качестве моста ты можешь использовать собранный эмулятор Cisco с двумя (или более) сетевыми картами, с присутствующей в конфигурации картой NM-16ESW.

Опять же, лучше предварительно потренироваться строить сети на эмуляторе Cisco, а уже только потом ставить эксперименты на реальных сетях.

Конечно, следует учитывать тот факт, что связь между коммутаторами может осуществляться со скоростью 1 Гбит/сек, а «пользовательские» порты способны работать со скоростью всего лишь 100 Мбит/с. В этом случае межсегментное соединение превратится в узкое место с неизбежной потерей пакетов. Ситуация может усугубиться, если часть трафика необходимо каким-либо образом изменить — в этом случае тебе понадобится довольно мощный компьютер, который ты будешь использовать в качестве моста.

 

Заключение

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

Оставить мнение

Check Also

Скрытая сила пробела. Эксплуатируем критическую уязвимость в Apache Tomcat

В этой статье мы поговорим о баге в Apache Tomcat, популярнейшем веб-сервере для сайтов на…