Дослідження можливостей перенаправлення пакетів в протоколах ARP and ICMP, Інтернет і інші мережі, Security & Hack, статті

Волобуєв І., Underground InformatioN Center

Як це часто буває, відмінності не відрізняються. Я розглядаю 2 офіційних
протоколу моделі TCP / IP-ARP і ICMP, які будучи уважно
розглянуті, можуть використовуватися для досягнення певних цілей.

На даний момент (1997 р. – прим. Перекладача) більше поширення
отримали пасивні типи атак (мережевий сніффінг) для отримання root-доступу
в локальній мережі, активні атаки придбали менше поширені. Однак,
різновиди активних атак в LAN могуть становити велику небезпеку
для системних адміністраторів. Технічні аспекти атаки можуть бути не
цілком очевидні, тому давайте зупинимося на них.

Варіанти атаки, що розглядаються в даному документі, включають спуффінг
(Spoofing-підміна одного з учасників мережевого з’єднання, прим.
перекладача) і DoS (Denial Of Service – відмова в обслуговуванні). IP-blind
spoofing (я б переклав як сліпа підміна IP-адреси) – найбільш загальний і
дуже потужний спосіб атаки, що вимагає великих зусиль і є
досить складним в частині реалізації. На відміну від нього ARP-спуффінг
досить простий.

Оскільки ARP-spoofing можливий тільки в локальній мережі, він є дуже
серйозним способом для розширення меж мережевої атаки в разі отримання
доступу до однієї з машин мережі.

Основи протоколу ARP

Автор пише, що він міг би заглибитися в опис протоколу ARP, але замість
цього рекомендує книгу W. Richard Stevens “TCP / IP Illustrated”. (Прим.
перекладача – ZDNC досить докладно описав нюанси цього протоколу у своїй
статті). Протокол описаний в RFC826.

Опис реалізації атаки

Давайте уявимо гіпотетичну мережу.

 IP         10.0.0.1    10.0.0.2   10.0.0.3    10.0.04
 hostname     CAT         RAT        DOG         BAT
hwaddr AA: AA BB: BB CC: CC DD: DD (для спрощення)

Всі машини з’єднані найпростішим способом (коаксіал, немає комутаторів і
інтелектуальних концентраторів). Ви знаходитесь на машині CAT рутом. Ваша
завдання – стати для інших клієнтів мережі машиною DOG. Ви знаєте, що DOG
довіряє хосту RAT, так що Ваше завдання – підставити в мережевому протоколі
свою машину замість RAT.

Перша думка, яка приходить в голову – “чому я не можу встановити
IP-адресу іншої машини і … “Але це не буде працювати, принаймні це
не буде працювати надійно. Якщо Ви скажете Ethernet-драйверу на CAT, що
його IP-адресу 10.0.0.2, він стане відповідати ARP-відповідями на цей IP. Але
таким же чином буде поводитися й RAT. У даній ситуації не виграє
ніхто (в тому числі і Ви). Подібна ситуація трапляється іноді в локальній
мережі при неправильній конфігурації мережі машини (якщо їй призначається
працює IP-адресу). Багато мережних програми (у тому числі аналізатори
мережевого трафіку) моментально виявляють подібні речі. Крім того на
консолі адміністратора може з’явитися повідомлення, що такий-то
MAC використовує такий-то IP. Тобто Ви не досягли того, чого хотіли.

Програма send_arp.c (додається до даного тексту) може бути
використана для вирішення поставленого завдання. Як видно з її назви,
вона посилає ARP-пакет (ARP-відповідь, якщо бути точним: як випливає з
визначення протоколу, відповідь буде прийнятий успішно навіть якщо його ніхто не
запитував) в мережу, і Ви можете робити з даними пакетом все, що Ви
хочете. Посилаючи пакет за допомогою даної програми, необхідно вказати
IP-адреса джерела посилки і цілі атаки і їх hw-адреси (MAC).

Перш за все необхідно “заглушити” свій Ethernet-драйвер. Це можна
зробити за допомогою команди ifconfig-arp. Зрозуміло, драйвер все одно
потребує ARP-інформації (обмін пакетами ведеться на канальному рівні
OSI-моделі за допомогою включення в заголовки пакетів MAC-адрес), але
цього можна досягти, вказавши ядру ARP-інформацію вручну за допомогою команди
arp (8). Критична частина нашого задуму – переконати сусідів (по мережі) в
достовірності передаваної інформації. У випадку, описаному тут, Ви
хочете, щоб DOG вірив, що МАС-адреса RAT насправді дорівнює МАС-адресою
САТ (АА: АА). Тому ви посилаєте ARP-відповідь з джерелом IP-адреси
10.0.0.2, hw-адресою джерела АА: АА, IP-адресою 10.0.0.3 мети і
hw-адресою СС: СС. Зараз DOG знає, що RAT-це АА: АА. ARP-кеш, звичайно,
необхідно періодично оновлювати (оскільки в противному випадку
ARP-запити почне посилати сама машина, що не входить у наші плани).
Періодичність часто залежить від конкретної ОС, але як з’ясувалося, посилки
пакета один раз в 40 сек в більшості випадків буває достатньо. Ви
можете посилати пакет і частіше – це не зашкодить.

Складність тут пов’язана з особливістю механізму ARP-кешування.
Деякі ОС (наприклад, LINUX) будуть намагатися відновити кеш-таблицю,
посилаючи unicast (односпрямовані) пакети до кешируємой адресами. Так як
такий запит, направлений до ІСТИНИ RAT може перешкодити нам в наших
планах, його необхідно попередити. Цього можна досягти, зафлудів
систему, яка могла послати ARP-запит, помилковими ARP-відповідями таким
чином, що вона ніколи не пошле ARP-запит. Попередження, як завжди,
є найкращими ліками. У той час, як справжній пакет від DOG до RAT
повинен бути посланий, надсилається помилковий пакет з ARP-відповіддю від САТ. Як
говорилося вище, періодичності в 40 сек. буває достатньо.

Отже, процедура досить проста. “Піднімаємо” (bring up) аліас-інтерфейс,
тобто eth0: 1 (або використовуємо поточний, не має значення) з IP-адресою RAT і
включеним ARP-оскільки необхідно заповнити кеш-таблицю спочатку, а це
неможливо з вимкненим ARP. Встановлюємо маршрут для DOG через
правильний інтерфейс. Встановлюємо в кеш-таблиці запис для DOG і потім
відключаємо ARP. Тепер у нас все встановлено.

Після цього запускаємо прикладену програму send_arp для DOG і для RAT і
тепер DOG впевнений, що насправді Ви RAT. Надалі не забуваємо
періодично посилати ARP-пакети для DOG і RAT.

Описана атака працює, звичайно, тільки в локальній мережі (вірніше,
кордон атаки залежить від дальності проходження ARP-пакетів, які майже
ніколи не маршрутизуються). Але цікаве застосування можливе, якщо в
наведеному вище прикладі замінити DOG hw-адресу на hw-адреса маршрутизатора.
Якщо це спрацює (я не впевнений, що це завжди буде працювати,
ARP-реалізація на маршрутизаторах може бути досить дурної), Ви можете
легко підмінити будь-яку машину в локальній мережі для всього іншого світу
(Інтернету, мається на увазі – прим. Перекладача). Таким чином цільова
машина мрожет бути де завгодно, але машина, яку Ви хочете подментіть
повинна бути в одному з Вами сегменті мережі.

Дослідження різних мережевих ОС (джерело – книга “Атака на Інтернет”)
виявили, що в ОС Linux при адресації до хосту, що знаходиться в одній
підмережі з даним хостом, ARP-запит передається, якщо в ARP-таблиці
відсутня відповідна запис про Ethernet-адресу, і при подальших
зверненнях до даного хосту ARP-запит не надсилається. У SunOS при кожному
новому зверненні до хосту (у тому випадку, якщо протягом деякого часу
звернення не було) відбувається передача ARP-запиту і, отже,
ARP-таблиця динамічно оновлюється. ОС Windows 95 веде себе майже як
Linux, за винятком того, що періодично (кожну хвилину) надсилає
ARP-запит про MAC-адресу маршрутизатора; в результаті протягом кількох
хвилин вся LAN з Win95 без праці береться під контроль хибним ARP-сервером.
ОС WinNT 4.0 також використовує динамічно змінювану ARP-таблицю, і
ARP-запити про MAC-адресах маршрутизатора передаються кожні 5 хвилин.

Що ще може бути зроблено

Крім спуффінга, є ще великий діапазон дій, які можуть бути
вчинені за допомогою маніпуляцій з ARP-протоколом. DoS (Denial Of Service
– Відмова в обслуговуванні – прим. перекладача) – найбільш очевидне
застосування. Наповнюючи жертву неправильними hw-адресами, можна зробити її
повністю “німий”. Можливо навіть повністю запобігти зв’язок цієї машини
з будь-якою (або визначеній) машиною мережі (і розмір ARP-кешу зазвичай
достатній для заповнення ARP-інформацією всіх машин LAN). Також очевидною
метою атаки можуть бути маршрутизатори. Удар по ARP-кешу в цьому випадку
також повинен бути двостороннім: обидві системи – жертва і машина, з якої
Ви хочете відключити зв’язок даної машини, повинні бути зафлужени помилковими
пакетами. У найпростішому випадку в пакеті повинен бути встановлений
неіснуючу адресу. Але це не дуже ефективно, оскільки машина швидко
зрозуміє, що вона говорить з неіснуючою машиною і пошле зворотний
ARP-запит. Звичайно, пославши зі свого боку наступний ARP-відповідь, ви знову
“Обнулите” результат, але необхідно це робити досить часто. Більш
ефективний шлях – наповнити жертву пакетами з hw-адресами машини, яка
“Жива” і працює в мережі. Знову ж таки, це залежить від певної ситуації,
але дуже часто трапляється, що жертва посилає назад пакети різних
типів, які досягають невірного місця призначення – тоді система,
приймаюча пакунки буде генерувати ICMP-пакети типу 3 “ICMP Xxxx
Unreachable “для машини-жертви, таким чином емулюючи з’єднання
кілька неправильним способом. Подібного роду псевдосоедіненія можуть
легко відстрочити час закінчення ARP-кешу. У Linux, наприклад,
псевдосоедіненія збільшують час закінчення терміну кеша (тобто час,
коли буде посланий пакет на оновлення кеш-таблиці) з звичайних 1 хв. до 10
мін. На цей час більшість (або всі) TCP-з’єднання виявляються
заблокованими (screw up).

Особливий інтерес представляє так званий “дармовий (gratuitous) ARP”.
Подібна ситуація виникає, якщо IP-адреси джерела і цілі в ARP-запиті
рівні. Це зазвичай відбувається у випадку широкомовного Ethernet-запиту.
Деякі реалізації TCP / IP-cтека визначають подібну ситуацію, як
спеціальний випадок, і система посилає запити про оновлення інформації до
всім мережевим клієнтам, оновлюючи власний кеш ARP-відповідями. У цьому
випадку один пакет може призвести до компрометації всієї мережі. Хотілося б
зазначити, що “дармовий (gratuitous) ARP” не визначений, як частина стандрата
ARP, тому більшість виробників ОС не застосовують його, що надає
йому меншу популярність.

ARP – досить серйозний інструмент для всякого роду мережевих атак.
Давайте уявимо, що хтось встановив ретранслятор (релей), або тунель
на своїй машині і переконав дві сусідні машини посилати пакети один одному
через Ethernet-карту ретранслятора. Якщо цей ретранслятор просто
пересилає пакети до їх справжньому місця призначення, ніхто нічого не
помітить. Проте, в даній ситуації машина-ретранслятор здатна
модифіковані передані дані, що є досить
велику загрозу конфіденційності (безпеки) переданих даних.
Простий програмний фільтр може підставляти 2 Випадкові байта в
довільні моменти часу. Контрольна сума більшості пакетів при
цьому не буде змінюватися, але сумарний приходить пакет буде спотворений.

ICMP redirects

Ефект, подібний описаному вище при роботі з протоколом ARP, може бути
також досягнутий іншим шляхом, використовуючи законної особливість протоколу
ICMP, а саме можливість посилки повідомлення, що вимагає перенаправлення
пакетів при маршрутизації. Протокол ICMP (Internet Control Message
Protocol – RFC792) призначений для управління процесом передачі
IP-пакетів та формування повідомлень при виникненні помилок при передачі
відправникові датаграми. Однією з функцій цього протоколу є
управління таблицями маршрутизації на хостах усередині сегмента мережі. Мережева
підсистема призначена для роботи в комунікаційному середовищі,
представляє собою набір сегментів, пов’язаних між собою. зв’язок між
окремими сегментами досягається шляхом підключення їх до хостів, які мають
кілька різних мережевих інтерфейсів. Такі хости (звані
маршрутизаторами) при необхідності виконують передачу даних від одного
сегмента до іншого (forwarding). Для мереж пакетної комутації виконання
цього завдання безпосередньо пов’язане з вибором маршруту проходження пакетів
даних (routing). Для цього система зберігає таблиці маршрутизації,
використовувані протоколами мережного рівня для вибору потрібного інтерфейсу
для передачі пакета адресату. Інформація про маршрути зберігається у вигляді 2-х
таблиць, одна з яких призначена для маршрутів до хостів, а друга –
для маршрутів до мереж. Переглянути таблиці маршрутизації можна за допомогою
команд route (route-n) і netstat-rn.

При визначенні маршруту модель мережевого протоколу (IP) спочатку
переглядає елементи таблиці для хостів, а потім для мереж. Якщо обидва
пошуку не дають результату, використовується маршрут за замовчуванням (обзначение
у таблиці в поле Destination як 0.0.0.0). Зазвичай використовується перший
знайдений маршрут. Таким чином, порядок пошуку забезпечує
пріоритетність маршрутів до хостів по відношенню до маршрутів до мереж, що
природно, оскільки перші представлені більш конкретними адресами.
Також маршрути поділяються на прямі (direct) і непрямі (indirect).
Маршрут в мережу, безпосередньо підключену до мережевого інтерфейсу,
є прямим. Маршрут за замовчуванням – непрямий, так як адресує
одержувача, розташованого поза поза безпосередньо доступних мережевих
сегментів. Час життя маршруту залежить від протоколу верхнього рівня.
Наприклад модуль TCP зберігає маршрут протягом життя віртуального каналу
(Утвореного при встановленні TCP-сеансу).

Перенаправлення (зміна маршруту) здійснюється функцією rtredirect (),
викликається модулем протоколу у відповідь на отримання від сусідніх шлюзів
керуючих повідомлень про перенаправлення маршруту. Динамічне управління
маршрутизацією спочатку замислювалося для предотврещенія можливої
передачі повідомлень по неоптимальному маршруту, а також для підвищення
відмовостійкості Мережі в цілому. Передбачалося, що мережевий сегмент може
бути підключений не через один (як звичайно), а через кілька
маршрутизаторів. У цьому випадку адресуватися в зовнішню мережу можна через
будь-який з найближчих вузлів. При зміні оптимального маршруту або відмову
одного з маршрутизаторів необхідна зміна таблиці маршрутизації в
пам’яті операційної системи. Таке динамічне зміна покладено на
протокол ICMP. Протокол в цьому випадку посилає повідомлення ICMP Redirect
Message наступного формату:

 -------------------------------------------
 | 8bit Type | 8bit Code | 16bit Checksum  |
 -------------------------------------------
 | 32 bit Gateway IP                       |
 -------------------------------------------
 | Internet Header + 64 bits of Datagram   |
 -------------------------------------------

Поля мають значення: Type-5 (ICMP-тип-Redirect), Сode –
0=Redirect datagrams for the Network
1=Redirect datagrams for the Host
2=Redirect datagrams for the Type of Service and Network
3=Redirect datagrams for Type of Service and Host.

Повідомлень з кодами 0 і 2 не використовуються сучасними ОС.
Повідомлення з кодом 1 інформує хост про те, що слід створити новий
маршрут до зазначеного в повідомленні об’єкту і внести його в таблицю
маршрутизації, вказуючи IP-адреса хоста, для якого потрібна зміна маршруту
(Адреса буде занесений в поле Destination в пристикованної IP-заголовку), і
новий IP маршрутизатора, куди необхідно направляти пакети для даного
хоста (ця адреса заноситься в поле Gateway). Що стосується поля Type of
Service (TOS) в заголовку IP-пакета, воно, за задумом розробників повинен
було визначати пріоритет при маршрутизації. На це поле відводиться 8 біт.
Різні біти представлют собою значимість, затримку, швидкість передачі,
надійність. TOS визначає обробку датаграми при передачі через
різні мережі від джерела до одержувача. У більшості випадків може
виявитися неможливим задовольнити відразу декільком вимогам при
обробці, передбаченим полем TOS.

Повідомлень ICMP Redirect Message в нормальній ситуації посилаються
маршрутизатором за замовчуванням до машини для вказівки коротшого машрут
до місця призначення. У початковому вигляді (RFC) обидва перепризначення маршрутів
(Для мережі і для хоста) були запропоновані, але пізніше перенаправлення для мережі
не знайшло застосування і зараз вважається рівним перенаправленням маршруту
для хоста. Правильно сконструйований ICMP-пакет, який пройшов усі
перевірки на достовірність (він повинен прийти з маршрутизатора за замовчуванням
для точки призначення редиректа, новий маршрутизатор повинен бути в напряму
з’єднаної мережі і т.д.) викличе додавання в таблицю машрутізаціі даного
хоста.

Додавання, включене перекладачем

Згідно з книгою “TCP / IP Illusrated” хост з реалізацією сокетів BSD 4.4,
який прийняв ICMP-redirect застосовує деякі правила до модифікації
таблиці маршрутизації. Це запобігає неправильне (і неправомірне)
зміна таблиць маршрутизації. Такі правила включають наступні умови:

1. Новий маршрутизатор повинен знаходитися на безпосередньо приєднаної
мережі.

2. Перенаправлення повинно бути з маршрутизатора за замовчуванням для даної
точки призначення.

3. Перепризначення не може бути призначена з самого хоста як
маршрутизатора.

4. Знову призначається маршрут повинен бути непрямим маршрутом.

Таким чином, якщо Ви маєте 2 машини в одній підмережі і вони обидві мають
мережевий маршрут для цієї підмережі, ви не зможете за допомогою ICMP
перенаправити маршрут однієї через іншу. Однак ви будете здатні
використовувати перенаправлення для передачі трафіку, призначеного для
машин в іншій підмережі або зовні мережі.

 

Безпека ICMP як протоколу в даній ситуації дорівнює нулю. Підмінити
IP-адреса в пакеті на IP-адресу маршрутизатора досить просто і
додається програма icmp_redir.c робить це. RFC, в котрому пред’являються
вимоги до хостів, визначає, що система ПОВИННА слідувати вказівкам
ICMP redirect, якщо пакет виходить від роутера. Багато системи саме так і
надходять (за винятком непатченного (vanilla) Linux 2.0.30, де цього
не відбулося і тестових 2.0.29 і 2.0.31pre9 Алана Кокса).

ICMP redirect представляє велику потенційну можливість для DoS. В
відміну від ARP-кешу, маршрути хоста не потребують оновлення з часом. І
звичайно, в даному випадку не потрібно доступу до локальної мережі, атака
може бути запущена з будь-якого місця. Таким чином, якщо машина-жертва
приймає ICMP redirects (і пакети можуть дійсно досягти її), то
система може припинити підтримувати зв’язок з будь-яким певною адресою в
мережі (не з усіма, але з тими, які розташовані в інших фізичних
мережах з жертвою). ДНС-сервера в даному випадку можуть бути потенційними
жертвами.

Для виконання межсегментной атаки атакуючому необхідно, по-перше, знати
внутрішній IP маршрутизатора, до якого підключений хост, і, по-друге,
вибрати ім’я сервера, якому потрібно змінити маршрутизацію.

Перша проблема – внутрішній IP роутера – вирішується простим перебором, так
як дізнатися його з зовнішньої мережі не представляється можливим (traceroute
дає тільки IP роутера у зовнішній мережі). Так як більшість хостів у мережі
знаходиться в підмережах класу С, то для здійснення цієї атаки досить
буде послати 254 пакета (O-й і 255-й адреса відпадають з цілком зрозумілих
причин) ICMP Redirect з різними IP відправника.

Друга проблема – вибір імені (або IP) сервера, до якого буде змінена
маршрутизація. Тут можна просто посилати пакети з IP відомих і часто
використовуваних серверів Internet (пошукові сервера, сервери відомих фірм,
IRC-сервера і т.д.)

Експеримент, проведений авторами книги “Атака на Інтернет” показав, що
реалізувати варіант віддаленої атаки типу ICMP Redirect вдалося здійснити
як межсегментной, так і внутрішньосегментний на ОС Linux 1.2.8, ОС Win95 і ОС
WinNT 4.0. Решта мережеві ОС (випробовувалися Linux версії вище 2.0.0 і
CX / LAN / SX, захищена по класу B1 UNIX), проігнорували ICMP Redirect.

Додавання, включене перекладачем

Тут хотілося б додати, що сам Алан Кокс у дискусії на сервері
BUGTRAQ по даній статті вказує, що Юрій неправий. ICMP redirect
маршрути для хостів все-таки не постійно тримаються в таблиці
маршрутизації, а забираються через деякий час. Однак якщо знаходитися на
комутованій мережі (switched в оригіналі) з великої мережевої маскою
(Наприклад мережі класу B), можна використовувати перепризначення ICMP проти
багатьох хостів для додавання більше 65000 маршрутів в їх таблиці. Таким
чином * nix-машини просто витратять все доступоное RAM. Багато
“Десктопових” ОС використовують лінійний алгоритм для пошуку маршрутів.

Як захиститися

ARP, як протокол низького рівня зазвичай прихований від більшості людей (робота
протоколу – прим. перекладача). LAN-адміністратори, звичайно, представляють
собі механізм роботи протоколу, але зазвичай приділяють йому мало уваги. Ви
завжди можете досліджувати вміст ARP-таблиці використовуючи команду arp (8)
у разі виникнення яких-небудь мережевих проблемм, але це не саме
очевидне, що зазвичай приходить в голову. Навіть M $-системи мають arp-команду
і необхідно пам’ятати, що вивчення вмісту ARP-таблиці може допомогти в
деяких ситуаціях. Однак, якщо Ви мета атаки, джерело якої з
іншій підмережі, що проник через підміну ARP маршрутизатора, Вам це ні про
що не скаже. Просто, таблиця маршрутизації хоста може бути досліджена
на предмет впізнання входів, згенерованих ICMP (у більшості версій
route (1) вони маркуються прапором D в поле прапорів).

Нагадаємо, що переглянути ARP-кеш можна командою arp-a (або-an, щоб
запобігти звернення до ДНС-сервера).

Наведена вище схема ARP-атаки працює в мережах 10Base2 (коаксіал).
Однак, якщо машини з’єднані більш “просунутим” способом, використовуючи
деякі “розумні” концентратори або комутатори, атака може бути
виявлена ​​і навіть неможлива (те ж саме стосується і пасивних атак).

Чому я не зупинився більш детально на ICMP-атаках? Справа в тому, що
багато мереж мають дуже просту структуру і тому немає необхідності для
додавання чого-небудь в таблиці маршрутизації. По-друге, в багатьох мережах
зазвичай встановлюють статичні таблиці маршрутизації вручну, тому
навіщо довіряти подібне оновлено ICMP? І остаточно, зважаючи на небезпеку
вищеописаної атаки, я навіть заборонив подібну ситуацію в моїй ОС, навіть
ціною недотримання RFC1122. Але це може бути досить непросто. На Linux
або будь-який інший ОС з відкритими кодами, це може бути зроблено на рівні
“Хака” ядра. На IRIX 6.2 і можливо інших версій це досягається
виставкою icmp_dropdirects = 1 при використанні systune. Також можна
досягти хорошого ефекту заборонивши проходження пакетів типу ICMP redirect
через маршрутизатори (файрволли). Як це зробити для Linux описується в
багатьох прикладах параметри пакета ipchains (ipfw, iptables), також
налаштування фільтрації ICMP-пакетів приділено багато місця в книзі “Брандмауери
в Linux “. Як приклад хотілося б сказати що в Linux можна взагалі
дуже просто заборонити прийом ICMP Redirect пакетів включенням до
який-небудь зі стартових скриптів наступній послідовності:

    for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
        echo 0 > &f
    done;

Що стосується операційної системи FreeBSD, то реагування даної ОС на
пакети ICMP redirect перекривається наступним чином:

/etc/rc.conf icmp_drop_redirect="YES"

У ARP ми стикаємося з ситуацією динамічного дозволу IP-адрес без
застосування централізованого сервера. У протоколі DNS, наприклад, при
перетворенні hostname-адрес в IP-адреси спочатку перевіряється файл
/ Etc / hosts і в разі відсутності там IP-адреси надсилається запит на
ДНС-сервер (хоча порядок опреденія можна і змінити). Я не бачу причини,
чому б також не вступити у випадку з ARP. Ethernet-адреси не змінюються
дуже часто. Крім того відмова від динамічного оновлення ARP-таблиці
значно знизить навантаження мережі. Ethernet-карта може бути запущена без
включення ARP-режиму, а необхідні записи в ARP-таблицю можуть бути
включені вручну. Крім того, це зменшить кількість пакетів,
переданих по мережі. Існує також спосіб брати MAC-адреси з файлу
/ Etc / ethers. Ще существет спосіб статично прописувати ARP-запису в
ARP-кеш за допомогою опцій-f-s команди ARP. Можна, для щасливих
користувачів ОС Linux привести приклад скрипта на Perl, який статично
прописує ARP-таблицю із заздалегідь складеного файлу. Даний
скрипт повинен запускатися ПІСЛЯ “підняття” мережевих інтерфейсів.

#!/usr/bin/perl
# by John Goerzen
#Program: forcehwaddr
#Program to run ARP to force certain tables.

#Specify filename to read from on command line, or read from stdin.

foreach(<>){             # For each input line...
    chomp;               # Strip if CR/LF
    if(/^#/) { next; }   # If it's a comment, skip it.
    if(((($host, $hw)=/\s*(.+?)\s+(\S+)\s*/)==2)&&
        !(/^#/)) {
        # The text between the slashes parses the input line as follows:
        # Ignore leading whitespace. (\s*)
        # Then, start matching and put it into $host($host,(.+?))
        # Skip over the whitespace after that (\s+)
        # Start matching. Continue matching until end of line or optional
        # trailing whitespace.

        # Then, the if checks to see that both a
        # host and a hardware address were matched.
        # (2 matches). If not, we skip the
        # line (assuming it is blank or invalid or something).
        # a poung sign; if so, ignore it (as a comment).

        # Otherwise, run the appropriate command:
        printf("Setting IP %-15s to hardware address %s\n",$host,$hw);
        system "/usr/sbin/arp -s $host $hw\n";
        }
}

До складу операційної системи LINUX входить утиліта arpwatch, за допомогою
якої ARP-кеш тримає таблицю відповідності MAC і IP-адрес. З мануала:
Arpwatch keeps track for ethernet/ip address pairings. It syslogs activity
and reports certain changes via email. Arpwatch uses pcap(3) to listen for
arp packets on a local ethernet interface.

Також для UNIX є утиліта ARP Wrap, яка запобігає атаки типу
АРП-спуффінга до виконання програм (telnet, SSH). З оригінального
опису:

Arpwrap  is  a  tool  which attempts to detect ARP spoofing attacks before
executing a unix command (such as SSH or Telnet).

Завантажити Linux-версію цієї програми можна тут:
packetstormsecurity.org/linux/security/arpwrap.linux.180701.tgz

Завантажити Solaris-версію можна тут:
packetstormsecurity.org/UNIX/security/arpwrap.solaris.190701.tar.gz

Програма:

Вихідні тексти програм
Завантажити send_arp.c (Скачано 152 раз).
Завантажити icmp_redir.c (Скачано 129 разів).

Повна версія цієї статті у PDF форматі: ARP-ICMP.pdf (Скачано 164 раз).

Special Thanks:

1) Панам Медведівської І.Д., Семьянову П.В., Леонову Д.Г. ака dl за
видання книги “Атака на Інтернет”, витяги з якої використовувалися в
Як багатьох додатків.

2) А. Робачевскому за прекрасну книгу “Операційна система UNIX”

3) XR за перегляд первинного варіанту статті та видачу побажань.

4) KMINT21 за доповнення щодо захисту FreeBSD.

Використана література:

1. Стаття Ю. Волобуєва:
www.securityfocus.com/data/library/arp_fun.txt

2. Медведовський І.Д., Семьянов П.В., Леонов Д.Г. – “Атака на Інтернет”,
вид. друге, вид. ДМК, 1999 р.

3. Робачевскій А. – “Операційна система UNIX”, вид BHV, 1997 р.

4. Роберт Л. Зіглер – “Брандмауери в Linux”, 2000 р.

[С] 2001 SOLDIER (переклад і доповнення)
uinC Member
soldier7@mail.ru
[c]uinC

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*