2. Elastic stack: analisi di logs di sicurità. Logstash

2. Elastic stack: analisi di logs di sicurità. Logstash

In l'ultimu articulu avemu scontru pila di ELK, chì prudutti di software hè custituitu. È u primu compitu chì un ingegnere affronta quandu travaglia cù a pila ELK hè di mandà logs per u almacenamentu in elasticsearch per l'analisi sussegwenti. In ogni casu, questu hè solu u serviziu di labbra, elasticsearch guarda logs in forma di documenti cù certi campi è valori, chì significa chì l'ingegnere deve aduprà diversi strumenti per analizà u messagiu chì hè mandatu da i sistemi finali. Questu pò esse fattu in parechje manere - scrivite sè stessu un prugramma chì aghjunghje documenti à a basa di dati cù l'API, o utilizate suluzioni pronti. In questu cursu avemu da cunsiderà a suluzione Logstash, chì face parte di a pila ELK. Fighjemu cumu pudemu mandà logs da i sistemi di endpoint à Logstash, è poi cunfiguremu un schedariu di cunfigurazione per analizà è reindirizzà à a basa di dati Elasticsearch. Per fà questu, pigliamu i logs da u firewall Check Point cum'è u sistema entrata.

U cursu ùn copre micca a stallazione di stack ELK, postu chì ci sò un gran numaru d'articuli nantu à questu tema; cunsideremu u cumpunente di cunfigurazione.

Elaboremu un pianu d'azzione per a cunfigurazione di Logstash:

  1. Verificate chì elasticsearch accetterà logs (verificà a funziunalità è l'apertura di u portu).
  2. Cunsideremu cumu pudemu mandà avvenimenti à Logstash, sceglite un metudu, è implementà.
  3. Avemu cunfigurà Input in u schedariu di cunfigurazione Logstash.
  4. Avemu cunfigurà Output in u schedariu di cunfigurazione Logstash in modu di debug per capisce ciò chì u messagiu di log pare.
  5. Configurazione di u Filtru.
  6. Configurazione di l'output currettu in ElasticSearch.
  7. Lancia Logstash.
  8. Verificate i log in Kibana.

Fighjemu ogni puntu in più detail:

Verificate chì elasticsearch accetterà logs

Per fà questu, pudete aduprà u cumandamentu curl per verificà l'accessu à Elasticsearch da u sistema in quale Logstash hè implementatu. Sè avete l'autentificazione cunfigurata, allora trasferemu ancu l'utilizatore / password via curl, specificendu u portu 9200 se ùn l'avete micca cambiatu. Se ricevi una risposta simile à quella sottu, allora tuttu hè in ordine.

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

Se a risposta ùn hè micca ricevuta, pò esse parechji tipi d'errore: u prucessu di elasticsearch ùn hè micca in esecuzione, u portu sbagliatu hè specificatu, o u portu hè bluccatu da un firewall in u servitore induve elasticsearch hè stallatu.

Fighjemu cumu pudete mandà logs à Logstash da un firewall di puntu di cuntrollu

Da u servitore di gestione di Check Point pudete mandà logs à Logstash via syslog usendu l'utilità log_exporter, pudete leghje più nantu à quì. articulu, quì lasciaremu solu u cumandamentu chì crea u flussu:

cp_log_export aghjunghje nome check_point_syslog target-server < > target-port 5555 protocol tcp format generic read-mode semi-unificatu

< > - indirizzu di u servitore nantu à quale Logstash corre, target-port 5555 - portu à quale avemu da mandà logs, mandendu logs via tcp pò carricà u servitore, cusì in certi casi hè più currettu à aduprà udp.

Configurazione di INPUT in u schedariu di cunfigurazione Logstash

2. Elastic stack: analisi di logs di sicurità. Logstash

Per automaticamente, u schedariu di cunfigurazione si trova in u cartulare /etc/logstash/conf.d/. U schedariu di cunfigurazione hè custituitu da 3 parti significati: INPUT, FILTER, OUTPUT. IN INPUT indichemu induve u sistema pigliarà logs da, in FILTER parse the log - set up how to divide the message in fields and values, in radicali avrìanu pututu cunfiguremu u flussu di output - induve i logs analizati seranu mandati.

Prima, cunfigurà INPUT, cunsiderà alcuni di i tipi chì ponu esse - file, tcp è exe.

Tcp:

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

modu => "servitore"
Indica chì Logstash accetta cunnessione.

portu => 5555
host => "10.10.1.205"
Accettamu cunnessione via l'indirizzu IP 10.10.1.205 (Logstash), portu 5555 - u portu deve esse permessu da a pulitica di firewall.

tipu => "puntu di cuntrollu"
Avemu marcatu u documentu, assai còmuda s'è vo avete parechje cunnessione entrata. In seguitu, per ogni cunnessione pudete scrive u vostru propiu filtru utilizendu a logica se custruita.

Fichier:

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

Descrizzione di i paràmetri:
path => "/var/log/openvas_report/*"
Indichemu u cartulare in quale i schedarii deve esse leghje.

tipu => "openvas"
Tipu di avvenimentu.

start_position => "iniziu"
Quandu cambia un schedariu, leghje u schedariu sanu; se stabilisce "fine", u sistema aspetta chì i novi registri appariscenu à a fine di u schedariu.

esecutivu:

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

Utilizendu stu input, un (solu!) cumanda di shell hè lanciatu è u so output hè diventatu in un missaghju di log.

cumanda => "ls -alh"
U cumandamentu chì a so output ci interessa.

intervallu => 30
Intervallu di invucazione di cumanda in seconde.

Per riceve logs da u firewall, avemu registratu un filtru tcp o pudu, secondu cumu i logs sò mandati à Logstash.

Avemu cunfigurà Output in u schedariu di cunfigurazione Logstash in modu di debug per capisce ciò chì u messagiu di log pare

Dopu avè cunfiguratu l'INPUT, avemu bisognu di capisce ciò chì u messagiu di log sarà cum'è è chì metudi deve esse usatu per cunfigurà u filtru di log (parser).

Per fà questu, useremu un filtru chì rende u risultatu à stdout per vede u messagiu originale; u schedariu di cunfigurazione cumpletu in u mumentu serà cusì:

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

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

Eseguite u cumandamentu per verificà:
sudo /usr/share/logstash/bin//logstash -f /etc/logstash/conf.d/checkpoint.conf
Avemu vistu u risultatu, a stampa hè clicable:

2. Elastic stack: analisi di logs di sicurità. Logstash

Se u copiate sarà cusì cusì:

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,

Fighjendu sti missaghji, avemu capitu chì i logs s'assumiglia à: campu = valore o chjave = valore, chì significa un filtru chjamatu kv hè adattatu. Per sceglie u filtru adattatu per ogni casu specificu, saria una bona idea di familiarizà cun elli in a documentazione tecnica, o dumandà à un amicu.

Configurazione di u Filtru

In l'ultima tappa avemu sceltu kv, a cunfigurazione di stu filtru hè presentata quì sottu:

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

Selezziunà u simbulu da quale avemu da dividisce u campu è u valore - "=". Se avemu entrate identiche in u logu, salvemu solu una istanza in a basa di dati, altrimenti finiscinu cù una serie di valori identici, vale à dì, se avemu u missaghju "foo = some foo = some" scrivimu solu foo. = qualcunu.

Configurazione di l'output currettu in ElasticSearch

Una volta chì u Filtru hè cunfiguratu, pudete caricate logs à a basa di dati elasticsearch:

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

Se u documentu hè firmatu cù u tipu di checkpoint, salvemu l'avvenimentu in a basa di dati elasticsearch, chì accetta cunnessione in 10.10.1.200 in u portu 9200 per automaticamente. Ogni documentu hè salvatu à un indice specificu, in questu casu salvemu à l'indexu "checkpoint-" + data di l'ora attuale. Ogni indice pò avè un settore specificu di campi, o hè creatu automaticamente quandu un novu campu appare in un messagiu; i paràmetri di u campu è u so tipu pò esse vistu in mappings.

Sè avete l'autentificazione cunfigurata (avemu a fighjà dopu), i credenziali per scrive à un indice specificu deve esse specificatu, in questu esempiu hè "tssolution" cù a password "cool". Pudete diferenze i diritti di l'utilizatori per scrive logs solu à un indice specificu è micca più.

Lanciari Logstash.

File di cunfigurazione di Logstash:

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

Avemu verificatu u schedariu di cunfigurazione per a correttezza:
/usr/share/logstash/bin//logstash -f checkpoint.conf
2. Elastic stack: analisi di logs di sicurità. Logstash

Cumincià u prucessu di Logstash:
sudo systemctl start logstash

Avemu verificatu chì u prucessu hà iniziatu:
sudo systemctl status logstash

2. Elastic stack: analisi di logs di sicurità. Logstash

Cuntrollamu s'è u socket hè custituitu:
netstat -nat |grep 5555

2. Elastic stack: analisi di logs di sicurità. Logstash

Verificate i log in Kibana.

Dopu chì tuttu hè in esecuzione, andate à Kibana - Scopre, assicuratevi chì tuttu hè cunfiguratu currettamente, a stampa hè clicable!

2. Elastic stack: analisi di logs di sicurità. Logstash

Tutti i logs sò in u locu è pudemu vede tutti i campi è i so valori!

cunchiusioni

Avemu vistu cumu scrive un schedariu di cunfigurazione Logstash, è in u risultatu avemu un parser di tutti i campi è i valori. Avà pudemu travaglià cù a ricerca è a trama per campi specifichi. In seguitu in u corsu, guardemu a visualizazione in Kibana è creà un dashboard simplice. Hè nutate chì u schedariu di cunfigurazione di Logstash deve esse aghjurnatu constantemente in certe situazione, per esempiu, quandu vulemu rimpiazzà u valore di un campu da un numeru à una parolla. In l'articuli successivi faremu questu constantemente.

Allora stammi sintonizzati (n'ambasciata, Facebook, VK, TS Solution Blog), Yandex Zen.

Source: www.habr.com

Add a comment