2. Էլաստիկ կույտ. անվտանգության տեղեկամատյանների վերլուծություն: Լոգստաշ

2. Էլաստիկ կույտ. անվտանգության տեղեկամատյանների վերլուծություն: Լոգստաշ

Անցյալում Հոդված մենք հանդիպեցինք ELK բուրգ, ինչ ծրագրային արտադրանքներից է այն բաղկացած։ Եվ առաջին խնդիրը, որին բախվում է ինժեները, երբ աշխատում է ELK stack-ի հետ, դա elasticsearch-ում տեղեկամատյաններ ուղարկելն է՝ հետագա վերլուծության համար: Այնուամենայնիվ, սա պարզապես շուրթերի ծառայություն է, elasticsearch-ը պահպանում է տեղեկամատյանները փաստաթղթերի տեսքով՝ որոշակի դաշտերով և արժեքներով, ինչը նշանակում է, որ ինժեները պետք է օգտագործի տարբեր գործիքներ՝ վերջնական համակարգերից ուղարկված հաղորդագրությունը վերլուծելու համար: Դա կարելի է անել մի քանի եղանակով՝ ինքներդ գրեք ծրագիր, որը կավելացնի փաստաթղթեր տվյալների բազա՝ օգտագործելով API-ն, կամ օգտագործել պատրաստի լուծումներ: Այս դասընթացում մենք կքննարկենք լուծումը Լոգստաշը, որը ELK stack-ի մի մասն է: Մենք կնայենք, թե ինչպես կարող ենք վերջնակետ համակարգերից տեղեկամատյաններ ուղարկել Logstash, այնուհետև մենք կստեղծենք կազմաձևման ֆայլ՝ վերլուծելու և Elasticsearch տվյալների բազան վերահղելու համար: Դա անելու համար մենք վերցնում ենք տեղեկամատյանները Check Point firewall-ից որպես մուտքային համակարգ:

Դասընթացը չի ներառում ELK stack-ի տեղադրումը, քանի որ այս թեմայի վերաբերյալ հսկայական քանակությամբ հոդվածներ կան, մենք կքննարկենք կազմաձևման բաղադրիչը:

Եկեք կազմենք գործողությունների ծրագիր Logstash-ի կազմաձևման համար.

  1. Ստուգելով, որ elasticsearch-ը կընդունի տեղեկամատյանները (ստուգելով պորտի ֆունկցիոնալությունը և բացությունը):
  2. Մենք դիտարկում ենք, թե ինչպես կարող ենք իրադարձություններ ուղարկել Logstash, ընտրել մեթոդ և իրականացնել այն:
  3. Մենք կարգավորում ենք Input-ը Logstash կազմաձևման ֆայլում:
  4. Մենք կարգավորում ենք Արդյունքը Logstash կազմաձևման ֆայլում վրիպազերծման ռեժիմում, որպեսզի հասկանանք, թե ինչ տեսք ունի գրանցման հաղորդագրությունը:
  5. Զտիչի կարգավորում:
  6. ElasticSearch-ում ճիշտ ելքի կարգավորում:
  7. Logstash-ը գործարկվում է:
  8. Կիբանայում գրանցամատյանների ստուգում:

Դիտարկենք յուրաքանչյուր կետ ավելի մանրամասն.

Ստուգելով, որ elasticsearch-ը կընդունի տեղեկամատյանները

Դա անելու համար կարող եք օգտագործել curl հրամանը՝ ստուգելու մուտքը Elasticsearch այն համակարգից, որի վրա տեղակայված է Logstash-ը: Եթե ​​նույնականացումը կազմաձևված է, ապա մենք նաև փոխանցում ենք օգտվողին/գաղտնաբառը curl-ի միջոցով՝ նշելով 9200 պորտը, եթե այն չեք փոխել: Եթե ​​ստորև ներկայացվածի նման պատասխան եք ստանում, ապա ամեն ինչ կարգին է։

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

Եթե ​​պատասխանը չի ստացվել, ապա կարող են լինել մի քանի տեսակի սխալներ. elasticsearch գործընթացը չի աշխատում, սխալ պորտ է նշված կամ պորտը արգելափակված է սերվերի firewall-ով, որտեղ տեղադրված է elasticsearch-ը:

Եկեք նայենք, թե ինչպես կարող եք տեղեկամատյաններ ուղարկել Logstash-ին ստուգիչ կետի firewall-ից

Check Point կառավարման սերվերից դուք կարող եք տեղեկամատյաններ ուղարկել Logstash-ին syslog-ի միջոցով՝ օգտագործելով log_exporter կոմունալ ծրագիրը, դրա մասին ավելին կարող եք կարդալ այստեղ: Հոդված, այստեղ մենք կթողնենք միայն հոսքը ստեղծող հրամանը.

cp_log_export ավելացնել անուն check_point_syslog թիրախ-սերվեր > target-port 5555 արձանագրություն tcp ձևաչափ ընդհանուր ընթերցման ռեժիմ կիսամիավորված

> - սերվերի հասցեն, որի վրա աշխատում է Logstash-ը, target-port 5555 - պորտը, որին մենք կուղարկենք տեղեկամատյանները, tcp-ի միջոցով տեղեկամատյաններ ուղարկելը կարող է բեռնել սերվերը, ուստի որոշ դեպքերում ավելի ճիշտ է օգտագործել udp-ը: .

INPUT-ի կարգավորում Logstash կազմաձևման ֆայլում

2. Էլաստիկ կույտ. անվտանգության տեղեկամատյանների վերլուծություն: Լոգստաշ

Լռելյայնորեն, կազմաձևման ֆայլը գտնվում է /etc/logstash/conf.d/ գրացուցակում: Կազմաձևման ֆայլը բաղկացած է 3 իմաստալից մասերից՝ INPUT, FILTER, OUTPUT: IN Մուտքային մենք նշում ենք, թե որտեղից է համակարգը վերցնելու տեղեկամատյանները՝ ներս Ֆիլտր վերլուծել տեղեկամատյանը - կարգավորել, թե ինչպես կարելի է հաղորդագրությունը բաժանել դաշտերի և արժեքների, in ԹՈՂԱՐԿՈՒՄ մենք կարգավորում ենք ելքային հոսքը, որտեղ կուղարկվեն վերլուծված տեղեկամատյանները:

Նախ, եկեք կարգավորենք INPUT-ը, դիտարկենք որոշ տեսակներ, որոնք կարող են լինել՝ ֆայլ, tcp և exe:

TCP:

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

ռեժիմ => «սերվեր»
Ցույց է տալիս, որ Logstash-ն ընդունում է կապեր:

նավահանգիստ => 5555
հյուրընկալող => «10.10.1.205»
Մենք ընդունում ենք միացումներ IP հասցեով 10.10.1.205 (Logstash), նավահանգիստ 5555 - նավահանգիստը պետք է թույլատրվի firewall-ի քաղաքականության համաձայն:

տեսակ => «անցակետ»
Մենք նշում ենք փաստաթուղթը, շատ հարմար է, եթե դուք ունեք մի քանի մուտքային կապեր: Հետագայում, յուրաքանչյուր կապի համար կարող եք գրել ձեր սեփական զտիչը՝ օգտագործելով տրամաբանական if կոնստրուկտը:

Պատկեր:

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

Կարգավորումների նկարագրություն.
ճանապարհ => "/var/log/openvas_report/*"
Մենք նշում ենք այն գրացուցակը, որտեղ անհրաժեշտ է կարդալ ֆայլերը:

տեսակ => «openvas»
Միջոցառման տեսակը.

start_position => «սկիզբ»
Ֆայլը փոխելիս այն կարդում է ամբողջ ֆայլը, եթե «վերջ» եք սահմանում, համակարգը սպասում է, որ ֆայլի վերջում հայտնվեն նոր գրառումներ:

Exec:

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

Օգտագործելով այս մուտքագրումը, գործարկվում է (միայն!) shell հրամանը, և դրա ելքը վերածվում է տեղեկամատյան հաղորդագրության:

հրաման => «ls -alh»
Հրաման, որի արդյունքը մեզ հետաքրքրում է։

ընդմիջում => 30
Հրամանի կանչի միջակայքը վայրկյաններով:

Firewall-ից տեղեկամատյաններ ստանալու համար մենք գրանցում ենք զտիչ tcp կամ udp, կախված նրանից, թե ինչպես են տեղեկամատյանները ուղարկվում Logstash:

Մենք կարգավորում ենք Արդյունքը Logstash կազմաձևման ֆայլում վրիպազերծման ռեժիմում, որպեսզի հասկանանք, թե ինչ տեսք ունի գրանցամատյանի հաղորդագրությունը

INPUT-ը կազմաձևելուց հետո մենք պետք է հասկանանք, թե ինչ տեսք կունենա տեղեկամատյան հաղորդագրությունը և ինչ մեթոդներ պետք է օգտագործվեն լոգարիթմական ֆիլտրը (վերլուծիչ) կարգավորելու համար:

Դա անելու համար մենք կօգտագործենք զտիչ, որը արդյունքը կթողարկի stdout-ին՝ սկզբնական հաղորդագրությունը դիտելու համար: ամբողջական կազմաձևման ֆայլը տվյալ պահին կունենա հետևյալ տեսքը.

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

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

Գործարկեք հրամանը՝ ստուգելու համար.
sudo /usr/share/logstash/bin//logstash -f /etc/logstash/conf.d/checkpoint.conf
Մենք տեսնում ենք արդյունքը, նկարը սեղմելի է.

2. Էլաստիկ կույտ. անվտանգության տեղեկամատյանների վերլուծություն: Լոգստաշ

Եթե ​​պատճենեք այն, այն կունենա հետևյալ տեսքը.

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,

Նայելով այս հաղորդագրություններին՝ մենք հասկանում ենք, որ տեղեկամատյանները նման են՝ դաշտ = արժեք կամ բանալի = արժեք, ինչը նշանակում է, որ kv կոչվող զտիչը հարմար է: Յուրաքանչյուր կոնկրետ դեպքի համար ճիշտ ֆիլտր ընտրելու համար լավ կլինի ծանոթանալ դրանց տեխնիկական փաստաթղթերում կամ խնդրել ընկերոջը:

Զտիչի կարգավորում

Վերջին փուլում մենք ընտրեցինք kv, այս ֆիլտրի կոնֆիգուրացիան ներկայացված է ստորև.

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

Մենք ընտրում ենք այն խորհրդանիշը, որով մենք կբաժանենք դաշտը և արժեքը՝ «=»: Եթե ​​գրանցամատյանում ունենք նույնական գրառումներ, մենք պահում ենք տվյալների բազայում միայն մեկ օրինակ, հակառակ դեպքում դուք կհայտնվեք նույն արժեքների զանգվածով, այսինքն՝ եթե ունենք «foo = some foo=some» հաղորդագրությունը, մենք գրում ենք միայն foo: = որոշ.

ElasticSearch-ում ճիշտ ելքի կարգավորում

Երբ զտիչը կազմաձևվի, կարող եք տեղեկամատյանները վերբեռնել տվյալների բազա առաձգական որոնում:

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

Եթե ​​փաստաթուղթը ստորագրված է անցակետի տիպով, մենք իրադարձությունը պահում ենք elasticsearch տվյալների բազայում, որը լռելյայն ընդունում է կապերը 10.10.1.200-ին 9200 նավահանգստում: Յուրաքանչյուր փաստաթուղթ պահվում է որոշակի ինդեքսում, այս դեպքում մենք պահում ենք «հսկիչ կետ-» + ընթացիկ ժամի ամսաթիվը: Յուրաքանչյուր ինդեքս կարող է ունենալ որոշակի դաշտերի հավաքածու կամ ստեղծվում է ավտոմատ կերպով, երբ նոր դաշտ է հայտնվում հաղորդագրության մեջ, դաշտի կարգավորումները և դրանց տեսակը կարող են դիտվել քարտեզագրումներում:

Եթե ​​նույնականացումը կազմաձևված է (մենք կանդրադառնանք ավելի ուշ), պետք է նշվեն որոշակի ինդեքսում գրելու հավատարմագրերը, այս օրինակում այն ​​«tssolution» է՝ «cool» գաղտնաբառով: Դուք կարող եք տարբերակել տեղեկամատյաններ գրելու օգտատերերի իրավունքները միայն կոնկրետ ինդեքսում և ոչ ավելին:

Գործարկել Logstash-ը:

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

Մենք ստուգում ենք կազմաձևման ֆայլը ճիշտության համար.
/usr/share/logstash/bin//logstash -f checkpoint.conf
2. Էլաստիկ կույտ. անվտանգության տեղեկամատյանների վերլուծություն: Լոգստաշ

Սկսեք Logstash գործընթացը.
sudo systemctl- ը սկսել logstash- ը

Մենք ստուգում ենք, որ գործընթացը սկսվել է.
sudo systemctl կարգավիճակի logstash

2. Էլաստիկ կույտ. անվտանգության տեղեկամատյանների վերլուծություն: Լոգստաշ

Եկեք ստուգենք, արդյոք վարդակը վեր է:
netstat -nat |grep 5555

2. Էլաստիկ կույտ. անվտանգության տեղեկամատյանների վերլուծություն: Լոգստաշ

Կիբանայում գրանցամատյանների ստուգում:

Ամեն ինչ գործարկվելուց հետո գնացեք Kibana - Discover, համոզվեք, որ ամեն ինչ ճիշտ է կազմաձևված, նկարը սեղմելի է:

2. Էլաստիկ կույտ. անվտանգության տեղեկամատյանների վերլուծություն: Լոգստաշ

Բոլոր տեղեկամատյանները տեղում են, և մենք կարող ենք տեսնել բոլոր դաշտերը և դրանց արժեքները:

Ամփոփում

Մենք նայեցինք, թե ինչպես գրել Logstash կոնֆիգուրացիայի ֆայլ, և արդյունքում ստացանք բոլոր դաշտերի և արժեքների վերլուծիչ: Այժմ մենք կարող ենք աշխատել որոշակի դաշտերի որոնման և գծագրման հետ: Հաջորդ դասընթացի ընթացքում մենք կդիտարկենք վիզուալիզացիան Kibana-ում և կստեղծենք պարզ վահանակ: Հարկ է նշել, որ Logstash կոնֆիգուրացիայի ֆայլը պետք է անընդհատ թարմացվի որոշակի իրավիճակներում, օրինակ, երբ մենք ուզում ենք դաշտի արժեքը թվից բառի փոխարինել։ Հետագա հոդվածներում մենք դա անելու ենք անընդհատ:

Ուրեմն մնացեք լարվածTelegram, facebook, VK, TS Solution բլոգ), Յանդեքս Զեն.

Source: www.habr.com

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