SONDA SURICATA

IDS/IPS na systému Ubuntu 16.04 LTS (článek pro Sdělovací techniku)

Autor: Radek Poláček

 

V 21. století Internet ulehčuje život moderního člověka nepřeberným množstvím způsobů a slouží miliardám lidí. Tepnami světové sítě protékají data rychlostí, o jaké se vědcům předchozího století ani nezdálo. I ti nejotrlejší experti v IT by dostali závratě, jakmile by měli v takovém provozu hledat problémy prohlížením paketů vlastními silami. Představte si, že byste museli kontrolovat poštovní balíky na běžícím páse, kde na každý nemáte ani čas mrknout. Každého by snad napadlo, zda by se nedal zapojit stroj, který bude nepřeberné množství dat probírat a ukáže, čemu je třeba věnovat pozornost. Nuže, pojďme si vysvětlit, jak software takového stroje vypadá.

 

V jednom z dílů tohoto seriálu o kybernetické bezpečnosti jsme nastínili, co jsou IDS/IPS systémy a k čemu slouží. Tentokrát si představíme konkrétnější řešení, založené na operačním systému Ubuntu 16.04 Server (Xenial Xerus) a IDS enginu Suricata.

 

Operační systém

Xenial je momentálně nejnovější LTS verze Ubuntu (verze s dlouhodobou podporou na 5 let) a přináší s sebou změny, jež se týkají i našeho systému. Mimo jiné zavedl jako výchozího manažera služeb SystemD (dříve Upstart) a místo PHP 5 podporuje pouze PHP 7. Naštěstí si můžeme "vydupat" zachování předchozích nastavení pomocí několika příkazů, PHP 5 je třeba sehnat z repositáře Ubuntu 15.10 či starší. Ve výsledku to tedy znamená jen mírné zdržení, ale je třeba tyto změny vzít v úvahu. Mnohé programy a skripty, na které jsou uživatelé z dřívější doby zvyklí, na novém Ubuntu bez takového zásahu nefungují (dokud nejsou upraveny).

 

IDS/IPS engine

Přejděme k hlavnímu prvku celého systému: Analyzátor síťového provozu.
Suricata je zcela zdarma (pod open-source licencí GNU GPLv2) a představuje alternativu k řešení Snort (také open-source), jež je mezi uživateli IDS známější. Oba mají společné to, že berou pakety jim dostupné "pod lupu"; srovnávají je s předem nastavenými pravidly a na základě shody s některým z nich zjišťují nestandardní komunikaci, podezřelou aktivitu či dokonce pokusy o útok. Tyto události jsou zaznamenávány a je možné si nechat zaslat upozornění, nebo dokonce analyzátoru umožnit změnit pravidla firewallu a připojení zablokovat.

 

Nelze přímo říci, že je jeden engine lepší nežli druhý, ale musíme zvážit naše očekávání a potřeby, jelikož se od sebe Suricata a Snort podstatně liší. Suricata dokáže aplikovat pravidla na síťové protokoly, umí zadržovat a stahovat podezřelé soubory nebo dokumenty, které se nesmí odeslat z vnitřní sítě. Já jsem ji zvolil hlavně pro plnou podporu vícevláknového režimu /span>pro efektivní využití procesorů s více jádry, což na Snortu chybí.
Na druhé straně pracuje Snort krom normálních pravidel i s dynamickými signaturami, což někteří uživatelé pokládají za
velice důležité. Obě řešení jsou podporována různými firmami v oboru IT bezpečnosti a početnou komunitou, ale rád bych podotkl, že zatímco Snort je vlastněn korporací Cisco, Suricata je vlastněna neziskovou organizací OISF (Open Information Security Foundation) a jedním z předních partnerů Suricaty je francouzská národní bezpečnostní autorita ANSSI (Agence Nationale de la Securité des Systémes d'Information).

Nastavení Suricaty

Pro správnou funkci musíme systému dodat pravidla, podle kterých zaznamenává události. Můžeme použít pravidla Emerging Threats, případně pravidla Snortu. Pravidla lze jedno po druhém vypnout a jejich zdroje libovolně kombinovat. Existují volné databáze pravidel, pak pravidla tvořená komunitou, nebo zpoplatněné zdroje. Výhodou za úplatu je třeba rychlejší (nebo exkluzivní) zavedení nových pravidel oproti volným verzím. V závislosti na potřebách a požadavcích napíšeme i pravidla vlastní. Je vhodné použít skript, který je pravidelně (třeba automaticky) spouštěn a aktualizuje pravidla, například Pulled Pork.
Ten předpokládá práci se Snortem a je třeba ho pečlivou konfigurací vyvést z omylu (webové adresy vedoucí ke zdrojům pravidel musí být přesné). Nainstalovat samotný IDS systém je poměrně snadný úkol. Právě ono vyladění pravidel tak, aby byla omezena rizika nepokrytých hrozeb a snížen počet falešných poplachů je práce na hodiny a hodiny.

 

 


Obrázek 1: Vzorové zapojení IDS systému

Suricata nám nic kontrolovat nebude, pokud nedostane nějaké pakety. Proto na našem routeru nebo přepínači (switch) zadáme "port mirroring"; v podstatě náš stroj dostává kopie každého paketu, který přepínačem projde. Suricata pakety dostane na zvláštní síťové rozhraní nastavené v promiskuitním režimu, jinak tyto pakety nebude číst a bude zatěžovat spojení pro normální komunikaci.

 

Zpracování záznamu

 


Obrázek 2: Vzor zpracované události na front-endu Snorby

Ať už je zvolen jakýkoliv analyzátor, jeho výkon je nižší, pokud se potýká s velkým množstvím událostí. Můžeme nechat tvořit záznamy ve velmi jednoduchém formátu a uvolnit tak výkon pro samotnou analýzu. V takovém případě potřebujeme program, který tato data přeloží do lépe zpracovatelné podoby. K tomu můžeme využít například Barnyard2, který čte binární záznamy Suricaty a ukládá je do MySQL databáze v čitelnějším podání. Doporučuji velmi detailně projít konfiguraci Barnyardu, nejen kvůli přítomnosti adres na soubory Snortu ve výchozím nastavení. Ušetříte si tím migrény, jelikož chybové kódy hlášené Barnyardem nejsou vždy ku pomoci. Objevíte díky tomu funkce, které zlepší organizaci dat a obecně řečeno je to dobrý pracovní návyk. Není třeba se obávat, vše je dobře okomentováno. Je třeba být pozorný při nastavení MySQL databáze a pojmenování "senzoru" (užitečné při nasazení více IDS sond a obecně vzhledné). Až skončíte, omezte přístupová práva k souboru, protože je v něm bohužel uloženo heslo do databáze v prostém textu.

 

Uživatelské rozhraní

 


Obrázek 3: Hlavní stránka po přihlášení do Snorbyho

Chtěli bychom mnoho, kdybychom po člověku žádali prohlížet obrovské MySQL tabulky, je třeba mít možnost získaná data procházet přehledně. Aby se mohl analytik v datech orientovat, sáhneme po webovém front-endu. Mojí oblíbenou volbou je BASE pro svůj čistý vzhled plný informací a strohý design, což se pojí s rychlou obsluhou. Bohužel díky chybějící podpoře PHP 5 na našem operačním systému se musím (snad prozatím) spokojit s něčím jiným. Najít ten správný front-end mi dalo práci. Až jako poslední možnost jsem si nechal Snorby a ani s ním nejsem spokojen. Snorby je open-source (GNU GPLv3) Ruby on Rails aplikací a jejím výstupem jsou stránky na webovém serveru Apache.
Asynchronně k aplikaci pracuje "Snorby Worker", proces, který z databáze událostí tvoří cache pro webové stránky. Podívá-li se čtenář na přiložený obrázek Snorbyho, možná usoudí, že se jedná o pohledné rozhraní, které umožňuje přehledně prohlížet a třídit nahlášené události mnoha způsoby. Tyto události se pak dají klasifikovat a okomentovat (označit jako falešný poplach, pokus o útok atd.).

 

 


Obrázek 4: Projev činnosti Snorbyho na systému

Co ale takové obrázky neukážou, je to, co Snorby dělá, jakmile zmáčknete tlačítko a čekáte na odpověď. Na to se musíte podívat do terminálu a spatříte, že je dřina Suricaty zcela zastíněna nesčetnými dotazy na MySQL databázi. Bystří pozorovatelé si povšimnou malé RAM paměti a usoudí, že zařízení, na kterém jsem testoval, není nikterak výkonné. To je pravda, ovšem můj oblíbený BASE na stejném stroji pracuje tucetkrát rychleji.
Obecně řečeno, dobře zvažte, co od front-endu očekáváte. Chcete spoléhat na grafické výpisy spíše než na textové? Upřednostníte okrasně rozvržená rozhraní za cenu větší výpočetní zátěže? Nechcete za účelem výkonu celou databázi a web umístit na jiný stroj? Pokud jsou oba stroje ve stejném objektu, lze to dobře (i lépe) zabezpečit, ale jsou to náklady.

 

Přístup k užívání a funkce

 


Obrázek 5: Kontrola funkce stránek

Pokud máme všechny tyto komponenty zvolené a nastavené, nesmíme také zapomenout cvičit několik pracovních návyků. Suricatu, Barnyard i Snorbyho lze nastavit tak, aby neběžely jako uživatel root. Stejně tak přístupy do MySQL databáze mohou probíhat mimo root účet.
Rozhodně se tak zařiďte a vytvořte nového systémového uživatele a nový účet na MySQL s odpovídajícími oprávněními. Vím, je to trocha práce, ale sníží to šanci získání kompletní kontroly při útoku. Také vřele doporučuji vytvořit skripty pro automatické spuštění při zapnutí stroje. Velice pomáhají při instalaci systému, kde je několik restartů potřeba, i po údržbě. Jen dejte pozor na syntaxi příkazů při psaní těchto skriptů. Nakonec ještě jednou připomenu: Pročtěte si konfigurační soubory pečlivě! Co je potřeba, zapnout. Pokud nevíte, co to dělá, nebo to není třeba, vypnout. Výchozí hodnoty takto bývají už zařízeny, ale jak to člověk ví, když si to nepřečte?

 

 


Obrázek 6: Blokové schéma sondy pro jedno sledované rozhraní

Vysvětleme si, jak provoz IDS systému probíhá. Mějme stroj, kde chceme sledovat provoz na jednom síťovém rozhraní, a na jednom dalším chceme komunikovat s front-endem a provádět údržbu. Suricata zachytává pakety, které jsou jí k dispozici z rozhraní eth1 v promiskuitním režimu. Dostává je od přepínače přes port mirroring. Pokud při analýze najde nějakou shodu s pravidly či jinou podezřelou aktivitu, zapíše událost v binárním záznamu. Záznamy přebírá Barnyard a překládá je do MySQL databáze. Její položky pak prochází Snorby a tvoří z nich webové stránky na serveru Apache, které si na rozhraní eth2 prohlíží administrátor, bezpečnostní analytik, nebo jiná povolaná osoba, která posoudí riziko a závažnost události a na základě toho jedná.
Aktualizace pravidel a programů, stejně jako údržbu systému, provádíme taktéž přes eth2. Eth1 slouží výlučně pro příjem měřeného provozu.

 

Závěr

IDS systémy jsou nápomocné při mnoha činnostech v síťové architektuře, ať už se jedná o diagnostiku, analýzu provozu, kontroly zabezpečení nebo přímou ochranu před zneužitím. Stále je třeba osoby s bystrým okem a rozvahou k tomu, aby byl tento nástroj plně využit. Za odměnu ale získáváte dohled a kontrolu nad veškerým děním ve vaší síti. Není radno takovou výhodu podceňovat, odvíjí se od toho schopnost zabezpečit a navrhnout síťovou architekturu tak, aby vše pracovalo, jak má. Koneckonců, znalosti jsou moc. Máte-li zájem o konkrétní postup k instalaci takového systému, můžete se těšit na pokračování, kde se právě tím budu zabývat.