Menu Zavrieť

IDS SNORT na platforme Windows

1 Úvod

Hrozby pre podnikové dáta sú na vzostupe, a stále viacej spoločností trpí finančné straty spôsobené útokmi na počítačové systémy. A stále väčšie množstvo informácií je nezabezpečené voči krádeži…“ (Information Week, The Security Facade, Bob Violino, 21. október 1996, strana 36)

Spolu s masovým rozšírením internetu do domácností ale hlavne podnikov v posledných rokoch je problém ochrany citlivých údajov stále naliehavejší. Vzniká stále viac a viac vírusov, programov a následne aj útokov, ktoré využívajú bezpečnostných chýb či už najrozšírenejších programov (e-mailových klientov, instant messenger-ov, …) alebo operačných systémov firmy Microsoft – Windows. Práve pod tlakom verejnosti bol Microsoft nútený počas posledných rokov pozmeniť svoju firemnú politiku a začať sa aktívne angažovať a opravovať „diery“ vo svojich produktoch. Avšak stále sú nachádzané nové a nové chyby, preto každý používateľ tohto operačného systému by mal pouvažovať aj o inom spôsobe ochrany svojich citlivých dát, okrem tradičného aplikovania najnovších bezpečnostných záplat. Okrem toho, bezpečnostné záplaty neriešia aktívne predchádzanie útokom a niekedy sú vydané s veľkým časovým oneskorením, čo znižuje ich efektivitu.
Jedným so spôsobov aktívnej ochrany je nasadenie systému na detekciu prienikov (IDS – Intrusion Detection System) na počítači s kritickými údajmi. Jeden z často používaných systémov na *nix staniciach a serveroch je IDS Snort, ktorého portovaná verzia existuje aj pre počítače s Windows NT kompatibilným operačným systémom. V mojej semestrálnej práci by som sa chcel zamerať práve na inštaláciu, jednoduché nakonfigurovanie a otestovanie schopnosti Snort detekovať útoky v LAN prostredí.

2 SNORT

2.1 Popis IDS


Intrusion detection systems (IDS) sú softvérové alebo hardvérové systémy, ktoré automatizovane monitorujú udalosti, ktoré sa dejú v počítačových systémoch a sieťach a analyzujú ich vzhľadom na bezpečnostné problémy. Prieniky môžu byť spôsobené útočníkmi zo systémov v internete, ale aj z vnútra siete, či už od užívateľov, ktorý sa snažia získať väčšie práva ako sú im predelené, ale aj od trojských koňov, vírusov, či iných zákerných programov.

IDS môžeme zhruba rozdeliť na tri základné typy:

  • Sieťovo orientované (network based): Detekciu útokov robia pomocou analýzy paketov, sú zväčša transparentné a útočníkom ťažko odhaliteľné, pri dobrom uložení sú schopné monitorovať celú sieť. Medzi hlavné nevýhody patrí problematickosť pri nasadení v dnes už štandardných na switchoch založených sieťach. Sú schopné detekovať prebiehajúci útok, avšak nie jeho výsledky.

 

  • Orientované na jednotlivé počítače (host based): Sú založené na informáciách získaných z jednotlivých počítačov, preto sú schopné s veľkou spoľahlivosťou zistiť presne ktoré procesy a užívatelia sú zapojený do útoku. Sú schopné „vidieť“ výsledky útoku a sú schopné pracovať aj v prostredí, kde je sieťová komunikácia zašifrovaná. Medzi ich hlavné nevýhody patrí ich náchylnosť k vyradeniu pri niektorých typov útokov (DOS), ako aj neschopnosť vidieť niektoré sieťové útoky.
  • Orientované na aplikácie (application based): Je špeciálna podskupina Host based IDS, ktoré sledujú deje prebiehajúce vnútri jednej aplikácie. Sú zamerané skôr na detekciu zneužitia aplikácie užívateľom. Ich hlavná nevýhoda je ich podstatne väčšia zraniteľnosť voči zlyhaniu častí OS ktoré nemonitorujú, preto sa často používajú v spojitosti s kvalitnými host based IDS.


Snort je opensource sieťový (network based) IDS. Používa jednoduchý systém pravidiel a záznamov možných útokov. Pôvodne bol vytvorený na *nix operačné systémy, ale v súčasnosti je už portovaný aj na operačné systémy na báze Windows NT.

 

2.2 Inštalácia


Po stiahnutí binárnych súborov Snortu pre platformu Win32 z http://www.snort.org , je ešte nutné nainštalovať WinPCap ovládač (http://winpcap.polito.it) , ktorý Snortu sprístupňuje nízko úrovňový prístup k sieťovej karte. Na jeho nainštalovanie je nutný účet s administrátorskými právami.

2.3 Konfigurácia


Pripravený konfiguračný súbor snort.conf sa nachádza v podadresári .\etc adresára do ktorého bol Snort nainštalovaný. V ňom je dôležité zmeniť premenné $HOME_NET a $EXTERNAL_NET, ktoré sa používajú pre identifikáciu dôvernej siete v ktorej sa nachádzame a vonkajšku sveta. Pre optimalizáciu rýchlosti je vhodné sieťové služby, ktoré sa na našej sieti nenachádzajú v konfiguračnom súbore zakomentovať.
Defaultne zakomentovaný je experimentálny preprocesor pre odhaľovanie arp útokov, ale nakoľko sú arp útoky v LAN sieťach celkom časté, rozhodol som sa vyskúšať jeho funkcionalitu. K jeho fungovaniu je však nutné zadať IP a MAC adresu každého počítača na našom sieťovom segmente.

2.4 Použitie


Snort môže pracovať v troch hlavných módoch: snifer, packet loger a IDS. V snifer móde odchytáva sieťové pakety a vypisuje ich na konzolu, v packet loger móde zaznamenáva pakety do súboru a v IDS analyzuje sieťovú prevádzku voči nakonfigurovaným pravidlám.

2.4.1 Sniffer mód


Slúži na vypísanie TCP/IP paketových hlavičiek. Príkaz:

.\snort -v

Pre zobrazenie aj dát v jednotlivých treba použiť prepínač –d, teda

.\snort –v –d

Príklad odchytenej komunikácie:

05/11-12:45:25.235513 192.168.1.44:137 -> 192.168.1.255:137
UDP TTL:128 TOS:0x0 ID:3759 IpLen:20 DgmLen:78
Len: 50
81 EF 01 10 00 01 00 00 00 00 00 00 20 46 43 45 ………… FCE
42 46 44 46 45 45 50 43 41 43 41 43 41 43 41 43 BFDFEEPCACACACAC
41 43 41 43 41 43 41 43 41 43 41 43 41 00 00 20 ACACACACACACA..
00 01 ..
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
05/11-12:45:26.102184 ARP who-has 192.168.1.1 tell 192.168.1.29 (0:40:95:30:1E:5A)
05/11-12:45:27.914230 ARP who-has 192.168.1.1 tell 192.168.1.29 (0:40:95:30:1E:5A)

Prvá je pre každý záznam časová pečiatka, ďalej nasleduje výpis podľa typu protokolu, v prvom prípade sa jednalo o UDP datagram, v druhom prípade o ARP request.

Pre detailné zobrazovanie informácií z linkovej vrstvy sa používa prepínač –e.

.\snort –v -e

 

2.4.2 Packet loger mód


Automaticky po zadaní adresáru pre ukladanie logov pomocou prepínača –l sa snort prepne do packet loger režimu. V tomto režime vytvorí pre každú IP vlastný adresár a do neho nahráva pakety smerujúce k danej IP. Arp pakety sa ukladajú do špeciálneho súboru arp .
Okrem štandardného módu kde sa pre každú IP vytvára adresár sú možné aj iné, omnoho rýchlejší spôsob záznamu paketov, avšak už nie v textovej forme ale binárnej a to pomocou prepínača –L . Tento mód sa používa hlavne pri sieťach s vyššou prenosovou kapacitou, pretože minimalizuje počet stratených paketov (teda „nepreverených“ paketov).
Tento mód je vlastne packet sniffer mód, len s tým rozdielom, že Snort ukladá všetku komunikáciu, buď do súboru (binárny alebo human-readible formát) alebo do databázy.

2.4.3 IDS mód


Intrusion detection mód sa spustí pomocou prepínača –c, jeho ďalší parameter však musí byť konfiguračný súbor nastavení. V tomto súbore sú zaznamenané aj tzv. rules súbory ako aj parametre ip preprocessorov. Rules súbory sú vlastne jednoduché pravidlá, s pomocou ktorých Snort testuje odchytenú komunikáciu a ak tá spĺňa podmienky v pravidlách definované, tak je táto komunikácia uložená a je aktualizovaný súbor alert.ids. (nachádza sa v log adresáry). Nakoľko je pravidieľ veľké množstvo a analyzujú mnoho vecí (mimo iného aj to či zamestnanec si pozerá erotické stránky), môže byť výpis alert.ids už po pár minútach neprehľadný. Nakoľko základná konfigurácia Snortu mala napríklad port scanner, host scanner a mac spoofing preprocessor vypnutý, upravil som túto konfiguráciu aby viacej odpovedala mojím požiadavkám.
Snort ponúka viac režimov vypisovania udalostí full, fast, console, none (pomocou prepínača –A) a špecialne pre Win32 platformu ponúka záznam aj do EventLog-u systému.(prepínač –E). Pri mojích testoch som použil výpis do súboru, ale pre dlhodobejšiu prevádzku sa sľubné zdalo riešenie Acid Php + MySQL databáza. Acid je jednoduchý php skript, ktorý dokáže logy prehľadne zobrazovať cez web rozhranie, a je bližšie popísaný v ďalšej časti práce. Otestovať funkčnosť jednotlivých nastavení ako aj schopnosti IDS som sa rozhodol pomocou jednoduchých programov, dostupných voľne k stiahnutiu na internete.

Jedna sa konkrétne o programy ako:

  • GFI Languard Security Scaner, ktorý je výborný na „scanovanie“ otvorených portov na počítačoch
  • Panther DoS čo je jednoduchý generátor neštandardných paketov
  • AngryIP scanner slúžiaci na vyhľadanie „živých“ PC pomocou ICMP protokolu
  • MacChanger, ako názov vypovedá, dokáže zmeniť MAC adresu PC v podstate „on the fly“ a použil som ho na ARP spoofing detection Snort modulu
  • SynDOS, čo je generátor TCP spojení


Na jednotlivé programy reagoval Snort vcelku uspokojivo, moc dobre sa osvedčil mac spoofing modul, ktorý zahlásil pokus vždy keď na sieti vysielal pakety akýkoľvek počítač s mac adresou, ktorú nemal v zozname, čo ale môže byť problematické pri sieťach, kde sa často mení zloženie PC a pri veľkých sieťach. Ďalším problémom môže byť enormná veľkosť takéhoto arp logu, pretože pre každý vyslaný paket s neznámou mac adresou je 2 riadkový záznam.

Príklad takého arp spoofing hlásenia:

[**] (spp_arpspoof) Attempted ARP cache overwrite attack [**]
05/15-17:02:32.806045 ARP who-has 10.0.0.9 tell 10.0.0.154

Bez problémov bol detekovaný portscan, ale host scan pomocou Angry IP scanera vyzeral, že Snortu unikol, čo je síce na škodu, avšak ICMP protokol býva často blokovaný firewallmy, je preto dosť možné, že je má Snort takúto detekciu defaultne vypnutú.

Príklad hlásenia o scanovaní portov:

[**] [121:4:1] Portscan detected from 192.168.1.41 Talker(fixed: 30 sliding: 30) Scanner(fixed: 0 sliding: 0) [**]
05/15-21:27:50.263000

Ako veľký problém pre Snort sa javil program SynDOS, čo je generátor spojení TCP na port 139, avšak s neštandardným obsahom a zo zdrojovou adresou nastavenou na 127.0.0.2. V LAN prostredí, kde už je štandard 100Mbit Fast Ethernet pripojenie staníc dokáže tento program úplne zahltiť každý server, ktorý nie je schopný zvládať takýto nápor. Snort správne detekoval komunikáciu, ale behom 2 sekúnd mal záznamový log veľkosť približne 7MB – pre každé spojenie tieto riadky:

[**][116:46:1] (snort_decoder) WARNING: TCP Data Offset is less than 5![**]
05/18-21:35:12.697359 127.0.0.2:0 -> 192.168.1.42:0
TCP TTL:255 TOS:0x0 ID:41968 IpLen:20 DgmLen:40
******S* Seq: 0x4BFD8CAD Ack: 0x528C6987 Win: 0x3E4B TcpLen: 0

[**] [1:528:4] BAD-TRAFFIC loopback traffic [**]
[Classification: Potentially Bad Traffic] [Priority: 2]
05/18-21:35:12.697359 127.0.0.2:0 -> 192.168.1.42:0
TCP TTL:255 TOS:0x0 ID:41968 IpLen:20 DgmLen:40
TCP header truncated
[Xref => http://rr.sans.org/firewall/egress.php]

Ak predpokladáme rast logu približne rýchlosťou 3,5MB/s, za hodinu takéhoto útoku bude mať log „slušnú“ veľkosť 12,6GB. Aj tento príklad ukazuje, že Snort bez dobrého log parseru je podstatne ťažšie efektívne nepoužiteľný.

3 Písanie pravidiel


Sieťové prostredie je stále sa meniaci systém, preto aj NIDS musí byť schopný a mať možnosť byť aktualizovaný pre zatiaľ ešte nepoznané, resp. v základných pravidlách neobsiahnuté hrozby. Snort používa jednoduchý jazyk pre popis pravidiel, ktorý je flexibilný a výkonný. Na internete existuje veľká komunita, ktorá sa zaoberá vytváraním užitočných pravidiel pre Snort (napr. http://www.whitehats.com ), avšak vždy je vhodné vedieť aspoň základy tohto jazyka.
Každé pravidlo musí byť napísané na jeden riadok, ak má byť rozdelené na viac riadkov, musí byť použité na konci riadku spätné lomítko \ .
Každé pravidlo sa skladá z dvoch častí – z hlavičky a z nastavení. Hlavička obsahuje akciu, ktorá má byť vykonaná pri splnení podmienok pravidla, protokol obsahuje zdrojovú a cieľovú adresu a port. V nastaveniach pravidla je správa, ktorá má byť vypísaná pri splnení podmienok, ktoré sú práve tu špecifikované. Pravidlo nastane, ak je každá podmienka splnená (logický and). Snort momentálne (v 2.0.1 ) podporuje len protokoly tcp, udp, icmp a ip. V experimentálnej prevádzke je arp protokol, ale plánuje sa v ďalšom vývoji plná podpora protokolov arp, igrp, gre, rip, ipx, ospf a iné.
Premenné sa definujú pomocou syntaxe:
var <meno> <hodnota>

Príklad pravidla slúžiaceho zaznamenanie alertu pre root prístupu na telnet server:

alert tcp $TELNET_SERVERS 23 -> $EXTERNAL_NET any (msg:"TELNET root login"; content:"login\: root"; flow:from_server,established; classtype:suspicious-login; sid:719; rev:5;)

kde premenná $TELNET_SERVERS je definovaná v konfiguračnom súbore na IP adresy serverov prijímajúcich tcp pripojenia na porte 23.

V nastaveniach pravidla začínajúcich okrúhlou zátvorkou znamená:

  • msg:“… “ správu, ktorá bude zapísaná do alert logu
  • content:“… “ obsah, ktorý musí paket obsahovať
  • flow parametre nastavujúce analýzu len na určitý smer toku tcp streamu
  • classtype udáva triedu útoku pre jednoduchšiu klasifikáciu, využíva sa spolu s prioritou
  • sid číslo slúžiace pre jedinečnú identifikáciu pravidla
  • rev číslo slúžiace pre identifikáciu verzie pravidla, využíva sa spolu s sid pre jednoduché aktualizovanie pravidiel

Príklad pravidla slúžiaceho na zaznamenanie prístupu užívateľa user na ftp server:

alert tcp $FTP_SERVERS any -> $EXTERNAL_NET 21 (msg:"FTP user login"; content:"USER user";nocase;)

A výpis alert logu pri prihlasovaní sa užívateľa user:

[**] [1:0:0] FTP user login [**]
[Priority: 0]
05/18-23:34:04.338722 192.168.1.41:4442 -> 192.168.1.5:21
TCP TTL:128 TOS:0x0 ID:58428 IpLen:20 DgmLen:63 DF
***AP*** Seq: 0x86810EE4 Ack: 0x3617866E Win: 0x443F TcpLen: 32
TCP Options (3) => NOP NOP TS: 144274 42783

Nastavenie nocase vypína rozdiel medzi veľkými a malými písmenkami v content nastavení.

Príklad pravidla na detekciu použitia DOS Winnuke útoku:

alert tcp $EXTERNAL_NET any -> $HOME_NET 135:139 (msg: "DOS Winnuke attack"; flags: U+; stateless; reference: bugtraq,2010; reference:cve,CVE-1999-0153; classtype: attempted-dos; sid:1257; rev:5;)

Nastavenia pravidla znamenajú:

  • flags definuje, aké špeciálne stavové bity ma tcp paket nastavené
  • reference dovoľuje pravidlu odkazovať sa na externý systém pre identifikáciu útokov


V hore uvedených príkladoch flexibilitu, jednoduchosť a množstvo možnosti, ktoré Snort pomocou pravidiel ponúka. Pre prípadných záujemcov o problematikú písania pravidiel by som ako odrazový mostík odporučil Snort manuál, kde tematike písania pravidiel, spolu s detailným popisom nastavení venovaný veľký priestor.
Je jednoduché modifikovať pravidla tak, aby napríklad odchytávali a zaznamenávali heslá pre určité služby (ftp, telnet, … ) – všetky, ktoré posielajú nešifrované heslá. Toto môže byť dosť vážny problém, preto je pre sieťového správcu dôležité mať správne nakonfigurovanú bezpečnostnú politiku na jednotlivých počítačoch v sieti.
Už v základnej inštalácii Snort poskytuje obrovské množstvo už vytvorených pravidiel, avšak dôležitý je ich správny výber pre potreby našej siete. Toto rozhodnutie musí spraviť správca siete, s ohľadom na ciele s ktorými NIDS Snort do siete nasadzuje.

4 Analýza záznamov

V predchádzajúcej časti bol načrtnutý problém analýzy záznamov, ktoré Snort pri útoku generuje. Tieto záznamy môžu dosahovať v bežných podmienkach rádovo MB, v extrémnych aj desiatky až stovky MB záznamu. Ich vhodná a rýchla analýza, pri ktorej správca siete dokáže rýchlo určiť zdroje útoku a účinne ich zastaviť, je kľúčová časť NIDS, ktorú však Snort neposkytuje. Snort sa spolieha na ďalšie nadstavbové programy, ktoré budú dané služby poskytovať, avšak ich voľbu necháva na užívateľovi. Ako jeden s často používaných je Analysis Console for Intrusion Databases – ACID. Jedná a o php skript, ktorý po nainštalovaní na www server, dokáže prehľadne vypisovať logy, triediť ich podľa protokolov, ako aj naliehavosti. ACID podporuje okrem Snortu aj analýzu záznamov z firewallov, network logerov, ako aj iných IDS.

4.1 Inštalácia ACID


Analysis Console for Intrusion Databases – ACID (http://www.cert.org/kb/acid) využíva záznamy Snortu uložené v databáze pre prehľadné, rýchle a efektívne zobrazovanie aktuálneho stavu záznamu. Pre správne fungovanie je potrebné mať www server s podporov php skriptov. Samotný ACID potrebuje mať nakonfigurované ADODB, čo je unifikované rozhranie pre prístup k databázam ( http://php.weblogs.com/adodb ) – jeho inštalácia je jednoduchá, stačí ho len nakopírovať do adresára, do ktorého má prístup www server, a nastaviť v konfiguračnom súbore acid_conf.php cestu k nakopírovanému ADODB. V acid_conf.php je ešte nutné nastaviť login, heslo a názov databázy, do ktorej Snort ukladá záznamy.
Konfigurácia Snortu pre ukladanie záznamov do databázy je jednoduchá, stačí odkomentovať riadok pre výstup do databázy a nastavenie parametrov. Pre detailnejšie informácie a podrobný návod ako Snort nakonfigurovať odporúčam pozrieť www stránku (http://www.andrew.cmu.edu/~rdanyliw/snort/snortdb/snortdb.html ).

4.2 Použitie ACID


ACID pracoval presne podľa mojich očakávaní. Z hlavnej stránky dáva možnosť správcovi siete zobrazovať najaktuálnejšie alerty podľa protokolov, podľa času (za posledných 24hod, 72hod, ..), dokáže triediť útoky podľa cieľovej, koncovej ip adresy, portov, …
ACID podporuje zálohovanie logov, posielanie určitých časti na email, ako aj grafické zobrazenie štatistík. Pri každom zobrazenom útoku obsahuje www odkaz, kde je bližšie útok popísaný. Samozrejmá je podpora vyhľadávania databázy podľa zadaných parametrov, ako aj manipulácia a oprava databázy.
ACID podporuje súčasnú správu viacerých Snort databáz (napríklad z rozdielnych sieťových segmentov) – čím celú správu NIDS centralizuje, čo je podstatná výhoda oproti klasickému decentralizovanému prístupu viacerých Snort senzorov na rozdielnych miestach.

Príklad zobrazenia 5 najviac frekventovaných útokov v ACID:

Príklad menu pre zobrazenie aktuálneho stavu databázy (snapshot):

Používanie ACID je veľmi jednoduché, intuitívne, ale efektívne – a čo je dôležité, dokáže v čase útoku poskytnúť sieťovému správcovi prehľadné informácie o aktuálnom stave siete. Podmienkou však stále ostáva vhodne nakonfigurovaný Snort – mám na mysli hlavne správne vybrané pravidlá, ktorých výber je už ale plne závislí od konfigurácie, serverov ako aj typu siete.

5 Použitá literatúra

  1. How to Guide – Implementing a Network Based Intrusion Detection System, Internet Security Systems , Brain Laing
  2. Snort User Guide, The Snort Project, Martin Roesch, Chris Green, Sourcefire, Inc.
  3. Intrusion detection systems, NIST, Rebecca Bace, Peter Mell
  4. Snort's Place in a Windows 2000 Environment, Jon Bull
  5. http://www.l0t3k.org/security
  6. http://www.whitehats.com
  7. http://www.cert.org/kb/acid
  8. http://www.andrew.cmu.edu/~rdanyliw/snort/snortdb/snortdb.html
  9. http://php.weblogs.com/adodb
  10. http://www.snort.org

Pozn. Prácu vypracoval Marián Janiga na predmete Komunikačné počítače pod vedením Ing. Segeča

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.