2. Elastic stack: analýza security logů. Logstash

2. Elastic stack: analýza security logů. Logstash

V minulosti článku seznámili jsme se s ELK stackem, z jakých softwarových produktů se skládá. A první úkol, se kterým se inženýr při práci s ELK stackem setkává, je odeslání logů pro uložení do Elasticsearch pro následnou analýzu. Avšak, to je jen na slovech jednoduché, Elasticsearch uchovává logy jako dokumenty s určitými poli a hodnotami, což znamená, že inženýr musí pomocí různých nástrojů zpracovat zprávu, která je odesílána z koncových systémů. To lze provést několika způsoby – napsat program, který pomocí API přidává dokumenty do databáze, nebo použít již hotová řešení. V rámci tohoto kurzu budeme zvažovat řešení Logstash, které je součástí ELK stacku. Podíváme se, jak lze odeslat logy z koncových systémů do Logstash a poté nastavíme konfigurační soubor pro zpracování a přesměrování do databáze Elasticsearch. Jako vstupní systém bereme logy z firewallu Check Point.

V rámci kurzu nebude probírána instalace ELK stacku, protože existuje obrovské množství článků na toto téma, budeme se zaměřovat na konfiguraci.

Sestavíme plán akcí pro konfiguraci Logstash:

  1. Ověření, že Elasticsearch bude přijímat logy (kontrola funkčnosti a dostupnosti portu).
  2. Zvažujeme, jakým způsobem můžeme odeslat události do Logstash, vybereme metodu a realizujeme ji.
  3. Nastavujeme Input v konfiguračním souboru Logstash.
  4. Nastavujeme Output v konfiguračním souboru Logstash v režimu debug, abychom pochopili, jak vypadá log zpráva.
  5. Nastavujeme Filter.
  6. Nastavujeme správný Output v Elasticsearch.
  7. Spouštíme Logstash.
  8. Kontrolujeme logy v Kibana.

Podíváme se podrobněji na každý bod:

Ověření, že Elasticsearch bude přijímat logy

K tomu můžeme zkontrolovat příkazem curl přístup do Elasticsearch ze systému, na kterém je nasazen Logstash. Pokud máte nastavenu autentifikaci, pak také prostřednictvím curl přidáme uživatelské jméno/a heslo, uvádíme port 9200, pokud jste ho neměnili. Pokud přijde odpověď podobná níže uvedené, znamená to, že je vše v pořádku.

[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" : "You Know, for Search"
}
[elastic@elasticsearch ~]$

Pokud odpověď nedorazí, může být několik typů chyb: elastický proces nefunguje, je uveden nesprávný port nebo je port zablokován firewallem na serveru, kde běží Elasticsearch.

Podíváme se, jak můžeme posílat logy do Logstash přes firewall Check Point.

Z Management Serveru Check Point lze posílat logy do Logstash přes syslog, pomocí nástroje log_exporter, podrobněji si o něm můžete přečíst zde. článku, zde uvedeme jen příkaz, který vytváří tok:

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

<> — adresa serveru, na kterém běží Logstash, target-port 5555 — port, na který budeme posílat logy, odesílání logů přes tcp může zatížit server, proto v některých případech je lepší nastavit tcp.

Nastavujeme INPUT v konfiguračním souboru Logstash.

2. Elastic stack: analýza security logů. Logstash

Konfigurační soubor se standardně nachází v adresáři /etc/logstash/conf.d/. Konfigurační soubor se skládá ze 3 logických částí: INPUT, FILTER, OUTPUT. V INPUT uvádíme, odkud si systém vezme logy, v FILTER parsujeme log — nastavujeme jak rozdělit zprávu na pole a hodnoty, v OUTPUT nastavujeme výstupní tok — kam budou odesílány zpracované logy.

Nejprve nastavíme INPUT, podíváme se na některé typy, které mohou být — file, tcp a exe.

TCP:

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

mode => „server“
Označuje, že Logstash přijímá spojení.

port => 5555
host => "10.10.1.205"
Přijímáme spojení na IP adrese 10.10.1.205 (Logstash), port 5555 — port by měl být povolen politikou firewallu.

type => „checkpoint“
Označujeme dokument, což je velmi užitečné, pokud máte více příchozích spojení. V budoucnu pro každé spojení lze napsat vlastní filtr pomocí logické konstrukce if.

File:

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

Popis nastavení:
path => "/var/log/openvas_report/*"
Uveďte adresář, ze kterého je třeba načíst soubory.

type => "openvas"
Typ události.

start_position => "beginning"
Při změně souboru se načte celý soubor. Pokud nastavíte "end", systém čeká na nové záznamy na konci souboru.

Exec:

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

Tento vstup spouští (pouze!) shell příkaz a jeho výstup je obalen do log zprávy.

command => "ls -alh"
Příkaz, jehož výstup nás zajímá.

interval => 30
Interval spuštění příkazu v sekundách.

Abychom mohli přijímat logy z firewallu, nastavíme filtr tcp nebo udp, v závislosti na tom, jak jsou logy odesílány do Logstash.

Nastavujeme Output v konfiguračním souboru Logstash v režimu ladění, abychom pochopili, jak vypadá log zpráva.

Poté, co jsme nakonfigurovali INPUT, musíme pochopit, jak bude log zpráva vypadat, jaké metody je třeba použít pro nastavení filtru (parzera) logů.

K tomu použijeme filtr, který vydává výstup do stdout, abychom si prohlédli původní zprávu. Celý konfigurační soubor bude v tuto chvíli vypadat takto:

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

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

Spouštíme příkaz pro kontrolu:
sudo /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/checkpoint.conf
Vidíme výsledek, obrázek je klikací:

2. Elastic stack: analýza security logů. Logstash

Pokud to zkopírujete, bude to vypadat takto:

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,"

Při pohledu na tato oznámení chápeme, že logy mají formát: pole = hodnota nebo klíč = hodnota, což znamená, že se hodí filtr, který se nazývá kv. Abychom správně vybrali filtr pro každý konkrétní případ, bylo by dobré se s nimi seznámit v technické dokumentaci nebo sezeptat přítele.

Nastavujeme filtr

V předchozím kroku jsme zvolili kv, níže je uvedena konfigurace tohoto filtru:

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

Vyberáme symbol, podle kterého budeme oddělovat pole a hodnotu — "=". Pokud máme v logu stejné záznamy, uchováváme v databázi pouze jeden exemplář, jinak byste měli pole se stejnými hodnotami, což znamená, že pokud máme zprávu „foo = some foo=some“, zapíšeme pouze foo = some.

Nastavujeme správný výstup do ElasticSearch

Jakmile je filtr nastaven, můžete vyvážet logy do databáze elasticsearch:

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

Pokud je dokument podepsán typem checkpoint, ukládáme událost do databáze elasticsearch, která standardně přijímá připojení na 10.10.1.200 na portu 9200. Každý dokument je ukládán do určitého indexu, v tomto případě ukládáme do indexu „checkpoint-” + aktuální časové datum. Každý index může mít určitou sadu polí, nebo je vytvořen automaticky při výskytu nového pole ve zprávě, nastavení polí a jejich typ lze zkontrolovat v mappings.

Pokud máte nastavenou autentizaci (probereme později), musíte uvést údaje pro zápis do konkrétního indexu, v tomto příkladu je to „tssolution“ s heslem „cool“. Můžete omezit práva uživatelů pro zápis logů pouze do určitého indexu a žádného dalšího.

Spouštíme Logstash.

Konfigurační soubor 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"
  	}
}
}

Kontrolujeme konfigurační soubor na správnost sestavení:
/usr/share/logstash/bin//logstash -f checkpoint.conf
2. Elastic stack: analýza security logů. Logstash

Spouštíme proces Logstash:
sudo systemctl start logstash

Kontrolujeme, že proces byl spuštěn:
sudo systemctl status logstash

2. Elastic stack: analýza security logů. Logstash

Kontrolujeme, zda se socket zvedl:
netstat -nat |grep 5555

2. Elastic stack: analýza security logů. Logstash

Kontrolujeme logy v Kibana.

Poté, co je vše spuštěno, přejdeme do Kibana — Discover a ujistíme se, že je vše správně nastaveno, obrázek je klikací!

2. Elastic stack: analýza security logů. Logstash

Všechny logy jsou na místě a můžeme vidět všechna pole a jejich hodnoty!

Závěr

Prozkoumali jsme, jak napsat konfigurační soubor Logstash, a výsledek byl parser všech polí a hodnot. Nyní můžeme pracovat s vyhledáváním a sestavováním grafů podle určitých polí. V dalším kurzu se podíváme na vizualizaci v Kibana a vytvoříme jednoduchý dashboard. Je třeba zmínit, že konfigurační soubor Logstash je potřeba průběžně doplňovat v určitých situacích, například když chceme změnit hodnotu pole z čísla na slovo. V následujících článcích to budeme dělat pravidelně.

Tak sledujte aktualizace (Telegram, Facebook, VK, TS Solution Blog), Yandex.Zen.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster