(toc)
alábbiakban a saját mobil hotspot-om jelszavát töröm fel a Kali Linux és az
aircrack-ng segítségével.
Elfelejtett
jelszó lekérdezése
Az operációs
rendszerek külön profilt készítenek minden Wi-Fi hálózatnak, amire rácsatlakoztak
és ez nem veszik el hacsak manuálisan el nem felejtettjük az adott hálózatot. A
profilokból kideríthető többek között a jelszó is.
Windows
- Indítsunk
el parancssort adminisztrátor módban, majd gépeljük be a netsh wlan show
profile parancsot. Ez egy Network Shell utasítás, ami kilistázza a Wi-Fi
hálózati profilokat. A profil neve a hálózat nevével egyezik.
- A
kilistázott profilok közül válasszuk ki azt a hálózatot, amelyik jelszavára
szükség van, például „KnetAP”, majd gépeljük be a netsh wlan show profile
name="KnetAP" key=clear parancsot. Ez az utasítás kilistázza a
kiválasztott profil beállításait, köztük a jelszót olvasható formában.
- Indítsunk
el parancssort, majd gépeljük be az ls
/etc/NetworkManager/system-connections parancsot. Ez kilistázza a
system-connections könyvtárban lévő fájlokat. Mindenik fájl egy hálózati
konfigurációs fájl, ami az eddig használt hálózatok beállításait tartalmazza. A
fájlok neve a hálózat nevével egyezik.
- A
fájlok közül válasszuk ki azt, amelyik nevében szereplő hálózatot jelszavára
szükség van, például „KnetAP”, majd gépeljük be a sudo cat
/etc/NetworkManager/system-connections/KnetAP.nmconnection parancsot. Ez az
utasítás megjeleníti a kiválasztott fájl tartalmát
- A
megjelenített adatok közül a psk mező tartalmazza a jelszót.
Jelszó megfejtése
legmegbízhatóbb módszert a számítógépes hálózatokba való behatoláshoz a Kali
Linux operációs rendszer nyújtja, pontosabban a vele érkező programcsomagok
sokasága. Az egyszerűség kedvéért egy előre elkészített VMware képfájlt
töltöttem le a kali.org oldalról, amit a szintén ingyenes VMware Playerrel
lehet megnyitni. A boot-olást követően a kali felhasználónévvel és
jelszóval lehet belépni az operációs rendszerbe.
- sudo apt update
- sudo apt upgrade
1. A környező Wi-Fi hálózatok felderítése
lépésként azt kell kideríteni, hogy a feltörendő Wi-Fi hálózatra rá van-e már
valamilyen eszköz csatlakozva. Ez csak akkor látszik, ha van adatforgalom. A
Kali Linux egyik legerősebb eszköztára az Aircrack-ng, mely kifejezetten Wi-Fi
hálózatok támadására lett tervezve.
- iwconfig
-
kilistázza az vezetéknélküli hálózati adaptereket. A wlan0 egy USB Wi-Fi
adapter. - iw
list –
kilistázza a kártya képességeit. A Supported interface modes alatt szerepelnie
kell a monitor módnak.
- sudo
airmon-ng check kill -
megtisztítja az Aircrack-ng környezetét a zavaró folyamatoktól. - sudo
airmon-ng start wlan0
utasítás monitor módba kapcsolja a wlan0 (wlan0mon-ra változik)
- sudo
airodump-ng wlan0mon -
kilistázza az elérhető Wi-Fi hálózatokat és a rájuk csatlakozó eszközök fizikai
címeit. A folyamatból Ctrl+C-vel lehet kilépni.
- A
felső táblázatból a következő adatok fontosak: - A KnetAP
router fizikai címe (BSSID): EC:10:7B:0D:C5:2B - Ha az
ESSID üres, akkor rejtett az adott hálózat. - A
router csatornája (CH): 6 - sudo airodump-ng
wlan0mon --bssid [router
MAC] --channel 6 - kilistázza a routerre
csatlakozott klienseket, melyek adatcserét folytatnak a 6-os csatornán. - A
második táblázatból derül ki, hogy a 00:0C:F1:2F:D5:C2 a KnetAP-re csatlakozik. - Ha
netalán MAC szűrés van a hálózaton, akkor már tudjuk, hogy ez a MAC cím
hozzáférhet a hálózathoz - Ha a
MAC nem volt manuálisan megváltoztatva, akkor egy Online MAC lookup oldalon ki
lehet deríteni, hogy milyen gyártmányú készülékről van szó. Ezáltal
kiszemelhető egy kevésbé érzékeny készülék, aminek nem probléma ha egy
pillanatra lecsatlakozik a hálózatról.
2. A Wi-Fi-re csatlakozott eszközök kényszerített lecsatlakoztatása
lépés megfigyelni egy hitelesítési adatcserét. Ehhez kényszeríteni lehet az első
lépésben kiválasztott klienst, hogy újra kapcsolódjon.
- sudo aireplay-ng
--deauth 0 -c [kliens
MAC] -a [router MAC] wlan0mon – folyamatos lecsatlakoztatási
parancsot küld a klienseknek és a routernek. Ha a -c [kliens MAC] paraméter
hiányzik, akkor minden kliens megkapja a parancsot.
- Ha nem
igényel emberi interakciót a készülék a működéshez (pl. webkamera), akkor a
visszacsatlakozásnál elküldött csomagokat kell befogni és valamilyen bruteforce
módszerrel feltörni titkosított jelszót. - Számítógép
/ telefon esetén klónozni lehet a routert és rávenni a klienst, hogy a klónra (Evil
twin) csatlakozzon. - A
jelszót egy hamis bejelentkezési oldallal lehet megszerezni, ami a
felhasználótól kéri a Wi-Fi jelszót. - Minden
további adatforgalmat követni lehet, amíg a kliens a klónra van csatlakozva
(=adathalászat)
második módszer csak emberi beavatkozással működhet és egy hamis weboldal gyanússá
válhat a felhasználó számára, ha nem tökéletes, ráadásul fizikailag a közelben
kell tartózkodni amíg az események zajlanak. Az első módszernél ezzel
ellentétben a befogott csomagokat offline kell feltörni. A jelszó megfejtése
azonban hosszabb időbe kerül, a jelszó bonyolultságának függvényében.
3. A hitelesítési adafolyam befogása
van szükség. Az egyikben a csomagokat befogó parancs fut az első lépésből (csak
most fájlba menti), a másikban a lecsatlakoztatós támadás a második lépésből
(csak most elég lesz 5 támadás).
- sudo
airodump-ng wlan0mon --bssid
[router MAC] --channel 6 -w csomagok – a „csomagok” fájlba menti a
router 6-os csatornáján közlekedő összes adatcsomagot. - (másik
terminál) sudo aireplay-ng --deauth 5 -c [kliens MAC] -a [router
MAC] wlan0mon – 5 lecsatlakoztatási támadást indít a kliens ellen. Amíg
ez fut, a kliens újra csatlakozni próbál, ami megjelenik az első terminál jobb
felső sarkában: WPA handshake: kliens MAC
- A
fájlok a Home könyvtárban lesznek, hisz onnan volt a parancs elindítva. Ebből
csak a .cap kiterjesztésűre van szükség. - sudo
aircrack-ng csomagok-01.cap –
azonosítja a befogott csomagok közül a handshake-et
- sudo
airmon-ng stop wlan0mon –
kikapcsolja a Wi-Fi kártya monitor módját - sudo
service NetworkManager start –
elindítja a Kali Linux hálózatkezelőjét
4. A hitelesítő adatcsomag megfejtése
a lépésben már nincs szükség a hálózat lefedettségében lenni. A WPA2 protokoll handshake-je
egy négylépéses kulcs csere, aminek folyamata a következő:
- ANonce
– egy véletlenszerű számsor, amit a hitelesítő küld a kliensnek. - A
kliens ezután generál egy SNonce véletlen számot - A
kliens generál egy PTK-t, ami egy kulcs a további adatforgalom titkosítására. - PTK =
PRF(PMK + ANonce + SNonce + MAC(kliens) + MAC(router)) - PMK –
mesterkulcs amit a kliens és a router is ismer. Ezt kell majd visszafejteni. - PMK = PBKDF2(HMAC−SHA1,
PSK, SSID, 4096, 256) - PBKDF2
- Password-based Key Derivation Funtion 2 - HMAC−SHA1
– titkosító algoritmus - PSK – jelszó
- SSID –
a hálózat neve (KnetAP) - 4096 –
az iterációk száma - 256 –
a PMK hosszúsága - PRF – pszeudo-random
függvény - A PTK hossza
512 bit, ami fel van darabolva: - 128
bit – Key Confirmation Key (KCK) – a MIC létrehozásához szükséges. - 128
bit – Key Encryption Key (KEK) – a titkosításhoz szükséges. - 128
bit – Temporal Key (TK) – Unicast csomagok titkosítására és visszafejtésére. - 128
bit – MIC Tx és Rx – Az unicast csomagokat titkosító TKIP algoritmus használja - SNonce
+ MIC – ahol a MIC (Message Integrity Check) =
HMAC_SHA1(KCK, SNonce, r) - HMAC_SHA1
– titkosító algoritmus - KCK –
a PTK első 128 bitje - r –
szekvenciaszám, hogy ugyanazt az üzenetet ne lehessen kétszer felhasználni - GTK +
MIC – ahol a MIC a router PTK-jának KCK részét használja a kódoláshoz. - GTK
(Group Temporal Key) = PRF-256(GMK, “Group key expansion”, MAC(router)||GNonce) - PRF-256
– pszeudo-random függvény - GMK (Group
Master Key) – egy random szám amit a hitelesítő router időnként generál - Gnonce
– egy random szám amit a router a hitelesítés során generál - MIC =
HMAC_SHA1(KCK, GTK, r) - ACK – a
hitelesítés nyugtázása
A Hitelesítés végső
soron a MIC-ek összehasonlításával történik. Ha a kliens és a hitelesítő által
generált MIC-ek találnak a második üzenetet követően, akkor a PTK kulcsok is
találnak, hisz ezekből vannak származtatva. Ha a PTK egyezik, akkor a PMK is
egyezik, ami csak akkor egyezhet, ha a jelszó helyes. Ezután a router elküldi a
GTK kulcsot amit a kliens telepít és nyugtáz.
A feltörő program
feladata tehát hogy a befogott handshake adatokból (ANonce, SNonce) és egy
adott jelszóból előállítsa a PMK-t, a PTK-t majd a MIC-ket és összehasonlítsa a
handshake-ben található MIC-kel.
A befogott csomagok-01.cap fájl-ban a 4 adatfolyam a
következő:
első üzenet az ANonce véletlenszámot (WPA Key Nonce):
Ez a két üzenet már
elegendő információt biztosít, hogy a helyes MIC kulcsot ki lehessen számítani
különböző jelszavak próbálgatásával.
próbálgatja végig a jelszavakat. A jelszólistát le lehet tölteni nagyméretű
fájl formájában, amely a leggyakrabban használt jelszavakat tartalmazza. Ezen kívül használható olyan segédprogram
melyek jelszólistát generál a hálózat gazdájának személyes adatai vagy megadott
karakterek alapján. A Kali Linuxban ilyen a crunch. Ismerve e jelszót
alkotó 9 karaktert, az egyszerűség kedvéért kizárólag ezek ismétléses variációit
(9^9)
generáltam le a crunch programmal, de így is 384 millió jelszó készült. A fájl
mérete 3,6GB.
keresett jelszó benne van, tehát működni fog a lista.
- aircrack-ng
-a2 -b [router
MAC] -w
jelszavak.txt csomagok-01.cap - a1 –
WEP protokoll, a2 – WPA/WPA2 protokoll
A Kali Linux
virtuális gépként való futásának az a hátránya, hogy kizárólag a CPU
teljesítményét képes használni a számításokra. A program egy Intel Core i7-10850H
@ 2.7GHz (12CPU)
processzorral 2,5 óra alatt próbált végig 87 millió kombinációt mire eljutott a helyes
jelszóig. Egy GeForce GTX 1080 GPU ezt néhány másodperc alatt végrehajthatta
volna.
A kadon2184 jelszó bár nem tartalmaz speciális
karaktereket, mégis erősnek számit, mert nem tartalmaz értelmes szót vagy
személyes adatot. Sok jelszó esetén a speciális karakterek illetve számok
értelmes szavakban helyettesítenek betűket, mint az a=@, i=1, e=3, s=$, i=!, n=^ amiket ismernek a jelszógeneráló programok is. A
bruteforce legnagyobb ellensége a hosszú jelszó, illetve az azt értelmetlenné
tévő automatikus beillesztések – amikor a begépelt jelszóhoz a felhasználói
felület karaktereket illeszt különböző helyekre mielőtt elküldené a szervernek
(pl. ka%2fdo%8dn2%4s18%2f4),
így hiába fejti bárki vissza a jelszót az elcsípett adatforgalomból, az úgysem
fog működni amikor közvetlenül begépelik, hacsak nem ismeri a beillesztési sémát.