WPA Supplicant je program, který se v Linuxu stará o podporu WPA zabezpečení Wi-Fi sítí. Pokud máte grafické rozhraní, pravděpodobně v něm máte i NetworkManager který konfiguruje wpa_supplicant
z grafického prostředí.
Jednotlivé bezdrátové sítě se definují v konfiguračním souboru, obvykle /etc/wpa_supplicant/wpa_supplicant.conf
. Je jich možno definovat libovolně mnoho, program se připojí k té, která je dostupná a zároveň má největší prioritu. Základní definice sítě eduroam
s nejběžnější konfigurací WPA2/PEAP/MSCHAPv2 vypadá takto:
network={ ssid="eduroam" key_mgmt=WPA-EAP eap=PEAP phase2="auth=MSCHAPV2" pairwise=CCMP group=CCMP TKIP ca_cert="/etc/ssl/example_CA.pem" domain_match="radius.example.org" identity="user@example.org" password="CorrectHorseBatteryStaple" }
Správné nastavení ověřování identity RADIUS serveru, se kterým váš suplikant komunikuje, je nezbytné pro ochranu vašeho hesla i pro ochranu před únosem Wi-Fi provozu. Věnujte mu proto náležitou pozornost! Další informace naleznete na stránce Práce s certifikáty v eduroamu.
K ověření identity autentizačního serveru je nutný certifikát certifikační autority, která vydala certifikát RADIUS serveru vaší organizace. Program wpa_supplicant
pracuje pouze s certifikáty formátu PEM. Ve výše uvedeném příkladu konfigurace jde o soubor /etc/ssl/example_CA.pem
. Pokud organizace používá certifikáty veřejných autorit, důvěryhodné v operačním systému, je možné nastavit důvěru také volbou ca_path
, směřující k adresáři obsahujícím veškeré důvěryhodné certifikáty (včetně symbolických odkazů vygenerovaných utilitou c_rehash). Například takto:
ca_path="/etc/ssl/certs"
Abyste měli jistotu, že se připojujete, a především že posíláte své heslo pouze svému domácímu RADIUS serveru, je třeba nastavit také kontrolu jména/jmen autentizačních serverů. Bez této konfigurace bude akceptován jakýkoli certifikát vydaný důvěryhodnou autoritou, což zejména v případě veřejných autorit znamená miliony certifikátů.
Kontrolu je možné nastavit různými způsoby. Výše uvedený příklad předpokládá certifikát vystavený na jediné jméno radius.example.org
. Pokud organizace používá víc autentizačních serverů, kde se každý prokazuje certifikátem vystaveným na jiné jméno, ale sdílí společnou koncovku (například r1.radius.example.org
a r2.radius.example.org
) je možné nastavit mírnější kontrolu na společnou koncovku, například:
domain_suffix_match="radius.example.org"
Třetí možností je vyjmenovat přímo kompletní jména autentizačních serverů volbou altsubject_match
. Tato volba je vhodná v případě, kdy autentizační servery nesdílí společnou koncovku. Tento způsob nasazení není doporučován pro nové instalace, ale na spoustě institucí přežívá z historických důvodů. Kontrolu pak lze nastavit takto: (Pozor! V řetězci se nesmí vyskytovat mezery!)
altsubject_match="DNS:radius1.example.org;DNS:radius2.example.org"
Standardně se heslo ukládá do konfiguračního souboru v otevřené podobě. Při použítí nejběžnějšího protokolu MSCHAPv2 to však není nutné, neboť k ověření hesla se použije pouze jeho NTLM hash. Hash ve formátu vhodném pro vložení do konfiguračního souboru je možné získat například tímto jednořádkovým skriptem:
$ python -c 'import getpass,hashlib; print("password=hash:"+hashlib.new("md4",getpass.getpass().encode("utf-16le")).hexdigest())' Password: CorrectHorseBatteryStaple password=hash:012c9edfb06b543233745c9aff836490
Uložení hashe nepředstavuje žádnou ochranu před zneužitím hesla. Útočník, který se zmocní hashe jej může přímo použít k přihlášení (technika pass the hash). Jde tak spíše o ochranu před odcizením hesla letmým pohledem.
Do konfiguračního souboru také můžeme snadno uložit konfiguraci bezdrátových sítí zabezpečených jednoduchým sdíleným tajemstvím WPA. K vygenerování potřebného fragmentu konfigurace je možné využít utilitu wpa_passphrase
:
$ wpa_passphrase HomeNetwork # reading passphrase from stdin CorrectHorseBatteryStaple network={ ssid="HomeNetwork" #psk="CorrectHorseBatteryStaple" psk=a14c6fb42d868ab1d1fb62373e6cc8d3bf0b3fa79e187d7226f1b22eaa784660 }
Poskytnuté heslo je rovnou převedeno do 256bitového sdíleného tajemství WPA, takže původní heslo může být z konfigurace odstraněno.
Do konfigurace WPA suplikanta nepřidávejte sítě, které nepoužívají žádné šifrování! Vystavili byste se tak riziku přesměrování na falešný přístupový bod a kompromitace Wi-Fi provozu. V případě, že nešifrovanou síť musíte pravidelně používat, definujte ji s volbou disabled=1
a povolujte za běhu pouze podle potřeby.
Vlastní spuštění WPA suplikanta je nejlepší přenechat spouštěcím skriptům daného operačního systému a tedy postupovat podle návodu konkrétní distribuce. Pro ruční vyzkoušení funkčnosti můžeme zkusit spustit suplikanta i ručně:
# wpa_supplicant -iwlan0 -c/etc/wpa_supplicant/wpa_supplicant.conf -d
Pokud autentizace proběhla úspěšně (poslední stav suplikanta je COMPLETED
), stačí na daném rozhraní spustit DHCP klienta, např. takto:
# dhcpcd wlan0
Součástí distribuce wpa_supplicant
jsou i programy wpa_cli
a wpa_gui
, poskytující řádkové, resp. grafické rozhraní k dálkovému ovládání běžícího suplikanta. Při správném nastavení oprávnění komunikačního soketu (vizte dokumentaci) je možné tyto utility používat i jako neprivilegovaný uživatel a snadno tak za chodu přepínat mezi Wi-Fi sítěmi. Je také možné za chodu přidávat nové sítě. Taková konfigurace se však po ukončení suplikanta ztratí, není-li nastavena volba update_config=1
. Neukládání konfigurace však může být výhodné pro dočasné připojení k nezabezpečeným sítím.
Utilita wpa_cli
standardně vypisuje na obrazovku každý krok během připojování a dokáže tak posloužit při hledání problémů. Základními příkazy jsou:
status
– vypíše aktuální stav suplikantascan
– spustí skenování dostupných sítí v okolí (skenování je asynchronní)scan_results
– vypíše výsledky posledního skenovánílist_networks
– vypíše seznam konfigurovaných sítíselect_network <id sítě|any>
– vynutí připojení ke konkrétní sítiroam <bssid>
– vynutí přechod na konkrétní přístupový bod s daným BSSID (MAC adresou)
— Ondřej Caletka 2017/03/17 22:32 přepracování a rozšíření návodu