2. Elastik yığın: təhlükəsizlik jurnallarının təhlili. Logstash

2. Elastik yığın: təhlükəsizlik jurnallarının təhlili. Logstash

Sonda məqalə görüşdük ELK yığını, hansı proqram məhsullarından ibarətdir. Və ELK yığını ilə işləyərkən mühəndisin qarşılaşdığı ilk vəzifə, sonrakı təhlil üçün elasticsearch-da saxlanmaq üçün logları göndərməkdir. Bununla belə, bu, sadəcə olaraq dodaq xidmətidir, elasticsearch qeydləri müəyyən sahələrə və dəyərlərə malik sənədlər şəklində saxlayır, yəni mühəndis son sistemlərdən göndərilən mesajı təhlil etmək üçün müxtəlif vasitələrdən istifadə etməlidir. Bu, bir neçə yolla edilə bilər - API-dən istifadə edərək verilənlər bazasına sənədlər əlavə edəcək bir proqram yazın və ya hazır həllərdən istifadə edin. Bu kursda həll yollarını nəzərdən keçirəcəyik Logstash, ELK yığınının bir hissəsidir. Biz logları son nöqtə sistemlərindən Logstash-a necə göndərə biləcəyimizi nəzərdən keçirəcəyik və sonra təhlil etmək və Elasticsearch verilənlər bazasına yönləndirmək üçün konfiqurasiya faylı quracağıq. Bunun üçün daxil olan sistem kimi Check Point firewall-dan logları götürürük.

Kurs ELK yığınının quraşdırılmasını əhatə etmir, çünki bu mövzuda çox sayda məqalə var, konfiqurasiya komponentini nəzərdən keçirəcəyik.

Logstash konfiqurasiyası üçün fəaliyyət planı tərtib edək:

  1. Elasticsearch-in qeydləri qəbul edəcəyini yoxlamaq (portun funksionallığını və açıqlığını yoxlamaq).
  2. Logstash-a hadisələri necə göndərə biləcəyimizi, bir üsul seçə biləcəyimizi və həyata keçirə biləcəyimizi nəzərdən keçiririk.
  3. Logstash konfiqurasiya faylında Girişi konfiqurasiya edirik.
  4. Log mesajının necə göründüyünü başa düşmək üçün Logstash konfiqurasiya faylında Çıxışı sazlama rejimində konfiqurasiya edirik.
  5. Filtr qurulması.
  6. ElasticSearch-də düzgün Çıxışın qurulması.
  7. Logstash işə salınır.
  8. Kibanada qeydlərin yoxlanılması.

Gəlin hər bir məqama daha ətraflı baxaq:

Elasticsearch-ın qeydləri qəbul edəcəyini yoxlamaq

Bunu etmək üçün, Logstash-ın yerləşdirildiyi sistemdən Elasticsearch-a girişi yoxlamaq üçün curl əmrindən istifadə edə bilərsiniz. Əgər siz autentifikasiya konfiqurasiya etmisinizsə, onda biz də istifadəçini/parolu dəyişməmisinizsə, 9200 portunu göstərərək curl vasitəsilə ötürürük. Aşağıdakı cavaba bənzər cavab alsanız, hər şey qaydasındadır.

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

Cavab alınmazsa, o zaman bir neçə növ xəta ola bilər: elasticsearch prosesi işləmir, səhv port göstərilib və ya port elasticsearch-ın quraşdırıldığı serverdə firewall tərəfindən bloklanıb.

Bir yoxlama nöqtəsi təhlükəsizlik duvarından Logstash-a logları necə göndərə biləcəyinizi nəzərdən keçirək

Check Point idarəetmə serverindən log_exporter yardım proqramından istifadə edərək syslog vasitəsilə Logstash-a qeydlər göndərə bilərsiniz, bu barədə ətraflı burada oxuya bilərsiniz. məqalə, burada yalnız axını yaradan əmri tərk edəcəyik:

cp_log_export ad əlavə et check_point_syslog target-server < > hədəf port 5555 protokolu tcp formatı ümumi oxuma rejimi yarı vahid

< > - Logstash-ın işlədiyi serverin ünvanı, hədəf port 5555 - logları göndərəcəyimiz port, tcp vasitəsilə logların göndərilməsi serveri yükləyə bilər, ona görə də bəzi hallarda udp-dən istifadə etmək daha düzgündür.

Logstash konfiqurasiya faylında INPUT-un qurulması

2. Elastik yığın: təhlükəsizlik jurnallarının təhlili. Logstash

Varsayılan olaraq, konfiqurasiya faylı /etc/logstash/conf.d/ kataloqunda yerləşir. Konfiqurasiya faylı 3 mənalı hissədən ibarətdir: INPUT, FILTER, OUTPUT. IN INPUT sistemin logları haradan alacağını göstəririk FILTER jurnalı təhlil edin - mesajın sahələrə və dəyərlərə necə bölünəcəyini qurun ÇIXDI çıxış axınını konfiqurasiya edirik - təhlil edilmiş qeydlərin göndəriləcəyi yer.

Əvvəlcə INPUT-u konfiqurasiya edək, ola biləcək bəzi növləri nəzərdən keçirək - fayl, tcp və exe.

TCP:

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

rejim => "server"
Logstash-ın əlaqələri qəbul etdiyini göstərir.

port => 5555
host => “10.10.1.205”
Bağlantıları 10.10.1.205 (Logstash) IP ünvanı, 5555 portu ilə qəbul edirik - porta firewall siyasəti ilə icazə verilməlidir.

yazın => "yoxlama nöqtəsi"
Sənədi qeyd edirik, bir neçə daxil olan əlaqəniz varsa çox rahatdır. Sonradan, hər bir əlaqə üçün məntiqi if konstruksiyasından istifadə edərək öz filtrinizi yaza bilərsiniz.

Fayl:

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

Parametrlərin təsviri:
yol => "/var/log/openvas_report/*"
Faylların oxunması lazım olan qovluğu göstəririk.

yazın => "açıq"
Hadisə növü.

start_position => "başlanğıc"
Faylı dəyişdirərkən o, bütün faylı oxuyur; “son” təyin etsəniz, sistem faylın sonunda yeni qeydlərin görünməsini gözləyir.

İcra:

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

Bu girişdən istifadə edərək (yalnız!) qabıq əmri işə salınır və onun çıxışı jurnal mesajına çevrilir.

komanda => "ls -alh"
Çıxışı ilə maraqlandığımız komanda.

interval => 30
Saniyələrlə əmr çağırma intervalı.

Firewalldan logları almaq üçün biz filtri qeydiyyatdan keçiririk tcp və ya udp, logların Logstash-a necə göndərilməsindən asılı olaraq.

Log mesajının necə göründüyünü başa düşmək üçün Logstash konfiqurasiya faylında Çıxışı sazlama rejimində konfiqurasiya edirik.

INPUT-u konfiqurasiya etdikdən sonra log mesajının necə görünəcəyini və log filtrini (parser) konfiqurasiya etmək üçün hansı üsullardan istifadə etmək lazım olduğunu başa düşməliyik.

Bunu etmək üçün, orijinal mesajı görmək üçün nəticəni stdout-a çıxaran filtrdən istifadə edəcəyik; hazırda tam konfiqurasiya faylı belə görünəcək:

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

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

Yoxlamaq üçün əmri işə salın:
sudo /usr/share/logstash/bin//logstash -f /etc/logstash/conf.d/checkpoint.conf
Nəticəni görürük, şəkil tıklanabilir:

2. Elastik yığın: təhlükəsizlik jurnallarının təhlili. Logstash

Onu kopyalasanız, belə görünəcək:

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,

Bu mesajlara baxdıqda, qeydlərin belə göründüyünü başa düşürük: sahə = dəyər və ya açar = dəyər, yəni kv adlı filtr uyğundur. Hər bir konkret hal üçün düzgün filtr seçmək üçün texniki sənədlərdə onlarla tanış olmaq və ya bir dostunuzdan soruşmaq yaxşı olardı.

Filtr qurulması

Son mərhələdə kv seçdik, bu filtrin konfiqurasiyası aşağıda təqdim olunur:

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

Sahəni və dəyəri ayıracağımız simvolu seçirik - “=”. Əgər jurnalda eyni qeydlərimiz varsa, biz verilənlər bazasında yalnız bir nümunəni saxlayırıq, əks halda siz eyni dəyərlər silsiləsi ilə nəticələnəcəksiniz, yəni “foo = some foo= some” mesajı varsa, biz yalnız foo yazırıq. = bəziləri.

ElasticSearch-də düzgün Çıxışın qurulması

Filtr konfiqurasiya edildikdən sonra logları verilənlər bazasına yükləyə bilərsiniz elastik tədqiqat:

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

Sənəd yoxlama nöqtəsi növü ilə imzalanıbsa, biz hadisəni defolt olaraq 10.10.1.200 portunda 9200-də əlaqələri qəbul edən elasticsearch verilənlər bazasında saxlayırıq. Hər bir sənəd müəyyən bir indeksdə saxlanılır, bu halda biz “yoxlama nöqtəsi-” indeksinə + cari vaxt tarixinə qeyd edirik. Hər bir indeksdə müəyyən sahələr dəsti ola bilər və ya mesajda yeni sahə görünəndə avtomatik olaraq yaradılır; sahə parametrləri və onların növü xəritələrdə görünə bilər.

Əgər identifikasiyanı konfiqurasiya etmisinizsə (daha sonra baxacağıq), müəyyən bir indeksə yazmaq üçün etimadnamələr göstərilməlidir, bu nümunədə "cool" parolu ilə "tssolution" dır. Siz logları yalnız müəyyən bir indeksə yazmaq üçün istifadəçi hüquqlarını fərqləndirə bilərsiniz və daha çox deyil.

Logstash-ı işə salın.

Logstash konfiqurasiya faylı:

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

Konfiqurasiya faylının düzgünlüyünü yoxlayırıq:
/usr/share/logstash/bin//logstash -f checkpoint.conf
2. Elastik yığın: təhlükəsizlik jurnallarının təhlili. Logstash

Logstash prosesini başladın:
sudo systemctl start logstash

Prosesin başladığını yoxlayırıq:
sudo systemctl status logstash

2. Elastik yığın: təhlükəsizlik jurnallarının təhlili. Logstash

Soketin bağlı olub olmadığını yoxlayaq:
netstat -nat |grep 5555

2. Elastik yığın: təhlükəsizlik jurnallarının təhlili. Logstash

Kibanada qeydlərin yoxlanılması.

Hər şey işlədikdən sonra Kibana gedin - Kəşf edin, hər şeyin düzgün konfiqurasiya edildiyinə əmin olun, şəkil tıklanabilir!

2. Elastik yığın: təhlükəsizlik jurnallarının təhlili. Logstash

Bütün qeydlər yerindədir və biz bütün sahələri və onların dəyərlərini görə bilərik!

Nəticə

Logstash konfiqurasiya faylının necə yazılacağına baxdıq və nəticədə bütün sahələrin və dəyərlərin təhlilini əldə etdik. İndi biz konkret sahələr üçün axtarış və planlar quraraq işləyə bilərik. Sonrakı kursda biz Kibana-da vizuallaşdırmaya baxacağıq və sadə bir tablo yaradacağıq. Qeyd etmək lazımdır ki, Logstash konfiqurasiya faylı müəyyən hallarda, məsələn, bir sahənin dəyərini rəqəmdən sözə dəyişdirmək istədiyimiz zaman daim yenilənməlidir. Sonrakı məqalələrdə bunu daim edəcəyik.

Buna görə də izləmədə qalın (Teleqram, Facebook, VK, TS Solution Blog), Yandex Zen.

Mənbə: www.habr.com

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