Security-Onion työkaluja Puppet-moduuleina
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
kuvat
oinkmaster
puppet
suricata
LICENSE
README.md
Vagrantfile
Vagrantfile.errors
hosts
master.sh

README.md

Security-Onion työkaluja Puppet-moduuleina

Sisällysluettelo

  1. Repositoryn sisältö
  2. Työkalujen valinta
  3. Moduulit
  4. Jatkokehitys
  5. Moduulien käyttöönotto
  6. Testaus

Repositoryn sisältö

Tässä repositoryssä on puppet-moduuleja eri verkkotyökalujen asennukseen, joita on Security-Onionissa. Tämä on Palvelintenhallinta-kurssin esiteltävä moduuli.

Työkalujen valinta

Aloitin tutkimaan mitä erilaisia työkaluja Security-Onionissa on. En ollut koskaan käyttänyt Security-Onionia, joten minulla ei ollut käsitystä, mitä kaikkia vaihtoehtoja löytyy. Yksi selkeä valintakriteeri kuitenkin oli, että löydän Ubuntun paketinhallinnasta kyseiset ohjelmat. Tämä vaiheuttikin sitten huomattavasti työskentelyä, kun huomasin valtaosan asennusohjeista Ubuntulle olevan enemmän tai vähemmän eri tervapallojen wget-hakuja ja purkamisia. Päädyin lopulta alla listattuihin ohjelmiin.

  1. Tshark
    • Tshark on Wireshark komentorivillä ja sillä voi kuunnella verkkoliikennettä ja tallentaa sitä tutkittavaksi .pcap muodossa.
  1. Ngrep
    • Ngrep on verkkoliikenteen greppaus-työkalu.
  1. Suricata
    • Suricata on IDS-työkalu, joka käyttää samoja sääntöjä kuin Snort. Valitsin Suricatan siksi, että se löytyi paketinhallinnasta, mutta tällä vaikeutin huomattavasti työtäni, sillä kaikki konfigurointiohjeet löytyivät vain Snortille.
    • Lisätty Oinkmaster säännöt, jotka päitittyvät automaattisesti

Edellä mainitut pystyy asentamaan ilman graafisen käyttöliittymän tarvetta, mutta siitä eteenpäin kaikki analysointiin käytettävät lokienhallintatyökalut, joita Security-Onionissa oli, olivat poikkeuksetta selainsovelluksia.

Moduulit

Mukana on yhteensä neljä moduulia. Tshark ja Ngrep-moduulit ovat hyvin yksinkertaisia. Moduuleissa vain asennuksen tekevä ensure => 'installed', rivit sekä allowcdrom => 'true',, jolloin moduulit toimivat myös live-tikkujen kanssa. Suricatassa on sitten vähän enemmän sisältöä. Asennuksen lisäksi muokkaan asetuksia kahden eri tiedoston (suricata.yaml ja oinkmaster.conf) avulla, jotka löytyvät moduulin templates-kansiosta. Ko. kansiossa on myös muutama muokattu .rules-tiedosto. Säännöt noudetaan oinkmaster.conf-tiedostoa muokkaamalla ja ajamalla ohjeessa mainittu skripti. Olen tuon vaiheen tehnyt oinkmaster-moduulilla. Oinkmaster-moduulissa on yksi shell-komento ja kahdeksan template-sääntöä, jotka korvaavat noudetut vastaavat. Se, että kannattaako niin tehdä, onkin sitten toinen juttu. Tein ne lähinnä testimielessä.

Jatkokehitys

Teen tietokanta- ja lokienhallinta-moduulit, jotka konfiguroin toimimaan toistensa kanssa. Hyviä vaihtoehtoja olisivat olleet Graylog, Kibana tai Squert. Greylogista löytyy jo valmis moduuli Puppet Forgen-sivuilta. Graylogista saa myös valmiit Vagrant-tiedostot, joilla pääsee nopeasti kokeilemaan asetuksia. Harmittaa vain, että löysin tämän vasta päivää ennen moduulin luovuttamista, niin en ehtinyt tehdä toimivia moduuleja tähän harjoitukseen. Otin kuitenkin testimielessä Graylogin Vagrantfilen mukaan master.sh tiedostoon ja kyllä sain tuon boksin pystyyn. Alempana testausta ja kuvaa.

Joka tapauksessa paikallisesti lokeja ei tulisi säilyttää, joten tietokantapalvelin (moduuli) lokeja varten ja sitten toimiva lokienhallinta-järjestelmä (moduuli) siihen kylkeen. Voin sitten lisätä eri lokilähteitä, kun kehitän uusia moduuleja ohjelmia varten.

Moduulien käyttöönotto

Ylläolevia voi testata nopeasti live-cd:ltä käynnistetyllä Xubunt 16.04-käyttöjärjestelmällä, omani olen tehnyt julkaisemani blogikirjoituksen mukaisesti. Kun kone on käynnisynyt, aja terminaalissa komento (kotihakemistossa)

wget https://raw.githubusercontent.com/mcleppala/netwtools/master/master.sh

ja aja master.sh komennolla

bash master.sh

Skripti muokkaa livetikulta käynnistettyä konetta ja luo siitä master-koneen (muokkaa puppet.conf ja hosts-tiedostoja). Lisäksi se luo Vagrant slave-koneen ja Graylog-koneen. Joudut muuttamaan slave-koneen /etc/hosts-tiedostoon oman master-koneesi ip-osoitteen. Graylog-koneeseen sinun ei tarvitse tehdä muutoksia.

Tämän jälkeen riittää, että otat yhteyttä slave-koneeseen komennolla

vagrant ssh vagrant01

Jotta saat koneet keskustelemaan keskenään, sinun pitää antaa slave-koneella komento

sudo puppet agent -t

Ja vastaavasti master-koneella annat komennon

sudo puppet cert --list

Jolloin näet slave koneelta tulleen pyynnön ja voit hyväksyä sen kirjoittamalla komennon

sudo puppet cert --sign vagrant01

HUOM! käytä siis tarkalleen list-komennossa näkyvää koneen nimeä, joka voi olla vagrant01.xx.xxxxxx.fi, riippuen missä verkossa olet.

Sitten vielä uudestaan slave-koneella komento

sudo puppet agent -t

ja slave aloittaa moduulien asentamisen ja terminaalissa pitäisi näkyä seuraavanlaisia rivejä

Info: Caching certificate for vagrant01
Info: Caching certificate_revocation_list for ca
Info: Caching certificate for vagrant01
Warning: Unable to fetch my node definition, but the agent run will continue:
Warning: undefined method `include?' for nil:NilClass
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for vagrant01
Info: Applying configuration version '1512982216'
Notice: /Stage[main]/Tshark/Package[tshark]/ensure: ensure changed 'purged' to 'present'
Notice: /Stage[main]/Suricata/Package[suricata]/ensure: ensure changed 'purged' to 'present'
Notice: /Stage[main]/Suricata/File[/etc/oinkmaster.conf]/content: 
--- /etc/oinkmaster.conf	2012-08-08 11:42:21.000000000 +0000
+++ /tmp/puppet-file20171211-13500-c8lm85	2017-12-11 08:50:39.905848280 +0000
@@ -62,9 +62,10 @@
 # Community rules and Snort 2.4.
 # url = http://www.snort.org/pub-bin/downloads.cgi/Download/comm_rules/Community-Rules-2.4.tar.gz
 
+
 # Community rules for snort-CURRENT
 # url = http://www.snort.org/pub-bin/downloads.cgi/Download/comm_rules/Community-Rules-CURRENT.tar.gz
-
+url=http://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz
 
 # Example for rules from the Emerging Threats site (previously known as Bleeding Snort).
 # url = http://www.emergingthreats.net/rules/emerging.rules.tar.gz

Info: Computing checksum on file /etc/oinkmaster.conf
Info: /Stage[main]/Suricata/File[/etc/oinkmaster.conf]: Filebucketed /etc/oinkmaster.conf to puppet with sum 83e30a3470945d928663ef574058274c
Notice: /Stage[main]/Suricata/File[/etc/oinkmaster.conf]/content: content changed '{md5}83e30a3470945d928663ef574058274c' to '{md5}3f8f8d0154c865aa65242f21af59bb09'
Info: /Stage[main]/Suricata/File[/etc/oinkmaster.conf]: Scheduling refresh of Service[suricata]
Notice: /Stage[main]/Suricata/File[/etc/suricata/suricata.yaml]/ensure: defined content as '{md5}a0916c399da4825f9c0e2b015ff095e0'
Info: /Stage[main]/Suricata/File[/etc/suricata/suricata.yaml]: Scheduling refresh of Service[suricata]
Notice: /Stage[main]/Suricata/Service[suricata]: Triggered 'refresh' from 2 events
Notice: /Stage[main]/Oinkmaster/Exec[run_my_script]/returns: executed successfully
Notice: /Stage[main]/Ngrep/Package[ngrep]/ensure: ensure changed 'purged' to 'present'
Info: Creating state file /var/lib/puppet/state/state.yaml
Notice: Finished catalog run in 33.69 seconds

Joukossa on kaksi varoitusta, mutta kaikki moduulit toimivat ongelmitta ja löysinkin tästä avoimen bugi-kirjauksen. Kyseiset varoitukset näkyvät vain ensimmäisessä ajossa.

Olen laittanut vagrant-slaven kyselemään masterilta 10 sekunnin välein mahdollisista muutoksista. Muuta tämä kohta slaven puppet.conf-tiedostosta, mikäli et halua sitä käyttää.

Puppetin masterin-konfiguraatiot tulevat tästä repositorystä. Puppet.conf-tiedostoon olen lisännyt [main]-osioon ordering=manifest, joka saa aikaan sen, että moduulit ajetaan juuri siinä järjestyksessä, missä ne ovat site.pp-tiedostossa. Host-tiedoston olen siistinyt.

Testaus

Tshark

Tsharkia voit testata yksinkertaisella komennolla, joka kertoo mitä eri verkko-adaptereita Tshark on havainnut, joita voidaan siis tutkia

sudo tshark -D

Tämän jälkeen tallenna lyhyt .pcap-tallenne valitsemastasi adapterista tiedostoon kymmenen sekunnin ajan komennolla

sudo tshark -i 1 -a duration:10 -w 10sek.pcap

Eli yllä oleva siis nauhoittaa adapterista 1 liikennettä 10 sekunnin ajan ja tallentaa sen tiedostoon nimeltä 10sek.pcap. Muista ensin luoda 10sek.pcap-tiedosto ja antaa kaikille luku-/kirjoitusoikeudet (tai aja komento sudo -i ja vasta sitten yllä oleva testi).

Ngrep

Ngrepiä voi testata yksinkertaisella komennolla, joka tutkii siis liikenteestä paketteja, joissa on HTTP-merkkijono

sudo ngrep -q 'HTTP'

Kuten aiemmin mainitsinkin, niin slavella on 10 sekunnin välein päivitys ja Suricatan säännöthän haetaan aina wgetillä, joten kymmenen sekunnin välein näkyy seuraavanlainen rivi

T 10.0.2.15:57512 -> 96.43.137.99:80 [AP]
  GET /open/suricata/emerging.rules.tar.gz HTTP/1.1..User-Agent: Wget/1.17.1 (linux-gnu)..Accept: */*..Accept-Encoding: identity..H
  ost: rules.emergingthreats.net..Connection: Keep-Alive....    

Eli olemme todentaneet, että Ngrep toimii.

Suricata

Suricata on IDS-työkalu, jonka voi laittaa toimimaan taustalle komennolla

sudo suricata -D --pidfile /var/run/suricata.pid -c /etc/suricata/suricata.yaml -i eth0

Suricata kuuntelee eth0:n kautta kulkevaa liikennettä ja kirjaa hälytyksen suricata.yaml-tiedostossa aktivoitujen sääntöjen mukaan. Näet seuraavanlaisen rivin, mikäli Suricata on käynnistynyt normaalisti

Initialization syslog logging with format "[%i] <%d> -- ".
10/12/2017 -- 17:38:53 - <Notice> - This is Suricata version 3.0 RELEASE

Suricata kirjoittaa tapahtumansa lokeihin, jotka sijaitsevat /etc/log/suricata-hakemistossa. Suricata kirjoittaa http.log-tiedostoon kaikki havaitsemansa http-liikenteen, joten lokilla näkyy myös sääntöjen päivitys, joka tapahtuu 10 sekunnin välein testiympäristössä. Lokia voi tutkailla komennolla

sudo less /var/log/suricata/http.log

Ja lokissa pitäisi näkyä seuraavanlainen rivi tai siis useampi

12/10/2017-17:47:08.254230 rules.emergingthreats.net [**] /open/suricata/emerging.rules.tar.gz [**] Wget/1.17.1 (linux-gnu) [**] 10.0.2.15:58130 -> 204.12.217.19:80

Ja sääntöjen aiheuttamat hälyt löytyvät komennolla

sudo less /var/log/suricata/eve.json

Lokin formaatti löytyy täältä.

Graylog

Graylogia voi testailla ja katsoa suoraan hostin kautta kirjoittamalla selaimeen

localhost:8080

Oletus käyttäjä salasana vagrant-boxisssa on admin/admin. Alla kuva sisäänkirjautumissivusta ja kirjautumisen jälkeen.

graylog

gettingstarted

Suricatan voi laittaa lähettämään lokit Graylogiin ja tähän löytyikin ohje, mutta ikävä kyllä taas Snortia varten, joten joudun yrittämään löytää suricata.yaml-tiedostosta vastaavat kohdat. Toistaiseksi en ikävä kyllä ole onnistunut saamaan lokinvälitystä toimimaan, joten se jäänee tekemättä tämän harjoituksen puitteissa. Toistailseksi en ole löytänyt hyvää ohjetta Suricatan lokien välittämiseen, mutta olen lukenut Suricatan ohjeista, että se on mahdollista. Tässä testiympäristössä olen ajatellut, että yksi vaihtoehto olisi antaa Graylogille paikallisverkkoon ip-osoite, lisäämällä se Graylogin Vagrantfileen esimerkiksi seuraavasti

config.vm.network "private_network", ip: "192.168.1.200"

ja sitten löytää kohta suricata.yaml-tiedostosta, jossa voisin kertoa, että tuonne haluan tiedostot siirtää. Sitten tietenkin on vielä Graylog, miten saan sinne sitten tiedostot näkymään, onkin toinen juttu. Mutta suunnitelma on, vaikka ei vielä olekaan toteutunut.