от Rumen_Yotov(30-08-2005)

рейтинг (37)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

ARP е много прост протокол, състои се само от четири (4) базови типа съобщения:
1.ARP заявка. Компютъра А пита мрежата (чрез 'broadcast' адреса) "Кой има този IP (интернет адрес)?
2.ARP отговор. Компютър Б отговаря на А, "Аз имам този IP адрес, и моят MAC адрес е ...".
3.Обратна ARP заявка (RARP). Концепцията е същата както в точка 1, само че тук Компютър А пита, "Кой има този MAC адрес"?
4.RARP отговор. Компютър Б отговаря на А, "Аз имам този MAC адрес, и моят IP адрес е ....".

Всички мрежови устройства имат ARP-таблица, съхранявана временно в паметта на компютъра. В нея се съхраняват (по двойки) всички IP <---> MAC адреси от локалната мрежа, които до момента са съпоставени.
ARP-таблицата служи като кеш при последващи запитвания.

ARP заявката се изпраща на 'broadcast' адреса на мрежата (за да бъде получен от всички компютри). В отговор на това запитване се изпраща отговор само до питащия, като в отговора е посочен и MAC адреса на отговарящия. В резултат тази двоика IP-MAC се запазва в ARP-кеша.

За постигане на по-висока ефективност авторите на ARP протокола са го опростили максимално (но да е работоспособен) но уви главно за сметка на сигурността (липсва всякаква идентификация).

В действителност в някои операционни системи ARP протокола е реализиран по такъв начин, че даже устройства които не са направили запитване получават отговора (предполагам че това е направено пак е цел по-висока ефективност - избягване на повторни запитвания).

Сега да се помъчим да се поставим на мястото на един кракер (наричан хакер на популярен жаргон). "Защо да не изпратя един фалшив (но протоколно коректен) отговор, които да асоциира двоика произволно избрани IP и MAC адреси". Така спокойно можем да излъжем всеки (незащитен) компютър в мрежата. Но и това не е всичко, още по-добре ще е "ако изпратя такъв/а отговор/и на 'broadcast' адреса на мрежата, така ще излъжа всички наведнъж, еха".

Сега обратно към реалността. Дано от този съвсем кратък предговор стане ясно защо тази атака се нарича "Заразяване на ARP-кеша" а не само ARP-заразяване. Заразеният кеш автоматически се изчиства след спиране и повторно зареждане на операционната система (докато не бъде заразен пак).

Всичко описано дотук дава възможност за няколко вида атаки:
1. Отказ от услуга;
2. Атакуващ по средата;
3. MAC препълване.

Сега накратно за всяка една от тях.

1. Отказ от услуга. Когато се изпрати ARP-отговор, асоцииращ IP адреса на рутера на дадена мрежа с фалшив (несъществуващ) MAC-адрес. Резултат, цялата мрежа губи връзка със света.

2. Атакуващ по средата. Това е една "класическа" атака. Целта е да се прехванат данните предавани между два компютъра в мрежата (единият най-често е гореспоменатият рутер). Така целият трафик на атакуваният компютър минава първо през атакуващия и чак след това се препраща към рутера (междувременно този трафик може да се види/запише).

Всичко това се реализира само с два ARP отговора. Един до рутера, и той съдържа IP-адреса на атакуваният компютър и MAC-адреса на атакуващия и втори - до атакуваният компютър, с IP адреса на рутера и MAC-адреса на атакуващия. Още една подробност (вторична), трябва да се включи (ако не е бил включен) режим "IP forwarding" в ядрото. Някъде в този трафик са и Вашите пароли.

3. MAC препълване. Това е една техника, насочена главно към мрежовите превключватели (switches). Няма да се обсъжда разликата между хъб (hub) и превключвател (switch). Възможността за такава атака се крие в естественото ограничение на паметта на всеки един превключвател (суич по нататък, думата вече е почти приета) където се съхраняват данните на ARP-кеша. Реално когато се получат прекалено много данни е възможно (в зависимост от производител/модел и др.) тази памет на суича да се препълни и той да превключи в режим "хъб", при който просто "broadcast-ва" целият мрежов трафик. Евентуалния успех на атаката зависи изцяло от суича (производител/модел), но при успех остава само да се настрои мрежовата карта в съответен режим и така да се следи целият трафик в мрежата.

Сега след толкова много FUD (страх/несигурност/съмнение) да съобщим и някои (относително) добри новини. Едно задължително условие за извършване (въобще) на такава атака е наличието на достъп до някои компютър в локалната мрежа. Атаката не може да се извърши отдалечено (само отблизо ;-)
Тя може да бъде извършена само върху компютри, които слушат на съответния "broadcast" адрес.

Сега напълно според традицията и лошата новина ;-) Тъй като възможността за атака е заложена в протокол, който е част от мрежовия TCP/IP протокол, възможността за атака не може да се избегне (поне не в ethernet, където всяка мрежова карта има и ползва MAC-адреса си). Някои да каже ако лъжа тук.

Сега хронологически следват и някои начини за защита (иначе защо въобще се занимаваме с това ?).

ЗА МАЛКИ МРЕЖИ
Една често използване възможност е задаването на статични двойки адреси (IP <---> MAC) и съответно статична ARP-таблица. При стартиране/изпълняване на "ifconfig" за NIX операционни системи или (за пълнота) "ipconfig /all" за различните версии на Windows (tm), могат да се видят съответните MAC адреси на устройствата (локални). Как ли става за отдалечените ? [hint: NMAP]. Има и други инструменти.

Чрез изпълнение на "arp -s hostname/IP  MAC" (виж "man arp", хайде сега пак ли четене) може да се добавят статични данни в ARP-кеша. Статични тук означава постоянни (дори след рестартиране). Или пък за да докажем,че и други освен хакерите могат да мислят (е поне малко де) да сложим тези команди в скрипт,който естествено да се старира още при начално зареждане на операционната система.

Проблема с това решение (пак ли проблем) е че то работи добре само за "относително" малки мрежи, примерно до 20-тина машини и въобще не работи за мрежи в които адресите се получават чрез DHCP и съответно IP адресите се менят.

ЗА ГОЛЕМИ МРЕЖИ
Тук решението/ята са други. Първо проверете дали Вашият (или чужд) суич има режим "Port Security", ако за щастие има го включете. При този режим суича позволява само по един (постоянен) MAC адрес на всеки физически порт, което предпазва мрежата (компютрите) от ARP-атаки. Корпоративно решение.

ЗАЩИТИ ЗА ВСЯКАКВИ МРЕЖИ
Ето това е за мен. Много важна предпоставка за успешна защита е да знаете как работи ARP-протокола и съответно да го следите. Един инструмент за това е "arpwatch" (това пък къде е? питай Google за да научиш ;) Тук в времето и мястото да споделя и малко впечатления от моята работа с "arpwatch".
Накратко програмата работи като "демон" който следи ARP-таблицата и при промяна изпраща съобщения (мейл до "root") където дава достатъчна информация. Например:
...BEGIN...
Subject: new station (connection-005.ISP.net)

           hostname: connection-005.ISP.net
         ip address: 192.168.1.5
   ethernet address: 0:b:41:1d:d2:5c
    ethernet vendor: <unknown>
          timestamp: Monday, August 29, 2005 22:05:54 +0300
...END...
Писмо за всеки нов адрес. В началото генерира доста трафик, след това нещата се успокояват.

Ето и нещо което да ви накара да проверите/действате:
...BEGIN...
Subject: changed ethernet address (connection-042.ISP.net)

           hostname: connection-042.ISP.net
         ip address: 192.168.1.42
   ethernet address: 0:c:6e:2b:55:ee
    ethernet vendor: <unknown>
old ethernet address: 0:8:c7:29:a6:7e
old ethernet vendor: COMPAQ COMPUTER CORPORATION
          timestamp: Saturday, August 27, 2005 9:55:33 +0300
 previous timestamp: Wednesday, August 24, 2005 23:04:40 +0300
              delta: 2 days
...END...
Забележка: някои данни (адреси & MAC-ове) в двата примера са променени.
Поне на този етап за мен това е което знам/видях. Не съм се ровил надълбоко.

Друго решение (а дали е такова):
Потърсете за "arpstar" (виж за Google по-горе). Това е кърнъл-модул който съобщава и *предпазва* от ARP-атаки.
Проекта е относително нов, но има дори ;-) графичен инструмент (alpha) който известява за атака/и.
Доколкото разбирам работата на този "графичен инструмент" е да grep-ва зададен лог и когато открие ARP да сигнализира (тук може и да греша). Логовете му са системните логове.
(Забележка: не съм сигурен дали *предпазва*, но така пише на сайта на проекта).

Намерих и една програма за Windows потребители: [Xarp-0.1.5] адрес: http://www.chrismc.de/

Трето решение:
То май най ми харесва - наистина е универсално ;-)
Използвайте криптирани връзки (където е възможно), така дори и да ви прехванат трафика няма как (общо взето) да го декриптират и следят. Използвам го за моята поща и другаде където може.

Сега кратко заключение/обяснение.
Идеята за подобна статия (как звучи само) се появи преди около седмица (не заради конкурса, много ме мързи напоследък) а дойде от въпрос във форума за програма/и за защита от ARP-spoof атаки. Тъй като досега използвах основно (по скоро за проба) "arpstar" (не съм ползвал статични данни) реших да се поровя и това е което за час/два открих след това няколко дена асимилиране и мислене дали въобще да пиша нещо, има още планини от информация.

Написаното е по-скоро компилация от тук и там като единственото мое допълнение са някои коментари и примерите от реалното ползване на програмите.

Сега ми дойде и идея за ползата от едно Wikki в linux-bg.org, където може да напишеш и нещо не съвсем завършено или пък да добавиш нещо към вече написаното от други.
Това би спестило и доста от въпросите/проблемите във форумите, вместо FAQ (пък е и по-лесно за поддържане, май).

PS1:няма да се обидя ако това въобще не се публикува на сайта, но по-късно едва ли ще го допълня.
PS2:Приема се и всякаква критика особено полезни допълнения, пояснения корекции на грешки и т.н. Основната цел/идея тук е да се постави въпроса и се дадат някои решения, идеи, опити и мнения.

Румен Йотов


<< Postfix с TLS подръжка | Как да "сваляме" Debian с Jigdo от българските огледала. >>