2. Elasta stako: analizo de sekurecaj protokoloj. Logstash

2. Elasta stako: analizo de sekurecaj protokoloj. Logstash

En la lasta artikolo ni renkontis ELK stako, el kiuj softvaraĵoj ĝi konsistas. Kaj la unua tasko kiun inĝeniero alfrontas kiam laboras kun la ELK-stako estas sendi protokolojn por stokado en elasta serĉo por posta analizo. Tamen, ĉi tio estas nur lipservo, elasticsearch stokas protokolojn en formo de dokumentoj kun certaj kampoj kaj valoroj, kio signifas, ke la inĝeniero devas uzi diversajn ilojn por analizi la mesaĝon, kiu estas sendita de la finaj sistemoj. Ĉi tio povas esti farita en pluraj manieroj - skribu mem programon, kiu aldonos dokumentojn al la datumbazo per la API, aŭ uzu pretajn solvojn. En ĉi tiu kurso ni konsideros la solvon Logstash, kiu estas parto de la ELK-stako. Ni rigardos kiel ni povas sendi protokolojn de finpunktosistemoj al Logstash, kaj poste ni starigos agordan dosieron por analizi kaj redirekti al la datumbazo Elasticsearch. Por fari tion, ni prenas protokolojn de la fajroŝirmilo Check Point kiel la envenantan sistemon.

La kurso ne kovras la instaladon de ELK-stako, ĉar estas grandega nombro da artikoloj pri ĉi tiu temo; ni konsideros la agordan komponanton.

Ni ellaboru agadplanon por Logstash-agordo:

  1. Kontrolante, ke elasticsearch akceptos protokolojn (kontrolante la funkciojn kaj malfermecon de la haveno).
  2. Ni pripensas kiel ni povas sendi eventojn al Logstash, elekti metodon kaj efektivigi ĝin.
  3. Ni agordas Enigon en la agorda dosiero de Logstash.
  4. Ni agordas Eligon en la agorda dosiero de Logstash en sencimiga reĝimo por kompreni kiel aspektas la protokolo-mesaĝo.
  5. Agordi Filtrilon.
  6. Agordante la ĝustan Eligon en ElasticSearch.
  7. Logstash lanĉas.
  8. Kontrolante la protokolojn en Kibana.

Ni rigardu ĉiun punkton pli detale:

Kontrolante ke elasticsearch akceptos protokolojn

Por fari tion, vi povas uzi la buklan komandon por kontroli aliron al Elasticsearch de la sistemo sur kiu Logstash estas deplojita. Se vi havas aŭtentikigon agordita, tiam ni ankaŭ transdonas la uzanton/pasvorton per buklo, specifante la havenon 9200 se vi ne ŝanĝis ĝin. Se vi ricevas respondon similan al tiu ĉi sube, tiam ĉio estas en ordo.

[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 la respondo ne estas ricevita, tiam povas esti pluraj specoj de eraroj: la procezo de elasticsearch ne funkcias, la malĝusta haveno estas specifita, aŭ la pordo estas blokita de fajroŝirmilo sur la servilo, kie elasticsearch estas instalita.

Ni rigardu kiel vi povas sendi protokolojn al Logstash de kontrolpunkto fajroŝirmilo

De Check Point-administra servilo vi povas sendi protokolojn al Logstash per syslog uzante la ilon log_exporter, vi povas legi pli pri ĝi ĉi tie artikolo, ĉi tie ni lasos nur la komandon, kiu kreas la fluon:

cp_log_export aldoni nomon check_point_syslog cel-servilo < > cel-haveno 5555 protokolo tcp-formato senmarka leg-reĝimo duonunuigita

< > - adreso de la servilo, sur kiu funkcias Logstash, cel-porto 5555 - haveno al kiu ni sendos protokolojn, sendante protokolojn per tcp povas ŝargi la servilon, do en iuj kazoj estas pli ĝuste uzi udp.

Agordante INPUT en la agorda dosiero de Logstash

2. Elasta stako: analizo de sekurecaj protokoloj. Logstash

Defaŭlte, la agorda dosiero troviĝas en la dosierujo /etc/logstash/conf.d/. La agorda dosiero konsistas el 3 signifaj partoj: INPUT, FILTER, OUTPUT. EN INPUT ni indikas de kie la sistemo prenos protokolojn, en FILTER analizu la protokolon - agordu kiel dividi la mesaĝon en kampojn kaj valorojn, en OUTPUT ni agordas la eligfluon - kie la analizitaj protokoloj estos senditaj.

Unue, ni agordu INPUT, konsideru iujn el la tipoj kiuj povas esti - dosiero, tcp kaj exe.

Tcp:

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

reĝimo => "servilo"
Indikas, ke Logstash akceptas konektojn.

haveno => 5555
gastiganto => "10.10.1.205"
Ni akceptas konektojn per IP-adreso 10.10.1.205 (Logstash), haveno 5555 - la haveno devas esti permesita de la firewall-politiko.

tajpu => "kontrolpunkto"
Ni markas la dokumenton, tre oportuna se vi havas plurajn envenantajn konektojn. Poste, por ĉiu konekto vi povas skribi vian propran filtrilon uzante la logikan if-konstruaĵon.

Dosiero:

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

Priskribo de agordoj:
vojo => "/var/log/openvas_report/*"
Ni indikas la dosierujon en kiu la dosieroj devas esti legitaj.

tajpu => "openvas"
Eventa tipo.

start_position => "komenco"
Ŝanĝante dosieron, ĝi legas la tutan dosieron; se vi fiksas "finon", la sistemo atendas ke novaj rekordoj aperos ĉe la fino de la dosiero.

Ekzekutivo:

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

Uzante ĉi tiun enigaĵon, (nur!) ŝela komando estas lanĉita kaj ĝia eligo estas igita protokolo-mesaĝo.

komando => "ls -alh"
La komando, kies eligo ni interesiĝas.

intervalo => 30
Komando alvoka intervalo en sekundoj.

Por ricevi protokolojn de la fajroŝirmilo, ni registras filtrilon tcpudp, depende de kiel la protokoloj estas senditaj al Logstash.

Ni agordas Eligon en la agorda dosiero de Logstash en sencimiga reĝimo por kompreni kiel aspektas la protokolo-mesaĝo

Post kiam ni agordis INPUT, ni devas kompreni kiel aspektos la protokolo-mesaĝo kaj kiaj metodoj devas esti uzataj por agordi la protokolfiltrilon (analizilo).

Por fari tion, ni uzos filtrilon kiu eligas la rezulton al stdout por vidi la originalan mesaĝon; la kompleta agorda dosiero nuntempe aspektos jene:

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

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

Rulu la komandon por kontroli:
sudo /usr/share/logstash/bin//logstash -f /etc/logstash/conf.d/checkpoint.conf
Ni vidas la rezulton, la bildo estas klakebla:

2. Elasta stako: analizo de sekurecaj protokoloj. Logstash

Se vi kopias ĝin, ĝi aspektos jene:

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,

Rigardante ĉi tiujn mesaĝojn, ni komprenas, ke la protokoloj aspektas kiel: kampo = valoro aŭ ŝlosilo = valoro, kio signifas ke filtrilo nomata kv taŭgas. Por elekti la ĝustan filtrilon por ĉiu specifa kazo, estus bona ideo konatiĝi kun ili en la teknika dokumentaro, aŭ demandi amikon.

Agordi Filtrilon

En la lasta etapo, ni elektis kv, la agordo de ĉi tiu filtrilo estas prezentita sube:

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

Ni elektas la simbolon per kiu ni dividos la kampon kaj valoron - "=". Se ni havas identajn enskribojn en la protokolo, ni konservas nur unu okazon en la datumbazo, alie vi finiĝos kun tabelo da identaj valoroj, tio estas, se ni havas la mesaĝon “foo = some foo=some” ni skribas nur foo. = iuj.

Agordante la ĝustan Eligon en ElasticSearch

Post kiam Filtrilo estas agordita, vi povas alŝuti protokolojn al la datumbazo elasta serĉado:

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

Se la dokumento estas subskribita kun la kontrolpunkto, ni konservas la eventon al la datumbazo elastika serĉo, kiu akceptas konektojn je 10.10.1.200 sur haveno 9200 defaŭlte. Ĉiu dokumento estas konservita al specifa indekso, en ĉi tiu kazo ni konservas al la indekso "checkpoint-" + aktuala tempodato. Ĉiu indekso povas havi specifan aron de kampoj, aŭ estas kreita aŭtomate kiam nova kampo aperas en mesaĝo; kampaj agordoj kaj ilia tipo povas esti viditaj en mapadoj.

Se vi havas aŭtentigon agordita (ni rigardos ĝin poste), la akreditaĵoj por skribi al specifa indekso devas esti specifitaj, en ĉi tiu ekzemplo ĝi estas "tssolution" kun la pasvorto "cool". Vi povas diferencigi uzantrajtojn por skribi protokolojn nur al specifa indekso kaj ne pli.

Lanĉu Logstash.

Logstash-agorda dosiero:

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

Ni kontrolas la agordan dosieron por ĝusteco:
/usr/share/logstash/bin//logstash -f checkpoint.conf
2. Elasta stako: analizo de sekurecaj protokoloj. Logstash

Komencu la procezon de Logstash:
sudo systemctl startu logstash

Ni kontrolas, ke la procezo komenciĝis:
sudo systemctl statuso logstash

2. Elasta stako: analizo de sekurecaj protokoloj. Logstash

Ni kontrolu ĉu la ingo estas enŝaltita:
netstat -nat |grep 5555

2. Elasta stako: analizo de sekurecaj protokoloj. Logstash

Kontrolante la protokolojn en Kibana.

Post kiam ĉio funkcias, iru al Kibana - Malkovru, certigu, ke ĉio estas ĝuste agordita, la bildo estas klakebla!

2. Elasta stako: analizo de sekurecaj protokoloj. Logstash

Ĉiuj protokoloj estas en loko kaj ni povas vidi ĉiujn kampojn kaj iliajn valorojn!

konkludo

Ni rigardis kiel skribi agordan dosieron de Logstash, kaj kiel rezulto ni ricevis analizilon de ĉiuj kampoj kaj valoroj. Nun ni povas labori kun serĉado kaj intrigo por specifaj kampoj. Poste en la kurso ni rigardos bildigon en Kibana kaj kreos simplan panelon. Menciindas, ke la agorda dosiero de Logstash devas esti konstante ĝisdatigita en certaj situacioj, ekzemple, kiam ni volas anstataŭigi la valoron de kampo de nombro al vorto. En postaj artikoloj ni faros tion konstante.

Do restu agorditaTelegramo, Facebook, VK, TS Solva Blogo), Yandex.Zen.

fonto: www.habr.com

Aldoni komenton