2. Elastisk stabel: analyse av sikkerhetslogger. Logstash

2. Elastisk stabel: analyse av sikkerhetslogger. Logstash

I den siste artikkel vi møtte ELK stabel, hvilke programvareprodukter den består av. Og den første oppgaven en ingeniør står overfor når han arbeider med ELK-stakken, er å sende logger for lagring i elastisk søk ​​for påfølgende analyse. Dette er imidlertid bare leppeservice, elasticsearch lagrer logger i form av dokumenter med visse felt og verdier, noe som betyr at ingeniøren må bruke ulike verktøy for å analysere meldingen som sendes fra sluttsystemene. Dette kan gjøres på flere måter – skriv selv et program som skal legge til dokumenter i databasen ved hjelp av API, eller bruk ferdige løsninger. I dette kurset vil vi vurdere løsningen Logstash, som er en del av ELK-stakken. Vi skal se på hvordan vi kan sende logger fra endepunktsystemer til Logstash, og så setter vi opp en konfigurasjonsfil for å analysere og omdirigere til Elasticsearch-databasen. For å gjøre dette tar vi logger fra Check Point-brannmuren som innkommende system.

Kurset dekker ikke installasjonen av ELK stack, siden det er et stort antall artikler om dette emnet; vi vil vurdere konfigurasjonskomponenten.

La oss lage en handlingsplan for Logstash-konfigurasjon:

  1. Kontrollerer at elasticsearch godtar logger (kontrollerer funksjonaliteten og åpenheten til porten).
  2. Vi vurderer hvordan vi kan sende hendelser til Logstash, velge en metode og implementere den.
  3. Vi konfigurerer Input i Logstash-konfigurasjonsfilen.
  4. Vi konfigurerer Output i Logstash-konfigurasjonsfilen i feilsøkingsmodus for å forstå hvordan loggmeldingen ser ut.
  5. Sette opp filter.
  6. Sette opp riktig utgang i ElasticSearch.
  7. Logstash lanseres.
  8. Sjekker loggene i Kibana.

La oss se på hvert punkt mer detaljert:

Kontrollerer at elasticsearch godtar logger

For å gjøre dette kan du bruke curl-kommandoen for å sjekke tilgangen til Elasticsearch fra systemet der Logstash er distribuert. Hvis du har konfigurert autentisering, overfører vi også brukeren/passordet via curl, og spesifiserer port 9200 hvis du ikke har endret det. Hvis du får et svar som ligner på det nedenfor, 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 mottas, kan det være flere typer feil: elasticsearch-prosessen kjører ikke, feil port er spesifisert, eller porten er blokkert av en brannmur på serveren der elasticsearch er installert.

La oss se på hvordan du kan sende logger til Logstash fra en sjekkpunktbrannmur

Fra Check Point administrasjonsserver kan du sende logger til Logstash via syslog ved å bruke log_exporter-verktøyet, du kan lese mer om det her artikkel, her vil vi bare la kommandoen som oppretter strømmen:

cp_log_export legg til navn check_point_syslog target-server < > target-port 5555 protokoll tcp format generisk lesemodus semi-unified

< > - adresse til serveren som Logstash kjører på, target-port 5555 - port som vi skal sende logger til, sending av logger via tcp kan laste serveren, så i noen tilfeller er det mer riktig å bruke udp.

Sette opp INPUT i Logstash-konfigurasjonsfilen

2. Elastisk stabel: analyse av sikkerhetslogger. Logstash

Som standard er konfigurasjonsfilen plassert i katalogen /etc/logstash/conf.d/. Konfigurasjonsfilen består av 3 meningsfulle deler: INPUT, FILTER, OUTPUT. I INPUT vi angir hvor systemet vil ta logger fra, inn FILTER analysere loggen - sett opp hvordan du deler opp meldingen i felt og verdier, i UTGANG vi konfigurerer utdatastrømmen - hvor de analyserte loggene skal sendes.

Først, la oss konfigurere INPUT, vurdere noen av typene som kan være - fil, tcp og exe.

TCP:

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

modus => "server"
Indikerer at Logstash godtar tilkoblinger.

port => 5555
vert => "10.10.1.205"
Vi aksepterer tilkoblinger via IP-adresse 10.10.1.205 (Logstash), port 5555 - porten må tillates av brannmurpolicyen.

skriv => "sjekkpunkt"
Vi merker dokumentet, veldig praktisk hvis du har flere innkommende forbindelser. Deretter kan du for hver tilkobling skrive ditt eget filter ved å bruke den logiske hvis-konstruksjonen.

Fil:

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

Beskrivelse av innstillinger:
bane => "/var/log/openvas_report/*"
Vi angir katalogen der filene må leses.

type => "openvas"
Hendelsestype.

start_position => "begynnelse"
Når du endrer en fil, leser den hele filen; hvis du setter "slutt", venter systemet på at nye poster skal vises på slutten av filen.

Exec:

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

Ved å bruke denne inngangen startes en (bare!) shell-kommando og dens utdata gjøres om til en loggmelding.

kommando => "ls -alh"
Kommandoen hvis utgang vi er interessert i.

intervall => 30
Kommandoanropsintervall i sekunder.

For å motta logger fra brannmuren registrerer vi et filter tcp eller udp, avhengig av hvordan loggene sendes til Logstash.

Vi konfigurerer Output i Logstash-konfigurasjonsfilen i feilsøkingsmodus for å forstå hvordan loggmeldingen ser ut

Etter at vi har konfigurert INPUT, må vi forstå hvordan loggmeldingen vil se ut og hvilke metoder som må brukes for å konfigurere loggfilteret (parseren).

For å gjøre dette, vil vi bruke et filter som sender ut resultatet til stdout for å se den opprinnelige meldingen; den komplette konfigurasjonsfilen for øyeblikket vil se slik ut:

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

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

Kjør kommandoen for å sjekke:
sudo /usr/share/logstash/bin//logstash -f /etc/logstash/conf.d/checkpoint.conf
Vi ser resultatet, bildet er klikkbart:

2. Elastisk stabel: analyse av sikkerhetslogger. Logstash

Hvis du kopierer det vil det se slik ut:

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 meldingene, forstår vi at loggene ser slik ut: felt = verdi eller nøkkel = verdi, som betyr at et filter kalt kv er egnet. For å velge riktig filter for hvert enkelt tilfelle, vil det være en god idé å gjøre deg kjent med dem i den tekniske dokumentasjonen, eller spørre en venn.

Sette opp filter

På det siste stadiet vi valgte kv, er konfigurasjonen av dette filteret presentert nedenfor:

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

Vi velger symbolet som vi skal dele feltet og verdien med - "=". Hvis vi har identiske oppføringer i loggen, lagrer vi kun én forekomst i databasen, ellers vil du ende opp med en rekke identiske verdier, det vil si at hvis vi har meldingen "foo = noen foo=noen" skriver vi bare foo = noen.

Sette opp riktig utgang i ElasticSearch

Når Filter er konfigurert, kan du laste opp logger til databasen elasticsearch:

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

Hvis dokumentet er signert med sjekkpunkttypen, lagrer vi hendelsen til elasticsearch-databasen, som aksepterer tilkoblinger 10.10.1.200 på port 9200 som standard. Hvert dokument lagres i en spesifikk indeks, i dette tilfellet lagrer vi til indeksen "sjekkpunkt-" + gjeldende klokkeslett. Hver indeks kan ha et spesifikt sett med felt, eller opprettes automatisk når et nytt felt vises i en melding; feltinnstillinger og deres type kan vises i tilordninger.

Hvis du har konfigurert autentisering (vi skal se på det senere), må legitimasjonen for å skrive til en spesifikk indeks spesifiseres, i dette eksemplet er det "tssolution" med passordet "cool". Du kan differensiere brukerrettigheter for å skrive logger kun til en spesifikk indeks og ikke mer.

Start Logstash.

Logstash-konfigurasjonsfil:

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 sjekker konfigurasjonsfilen for korrekthet:
/usr/share/logstash/bin//logstash -f checkpoint.conf
2. Elastisk stabel: analyse av sikkerhetslogger. Logstash

Start Logstash-prosessen:
sudo systemctl start logstash

Vi sjekker at prosessen har startet:
sudo systemctl status logstash

2. Elastisk stabel: analyse av sikkerhetslogger. Logstash

La oss sjekke om stikkontakten er oppe:
netstat -nat |grep 5555

2. Elastisk stabel: analyse av sikkerhetslogger. Logstash

Sjekker loggene i Kibana.

Etter at alt er i gang, gå til Kibana - Oppdag, sørg for at alt er riktig konfigurert, bildet er klikkbart!

2. Elastisk stabel: analyse av sikkerhetslogger. Logstash

Alle logger er på plass og vi kan se alle feltene og verdiene deres!

Konklusjon

Vi så på hvordan man skriver en Logstash-konfigurasjonsfil, og som et resultat fikk vi en parser av alle felt og verdier. Nå kan vi jobbe med søk og plotting for spesifikke felt. Neste i kurset skal vi se på visualisering i Kibana og lage et enkelt dashbord. Det er verdt å nevne at Logstash-konfigurasjonsfilen må oppdateres kontinuerlig i visse situasjoner, for eksempel når vi ønsker å erstatte verdien av et felt fra et tall til et ord. I påfølgende artikler vil vi gjøre dette kontinuerlig.

Så følg medTelegram, Facebook , VK, TS Løsningsblogg), Yandex Zen.

Kilde: www.habr.com

Legg til en kommentar