Гостевая статья Использование VLAN Double Tagging

Мы все давно слышали о атаках с использованием двойных тегов VLAN. Было много ссылок и даже единый пакет, подтверждающий концепцию атаки с использованием двойной маркировки VLAN, но ни одна из них не демонстрирует вооруженную атаку.

В этом блоге будет использовать технику двойных тегов VLAN для доступа к VLAN и использовать уязвимость на сервере, который находится в другой VLAN, творчески используя нативные инструменты Linux, и продемонстрировать фактическую эксплуатацию с использованием двойных тегов VLAN. Но сначала основы.

Что такое VLAN?
Прежде чем углубиться в концепцию тегирования VLAN (виртуальной локальной сети), важно понять необходимость VLAN. Когда мы создаем сеть, в этой сети будет множество хостов, взаимодействующих друг с другом.

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

В сети VLAN все пакеты назначаются с идентификатором VLAN. По умолчанию все порты коммутатора считаются членами собственной VLAN, если не назначена другая VLAN. VLAN-1 по умолчанию является собственной VLAN, и сетевые пакеты собственной VLAN не будут иметь метки на них. Следовательно, такой трафик будет передаваться без тегов в сети VLAN.

Например, если мы попытаемся установить связь с хостом в сети VLAN, сетевой пакет будет иметь тег VLAN (в данном случае это ID: тег 20), как показано на рисунке:

VLan_Tag1.png


Что такое двойная маркировка VLAN?
Прежде чем разбираться в эксплуатации, давайте кратко рассмотрим двойную маркировку VLAN. На рисунке ниже показана схема сети, которая не требует пояснений:

Vlan_diag.png


Обратите внимание, что злоумышленник находится в VLAN-1, собственной VLAN, которая потребуется для атаки с двойной маркировкой, а сервер-жертва находится в VLAN-20. Сервер имеет локальный IP-адрес «10.0.20.11», который недоступен с компьютера злоумышленника «kali-internal» в VLAN-1, как показано на рисунке ниже:

Vlan_Unreachable.png


Машина злоумышленника имеет два интерфейса, и «eth2» подключен к сети VLAN-1. На рисунке ниже показана конфигурация сети интерфейса «eth2»:

Vlan_ifconfig.png


Когда дело доходит до эксплуатации VLAN, Yersinia - инструмент выбора. Yersinia предоставляет Proof of Concept (PoC), используя пакет ICMP. Мы реплицировали PoC, используя Yersinia для отправки ICMP-пакетов, и это показано на рисунке ниже:

VLAN_Yersinia.png



Давайте подтвердим двойную метку VLAN на каждой ссылке в сети.

На приведенном ниже рисунке показан трафик, захваченный по каналу «1», который соединяет сеть VLAN-1 и маршрутизатор «R1». На рисунке показан пакет ICMP для адреса «10.0.20.11» с двумя тегами VLAN 802.1Q:

Vlan_wireshark.png



На рисунке ниже показан трафик, захваченный по каналу «Магистраль», который соединяет маршрутизатор «R1» и маршрутизатор «R2». Когда трафик VLAN проходит через магистраль, все собственные пакеты VLAN передаются без тегов, то есть без тегов, следовательно, эта атака может быть выполнена только из собственной сети VLAN.

Здесь, в этом случае, тег VLAN-1 был удален, и пакет имел только тег VLAN-20.

Vlan_wireshark_vlan20_tag.png


Теперь трафик находится в сети VLAN-20, и поэтому метка VLAN-20 была удалена маршрутизатором «R2», как показано на рисунке ниже, который также показывает трафик, захваченный на линии «2», соединяющей маршрутизатор «R2» и сервер-жертву:

Vlan_Wireshark_victim_Vlan20.png



Попробуем повторить ту же атаку, используя нативные инструменты Linux.

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

Interface-script.png



Здесь мы использовали модули ядра 802.1Q, чтобы разрешить передачу помеченных пакетов. Виртуальный интерфейс «eth2.1» создается с использованием vconfig, который автоматически маркирует пакеты с идентификатором VLAN 1. Другой интерфейс «eth2.1.20», который маркирует пакеты с идентификатором VLAN 20, создается на «eth2.1», что приводит к двойной маркировке исходящий пакет.

При выполнении этого скрипта вы получите следующий вывод:

Vlan_Script.png


Чтобы проверить нашу конфигурацию для двойной маркировки на трафике в реальном времени. Давайте пропингуем сервер-жертву «10.0.20.11», как показано на рисунке ниже:

Vlan_ping_victim.png


Мы можем видеть трафик, захваченный по ссылке «1», по которой ICMP-пакеты, отправленные на сервер-жертву, получают двойную метку:

Vlan_Victim_ping_wireshark.png


Трафик, захваченный по ссылке «2», подтверждает, что пакеты также достигли сервера-жертвы:

Vlan_vitim_recieved.png



Это подтверждает нашу способность передавать фактический трафик в другую VLAN. Теперь давайте попробуем вооружить атаку.

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


Vlan_webserver.png


На компьютере злоумышленника мы запустили простой «wget» для доступа к содержимому веб-сервера, размещенного на сервере-жертве, как показано ниже:

Vlan_wget.png



Видно, что wget не может найти веб-сервер. Это не из-за неправильной конфигурации двойных тегов. Это связано с тем, что «HTTP» использует протокол TCP, а TCP требует трехстороннего рукопожатия для установления соединения. При запросе wget он сначала попытается установить полное трехстороннее рукопожатие TCP перед фактическим обменом данными. На рисунке ниже показан трафик, захваченный по каналу «2», который показывает пакет «SYN», отправленный с компьютера злоумышленника на сервер-жертву:


Vlan_synpacket.png


Поскольку жертва является членом VLAN-20, ответный пакет от жертвы будет иметь тег VLAN-20. Поскольку злоумышленник является частью VLAN-1, другой VLAN, злоумышленник не получит никакого ответа от жертвы.

Атака двойного тегирования VLAN - это односторонняя связь, компьютер-злоумышленник не получит пакет «SYN-ACK» для завершения трехстороннего рукопожатия, как показано на рисунке:

Vlan_Syn_diagram.png


Для демонстрации мы попытались установить связь с жертвой по TCP-порту 8080, и состояние сети на компьютере злоумышленника равно «SYN_SENT», как показано на рисунке:

Vlan_Syn_sent.png


На компьютере жертвы состояние сети для этого пакета запроса - «SYN_RCV», как показано на рисунке:

Vlan_Syn_rec.png



Значение «SYN-ACK», отправленное жертвой, никогда не достигало атакующего в другой VLAN. На данный момент это подтверждает вывод о том, что мы не можем атаковать службу TCP в другой VLAN.

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

Поскольку UDP является протоколом без установления соединения, он не требует рукопожатия. Он отправляет данные напрямую, поэтому мы можем отправлять пакеты любой службе UDP в другой VLAN. Для демонстрации атаки мы использовали сервер «Log4j» с уязвимостью в режиме UDP.

На рисунке ниже показано, что служба «Log4j» прослушивает UDP-порт «12345» на сервере жертвы:

vlan_log4jservice.png


Чтобы проверить успешность нашей атаки, мы попытаемся создать файл с именем «success» в папке «/ tmp /» на сервере жертвы. На рисунке ниже показано текущее содержимое «/ tmp /» на сервере:

Vlan_victim_log4j_tmp.png


Сервис «Log4j» принимает журналы в сериализованном формате, мы используем инструмент Ysoserial для генерации сериализованной полезной нагрузки и запускаем ее для выполнения атаки на сервер-жертву на указанном порту, как показано ниже.

Vlan_java_serialization.png


Анализируя трафик на Wireshark, мы подтвердили, что полезная нагрузка UDP достигла сети VLAN-20:

Vlan_Payload_reachvictim.png


Полезная нагрузка достигла сервера-жертвы и создала файл с именем «success» в папке «/ tmp /», как показано на рисунке ниже:

Vlan_payloadsuccess.png


Теперь давайте возьмем оболочку, однако мы снова застряли с односторонним ограничением связи. Мы можем преодолеть это ограничение, используя общедоступный сервер (скажем, kali-Internet). Мы запустили прослушиватель на сервере «Кали-Интернет» через порт «32323» через Интернет, как показано на рисунке:

Vlan_Internet_Kali_listener.png


Мы создаем сериализованную полезную нагрузку, используя ysoserial, который отправляет оболочку в «kali-Internet».

vlan_reverse_shell.png


После выполнения полезной нагрузки на сервере-жертве мы получаем оболочку через Интернет. Быстро перебирая «/ etc / hostname» сервера, он читает «Victim __ [eth0: _10.0.20.11 / 24]», который является нашим сервером-жертвой, как показано на рисунке ниже:

vlan_shell_recieved.png


И вот как мы можем использовать метод двойных тегов VLAN для реальной эксплуатации служб UDP.

TCP атака вновь
После того, как мы смогли использовать службу UDP, мы захотели вернуться к TCP и посмотреть, можно ли что-нибудь сделать, поэтому мы провели несколько тестов. Раздел ниже - это просто приключение в стране чудес, и мы делаем предположения, чтобы увидеть, можно ли что-нибудь сделать. Первым серьезным препятствием на нашем пути было то, что трехстороннее рукопожатие не могло быть завершено. Давайте углубимся в рукопожатие и поймем узкое место.

Мы настраиваем следующее:

  • Запустить слушатель на компьютере жертвы
  • Начать захват трафика на компьютере жертвы
  • Отправил запрос wget от атакующего компьютера
Из перехвата трафика видно, что пакет SYN получен, а пакет SYN-ACK отправлен с компьютера-жертвы с «Seq = 2678105924» и «Ack = 2082233419», однако, как уже было описано, это не достигает злоумышленника.

vlan_tcp_capture.png


Мы можем проверить это, посмотрев вывод netstat на компьютере злоумышленника: соединение находится в состоянии SYN_SENT.

vlan_tcp_address.png


Это заставило нас задуматься о том, что если мы эмулируем SYN ACK, сервер отправит полный запрос жертве. Итак, мы проверили это с помощью утилиты Hping3:

vlan_tcp_hping1.png


Это действительно привело к установлению соединения, как можно видеть ниже:

vlan_tcp_established.png


Теперь, когда для каждого злоумышленника установлено соединение, злоумышленник отправляет запрос HTTP, который должным образом принимается и перехватывается на стороне жертвы.

vlan_tcp_nc_recv.png



Это показывает, что, если мы сможем получить действительные значения «Seq» и «Ack», может быть установлено успешное TCP-соединение и возможна атака на службу TCP. Однако эта атака была бы очень легкой, если бы RFC 6528 не существовало ( ). Этот RFC реализует последовательности TCP и числа Ack, рандомизированные на самом уровне протокола. Однако мы хотели раскрыть это, чтобы, если кто-то захочет пойти по этому пути, у него были некоторые детали того, что люди пытались сделать до сих пор.

Ограничения
Для выполнения атаки двойного тегирования VLAN необходимы следующие предварительные условия:

  • Злоумышленник должен находиться в собственной сети VLAN.
  • Атакующий должен иметь следующую информацию о сервере жертвы:
    • Информация VLAN сервера.
    • Уязвимый UDP сервис и порт.
Санация
  • Никогда не используйте собственный VLAN для любой сети. По умолчанию VLAN-1 является собственной VLAN.
  • Если это необходимо, измените собственный VLAN с идентификатора VLAN 1
  • При настройке сети VLAN настройте интерфейсы конечных точек как порты доступа.
  • Всегда указывайте разрешенные идентификаторы VLAN на транк, никогда не позволяйте всему трафику VLAN проходить через любой транковый порт.
Источник:
 

Вложения

  • 1591884553391.png
    1591884553391.png
    69,8 КБ · Просмотры: 142
  • 1591884916406.png
    1591884916406.png
    14,3 КБ · Просмотры: 137
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!