IDS systeemid - Reeglid ja reeglikogumikud

From ICO wiki
Jump to navigationJump to search

Reeglid ja reeglikogumikud

Reeglid mängivad väga suurt rolli Suricata puhul. Enamustel juhtudel kasutatakse juba saada olevaid tasuta või tasulisi reeglikogumikke. Kõige populaarsemad on Emerging Threats, Emerging Threats Pro ja Source fire poolt välja antav VRT. Kõigepealt käsitleme reeglite struktuuri ja nende loomist ning seejärel vaatame üle reeglikogumike lisamise ja haldamise.

Reeglid

Reeglid koosnevad kolmest komponendist:
Tegevus, päis, valikud ehk action, header, rule-options.

Joonis 1. [Näide Suricata reeglist]


Tegevus ehk action

Paketi reeglile vastamisel teostatakse selle komponendi alusel üks neljast tegevusest:

  • Pass - Kui pakett vastab reeglile, siis paketi kontrollimine ülejäänud reeglite vastu jäetakse vahele.
  • Drop - Oluline ainult IPS režiimid puhul. Reeglile vastamisel ei saadeta paketti edasi ning genereeritakse teade Suricata logisse.
  • Reject - Reeglile vastamisel lükatakse pakett tagasi. Nii saatjale kui saadetavale saadetakse TCP ühenduse puhul Reset pakett ning muude protokollide puhul ICMP veateade. Genereeritakse ka teade ning IPS puhul lisandub Drop tegevuse täitmine.
  • Alert - Reeglile vastamisel genereeritakse teade.


Päis ehk header

Protokoll

Tegevusele järgneva võtmesõnaga tähistatakse, millist protokolli antud reegel käsitleb. Ülevalpoole olevas näites on selleks TCP. Valida on 4 valiku vahel: tcp, udp, icm, ip. Ip tähistab ükskõik millist liiklust. Suricata puhul on lisanduvateks võtmesõnadeks: http, tls, ftp, smb ja dns. Kui signatuuris on defineeritud kindel protokoll siis pakett saab reeglile vastata ainult juhul kui kasutatav protokoll ka vastab.


Allikas ja sihtpunkt

Mõlema puhul saab määrata võrgu aadressid. Kasutada võib nii IPv4 kui ka IPv6. Kasutatavad lisa parameetrid on “!” ehk siis not. Näiteks “! 127.0.0.1” tähistab, et kõik aadressid peale selle. Nurksulgudega (“[ ]”) saab aadresse grupeerida. Näiteks: ! [1.1.1.1, 1.1.1.2] tähistab, et kõik võrguaadressid peale nende kahe.

Konfiguratsioonis saab seadistada ka lisa parameetreid nagu $HOME_NET ehk alamvõrgud mis on sisevõrgus kasutusel ja $EXTERNAL_NET ehk väline võrk. $EXTERNAL_NET puhul on populaarne seadistada väärtuseks !$HOME_NET ehk siis kõik aadressid peale sisevõrgu aadresside(Mitte kasutada $EXTERNAL_NET parameetrit kui $HOME_NET väärtuseks on “any”).

Mõningad näited [Suricata dokumentatsioonist]:

! 1.1.1.1                       (Every IP address but 1.1.1.1)
![1.1.1.1, 1.1.1.2]             (Every IP address but 1.1.1.1 and 1.1.1.2)    
$HOME_NET                       (Your setting of HOME_NET in yaml)
[$EXTERNAL_NET, !$HOME_NET]     (EXTERNAL_NET and not HOME_NET)
[10.0.0.0/24, !10.0.0.5]        (10.0.0.0/24 except for 10.0.0.5) 
[…..,[....]]
[…. ,![.....]]


Allika ja sihtpunkti aadresside juurde saab defineerida ka pordi. Tüüpiliselt on allika port op.süsteemi poolt automaatselt valitud ja seetõttu on tavaliselt reeglites seatud allika pordiks “any”. Seda määrab ka kasutatav protokoll. Samamoodi nagu aadresside puhul on ka portide puhul võimalik kasutada lisa parameetreid:

“!” - eitus/erand

“:” - vahemik

“[ ]” - millised osad kuuluvad kokku

“,” - eraldamiseks


Näited:

[80, 81, 82]    (port 80, 81 and 82)
[80: 82]        (Range from 80 till 82)
[1024: ]        (From 1024 till the highest port-number)
!80             (Every port but 80)
[80:100,!99]    (Range from 80 till 100 but 99 excluded)
[1:80,![2,4]]
[….[.....]]


Kõigi reeglite puhul määratakse kõige pealt allika aadress ja port, seejärel pannakse paika liikluse suund ning suunale järgneb sihtpunkt. Suuna saab määrata kahel viisil:

“->” - tähistab ühe suunalist liiklust.
Näiteks: “allikas -> sihtpunkt” mida illustreerib reegel “alert tcp 1.2.3.4 1024 -> 5.6.7.8 80”
Reegel vastab juhul kui liiklus on aadressilt 1.2.3.4 aadressile 5.6.7.8.
“<>” - reegel kehtib mõlema suunalise liikluse korral.


Valikud

Valikutel on kindel Unixi maailmast tuttav "võti: väärtus" formaat:

name: settings;

Mõnel juhul järgneb nimele kohe semikoolon. Näiteks parameeter “nocase;”

On olemas spetsiifilised sätted metaandmete, päiste, paketi sisu ning paketivoogude kohta:

[Metaandmete sätted]

[Lasti võtmesõnad]

[HTTP võtmesõnad]

[DNS võtmesõnad]

[Flow võtmesõnad]

[IP Reputatsiooni reeglid]


Reegli ehitamine

Tundes neid põhilisi komponente saame ehitada oma reegli. Oletame, et me tahame ehitada reegli mis genereeriks teate teatud veebilehe poole pöördumisel välisvõrgust. Veebiserver ise asub sisevõrgus.

Sellisel juhul määrame esmalt tegevuse tüübiks teade. Protokolliks määrame http. Allikaks on $EXTERNAL_NET ning sihtpunktiks on $HOME_NET ja port on 80. Järgnevad reegli valikud mis ümbritsetakse sulgudega.

Esmalt määrame teate:

msg:“Otsitud liiklus”;

Kui pakett vastab reeglile siis teade kuvatakse koos muude andmetega Suricata logis.

Järgnevalt määrame paketivoo:

flow:established,to_server;

Sellega määrame, et paketivoog on alustatud ning suunaga serveri poole


Määrame http päringust otsitava stringi(käesoleval juhul on veebilehe nimi “secret_page.html”):

content:”/secret_page.html”; http_uri;

Sellega määrame, et otsitav string on secret_page.html ning see peab sisalduma URIs.


Siia juurde määrame ka tüübi ning viite:

classtype:trojan-activity;
reference: url, www.example.com/viide;

Tüüpe on palju erinevaid ja võib ise kirjutatud reegli puhul olla enda valitud.

Viide on tavaliselt hüperlink mõne antud nõrkuse kirjeldust sisaldavale veebisaidile. Suricata puhul on selleks tihtipeale: http://doc.emergingthreats.net/


Lõpuks määrame ka reegli id ja versiooni numbrid:

sid:123;
rev:1;

Tavaks on, et id on enne versiooni ja nad on kaks viimast parameetrit. ID nagu ikka on unikaalne numbriline väärtus. Reegli muutmisel versiooni numbrit suurendatakse.

Nüüd on komponendid paigas ja aeg reegel kokku panna:

alert http $EXTERNAL_NET any -> $HOME_NET 80 (msg:“Otsitud liiklus”; flow:established,to_server; content:”/secret_page.html”; 

http_uri; classtype:trojan-activity; reference: url, www.example.com/viide; sid:123; rev:1;)

Reeglikogumikud

Signatuuri põhised IDS lahendused sarnanevad antiviirustele selles, et ka nemad suudavad tuvastada ainult asju mille jaoks neil on reegel olemas. Suricata ja Snordi mõlema puhul on avalikult kätte saadavad reeglite kogumikud, mida täiendatakse pidevalt. Suricata puhul on selleks [Emerging Threats] (edaspidi ET) ning Snordi puhul [VRT] reeglid.

ET kogumikku uuendatakse kord päevas ning VRT kogumikku kuni mitu korda nädalas. Kogumikud on siiski mõlema toote puhul kasutatavad, tänu mõlema lahenduse sarnasusele reeglite aspektis. Mõlemast on saadaval ka tasulised versioonid ning tasulisi versioone leidub turul teisigi. Tasuliste reeglikogumike eelisteks on tavaliselt kas suurem reeglite arv või lühem uuendamise intervall.

Reeglikogumikke on võimalik lisada käsitsi, kuid palju optimaalsem ja mugavam lahendus on kasutada mõnda selleks mõeldud tarkvara. Populaarseimad on [PulledPork] ja [Oinkmaster].

Antud kursuse praktiliste ülesannete raames kasutame Emerging Threats reeglikogumikku ja halduseks Oinkmasterit.

Küsimused

  1. Mis on reegli kolm komponenti?
  2. Milline on valikute puhul kasutatav formaat?
  3. Mis on reegli võimalikud tegevused?
  4. Miks kasutada reeglikogumikke?
  5. Millal muudetakse reegli versiooni numbrit?

Kursuse avaleht

Sissetungi tuvastuse systeemid