2. Tindanan elastik: analisis log keselamatan. Logstash

2. Tindanan elastik: analisis log keselamatan. Logstash

Pada masa lalu artikel kami bertemu Timbunan ELK, produk perisian apa yang terdiri daripada. Dan tugas pertama yang dihadapi oleh seorang jurutera apabila bekerja dengan timbunan ELK ialah menghantar log untuk penyimpanan dalam elasticsearch untuk analisis seterusnya. Walau bagaimanapun, ini hanyalah perkhidmatan bibir, elasticsearch menyimpan log dalam bentuk dokumen dengan medan dan nilai tertentu, yang bermaksud jurutera mesti menggunakan pelbagai alat untuk menghuraikan mesej yang dihantar dari sistem akhir. Ini boleh dilakukan dalam beberapa cara - tulis sendiri atur cara yang akan menambah dokumen ke pangkalan data menggunakan API, atau gunakan penyelesaian siap sedia. Dalam kursus ini kita akan mempertimbangkan penyelesaiannya Logstash, yang merupakan sebahagian daripada timbunan ELK. Kami akan melihat bagaimana kami boleh menghantar log dari sistem titik akhir ke Logstash, dan kemudian kami akan menyediakan fail konfigurasi untuk menghuraikan dan mengubah hala ke pangkalan data Elasticsearch. Untuk melakukan ini, kami mengambil log daripada tembok api Check Point sebagai sistem masuk.

Kursus ini tidak meliputi pemasangan timbunan ELK, kerana terdapat sejumlah besar artikel mengenai topik ini; kami akan mempertimbangkan komponen konfigurasi.

Mari kita buat pelan tindakan untuk konfigurasi Logstash:

  1. Menyemak bahawa elasticsearch akan menerima log (menyemak kefungsian dan keterbukaan port).
  2. Kami mempertimbangkan cara kami boleh menghantar acara ke Logstash, memilih kaedah dan melaksanakannya.
  3. Kami mengkonfigurasi Input dalam fail konfigurasi Logstash.
  4. Kami mengkonfigurasi Output dalam fail konfigurasi Logstash dalam mod nyahpepijat untuk memahami rupa mesej log.
  5. Menyediakan Penapis.
  6. Menyediakan Output yang betul dalam ElasticSearch.
  7. Logstash dilancarkan.
  8. Menyemak log di Kibana.

Mari kita lihat setiap titik dengan lebih terperinci:

Menyemak bahawa elasticsearch akan menerima log

Untuk melakukan ini, anda boleh menggunakan arahan curl untuk menyemak akses kepada Elasticsearch daripada sistem yang Logstash digunakan. Jika anda telah mengkonfigurasi pengesahan, maka kami juga memindahkan pengguna/kata laluan melalui curl, menentukan port 9200 jika anda tidak menukarnya. Jika anda menerima respons yang serupa dengan yang di bawah, maka semuanya teratur.

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

Jika respons tidak diterima, maka mungkin terdapat beberapa jenis ralat: proses elasticsearch tidak berjalan, port yang salah ditentukan, atau port disekat oleh tembok api pada pelayan tempat elasticsearch dipasang.

Mari lihat bagaimana anda boleh menghantar log ke Logstash daripada tembok api titik semak

Dari pelayan pengurusan Check Point anda boleh menghantar log ke Logstash melalui syslog menggunakan utiliti log_exporter, anda boleh membaca lebih lanjut mengenainya di sini artikel, di sini kita hanya akan meninggalkan arahan yang mencipta aliran:

cp_log_export tambah nama check_point_syslog sasaran-server < > sasaran-port 5555 protokol format tcp generik mod baca separa bersatu

< > - alamat pelayan di mana Logstash berjalan, sasaran-port 5555 - port yang kami akan hantar log, menghantar log melalui tcp boleh memuatkan pelayan, jadi dalam beberapa kes adalah lebih tepat untuk menggunakan udp.

Menyediakan INPUT dalam fail konfigurasi Logstash

2. Tindanan elastik: analisis log keselamatan. Logstash

Secara lalai, fail konfigurasi terletak dalam direktori /etc/logstash/conf.d/. Fail konfigurasi terdiri daripada 3 bahagian yang bermakna: INPUT, FILTER, OUTPUT. DALAM INPUT kami menunjukkan dari mana sistem akan mengambil log dari, masuk FILTER menghuraikan log - sediakan cara membahagikan mesej ke dalam medan dan nilai, dalam OUTPUT kami mengkonfigurasi aliran output - di mana log yang dihuraikan akan dihantar.

Mula-mula, mari kita konfigurasikan INPUT, pertimbangkan beberapa jenis yang boleh - fail, tcp dan exe.

Tcp:

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

mod => "pelayan"
Menunjukkan bahawa Logstash menerima sambungan.

pelabuhan => 5555
hos => "10.10.1.205"
Kami menerima sambungan melalui alamat IP 10.10.1.205 (Logstash), port 5555 - port mesti dibenarkan oleh dasar firewall.

taip => "titik pemeriksaan"
Kami menandakan dokumen itu, sangat mudah jika anda mempunyai beberapa sambungan masuk. Selepas itu, untuk setiap sambungan anda boleh menulis penapis anda sendiri menggunakan logical if construct.

fail:

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

Perihalan tetapan:
laluan => "/var/log/openvas_report/*"
Kami menunjukkan direktori di mana fail perlu dibaca.

taip => "openvas"
Jenis acara.

start_position => "permulaan"
Apabila menukar fail, ia membaca keseluruhan fail; jika anda menetapkan "tamat", sistem menunggu rekod baharu muncul di penghujung fail.

Exec:

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

Menggunakan input ini, perintah shell (sahaja!) dilancarkan dan outputnya ditukar menjadi mesej log.

arahan => "ls -alh"
Perintah yang outputnya kita minati.

selang => 30
Selang seruan perintah dalam beberapa saat.

Untuk menerima log daripada tembok api, kami mendaftarkan penapis tcp atau udp, bergantung pada cara log dihantar ke Logstash.

Kami mengkonfigurasi Output dalam fail konfigurasi Logstash dalam mod nyahpepijat untuk memahami rupa mesej log

Selepas kita telah mengkonfigurasi INPUT, kita perlu memahami bagaimana mesej log akan kelihatan dan kaedah yang perlu digunakan untuk mengkonfigurasi penapis log (penghuraikan).

Untuk melakukan ini, kami akan menggunakan penapis yang mengeluarkan hasil kepada stdout untuk melihat mesej asal; fail konfigurasi lengkap pada masa ini akan kelihatan seperti ini:

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

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

Jalankan arahan untuk menyemak:
sudo /usr/share/logstash/bin//logstash -f /etc/logstash/conf.d/checkpoint.conf
Kami melihat hasilnya, gambar boleh diklik:

2. Tindanan elastik: analisis log keselamatan. Logstash

Jika anda menyalinnya ia akan kelihatan seperti ini:

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,

Melihat mesej ini, kami memahami bahawa log kelihatan seperti: medan = nilai atau kunci = nilai, yang bermaksud penapis yang dipanggil kv adalah sesuai. Untuk memilih penapis yang betul untuk setiap kes tertentu, adalah idea yang baik untuk membiasakan diri dengan mereka dalam dokumentasi teknikal, atau bertanya kepada rakan.

Menyediakan Penapis

Pada peringkat terakhir kami memilih kv, konfigurasi penapis ini dibentangkan di bawah:

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

Kami memilih simbol yang mana kami akan membahagikan medan dan nilai - "=". Jika kami mempunyai entri yang sama dalam log, kami hanya menyimpan satu contoh dalam pangkalan data, jika tidak, anda akan mendapat pelbagai nilai yang sama, iaitu, jika kami mempunyai mesej "foo = some foo=some" kami hanya menulis foo = beberapa.

Menyediakan Output yang betul dalam ElasticSearch

Setelah Penapis dikonfigurasikan, anda boleh memuat naik log ke pangkalan data elasticsearch:

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

Jika dokumen ditandatangani dengan jenis pusat pemeriksaan, kami menyimpan acara itu ke pangkalan data elasticsearch, yang menerima sambungan pada 10.10.1.200 pada port 9200 secara lalai. Setiap dokumen disimpan ke indeks tertentu, dalam kes ini kita simpan ke indeks "checkpoint-" + tarikh masa semasa. Setiap indeks boleh mempunyai set medan tertentu, atau dibuat secara automatik apabila medan baharu muncul dalam mesej; tetapan medan dan jenisnya boleh dilihat dalam pemetaan.

Jika anda telah mengkonfigurasi pengesahan (kami akan melihatnya kemudian), kelayakan untuk menulis ke indeks tertentu mesti dinyatakan, dalam contoh ini ia adalah "tssolution" dengan kata laluan "cool". Anda boleh membezakan hak pengguna untuk menulis log hanya pada indeks tertentu dan tidak lebih.

Lancarkan Logstash.

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

Kami menyemak fail konfigurasi untuk ketepatan:
/usr/share/logstash/bin//logstash -f checkpoint.conf
2. Tindanan elastik: analisis log keselamatan. Logstash

Mulakan proses Logstash:
sudo systemctl start logstash

Kami menyemak bahawa proses telah bermula:
logstash status sudo systemctl

2. Tindanan elastik: analisis log keselamatan. Logstash

Mari periksa sama ada soket terpasang:
netstat -nat |grep 5555

2. Tindanan elastik: analisis log keselamatan. Logstash

Menyemak log di Kibana.

Selepas semuanya berjalan, pergi ke Kibana - Temui, pastikan semuanya dikonfigurasikan dengan betul, gambar boleh diklik!

2. Tindanan elastik: analisis log keselamatan. Logstash

Semua log tersedia dan kita boleh melihat semua medan dan nilainya!

Kesimpulan

Kami melihat cara menulis fail konfigurasi Logstash, dan sebagai hasilnya kami mendapat penghurai semua medan dan nilai. Kini kita boleh bekerja dengan mencari dan merancang untuk medan tertentu. Seterusnya dalam kursus ini kita akan melihat visualisasi dalam Kibana dan mencipta papan pemuka yang mudah. Perlu dinyatakan bahawa fail konfigurasi Logstash perlu sentiasa dikemas kini dalam situasi tertentu, sebagai contoh, apabila kita ingin menggantikan nilai medan daripada nombor kepada perkataan. Dalam artikel seterusnya kami akan melakukan ini secara berterusan.

Jadi nantikan (Telegram, Facebook, VK, Blog Penyelesaian TS), Yandex Zen.

Sumber: www.habr.com

Tambah komen