Bezpečnost a audit RADIUS serveru

V tomto článku se stručně zaměříme na správná bezpečnostní nastavení při používání RADIUS serveru. Jak postupovat při jeho instalaci, konfiguraci a následném auditu. Ukážeme si, jaká dodržovat pravidla při jeho provozu, a také co přesně si zkontrolovat a na co si dávat pozor. Z důvodu velkého počtu možných řešení a komplexnosti se nebudeme pouštět do nějakých detailních technikálií, pouze obecně popíšeme, jak by měl správce sítě postupovat. Zmíněné RADIUS servery se dají využít jak v malých podnicích, tak ve velkých síťových infrastrukturách.

Co je vlastně RADIUS

Remote Authentication Dial-In User Service, zkráceně RADIUS, patří mezi AAA protokoly, takže je klíčovým prvkem pro zabezpečení a správu přístupu k síti. Jeho primární funkce je autentizace a autorizace uživatelů, kteří se snaží připojit k síťovým službám, jako je například přístup k bezdrátové síti, přístup k síťovým zdrojům přes VPN, nebo připojení k vnitřní síti pomocí modemu. Konkrétně se RADIUS zabývá těmito hlavními funkcemi: Autentizace, Autorizace a Účtování (Accounting). Těmito funkcemi tak přispívá k zabezpečení a efektivnímu řízení síťové infrastruktury organizace. Administrátoři takto mohou poměrně jednoduše spravovat uživatele, jejich skupiny a jednotlivé přístupy.

radiusserver01

Přehled dostupných řešení

Stejně tak jako u velké většiny softwarových nástrojů existuje mnoho řešení RADIUS serverů. Ve své podstatě fungují samozřejmě všechny stejně, nicméně každý z nich má nějaké své speciální funkce, ovládání a případně vzhled uživatelského rozhraní. Nasadit je lze na velkou většinu běžných operačních systémů, jako je Windows, Linux a MacOS. Je tedy poměrně složité nějak obecně popsat, jakým způsobem vše nastavit a jak s nimi pracovat. Pokud chcete mít méně práce a starostí, je možné pořídit si takovou službu od nějaké větší softwarové společnosti, jako například XPerience Technologies a jejich Clearbox RADIUS. Takový RADIUS server poté běží na cloudu, kde je většinou pod aktivní správou vybrané společnosti. Jejich největší výhoda je, že tento software dopředu obsahuje velké množství funkcí, je poměrně spolehlivý, robustní a pravidelně aktualizovaný s možností jednoduchého zálohování. Taková řešení však nejsou zadarmo, tudíž pro účely tohoto článku a testování budeme používat především open source RADIUS servery.

Jedná se konkrétně o tyto:

Jak probíhalo jejich nastavení a provoz se můžete dočíst níže v sekci Testování RADIUS serverů.

radiuserver02

Počáteční nastavení při nasazení

Před instalací je potřeba si vše důkladně rozvrhnout a na základě specifických potřeb pak vybrat adekvátní server. Manuální nastavení většiny z nich není úplně jednoduchý úkol, tudíž je potřeba být důsledný a věnovat pozornost každému malému detailu. Prvně je nutné si udělat přehled v systému, kam se bude server instalovat. To může v budoucnu ušetřit spoustu nejasností. Pro nastavení je samozřejmě nutné mít k systému administrátorský přístup. Následně je potřeba zkontrolovat nastavení sítě a firewallu, tak aby se zařízení mohly k serveru připojit a bezpečně s ním komunikovat.

Zde je výčet hlavních parametrů, na jejichž základě lze vybrat ten ideální RADIUS server:

  • Jakým způsobem probíhá autentizace a autorizace, jestli se používají přihlašovací údaje, MAC adresa zařízení, nebo přístupové certifikáty (Ty jsou sice jednodušší na použití, ale vyžadují mít v provozu i certifikační autoritu).
  • Jaká je primární funkce serveru, jestli přiděluje pouze přístup do sítě, nebo na základě například skupiny uživatele i přístupy do sdílených složek a ostatních systémů.
  • Jaké uživatele server ověřuje, jestli jsou to zákazníci poskytovatele internetového připojení, nebo zaměstnanci firmy, takže například kolik bude přibližně běžných uživatelů.
  • Jaké informace má server zaznamenávat do logů.

Nastavení sítě, databáze a operačního systému

Aby server a všechny jeho komponenty fungovaly, je potřeba pro jeho provoz nastavit síť, ve které operuje. Ať už se tedy uživatelé připojují přes VPN, nebo například přímo k místnímu routeru, v návrhu architektury musí být nejprve jejich komunikace směrována na RADIUS server (případně k němu vedoucí PROXY server). Všem firewallům, které pak budou stát mezi serverem a klientem je potřeba nastavit pro tuto specifickou komunikaci výjimku.
Většina serverů si sama dokáže udržovat informace o uživatelích lokálně v SQL souborech, nicméně je možné ukládat tyto informace na vzdálených databázových serverech (v takovém případě je nutná dodatečná konfigurace připojení). Vzhledem k tomu, že takové připojení je následně více náchylné k chybovosti, ukládání jinak než lokálně, se běžně nedoporučuje. Stejně tak to funguje i s ukládáním logů. Pokud chcete u uživatelů logovat nějaká nestandardní data, je potřeba nastavit prostor, kam se mají ukládat. Při velkém počtu uživatelů se totiž málokdy ukládají všechna data, pouze se z nich vytváří celkový souhrn.

Otestování funkčnosti a uvedení do provozu

Pokud je vše připraveno a nastaveno, je na čase spustit server a ujistit se, že vše běží tak jak má. Nejprve musíme zajistit jednoduchou výměnu jakékoliv informace, abychom měli jistotu, že nic nebrání serveru v komunikaci s klientem. Následně se přihlásíme do správy serveru a připravíme si pár testovacích účtů, s různými parametry, například odlišné skupiny nebo úrovně přístupu. Přestože je možné testovat tyto účty lokálně, pro jistotu je lepší použít nějaké další zařízení. Při přihlášení pozorně sledujeme na RADIUS serveru soubory logů, ty nám pomohou dohledat případné chyby.

Nástroje, které lze použít při testování funkčnosti a bezpečnosti:

  • NTRadPing: Jednoduchý nástroj pro Windows, výhodou je že má i grafické uživatelské rozhraní, pro běžné testování přístupu a odezvy.
  • radtest (FreeRADIUS): Nástroj spustitelný v příkazovém řádku, pro Windows a Linux pro testování a debugování.
  • radclient (FreeRADIUS): Pokročilý nástroj pro testování a případné skriptování.
  • Radlogin: Nástroj pro simulace, monitoring a debugování.
  • RadPerf: Nástroj určený pro měření výkonu a simulace zatížení serveru při komunikaci.
  • test access radius-server: Výborný nástroj pro automatické testování serveru.

Většina těchto nástrojů jsou CLI (Command-Line Interface), takže nejsou tak přehledné jako například zmíněný NTRadPing.

radiusserver03

Jak udržovat bezpečný chod

V ideálním případě nám tedy server běží, komunikuje a obecně funguje tak jak má. Vzhledem k jeho funkci je však potřeba se o něj i nadále starat. Primárně je důležité udržovat software aktualizovaný na jeho poslední stabilní verzi. To platí jak pro RADIUS server samotný, tak pro všechny související aplikace a knihovny. Dále je třeba dodržovat standardní bezpečností postupy při přístupu ke správě. To znamená v první řadě, mít nastavenou silnou autentizační metodu, žádná přednastavená a výchozí hesla ani účty, nejlépe mít trochu přísnější politiku hesel. Minimálně tedy 10 znaků, kombinace čísel, písmen, speciálních znaků a také systém pro blokování opakovaných pokusů o přihlášení s neplatným heslem. V druhé řadě pak omezit přístup ke správě pouze na nezbytně nutné přístupové body, a využít například nastavení firewallu k filtraci určitého provozu na povolené IP adresy a porty. Tím by se mělo minimalizovat riziko DoS útoků. Komunikace jako taková by měla být samozřejmě vždy zabezpečena pomocí bezpečných šifrovacích protokolů TLS. V poslední řadě je třeba doplnit, že důležité je i nastavení monitoringu a záznamů pro odhalení neobvyklých aktivit nebo pokusů o neoprávněný přístup. Stejně tak jako záloha dat a konfiguračních souborů, které jsou velice nápomocné v případě výskytu nějaké chyby a nutnosti obnovení systému. To, co je pro bezpečný chod ale opravdu nejdůležitější, je dostatečná proškolenost správců, aby se v problematice dobře orientovali a věděli, co dělají a především tato "pravidla" bezpečného provozu dodržovali.

Zranitelnosti a na co si dát pozor

Předešlé odstavce už tak trochu napovídají, jaké typy zranitelností a útoků jsou pro RADIUS servery kritické. V tomto případě tedy počítejme, že používáme server, který je špatně nakonfigurovaný a nezabezpečený.

  • Slabá autentizace: Používání slabých nebo přednastavených hesel, případně jiných přihlašovacích údajů velmi zvyšuje riziko neoprávněného přístupu. Doporučuje se používat silná hesla a ve speciálních případech také nějakou formu dvoufaktorové autentizace.
  • Nešifrovaná komunikace: Při komunikaci mezi klientem a RADIUS serverem se při připojení odesílají data na základě kterých je uživatel následně připojen. Pokud tato komunikace na jakékoliv úrovni není šifrována, může být snadno odposlechnuta a zneužita. Vždy používejte šifrovací protokoly jako TLS, i pokud se jedná o komunikaci v lokální síti. Tam je pravděpodobnost útoku sice daleko menší, nicméně rozhodně ne nereálná.
  • Nesprávně nastavené oprávnění: Uživatelé by po připojení měli dostat pouze taková oprávnění, která potřebují, a to buď na základě nějakých předdefinovaných rolí, úloh, nebo individuálního nastavení. Ve chvíli, kdy mají nadbytečná oprávnění, která nutně nepotřebují, zvyšuje se riziko zneužití přístupu, vzhledem k tomu že jej má větší počet účtů. Pravidelně tedy revidujte a aktualizujte přístupová práva a role uživatelských účtů.
  • Otevřené porty a přístup z neautorizovaných IP adres: Otevřené porty bývají často výhodným cílem pro útoky. Omezte přístup k serveru pouze na specifické porty a důvěryhodné IP adresy pomocí firewallu, především pokud přistupujete ke správě serveru, ta by měla být v ideálním případě dostupná pouze z lokální sítě.
  • Chyby v konfiguraci: Chybná konfigurace serveru může vést k špatnému fungování nebo zranitelnostem. Mezi nejčastější takové chyby patří špatné nastavení logování, konfigurace ve firewallu a povolení připojení nezabezpečených přístupových bodů. V prvním případě může dojít k přehlédnutí klíčových bezpečnostních událostí, v druhém případě může být právě takovéto nastavení rozhodující při blokování neoprávněných přístupů a provozu, a v třetím případě může dojít k ohrožení bezpečnosti celé sítě, pokud se v ní nachází zařízení, které není nijak chráněno, ale i přesto je připojeno k RADIUS serveru. V tomto posledním bodě nejde až tak o bezpečnost serveru jako takového, jen je potřeba na to myslet, existují i nastavení která odmítnou autentifikovat jakékoliv zařízení u něhož nejsou splněna určitá bezpečnostní kritéria.
  • Nedostatečný monitoring a auditování: Všechny funkce a běh serveru je potřeba průběžně monitorovat, jinak lze přehlédnout neobvyklé aktivity. Implementujte systémy pro monitoring a auditování, abyste mohli rychle reagovat na podezřelé události, bez lidské kontroly a správné reakce se totiž všechny tyto funkce míjí účinkem.
  • Zranitelný a neaktuální software: Neaktualizovaný software může obsahovat známé chyby a zranitelnosti, které jsou v dnešní době čím dál tím častěji zneužívány. Pravidelně aktualizujte RADIUS server a všechen související software.
  • DoS útoky: RADIUS servery mohou být snadným cílem DoS útoků, které mohou způsobit jejich nedostupnost, a zamezí tak legitimním uživatelům v přístupu. Používejte dostatečná ochranná opatření, jako je omezení počtu připojení, detekce útoků a následné blokování takovýchto pokusů. Při špatném nastavení takového opatření je však důležité pamatovat na to, že může dojít ke scénáři kdy je zablokován i nějaký z běžných uživatelů, nebo je naopak počet povolených připojení stále příliš benevolentní. V takovou chvíli je nejlepší nejprve vyladit systém ochrany za pomocí simulovaných DoS útoků.

Příklady známých CVE zranitelností z minulých let:

Abychom nemluvili pouze obecně, ukážeme si zde i nějaké ze zranitelností, které byly v uvedených RADIUS serverech.

  • Asi nejznámější zranitelnost CVE-2019-11235 známá jako DragonBlood umožňovala útočníkovi zachytit komunikaci a získat tak přihlašovací údaje k server.
  • Další například podobná zranitelnost CVE-2019-13456, která může vést k neautorizovanému přístupu přes obnovu hesla uživatele.
  • Za zmínku stojí také zranitelnost CVE-2017-9148, díky které může útočník autentizaci úplně obejít, anebo nejnovější zranitelnost BlastRADIUS (CVE-2024-3596) v samotném RADIUS protokolu, díky které může útočník modifikovat zachycenou komunikaci. Nakonec také zranitelnosti dalších systémů, jako například OpenSSL (CVE-2014-0160 a CVE-2012-2110), mohou představovat pro samotný server veliký problém, protože je při provozu využívá.

Není potřeba detailně popisovat všechny, ale jak je vidět, zranilnosti byly, jsou a pravděpodobně také budou, a to všeho druhu. Všechny zranitelnosti jdou však dříve či později zalepit aktualizováním softwaru.

Testování RADIUS serverů

V této kapitole přidávám své stručné shrnutí dojmů z průběhu instalace a používání zmíněných RADIUS serverů. Vše bylo provedeno pouze v malé síťové infrastruktuře a může se lišit při použití různých operačních systémů a dalších specifikací.

  • freeradius - Dá se jednoduše stáhnout na webu nebo přímo v linuxu jako balíček. Po stažení se spustí přes systemctl a je to. Nastavit se dá jednoduchou úpravou config souboru, následně pak stejně i uživatelé se dají přidat přes soubor authorize. Tam se nastaví jméno a heslo, které lze hned po uložení vyzkoušet, zdali funguje tak jak má. Tento software je v podstatě velice jednoduchý, tudíž existuje spoustu doplňků a rozšíření, které se k němu výborně hodí.
  • daloradius - Jedním z nich je například daloradius. Ten sám o sobě je totiž vystavěn na freeradius jádru, a doplňuje k němu pěkné a přehledné uživatelské rozhraní. V podstatě je to freeradius s PHP aplikací, přes kterou se řídí a monitoruje. Instalace a nastavení je tedy stejné, jen je potřeba ještě z githubu stáhnout instalátor pro uživatelské rozhraní. Výhoda oproti freeradius je tedy minimálně ta, že je všechno uživatelsky přívětivé a ke správě se dá připojovat přes toto rozhraní, a ne přímo přes radius server.
  • radius-rs - Výhodou a zároveň nevýhodou je že je tento server napsaný v Rustu, poskytuje tedy daleko lepší škálovatelnost a bezpečnost, nicméně není úplně snadné v něm věci nastavovat. Z toho tak nějak vyplývá že i instalace probíhá tak, že se musí stáhnout repozitář z githubu a následně vytvořit build který se poté spouští. Zkušeným uživatelům Rustu to však asi udělá radost, neboť je tedy možné ho jakkoliv upravit a všechny konfigurace se nachází klasicky v .toml souborech. Testování pak probíhá stejně jako u freeradiusu, přes nástroj freeradius-utils nebo přes NTRadPing.
  • pyrad - Tento server je pro změnu napsaný v pythonu. Tedy jeto spíše knihovna, která se často využívá k vývoji vlastních RADIUS klientů a serverů. Je potřeba mít verzi pythonu 3.6 nebo vyšší, pak už stačí jen pomocí nástroje pip stáhnout a nainstalovat. Člověk si ale v tomto případě musí celý server nebo klienta za pomocí knihovny naprogramovat. Zkoušel jsem vytvořit malý script co funguje jako server a základní funkce fungovaly dle předpokladu, pro cokoliv složitějšího je ale třeba spoustu času a znalostí.

Obecně je freeradius asi nejlepší volba, je poměrně jednoduchý a lze si ho upravit a přizpůsobit pomocí rozšíření pro libovolně velkou síť. Navíc má aktivní podporu a lze o něm na internetu najít spoustu doplňujících informací, které udržuje komunita uživatelů a vývojářů.

Ukázka nastavení freeradius serveru

Na závěr si ukážeme, jak postupovat při instalaci již zmíněného freeradius serveru. V tomto případě instalace proběhla na čistém Ubuntu live serveru.

Prvně provedeme pro jistotu update a následně stáhneme freeradius a k němu přidružené nástroje pro testování:

sudo apt update

sudo apt install freeradius freeradius-utils -y

Následně ověříme, jestli instalace proběhla v pořádku:

radiusd -v

Pokud ano, tento příkaz by měl vypsat verzi stáhnutého freeradius serveru (v tomto případě 3.0).

Konfigurační soubory by se měly nacházet ve složce /etc/freeradius/3.0/. Tam se tedy také podíváme a nastavíme přístupové body, neboli radius klienty.

sudo nano /etc/freeradius/3.0/clients.conf

Měl by se nám otevřít soubor se spoustou zakomentovaných řádků. Následně v něm najdeme řádek, kde se definuje klientská konfigurace. Ten by měl vypadat asi takto:

client localhost {
‎ ipaddr = 127.0.01
proto = *
secret = testing123
nas_type = other
limit {
max_connections = 16
lifetime = 0
idle_timeout = 30
}
}

client localhost_ipv6 {
ipv6addr = ::1
secret = testing123
}

První řádek (ipaddr) definuje adresu RADIUS serveru, v našem případě ponecháme 127.0.0.1 (localhost), protože budeme testovat lokálně. Doporučuje se také vždy při nastavování používat statickou IP adresu, nikoliv host name. Druhý řádek (proto) specifikuje použit protokol při komunikaci, výchozí je UDP ale lze nastavit i TCP. Další řádek (secret) nastavuje heslo, kterým se šifrují a podepisují pakety při komunikaci. Tohle heslo si potom musíte určitě změnit, lze zadat jakoukoliv hodnotu s omezením asi na 8000 znaků. Dále (nas_type) se určuje typ přidruženého úložiště, se kterým bude server komunikovat při ověřování uživatelů. V našem případě necháme nastavenou hodnotu other (nespecifikujeme tak žádnou speciální metodu komunikace a necháme výchozí). Následují limitace připojení klientů (limit), ty můžeme nechat tak jak jsou, udávají pouze omezení počtu připojení, životnost připojení a dobu, za kterou bude klient při nečinnosti odpojen. Spodní sekci nastavení pro adresy IPv6 nastavovat také nemusíme, ty používat pro testování nebudeme. Všechna další nastavení můžeme zatím nechat zakomentovaná, ty nyní také nebudeme používat.

Po uložení konfigurace se posuneme dále na přidání uživatele:

sudo nano /etc/freeradius/3.0/mods-config/files/authorize

Obsah souboru bude vypadat podobně, ale nás bude zajímat jen jeden zakomentovaný řádek a to:

#bob Cleartext-Password := "testing"

Slovo bob je název uživatele a v uvozovkách je jeho heslo. Obě lze změnit dle potřeby, při testování to ale není potřeba, stačí odkomentovat, a účet by měl fungovat.

Můžeme se tedy vrhnout na spuštění serveru. Buď v ladícím režimu (ukáže logy pro hledání chyb při komunikaci):

sudo freeradius -X

Nebo jako program běžící na pozadí:

sudo systemctl start freeradius

Pokud vše proběhlo bez chyb, server by měl být připraven na otestování. Na to použijeme nástroj radtest:

radtest bob testing 127.0.0.1 1812 testing123

V tomto příkazu tedy posíláme požadavek na server, který obsahuje jméno uživatele (bob), jeho heslo (testing), adresu server (127.0.0.1), port, na kterém server naslouchá (1812) a heslo serveru (testing123).

V ideálním případě bychom tak měli dostat kladnou odpověď Access-Accept, což znamená že základní nastavení a uvedení do provozu je kompletní. V konfiguracích lze nastavit ještě spoustu dalších parametrů a nastavení, vše je vždy stručně popsáno v příslušném souboru.