Kompletní řízení wifi provozu
Problém
Narozdíl od ad-hoc režimu wi-fi sítí, klienti připojení ke stejnému AP můžou komunikovat mezi sebou, ačkoliv jejich zařízení se nemusí "slyšet". Tuto komunikace zajišťuje AP, ke kterému jsou připojeni. Pokud jejich IPv4 adresy jsou ve stejné podsíti, tato komunikace probíhá na 2. vrstvě. Na softwarovém AP s HostAP to zajišťují tyto ovladače. Tento provoz neprochází síťovou vrstvou a z toho plyne následující:
- není možno použít firewall
- provoz nelze regulovat pomocí shaperu
- nelze jednoduše zjistit, kolik dat aktuálně prochází přes AP a kdo je za to zodpovědný (kromě statistik HostAP)
Řešení
Toto samozřejmě není vždy žádoucí. Existují samozřejmě řešení:
- každému klientu přidělit samostatnou podsíť
- zakázat komunikaci mezi klienty (parametr HostAP bridge_packets)
První řešení je dobré, ale náročné na spotřebu IPv4 adres. Na některých ap by to znamenalo změnit již připojeným uživatelům adresy.
Druhé řešení neumožňuje komunikaci mezi klienty.
Popis problému i nápad na řešení přišel od Ládi z J-netu na newsech (17.února 2005):
Vsichni klienti na vsesmeru uvidi stejnou MAC svych kolegu - totoznou s MAC vsesmer wifi karty. Takze uzivatel 1 posle data pro uzivatele 2 s MAC routeru - router paket prijme do kernelu (tim se provedou vsechny ty veci jako PREROUTIONG, POSTROUTING a FORWARD) a posle uzivateli 2 na jeho skutecnou MAC adresu. Stacilo by, aby router pravidelne posilal ARP "poison" pakety vsem uzivatelum na IP celeho rozsahu a hlasil jim jako MAC svou MAC adresu.
Realizace
Z probíhajicí diskuze nakonec vzešly 2 řešení:
1. Shellovský skript používající tcpdump k detekci arp požadavků a posílající příslušnou arp odpověč prostřednictvým programu arpoison.
2. Daemon v C založený na programu pro Man-in-the-middle útok. Poslouchá na příslušném rozhraní (využívá knihovnu libpcap) a na každý arp požadavek odpoví zfalšovanou arp odpovědí (na vytvoření tohoto paketu se používá libnet1).
Při testování (díky patří Kyrilovi) se zjistily 2 problémy:
1. Některé OS se ptají, zda někdo již využívá jejich IPv4 adresu. Pokud program na falšování MAC adres odpověděl, byla detekována kolize. Pomohlo ignorování takovýchto požadavků.
2. Pokud jsou připojeny 2 počítače prostřednictvím switche a jednoho hardwarového AP, pak komunikace mezi těmito počítači probíhá bez účasti AP. Pokud na arp požadavek prvního počítače na MAC druhého počítače odpoví i falšovací program, pak bude komunikace probíhat přes AP, což je zbytečné (pokud jsou síťové karty 100M a switch také, pak je to rozhodně pomalejší). Řešením tohoto problému je mít skupiny IPv4 adres - pokud se jeden počítač ptá na MAC adresu druhého počítače ve stejné skupině, pak se tento požadavek ignoruje.
Tyto řešení je vhodné doplnit zakázáním přímé komunikace mezi klienty:
iwpriv wlan1 bridge_packets 0
arp.sh
Tento skript nebere argumenty, je potřeba ho před použitím upravit. Nastavuje se rozhraní a IPv4 adresy serveru (MAC adresu zjistí sám).
arp_redir
Jak již bylo popsáno výše, jedná se o daemon v jazyku C.
Syntaxe: arp_redir [VOLBY] MAC ROZHRANI
Program bude poslouchat na ROZHRANI a v odpovědích na arp požadavky bude odpovídat MAC. Volby:
- -d neodpojí se od terminálu a bude vypisovat, co dělá.
- -i SOUBOR načte z tohoto souboru skupiny IPv4 adres. Adresy jsou oddělené čárkami. Mezery, prázdné řádky a řádky začínající znakem '#' jsou ignorovány. Jeden řádek reprezentuje jednu skupinu adres. Tato volba může být použita vícekrát (načtou se všechny soubory).