2. Elasztikus köteg: biztonsági naplók elemzése. Logstash

2. Elasztikus köteg: biztonsági naplók elemzése. Logstash

Az utolsóban cikk találkoztunk ELK verem, milyen szoftvertermékekből áll. Az első feladat, amellyel a mérnöknek szembe kell néznie az ELK-verem használata során, hogy naplókat küldjön tárolásra az elasticsearch-ben későbbi elemzés céljából. Ez azonban csak szóbeszéd, az elasticsearch a naplókat dokumentumok formájában tárolja bizonyos mezőkkel és értékekkel, ami azt jelenti, hogy a mérnöknek különféle eszközökkel kell elemeznie a végrendszerekből küldött üzenetet. Ez többféleképpen is megtehető - írjon saját maga egy programot, amely az API segítségével dokumentumokat ad hozzá az adatbázishoz, vagy kész megoldásokat használ. Ezen a tanfolyamon megfontoljuk a megoldást Logstash, amely az ELK verem része. Megvizsgáljuk, hogyan küldhetünk naplókat a végpontrendszerekből a Logstashba, majd beállítunk egy konfigurációs fájlt, amely elemzi és átirányítja az Elasticsearch adatbázisba. Ehhez a Check Point tűzfaláról bejövő rendszerként naplókat veszünk.

A kurzus nem terjed ki az ELK verem telepítésére, mivel rengeteg cikk létezik ebben a témában, figyelembe vesszük a konfigurációs komponenst.

Készítsünk cselekvési tervet a Logstash konfigurációjához:

  1. Annak ellenőrzése, hogy az elasticsearch elfogadja-e a naplókat (a port működőképességének és nyitottságának ellenőrzése).
  2. Megfontoljuk, hogyan küldhetünk eseményeket a Logstash-nak, kiválasztunk egy módszert és azt implementáljuk.
  3. A Logstash konfigurációs fájlban konfiguráljuk a bemenetet.
  4. Beállítjuk a kimenetet a Logstash konfigurációs fájlban hibakeresési módban, hogy megértsük, hogyan néz ki a naplóüzenet.
  5. Szűrő beállítása.
  6. A megfelelő kimenet beállítása az ElasticSearch-ben.
  7. Elindul a Logstash.
  8. A naplók ellenőrzése Kibanában.

Nézzük meg részletesebben az egyes pontokat:

Annak ellenőrzése, hogy az elasticsearch elfogadja-e a naplókat

Ehhez a curl paranccsal ellenőrizheti az Elasticsearch elérését abból a rendszerből, amelyen a Logstash telepítve van. Ha beállította a hitelesítést, akkor a felhasználót/jelszót curl-en keresztül is továbbítjuk, megadva a 9200-as portot, ha nem változtatta meg. Ha az alábbihoz hasonló választ kap, akkor minden rendben van.

[elastic@elasticsearch ~]$ curl -u <<user_name>> : <<password>> -sS -XGET "<<ip_address_elasticsearch>>: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 ~]$

Ha nem érkezik meg a válasz, akkor többféle hiba is előfordulhat: az elasticsearch folyamat nem fut, rossz port van megadva, vagy a portot blokkolja egy tűzfal azon a szerveren, amelyre az elasticsearch telepítve van.

Nézzük meg, hogyan küldhet naplókat a Logstashnak egy ellenőrzőponti tűzfalról

A Check Point felügyeleti szerverről a log_exporter segédprogrammal syslogon keresztül küldhet naplókat a Logstashnak, erről itt olvashat bővebben cikk, itt csak az adatfolyamot létrehozó parancsot hagyjuk meg:

cp_log_export add name check_point_syslog target-server < > target-port 5555 protokoll tcp formátum általános olvasási mód félig egységes

< > - a szerver címe, amin a Logstash fut, cél-port 5555 - port, amelyre a naplókat küldjük, a naplók tcp-n keresztüli küldése terhelheti a szervert, így bizonyos esetekben helyesebb az udp használata.

Az INPUT beállítása a Logstash konfigurációs fájlban

2. Elasztikus köteg: biztonsági naplók elemzése. Logstash

Alapértelmezés szerint a konfigurációs fájl az /etc/logstash/conf.d/ könyvtárban található. A konfigurációs fájl 3 értelmes részből áll: INPUT, FILTER, OUTPUT. BAN BEN INPUT jelezzük, hogy a rendszer honnan veszi a naplókat FILTER a napló elemzése – állítsa be, hogyan osztja fel az üzenetet mezőkre és értékekre KIMENET konfiguráljuk a kimeneti adatfolyamot - ahová az elemzett naplók elküldésre kerülnek.

Először is állítsuk be az INPUT-ot, vegyük figyelembe a lehetséges típusokat: file, tcp és exe.

TCP:

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

mód => "szerver"
Azt jelzi, hogy a Logstash fogad kapcsolatokat.

port => 5555
host => "10.10.1.205"
A 10.10.1.205 (Logstash) IP-címen, az 5555-ös porton keresztül fogadunk kapcsolatokat – a portot engedélyezni kell a tűzfalszabályzatnak.

type => "checkpoint"
Megjelöljük a dokumentumot, nagyon kényelmes, ha több bejövő kapcsolata van. Ezt követően minden kapcsolathoz saját szűrőt írhat a logikai if konstrukció segítségével.

fájl:

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

A beállítások leírása:
elérési út => "/var/log/openvas_report/*"
Megjelöljük azt a könyvtárat, amelyben a fájlokat be kell olvasni.

type => "openvas"
Esemény típus.

start_position => "kezdet"
Fájl megváltoztatásakor a teljes fájlt beolvassa, ha az „end” beállítást választja, a rendszer megvárja, amíg új rekordok jelennek meg a fájl végén.

Végrehajtó:

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

Ezzel a bemenettel egy (csak!) shell parancs indul, és a kimenete naplóüzenetté alakul.

parancs => "ls -alh"
A parancs, amelynek kimenete érdekel minket.

intervallum => 30
Parancshívási intervallum másodpercben.

A tűzfal naplóinak fogadása érdekében szűrőt regisztrálunk tcp vagy udp, attól függően, hogy a naplók hogyan kerülnek a Logstashba.

Beállítjuk a kimenetet a Logstash konfigurációs fájlban hibakeresési módban, hogy megértsük, hogyan néz ki a naplóüzenet

Az INPUT konfigurálása után meg kell értenünk, hogyan fog kinézni a naplóüzenet, és milyen módszereket kell használni a naplószűrő (elemző) konfigurálásához.

Ehhez egy szűrőt fogunk használni, amely az eredményt az stdout-ba adja, hogy megtekinthesse az eredeti üzenetet; a teljes konfigurációs fájl jelenleg így fog kinézni:

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

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

Futtassa a parancsot az ellenőrzéshez:
sudo /usr/share/logstash/bin//logstash -f /etc/logstash/conf.d/checkpoint.conf
Az eredményt látjuk, a kép kattintható:

2. Elasztikus köteg: biztonsági naplók elemzése. Logstash

Ha átmásolod, így fog kinézni:

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="[email protected]" 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,

Ezeket az üzeneteket tekintve megértjük, hogy a naplók formátuma: mező = érték vagy kulcs = érték, ami azt jelenti, hogy a kv nevű szűrő alkalmas. Az egyes esetekhez megfelelő szűrő kiválasztásához érdemes lenne megismerkedni velük a műszaki dokumentációban, vagy megkérdezni egy barátot.

Szűrő beállítása

Az utolsó szakaszban a kv-t választottuk, ennek a szűrőnek a konfigurációja az alábbiakban látható:

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

Kiválasztjuk a szimbólumot, amellyel elosztjuk a mezőt és az értéket - „=”. Ha azonos bejegyzéseink vannak a naplóban, akkor csak egy példányt mentünk el az adatbázisban, ellenkező esetben azonos értékekből álló tömböt kapunk, vagyis ha a „foo = some foo=some” üzenetünk van, akkor csak foo-t írunk. = néhány.

A megfelelő kimenet beállítása az ElasticSearch-ben

A szűrő konfigurálása után naplókat tölthet fel az adatbázisba elasticsearch:

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

Ha a dokumentum ellenőrzési pont típussal van aláírva, akkor az eseményt elmentjük az elasticsearch adatbázisba, amely alapértelmezés szerint a 10.10.1.200-as porton fogadja a 9200-as kapcsolatokat. Minden dokumentum egy adott indexbe kerül, ebben az esetben a „checkpoint-” + aktuális dátum indexbe mentjük. Minden index rendelkezhet meghatározott mezőkészlettel, vagy automatikusan létrejön, amikor új mező jelenik meg egy üzenetben, a mezőbeállítások és típusuk a leképezésekben tekinthetők meg.

Ha beállította a hitelesítést (később megnézzük), meg kell adni a hitelesítő adatokat egy adott indexbe való íráshoz, ebben a példában ez a „tssolution” „cool” jelszóval. Megkülönböztetheti a felhasználói jogokat, hogy a naplókat csak egy adott indexre írják, és nem többet.

Indítsa el a Logstash programot.

Logstash konfigurációs fájl:

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

Ellenőrizzük a konfigurációs fájl helyességét:
/usr/share/logstash/bin//logstash -f checkpoint.conf
2. Elasztikus köteg: biztonsági naplók elemzése. Logstash

Indítsa el a Logstash folyamatot:
sudo systemctl indítsa el a logstash -t

Ellenőrizzük, hogy a folyamat elindult:
sudo systemctl állapot logstash

2. Elasztikus köteg: biztonsági naplók elemzése. Logstash

Ellenőrizzük, hogy az aljzat fent van-e:
netstat -nat |grep 5555

2. Elasztikus köteg: biztonsági naplók elemzése. Logstash

A naplók ellenőrzése Kibanában.

Miután minden fut, menjen a Kibana - Discover oldalra, győződjön meg arról, hogy minden megfelelően van beállítva, a kép kattintható!

2. Elasztikus köteg: biztonsági naplók elemzése. Logstash

Minden napló a helyén van, és láthatjuk az összes mezőt és azok értékét!

Következtetés

Megnéztük, hogyan írhatunk egy Logstash konfigurációs fájlt, és ennek eredményeként kaptunk egy elemzőt az összes mezőből és értékből. Most már dolgozhatunk meghatározott mezők keresésével és ábrázolásával. A kurzus következő részében a Kibana vizualizációját nézzük meg, és egy egyszerű irányítópultot készítünk. Érdemes megemlíteni, hogy a Logstash konfigurációs fájlt bizonyos helyzetekben folyamatosan frissíteni kell, például amikor egy mező értékét számról szóra akarjuk cserélni. A következő cikkekben folyamatosan ezt fogjuk tenni.

Szóval maradj velünkTelegram, Facebook, VK, TS Solution Blog), Yandex Zen.

Forrás: will.com

Hozzászólás