niedziela, 13 marca 2011

Wifi + Radius

Zabezpieczanie sieci WLAN z serwerem Radius
Freeradius: indywidualne uwierzytelnianie w sieci Wi-Fi

W firmowej sieci WLAN proste uwierzytelnianie z wykorzystaniem wspólnego hasła i mechanizmu WPA-PSK nie jest wystarczającym zabezpieczeniem. Znane wielu osobom hasło szybko przestaje być tajemnicą i trzeba je zmieniać najpóźniej wtedy, gdy komukolwiek z zewnątrz pozwolono choćby tymczasowo podłączyć się do sieci.

Na szczęście administrator zaoszczędzi sporo czasu i wysiłku, korzystając z mechanizmu przydzielania haseł przez serwer. Do takich właśnie zadań służy mechanizm WPA Enterprise, w którym stacja bazowa WLAN komunikuje się z klientami z wykorzystaniem standardu IEEE 802.1x i serwera Radius. Do dyspozycji mamy jego otwartoźródłową implementację o nazwie Freeradius. W artykule opisujemy uruchamianie oprogramowania w systemie Ubuntu 10.10 oraz konfigurację klientów w różnych środowiskach.

Alternatywną metodą zabezpieczania struktury WLAN jest usługa Internet Authentication Service (IAS), którą oferują systemy Windows Server, począwszy od wersji 2003 (w tym także Windows Home Server) – ale nimi nie będziemy się zajmować. Jeśli natomiast chcielibyśmy uruchomić Radiusa w innych odmianach Windows, w grę wchodzą niemal wyłącznie serwery komercyjne. Na liście okienkowych wariantów Radiusa widnieje wprawdzie Tekradius, lecz wymaga on zastosowania bazy MS SQL Server, a więc nie jest do końca darmowy.

Moduł konfiguracyjny routera
Niedrogie routery WLAN także mogą służyć za serwer Radius Powiększ W tej sytuacji, pomijając windowsową edycję Freeradiusa, nie dysponujemy innym darmowym i nadającym się do użytku serwerem. Niestety, w przypadku wersji dla Windows Freeradius zatrzymał się dawno temu na wydaniu 1.1.7 i w związku z tym nie będziemy go brać pod uwagę. Jeśli mimo to ktoś chciałby koniecznie zainstalować serwer Radius w systemie Windows XP lub Windows 7, najprostszym rozwiązaniem będzie zastosowanie maszyny wirtualnej z Linuksem.

Nawet jeśli w sieci nie działa żaden serwer, zastosowanie Radiusa nie musi stanowić problemu – niektóre routery lub stacje bazowe (punkty dostępowe) same zawierają proste implementacje Radiusa. Nawet niedrogie routery WLAN, wyposażane w alternatywny firmware (np. DD-WRT), mogą funkcjonować jako serwery.

Bezpieczne logowanie

Freeradius szybko wyrósł z prostych metod uwierzytelniania, w których nazwa użytkownika i hasło są przekazywane otwartym tekstem. Obecnie oprogramowanie posługuje się protokołem EAP (Extensible Authentication Protocol), pozwalającym stosować różne metody kryptograficznego zabezpieczania transmisji (EAP-TLS/TTLS, PEAP, LEAP), a także haseł jednorazowych oraz SIM-ów. Uwierzytelnianie odbywa się przy użyciu kombinacji nazwy użytkownika i hasła lub za pomocą certyfikatu.

Dane dostępowe są przechowywane na serwerze Radius w prostym pliku tekstowym lub w bazie danych (LDAP, SQL). W przypadku małych sieci – z maksymalnie kilkudziesięcioma użytkownikami, tak jak w naszym przykładzie – plik tekstowy w zupełności wystarcza.

Aby dane logowania nie były transmitowane otwartym tekstem między stacją bazową a serwerem Radius, poddawane są szyfrowaniu. Wymaga się przy tym, aby na kliencie zainstalowany był przynajmniej certyfikat główny (Root CA Certificate), na bazie którego utworzono certyfikat serwera Radius. Dzięki certyfikatowi głównemu klient sprawdza, czy uwierzytelnia na właściwym serwerze.

Radius
Autentykator (punkt dostępowy WLAN lub przełącznik sieciowy obsługujący standard 802.1x) przekazuje żądanie zalogowania do serwera uwierzytelniającego. Ten decyduje, czy wnioskodawca (suplikant) otrzyma prawo wejśćia do sieci Powiększ W charakterze pośredników (autentykatorów) między klientem (określanym również mianem suplikanta) a serwerem Radius działa jedna lub wiele stacji bazowych WLAN. Te ostatnie muszą obsługiwać metodę uwierzytelniania WPA2 Enterprise, czasami określaną także jako WPA2-1x lub WPA2/802.1x. Do wypróbowania naszego serwera Radius skorzystaliśmy z routera TP-Link WR1043ND, ale standard 802.1x jest obsługiwany również przez wiele innych urządzeń.

Stacje bazowe muszą zostać skonfigurowane do poziomu zabezpieczeń WPA2 Enterprise – podaje się przy tym adres IP serwera Radius i wprowadza wspólne hasło (shared secret), które zabezpiecza komunikację między serwerem a punktem dostępowym.

Konfiguracja Freeradiusa

W Ubuntu, począwszy od wersji 10.04, serwer Freeradius da się zainstalować za pomocą narzędzia do zarządzania pakietami. Pliki konfiguracyjne znajdują się w katalogu /etc/freeradius, a katalog z certyfikatami (/etc/freeradius/certs) jest na początku pusty. Należy tam skopiować pięć zbiorów z folderu /usr/share/doc/freeradius/examples/certs: ca.cnf, server.cnf, client.cnf, xpextensions i makefile. Dziennik (log) jest przechowywany w folderze /var/log/freeradius.

Na początku trzeba odpowiednio zmodyfikować pliki konfiguracyjne i utworzyć certyfikaty. Zaczynamy od zdefiniowania użytkowników (/etc/freeradius/users):

"rodzice" Cleartext-Password := "dostepstaly"

"dzieci" Cleartext-Password := "dostepsporadyczny",

Login-Time :="Wk0800-2000,Sa0800-2200,Su0800-2000"

"gosc" Cleartext-Password := "dostepokazjonalny", Login-Time := "Al0700-2300"

"Jan Kowalski" Auth-Type := Reject, Reply-Message = "nie zyje!"

Parametr Login-Time ogranicza możliwość logowania do określonych godzin

Nazwy użytkowników powinno się ująć w cudzysłów, tak aby problemów nie sprawiały ewentualne puste znaki. Należy ponadto unikać znaków diakrytycznych i specjalnych w loginach i hasłach, gdyż czasami programy klienckie różnie je interpretują i w rezultacie może nastąpić problem z połączeniem mimo pozornie poprawnego wprowadzenia danych. Freeradius odczytuje kropkę w nazwie użytkownika jako prefiks określający wybrany typ usługi – wartość "radtest.ppp" oznacza, że pożądane jest połączenie PPP – stosowania kropek lepiej więc się wystrzegać.

Parametr Login-Time uniemożliwia zalogowanie się do sieci poza podanymi godzinami. Jednak nie powoduje on automatycznego wylogowania – musi o to zadbać punkt dostępowy poprzez regularne uwierzytelnianie (np. w cyklu piętnastominutowym). Przedziały czasowe są definiowane za pomocą angielskojęzycznych skrótów nazw dni tygodnia (np. Tu dla wtorku; dodatkowo mamy skrót Al – wszystkie dni tygodnia i Wk – dni robocze) oraz terminu z dokładnością do jednej minuty (hhmm-hhmm).
Serwer Radius musi wiedzieć, z jakimi pośrednikami ma się komunikować i znać wspóldzielony klucz (shared secret). Informacje te należy wprowadzić do pliku clients.conf:

client 192.168.111.8/29 {

secret = radiustest123

shortname = AP-w-sieci-testowej

}

W przykładzie wyżej demon radiusd oczekuje na zapytania z podsieci 192.168.111.8 do .15. W sytuacji gdy obsługiwana jest tylko jedna stacja bazowa WLAN ze stałym adresem IP, ten ostatni może być wpisany bezpośrednio z dodatkowym sufiksem /32.

Generowanie certyfikatów

Do tworzenia certyfikatu głównego i wywodzącego się z niego certyfikatu serwera służą przykładowe pliki i skrypt Make. Dysponując prawami administratora, przechodzimy do katalogu /etc/freeradius/certs. Najpierw modyfikujemy plik konfiguracyjny ca.cnf: parametr default_days w sekcji [CA_default] ustawiamy na 1826 (dni), aby odnowienie i dystrybucja certyfikatu przypadła najwcześniej po pięciu latach. W sekcji [req] definiujemy hasła.

Aby łatwiej odnaleźć własny certyfikat główny w systemie operacyjnym klienta, zmieniamy także wpisy w sekcji [certificate_authority]. Te same poprawki wprowadzamy w pliku konfiguracyjnym server.cnf:

[CA_default]

default_days = 1826

[req]

input_password = radiustest123

output_password = radiustest123

[certificate_authority]

countryName = PL

stateOrProvinceName = Testowy-serwer-Radius

localityName = Wroclaw

organizationName = heise online Polska

emailAddress = redakcja@heise-online.pl

commonName = "Testowy serwer Radius"

Sekcje i parametry w pliku /etc/freeradius/certs służące do automatycznego tworzenia certyfikatów. Sześciowierszowy blok poniżej linii [certificate_authority] skopiujemy do pliku server.cnf pod znacznikiem [server]

Teraz tworzymy certyfikat główny i serwerowy oraz klucze serwerowe. Służy do tego komenda make all.

Aby serwer Radius w czasie startu odczytał klucz serwerowy, wpisujemy hasło zdefiniowane w zbiorze ca.cnf także do pliku /etc/freeradius/eap.conf jako wartość parametru private_key_password. Następnie kopiujemy certyfikat główny ca.der z katalogu /etc/freeradius/certs na pendrive'a USB, aby zainstalować go na klientach serwera Radius.

Podczas instalacji Freeradius jest aktywowany jako usługa, dzięki czemu po kolejnym starcie systemu uruchamia się automatycznie. Gdy chcemy wystartować od razu, należy wydać polecenie sudo /etc/init.d/freeradius start.

Starsze wersje i inne systemy

W należących do repozytoriów Ubuntu wydaniach Freeradiusa wcześniejszych niż 2.1.8 brakuje istotnego komponentu: nie da się zrealizować bezpiecznego uwierzytelniania za pomocą metod kryptograficznych, ponieważ pakiet został skompilowany bez obsługi OpenSSL. Pełny Freeradius może być jednak zbudowany i zainstalowany samodzielnie.

Na początku zakładamy podkatalog do budowania serwera (mkdir build; cd build). Następnie pobieramy pakiet z kodem źródłowym Freeradiusa; przyjmijmy, że jest nim stara wersja 2.1.8. Później wydajemy kilka poleceń i czekamy około kwadransa na końcowy rezultat:

sudo apt-get install fakeroot dpkg-dev libssl-dev quilt autotools-dev libtool \

libltdl3-dev libpam0g-dev libmysqlclient-dev libgdbm-dev libldap2-dev \

libsasl2-dev libiodbc2-dev libkrb5-dev libperl-dev libpcap-dev python-dev \

libsnmp-dev libpq-dev debhelper

tar zxf freeradius-server-2.1.8.tar.gz

cd freeradius-server-2.1.8

fakeroot dpkg-buildpackage -b -uc

cd ..

sudo dpkg -i libfreeradius2_2.1.8+git_i386.deb freeradius-common_2.1.8+git_all.deb \

freeradius_2.1.8+git_i386.deb freeradius-utils_2.1.8+git_i386.deb

Pierwsze polecenie instaluje pakiety konieczne do zbudowania aplikacji. Podczas kompilacji (z wykorzystaniem komendy fakeroot) wszystkie pliki binarne .deb trafiają do katalogu nadrzędnego. Ostatnia komenda sudo instaluje serwer Freeradius oraz narzędzia administracyjne (utils).

Po instalacji katalog z certyfikatami (/etc/freeradius/certs) jest pusty. Kopiujemy tam zawartość folderu ~/build/freeradius-server-2.1.8/raddb/certs. Następnie edytujemy pliki ca.cnf oraz server.cnf w katalogu /etc/freeradius/certs i tworzymy certyfikaty w sposób opisany wyżej.

Strony wiki projektu Freeradius wyjaśniają, jak zbudować pakiety w innych systemach operacyjnych (Red Hat, openSUSE, Mac OS X, Solaris). Zazwyczaj potrzebne są wówczas pliki freeradius-server oraz make, ułatwiające generowanie certyfikatów. Trzeba pamiętać, że Freeradius ma wtedy inny układ folderów: pliki konfiguracyjne są umieszczone w katalogu /etc/raddb, a dziennik – w /var/log/radius. Certyfikaty znajdziemy w folderze /etc/raddb/certs.

Konfiguracja klientów WLAN

Certyfikat w Windows XP
Importowanie certyfikatu w Windows XP Powiększ Logowanie w sieci WLAN zabezpieczonej przez serwer Radius przebiega w sposób nieco odmienny od tego, do jakiego większość użytkowników jest przyzwyczajona. Zamiast wspólnego hasła WPA stosuje się przechowywaną na serwerze kombinację nazwy użytkownika i hasła.

W Windows XP jeszcze przed pierwszym logowaniem importujemy certyfikat główny (np. z pendrive'a USB). Po podwójnym kliknięciu pliku ca.der naciskamy przycisk Zainstaluj certyfikat. Następnie do skutku klikamy przycisk Dalej. Pojawi się okienko z pytaniem, czy na pewno chcemy zainstalować certyfikat – odpowiadamy twierdząco, a Windows XP wybiera prawidłową lokalizację (Zaufane główne urzędy certyfikacji).

Teraz konfigurujemy parametry łącza. W menu Start wywołujemy opcję Połącz z | Połączenie z siecią bezprzewodową, wybieramy ustawienia zaawansowane, a po kliknięciu zakładki Sieci bezprzewodowe podajemy nazwę sieci radiowej i wybieramy odpowiednią metodę szyfrowania, najlepiej WPA2/AES.

W sekcji Uwierzytelnianie wybieramy Chroniony protokół EAP (PEAP), w jego ustawieniach wskazujemy certyfikat główny i wyłączamy opcję pytania użytkownika o autoryzowanie nowych serwerów. Następnie określamy metodę uwierzytelniania EAP-MSCHAPv2: wyłączamy automatyczne korzystanie z danych logowania do systemu Windows.

Kreator sieci w Windows XP
Kreator sieci w Windows XP Powiększ

Import certyfikatu w Windows 7
Aby Windows 7 zapisał certyfikat główny w sekcji Zaufanych głównych urzędów certyfikacji, trzeba mu trochę pomóc Powiększ Nieco inaczej sprawa wygląda w przypadku Windows 7. Tutaj musimy ręcznie wskazać Zaufane główne urzędy certyfikacji jako lokalizację dla naszego certyfikatu. Robimy to po rozwinięciu menu Start, wpisaniu w polu Wyszukaj programy i pliki komendy certmgr.msc i naciśnięciu klawisza [Enter].

Następnie konfigurujemy połączenie WLAN – należy wybrać typ zabezpieczeń WPA2-Enterprise. Później zmieniamy ustawienia zabezpieczeń: domyślnie ustawiona metoda Microsoft: Chroniony protokół EAP (PEAP) jest odpowiednia, ale musimy kliknąć przycisk Ustawienia. Teraz zaznaczamy zaimportowany certyfikat na liście zaufanych urzędów certyfikacji i wyłączamy monitowanie użytkownika o autoryzację nowych serwerów.

Urząd certyfikacji w Windows 7
Samodzielnie podana nazwa wspólna (commonName) ułatwia odnalezienie certyfikatu głównego w programie administracyjnym Windows 7 (certmgr.msc) Powiększ W przypadku metody uwierzytelniania poprzez zabezpieczone hasło (EAP-MSCHAPv2) wyłączamy automatyczne przekazywanie danych logowania do Windows. Po naciśnięciu przycisku OK wybieramy ustawienia zaawansowane i tryb Uwierzytelnianie użytkownika.

W Ubuntu konfigurowanie sieci WLAN zabezpieczonej serwerem Radius jest bardzo łatwe. Kopiujemy certyfikat główny ca.der z pendrive'a USB do katalogu domowego. Następnie wybieramy sieć bezprzewodową, klikając ikonę sieci w zasobniku systemowym, wskazujemy certyfikat CA, wprowadzamy nazwę użytkownika oraz hasło – i gotowe

Smartfony i poszukiwanie błędów

Konfigurator WLAN w Nokii N97
Konfigurowanie parametrów łącza dla aparatów Nokii (tutaj model N97) jest dość męczące Powiększ Niewielkim nakładem sił udało się nam także skonfigurować trzy smartfony do nawiązywania połączeń z siecią WLAN chronioną przez serwer Radius. Apple'owski iPhone bez problemu włączył się w strukturę Wi-Fi po włączeniu opcji automatycznego wyboru metody uwierzytelniania – trzeba było jedynie potwierdzić certyfikat pobrany z serwera. Także działający pod kontrolą systemu Android 2.1 telefon HTC Sense skomunikował się przy domyślnym ustawieniem PEAP/MSCHAPv2.

W przypadku Nokii E51 przy próbie nawiązania połączenia z siecią chronioną serwerem Radius moduł obsługujący komunikację bezprzewodową bez przerwy pytał o hasło WPA. Konieczne było przedzieranie się przez prawdziwy gąszcz opcji menu: Narzędzia | Ustawienia | Połączenie| Punkty dostępu | Opcje | Nowy punkt dostępu. Później podawaliśmy parametry Nazwa połączenia (Radius-test), Nośnik danych (WLAN), Nazwa sieci WLAN (Radius-test), Tryb zabezpieczeń WLAN (802.1x). W sekcji Ustawienia zabezpieczeń WLAN wybraliśmy Ustawienia EAP plug-in (EAP-LEAP) i wreszcie po wejściu w opcję EAP-LEAP wpisaliśmy nazwę użytkownika oraz hasło. Po dokonaniu takich operacji udało się nawiązać połączenie z siecią zabezpieczoną serwerem Radius.

Logi Freeradiusa
Plik logów serwera Freeradius daje wskazówki na temat nieudanych prób nawiązania połączenia Powiększ Wraz z Freeradiusem otrzymujemy narzędzie radsniff. Prezentuje ono pakiety wymieniane w eterze, jeśli podamy współdzielone hasło (shared secret): radsniff -s radiustest123. Program pozwala określić, czy komunikacja między suplikantem a serwerem Radius w ogóle się odbywa, a także która strona odrzuciła połączenie.

Aby sprawdzić, czy nieudana próba logowania jest wynikiem literówki w nazwie użytkownika, można zapisywać dane z prób nawiązywania połączeń do pliku dziennika. Wystarczy zastąpić linię auth = no (w sekcji log{} pliku konfiguracyjnego radiusd.conf) wierszem auth = yes. Następnie trzeba zrestartować serwer Radius.

Dodatkowa Lektura - IEEE-802-1X

http://www.heise-online.pl/networks/features/Zabezpieczanie-sieci-WLAN-i-LAN-wedlug-specyfikacji-IEEE-802-1X-1021011.html

2 komentarze: