2. Tumpukan elastis: analisis log keamanan. simpanan log

2. Tumpukan elastis: analisis log keamanan. simpanan log

Terakhir Artikel kami bertemu tumpukan rusa, produk perangkat lunak apa yang terdiri darinya. Dan tugas pertama yang dihadapi seorang insinyur ketika bekerja dengan tumpukan ELK adalah mengirimkan log untuk disimpan di elasticsearch untuk analisis selanjutnya. Namun ini hanya basa-basi saja, elasticsearch menyimpan log dalam bentuk dokumen dengan field dan nilai tertentu, yang berarti engineer harus menggunakan berbagai alat untuk mengurai pesan yang dikirim dari sistem akhir. Ini dapat dilakukan dengan beberapa cara - tulis sendiri program yang akan menambahkan dokumen ke database menggunakan API, atau menggunakan solusi yang sudah jadi. Dalam kursus ini kita akan mempertimbangkan solusinya Logstash, yang merupakan bagian dari tumpukan ELK. Kita akan melihat bagaimana kita dapat mengirim log dari sistem titik akhir ke Logstash, lalu kita akan menyiapkan file konfigurasi untuk diurai dan dialihkan ke database Elasticsearch. Untuk melakukan ini, kami mengambil log dari firewall Check Point sebagai sistem masuk.

Kursus ini tidak mencakup instalasi ELK stack, karena ada banyak sekali artikel tentang topik ini; kami akan mempertimbangkan komponen konfigurasi.

Mari buat rencana tindakan untuk konfigurasi Logstash:

  1. Memeriksa apakah elasticsearch akan menerima log (memeriksa fungsionalitas dan keterbukaan port).
  2. Kami mempertimbangkan bagaimana kami dapat mengirim peristiwa ke Logstash, memilih metode, dan menerapkannya.
  3. Kami mengonfigurasi Input di file konfigurasi Logstash.
  4. Kami mengonfigurasi Output di file konfigurasi Logstash dalam mode debug untuk memahami seperti apa pesan lognya.
  5. Menyiapkan Filter.
  6. Menyiapkan Output yang benar di ElasticSearch.
  7. Logstash diluncurkan.
  8. Memeriksa log di Kibana.

Mari kita lihat setiap poin lebih detail:

Memeriksa apakah elasticsearch akan menerima log

Untuk melakukan ini, Anda dapat menggunakan perintah curl untuk memeriksa akses ke Elasticsearch dari sistem tempat Logstash diterapkan. Jika Anda telah mengkonfigurasi otentikasi, maka kami juga mentransfer pengguna/kata sandi melalui curl, menentukan port 9200 jika Anda belum mengubahnya. Jika Anda menerima respons yang mirip dengan di bawah ini, berarti semuanya beres.

[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, mungkin ada beberapa jenis kesalahan: proses elasticsearch tidak berjalan, port yang ditentukan salah, atau port diblokir oleh firewall di server tempat elasticsearch diinstal.

Mari kita lihat bagaimana Anda dapat mengirim log ke Logstash dari firewall titik pemeriksaan

Dari server manajemen Check Point Anda dapat mengirim log ke Logstash melalui syslog menggunakan utilitas log_exporter, Anda dapat membaca lebih lanjut di sini Artikel, di sini kita hanya akan menyisakan perintah yang membuat aliran:

cp_log_export tambahkan nama check_point_syslog target-server < > target-port 5555 protokol format tcp mode baca generik semi-terpadu

< > - alamat server tempat Logstash dijalankan, port target 5555 - port tujuan pengiriman log, pengiriman log melalui tcp dapat memuat server, jadi dalam beberapa kasus lebih tepat menggunakan udp.

Menyiapkan INPUT di file konfigurasi Logstash

2. Tumpukan elastis: analisis log keamanan. simpanan log

Secara default, file konfigurasi terletak di direktori /etc/logstash/conf.d/. File konfigurasi terdiri dari 3 bagian penting: INPUT, FILTER, OUTPUT. DI DALAM INPUT kami menunjukkan dari mana sistem akan mengambil log, masuk FILTER parsing log - atur cara membagi pesan menjadi bidang dan nilai, di KELUARAN kami mengonfigurasi aliran keluaran - tempat log yang diurai akan dikirim.

Pertama, mari kita konfigurasikan INPUT, pertimbangkan beberapa jenis yang bisa berupa - file, tcp dan exe.

TCP:

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

modus => "server"
Menunjukkan bahwa Logstash menerima koneksi.

pelabuhan => 5555
tuan rumah => β€œ10.10.1.205”
Kami menerima koneksi melalui alamat IP 10.10.1.205 (Logstash), port 5555 - port tersebut harus diizinkan oleh kebijakan firewall.

ketik => "pos pemeriksaan"
Kami menandai dokumen, sangat nyaman jika Anda memiliki beberapa koneksi masuk. Selanjutnya, untuk setiap koneksi Anda dapat menulis filter Anda sendiri menggunakan konstruksi logika if.

File:

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

Deskripsi pengaturan:
jalur => "/var/log/openvas_report/*"
Kami menunjukkan direktori di mana file perlu dibaca.

ketik => "openvas"
Jenis acara.

start_position => "awal"
Saat mengubah file, ia membaca seluruh file; jika Anda menyetel "akhir", sistem menunggu catatan baru muncul di akhir file.

Eksekutif:

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

Dengan menggunakan masukan ini, perintah shell (hanya!) diluncurkan dan keluarannya diubah menjadi pesan log.

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

selang waktu => 30
Interval pemanggilan perintah dalam hitungan detik.

Untuk menerima log dari firewall, kami mendaftarkan filter tcp ΠΈΠ»ΠΈ udp, bergantung pada cara log dikirim ke Logstash.

Kami mengonfigurasi Output di file konfigurasi Logstash dalam mode debug untuk memahami seperti apa pesan lognya

Setelah kita mengkonfigurasi INPUT, kita perlu memahami seperti apa tampilan pesan log dan metode apa yang perlu digunakan untuk mengkonfigurasi filter log (parser).

Untuk melakukan ini, kita akan menggunakan filter yang menampilkan hasilnya ke stdout untuk melihat pesan asli; file konfigurasi lengkap saat ini akan terlihat seperti ini:

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

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

Jalankan perintah untuk memeriksa:
sudo /usr/share/logstash/bin//logstash -f /etc/logstash/conf.d/checkpoint.conf
Kita lihat hasilnya, gambarnya bisa diklik:

2. Tumpukan elastis: analisis log keamanan. simpanan log

Jika dicopy maka akan terlihat 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 pesan-pesan ini, kami memahami bahwa log terlihat seperti: field = value atau key = value, yang berarti filter yang disebut kv cocok. Untuk memilih filter yang tepat untuk setiap kasus tertentu, sebaiknya Anda membiasakan diri dengannya di dokumentasi teknis, atau bertanya kepada teman.

Menyiapkan Filter

Pada tahap terakhir kami memilih kv, konfigurasi filter ini disajikan di bawah ini:

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

Kami memilih simbol yang akan digunakan untuk membagi bidang dan nilai - β€œ=”. Jika kita memiliki entri yang identik dalam log, kita hanya menyimpan satu contoh dalam database, jika tidak, Anda akan mendapatkan array dengan nilai yang sama, yaitu, jika kita memiliki pesan β€œfoo = some foo=some” kita hanya menulis foo = beberapa.

Menyiapkan Output yang benar di ElasticSearch

Setelah Filter dikonfigurasi, Anda dapat mengunggah log ke database pencarian elastis:

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

Jika dokumen ditandatangani dengan tipe checkpoint, kami menyimpan acara ke database elasticsearch, yang menerima koneksi pada 10.10.1.200 pada port 9200 secara default. Setiap dokumen disimpan ke indeks tertentu, dalam hal ini kita menyimpan ke indeks β€œpos pemeriksaan-” + tanggal waktu saat ini. Setiap indeks dapat memiliki kumpulan bidang tertentu, atau dibuat secara otomatis ketika bidang baru muncul dalam pesan; pengaturan bidang dan jenisnya dapat dilihat dalam pemetaan.

Jika Anda telah mengonfigurasi otentikasi (kita akan melihatnya nanti), kredensial untuk menulis ke indeks tertentu harus ditentukan, dalam contoh ini adalah "tssolution" dengan kata sandi "keren". Anda dapat membedakan hak pengguna untuk menulis log hanya pada indeks tertentu dan tidak lebih.

Luncurkan Logstash.

File 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 memeriksa kebenaran file konfigurasi:
/usr/share/logstash/bin//logstash -f checkpoint.conf
2. Tumpukan elastis: analisis log keamanan. simpanan log

Mulai proses Logstash:
sudo systemctl mulai logstash

Kami memeriksa apakah prosesnya telah dimulai:
sudo systemctl status logstash

2. Tumpukan elastis: analisis log keamanan. simpanan log

Mari kita periksa apakah soketnya sudah habis:
netstat -nat |grep 5555

2. Tumpukan elastis: analisis log keamanan. simpanan log

Memeriksa log di Kibana.

Setelah semuanya berjalan, buka Kibana - Discover, pastikan semuanya sudah dikonfigurasi dengan benar, gambar dapat diklik!

2. Tumpukan elastis: analisis log keamanan. simpanan log

Semua log sudah ada dan kita dapat melihat semua bidang dan nilainya!

Kesimpulan

Kami melihat cara menulis file konfigurasi Logstash, dan sebagai hasilnya kami mendapatkan parser dari semua bidang dan nilai. Sekarang kita dapat bekerja dengan mencari dan merencanakan bidang tertentu. Selanjutnya dalam kursus ini kita akan melihat visualisasi di Kibana dan membuat dashboard sederhana. Perlu disebutkan bahwa file konfigurasi Logstash perlu terus diperbarui dalam situasi tertentu, misalnya, ketika kita ingin mengganti nilai bidang dari angka menjadi kata. Di artikel selanjutnya kami akan melakukan ini terus-menerus.

Jadi pantau terus (Telegram, Facebook, VK, Blog Solusi TS), Yandex Zen.

Sumber: www.habr.com

Tambah komentar