2. Elastiese stapel: ontleding van sekuriteit logs. logstash

2. Elastiese stapel: ontleding van sekuriteit logs. logstash

In die laaste Artikel ons het ontmoet ELK stapeluit watter sagteware produkte dit bestaan. En die eerste taak wat 'n ingenieur in die gesig staar wanneer hy met die ELK-stapel werk, is om logs te stuur vir berging in elastiese soektog vir verdere ontleding. Dit is egter net in woorde, elasticsearch stoor logs in die vorm van dokumente met sekere velde en waardes, wat beteken dat die ingenieur verskeie gereedskap moet gebruik om die boodskap wat vanaf die eindstelsels gestuur word, te ontleed. Daar is verskeie maniere om dit te doen - skryf self 'n program wat dokumente by die databasis sal voeg deur die API te gebruik of gebruik klaargemaakte oplossings. In hierdie kursus sal ons die oplossing oorweeg logstash, wat deel is van die ELK-stapel. Ons sal sien hoe logs vanaf eindstelsels na Logstash gestuur kan word, en dan sal ons 'n konfigurasielêer opstel vir ontleding en herleiding na die Elasticsearch-databasis. Om dit te doen, neem ons logs van die Check Point-brandmuur as 'n inkomende stelsel.

Die kursus dek nie die installering van die ELK-stapel nie, aangesien daar 'n groot aantal artikels oor hierdie onderwerp is, sal ons die konfigurasie-komponent oorweeg.

Kom ons maak 'n aksieplan vir die opstel van Logstash:

  1. Kontroleer dat elasticsearch logs sal aanvaar (kontroleer die gesondheid en oopheid van die hawe).
  2. Ons oorweeg hoe ons gebeurtenisse na Logstash kan stuur, 'n metode kan kies, dit kan implementeer.
  3. Stel Invoer op in die Logstash-konfigurasielêer.
  4. Ons stel Uitvoer in die Logstash-konfigurasielêer in ontfoutmodus om te verstaan ​​hoe die logboodskap lyk.
  5. Stel filter op.
  6. Stel die korrekte uitvoer in ElasticSearch op.
  7. Begin Logstash.
  8. Gaan die logs in Kibana na.

Kom ons kyk na elke item in meer besonderhede:

Kontroleer dat elasticsearch logs sal aanvaar

Om dit te doen, kan u met die krul-opdrag nagaan toegang tot Elasticsearch vanaf die stelsel waarop Logstash ontplooi is. As u verifikasie gekonfigureer het, stuur ons ook die gebruiker / wagwoord deur curl, spesifiseer poort 9200 as u dit nie verander het nie. As jy 'n antwoord soos die een hieronder ontvang, dan is alles in orde.

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

As die antwoord nie kom nie, kan daar verskeie tipes foute wees: die elasticsearch-proses werk nie, die verkeerde poort is gespesifiseer, of die poort word geblokkeer deur 'n firewall op die bediener waar elasticsearch geïnstalleer is.

Oorweeg hoe u logs vanaf die kontrolepunt-firewall na Logstash kan stuur

Vanaf die Check Point-bestuursbediener kan jy logs na Logstash stuur via syslog met behulp van die log_exporter-nutsding, jy kan meer daaroor lees by hierdie Artikel, hier laat ons net die opdrag wat die draad skep:

cp_log_export voeg naam check_point_syslog teikenbediener < > teikenpoort 5555-protokol tcp-formaat generiese leesmodus semi-verenigde

< > - die adres van die bediener waarop Logstash loop, teikenpoort 5555 - die poort waarheen ons logs sal stuur, die stuur van logs via tcp kan die bediener laai, so in sommige gevalle is dit meer korrek om udp te stel.

Stel INPUT op in die Logstash-konfigurasielêer

2. Elastiese stapel: ontleding van sekuriteit logs. logstash

By verstek is die konfigurasielêer in die /etc/logstash/conf.d/-gids geleë. Die konfigurasielêer bestaan ​​uit 3 betekenisvolle dele: INPUT, FILTER, OUTPUT. IN INPUT ons spesifiseer van waar die stelsel logs sal neem, in FILTER parsim log - stel in hoe om die boodskap in velde en waardes te verdeel, in UITSET stel die uitgaande stroom in - waarheen die ontleed logs gestuur sal word.

Kom ons stel eers INPUT op, oorweeg 'n paar tipes wat kan wees - lêer, tcp en exe.

tcp:

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

modus => "bediener"
Vertel Logstash om verbindings te aanvaar.

poort => 5555
gasheer => "10.10.1.205"
Ons aanvaar verbindings met die IP-adres 10.10.1.205 (Logstash), poort 5555 - die poort moet deur die brandmuurbeleid toegelaat word.

tik => "kontrolepunt"
Ons merk die dokument, dit is baie gerieflik as jy verskeie inkomende verbindings het. Vervolgens, vir elke verbinding, kan jy jou eie filter skryf deur die logiese if-konstruksie te gebruik.

Lêer:

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

Beskrywing van instellings:
pad => "/var/log/openvas_verslag/*"
Spesifiseer die gids waarin die lêers gelees moet word.

tik => "openvas"
Soort gebeurtenis.

begin_posisie => "begin"
Wanneer 'n lêer verander word, lees dit die hele lêer, as jy "einde" stel, dan wag die stelsel vir nuwe rekords om aan die einde van die lêer te verskyn.

Uitvoer:

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

Op hierdie invoer word 'n (slegs!) dop-opdrag geloods en die uitvoer daarvan word in 'n logboodskap toegedraai.

opdrag => "ls -alh"
Die opdrag in wie se uitvoer ons belangstel.

interval => 30
Beveloproepinterval in sekondes.

Om logs van die firewall te ontvang, skryf ons 'n filter voor tcp of UDP, afhangende van hoe logs na Logstash gestuur word.

Stel Uitvoer in die Logstash-konfigurasielêer in ontfoutmodus op om te verstaan ​​hoe die logboodskap lyk

Nadat ons INPUT gekonfigureer het, moet ons verstaan ​​hoe die logboodskap sal lyk, watter metodes gebruik moet word om die logfilter (parser) op te stel.

Om dit te doen, sal ons 'n filter gebruik wat die resultaat aan stdout gee om die oorspronklike boodskap te sien, die volledige konfigurasielêer op die oomblik sal soos volg lyk:

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

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

Ek voer die opdrag uit om na te gaan:
sudo /usr/share/logstash/bin//logstash -f /etc/logstash/conf.d/checkpoint.conf
Ons sien die resultaat, die prentjie is klikbaar:

2. Elastiese stapel: ontleding van sekuriteit logs. logstash

As dit gekopieer word, sal dit soos volg lyk:

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,

As ons na die boodskapdata kyk, verstaan ​​ons dat die logs soos volg lyk: veld = waarde of sleutel = waarde, wat beteken dat 'n filter genaamd kv geskik is. Om die regte filter vir elke spesifieke geval te kies, sal dit lekker wees om jouself daarvan in die tegniese dokumentasie te vergewis, of 'n vriend te vra.

Die opstel van die filter

Op die laaste stadium is kv gekies, die volgende is die konfigurasie van hierdie filter:

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

Ons kies die simbool waarmee ons die veld en waarde sal verdeel - "=". As ons identiese inskrywings in die log het, stoor ons net een instansie in die databasis, anders sal jy 'n reeks identiese waardes kry, dit wil sê as ons die boodskap "foo = some foo=some", skryf ons net foo = sommige.

Die opstel van die korrekte uitvoer in ElasticSearch

Nadat die filter opgestel is, kan u logs na die databasis oplaai elasticsearch:

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

As die dokument met die kontrolepunt-tipe onderteken is, stoor ons die gebeurtenis na die elasticsearch-databasis, wat by verstek verbindings op 10.10.1.200 op poort 9200 aanvaar. Elke dokument word in 'n spesifieke indeks gestoor, in hierdie geval stoor ons dit na die "kontrolepunt-" indeks + die huidige tyddatum. Elke indeks kan 'n sekere stel velde hê, of dit word outomaties geskep wanneer 'n nuwe veld in die boodskap verskyn, veldinstellings en hul tipe kan in kartering gevind word.

As u verifikasie gekonfigureer het (ons sal later daarna kyk), moet krediete gespesifiseer word om na 'n spesifieke indeks te skryf, in hierdie voorbeeld is dit "tssolution" met die wagwoord "cool". U kan die regte van gebruikers afbaken om logs slegs na 'n sekere indeks te skryf en nie meer nie.

Begin Logstash.

Logstash konfigurasie lêer:

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

Gaan die konfigurasielêer na vir korrekte samestelling:
/usr/share/logstash/bin//logstash -f checkpoint.conf
2. Elastiese stapel: ontleding van sekuriteit logs. logstash

Begin die Logstash-proses:
sudo systemctl begin logstash

Maak seker dat die proses begin het:
sudo systemctl status logstash

2. Elastiese stapel: ontleding van sekuriteit logs. logstash

Kyk of die sok op is:
netstat -nat |grep 5555

2. Elastiese stapel: ontleding van sekuriteit logs. logstash

Gaan die logs in Kibana na.

Nadat alles aan die gang is, gaan na Kibana - Ontdek, maak seker dat alles reg opgestel is, die prentjie is klikbaar!

2. Elastiese stapel: ontleding van sekuriteit logs. logstash

Alle logs is in plek en ons kan al die velde en hul waardes sien!

Gevolgtrekking

Ons het gekyk hoe om 'n Logstash-konfigurasielêer te skryf, gevolglik het ons 'n ontleder vir alle velde en waardes gekry. Nou kan ons werk met die soek en teken van spesifieke velde. Later in die kursus sal ons kyk na visualisering in Kibana, skep 'n eenvoudige dashboard. Dit is die moeite werd om te noem dat die Logstash-konfigurasielêer voortdurend opgedateer moet word in sekere situasies, byvoorbeeld wanneer ons die waarde van 'n veld van 'n nommer na 'n woord wil verander. In daaropvolgende artikels sal ons dit voortdurend doen.

So bly ingeskakeltelegram, Facebook, VK, TS Oplossing Blog), Yandex Zen.

Bron: will.com

Voeg 'n opmerking