Forum Turris
Fórum Turris Nápověda

Milí majitelé routerů Turris,

toto fórum bylo 9. 12. 2016 zmrazeno a nahrazeno naším novým Turris fórem. Ještě chvíli bude dostupné k prohlížení, ale již zde není možné přispívat. Více informací naleznete v oznámení o uzavření fóra.


Dear Turris routers users,

this forum has been frozen on Dec 9th, 2016 and replaced by our new Turris forum. It will be read-only accessible for some time after. For more information, read the announcement about closing the forum.

Nahoru Téma Majitelé routerů / Uživatelská vylepšení / RADIUS server a WPA2-EAP
- - Od JohnyRi Dne 2015-10-06 13:08 Upraveno 2015-10-06 16:01 Hlasů 1
Vážení kolegové turisté,
posledních pár dní jsem se intenzivně zabýval tím, zda by šlo na Turrisu rozběhat podnikové zabezpečení bezdrátové sítě bez externího serveru a zjistil jsem, že šlo :cool:.
Pokusím se poskytnout tutoriál, jak na to. Jsem si vědom, že jako v každém návodu, i zde se budou vyskitovat chyby, a proto uvítám jakékoliv připomínky a opravy. Nebráním se ani přenesení na wiki.

Začněme tím, že si ujasníme o co jde.
Nyní existují různé způsoby zabezpečení WiFi sítí. Mezi ty, které připadají v úvahu pro zkušeného správce se řadí WPA2-PSK s protokolem AES; pouze pokud by to vyžadovalo nějaké zařízení kvůli kompatibilitě, je možné povolit zpětnou kompatibilitu se starším protokolem TKIP, který je ale považován za prolomitelný.
WPA2-PSK je založené na myšlence, že všichni uživatelé bezdrátové sítě sdílejí stejné heslo a jím je také zašifrována komunikace v rámci bezdrátového přenosu.
Mezi výhody patří naprosto jednoduché nasazení, kdy se na routeru nastaví heslo, které se pak distribuuje mezi členy rodiny, přátele a další. Pro malý počet osob je tak toto zabezpečení naprosto dostačující. Profil k WPA-PSK síti lze distribuovat například pomocí QR kódu a instalaci tak zvládne i laik bez opisování složitého hesla a to tak může být patřičně dlouhé.
Mezi nevýhody se totiž řadí fakt, že moment, kdy se bezdrátový klient identifikuje s přístupovým bodem lze bezpečně zachytit a útočník pak na takto zachyceném záznamu může aplikovat útok hrubou silou a pokud máte na WiFi síti slabé / slovníkové heslo, je schopný jej prolomit. Další bezpečnostní díry skrývá protokol WPS, pomocí kterého je možné u některých routerů prolomit přístup za relativně krátkou dobu, tj. v řádech hodin.
Mezi další bezpečnostní riziko, které byste měli mít na paměti je, že kdo je připojen ke stejné síti, jako vy, vidí vaši bezdrátovou komunikaci nezabezpečeně. Proto může nastat problém s více připojenými lidmi, kteří se navíc mohou měnit. Nastane-li případ, že potřebujete někomu odebrat přístup, můžete pak v zásadě učinit dvěma způsoby.
a) Změnit heslo sítě. Heslo pak budete muset změnit u všech dosud připojených zařízení, kromě těch, které chcete nechat odpojené, což může být pracné a nepohodlné.
b) Zablokovat MAC adresu vyřazeného stroje. Ta lze však snadno změnit.

Alternativou k tomuto přístupu je podnikové zabezpečení, které se velmi často používá ve firmách, školách atp. Příkladem budiž například mezinárodní projekt eduroam.
Princip spočívá v tom, že klient naváže spojení s Access Pointem a provede ověření 1. fáze. To udělá tak, že se připojí na tzv. RADIUS server, který mu specifikuje AP. Pomocí otisku veřejného klíče, který musí mít uložený, ověří identitu RADIUS serveru a přejde k fázi 2. V té buď zabezpečeným tunelem pošle serveru své uživatelské jméno a heslo, popřípadě se ověří privátním klíčem, který je podepsaný certifikační autoritou RADIUS serveru.
Tyto způsoby připojení v rámci EAP (Extensible Authentication Protocol) se dělí na LEAP, PEAP, TLS, TTLS a další. LEAP byl vyvinutý firmou Cisco a z bezpečnostních důvodů už se nyní nedoporučuje jeho nasazení.
Podstatou 2 fázového šifrování je, že i když se podaří prolomit zabezpeční u klienta a unikne jeho heslo, komunikace je stále zašifrována.
V rámci EAP-TLS se uživatel identifikuje certifikátem a v PEAP je certifikát nahrazen uživatelským jménem a heslem.
TODO: Popsat TTLS.
Nutno poznamenat, že nakonfigurování EAP sítě na klientech je mnohem složitější a obzvlášť problémové je přenesení certifikáty na zařízení, které chceme připojit.

Nyní se konečně můžeme pustit do práce.
Jako první věc bude třeba nainstalovat freeradius. My využijeme balíkovacího systému Turrisu a pouze spustíme:

opkg update
opkg install freeradius2 freeradius2-common freeradius2-mod-chap freeradius2-mod-detail freeradius2-mod-eap freeradius2-mod-eap-md5 freeradius2-mod-eap-mschapv2 freeradius2-mod-eap-peap freeradius2-mod-eap-tls freeradius2-mod-eap-ttls freeradius2-mod-exec freeradius2-mod-files freeradius2-mod-logintime freeradius2-mod-mschap freeradius2-mod-pap freeradius2-mod-passwd freeradius2-mod-preprocess freeradius2-mod-radutmp freeradius2-utils


Dále je potřeba vygenerovat certifikáty. To lze udělat několika způsoby. Buďto přímo pomocí openssl, nebo využijeme utilitu easyrsa od OpenVPN.

opkg install openvpn-easy-rsa

cd /etc/easy-rsa
nano vars


Soubor upravíme dle našich preferencí. Obvzáště se zaměřte na EXPIRE část, která říká, jak dlouho budou jednotlivé certifikáty platit. Například u certifikační autority je vhodné délku prodloužit na 10 let. Je také nutné, aby hodnota proměnné KEY_SIZE odpovídala hodnotě v eap.conf, který budeme konfigurovat později.
Je také možné upravit soubor openssl-1.0.0.cnf, pro modifikaci cest a dalších proměnných.

#clean-all # pozor, smaže obsah adresáře /etc/easy-rsa/keys ! ujistěte se, že tam nemáte nějaké své klíče
build-ca --pass #Vygeneruje certifikační autoritu. Volbou pass zajistíme, že generování nových klíčů bude podmíněno zadáním hesla.
build-key-server --pass # Vygeneruje certifikát a privátní klíč serveru. Jako pass můžete nastavit složitou změť znaků (nyní to označíme jako 'heslo1'. Tu si poznamenejte, následně ji budeme uvádět v konfiguraci RADIUS serveru.
build-dh # vygeneruje soubor, který umožní Diffieho-Hellmanovu výměnu klíčů
build-key-pkcs12 --pass bob #Vygeneruje certifikát pro klienta jménem bob. Bob bude muset při instalaci certifikátu zadat toto heslo. Soubor je ve formátu bob.p12, který v sobě kombinuje privátní klíč a certifikát.

Poslední krok je nutné opakovat pro každého klienta s unikátním jménem (např tereza, bob2 atd). Heslo pro certifikáty si klienti mohou zadat sami, je důležité, aby ho znali.
Některé programy pro správu sítě (například Network Manager) nedovolí použití certifikátu bez hesla.

Je čas na konfigurace freeradius.
cd /etc/freeradius2

V souboru radiusd.conf zakomentujte řádek interface = br-lan.

V souboru clients.conf se definují parametry připojení k radiusserveru pro klienty. Tak například pro celou vnitřní síť za Turrisem bude konfigurace vypadat takto:

client 192.168.1.0/24 {
        secret          = sup€rBezpecneHesl0KtereJeNutnePrenestdoAP
        shortname       = TurrisLAN
}


Toto je ta nejjednodušší konfigurace. I zde je možné definovat rozhraní a další.

vzhledem k tomu, že jsme certifikáty vytvářeli pomocí easy-rsa, je možné freeradiusu pomoci symbolickým odkazem:

ln -s /etc/easy-rsa/keys /etc/freeradius2/keys

Nyní editujeme soubor eap.conf:
V části eap:
default_eap_type = tls
V části tls:
certdir = ${confdir}/keys
cadir = ${confdir}/keys
private_key_password = heslo1
private_key_file = ${certdir}/server.key
certificate_file = ${certdir}/server.crt
CA_file = ${cadir}/ca.crt
dh_file = ${certdir}/dh1024.pem
fragment_size = 1024
#toto musí odpovídat nastavení KEY_SIZE ze souboru vars
#check_crl = yes #Zde si dovolím poznámku pod čarou*

Pomalu se začínáme dostávat do finále:
Nyní máme server připravený a při jeho spuštění by se měli klienti úspěšně ověřit pomocí EAP-TLS.
Je třeba, aby byl na klienta přenesen soubor ca.crt pro ověření komunikace s pravým RADIUS severem a pak jeho klíč, např bob.p12.

Pokud chceme uživatele ověřovat pomocí uživatelského jména a hesla, není třeba generovat uživatelům certifikáty a klíče, ale místo toho editovat soubor /etc/freeradius2/users a uživatele tam dopsat.

Buď lze použít nezabezpečené heslo, nebo MSCHAPv2.
"bob"       Cleartext-Password := "heslo3"
"adela"     NT-Password := "AA8E249F681BCBDCE22941D24CD3B2E8"


k vygenerování NT hashe si půjčíme skript ze stránek http://wiki.openwrt.org/inbox/daloradius:

#!/bin/bash
PWD=$1
DUMMYUSER="smbencrypt_dummy"

# if there is no user $DUMMYUSER, we have to add it to /etc/passwd using the nobody group
grep -q smbencrypt_dummy /etc/passwd || echo "$DUMMYUSER:*:65533:65534:dummy_user_for_fake_smbencrypt:/var:/bin/false" >> /etc/passwd

# add entry to /etc/samba/smbpasswd
cat <<EOF | smbpasswd -s -a $DUMMYUSER
$1
$1
EOF

# get entry
NTHASH=`grep $DUMMYUSER /etc/samba/smbpasswd | cut -d':' -f4`

# remove $DUMMYUSER from /etc/samba/smbpasswd
smbpasswd -x $DUMMYUSER

#remove $DUMMYUSER from /etc/passwd
sed -i "/$DUMMYUSER/d" /etc/passwd

# output results
cat <<EOF
NT Hash
--------------------------------
$NTHASH
EOF


Po každé změně souboru users musíme radius restartovat. Doporučuji vše vyzkoušet v debugovacím režimu spuštěním příkazu

radiusd -XX

Nyní by mělo být vše funkční a my se můžeme pustit do nastavení Access Pointu. Toto již v pohodě zvládneme pouze s pomocí LuCi.
Můžeme buď změnit stávající nastavení, nebo přidat další SSID.
ESSID TurrisEAP
Mód Přístupový bod
Zabezpečení bezdrátové sítě: WPA2-EAP
Šifra: Vynutit CCMP (AES)
Server Radius-Authentication: 192.168.1.1 (nebo adresa Turrisu)
Tajný klíč pro Radius-Authentication: sup€rBezpecneHesl0KtereJeNutnePrenestdoAP

A můžete testovat.

Po každé změně konfiguračních souborů je třeba radius restartovat. Přidání nového certifikátu restart nevyžaduje, ale odebrání ano. A zde se právě dostávám k poslednímu kroku našeho tutoriálu.

*V případě, že totiž chcete odebrat certifikát, není to tak jednoduché, jak by se mohlo zdát, protože certifikát je už jednou naší certifikační autoritou podepsaný a my určitě nechceme generovat všechny znovu. Proto existují tzv. CRL soubory, neboli certificate revocation list, seznam revokovaných certifikátů, takových, které již nejsou platné. Představme si, že bob dělá v naší síti potíže a chceme mu odebrat přístup. V případě, že se ověřuje uživatelským jménem a heslem, je postup jednoduchý. Prostě mu udebereme účet vymazáním příslušného řádku v souboru users a je vystaráno.
Pokud se ale ověřuje svým privátním klíčem, musíme jeho certifikát revokovat a poté umožnit, aby si to freeradius zjistil. Takové seznamy bývá ve zvyku uvádět veřejně, neb je důležité, aby se CRL v případě, že není prázdný dostal do ruky každému, kdo důvěřuje naší certifikační autoritě.
Bobův certifikát revokujeme příkazem:

revoke-full bob

To však není vše. Freeradius má specifický způsob čtení revokačních záznamů, a proto je nutné v adresáři pustit takzvaný c_rehash. Turris přímo tímto příkazem nedisponuje, ale CZ.NIC jej zřejmě v Turrisu nějakým způsobem používá, jak dokládá tento 6 dnů starý záznam z gitu (viz https://github.com/CZ-NIC/turris-os-packages/tree/test/cznic/c-rehash).
Stačí si tak pouze vytvořit spustitelný soubor c_rehash (kdo by nevěděl, tak chmod +x ./c_rehash), do něj vložit obsah souboru https://github.com/CZ-NIC/turris-os-packages/blob/test/cznic/c-rehash/files/openssl-c_rehash.sh a pak ho spustit

./c_rehash /etc/easy-rsa/keys

Tento příkaz proskenuje adresář a vygeneruje symbolické odkazy na soubory, pojmenované podle jejich hashe.
Pak již stačí v souboru eap.conf povolit check_crl = yes a restartovat radius.

Voila, bob se již nepřipojí.

Jak lze vidět, celý postup správy certifikátů je velmi náročný a těžkopádný. Chce to trochu laborovat, aby si člověk osahal, jak co k čemu pasuje. Samotný management je pak mírně složitější, než pouhá správa uživatelských jmena a hesel.
RADIUS lze samozřejmě napojit na řadu databází, Active Directory atd. Musím se přiznat, že tak daleko jsem ve svém experimentování zatím nepokročil a možná by v tomto momentě bylo  vhodnější nainstalovat nějakého správce, jako třeba daloradius. To ale zase až příště.
Nadřazený - - Od Ondřej Caletka (>>>) Dne 2015-10-06 14:09
Díky za rozsáhlý návod. Dobrá práce. Dovolím si jen několik komentářů:

> Další bezpečnostní díry skrývá protokol WPS, pomocí kterého je možné u některých routerů prolomit přístup za relativně krátkou dobu, tj. v řádech hodin.


WPS je nezávislá nadstavba nad WPA-PSK a nemusí být vždy aktivní. Na Turrisu, stejně jako na všech ostatních OpenWRT routerech, aktivní nikdy nebyla.

WPA-PSK také umožňuje používat víc než jedno heslo sítě a také přiřazovat konkrétní heslo sítě konkrétním MAC adresám. Je tak možné mít jedno heslo pro soukromá zařízení a jiné heslo dávat hostům a pravidelně měnit. Jediný problém je, že podpora pro víc hesel není prozatím v netifd (samotný hostapd to podporuje). A v neposlední řadě obrovskou výhodou WPA-PSK proti WPA-EAP je vzájemná autentizace klienta i AP, kdy se ověřuje nejen to, že klient zná heslo sítě, ale i to, že dané heslo zná AP. Takže není snadně vytvořit zařízení, které bude číhat k jakým sítím se chce klient připojovat a na základě toho vytvořit na míru AP, které bude např. podvrhovat obsah.

> Princip spočívá v tom, že klient naváže spojení s Access Pointem a provede ověření 1. fáze. To udělá tak, že se připojí na tzv. RADIUS server, který mu specifikuje AP, popřípadě ho má uložený.


Klient si nemůže vybrat, se kterým RADIUS serverem bude hovořit. Tato volba je pevně nastavena v konfiguraci AP.

> Pomocí otisku veřejného klíče, který musí mít uložený, ověří identitu RADIUS serveru a přejde k fázi 2. V té buď zabezpečeným tunelem pošle serveru své uživatelské jméno a heslo, popřípadě se ověří privátním klíčem, který je podepsaný certifikační autoritou RADIUS serveru.


Kdyby to tak všichni dělali, byl by to ideální svět. Drtivá většina klientů ale v první fázi certifikát vůbec neověřuje, a tak pošle hash svého hesla komukoli, kdo o něj má zájem. A kdokoli může spustit falešné AP, které bez ohledu na heslo pustí každého dovnitř. Navíc  jediný v praxi použitelný algoritmus ověřování jménem a heslem je MSCHAPv2, který má známé zranitelnosti.

> k vygenerování NT hashe si půjčíme skript


Teoreticky by mohl fungovat i tento one-liner v pythonu:
python -c 'import getpass,hashlib; print(hashlib.new("md4", getpass.getpass("heslo: ").encode("utf-16le")).hexdigest())'

Osobně mi nedává smysl nasazovat WPA-EAP na jednu síť s malým počtem uživatelů, kteří se často nemění. Jako vyloženě nebezpečné pak považuji propojení databáze účtů RADIUS serveru s jinými databázemi účtů, takže heslo uložené v počítači je možné po úniku zneužít například pro čtení e-mailu.
Nadřazený - Od JohnyRi Dne 2015-10-06 14:36
Ano ano, to jsou přesně mé myšlenky vypíchnuté do puntíku.
S tím RADIUSem jsem to napsal nešikovně. Myslel jsem tím, že klient si může specifikovat, kterým RADIUS serverům (ne)pošle heslo. Pamatuji si, že taková specifikace se nacházela ve Windows při přidání WiFi sítě. Kolonka Connect to these servers.


> Kdyby to tak všichni dělali, byl by to ideální svět. Drtivá většina klientů ale v první fázi certifikát vůbec neověřuje, a tak pošle hash svého hesla komukoli, kdo o něj má zájem. A kdokoli může spustit falešné AP, které bez ohledu na heslo pustí každého dovnitř. Navíc  jediný v praxi použitelný algoritmus ověřování jménem a heslem je MSCHAPv2, který má známé zranitelnosti.


Přesně proto jsem se začal zajímat o EAP-TLS. měl jsem teorii, že když je klient nucen instalovat jeden certifikát, nebudou pro něj problém dva. Samozřejmě používat stejné heslo pro EAP a email je špatně.

Trápí mě, že neexistuje způsob, jak jednoduše profil distribuovat klientům.
Nahoru Téma Majitelé routerů / Uživatelská vylepšení / RADIUS server a WPA2-EAP

Powered by mwForum 2.29.3 © 1999-2013 Markus Wichitill