Мы все давно слышали о атаках с использованием двойных тегов VLAN. Было много ссылок и даже единый пакет, подтверждающий концепцию атаки с использованием двойной маркировки VLAN, но ни одна из них не демонстрирует вооруженную атаку.
В этом блоге
Что такое VLAN?
Прежде чем углубиться в концепцию тегирования VLAN (виртуальной локальной сети), важно понять необходимость VLAN. Когда мы создаем сеть, в этой сети будет множество хостов, взаимодействующих друг с другом.
Сети VLAN обеспечивают гибкость размещения сети, позволяя нескольким сетевым конфигурациям на каждом коммутаторе, позволяя отделять устройства конечных точек друг от друга, даже если они могут быть подключены к одному физическому коммутатору. В больших сетях разделение VLAN также помогает разбить широковещательные домены на более мелкие группы. Широковещательный домен можно рассматривать как сеть, в которой все узлы обмениваются данными на канальном уровне.
В сети VLAN все пакеты назначаются с идентификатором VLAN. По умолчанию все порты коммутатора считаются членами собственной VLAN, если не назначена другая VLAN. VLAN-1 по умолчанию является собственной VLAN, и сетевые пакеты собственной VLAN не будут иметь метки на них. Следовательно, такой трафик будет передаваться без тегов в сети VLAN.
Например, если мы попытаемся установить связь с хостом в сети VLAN, сетевой пакет будет иметь тег VLAN (в данном случае это ID: тег 20), как показано на рисунке:
Что такое двойная маркировка VLAN?
Прежде чем разбираться в эксплуатации, давайте кратко рассмотрим двойную маркировку VLAN. На рисунке ниже показана схема сети, которая не требует пояснений:
Обратите внимание, что злоумышленник находится в VLAN-1, собственной VLAN, которая потребуется для атаки с двойной маркировкой, а сервер-жертва находится в VLAN-20. Сервер имеет локальный IP-адрес «10.0.20.11», который недоступен с компьютера злоумышленника «kali-internal» в VLAN-1, как показано на рисунке ниже:
Машина злоумышленника имеет два интерфейса, и «eth2» подключен к сети VLAN-1. На рисунке ниже показана конфигурация сети интерфейса «eth2»:
Когда дело доходит до эксплуатации VLAN, Yersinia - инструмент выбора. Yersinia предоставляет Proof of Concept (PoC), используя пакет ICMP. Мы реплицировали PoC, используя Yersinia для отправки ICMP-пакетов, и это показано на рисунке ниже:
Давайте подтвердим двойную метку VLAN на каждой ссылке в сети.
На приведенном ниже рисунке показан трафик, захваченный по каналу «1», который соединяет сеть VLAN-1 и маршрутизатор «R1». На рисунке показан пакет ICMP для адреса «10.0.20.11» с двумя тегами VLAN 802.1Q:
На рисунке ниже показан трафик, захваченный по каналу «Магистраль», который соединяет маршрутизатор «R1» и маршрутизатор «R2». Когда трафик VLAN проходит через магистраль, все собственные пакеты VLAN передаются без тегов, то есть без тегов, следовательно, эта атака может быть выполнена только из собственной сети VLAN.
Здесь, в этом случае, тег VLAN-1 был удален, и пакет имел только тег VLAN-20.
Теперь трафик находится в сети VLAN-20, и поэтому метка VLAN-20 была удалена маршрутизатором «R2», как показано на рисунке ниже, который также показывает трафик, захваченный на линии «2», соединяющей маршрутизатор «R2» и сервер-жертву:
Попробуем повторить ту же атаку, используя нативные инструменты Linux.
Двойная пометка с использованием собственных инструментов
Мы будем использовать утилиту vconfig, доступную на всех машинах Linux. Используя эту утилиту, мы могли создать интерфейс, который позволял бы нам отправлять пакеты с двойной меткой в сеть. Мы написали сценарий, подробно описывающий каждый шаг, как показано на рисунке ниже, чтобы помочь вашей сети настроить двойную метку трафика вашей машины в режиме реального времени:
Здесь мы использовали модули ядра 802.1Q, чтобы разрешить передачу помеченных пакетов. Виртуальный интерфейс «eth2.1» создается с использованием vconfig, который автоматически маркирует пакеты с идентификатором VLAN 1. Другой интерфейс «eth2.1.20», который маркирует пакеты с идентификатором VLAN 20, создается на «eth2.1», что приводит к двойной маркировке исходящий пакет.
При выполнении этого скрипта вы получите следующий вывод:
Чтобы проверить нашу конфигурацию для двойной маркировки на трафике в реальном времени. Давайте пропингуем сервер-жертву «10.0.20.11», как показано на рисунке ниже:
Мы можем видеть трафик, захваченный по ссылке «1», по которой ICMP-пакеты, отправленные на сервер-жертву, получают двойную метку:
Трафик, захваченный по ссылке «2», подтверждает, что пакеты также достигли сервера-жертвы:
Это подтверждает нашу способность передавать фактический трафик в другую VLAN. Теперь давайте попробуем вооружить атаку.
Оружейная двойная метка
Чтобы использовать это в своих целях, мы начали с трафика TCP и сразу же столкнулись с препятствиями, что заставило нас пересмотреть наши основные принципы. Используя пошаговый подход к пониманию проблемы, мы запустили сервер на компьютере жертвы, как показано на рисунке:
На компьютере злоумышленника мы запустили простой «wget» для доступа к содержимому веб-сервера, размещенного на сервере-жертве, как показано ниже:
Видно, что wget не может найти веб-сервер. Это не из-за неправильной конфигурации двойных тегов. Это связано с тем, что «HTTP» использует протокол TCP, а TCP требует трехстороннего рукопожатия для установления соединения. При запросе wget он сначала попытается установить полное трехстороннее рукопожатие TCP перед фактическим обменом данными. На рисунке ниже показан трафик, захваченный по каналу «2», который показывает пакет «SYN», отправленный с компьютера злоумышленника на сервер-жертву:
Поскольку жертва является членом VLAN-20, ответный пакет от жертвы будет иметь тег VLAN-20. Поскольку злоумышленник является частью VLAN-1, другой VLAN, злоумышленник не получит никакого ответа от жертвы.
Атака двойного тегирования VLAN - это односторонняя связь, компьютер-злоумышленник не получит пакет «SYN-ACK» для завершения трехстороннего рукопожатия, как показано на рисунке:
Для демонстрации мы попытались установить связь с жертвой по TCP-порту 8080, и состояние сети на компьютере злоумышленника равно «SYN_SENT», как показано на рисунке:
На компьютере жертвы состояние сети для этого пакета запроса - «SYN_RCV», как показано на рисунке:
Значение «SYN-ACK», отправленное жертвой, никогда не достигало атакующего в другой VLAN. На данный момент это подтверждает вывод о том, что мы не можем атаковать службу TCP в другой VLAN.
А как насчет услуг UDP? Есть несколько служб, работающих на портах UDP, и порты UDP большую часть времени остаются незамеченными в процессе взаимодействия.
Поскольку UDP является протоколом без установления соединения, он не требует рукопожатия. Он отправляет данные напрямую, поэтому мы можем отправлять пакеты любой службе UDP в другой VLAN. Для демонстрации атаки мы использовали сервер «Log4j» с уязвимостью
На рисунке ниже показано, что служба «Log4j» прослушивает UDP-порт «12345» на сервере жертвы:
Чтобы проверить успешность нашей атаки, мы попытаемся создать файл с именем «success» в папке «/ tmp /» на сервере жертвы. На рисунке ниже показано текущее содержимое «/ tmp /» на сервере:
Сервис «Log4j» принимает журналы в сериализованном формате, мы используем инструмент Ysoserial для генерации сериализованной полезной нагрузки и запускаем ее для выполнения атаки на сервер-жертву на указанном порту, как показано ниже.
Анализируя трафик на Wireshark, мы подтвердили, что полезная нагрузка UDP достигла сети VLAN-20:
Полезная нагрузка достигла сервера-жертвы и создала файл с именем «success» в папке «/ tmp /», как показано на рисунке ниже:
Теперь давайте возьмем оболочку, однако мы снова застряли с односторонним ограничением связи. Мы можем преодолеть это ограничение, используя общедоступный сервер (скажем, kali-Internet). Мы запустили прослушиватель на сервере «Кали-Интернет» через порт «32323» через Интернет, как показано на рисунке:
Мы создаем сериализованную полезную нагрузку, используя ysoserial, который отправляет оболочку в «kali-Internet».
После выполнения полезной нагрузки на сервере-жертве мы получаем оболочку через Интернет. Быстро перебирая «/ etc / hostname» сервера, он читает «Victim __ [eth0: _10.0.20.11 / 24]», который является нашим сервером-жертвой, как показано на рисунке ниже:
И вот как мы можем использовать метод двойных тегов VLAN для реальной эксплуатации служб UDP.
TCP атака вновь
После того, как мы смогли использовать службу UDP, мы захотели вернуться к TCP и посмотреть, можно ли что-нибудь сделать, поэтому мы провели несколько тестов. Раздел ниже - это просто приключение в стране чудес, и мы делаем предположения, чтобы увидеть, можно ли что-нибудь сделать. Первым серьезным препятствием на нашем пути было то, что трехстороннее рукопожатие не могло быть завершено. Давайте углубимся в рукопожатие и поймем узкое место.
Мы настраиваем следующее:
Мы можем проверить это, посмотрев вывод netstat на компьютере злоумышленника: соединение находится в состоянии SYN_SENT.
Это заставило нас задуматься о том, что если мы эмулируем SYN ACK, сервер отправит полный запрос жертве. Итак, мы проверили это с помощью утилиты Hping3:
Это действительно привело к установлению соединения, как можно видеть ниже:
Теперь, когда для каждого злоумышленника установлено соединение, злоумышленник отправляет запрос HTTP, который должным образом принимается и перехватывается на стороне жертвы.
Это показывает, что, если мы сможем получить действительные значения «Seq» и «Ack», может быть установлено успешное TCP-соединение и возможна атака на службу TCP. Однако эта атака была бы очень легкой, если бы RFC 6528 не существовало (
Ограничения
Для выполнения атаки двойного тегирования 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?
Прежде чем разбираться в эксплуатации, давайте кратко рассмотрим двойную маркировку VLAN. На рисунке ниже показана схема сети, которая не требует пояснений:
Обратите внимание, что злоумышленник находится в VLAN-1, собственной VLAN, которая потребуется для атаки с двойной маркировкой, а сервер-жертва находится в VLAN-20. Сервер имеет локальный IP-адрес «10.0.20.11», который недоступен с компьютера злоумышленника «kali-internal» в VLAN-1, как показано на рисунке ниже:
Машина злоумышленника имеет два интерфейса, и «eth2» подключен к сети VLAN-1. На рисунке ниже показана конфигурация сети интерфейса «eth2»:
Когда дело доходит до эксплуатации VLAN, Yersinia - инструмент выбора. Yersinia предоставляет Proof of Concept (PoC), используя пакет ICMP. Мы реплицировали PoC, используя Yersinia для отправки ICMP-пакетов, и это показано на рисунке ниже:
Давайте подтвердим двойную метку VLAN на каждой ссылке в сети.
На приведенном ниже рисунке показан трафик, захваченный по каналу «1», который соединяет сеть VLAN-1 и маршрутизатор «R1». На рисунке показан пакет ICMP для адреса «10.0.20.11» с двумя тегами VLAN 802.1Q:
На рисунке ниже показан трафик, захваченный по каналу «Магистраль», который соединяет маршрутизатор «R1» и маршрутизатор «R2». Когда трафик VLAN проходит через магистраль, все собственные пакеты VLAN передаются без тегов, то есть без тегов, следовательно, эта атака может быть выполнена только из собственной сети VLAN.
Здесь, в этом случае, тег VLAN-1 был удален, и пакет имел только тег VLAN-20.
Теперь трафик находится в сети VLAN-20, и поэтому метка VLAN-20 была удалена маршрутизатором «R2», как показано на рисунке ниже, который также показывает трафик, захваченный на линии «2», соединяющей маршрутизатор «R2» и сервер-жертву:
Попробуем повторить ту же атаку, используя нативные инструменты Linux.
Двойная пометка с использованием собственных инструментов
Мы будем использовать утилиту vconfig, доступную на всех машинах Linux. Используя эту утилиту, мы могли создать интерфейс, который позволял бы нам отправлять пакеты с двойной меткой в сеть. Мы написали сценарий, подробно описывающий каждый шаг, как показано на рисунке ниже, чтобы помочь вашей сети настроить двойную метку трафика вашей машины в режиме реального времени:
Здесь мы использовали модули ядра 802.1Q, чтобы разрешить передачу помеченных пакетов. Виртуальный интерфейс «eth2.1» создается с использованием vconfig, который автоматически маркирует пакеты с идентификатором VLAN 1. Другой интерфейс «eth2.1.20», который маркирует пакеты с идентификатором VLAN 20, создается на «eth2.1», что приводит к двойной маркировке исходящий пакет.
При выполнении этого скрипта вы получите следующий вывод:
Чтобы проверить нашу конфигурацию для двойной маркировки на трафике в реальном времени. Давайте пропингуем сервер-жертву «10.0.20.11», как показано на рисунке ниже:
Мы можем видеть трафик, захваченный по ссылке «1», по которой ICMP-пакеты, отправленные на сервер-жертву, получают двойную метку:
Трафик, захваченный по ссылке «2», подтверждает, что пакеты также достигли сервера-жертвы:
Это подтверждает нашу способность передавать фактический трафик в другую VLAN. Теперь давайте попробуем вооружить атаку.
Оружейная двойная метка
Чтобы использовать это в своих целях, мы начали с трафика TCP и сразу же столкнулись с препятствиями, что заставило нас пересмотреть наши основные принципы. Используя пошаговый подход к пониманию проблемы, мы запустили сервер на компьютере жертвы, как показано на рисунке:
На компьютере злоумышленника мы запустили простой «wget» для доступа к содержимому веб-сервера, размещенного на сервере-жертве, как показано ниже:
Видно, что wget не может найти веб-сервер. Это не из-за неправильной конфигурации двойных тегов. Это связано с тем, что «HTTP» использует протокол TCP, а TCP требует трехстороннего рукопожатия для установления соединения. При запросе wget он сначала попытается установить полное трехстороннее рукопожатие TCP перед фактическим обменом данными. На рисунке ниже показан трафик, захваченный по каналу «2», который показывает пакет «SYN», отправленный с компьютера злоумышленника на сервер-жертву:
Поскольку жертва является членом VLAN-20, ответный пакет от жертвы будет иметь тег VLAN-20. Поскольку злоумышленник является частью VLAN-1, другой VLAN, злоумышленник не получит никакого ответа от жертвы.
Атака двойного тегирования VLAN - это односторонняя связь, компьютер-злоумышленник не получит пакет «SYN-ACK» для завершения трехстороннего рукопожатия, как показано на рисунке:
Для демонстрации мы попытались установить связь с жертвой по TCP-порту 8080, и состояние сети на компьютере злоумышленника равно «SYN_SENT», как показано на рисунке:
На компьютере жертвы состояние сети для этого пакета запроса - «SYN_RCV», как показано на рисунке:
Значение «SYN-ACK», отправленное жертвой, никогда не достигало атакующего в другой VLAN. На данный момент это подтверждает вывод о том, что мы не можем атаковать службу TCP в другой VLAN.
А как насчет услуг UDP? Есть несколько служб, работающих на портах UDP, и порты UDP большую часть времени остаются незамеченными в процессе взаимодействия.
Поскольку UDP является протоколом без установления соединения, он не требует рукопожатия. Он отправляет данные напрямую, поэтому мы можем отправлять пакеты любой службе UDP в другой VLAN. Для демонстрации атаки мы использовали сервер «Log4j» с уязвимостью
Ссылка скрыта от гостей
в режиме UDP. На рисунке ниже показано, что служба «Log4j» прослушивает UDP-порт «12345» на сервере жертвы:
Чтобы проверить успешность нашей атаки, мы попытаемся создать файл с именем «success» в папке «/ tmp /» на сервере жертвы. На рисунке ниже показано текущее содержимое «/ tmp /» на сервере:
Сервис «Log4j» принимает журналы в сериализованном формате, мы используем инструмент Ysoserial для генерации сериализованной полезной нагрузки и запускаем ее для выполнения атаки на сервер-жертву на указанном порту, как показано ниже.
Анализируя трафик на Wireshark, мы подтвердили, что полезная нагрузка UDP достигла сети VLAN-20:
Полезная нагрузка достигла сервера-жертвы и создала файл с именем «success» в папке «/ tmp /», как показано на рисунке ниже:
Теперь давайте возьмем оболочку, однако мы снова застряли с односторонним ограничением связи. Мы можем преодолеть это ограничение, используя общедоступный сервер (скажем, kali-Internet). Мы запустили прослушиватель на сервере «Кали-Интернет» через порт «32323» через Интернет, как показано на рисунке:
Мы создаем сериализованную полезную нагрузку, используя ysoserial, который отправляет оболочку в «kali-Internet».
После выполнения полезной нагрузки на сервере-жертве мы получаем оболочку через Интернет. Быстро перебирая «/ etc / hostname» сервера, он читает «Victim __ [eth0: _10.0.20.11 / 24]», который является нашим сервером-жертвой, как показано на рисунке ниже:
И вот как мы можем использовать метод двойных тегов VLAN для реальной эксплуатации служб UDP.
TCP атака вновь
После того, как мы смогли использовать службу UDP, мы захотели вернуться к TCP и посмотреть, можно ли что-нибудь сделать, поэтому мы провели несколько тестов. Раздел ниже - это просто приключение в стране чудес, и мы делаем предположения, чтобы увидеть, можно ли что-нибудь сделать. Первым серьезным препятствием на нашем пути было то, что трехстороннее рукопожатие не могло быть завершено. Давайте углубимся в рукопожатие и поймем узкое место.
Мы настраиваем следующее:
- Запустить слушатель на компьютере жертвы
- Начать захват трафика на компьютере жертвы
- Отправил запрос wget от атакующего компьютера
Мы можем проверить это, посмотрев вывод netstat на компьютере злоумышленника: соединение находится в состоянии SYN_SENT.
Это заставило нас задуматься о том, что если мы эмулируем SYN ACK, сервер отправит полный запрос жертве. Итак, мы проверили это с помощью утилиты Hping3:
Это действительно привело к установлению соединения, как можно видеть ниже:
Теперь, когда для каждого злоумышленника установлено соединение, злоумышленник отправляет запрос HTTP, который должным образом принимается и перехватывается на стороне жертвы.
Это показывает, что, если мы сможем получить действительные значения «Seq» и «Ack», может быть установлено успешное TCP-соединение и возможна атака на службу TCP. Однако эта атака была бы очень легкой, если бы RFC 6528 не существовало (
Ссылка скрыта от гостей
). Этот RFC реализует последовательности TCP и числа Ack, рандомизированные на самом уровне протокола. Однако мы хотели раскрыть это, чтобы, если кто-то захочет пойти по этому пути, у него были некоторые детали того, что люди пытались сделать до сих пор.Ограничения
Для выполнения атаки двойного тегирования VLAN необходимы следующие предварительные условия:
- Злоумышленник должен находиться в собственной сети VLAN.
- Атакующий должен иметь следующую информацию о сервере жертвы:
- Информация VLAN сервера.
- Уязвимый UDP сервис и порт.
- Никогда не используйте собственный VLAN для любой сети. По умолчанию VLAN-1 является собственной VLAN.
- Если это необходимо, измените собственный VLAN с идентификатора VLAN 1
- При настройке сети VLAN настройте интерфейсы конечных точек как порты доступа.
- Всегда указывайте разрешенные идентификаторы VLAN на транк, никогда не позволяйте всему трафику VLAN проходить через любой транковый порт.
Ссылка скрыта от гостей