39360.zip
Škálovatelný a efektivní open-source systém detekce narušení sítě (NIDS) Snort používá řadu přesně definovaných pravidel k detekci anomálních paketů v síti. Udržování těchto sad pravidel výrazně zvyšuje účinnost systému. S údržbou systému IDS Snort vám pomůže několik technik správy pravidel. Zaprvé můžete zabránit přetížení výstrah zpřísněním definic proměnných a úpravou pravidel Snort. Můžete také zachovat svá vlastní pravidla napříč aktualizacemi sady pravidel. A konečně můžete dekonstruovat pravidlo, abyste pochopili, jak přizpůsobit pravidla pro vaše prostředí.
Ve výchozím nastavení obsahuje Snort více než 1900 skladových pravidel v rámci řady téměř 50 textových souborů uspořádaných podle typu, jak ukazuje obrázek 1. Na obrázku 1 je znázorněno, jakým způsobem lze pravidla upravit. Tato pravidla definují spouštěče odezvy na mnoho známých zneužití zranitelností týkajících se systémů Windows, UNIX a široce používaných aplikací, jako jsou Microsoft IIS, Apache, Microsoft SQL Server a Oracle SQL. Pravidla také pomáhají systému Snort poskytovat průzkumné údaje a případná konfigurační varování, která upozorňují například na skenování sítě nebo na stroj, který vysílá výchozí řetězec komunity SNMP. Jak si asi dokážete představit, Snort může generovat obrovské množství výstrah. Aby se snížil šum skladových pravidel, výchozí konfigurace Snortu ve výchozím nastavení povoluje pouze asi 1300 pravidel a ve výchozím nastavení zakazuje celé typy pravidel, například zásady, chat a viry. (Typ pravidla je obvykle obsažen ve vlastním textovém souboru, takže pravidla typu virus jsou obsažena v souboru virus.rules). Zkontrolujte všechny zakázané skupiny pravidel a povolte všechny, které by se mohly vztahovat na vaše prostředí.
Omezte svá pravidla
I s mnoha pravidly, která Snort ve výchozím nastavení zakazuje, bude váš systém Snort IDS pravděpodobně generovat mnoho výstrah. Probírání se všemi těmito výstrahami může otupit vaše smysly pro skutečně podezřelý provoz. Po instalaci systému Snort do svého prostředí proberte pravidla a odstraňte ta, která se netýkají vašeho prostředí nebo která se vás netýkají. Například pokud nemáte vložený skriptovací jazyk HTML PHP: Hypertext Preprocessor (PHP), můžete soubor pravidel web-php.rules zakázat. Při rozhodování, která pravidla zakázat, však berte v úvahu uživatele, kteří mohou mít na svých počítačích různý software. Například jeden ze senzorů Snort může zachytit podezřelé pakety z napadeného domácího počítače přes připojení VPN. Takže, pokračujeme-li v předchozím příkladu, i když nemáte na žádném z firemních počítačů nainstalované PHP, jeden z vašich koncových uživatelů si ho mohl nainstalovat doma. Pokud by byl tento domácí počítač kompromitován prostřednictvím zranitelnosti PHP, mohl by útočník získat přístup do vaší podnikové sítě, zatímco by byl kompromitovaný počítač vzdáleně připojen k podnikové síti (například prostřednictvím sítě VPN).
Většina systémů upozornění a hlášení zobrazuje název a SID každého pravidla pro snadnou orientaci. Chcete-li dále zkrátit seznam povolených pravidel, sledujte své systémy, poznamenejte si názvy nebo SID cizích pravidel a poté tato pravidla zakažte. Chcete-li ručně zakázat pravidlo Snort, otevřete soubor s pravidlem a před pravidlo vložte znak libry (#). Chcete-li zakázat celou třídu pravidel, přidejte znak libry před název souboru pravidel v konfiguračním souboru Snort. Pro načtení upravených pravidel je nutné restartovat Snort.
Pravidelná revize pravidel a pokračování v odstraňování těch, která se netýkají vaší sítě, výrazně sníží počet výstrah, které Snort generuje, a usnadní tak odhalování a identifikaci skutečně podezřelých paketů. A nezapomeňte pravidla podle potřeby znovu povolit, když zavedete novou technologii, kterou by aktuálně zakázaná pravidla chránila.
Udržujte pravidla aktuální
Na webu Snort.org jsou k dispozici dvě verze pravidel Snort: snortrules-stable a snortrules-current, které pracují s verzemi Snort 2.0x, respektive Snort 1.9x. Novější pravidla obsahují další signatury a aktualizace stávajících pravidel pro využití rozšířených proměnných. Pravidla verze 2.0.0 například definují proměnné, které specificky popisují určité funkce počítače (např. proměnné HTTP_SERVERS a HTTP_PORTS charakterizují počítače, které provozují webové služby a mohou být náchylné k útokům na webové služby). Tyto nové proměnné fungují v nových pravidlech pro další prověřování příchozích útoků. Staré pravidlo vás může upozornit na podezřelý požadavek HTTP určený pro jakýkoli počítač v síti, ale nové pravidlo hledá stejný útok pouze tehdy, když je určen pro webový server, který definuje proměnná HTTP_SERVERS. Tento klasifikační proces pomáhá snižovat počet falešných poplachů.
Snort.org často aktualizuje sady pravidel, aby zůstaly aktuální s novými objevy exploitů. Chcete-li zůstat aktuální, pravidelně kontrolujte, stahujte a aplikujte nová pravidla, která by byla užitečná ve vašem prostředí. Nezapomeňte však, že kdykoli stáhnete sadu nových pravidel, textové soubory obsahující nová pravidla přepíší soubory obsahující stará pravidla. Rychle zjistíte, že zakomentování všech nepoužívaných pravidel při každé aktualizaci souborů s pravidly je zatěžující.
Oinkmaster to the Rescue
Naštěstí vám tento problém pomůže překonat několik nástrojů s otevřeným zdrojovým kódem. Skriptový program v jazyce Perl s názvem Oinkmaster, který si můžete stáhnout ze stránky http://www.algonet.se/~nitzer/oinkmaster, automatizuje stahování nových pravidel a spravuje zakázaná nebo upravená pravidla. Skript v jazyce Perl je přizpůsoben pro systémy UNIX a používá nástroje wget, tar a gzip ke stahování a rozšiřování nových pravidel při každém spuštění skriptu. Většina těchto nástrojů je nainstalována v systémech UNIX, ale můžete si stáhnout i nástroje pro systém Windows. Nezapomeňte, že řešení s otevřeným zdrojovým kódem mají omezenou specializovanou podporu (pokud vůbec nějakou), takže řešení případných problémů nebo otázek hledejte na internetu. Komunita open-source softwaru (OSS) oplývá užitečnými informacemi. Dobrým začátkem je přihlásit se do jedné z poštovních konferencí Snortu, do které se můžete přihlásit na adrese http://www.snort.org/lists.html.
Ujistěte se, že v souboru README najdete podrobné pokyny k instalaci pro vaši platformu. Základní postup instalace nástroje Oinkmaster spočívá v rozbalení souborů oinkmaster.pl a oinkmaster.conf do adresáře Snort (nebo do adresáře, který určíte) a následném použití souboru oinkmaster.conf ke konfiguraci nástroje Oinkmaster.
Otevřete soubor oinkmaster.conf a postupujte podle řádkových komentářů ke konfiguraci nástroje. Nejprve potvrďte umístění aktualizovaných pravidel jako webovou adresu (např. http://www.snort.org/dl/signatures/snortrules.tar.gz). Nezapomeňte nasměrovat nástroj Oinkmaster na důvěryhodnou a renomovanou stránku, zejména pokud se rozhodnete pravidla stahovat a instalovat automaticky. V opačném případě se vystavujete riziku stažení poškozených (nebo ještě hůře zfalšovaných) pravidel, která by mohla ohrozit váš systém IDS.
Pak zadejte soubory, které se mají vynechat, upravit a zakázat. Ve výchozím nastavení Oinkmaster nezpracovává (tj. přeskakuje) soubory local.rules a snort.conf.
Funkce modifysid skriptu umožňuje upravit nově stažená pravidla; modifysid si představte jako funkci Search and Replace pro konkrétní pravidlo, které identifikujete pomocí SID. Pomocí tohoto příkazu můžete upravit text konkrétního pravidla. Pomocí modifysid můžete například povolit pravidlo, které je ve výchozím nastavení zakázáno. Za tímto účelem přidejte nový příkaz modifysid identifikující pravidlo, které chcete povolit, a dejte mu pokyn k odstranění znaku komentáře (#). Kdykoli bude stažena nová sada pravidel, bude tento znak komentáře při analýze daného pravidla nástrojem Oinkmaster odstraněn. Příkaz modifysid můžete také použít k povýšení typu akce pravidla. Například příkaz
modifysid 2003 "alert" | "sev1"
zvýší upozornění s SID 2003 na vlastní typ akce sev1. Oinkmaster to provede vyhledáním slova „alert“ a jeho nahrazením slovem „sev1“. A ano, provede více záměn, takže ji používejte opatrně.
Poslední a nejoblíbenější funkce Oinkmasteru, disablesid, umožňuje zakázat vybraná pravidla. Zadejte SID všech pravidel, která chcete ponechat zakázaná. Chcete-li například zakázat upozornění na skenování sítě, můžete začít zadáním podobným
disablesid 469, 615, 618, 620
Po stažení a analýze nové sady pravidel Oinkmaster vyhledá zadané SID a pravidla okomentuje. Dokud bude Oinkmaster spravovat vaše pravidla, zůstanou tato pravidla vypnutá, a to i napříč aktualizacemi sady pravidel.
Ručně spustíte skript, kdykoli budete chtít pravidla aktualizovat. Pokud se cítíte odvážní, naplánujte spuštění skriptu a pravidelnou aktualizaci. Oinkmaster stáhne pravidla, rozbalí je a zkopíruje do adresáře pravidel vašeho senzoru. Stejně jako u většiny OSS používejte nástroj Oinkmaster s rozvahou a nejprve se naučte, co dělá a jak ovlivní vaše prostředí. Před nasazením pravidel do produkčního prostředí například otestujte novou sadu pravidel spuštěním Snortu v režimu autotestu (pomocí snort -T a dalších parametrů).
Oinkmaster vám umožňuje vyhnout se riziku stahování pochybných aktualizací tím, že vám dává možnost zálohovat stará pravidla a poskytuje protokol svých akcí do konzole. Projděte si tento výstup, který zobrazuje odstraněná pravidla, upravená aktivní pravidla, revize jiných než pravidel a nové soubory, abyste si ověřili, že nástroj Oinkmaster úspěšně dokončil své úkoly, a potvrdili pravidla, která nástroj Oinkmaster upravil. Pokud se rozhodnete naplánovat automatické spouštění nástroje Oinkmaster, zvažte odeslání výsledků e-mailem, abyste usnadnili jejich kontrolu, jak ukazuje obrázek 2. Následující příklad ukazuje, jak naplánovat spuštění nástroje Oinkmaster každý den v 6:15 pomocí příkazu crontab v Linuxu (crontab umožňuje plánovat úlohy v Linuxu):
15 6 * * * /home/snort/oinkmaster.pl -o /home/snort/rules -b /home/snort/backup 2>&1 | mail -s "Oinkmaster"
Parametry nástroje Oinkmaster určují adresář s pravidly (-o), adresář se záložními pravidly (-b) a příkaz pro odeslání výsledků e-mailem vlastníkovi. Příkaz 2>&1 odešle výstup StdErr do StdOut (konzole) před odesláním do e-mailové aplikace.
Pohled na pravidlo Snort
Kromě zakázání nebo základních úprav skladových pravidel můžete vytvořit vlastní pravidla a dále přizpůsobit pravidla Snort přímo svému prostředí. Uvažujte například o nasazení senzoru, který monitoruje provoz uvnitř i vně brány firewall. I když vás může zajímat, kolik útoků červů váš firewall odrazí, ještě více vás bude pravděpodobně zajímat, zda některý z těchto útoků pochází z vaší sítě. Pravidla Snortu v poslední době zahrnují „vyladěná“ pravidla, jako je výše uvedený příklad, ale zůstává mnoho dalších, která byste si mohli chtít přizpůsobit podobně. Výpis 1 ukazuje standardní pravidlo, které vás upozorní na detekci červa SQL Slammer (alias Sapphire). Pojďme toto pravidlo rychle dekonstruovat. (Podrobné informace o všech dostupných parametrech, které definují pravidla, najdete v důkladné dokumentaci k pravidlům Snort na adrese http://www.snort.org/docs/writing_rules/chap2.html#tth_sec2.3.26.
Všechna pravidla musí být umístěna na jednom řádku a začínají akcí pravidla, která je v tomto případě
alert
Akce pravidla definuje, jak Snort na pravidlo reaguje, pokud je spuštěno. Typ pravidla můžete upravit (např. na řetězec, jako je ‚sev1‘) a zajistit tak vlastní zpracování – například eskalaci akce v případě shody. Tento krok se liší od předchozího příkladu, ve kterém jsme použili nástroj Oinkmaster ke změně typu výstrahy existujícího pravidla; v tomto příkladu vytváříme nové pravidlo pomocí existujícího pravidla jako šablony.
Sada parametrů
udp $EXTERNAL_NET any -> $HOME_NET 1434
poskytuje protokol, IP adresu, informace o portu a směr provozu pro pravidlo. Toto pravidlo říká nástroji Snort, aby našel jakýkoli paket UDP ze síťového zdroje (který definuje proměnná $EXTERNAL_NET), který se pokouší přejít na proměnnou $HOME_NET na portu 1434. Většina výchozích pravidel používá především proměnné $EXTERNAL_NET a $HOME_NET. Některá pravidla však používají specifičtější proměnné. Například pravidla týkající se serverů DNS (v souboru dns.rules) používají proměnnou $DNS_SERVERS. Tyto proměnné definujte v konfiguračním souboru Snort (typicky snort.conf). Případně si vytvořte vlastní proměnné, které budou odrážet vaši topologii (např. $MAIL_SERVERS) a budou se používat ve vlastních pravidlech. Proměnnou definujte pomocí jejího názvu (např. var MAIL_SERVERS= 192.168.0.20/30) a poté na ni odkazujte pomocí předpony se znakem dolaru ($ – např. $MAIL_SERVERS). Akce pravidla a tyto parametry tvoří hlavičku pravidla.
Volby pravidla dále zpřesňují pravidlo tak, aby podezřelý paket (a pouze podezřelý paket) vyvolal odezvu. Jak asi tušíte, tyto signatury mohou být poměrně podrobné a sahají daleko za rámec prostého porovnávání portů. Představte si například falešné poplachy, které by vznikly, kdyby toto pravidlo Slammer jednoduše upozorňovalo na jakýkoli provoz na portu UDP 1434.
Volba msg
msg:"MS-SQL Worm propagation attempt"
poskytuje jednoduchý popis upozornění pro použití v činnostech upozorňování a hlášení. Volba Content
content:"|04|"; depth:1; content:"|81 F1 03 01 04 9B 81 F1 01|";content:"sock"; content:"send";
obsahuje řetězec odpovídající vzoru užitečného zatížení s rozlišováním malých a velkých písmen, a to buď v ASCII, nebo v hexadecimálních hodnotách (hexadecimální hodnoty uzavřete znakem pipe-|). Můžete zadat více možností obsahu. Volba hloubky následuje za každou volbou obsahu a určuje, kolik bajtů v užitečném zatížení chcete hledat zadaný obsah. V tomto příkladu paket vyvolá odezvu, pokud obsahuje hexadecimální hodnotu 04 v prvním bajtu nebo zbývající obsah kdekoli v užitečném zatížení.
Stažená pravidla často obsahují odkazy na podrobné informace o podezřelém exploitu nebo důvod vytvoření pravidla. Některé systémy hlášení podporují možnost odkazů tím, že poskytují přímé odkazy na tyto informace:
reference:bugtraq,5310; reference:bugtraq,5311;reference:url,vil.nai.com/vil/content/v_99992.htm;
Snort přiřazuje pravidla do tříd a přiřazuje těmto třídám vysokou, střední nebo nízkou prioritu. V současné době existuje více než 30 klasifikací, včetně pokusů o správu, trojských koní, pokusů o odepření služby a skenování sítě. V našem příkladu je klasifikace
classtype:misc-attack
Snort zaznamenává prioritu reakce na zjištěná narušení. Tuto prioritu můžete dále analyzovat pomocí externího nástroje nebo skriptu a přijmout opatření pomocí aplikace pro hlášení.
V posledním segmentu
sid:2003; rev:2;
sid představuje jedinečné pravidlo Snort a rev označuje číslo revize. Tyto vlastnosti jednoznačně identifikují pravidlo.
Úprava pravidla
Podívejme se, jak upravit toto pravidlo, aby poskytovalo eskalované upozornění při zjištění interních infikovaných hostitelů. Protože se zabýváme stejným exploitem jako v původním pravidle, definice obsahu pravidla zůstává stejná. Musíme upravit pouze IP adresy a směr provozu. Změníme zdrojovou IP adresu na $HOME_NET takto:
udp $HOME_NET any -> $EXTERNAL_NET 1434
Snort.conf definuje $EXTERNAL_NET jako „any“, takže toto pravidlo bude stále zachycovat poškozené pakety, které jsou zaměřeny na interní hostitele (stejně jako původní pravidlo). Nicméně nyní, když máme vyhrazené pravidlo, které sleduje pouze interní zdrojové IP adresy, můžeme změnit typ akce na vlastní typ akce, který spustí eskalované upozornění.
Současná pravidla Snort zahrnují toto pravidlo detekce odchozích červů Slammer ve výchozí sadě pravidel. Pokud se však začne šířit nový červ, virus nebo jiný exploit, zvažte vytvoření nových pravidel, která upozorní na konkrétní narušení.
Tvorba vlastních pravidel
Kromě stávajících nebo vlastních pravidel, která můžete upravit nebo vytvořit, můžete zahrnout pravidla získaná z jiného zdroje. Například když se po internetu rozšíří zpráva o novém červu, bezpečnostní weby a diskusní skupiny rychle zveřejní jednorázová pravidla Snortu, která mohou nového červa odhalit. Tato nová pravidla vložte do souboru local.rules a poté restartujte Snort, aby se nová pravidla projevila.
Snort poskytuje rámec pro levný a přizpůsobitelný IDS. Díky komunitou podporované sadě pravidel zůstává Snort flexibilním a účinným systémem. Udržování pravidel v aktuálním stavu zvýší vaši ostražitost a sníží šum, který je výsledkem neúčinných výstrah. Stejně jako u každého projektu s otevřeným zdrojovým kódem, věnování času pochopení jeho fungování a seznámení se s jeho doplňky vyvinutými komunitou výrazně zlepší váš komfort při práci se systémem a zvýší jeho účinnost ve vašem prostředí.