Jak nasadit systém detekce průniků

1. 1. 2004

Sdílet

IDS je systém, který detekuje narušení, případně pokusy o narušení bezpečnosti počítačových systémů. V násled...
IDS je systém, který detekuje narušení, případně pokusy o narušení bezpečnosti
počítačových systémů. V následujícím textu se nebudeme zabývat IDS systémy,
které zajišťují pouze bezpečnost hostitelů, na nichž jsou spuštěny, ale těmi,
které monitorují provoz celého segmentu sítě a upozorní pracovníka odpovědného
za bezpečnost na případný incident.
Systémy zajišťující pouze bezpečnost hostitelů, na kterých jsou spuštěny,
fungují někdy až na úrovni jádra systému. Představují velmi účinnou metodu, jak
zabránit útoku, případně minimalizovat jeho následky. Patří mezi ně například
Tripwire, Medusa DS-9, PAX a další. Jejich konfigurace není jednoduchá, nicméně
se vyplatí, protože podstatně zlepšují možnosti kontroly přístupu k jednotlivým
částem systému a jeho jádra. Výrazně rovněž zvyšují bezpečnost aplikací, které
na systému běží. Je ovšem třeba mít celkem přesnou představu o systémových
zdrojích, které jednotlivé aplikace potřebují.

Zaostřeno na síť
Zařízení IDS, která monitorují provoz celého segmentu sítě, pracují v zásadě na
dvou principech, přičemž drtivá většina z nich oba kombinuje. Jedná se o:
Network grep metoda funguje podobně jako příkaz grep na většině unixových
systémů vyhledává tedy definované vzorky v síťovém provozu. Tato metoda se dá s
úspěchem použít při detekci narušení, která nevyžadují rekonstrukci datového
toku příkladem může být například známý červ SQLP1434.A (Slammer.A), jenž je
celý obsažen v jednom paketu.
Stream analysis z praktického hlediska se jedná o stejný princip jako u network
grep, před analýzou se ale provádí rekonstrukce celé výměny dat. Systém je tedy
schopen detekovat útoky, které vyžadují datovou výměnu, případně jsou rozděleny
do více paketů právě pro snížení pravděpodobnosti detekce.
Jak již bylo uvedeno, většina síťových IDS systémů obě zmíněné metody
kombinuje, čímž dosahuje výkonové optimalizace a vyšší průchodnosti.

Správné nasazení
Správně nasazený systém IDS je nedílnou součástí bezpečnostního perimetru,
který v předstihu upozorňuje administrátora na některé bezpečnostní události,
které jsou nebo mohou být reálnou hrozbou pro organizaci.
IDS systém monitorující síť je velmi mocným nástrojem a je třeba jej nasadit a
používat v rozumné míře. Existují totiž určitá technická a legislativní
omezení, která se těchto systémů týkají. Z hlediska legislativy se bude jednat
zejména o předpisy zabývající se ochranou osobních údajů a důvěrných informací.
Technická omezení spočívají především v objemu monitorovaných dat a ve
schopnosti tato data zpracovat. Například monitorování přepínaného segmentu
sítě o rychlosti 100 Mb/s je náročné nejen na hardware je totiž třeba rovněž
zvážit, na jaké mimořádné události a v jakém počtu je schopen tým zabývající se
bezpečností IT v organizaci reagovat.
Většina nasazených sond bohužel nekončí tam, kde je potřeba dohlédnout na
komunikaci a na její obsah, ale tam, kde generují velké množství událostí je
totiž nutno obhájit investici před managementem. Administrátor je v krátkém
čase zahlcen velkým množstvím událostí, přestává reagovat a veškerý efekt
nového nástroje se vytrácí. IDS se tak místo nedílné součásti bezpečnostní
infrastruktury stává jen další bednou v serverovně.
Výše popsaný příklad by se dal nazvat instalací IDS. My se budeme dále zabývat
nasazením IDS. Rozdíl mezi instalací a nasazením je v tomto případě zřejmý: Na
rozdíl od instalace se při nasazení prostě použije hlava všechny kroky budou
řádně promyšlené.

Kam s ním?
Jedná se o otázku vskutku nerudovskou. Jak a jaké sítě monitorovat? Vzhledem k
pravděpodobně omezenému rozpočtu nelze monitorovat všechno. Na výše uvedenou
otázku neexistuje jednoduchá odpověď, nicméně lze říci, že je vhodné začít od
nejkritičtějších aplikací od těch, které jsou pro organizaci nejdůležitější a
postupně zvyšovat počty monitorovaných segmentů tak, abychom "nepřepálili"
obsluhu. Další možností je začít od těch nejexponovanějších, což budou patrně
služby poskytované veřejnosti přes internet.
Přesné umístění monitorovacího portu IDS sondy závisí na mnoha okolnostech,
zejména však na segmentaci sítě, jejím typu, rychlosti, zatížení a dalších
faktorech. Obecně vzato: Pokud bychom chtěli monitorovat například vnitřní síť,
protože je v ní připojen důležitý server, měli bychom sondu připojit přímo do
segmentu, ve kterém se server nachází. V případě přepínaných sítí bychom se
měli rozhodnout mezi zrcadlením portů, použitím network tapu nebo použitím
balanceru to umožní jedné IDS sondě sledovat více sítí, a naopak. Okolností,
které ovlivní naše rozhodnutí o umístění sondy, je tedy celá řada, a je
nanejvýš důležité, aby bylo konečné rozhodnutí o jejím umístění a připojení
velmi dobře uváženo.

Co s ním?
Na tuto otázku existuje jednoduchá odpověď, zmíněná již v úvodu: Monitorovat,
detekovat, upozornit obsluhu. Bohužel správným umístěním sondy a její instalací
nasazení IDS zdaleka nekončí je třeba sondě říci, co a jak má sledovat, kdy a
co má komu hlásit.
Je třeba eliminovat falešné poplachy, které stojí peníze organizace a většinou
i spánek bezpečnostních pracovníků. Po zhruba měsíci pokusů a ladění politiky
IDS bychom měli mít systém, který je schopen upozornit na to, že někdo loupe
perníček...

Snort
Výše zmíněné postupy si nyní ukažme na praktickém příkladu nasazení IDS Snort.
Jde o open source projekt šířený pod licencí GNU GPL nebo GNU GPL2. Jedná se o
síťový sniffer napsaný nad knihovnou libpcap, který umožňuje upozornit
administrátora několika různými způsoby na bezpečnostní nebo síťový problém.
Nejde o software, který by si činil ambice stát se plnohodnotnou náhradou za
profesionální sondy, jako je například ISS RealSecure, ale lze jej velmi dobře
použít k monitorování menších sítí s tím, že finanční ředitel je ušetřen
infarktu.
Na domovské stránce projektu (www.snort.org) lze nalézt zdrojový kód a binární
balíčky RPM pro různé distribuce Linuxu. Zároveň jej lze nalézt v ports
collection FreeBSD, portage Gentoo Linuxu, grimoárech SourceMage a v dalších
systémech. Zajímavé je, že Snort je integrován i do některých malých
firewallových distribucí, jakou je například IPCop.

Režimy práce
Snort může pracovat ve třech základních režimech, které lze doladit mnoha
přepínači z příkazové řádky:
Sniffer: přenáší na standardní výstup pakety, které vidí na síťových
rozhraních. Logger: ukládá pakety na disk.
NIDS: na základě politiky definované v konfiguračním souboru rozhodne, co se s
paketem udělá a jaká bude další reakce.
Nás samozřejmě nyní zajímá režim posledně jmenovaný a je třeba uvést několik
poznámek k organizaci konfiguračních souborů a adresářové struktuře Snortu.

Konfigurace
Implicitně se všechny soubory produktu vyskytují v adresáři /etc/snort a logy
se ukládají do adresáře /var/log/snort.
Konfiguračních souborů je mnoho, ale v zásadě je lze rozdělit do 3 skupin:
hlavní konfigurační soubory
soubory s pravidly pro IDS
vlastní konfigurační soubory Hlavní konfigurační soubor snort.conf obsahuje
základní nastavení IDS a dělí se na 4 části, které obsahují:
1. Základní definice, které Snort informují o topologii kontrolované sítě a o
základních aplikačních serverech.
2. Jemnější nastavení snortu jaké moduly pro dekódování provozu použít, kolik
jim alokovat paměti a které protokoly dekódovat. Pokud nemáte nervy na ladění
těchto parametrů, měli byste si vystačit s implicitním nastavením.
3. Prioritizace alertů a zdroje informací pro reference k jednotlivým chybám
(implicitně v souborech classification.config a reference.config).
4. Které skupiny pravidel se použijí při vlastní detekci (implicitně v
souborech *rules). Tajemství přehledného členění konfiguračních souborů spočívá
v direktivě include, která se chová stejně jako její jmenovkyně v programovacím
jazyce C, tedy tak, že při zpracování preprocesorem vloží místo sebe soubor,
jenž má uveden jako parametr. Ve výsledku tak při spuštění Snortu dojde k
interpretaci všech těchto direktiv a Snort zpracuje jeden velký konfigurační
soubor.
Toto přehledné uspořádání konfiguračních souborů umožňuje velmi pohodlné
členění vlastní politiky do sad pravidel (rulesets) podle zaměření na
jednotlivé protokoly či aplikace. Prostým zakomentováním řádku obsahujícího
direktivu zakážeme použití všech pravidel rulesetu pro protokol POP2. Naopak
pokud potřebujeme jemně vyladit pravidla daného rulesetu, stačí si jednoduše
otevřít soubor a zakomentovat pravidla, která chceme deaktivovat.

Pravidla
Zbývá se zmínit o vlastních pravidlech, která můžeme uspořádat stejně
přehledně, jako tomu je u pravidel implicitních. Neměli bychom je vkládat do
stávajících souborů je pro ně totiž připraven prázdný soubor local.rules. Tento
soubor můžeme dále členit.
Kompletní popis pravidel by vyžadoval rozsáhlý prostor, ukažme si tedy alespoň
jedno vybrané, které je obsaženo v implicitním rulesetu icmp.rules (celý text
příkazu je na jediném řádku):
alert icmp $EXTERNAL_NET any -> $HOME_NET any (msg:"ICMP Large ICMP Packet";
dsize: >800; reference:arachnids,246; classtype:bad-unknown; sid:499; rev:3;)
Pravidlo detekuje paket icmp echo request s podezřele velkým datovým segmentem.
Různé aplikace vytvářejí tyto pakety o různých délkách a s různým obsahem,
nicméně délka datového segmentu větší než 128 bajtů je podezřelá a může
ukazovat například na DoS útok nebo komunikaci útočníka s již napadeným
serverem. Co znamenají jednotlivé části:
Klíčové slovo alert říká, že pravidlo vygeneruje alert zvolenou metodou a paket
zaloguje.
Dále je specifikován protokol ICMP v současné době je Snort schopen provádět
analýzu protokolů IP, ICMP, UDP a TCP.
Text až k levé kulaté závorce specifikuje zdroj a cíl (včetně portu, pokud to
má smysl) paketu. V tomto případě musí ping přijít z externí sítě.
V závorce je popsáno vlastní pravidlo, jednotlivé hodnoty jsou od sebe odděleny
středníkem a jsou ve formátu <název_pole>:<hodnota>;
msg (hlášení pro alert a log, též název signatury)
dsize (zmíněná velikost datového segmentu paketu)
reference (kde lze nalézt informace o dané signatuře, více v konfiguračním
souboru reference.config)
classtype (označuje klasifikaci události, v tomto případě neznámý, ovšem
potenciálně velmi nebezpečný druh provozu)
Toto krátké pravidlo samozřejmě neobsahuje všechny možné položky, které jsou ve
Snortu k dispozici. Pravidla se mohou stát komplexnějšími, lze jimi aktivovat
jiná pravidla. (Například pokud sonda detekuje buffer overflow, může aktivovat
pravidlo, které zaloguje dalších několik desítek paketů této komunikace. Jejich
obsah, pokud se jedná o pokus o průnik, bude hodnotnou četbou pro analytika
zabývajícího se incidentem.)

Okolo Snortu
Nyní je tedy zřejmé, jak přibližně Snort funguje a jak ho nastavit, nicméně pro
úspěšné nasazení IDS je třeba rozmyslet si ještě několik věcí, které jsou
stejně důležité jako vlastní instalace a vyladění politiky:
Kam a v jakém formátu budeme logovat?
Jak data zpracujeme?
Jak uděláme ty hezké grafy a tabulky, abychom šéfa uklidnili, protože my si už
3 týdny hrajeme s něčím, čemu on absolutně nerozumí?
Odpověď na první otázku závisí hodně na tom, jak budeme sondu používat a kolik
jich vlastně budeme mít. Jedna sonda monitorující síť s 10 počítači a
64kilobitovou linkou do internetu si vystačí s textovým logováním a s alerty
posílanými e-mailem. Oproti tomu bezpečnostní pracovník větší organizace
pravděpodobně bude potřebovat cosi rychlejšího a organizovanějšího.
Organizovanost je Snort schopen zajistit, protože umožňuje logovat do několika
SQL databází. Co se týče rychlosti, zde pomůže například projekt Barnyard,
který slouží jako jakási proxy nebo buffer mezi rychlým Snortem, který ve
špičkách může vychrlit mnoho dat, a pomalejším zápisem do textového souboru
nebo databáze. Více sond samozřejmě může logovat do jedné centrální databáze.
Otázka zpracování dat je dosti náročnou záležitostí a v případě menší nebo
střední organizace nepříliš závislé na internetu je nutno položit základní
otázku: "Co je tak důležité, abych se nechal v noci vzbudit?" V případě
organizací větších nebo závislých na internetu je tato odpověď předem známa a
pohybuje se mezi "skoro všechno" a "všechno". Je ovšem třeba určit rozumnou
hranici, kdy systém upozorní na problém. Čímž se dostáváme zpět k první části,
kdy jsme uvedli, že obsluhu není možno burcovat neustále, jinak otupí a její
reakce nebudou při skutečné krizi takové, jaké bychom očekávali.

Grafy
Poslední otázkou, pro některé uživatele pravděpodobně nejožehavější, je: Jak
dosáhnout kvalitního reportingu? Pokud je IDS nasazován v rámci nějakého
projektu posílení bezpečnostního perimetru, bude pravděpodobně nezbytné
vytvářet tabulky a grafy, které by měly alespoň trochu vypovídat o činnosti
IDS. Projekt Snort tyto problémy neřeší přímo, nicméně okolo něj vznikla řada
iniciativ, které se zaměřují na různé problémy. Jednou z nich je ACID (Analysis
Console for Intrusion Databases).
ACID je analyzátor logů nejen ze Snortu, ale i z dalších bezpečnostních
aplikací. Přes webové rozhraní umožňuje hledání a seskupování událostí. Jednou
z jeho lepších vlastností je i generování statistik a grafů podle času, sondy,
priority a dalších kritérií.

Na závěr
Snort je produkt, který může najít své místo v téměř každé instituci, ať už
jako záloha komerčního IDS, pomocné IDS či jako hlavní IDS systém malého nebo
středního podniku. Jak již bylo řečeno výše, Snort je šířen pod licencí GNU GPL
nebo GNU GPL2. Tyto licence byly vytvořeny pro projekt GNU, jehož hlavním
organizátorem a sponzorem je Free Software Foundation. Free v tomto případě
ovšem neznamená zadarmo, jedná se o filozofii tzv. svobodného softwaru, která
je popsána na webových stránkách projektu GNU a v kostce spočívá ve svobodě
software používat, modifikovat a dále distribuovat, za předpokladu, že další
distribucí nedojde k omezení těchto svobod.
Diskusí na téma licencování, open source vs. closed source, GNU versus
proprietární licence lze nalézt na internetu nepřeberně. Důležité pro projekt
Snort je v tomto případě to, že je podporován jako zdroj dat pro většinu
komerčních dohledových centrál a mnohé komerční firmy též přispívají
signaturami, takže se celý projekt velmi slibně rozvíjí a investice času do
jeho probádání rozhodně není ztrátová.
Autor je konzultantem společnosti Actinet Informační systémy
4 0068 / pen

Vybrané zdroje na webu
www.snort.org domovská stránka projektu Snort
acidlab.sourceforge.net ACID Analysis Console for Intrusion Databases
jeremy.chartier.free.fr/snortalog log analyzer pro Snort a další bezpečnostní
aplikace (například FireWall-1)
www.gnu.org/licenses/licenses.html přehled a vysvětlení GNU licencí
www.gnu.org/home.cs.html stránky projektu GNU