2. Elastic stack: pagsusuri ng mga security log. Logstash

2. Elastic stack: pagsusuri ng mga security log. Logstash

Sa huli Artikulo nagkakilala tayo ELK stack, kung anong mga produkto ng software ang binubuo nito. At ang unang gawain na kinakaharap ng isang engineer kapag nagtatrabaho sa ELK stack ay ang pagpapadala ng mga log para sa imbakan sa elasticsearch para sa kasunod na pagsusuri. Gayunpaman, ito ay lip service lamang, ang elasticsearch ay nag-iimbak ng mga log sa anyo ng mga dokumento na may ilang mga patlang at halaga, na nangangahulugang ang engineer ay dapat gumamit ng iba't ibang mga tool upang i-parse ang mensahe na ipinadala mula sa mga end system. Magagawa ito sa maraming paraan - magsulat ng isang programa sa iyong sarili na magdaragdag ng mga dokumento sa database gamit ang API, o gumamit ng mga handa na solusyon. Sa kursong ito isasaalang-alang natin ang solusyon Logstash, na bahagi ng ELK stack. Titingnan namin kung paano kami makakapagpadala ng mga log mula sa mga endpoint system patungo sa Logstash, at pagkatapos ay magse-set up kami ng configuration file para i-parse at i-redirect sa Elasticsearch database. Upang gawin ito, kumukuha kami ng mga log mula sa Check Point firewall bilang papasok na system.

Ang kurso ay hindi sumasaklaw sa pag-install ng ELK stack, dahil mayroong isang malaking bilang ng mga artikulo sa paksang ito; isasaalang-alang namin ang bahagi ng pagsasaayos.

Bumuo tayo ng plano ng pagkilos para sa pagsasaayos ng Logstash:

  1. Ang pagsuri na ang elasticsearch ay tatanggap ng mga log (pagsusuri sa functionality at pagiging bukas ng port).
  2. Isinasaalang-alang namin kung paano kami makakapagpadala ng mga kaganapan sa Logstash, pumili ng paraan, at maipapatupad ito.
  3. Kino-configure namin ang Input sa Logstash configuration file.
  4. Kino-configure namin ang Output sa Logstash configuration file sa debug mode upang maunawaan kung ano ang hitsura ng log message.
  5. Pagse-set up ng Filter.
  6. Pagse-set up ng tamang Output sa ElasticSearch.
  7. Inilunsad ang Logstash.
  8. Sinusuri ang mga log sa Kibana.

Tingnan natin ang bawat punto nang mas detalyado:

Ang pagsuri na ang elasticsearch ay tatanggap ng mga log

Upang gawin ito, maaari mong gamitin ang curl command upang suriin ang pag-access sa Elasticsearch mula sa system kung saan naka-deploy ang Logstash. Kung na-configure mo ang authentication, ililipat din namin ang user/password sa pamamagitan ng curl, na tumutukoy sa port 9200 kung hindi mo ito binago. Kung nakatanggap ka ng tugon na katulad ng nasa ibaba, kung gayon ang lahat ay nasa ayos.

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

Kung hindi natanggap ang tugon, maaaring mayroong ilang uri ng mga error: ang proseso ng elasticsearch ay hindi tumatakbo, ang maling port ay tinukoy, o ang port ay hinarangan ng isang firewall sa server kung saan naka-install ang elasticsearch.

Tingnan natin kung paano ka makakapagpadala ng mga log sa Logstash mula sa isang check point na firewall

Mula sa server ng pamamahala ng Check Point maaari kang magpadala ng mga log sa Logstash sa pamamagitan ng syslog gamit ang log_exporter utility, maaari kang magbasa ng higit pa tungkol dito Artikulo, dito iiwan lamang namin ang utos na lumilikha ng stream:

cp_log_export magdagdag ng pangalan check_point_syslog target-server < > target-port 5555 protocol tcp format generic read-mode semi-unified

< > - address ng server kung saan tumatakbo ang Logstash, target-port 5555 - port kung saan kami magpapadala ng mga log, ang pagpapadala ng mga log sa pamamagitan ng tcp ay maaaring mag-load sa server, kaya sa ilang mga kaso ay mas tama ang paggamit ng udp.

Pagse-set up ng INPUT sa Logstash configuration file

2. Elastic stack: pagsusuri ng mga security log. Logstash

Bilang default, ang configuration file ay matatagpuan sa /etc/logstash/conf.d/ directory. Ang configuration file ay binubuo ng 3 makabuluhang bahagi: INPUT, FILTER, OUTPUT. SA INPUT ipinapahiwatig namin kung saan kukuha ang system ng mga log, sa FILTER i-parse ang log - i-set up kung paano hatiin ang mensahe sa mga field at value, sa oUTPUT i-configure namin ang output stream - kung saan ipapadala ang mga na-parse na log.

Una, i-configure natin ang INPUT, isaalang-alang ang ilan sa mga uri na maaaring - file, tcp at exe.

TCP:

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

mode => "server"
Isinasaad na ang Logstash ay tumatanggap ng mga koneksyon.

port => 5555
host => "10.10.1.205"
Tumatanggap kami ng mga koneksyon sa pamamagitan ng IP address 10.10.1.205 (Logstash), port 5555 - dapat pahintulutan ang port ng patakaran ng firewall.

uri => "checkpoint"
Minarkahan namin ang dokumento, napaka-maginhawa kung mayroon kang ilang mga papasok na koneksyon. Kasunod nito, para sa bawat koneksyon maaari kang sumulat ng iyong sariling filter gamit ang lohikal na kung construct.

File:

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

Paglalarawan ng mga setting:
landas => "/var/log/openvas_report/*"
Ipinapahiwatig namin ang direktoryo kung saan kailangang basahin ang mga file.

uri => "openvas"
Uri ng kaganapan.

start_position => "simula"
Kapag binabago ang isang file, binabasa nito ang buong file; kung itinakda mo ang "katapusan", ang system ay naghihintay para sa mga bagong tala na lumitaw sa dulo ng file.

Exec:

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

Gamit ang input na ito, isang (lamang!) shell command ay inilunsad at ang output nito ay ginawang isang log message.

command => "ls -alh"
Ang utos na ang output ay interesado tayo.

pagitan => 30
Command invocation interval sa ilang segundo.

Upang makatanggap ng mga log mula sa firewall, nagrerehistro kami ng isang filter tcp o udp, depende sa kung paano ipinapadala ang mga log sa Logstash.

Kino-configure namin ang Output sa Logstash configuration file sa debug mode upang maunawaan kung ano ang hitsura ng log message

Pagkatapos naming i-configure ang INPUT, kailangan naming maunawaan kung ano ang magiging hitsura ng mensahe ng log at kung anong mga pamamaraan ang kailangang gamitin upang i-configure ang log filter (parser).

Upang gawin ito, gagamit kami ng isang filter na naglalabas ng resulta sa stdout upang makita ang orihinal na mensahe; ang kumpletong file ng pagsasaayos sa sandaling ito ay magiging ganito:

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

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

Patakbuhin ang utos upang suriin:
sudo /usr/share/logstash/bin//logstash -f /etc/logstash/conf.d/checkpoint.conf
Nakita namin ang resulta, naki-click ang larawan:

2. Elastic stack: pagsusuri ng mga security log. Logstash

Kung kokopyahin mo ito ay magiging ganito:

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,

Sa pagtingin sa mga mensaheng ito, naiintindihan namin na ang mga log ay mukhang: field = value o key = value, na nangangahulugang angkop ang isang filter na tinatawag na kv. Upang mapili ang tamang filter para sa bawat partikular na kaso, magandang ideya na gawing pamilyar ang iyong sarili sa mga ito sa teknikal na dokumentasyon, o magtanong sa isang kaibigan.

Pagse-set up ng Filter

Sa huling yugto na pinili namin ang kv, ang pagsasaayos ng filter na ito ay ipinakita sa ibaba:

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

Pinipili namin ang simbolo kung saan hahatiin namin ang patlang at halaga - "=". Kung mayroon kaming magkaparehong mga entry sa log, isang instance lang ang nai-save namin sa database, kung hindi, mapupunta ka sa isang hanay ng mga magkaparehong halaga, iyon ay, kung mayroon kaming mensaheng "foo = some foo=some" isinusulat lang namin ang foo = ilan.

Pagse-set up ng tamang Output sa ElasticSearch

Kapag na-configure na ang Filter, maaari kang mag-upload ng mga log sa database nababanat:

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

Kung ang dokumento ay nilagdaan gamit ang uri ng checkpoint, ise-save namin ang kaganapan sa database ng elasticsearch, na tumatanggap ng mga koneksyon sa 10.10.1.200 sa port 9200 bilang default. Ang bawat dokumento ay nai-save sa isang tiyak na index, sa kasong ito ay nagse-save kami sa index na "checkpoint-" + kasalukuyang petsa ng oras. Ang bawat index ay maaaring magkaroon ng isang partikular na hanay ng mga field, o awtomatikong nalilikha kapag may lumabas na bagong field sa isang mensahe; ang mga setting ng field at ang uri ng mga ito ay maaaring matingnan sa mga pagmamapa.

Kung na-configure mo ang pagpapatunay (titingnan natin ito sa ibang pagkakataon), ang mga kredensyal para sa pagsulat sa isang partikular na index ay dapat na tinukoy, sa halimbawang ito ito ay "tssolution" na may password na "cool". Maaari mong ibahin ang mga karapatan ng user na magsulat ng mga log lamang sa isang partikular na index at wala na.

Ilunsad ang Logstash.

Logstash configuration file:

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

Sinusuri namin ang configuration file para sa kawastuhan:
/usr/share/logstash/bin//logstash -f checkpoint.conf
2. Elastic stack: pagsusuri ng mga security log. Logstash

Simulan ang proseso ng Logstash:
sudo systemctl start logstash

Sinusuri namin kung nagsimula na ang proseso:
sudo systemctl status logstash

2. Elastic stack: pagsusuri ng mga security log. Logstash

Tingnan natin kung nakataas ang socket:
netstat -nat |grep 5555

2. Elastic stack: pagsusuri ng mga security log. Logstash

Sinusuri ang mga log sa Kibana.

Matapos tumakbo ang lahat, pumunta sa Kibana - Discover, siguraduhin na ang lahat ay na-configure nang tama, ang larawan ay naki-click!

2. Elastic stack: pagsusuri ng mga security log. Logstash

Ang lahat ng mga log ay nasa lugar at makikita natin ang lahat ng mga patlang at ang kanilang mga halaga!

Konklusyon

Tiningnan namin kung paano magsulat ng isang file ng pagsasaayos ng Logstash, at bilang isang resulta nakakuha kami ng isang parser ng lahat ng mga patlang at mga halaga. Ngayon ay maaari na tayong magtrabaho sa paghahanap at pag-plot para sa mga partikular na field. Susunod sa kurso ay titingnan natin ang visualization sa Kibana at lumikha ng isang simpleng dashboard. Ito ay nagkakahalaga ng pagbanggit na ang Logstash configuration file ay kailangang patuloy na i-update sa ilang mga sitwasyon, halimbawa, kapag gusto naming palitan ang halaga ng isang field mula sa isang numero patungo sa isang salita. Sa mga susunod na artikulo ay gagawin namin ito nang palagian.

Kaya manatiling nakatutokTelegrama, Facebook, VK, TS Solution Blog), Yandex Zen.

Pinagmulan: www.habr.com

Magdagdag ng komento