Snort - Network Intrusion Detection System

Pro analýzu síťového provozu je vhodné nasazení automatických nástrojů, jako je právě Snort. V ideálním prostředí probíhá testování na několika místech, před firewallem, za firewallem, v DMZ a případně na místě dle potřeby. Výsledky se pak dále zpracovávají. Protože v současnosti mnoho firem používá WiFi pouze jako médium, ale do společností se uživatel připojuje již přes VPN, je vhodné sondy nasadit i u Access Pointu.
Zajímavé je i vlastní nasazení sond. Potenciální útočník nesmí vědět, že je přítomný IDS systém. To znamená, že sonda může v ideálním případě ze sítě pouze číst - viz. Hardware sondy. Navíc zpracování datového toku klade značné nároky na hardware. V takovém případě je nejlepším řešením nainstalovat jednu sondu na každý bod, data posílat do databáze nebo do systému Prelude a výslednou analýzu provádět centrálně. Navíc, síť se sondami by neměla být přímo spojena s datovou sítí a na jednotlivých sondách je vhodné mít být vypnutý routing.

1) Instalace systému je velice jednoduchá. Pokud bude cílem využít jako nadřízený systém Prelude, je nutné tuto volbu nastavit v konfiguraci.
portinstall snort oinkmaster

2) Po instalaci je nutné nakonfigurovat snifovací interface. Rozběhnout dva Snorty vedle sebe je sice možné, ale z nějakého důvodu vždy po čase jeden z nich spadne. Proto níže uvedené spojení interface. Dále jsem použil sondu (TAP), která na jeden interface posílá transmit a na druhý receive signalizaci. Aby tuto signalizaci bylo možné spojit, je nutné tyto interface také spojit. Jsou zde uvažovány karty fxp0 (Rx) a fxp1 (Tx). V tomto případě pomocí následujícího postupu:

Nejprve vytvořím script ~/ifmode.sh obsahující:
ifconfig | grep -A 4 -i $1 | grep -i duplex | tr -d '();<>' | awk '{print "ifconfig $1 media "$4" mediaopt "$5}'

a tímto scriptem si na firewallu ověřím rychlost spojení. Je vhodné to automatizovat a nechat jednou za hodinu nebo jednou denně testovat, podle toho automaticky přizpůsobovat rychlost.
~/ifmedia interface

Podle výsledku scriptu je potřeba upravit /etc/rc.conf na stanici, kde bude instalován Snort, např:
#sniff TX
ifconfig_fxp0="promisc staticarp media 100baseTX mediaopt full-duplex up"
#sniff RX
ifconfig_fxp1="promisc staticarp media 100baseTX mediaopt full-duplex up"
#bridge
ifconfig_bridge0="promisc staticarp up"


Podrobněji k nastavení interface a informace jak na sondy

Po startu systému a před startem Snortu je pak nutné provést následující, nejlépe scriptem. Tento postup je možné vložit do spustitelného souboru /etc/start_if.bridge0 (aby konfigurace byla provedena co nejdříve):
/sbin/ifconfig fxp0 media 100baseTX mediaopt full-duplex promisc
/sbin/ifconfig fxp1 media 100baseTX mediaopt full-duplex promisc
/sbin/ifconfig bridge0 create
/sbin/ifconfig bridge0 addm fxp0 addm fxp1 promisc up

Tím jsou vytvořeny podmínky pro start Snortu. Nyní je nutné provést jeho konfiguraci.



3) Přestože se jedná o open source software, je potřeba se pro pravidelný update sady pravidel zaregistrovat). Registrovaní uživatelé mají k dispozici sadu pravidel měsíc startou, registrovaní uživatelé co si platí podporu ji mají jakmile je k dispozici. Pro neregistrované uživatele je sada pravidel pouze při vydání hlavních verzí Snortu. Po registraci na Registrace Snortu je potřeba dostat svoje UID. Jedná se o řetězec, který bude využitý při dalším stahování pravidel programem oinkmaster.
Po získání tohoto řetězce doporučuji poprvé stažení souborů s pravidly a jejich uložení do adresáře /usr/local/etc/snort. V něm je potřeba vytvořit adresář rules. Archív obsahuje nejenom pravidla, ale i ukázkovou konfiguraci (pravda, pro jiný systém), v adresáři so_rules pak dynamická pravidla (nutno zkompilovat) a v doc dokumentaci.

4) Konfigurace programu oinkmaster:
cp /usr/local/etc/oinkmaster.conf.sample /usr/local/etc/oinkmaster.conf

V souboru je nutné najít nebo vytvořit řetězec, odpovídající dané verzi Snortu a vložit do něj správné ID. Například:
#url = http://www.snort.org/pub-bin/oinkmaster.cgi//snortrules-snapsh ot-2.7.tar.gz
nahradit za:
url = http://www.snort.org/pub-bin/oinkmaster.cgi/333333444444555555/snortrule... ot-2.7.tar.gz

Vlastní spuštění update je možné v testovacím režimu příkazem:
oinkmaster /usr/locat/etc/snort/rules -T
a "naostro"
oinkmaster /usr/locat/etc/snort/rules
Po otestování je vhodné program zařadit do cronu, aby byl alespoň jednou měsíčně spuštěn.



5) Konfigurace Snortu se provádí úpravou souboru /usr/locat/etc/snort.conf. Zde je potřeba nastavit proměnné:
- HOME_NET
- EXTERNAL_NET
- RULE_PATH

a dále pak zkontrolovat cesty. Nejčastější problémy mívám právě s jejich nastavením, lze tu dobře něco přehlédnout. Pro pomoc při ladění je možné nastavit v konfiguračním souboru:
output alert_syslog: LOG_AUTH LOG_ALERT

a výsledné hlášení se budou ukládat do souboru /var/log/messages. V jiném případě je to trošku problém, Snort nic nezahlásí, pouze se nespustí. Příklad cest a nahrazení:
/usr/local/lib/snort_
a je nutné nahradit za:
/usr/local/lib/snort/

6) Poslední záležitostí je povolení spuštění Snortu. Zde je nutné upravit soubor /etc/rc.conf a vložit zde následující dva parametry (podle konfigurace v tomto článku).
snort_enable="YES"
snort_interface="bridge0"


Restart Snortu je pak možné provést příkazem:
/usr/local/etc/rc.d/snort restart

a zkontrolovat systémový log, kde konkrétně nastala chyba. Po odladění je možné přesměrovat informace Snortu buď do textového souboru, do databáze nebo do již výše uvedeného Prelude.
Ladění senzitivity Snortu se provádí buď zásahem do souborů s pravidly (rules), nebo do konfiguračního souboru. Zásahy do souborů s pravidly nedoporučuji kvůli jejich pravidelnému update. Pokud je to možné, tak je lepší využít konfigurační soubor a v něm povolit/zakazovat jednotlivé aktivity. Na začátku doporučuji povolit vše a postupně omezovat pravidla takovým způsobem, aby pravidelný provoz generoval co nejméně dat. Po domluvě pak provést externě scan systému například pomocí Nessus, Snort by měl začít být vyjímečně aktivní v seznamech "nevhodné komunikace". Konfigurace pravidel bohužel není jednoduchá a zabírá hodně času.



7) Snort a MySQL. V případě požití více zdrojů (senzorů Snort) pro analýzu je vhodné veškerá data ukládat a vyhodnocovat na jednom místě. Využití systémových logů je poněkud pracné, databáze se k analýzám sama nabízí. V takovém okamžiku je vhodné použít například databázi MySQL. Konfigurace je relativně jednoduchá:
  - nejprve vytvoříme databázi a nastavíme privilegia:
# mysql
create database snort;
grant INSERT,SELECT on snort.* to snort@localhost;
SET PASSWORD FOR 'snort'@'localhost' = PASSWORD('snort');
grant CREATE,INSERT,SELECT,DELETE,UPDATE on snort.* to snort@localhost;
grant CREATE,INSERT,SELECT,DELETE,UPDATE on snort.* to snort;
exit
Přesnou strukturu práv a vazeb mezi nimi je možné najít na této stránce SnortDB

  - ze stránek projektu stáhneme zdrojový soubor a použijeme připravenou konfiguraci MySQL, například:
wget http://www.snort.org/dl/snort-2.8.1.tar.gz
tar -zxvf snort-2.8.1.tar.gz
cat ./snort-2.8.1/schemas/create_mysql | mysql -u snort -D snort -

  - posledním krokem je úprava konfiguračního souboru /usr/local/etc/snort/snort.conf tak, aby obsahoval nasledujicí řádek/řádky:
output database: log, mysql, user=snort password=password dbname=snort host=localhost
output database: alert, mysql, user=snort password=password dbname=snort host=localhost

První řádek obsahuje konfiguraci pro záznam logů, druhý pro záznam alertů. Druhý ve většíně případů stačí.

  - po restartu Snortu už budou veškeré problematické záznamy ukládány do databáze



8) Snort a Prelude. Podobně jako při konfiguraci MySQL je i zde nutná úprava konfiguračního souboru /usr/local/etc/snort/snort.conf tak, aby obsahoval nasledujicí řádek:
:
output alert_prelude: profile=snort



9) Ať je použit Prelude nebo ne, je nutné mít možnost se podívat, jak Snort zpracovává příchozí informace a případně ladit nastavení. Pro základní přehled je vhodný balíček BASE (Basic Security Analysis Engine), který se vyskytuje i v portech. Postup instalace je následující:
portinstall base

Následuje konfigurace BASE. Nejprve je nutné vytvořit z distribučního soubor konfigurační a pak jej upravit, včetně správné cesty pro adodb (DBlib_path):
cp /usr/local/www/base/base_conf.php.dist /usr/local/www/base/base_conf.php

$BASE_urlpath = '/usr/local/www/base';
$DBlib_path = '/usr/local/www/base/adodb';
$alert_dbname = 'snort';
$alert_host = 'localhost';
$alert_user = 'snort';
$alert_password = 'password';
$archive_dbname = 'snort';
$archive_user = 'snort';
$archive_password = 'password';
$archive_host = 'localhost';


Dalším krokem je rozšíření databáze Snort o položky nutné pro běh BASE:
cat /usr/local/www/base/sql/create_base_tbls_mysql.sql | mysql -u root -p snort

Po instalaci BASE potřeba nastavit Apache. Požadavky pro konfiguraci BASE jsou následující:
<IfModule alias_module>
     Alias /base "/usr/local/www/base"
</IfModule>
<Directory "/usr/local/www/base">
     Options None
     AllowOverride None
     Order allow,deny
     Allow from all
</Directory>


AdoDB je možné najít v adresáři /usr/local/share/adodb.



Tím by mělo být vše připraveno pro další ladění. V případě požadavků na automatické "úpravy" filtrů díky programu snort lze použít stránku Guardian, kde je pár zajímavých scriptů. Sice jsou určeny převážně pro ipfw, ale jsou snadno upravitelné i pro FreeBSD a pf. Osobně dopořučuji jako zdroj informací nepoužívat pouze snort, ale Prelude, kde je možné sbírat a vyhodnocovat informace i z dalších senzorů.
Domovská stránka projektu je http://www.snort.org Další zajimavou strankou je Emerging Threats, kde jsou k dispozici další pravidla pro rozšíření funkčnosti SNORTu.

Powered by Drupal - Design by artinet