Riadenie bezpečnosti informačných systémov
Úlohy naplánované na tento semester
- Otestovanie vytvorenej štruktúry
- Vyladenie štruktúry
- Implementácia premenných podľa vzoru Snortu
- Implementácia načítavania pravidiel zo súboru
Testovanie & Ladenie
Samotné testovanie a ladenie prebiehalo vo viacerých krokoch. Najprv som vykonal kompletnú revíziu kódu po dlhšom časovom odstupe. Revíziou som našiel asi 6 logických chýb a taktiež som doplnil zopár nových metód. Medzi najvážnejšie nedostatky patrili:
- Zle navrhnutá trieda pre IP adresu
- Chyby v metódach na porovnávanie určitej hodnoty so vzorom
Potom nasledovalo testovanie metódou black box, to znamená, že sa vytvorili testovacie objekty a testovali sa jeho metódy. Výsledky sa porovnali s očakávanými, ak neboli zhodné bolo nutné hľadať logickú chybu. Týmto testovaním som odhalil veľké množstvo logických chýb (rádove desiatky chýb). Tie boli následne opravené.
Testovanie je deštruktívny proces, ktorého účelom je priviesť testovaný systém k "pádu". Z tohto hľadiska bolo testovanie úspešne a prispelo tak ku kvalite vyvíjanej aplikácie.
Príklad testu (trieda Dsize):
Dsize os,s,m,ls;
os = new Dsize(123);
s = new Dsize(true, 123);
ls = new Dsize(false, 123);
m = new Dsize(45,100);
System.out.println( "os ,123;123;23 \n"+os.isIn(123)+"\n"+os.isIn(23));
System.out.println( "s ,>123;123;124 \n"+s.isIn(123)+"\n"+s.isIn(124));
System.out.println( "ls ,<123;122;124 \n"+ls.isIn(122)+"\n"+ls.isIn(124));
System.out.println( "m ,40<>100;39;50;101 \n"+m.isIn(39)+"\n"+m.isIn(50)+"\n"+m.isIn(101));
Očakávaný výstup:
os ,123;123;23
true
false
s ,>123;123;124
false
true
ls ,<123;122;124
true
false
m ,40<>100;39;50;101
false
true
false
V tomto teste sa očakávaný výstup zhodoval s reálnym čo znamená, že trieda a aj jej metódy sú korektné.
Príklad testu pre Flags
Flags jedna;
Flags p;
Flags a;
Flags n;
jedna = new Flags(false, false, true, true, false, true, false, true);
p = new Flags(true, false, false, false, false, true, true, false, true, false, true);
a = new Flags(false, true, false, false, false, true, true, false, true, false, true);
n = new Flags(false, false, false, false, false, true, true, false, true, false, true);
System.out.println("jedna\n" + jedna.match(0x35) + "\n" + jedna.match(0x45));
System.out.println("plus\n" + p.match(0x75) + "\n" + p.match(0x35) + "\n" + p.match(0x51));
System.out.println("any\n" + a.match(0x53) + "\n" + a.match(0x80));
System.out.println("not\n" + n.match(0x35) + "\n" + n.match(0x88));
jedna.setignoreflags(false, false, true, false, false, false, false, false);
System.out.println("jedna\n" + jedna.match(0x15));
Očakávaný výstup je:
jedna
true
false
plus
true
true
false
any
true
false
not
false
true
jedna
true
V tomto prípade sa očakávaný výstup líšil a síce:
jedna
true
false
plus
true
true
false
any
true
false
not
false
true
jedna
false
Chyba bola spôsobená nezahrnutím atribútu
BitSet ignoreflag;
v metóde
public boolean match(int flagval)
, ktorá zisti či zadane pole flags vo formáte celého čísla sa zhoduje so vzorom. Chyba bola odstránená a následný opakovaný test potvrdil správnosť jej výstupu.
Pri testovaní bolo použité vývojové prostredie
NetBeams IDE vo verzii 6.0.1 (Build 200801291616), kde veľmi osvedčil
debug mód.
Nové funkcie
Následne boli pridané tieto nove funkcie do projektu"
- Čítanie nastavení premenných zo súboru conf, ktorý sa nachádza v adresári conf, ktorý je súčasťou projektu.
- Čítanie pravidiel zo súborov uvedených v súbore conf.
Pre načítanie premenných zo súboru a na ich uchovanie bola vytvorená trieda
Variables, ktorá využíva statické metódy triedy
Parser. V súbore sú všetky informácie uložené v textovej podobe, aby sa dali upravovať v textovom editore, a tak pridávať nové premenné do programu. Vzhľadom na zložitú štruktúru čítaných údajov bolo nevyhnutné dôkladne navrhnúť spôsob rozpoznávania jednotlivých informácií a otestovať ho. Pre rozpoznávanie boli použité
Regulárne výrazy. Využité bolo ich API implementované v JAVE. Použitie regulárnych výrazov má oproti klasickej metóde analýzy reťazca znak po znaku nesporné výhody, a to hlavne pri tvorbe samotného algoritmu. Ich požitie urýchlilo vývoj aplikácie aj vďaka metódam, ktoré poskytuje ich aplikačné rozhranie. Načítané údaje sa uchovávajú iba počas behu programu. Uchované sú v súboroch na to určených a načítavajú sa stále pri štarte programu.
Pre načítanie pravidiel zo súborov a ich uchovanie bola vytvorená trieda
Rules, ktorá taktiež používa statické metódy triedy
Parser, vytvorene na parsovanie pravidiel zo súboru.
Class diagram aplikacie
Problémy a nejasnosti
Pri implementácií sa vyskytli nasledovné problémy:
- Zložitosť načítavaných údajov a s tým spojené zdĺhavé a pomerne komplikované hľadanie správnych Regulárnych výrazov na ich rozpoznanie. Počas tvorby aplikácie bolo nevyhnutné niekoľkokrát prehodnotiť, preusporiadať a doplniť jednotlivé funkcie pre získavanie informácií
Pri tvorbe aplikácie sú stále otvorené otázky konečnej implementácie vzhľadom na to, že Snort posudzuje každý paket zvlášť a IPfix sa zameriava na toky vrámci siete, čo môže viesť k nekompatibilite niektorých pravidiel. Pre riešenie tohto problému boli zatiaľ navrhnuté tieto varianty:
- Nastaviť meraciu platformu IPfix na exportovanie jednotlivých paketov (znížiť počet paketov vo flowe na 1).
- Navrhnúť vlastné použitie exportovaných parametrov (možná inšpirácia Snortom, ale nemožné použitie pravidiel v presne rovnakom význame).
Ďalším nevyriešeným problémom zostáva to, že Snort používa aj údaje z dátovej časti paketu a IPfix nie je na takéto použitie pripravený. Riešením je buď použitie len tých pravidiel, ktoré nepoužívajú dátovú časť (výhoda -> nezmení sa povaha meracej platformy), alebo navrhnúť a implementovať rozšírenie meracej platformy tak, aby vyhovovala pravidlám Snortu(výhoda -> veľké množstvo existujúcich a otestovaných pravidiel)
Zhodnotenie pravidiel
Celkový počet pravidiel je cca 3700 (počet bol zistený príkazom
_ cat * | grep [-]\> | wc -l_).
Po použití príkazu
cat *.rules | grep -v content | grep -v "#" | grep "\n" >xxx.txt ostalo v súbore 165 pravidiel, ktoré neobsahovali položku
content, čo je iba necelých
4,5%. Tento pomer je veľmi nepriaznivý vzhľadom na to, že IPfix nevie, alebo nemá vedieť čítať dátovú časť paketu, preto pre ďalší rozvoj aplikácie je nevyhnutné tento problém
VYRIEŠIŤ
Ako ďalej
Pre ďalší rozvoj aplikácie je nevyhnutne vyriešiť problém spomenutí v odstavci vyššie. Okrem tohto je možne"
- previesť nejaké optimalizácie a vyladenie načítavanie zo súboru, poprípade odstránenie chýb.
- doplniť polia pravidiel, ktoré nie sú implementované.
- navrhnúť a implementovať porovnávanie nameraných hodnôt s pravidlami.
- navrhnúť a implementovať akcie pre uplatnenie pravidiel.
- integrovať toto riešenie s riešením z diplomovej práce Ing. Rojáka.
- navrhnúť a implementovať použitie informácií získaných projektmi Monitorovanie bezpečnosti Informačných systémov.
--
PeterKolcun - 29 May 2008
- sp2.zip: Zdrojove kody - projek z netbeans