2. Elastinis kaminas: saugos žurnalų analizė. Logstash

2. Elastinis kaminas: saugos žurnalų analizė. Logstash

Paskutiniame straipsnis mes susitikome ELK rietuvė, iš kokių programinės įrangos produktų jis susideda. Ir pirmoji užduotis, su kuria susiduria inžinierius dirbdamas su ELK krūva, yra siųsti žurnalus saugoti elasticsearch tolesnei analizei. Tačiau tai tik lūpų pasakymas, elasticsearch saugo žurnalus dokumentų pavidalu su tam tikrais laukais ir reikšmėmis, o tai reiškia, kad inžinierius turi naudoti įvairius įrankius, kad išanalizuoti pranešimą, siunčiamą iš galinių sistemų. Tai galima padaryti keliais būdais – pačiam parašyti programą, kuri naudodama API įtrauks dokumentus į duomenų bazę, arba naudoti jau paruoštus sprendimus. Šiame kurse mes apsvarstysime sprendimą „Logstash“, kuris yra ELK krūvos dalis. Pažiūrėsime, kaip galime siųsti žurnalus iš galinių taškų sistemų į „Logstash“, tada nustatysime konfigūracijos failą, skirtą analizuoti ir peradresuoti į „Elasticsearch“ duomenų bazę. Norėdami tai padaryti, mes priimame žurnalus iš Check Point ugniasienės kaip gaunamą sistemą.

Kursas neapima ELK kamino diegimo, nes šia tema yra daugybė straipsnių; mes apsvarstysime konfigūracijos komponentą.

Sudarykite Logstash konfigūracijos veiksmų planą:

  1. Tikrinama, ar elasticsearch priims žurnalus (prievado funkcionalumo ir atvirumo tikrinimas).
  2. Svarstome, kaip galėtume siųsti įvykius į Logstash, pasirinkti metodą ir jį įgyvendinti.
  3. Konfigūruojame įvestį Logstash konfigūracijos faile.
  4. Mes sukonfigūruojame išvestį Logstash konfigūracijos faile derinimo režimu, kad suprastume, kaip atrodo žurnalo pranešimas.
  5. Filtro nustatymas.
  6. Tinkamos išvesties nustatymas ElasticSearch.
  7. Paleidžiamas „Logstash“.
  8. Tikrinami rąstai Kibanoje.

Pažvelkime į kiekvieną tašką išsamiau:

Tikrinama, ar elasticsearch priims žurnalus

Norėdami tai padaryti, galite naudoti komandą curl, kad patikrintumėte prieigą prie Elasticsearch iš sistemos, kurioje įdiegtas Logstash. Jei sukonfigūravote autentifikavimą, mes taip pat perduodame vartotoją / slaptažodį per curl, nurodydami 9200 prievadą, jei jo nepakeitėte. Jei gaunate atsakymą, panašų į žemiau pateiktą, vadinasi, viskas tvarkoje.

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

Jei atsakymas negaunamas, gali būti kelių tipų klaidų: elasticsearch procesas nevyksta, nurodytas netinkamas prievadas arba prievadą blokuoja ugniasienė serveryje, kuriame įdiegta elasticsearch.

Pažiūrėkime, kaip galite siųsti žurnalus į Logstash iš patikros taško užkardos

Iš Check Point valdymo serverio galite siųsti žurnalus į Logstash per syslog naudodami log_exporter įrankį, daugiau apie tai galite perskaityti čia straipsnis, čia paliksime tik komandą, kuri sukuria srautą:

cp_log_export pridėti pavadinimą check_point_syslog target-server < > tikslinio prievado 5555 protokolo tcp formato bendras skaitymo režimas pusiau suvienodintas

< > - serverio, kuriame veikia Logstash, adresas, tikslinis prievadas 5555 - prievadas, į kurį siųsime žurnalus, siunčiant žurnalus per tcp galima apkrauti serverį, todėl kai kuriais atvejais teisingiau naudoti udp.

Įvesties nustatymas „Logstash“ konfigūracijos faile

2. Elastinis kaminas: saugos žurnalų analizė. Logstash

Pagal numatytuosius nustatymus konfigūracijos failas yra /etc/logstash/conf.d/ kataloge. Konfigūracijos failas susideda iš 3 reikšmingų dalių: INPUT, FILTER, OUTPUT. IN ĮVADAS nurodome, iš kur sistema paims žurnalus FILTRAS išanalizuoti žurnalą – nustatyti, kaip padalyti pranešimą į laukus ir reikšmes IŠĖJIMAS sukonfigūruojame išvesties srautą – kur bus siunčiami išanalizuoti žurnalai.

Pirma, sukonfigūruokime INPUT, apsvarstykite kai kuriuos tipus, kurie gali būti - failas, tcp ir exe.

TCP:

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

režimas => "serveris"
Nurodo, kad Logstash priima ryšius.

prievadas => 5555
priegloba => "10.10.1.205"
Priimame prisijungimus per IP adresą 10.10.1.205 (Logstash), 5555 prievadą – prievadą turi leisti ugniasienės politika.

tipo => "kontrolinis taškas"
Pažymime dokumentą, labai patogu, jei turite keletą įeinančių jungčių. Vėliau kiekvienam ryšiui galite parašyti savo filtrą naudodami loginį jei konstrukciją.

Vaizdas:

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

Nustatymų aprašymas:
kelias => "/var/log/openvas_report/*"
Nurodome katalogą, kuriame reikia skaityti failus.

tipo => "openvas"
Renginio tipas.

start_position => "pradžia"
Keičiant failą, jis nuskaito visą failą; jei nustatote „end“, sistema laukia, kol failo pabaigoje pasirodys nauji įrašai.

Vykdytojas:

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

Naudojant šią įvestį, paleidžiama (tik!) apvalkalo komanda ir jos išvestis paverčiama žurnalo pranešimu.

komanda => "ls -alh"
Komanda, kurios išvestis mus domina.

intervalas => 30
Komandos iškvietimo intervalas sekundėmis.

Norėdami gauti žurnalus iš ugniasienės, registruojame filtrą tcp arba udp, priklausomai nuo to, kaip žurnalai siunčiami į Logstash.

Mes sukonfigūruojame išvestį Logstash konfigūracijos faile derinimo režimu, kad suprastume, kaip atrodo žurnalo pranešimas

Sukonfigūravę INPUT, turime suprasti, kaip atrodys žurnalo pranešimas ir kokius metodus reikia naudoti norint sukonfigūruoti žurnalo filtrą (analizatorių).

Norėdami tai padaryti, naudosime filtrą, kuris išveda rezultatą į stdout, kad peržiūrėtume pradinį pranešimą; visas konfigūracijos failas šiuo metu atrodys taip:

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

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

Paleiskite komandą, kad patikrintumėte:
sudo /usr/share/logstash/bin//logstash -f /etc/logstash/conf.d/checkpoint.conf
Matome rezultatą, paveikslėlį galima spustelėti:

2. Elastinis kaminas: saugos žurnalų analizė. Logstash

Jei nukopijuosite, jis atrodys taip:

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,

Žvelgdami į šiuos pranešimus suprantame, kad žurnalai atrodo taip: laukas = vertė arba raktas = vertė, o tai reiškia, kad tinka filtras, vadinamas kv. Norint pasirinkti tinkamą filtrą kiekvienam konkrečiam atvejui, būtų naudinga su jais susipažinti techninėje dokumentacijoje arba paklausti draugo.

Filtro nustatymas

Paskutiniame etape pasirinkome kv, šio filtro konfigūracija pateikiama žemiau:

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

Mes pasirenkame simbolį, iš kurio padalinsime lauką ir reikšmę - „=“. Jei žurnale turime identiškus įrašus, duomenų bazėje išsaugome tik vieną egzempliorių, kitaip gausite identiškų reikšmių masyvą, tai yra, jei turime pranešimą „foo = some foo=some“, rašome tik foo = kai kurie.

Tinkamos išvesties nustatymas ElasticSearch

Kai filtras yra sukonfigūruotas, galite įkelti žurnalus į duomenų bazę elastinga paieška:

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

Jei dokumentas pasirašytas tikrinimo taško tipu, įvykį išsaugome elasticsearch duomenų bazėje, kuri pagal numatytuosius nustatymus priima ryšius 10.10.1.200 prie 9200 prievado. Kiekvienas dokumentas išsaugomas tam tikrame indekse, šiuo atveju įrašome į indeksą „checkpoint-“ + esamo laiko data. Kiekvienas indeksas gali turėti tam tikrą laukų rinkinį arba sukuriamas automatiškai, kai pranešime atsiranda naujas laukas; lauko parametrus ir jų tipą galima peržiūrėti atvaizduose.

Jei sukonfigūravote autentifikavimą (pažiūrėsime vėliau), reikia nurodyti kredencialus, leidžiančius rašyti į konkretų indeksą, šiame pavyzdyje tai yra „tssolution“ su slaptažodžiu „cool“. Galite atskirti vartotojo teises rašyti žurnalus tik į tam tikrą indeksą ir ne daugiau.

Paleiskite „Logstash“.

Logstash konfigūracijos failas:

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

Mes patikriname konfigūracijos failo teisingumą:
/usr/share/logstash/bin//logstash -f checkpoint.conf
2. Elastinis kaminas: saugos žurnalų analizė. Logstash

Pradėkite „Logstash“ procesą:
sudo systemctl pradėti logstash

Mes patikriname, ar procesas prasidėjo:
sudo systemctl būsena logstash

2. Elastinis kaminas: saugos žurnalų analizė. Logstash

Pažiūrėkime, ar lizdas yra pakeltas:
netstat -nat |grep 5555

2. Elastinis kaminas: saugos žurnalų analizė. Logstash

Tikrinami rąstai Kibanoje.

Kai viskas veikia, eikite į Kibana - Atraskite, įsitikinkite, kad viskas teisingai sukonfigūruota, paveikslėlį galima spustelėti!

2. Elastinis kaminas: saugos žurnalų analizė. Logstash

Visi žurnalai yra vietoje ir mes matome visus laukus ir jų reikšmes!

išvada

Pažiūrėjome, kaip parašyti Logstash konfigūracijos failą, ir gavome visų laukų ir reikšmių analizatorių. Dabar galime dirbti su konkrečių laukų paieška ir braižymu. Toliau kurso metu apžvelgsime vizualizaciją „Kibana“ ir sukursime paprastą prietaisų skydelį. Verta paminėti, kad Logstash konfigūracijos failą reikia nuolat atnaujinti tam tikrose situacijose, pavyzdžiui, kai norime pakeisti lauko reikšmę iš skaičiaus į žodį. Tolesniuose straipsniuose tai darysime nuolat.

Taigi sekite naujienas (Telegram, Facebook, VK, TS sprendimų tinklaraštis), „Yandex Zen“.

Šaltinis: www.habr.com

Добавить комментарий