2. Elastisk stak: analyse af sikkerhedslogfiler. Logstash

2. Elastisk stak: analyse af sikkerhedslogfiler. Logstash

I fortiden artiklen vi mødtes ELK stak, hvilke softwareprodukter den består af. Og den første opgave, en ingeniør står over for, når han arbejder med ELK-stakken, er at sende logfiler til opbevaring i elastisk søgning til efterfølgende analyse. Dette er dog kun mundbeviselse, elasticsearch gemmer logs i form af dokumenter med bestemte felter og værdier, hvilket betyder, at ingeniøren skal bruge forskellige værktøjer til at parse den besked, der sendes fra slutsystemerne. Dette kan gøres på flere måder - skriv selv et program, der tilføjer dokumenter til databasen ved hjælp af API'et, eller brug færdige løsninger. På dette kursus vil vi overveje løsningen Logstash, som er en del af ELK-stakken. Vi vil se på, hvordan vi kan sende logfiler fra slutpunktsystemer til Logstash, og derefter opsætter vi en konfigurationsfil til at parse og omdirigere til Elasticsearch-databasen. For at gøre dette tager vi logfiler fra Check Point firewallen som det indgående system.

Kurset dækker ikke installationen af ​​ELK stack, da der er et stort antal artikler om dette emne; vi vil overveje konfigurationskomponenten.

Lad os udarbejde en handlingsplan for Logstash-konfiguration:

  1. Kontrollerer, at elasticsearch vil acceptere logfiler (kontrollerer portens funktionalitet og åbenhed).
  2. Vi overvejer, hvordan vi kan sende begivenheder til Logstash, vælge en metode og implementere den.
  3. Vi konfigurerer Input i Logstash-konfigurationsfilen.
  4. Vi konfigurerer Output i Logstash-konfigurationsfilen i debug-tilstand for at forstå, hvordan logmeddelelsen ser ud.
  5. Opsætning af filter.
  6. Opsætning af det korrekte output i ElasticSearch.
  7. Logstash lanceres.
  8. Tjek logfilerne i Kibana.

Lad os se på hvert punkt mere detaljeret:

Kontrollerer, at elasticsearch vil acceptere logfiler

For at gøre dette kan du bruge curl-kommandoen til at kontrollere adgangen til Elasticsearch fra det system, som Logstash er installeret på. Hvis du har konfigureret autentificering, så overfører vi også bruger/adgangskode via curl, med angivelse af port 9200, hvis du ikke har ændret det. Hvis du modtager et svar svarende til nedenstående, så er alt i orden.

[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 ~]$

Hvis svaret ikke modtages, kan der være flere typer fejl: elasticsearch-processen kører ikke, den forkerte port er angivet, eller porten er blokeret af en firewall på serveren, hvor elasticsearch er installeret.

Lad os se på, hvordan du kan sende logfiler til Logstash fra en kontrolpunkts firewall

Fra Check Point management server kan du sende logs til Logstash via syslog ved hjælp af log_exporter værktøjet, du kan læse mere om det her artiklen, her vil vi kun lade den kommando, der opretter strømmen:

cp_log_export tilføje navn check_point_syslog target-server < > target-port 5555 protokol tcp format generisk læse-tilstand semi-unified

< > - adresse på serveren som Logstash kører på, target-port 5555 - port som vi sender logs til, at sende logs via tcp kan indlæse serveren, så i nogle tilfælde er det mere korrekt at bruge udp.

Opsætning af INPUT i Logstash-konfigurationsfilen

2. Elastisk stak: analyse af sikkerhedslogfiler. Logstash

Som standard er konfigurationsfilen placeret i mappen /etc/logstash/conf.d/. Konfigurationsfilen består af 3 meningsfulde dele: INPUT, FILTER, OUTPUT. I INPUT vi angiver, hvor systemet vil tage logs fra, i FILTER parse loggen - opsæt hvordan beskeden opdeles i felter og værdier, i PRODUKTION vi konfigurerer outputstrømmen - hvor de parsede logfiler vil blive sendt.

Lad os først konfigurere INPUT, overveje nogle af de typer, der kan være - fil, tcp og exe.

TCP:

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

mode => "server"
Indikerer, at Logstash accepterer forbindelser.

port => 5555
vært => "10.10.1.205"
Vi accepterer forbindelser via IP-adresse 10.10.1.205 (Logstash), port 5555 - porten skal tillades af firewall-politikken.

skriv => "kontrolpunkt"
Vi markerer dokumentet, meget praktisk, hvis du har flere indgående forbindelser. Efterfølgende kan du for hver forbindelse skrive dit eget filter ved hjælp af den logiske if-konstruktion.

File:

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

Beskrivelse af indstillinger:
sti => "/var/log/openvas_report/*"
Vi angiver den mappe, hvori filerne skal læses.

skriv => "openvas"
Begivenhedstype.

start_position => "begyndelse"
Når du ændrer en fil, læser den hele filen; hvis du indstiller "slut", venter systemet på, at nye poster vises i slutningen af ​​filen.

Exec:

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

Ved at bruge dette input startes en (kun!) shell-kommando, og dens output omdannes til en logmeddelelse.

kommando => "ls -alh"
Kommandoen hvis output vi er interesserede i.

interval => 30
Kommandoopkaldsinterval i sekunder.

For at modtage logfiler fra firewallen, registrerer vi et filter tcp eller uDP, afhængigt af hvordan logfilerne sendes til Logstash.

Vi konfigurerer Output i Logstash-konfigurationsfilen i debug-tilstand for at forstå, hvordan logmeddelelsen ser ud

Efter vi har konfigureret INPUT, skal vi forstå, hvordan logmeddelelsen vil se ud, og hvilke metoder der skal bruges til at konfigurere logfilteret (parseren).

For at gøre dette vil vi bruge et filter, der udsender resultatet til stdout for at se den originale besked; den komplette konfigurationsfil i øjeblikket vil se sådan ud:

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

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

Kør kommandoen for at kontrollere:
sudo /usr/share/logstash/bin//logstash -f /etc/logstash/conf.d/checkpoint.conf
Vi ser resultatet, billedet er klikbart:

2. Elastisk stak: analyse af sikkerhedslogfiler. Logstash

Hvis du kopierer det vil det se sådan ud:

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,

Når vi ser på disse meddelelser, forstår vi, at loggene ser ud som: felt = værdi eller nøgle = værdi, hvilket betyder, at et filter kaldet kv er egnet. For at vælge det rigtige filter til hver enkelt sag, vil det være en god idé at sætte dig ind i dem i den tekniske dokumentation, eller spørge en ven.

Opsætning af filter

På det sidste trin valgte vi kv, konfigurationen af ​​dette filter er præsenteret nedenfor:

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

Vi vælger det symbol, som vi vil dividere feltet og værdien med - "=". Hvis vi har identiske poster i loggen, gemmer vi kun én instans i databasen, ellers ender du med en række identiske værdier, det vil sige, hvis vi har beskeden "foo = nogle foo=nogle" skriver vi kun foo = nogle.

Opsætning af det korrekte output i ElasticSearch

Når Filter er konfigureret, kan du uploade logfiler til databasen elastiksøgning:

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

Hvis dokumentet er signeret med checkpoint-typen, gemmer vi hændelsen i elasticsearch-databasen, som accepterer forbindelser den 10.10.1.200 på port 9200 som standard. Hvert dokument gemmes til et bestemt indeks, i dette tilfælde gemmer vi til indekset "checkpoint-" + aktuel tidsdato. Hvert indeks kan have et bestemt sæt felter eller oprettes automatisk, når et nyt felt vises i en meddelelse; feltindstillinger og deres type kan ses i tilknytninger.

Hvis du har konfigureret godkendelse (vi ser på det senere), skal legitimationsoplysningerne for at skrive til et specifikt indeks angives, i dette eksempel er det "tssolution" med adgangskoden "cool". Du kan differentiere brugerrettigheder til kun at skrive logfiler til et bestemt indeks og ikke mere.

Start Logstash.

Logstash konfigurationsfil:

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

Vi kontrollerer konfigurationsfilen for rigtighed:
/usr/share/logstash/bin//logstash -f checkpoint.conf
2. Elastisk stak: analyse af sikkerhedslogfiler. Logstash

Start Logstash-processen:
sudo systemctl start logstash

Vi kontrollerer, at processen er startet:
sudo systemctl status logstash

2. Elastisk stak: analyse af sikkerhedslogfiler. Logstash

Lad os tjekke om stikket er oppe:
netstat -nat |grep 5555

2. Elastisk stak: analyse af sikkerhedslogfiler. Logstash

Tjek logfilerne i Kibana.

Når alt kører, skal du gå til Kibana - Opdag, sørg for at alt er konfigureret korrekt, billedet er klikbart!

2. Elastisk stak: analyse af sikkerhedslogfiler. Logstash

Alle logs er på plads, og vi kan se alle felterne og deres værdier!

Konklusion

Vi så på, hvordan man skriver en Logstash-konfigurationsfil, og som et resultat fik vi en parser af alle felter og værdier. Nu kan vi arbejde med at søge og plotte til specifikke felter. Næste i kurset vil vi se på visualisering i Kibana og lave et simpelt dashboard. Det er værd at nævne, at Logstash-konfigurationsfilen konstant skal opdateres i visse situationer, for eksempel når vi vil erstatte værdien af ​​et felt fra et tal til et ord. I de efterfølgende artikler vil vi gøre dette konstant.

Så følg med (Telegram, Facebook, VK, TS Solution Blog), Yandex Zen.

Kilde: www.habr.com

Tilføj en kommentar