2. Elastic stack: analiza security logova. Logstash.

2. Elastic stack: analiza security logova. Logstash.

U prošloj članku Upoznali smo se s ELK stakom, iz kojih se sastoji. Prvi izazov s kojim se inženjer suočava prilikom rada s ELK stakom je slanje logova na pohranu u Elasticsearch za naknadnu analizu. Međutim, to je jednostavno u teoriji, Elasticsearch pohranjuje logove u obliku dokumenata s određenim poljima i vrijednostima, što znači da inženjer mora koristiti razne alate za parsiranje poruke koja se šalje iz krajnjih sustava. To se može učiniti na nekoliko načina: sami napisati program koji će putem API-ja dodavati dokumente u bazu ili koristiti već gotova rješenja. U okviru ovog tečaja razmatrat ćemo rješenje Logstash, koje je dio ELK staka. Pogledat ćemo kako možemo slati logove iz krajnjih sustava u Logstash, a zatim ćemo konfigurirati konfiguracijski datoteku za parsiranje i preusmjeravanje u Elasticsearch bazu podataka. Za to uzimamo logove s Check Point vatrozida kao ulazni sustav.

Ovaj tečaj ne pokriva instalaciju ELK staka, jer postoji ogromna količina članaka na tu temu, a mi ćemo razmatrati konfiguracijsku komponentu.

Sastavit ćemo plan akcije za konfiguraciju Logstasha:

  1. Provjera da li će Elasticsearch primati logove (provjera funkcionalnosti i dostupnosti porta).
  2. Razmatramo kako možemo slati događaje u Logstash, biramo metodu, realiziramo.
  3. Konfiguriramo Input u konfiguracijskoj datoteci Logstasha.
  4. Konfiguriramo Output u konfiguracijskoj datoteci Logstasha u debug modu, kako bismo shvatili kako izgleda log poruka.
  5. Konfiguriramo Filter.
  6. Konfiguriramo ispravni Output u Elasticsearch.
  7. Pokrećemo Logstash.
  8. Provjeravamo logove u Kibani.

Detaljnije razmatramo svaku stavku:

Provjera da li će Elasticsearch primati logove

Za to možemo provjeriti dostupnost u Elasticsearchu iz sustava na kojem je postavljen Logstash pomoću naredbe curl. Ako ste postavili autentifikaciju, tada putem curla također šaljemo korisničko/lozinku i navodimo port 9200 ako ga niste mijenjali. Ako stigne odgovor poput onog koji je naveden u nastavku, znači da je sve u redu.

[elastic@elasticsearch ~]$ curl -u <> : <> -sS -XGET "<>:9200"
{
  "name" : "elastic-1",
  "cluster_name" : "project",
  "cluster_uuid" : "sQzjTTuCR8q4ZO6DrEis0A",
  "version" : {
    "number" : "7.4.1",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "fc0eeb6e2c25915d63d871d344e3d0b45ea0ea1e",
    "build_date" : "2019-10-22T17:16:35.176724Z",
    "build_snapshot" : false,
    "lucene_version" : "8.2.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "Znate, za pretraživanje"
}
[elastic@elasticsearch ~]$

Ako odgovor nije stigao, može biti nekoliko vrsta grešaka: proces elasticsearch ne radi, port nije ispravan, ili je port blokiran vatrozidom na serveru gdje je instaliran elasticsearch.

Razmatramo kako poslati logove u Logstash s vatrozida Check Point.

S Check Point management serverom možete slati logove u Logstash preko sysloga, koristeći alat log_exporter, više detalja dostupno je ovdje. članku, ovdje ćemo ostaviti samo naredbu koja stvara tok:

cp_log_export add name check_point_syslog target-server <> target-port 5555 protocol tcp format generic read-mode semi-unified

<> — adresa servera na kojem radi Logstash, target-port 5555 — port na koji ćemo slati logove, slanje logova preko tcp može opteretiti server, stoga je u nekim slučajevima bolje koristiti udp.

Postavljamo INPUT u konfiguracijskoj datoteci Logstash.

2. Elastic stack: analiza security logova. Logstash.

Zadana konfiguracijska datoteka nalazi se u direktoriju /etc/logstash/conf.d/. Konfiguracijska datoteka sastoji se od tri smislene komponente: INPUT, FILTER, OUTPUT. U INPUT navodimo odakle sustav treba uzimati logove, u FILTER parsiramo log — postavljamo način dijeljenja poruke na polja i vrijednosti, u OUTPUT konfiguriramo izlazni tok — gdje će obrađeni logovi biti slani.

Prvo ćemo postaviti INPUT, razmotriti nekoliko tipova koji mogu biti — file, tcp i exe.

Tcp:

input {
tcp {
    port => 5555
    host => "10.10.1.205"
    type => "checkpoint"
    mode => "server"
}
}

mode => «server»
Ovo označava da Logstash prihvaća veze.

port => 5555
host => "10.10.1.205"
Prihvaćamo veze na IP adresi 10.10.1.205 (Logstash), port 5555 — port mora biti dopušten politikom vatrozida.

type => «checkpoint»
Označavamo dokument, što je vrlo korisno u slučaju kada imate više dolaznih veza. Kasnije za svaku vezu možete napisati svoj filtar koristeći logičku konstrukciju if.

File:

input {
  file {
    path => "/var/log/openvas_report/*"
    type => "openvas"
    start_position => "beginning"
    }
}

Opis postavki:
path => "/var/log/openvas_report/*"
Odredite direktorij u kojem se nalaze datoteke koje treba pročitati.

type => "openvas"
Tip događaja.

start_position => "početak"
Pri promjeni datoteke, cijela se datoteka učitava, a ako se postavi "kraj", sustav čeka pojavu novih zapisa na kraju datoteke.

Exec:

input {
  exec {
    command => "ls -alh"
    interval => 30
  }
}

Ovaj ulaz pokreće (samo!) shell naredbu i njezin izlaz obavija u log poruku.

command => "ls -alh"
Naredba čiji nas izlaz zanima.

interval => 30
Interval poziva naredbe u sekundama.

Da bismo primili logove s vatrozida, postavljamo filtar tcp ili udp, ovisno o tome kako se logovi šalju u Logstash.

Postavljamo Output u konfiguracijskoj datoteci Logstash u debug modu kako bismo razumjeli kako izgleda log poruka.

Nakon što smo configurirali INPUT, trebamo razumjeti kako će izgledati log poruka i koje metode trebamo koristiti za konfiguraciju filtra (parsera) logova.

Za to ćemo koristiti filtar koji daje rezultat u stdout kako bismo pregledali izvornu poruku, cijela konfiguracijska datoteka u ovom trenutku izgledat će ovako:

input 
{
         tcp 
         {
                port => 5555
  	  	type => "checkpoint"
    		mode => "server"
                host => "10.10.1.205"
   	 }
}

output 
{
	if [type] == "checkpoint" 
       {
		stdout { codec=> json }
	}
}

Pokrećemo naredbu za provjeru:
sudo /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/checkpoint.conf
Vidimo rezultat, slika je klikabilna:

2. Elastic stack: analiza security logova. Logstash.

Ako kopirate, izgledat će ovako:

action="Accept" conn_direction="Internal" contextnum="1" ifdir="outbound" ifname="bond1.101" logid="0" loguid="{0x5dfb8c13,0x5,0xfe0a0a0a,0xc0000000}" origin="10.10.10.254" originsicname="CN=ts-spb-cpgw-01,O=cp-spb-mgmt-01.tssolution.local.kncafb" sequencenum="8" time="1576766483" version="5" context_num="1" dst="10.10.10.10" dst_machine_name="ts-spb-dc-01@tssolution.local" layer_name="TSS-Standard Security" layer_name="TSS-Standard Application" layer_uuid="dae7f01c-4c98-4c3a-a643-bfbb8fcf40f0" layer_uuid="dbee3718-cf2f-4de0-8681-529cb75be9a6" match_id="8" match_id="33554431" parent_rule="0" parent_rule="0" rule_action="Accept" rule_action="Accept" rule_name="Implicit Cleanup" rule_uid="6dc2396f-9644-4546-8f32-95d98a3344e6" product="VPN-1 & FireWall-1" proto="17" s_port="37317" service="53" service_id="domain-udp" src="10.10.1.180" ","type":"qqqqq","host":"10.10.10.250","@version":"1","port":50620}{"@timestamp":"2019-12-19T14:50:12.153Z","message":"time="1576766483" action="Accept" conn_direction="Internal" contextnum="1" ifdir="outbound" ifname="bond1.101" logid="0" loguid="{0x5dfb8c13,

Gledajući ove poruke, shvaćamo da logovi imaju oblik: polje = vrijednost ili ključ = vrijednost, pa stoga odgovara filtru koji se zove kv. Da bismo ispravno odabrali filtar za svaku konkretnu situaciju, bilo bi korisno upoznati se s njima u tehničkoj dokumentaciji ili pitati prijatelja.

Postavljamo Filter

Na prethodnom koraku odabrali smo kv, dalje je prikazana konfiguracija ovog filtra:

filter {
if [type] == "checkpoint"{
	kv {
		value_split => "="
		allow_duplicate_values => false
	}
}
}

Biramo simbol po kojem ćemo dijeliti polje i vrijednost — “=”. Ako imamo iste zapise u logu, čuvamo samo jedan primjerak u bazi, inače ćemo imati niz istih vrijednosti, to jest, ako imamo poruku “foo = some foo=some” zapisujemo samo foo = some.

Postavljamo ispravan Output u ElasticSearch

Nakon što je Filter postavljen, možemo izvoziti logove u bazu elasticsearch:

output 
{
if [type] == "checkpoint"
{
 	elasticsearch 
        {
		hosts => ["10.10.1.200:9200"]
		index => "checkpoint-%{+YYYY.MM.dd}"
    		user => "tssolution"
    		password => "cool"
  	}
}
}

Ako je dokument potpisan tipom checkpoint, čuvamo događaj u bazi elasticsearch, koja prihvaća veze na 10.10.1.200 na portu 9200 po defaultu. Svaki dokument se čuva u određenom indeksu, u ovom slučaju čuvamo u indeks „checkpoint-” + trenutni datum. Svaki indeks može imati određeni skup polja, ili se automatski stvara pri pojavi novog polja u poruci, postavke polja i njihov tip možete pogledati u mappings.

Ako imate postavljenu autentifikaciju (o kojoj ćemo razgovarati kasnije), obavezno morate navesti akreditive za zapis u konkretni indeks, u ovom primjeru to je „tssolution” s lozinkom „cool”. Može se ograničiti prava korisnika za zapis logova samo u određeni indeks i nijedan drugi.

Pokrećemo Logstash.

Konfiguracijska datoteka Logstash:

input 
{
         tcp 
         {
                port => 5555
  	  	type => "checkpoint"
    		mode => "server"
                host => “10.10.1.205”
   	 }
}

filter {
        if [type] == "checkpoint"{
	kv {
		value_split => "="
		allow_duplicate_values => false
	}
        }
}

output 
{
if [type] == "checkpoint"
{
 	elasticsearch 
        {
		hosts => ["10.10.1.200:9200"]
		index => "checkpoint-%{+YYYY.MM.dd}"
    		user => "tssolution"
    		password => "cool"
  	}
}
}

Provjeravamo konfiguracijsku datoteku na ispravnost sastavljanja:
/usr/share/logstash/bin//logstash -f checkpoint.conf
2. Elastic stack: analiza security logova. Logstash.

Pokrećemo proces Logstash:
sudo systemctl start logstash

Provjeravamo je li proces pokrenut:
sudo systemctl status logstash

2. Elastic stack: analiza security logova. Logstash.

Provjeravamo je li otvoren socket:
netstat -nat |grep 5555

2. Elastic stack: analiza security logova. Logstash.

Provjeravamo logove u Kibani.

Nakon što je sve pokrenuto, idemo na Kibanu — Discover, uvjeravamo se da je sve pravilno postavljeno, slika je interaktivna!

2. Elastic stack: analiza security logova. Logstash.

Svi logovi su na svom mjestu i možemo vidjeti sva polja i njihove vrijednosti!

Zaključak

Razmotrili smo kako pisati konfiguracijski datoteku Logstash, kao rezultat smo dobili parser svih polja i vrijednosti. Sada možemo raditi s pretragom i izradom grafova za određena polja. U nastavku tečaja razmotrit ćemo vizualizaciju u Kibani, stvorit ćemo jednostavnu nadzornu ploču. Treba napomenuti da se konfiguracijska datoteka Logstash mora stalno dopisivati u određenim situacijama, na primjer, kada želimo zamijeniti vrijednost polja s broja na riječ. U budućim člancima to ćemo stalno raditi.

Stoga pratite novosti (Telegram, Facebook, VK, TS Solution Blog), Yandex.Zen.

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster