Захищаємо мережу L2 комутаторами

    
 
Доброго часу доби. У даній статті розповідь піде про декілька можливих атаках на мережеве обладнання, захиститися від яких допоможе правильна конфігурація комутаторів.
 
Вся термінологія і конфігураційні команди наведено згідно з документацією компанії Cisco, як негласний галузевий стандарт. На початку опису кожної атаки міститься короткий екскурс в механізм роботи атакується протоколу. Розрахована стаття скоріше на новачків, ніж на ставків-професіоналів.
 
Розглядатися будуть:
 
• Rogue DHCP Server
• DHCP starvation
• CAM-table overflow
• VLAN hopping
• MAC-spoofing
 
За основу взято видеоурок CBT nuggets з циклу CCNA security.
 
 

Rogue DHCP Server

 
Опис
Наведемо спрощену схему роботи протоколу DHCP:
 
 Discover: клієнт, який не має IP-адреси, посилає широкомовний запит на адресу 255.255.255.255, в якому просить відгукнутися наявні в мережі DHCP-сервери.
 Offer: DHCP-сервери надсилають відповідь, в якому пропонують параметри конфігурації (IP-адреса, DNS-сервери, default gateway). Відповідь відсилається на MAC адресу клієнта.
 Request: Клієнт вибирає, з яким сервером (за наявності кількох) йому зручніше працювати і відправляє запит адреси. Даний запит також відправляється широкомовно, але в якості однієї з опцій вже вказується IP-адресу конкретного сервера.
 Acknowledgment: На даному етапі запит підтверджується сервером. Після отримання цього пакету клієнт конфігурує свої мережеві параметри і процес отримання адреси можна вважати таким, що відбувся.
 
 
  
Мета даної атаки — підміна DHCP-сервера. При одночасному знаходженні в мережі двох DHCP-серверів, один з яких «ворожий», деяка частина клієнтів сконфігурує у себе неправильні адреси та інші мережеві реквізити.
 
Внаслідок підміни шлюзу за замовчуванням неавторизований DHCP-сервер отримає можливість прослуховувати весь трафік клієнтів, перенаправляючи надалі пакети за призначенням. Таким чином ми маємо найпростішу реалізацію атаки типу MitM (Man in the Middle), яка може бути здійснена в більшості сучасних мереж.
 
Варто відзначити, що найчастіше атака з підміною DHCP-сервера не є атакою, як такої. Поширені випадки, коли через незнання в мережу підключається SOHO роутер з налаштованим DHCP-сервером, причому підключається він LAN-портом. Після цього у клієнтів, що встигли отримати у нього IP-адреси, спостерігаються як мінімум суттєві втрати швидкості, а найчастіше повна неможливість використання локальних і глобальних ресурсів.
 
 
Методи захисту
Найпростіший спосіб захисту від атак подібного роду — включення на всіх комутаторах функції DHCP snooping. Далі необхідно визначити два типи портів:
 
Довірені — порти комутатора, до яких підключається DHCP-сервер, або інший комутатор.
недовірених — порти для клієнтських підключень, за якими DHCP-сервер перебувати не може, зате цілком може знаходитися атакующее пристрій.
 
У даному випадку DHCP snooping необхідний для того, щоб вказати комутатора, що слід звертати увагу на пакети DHCP offer і acknowledgment, що проходять крізь нього, і не допускати проходження даних пакетів з недовірених портів. Також широкомовні запити від клієнта (discover і request) тепер будуть перенаправлятися тільки на довірені порти. Виглядати топологія повинна приблизно так:
 
Для конфігурації функції DHCP snooping необхідно:
 
1) Включити її на комутаторі:
 
SW(config)#ip dhcp snooping

2) Вказати для яких VLAN потрібно відстежувати пакети:
 
SW(config)#ip dhcp snooping vlan <x>

3) Вказати довірені порти на комутаторі (всі інші за замовчуванням стають недовірених):
 
SW(config-if)#ip dhcp snooping trust

 
Врятувати трафік від прослушки також може шифрування на стороні клієнта, наприклад туннелирование в транспортному режимі.
 
 

DHCP starvation

 
Опис
Ще одна атака, здійснювана за допомогою протоколу DHCP. DHCP-пул, з якого клієнти отримують IP-адреси, обмежений. Наприклад, це може бути 253 адреси (при масці 255.255.255.0). Для нормальної роботи мережі цього має вистачить всім клієнтам, але атака DHCP starvation прагне змінити дану ситуацію. Як відбувається дія:
 
1) Атакуюче пристрій запитує собі IP-адреса у DHCP-сервера і отримує його;
2) MAC-адресу атакуючого пристрої змінюється і вона запитує наступний, вже другий IP-адреса, маскуючись під нового клієнта;
3) Такі дії повторюються до тих пір, поки весь пул IP-адрес на сервер не буде вичерпано.
 
Далі можливі два наслідки, залежно від того, що є метою атаки:
 
• Відмова в обслуговуванні. IP-адреси вичерпані, і нові хости не можуть отримати їх. Таким чином, їх взаємодія з мережею на цьому закінчиться.
• Підміна DHCP-сервера. DHCP starvation відмінно комбінується з попередньою атакою. Так як на основному DHCP-сервері вільних адрес не залишилося, він вибуває з гри, і 100% клієнтів дістається ворожому атакуючому DHCP-серверу.
 
 
Методи захисту
Найпростіший спосіб захисту — обмеження числа MAC-адрес на порту комутатора. Реалізується це за допомогою функції port-security:
 
1) Переводимо порт в access режим:
 
SW(config-if)#switchport mode access

2) Включаємо port-security на інтерфейсі:
 
SW(config-if)#switchport port-security

3) Обмежуємо число MAC-адрес на інтерфейсі:
 
SW(config-if)switchport port-security maximum <x>

4) Вибираємо спосіб вивчення MAC-адрес комутатором (статичний, sticky): Відмінність статичної адреси від sticky адреси полягає в тому, що статичні адреси необхідно прописувати руками, а sticky вивчаються автоматично і зберігаються в конфігураційний файл.
 
SW(config-if)#switchport port-security mac-address <mac-address | sticky>

5) Задаємо тип реагування на перевищення числа дозволених MAC-адрес:
protect — після переповнення всі пакети, відправлені з інших MAC-адрес відкидаються.
restrict — те ж саме, але з повідомленням в syslog або по SNMP.
shutdown — порт вимикається до автоматичного або ручного його підняття, також відправляються повідомлення.
 
SW(config-if)#switchport port-security violation <protect | restrict | shutdown>

 
Таким чином атакующее пристрій просто не зможе вичерпати ліміт IP-адрес DHCP-пулу, так як комутатор не дозволить йому безкарно змінювати свій MAC-адресу.
 
Також тут може допомогти все той же DHCP snooping, а саме команда
 
SW(config-if)ip dhcp snooping limit rate <x>

 
Дана команда обмежує кількість DHCP пакетів в секунду на порт (рекомендується не більше 100 pps), а при перевищенні даного обмеження переводить порт в стан err-disable, тобто тимчасово вимикає його. Звичайний клієнт не перевищить даний ліміт, а от атакуюча пристрій, що генерує сотні MAC-адрес в секунду, буде виявлено.
 
 

Сam-table overflow

 
Опис
Для того, щоб зрозуміти, як працює дана атака, необхідно розуміти принцип роботи комутатора.
 
 
Уявімо новий комутатор SW, до якого підключені два хоста PC1 (MAC 0000.1111.1111) і PC2 (MAC 0000.2222.2222). На них вже налаштовані IP-адреси (10.0.0.1 і 10.0.0.2) і вони хочуть спілкуватися один з одним. Так як вони розташовуються в одній підмережі, наявність маршрутизатора не потрібно і весь обмін пакетами відбуватиметься за допомогою комутатора. Отже, яка послідовність встановлення їх спілкування:
 
1) PC1 хоче звернутися до PC2 за IP-адресою. Проте MAC-адресу PC2 йому невідомий, тому PC1 використовує протокол ARP. Відправляється широкомовний запит: «Комп'ютер з IP-адресою 10.0.0.2, повідомте будь ласка свій MAC-адресу комп'ютера з адресою 10.0.0.1, щоб я міг спілкуватися з вами».
2) Комутатор пересилає запит на всі свої порти, але записує відповідність MAC-адреси відправника (0000.1111.1111) і порту, тепер всі кадри, адресовані даному одержувачу він буде пересилати безпосередньо, а не навмання у всі доступні інтерфейси.
3) PC2 отримує адресований йому пакет, розуміє що повинен відповісти, і повідомляє свій MAC-адресу PC1. Комутатор при цьому заносить в CAM-таблицю (таблицю MAC-адрес) запис виду: (інтерфейс gig1 / 2 — MAC 0000.2222.2222). Тепер, коли комп'ютери будуть обмінюватися інформацією, задіятися будуть тільки два порти, за якими вони розташовані. На інші інформація пересилатися не буде.
 
Основний сенс в тому, що якщо комутатор бачить адресу одержувача в своїй CAM-таблиці, він пересилає кадр в конкретний порт. Якщо не бачить — влаштовує трансляцію, в надії, що кадр таки знайде адресата.
 
На підставі цього правила і працює розглянута атака. Справа в тому, що розмір таблиці MAC-адрес у будь-якого комутатора обмежений. При переповненні старі адреси видаляються, замінюючись новими (FIFO).
 
Таким чином необхідно всього лише згенерувати велику кількість адрес і змусити комутатор записати їх в свою таблицю, щоб реальні адреси реальних пристроїв вийшли з неї. У такому випадку комутатор почне, розсилати кадри, адресовані конкретному одержувачу на всі порти, що знаходяться в тому ж VLAN, отже у атакуючого пристрою з'явиться можливість перехопити і прочитати їх.
 
Слід зауважити, що всі комутатори, підключені до атакованому також підхоплять фальшиві MAC-адреси і почнуть вести трансляцію всіх кадрів.
 
 
Методи захисту
1) Port-security на всіх access-портах з лімітуванням максимального кількість MAC-адрес.
2) Шифрування трафіку — в такому випадку хоч всі кадри і будуть розсилатися широкомовно, а продуктивність мережі сильно погіршиться, інформація, що потрапила в чужі руки, не буде прочитана.
 
 

VLAN hopping

 
Опис
Наступна атака базується на можливості комутаторів автоматично погоджувати тип свого порту — access або trunk.
 
Трохи теорії про те, чим access порт відрізняється від trunk порту:
 
Як відомо, протокол 802.1Q повсюдно використовується у всіх сучасних мережах. Суть його полягає в тому, що він злегка розширює ethernet кадр, додаючи туди кілька полів (зокрема поле VLAN Identifier, VID). На підставі даного поля комутатор здатний визначити, якої групи портів адресований той чи інший кадр.
 
 
  
Завдяки полю VID, до одного комутатора можна підключити клієнтів з декількох різних підмереж, тим самим обмеживши широкомовний домен. Також з'являється можливість об'єднати клієнтів, підключених до різних комутаторів в одну логічну мережу.
 
По суті 802.1Q — дуже гнучкий механізм для створення необхідної логічної топології поверх вже існуючої фізичної.
Розглянемо процес передачі кадру в мережі з протоколом 802.1Q.
 
 
  
1) PC1 підключений до access-порту fa2 / 1 комутатора SW1 в 10 VLAN'е. Це означає, що при попаданні кадру на порт комутатора, в нього буде додано 802.1Q header з інформацією про приналежність до VLAN10.
2) SW1 пересилає тегованих кадр на SW2 через trunk-порт.
3) SW2 отримує кадр, дивиться в свою CAM-таблицю і відправляє кадр у відповідний access-порт, заголовок 802.1Q знімається.
 
При цьому можна виділити наступні особливості:
 
• Клієнти нічого не знають про свою приналежність до певного VLAN і працюють з нетегірованнимі кадрами, заголовок 802.1Q з'являється тільки при проходженні кадру через access-порт;
• Порт може бути нетегірован (access) тільки в одному VLAN (вірно для комутаторів Cisco);
• Через тегованих (trunk) порт можна передавати кадри, що належать до різних VLAN.
• Існує так званий native VLAN — при попаданні на trunk-порт кадру без тега, він автоматично буде зарахований до native VLAN. Як правило native VLAN'ом за замовчуванням вважається VLAN1 (змінності).
При цьому кадри, що належать native VLAN і потрапили в access-порт, передаватися через trunk-порт будуть без тега.
 
Перейдемо до самої атаці:
 
Як вже було сказано, VLAN hopping заснований на тому, що комутатори мають можливість автоматично погоджувати тип порту. Використовується для цього пропріетарний протокол компанії Cisco DTP (Dynamic Trunking Protocol). При його використанні (а він включений за умовчанням) можливі наступні стану порту: dynamic auto, dynamic desirable, static access, static trunk. Надамо зведену таблицю, як узгоджуються стану двох портів, підключених один до одного:
 
 
  
Як ми бачимо, за певних умов, а саме в режимах dynamic auto і dynamic desirable порт комутатора може узгодити свою роботу в режимі trunk. Це означає, що якщо атакуюча пристрій буде вести себе як порт в режимі desirable воно узгодить на себе trunk-порт і отримає доступ до трафіку всіх VLAN'ов, якими оперує комутатор.
 
Основна проблема полягає в тому, що на комутаторах Cisco всі порти за замовчуванням знаходяться в режимі auto. Тому навіть якщо порт налаштований в режимі access / auto при отриманні запиту на узгодження його стан може змінитися на trunk / auto.
 
 
Методи захисту
Рішення даної проблеми дуже просте, але багато хто при конфігуруванні комутаторів забувають його використовувати. Командою
 
SW(config-if)#switchport nonegotiate

ми просто відключаємо можливість автоматичного узгодження і робимо атаку нездійсненною.
 
 
Опис
Ще один можливий вектор атаки VLAN hopping — використання native VLAN і додавання другого тега. Працює він тільки в тому випадку, якщо атакуюча пристрій знаходиться в тому VLAN, який є native VLAN для trunk-порту.
 
 
  
Виходячи з визначення native VLAN, кадр, що прийшов на порт fa2 / 1, що знаходиться в VLAN1, передаватиметься через trunk-порт нетегірованним, але, так як зловмисник PC1 присвоїв йому два заголовка, на виході він виявиться з тегом VLAN2 і дійде до атакується клієнта, чого при нормальній ситуації бути не повинно.
 
Слід зауважити, що така атака є односпрямованої, оскільки неможливо за такою ж схемою передати кадр назад.
 
 
Методи захисту
Захиститися можна таким чином:
 
Призначаємо на всіх trunk-портах невикористовуваний VLAN в якості native.
 
SW(config-if)# switchport trunk native vlan 999

 
Тепер атака нездійсненна, так як VLAN 999 не відноситься ні до одного з access-портів.
 
 

MAC-Spoofing

 
Опис
Суть даної атаки полягає в підміні MAC-адреси на мережевої карти комп'ютера, що дозволяє йому перехоплювати пакети, адресовані іншому пристрою, що знаходиться в тому ж широкомовному домені.
 
У таблиці MAC-адрес комутатора запис з атакованим MAC-адресою буде співвіднесена з інтерфейсом, на якому востаннє був ідентифікований кадр з даними source MAC. Таким чином, до надходження кадру з атакується пристрої, всі дані комутатор, на підставі своєї CAM-таблиці, буде пересилати на атакуючий комп'ютер.
 
Подивимося атаку на практиці. Використовувати будемо наступну топологію:
 
 
  
Таблиця SW:
 
 
  
Домогтися відтворення не вдалося, тому комутатор при включенні порту на PC2 відразу перебивав MAC на інтерфейс Eth0 / 1, і навіть при пинге з PC1 на R в дебагом на SW спостерігалася така картина:
 
 
  
Практично відразу після того, як пакет з MAC-адресою приходив з інтерфейсу Eth0 / 0 комутатор знову прив'язував даний MAC до інтерфейсу Eth0 / 1. Пояснення цьому можна знайти тут:
 
SW# debug ethernet interface

  
 
 
Пов'язано це, як я розумію, з реалізацією емулятора IOU і є своєрідним аналогом keepalive повідомлень. Як видно, обмін пакетами з інтерфейсом Eth0 / 1 відбувається пізніше, ніж з інтерфейсом Eth0 / 0, відповідно, в CAM-таблицю завжди потрапляє Eth0 / 1.
 
На реальних комутаторах можливості випробувати атаку не з'явилося, але за повідомленнями з достовірних джерел вона працює.
 
 
Методи захисту
Офіційно рекомендований метод — включення port-security на інтерфейсі комутатора:
 
 
SW(config-if)#switchport mode access

 
SW(config-if)#switchport port-security

 
SW(config-if)#switchport port-security mac-address 0000.1111.1111

 
Дивимося на таблицю:
 
 
  
І бачимо, що тепер MAC-адресу статично закріплений за інтерфейсом Eth0 / 0. Тепер PC2, що знаходиться за портом Eth0 / 1 недоступний, і атаку можна вважати відбитою.
    
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.