2. Elastik yığın: güvenlik günlüklerinin analizi. Günlük deposu

2. Elastik yığın: güvenlik günlüklerinin analizi. Günlük deposu

Geçmişte Makale tanıştık ELK yığını, hangi yazılım ürünlerinden oluştuğunu. Ve bir mühendisin ELK yığınıyla çalışırken karşılaştığı ilk görev, sonraki analiz için günlükleri elasticsearch'te depolanmak üzere göndermektir. Ancak bu sadece sözde bir hizmettir; elasticsearch, günlükleri belirli alan ve değerlere sahip belgeler biçiminde saklar; bu da mühendisin, uç sistemlerden gönderilen mesajı ayrıştırmak için çeşitli araçlar kullanması gerektiği anlamına gelir. Bu birkaç yolla yapılabilir - API'yi kullanarak veritabanına belge ekleyecek veya hazır çözümleri kullanacak bir programı kendiniz yazın. Bu derste çözümü ele alacağız LogstashELK yığınının bir parçası olan. Günlükleri uç nokta sistemlerinden Logstash'a nasıl gönderebileceğimize bakacağız ve ardından ayrıştırmak ve Elasticsearch veritabanına yönlendirmek için bir yapılandırma dosyası oluşturacağız. Bunun için Check Point güvenlik duvarından gelen sistem olarak logları alıyoruz.

Bu konuyla ilgili çok sayıda makale olduğundan, kurs ELK yığınının kurulumunu kapsamamaktadır; yapılandırma bileşenini ele alacağız.

Logstash yapılandırması için bir eylem planı hazırlayalım:

  1. Elasticsearch'ün günlükleri kabul edip etmeyeceğinin kontrol edilmesi (bağlantı noktasının işlevselliğinin ve açıklığının kontrol edilmesi).
  2. Logstash'a nasıl olay gönderebileceğimizi, bir yöntem seçip uygulayabileceğimizi düşünüyoruz.
  3. Logstash yapılandırma dosyasında Girişi yapılandırıyoruz.
  4. Log mesajının nasıl göründüğünü anlamak için Logstash yapılandırma dosyasındaki Output'u hata ayıklama modunda yapılandırıyoruz.
  5. Filtreyi Ayarlama.
  6. ElasticSearch'te doğru Çıkışı ayarlama.
  7. Logstash başlatılıyor.
  8. Kibana'daki günlükler kontrol ediliyor.

Her noktaya daha ayrıntılı olarak bakalım:

Elasticsearch'ün günlükleri kabul edip etmeyeceğini kontrol etme

Bunu yapmak için Logstash'ın konuşlandırıldığı sistemden Elasticsearch'e erişimi kontrol etmek için curl komutunu kullanabilirsiniz. Kimlik doğrulamayı yapılandırdıysanız, kullanıcı/şifreyi de curl aracılığıyla aktarırız, eğer değiştirmediyseniz bağlantı noktası 9200'ü belirtiriz. Aşağıdakine benzer bir yanıt alırsanız her şey yolunda demektir.

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

Yanıt alınmazsa, birkaç tür hata olabilir: elasticsearch işlemi çalışmıyor, yanlış bağlantı noktası belirtildi veya bağlantı noktası, elasticsearch'ün kurulu olduğu sunucudaki bir güvenlik duvarı tarafından engellendi.

Bir kontrol noktası güvenlik duvarından Logstash'a nasıl günlük gönderebileceğinize bakalım

Check Point yönetim sunucusundan log_exporter yardımcı programını kullanarak günlükleri syslog aracılığıyla Logstash'a gönderebilirsiniz, bununla ilgili daha fazla bilgiyi buradan edinebilirsiniz. Makale, burada yalnızca akışı oluşturan komutu bırakacağız:

cp_log_export ad ekle check_point_syslog hedef sunucu < > hedef bağlantı noktası 5555 protokolü tcp biçimi genel okuma modu yarı birleşik

< > - Logstash'ın çalıştığı sunucunun adresi, hedef port 5555 - logları göndereceğimiz port, tcp üzerinden log göndermek sunucuyu yükleyebilir, bu nedenle bazı durumlarda udp kullanmak daha doğrudur.

Logstash yapılandırma dosyasında INPUT'u ayarlama

2. Elastik yığın: güvenlik günlüklerinin analizi. Günlük deposu

Varsayılan olarak yapılandırma dosyası /etc/logstash/conf.d/ dizininde bulunur. Yapılandırma dosyası 3 anlamlı bölümden oluşur: GİRİŞ, FİLTRE, ÇIKIŞ. İÇİNDE GİRİŞ sistemin logları nereden alacağını belirtiyoruz FILTRE günlüğü ayrıştır - mesajın alanlara ve değerlere nasıl bölüneceğini ayarlayın. ÇIKTI ayrıştırılan günlüklerin gönderileceği çıkış akışını yapılandırıyoruz.

Öncelikle INPUT'u yapılandıralım, dosya, tcp ve exe olabilecek bazı türleri ele alalım.

TCP:

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

mod => "sunucu"
Logstash'ın bağlantıları kabul ettiğini gösterir.

bağlantı noktası => 5555
ana bilgisayar => “10.10.1.205”
10.10.1.205 IP adresi (Logstash), 5555 numaralı bağlantı noktası aracılığıyla bağlantıları kabul ediyoruz - bağlantı noktasına güvenlik duvarı politikası tarafından izin verilmesi gerekir.

type => "kontrol noktası"
Birkaç gelen bağlantınız varsa, çok uygun bir şekilde belgeyi işaretliyoruz. Daha sonra her bağlantı için mantıksal if yapısını kullanarak kendi filtrenizi yazabilirsiniz.

Dosya:

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

Ayarların açıklaması:
yol => "/var/log/openvas_report/*"
Dosyaların okunması gereken dizini belirtiyoruz.

yazın => "openvas"
Etkinlik tipi.

start_position => "başlangıç"
Bir dosyayı değiştirirken dosyanın tamamını okur; “son” seçeneğini belirlerseniz sistem, dosyanın sonunda yeni kayıtların görünmesini bekler.

Yürütme:

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

Bu girişi kullanarak, (yalnızca!) bir kabuk komutu başlatılır ve çıktısı bir günlük mesajına dönüştürülür.

komut => "ls -alh"
Çıktısıyla ilgilendiğimiz komut.

aralık => 30
Saniye cinsinden komut çağırma aralığı.

Güvenlik duvarından günlükleri almak için bir filtre kaydediyoruz tcp veya udp, günlüklerin Logstash'a nasıl gönderildiğine bağlı olarak.

Günlük mesajının nasıl göründüğünü anlamak için Logstash yapılandırma dosyasındaki Çıkışı hata ayıklama modunda yapılandırıyoruz

INPUT'u yapılandırdıktan sonra log mesajının nasıl görüneceğini ve log filtresini (parser) yapılandırmak için hangi yöntemlerin kullanılması gerektiğini anlamamız gerekiyor.

Bunu yapmak için, orijinal mesajı görüntülemek amacıyla sonucu stdout'a çıkaran bir filtre kullanacağız; şu anda tam yapılandırma dosyası şu şekilde görünecektir:

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

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

Kontrol etmek için komutu çalıştırın:
sudo /usr/share/logstash/bin//logstash -f /etc/logstash/conf.d/checkpoint.conf
Sonucu görüyoruz, resim tıklanabilir:

2. Elastik yığın: güvenlik günlüklerinin analizi. Günlük deposu

Kopyalarsanız şöyle görünecektir:

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 baktığımızda logların şu şekilde göründüğünü anlıyoruz: alan = değer veya anahtar = değer, bu da kv adı verilen bir filtrenin uygun olduğu anlamına gelir. Her özel durum için doğru filtreyi seçmek amacıyla, teknik belgelerden bunları öğrenmek veya bir arkadaşınıza sormak iyi bir fikir olacaktır.

Filtreyi Ayarlama

Son aşamada kv'yi seçtik, bu filtrenin konfigürasyonu aşağıda sunulmuştur:

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

Alanı ve değeri böleceğimiz sembolü - “=” seçiyoruz. Günlükte aynı girişlerimiz varsa, veritabanına yalnızca bir örneği kaydederiz, aksi takdirde aynı değerlerin bir dizisiyle karşılaşırsınız, yani "foo = bazı foo=bir" mesajımız varsa yalnızca foo yazarız = bazıları.

ElasticSearch'te doğru Çıktıyı ayarlama

Filtre yapılandırıldıktan sonra günlükleri veritabanına yükleyebilirsiniz elastik arama:

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

Belge checkpoint tipiyle imzalanmışsa olayı, varsayılan olarak 10.10.1.200 port 9200 üzerinden bağlantıları kabul eden elasticsearch veritabanına kaydediyoruz. Her belge belirli bir dizine kaydedilir, bu durumda "kontrol noktası-" + geçerli saat tarihi dizinine kaydederiz. Her dizin belirli bir alan kümesine sahip olabilir veya bir mesajda yeni bir alan göründüğünde otomatik olarak oluşturulur; alan ayarları ve bunların türleri eşlemelerde görüntülenebilir.

Kimlik doğrulamayı yapılandırdıysanız (buna daha sonra bakacağız), belirli bir dizine yazmak için kimlik bilgilerinin belirtilmesi gerekir, bu örnekte "tssolution" ve "cool" parolasıdır. Günlükleri yalnızca belirli bir dizine yazmak ve daha fazlasını yazmamak için kullanıcı haklarını farklılaştırabilirsiniz.

Logstash'ı başlatın.

Logstash yapılandırma dosyası:

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

Yapılandırma dosyasının doğruluğunu kontrol ediyoruz:
/usr/share/logstash/bin//logstash -f checkpoint.conf
2. Elastik yığın: güvenlik günlüklerinin analizi. Günlük deposu

Logstash işlemini başlatın:
sudo systemctl başlangıç ​​logstash

Sürecin başladığını kontrol ediyoruz:
sudo systemctl durum logstash'ı

2. Elastik yığın: güvenlik günlüklerinin analizi. Günlük deposu

Soketin açık olup olmadığını kontrol edelim:
netstat -nat |grep 5555

2. Elastik yığın: güvenlik günlüklerinin analizi. Günlük deposu

Kibana'daki günlükler kontrol ediliyor.

Her şey çalıştıktan sonra Kibana - Keşfet'e gidin, her şeyin doğru yapılandırıldığından ve resmin tıklanabilir olduğundan emin olun!

2. Elastik yığın: güvenlik günlüklerinin analizi. Günlük deposu

Tüm günlükler yerinde ve tüm alanları ve değerlerini görebiliyoruz!

Sonuç

Logstash yapılandırma dosyasının nasıl yazılacağına baktık ve sonuç olarak tüm alanların ve değerlerin ayrıştırıcısını elde ettik. Artık belirli alanlar için arama ve çizim üzerinde çalışabiliriz. Kursun bir sonraki bölümünde Kibana'daki görselleştirmeye bakacağız ve basit bir kontrol paneli oluşturacağız. Logstash yapılandırma dosyasının belirli durumlarda, örneğin bir alanın değerini bir sayıdan bir kelimeye değiştirmek istediğimizde sürekli olarak güncellenmesi gerektiğini belirtmekte fayda var. Sonraki yazılarımızda bunu sürekli olarak yapacağız.

Bizi izlemeye devam edin Telegram, Facebook, VK, TS Çözüm Günlüğü), Yandeks.Dzen.

Kaynak: habr.com

Yorum ekle