OpenBSD üzerinde Suricata kurulumu ve Network Monitoring
Suricata kendi deyimleriyle açık kaynak bir “network threat detection engine” dir. Bu engine network trafiğini bazı kurallar ve imzalar kullanarak inspect(teftiş, denetlemek) eder ve izlememize yardımcı olur. Network monitoring ve threat detection gibi kavramlarla ilgilenler için açık kaynak dünyasında harika bir araçtır.
Bu yazımda kaynak olarak bir kaç önemli yer kullanacağım, bunlardan birisi Suricata’nın kendi dökümanları olan http://suricata.readthedocs.io/en/latest/ adresi ve Open Security foundation’ın wiki sayfası (https://redmine.openinfosecfoundation.org/projects/suricata/wiki) olacak.
Suricata’yı GNU/Linux üzerinde “pf_ring” (http://www.ntop.org/products/packet-capture/pf_ring/) veya af_packet ile birlikte oldukça performanslı bir şekilde Emerging Threats kurallarını kullanarak (yaklaşık 30bin kural) (https://rules.emergingthreats.net/) IDS(Intrusion Detection System) olarak kullanabilirsiniz. Gnu/Linux üzerinde kurulum için wiki sayfasında adım adım anlatımlar mevcut, ayrıca Kernel packet capturing hakkında şurada detaylı bir dökümantasyon mevcut. (https://home.regit.org/wp-content/uploads/2015/10/2015_kernel_recipes_capture.pdf)
Ben bu yazımda, bir adet default olarak kurulum yaptığım OpenBSD6.0’ı tercih edeceğim. OpenBSD’in tamamen güvenlik odaklı bir işletim sistemi olması ve kernel’ı pf(packet filter)’i hali hazırda içerisinde bulundurmasıyla bunu bir avantaj olarak görüyorum.
Adım 1: Suricata için gereksinimlerin kurulması
pkg_add gcc git libtool pcre jansson libmagic libyaml
pkg_add libnet-1.1.2.1p3v0 autoconf-2.69p2 automake-1.14.1p0
git clone --depth 1 git://phalanx.openinfosecfoundation.org/oisf.git
cd oisf
git clone --depth 1 https://github.com/OISF/libhtp.git -b 0.5.x
Adım 2 : Suricata kurulumu
export AUTOCONF_VERSION=2.69
export AUTOMAKE_VERSION=1.14
Autogen.sh tamamlandığında aşağıdakine benzer bir çıktı almanız gerekiyor, burada eğer hata alıyorsanız bu hataların, autoconf ve automake paketlerinin versiyon farklılıklarıdan olacağını bilmenizi isterim.(daha önce başıma geldi)
CPPFLAGS="-I/usr/local/include" CFLAGS="-L/usr/local/lib" ./configure --prefix=/usr/local --sysconfdir=/etc/ --localstatedir=/var/
make
make install install-conf install-rules
Ufak bir süre bekleyerek, Suricata’yı kaynak kodudan derleyerek kurulum işlemimizi bitirmiş oluyoruz.
suricata -V ile kontrol ediyoruz. This is Suricata version 4.0dev (rev 6585ac4)
Adım 3: Suricata’yı çalıştırmak ve Test Alarmı oluşturmak
Depodan çektiğimiz suricata versiyonu, 4.0 development sürümü. Şuanda stabil versiyon 3.2 aynı şekilde o versiyonu da build edebilirsiniz.
Kurulumu tamamladıktan sonra yapılacak ilk iş suricata.yml konfigurasyon dosyasını düzenlemek. Suricata’nın kurulumu kolaydır fakat tuning işlemi kurulacak topolojiye göre, üzerinde çalıştığı sunucunun performansına ve network’e göre düzenlenmesi gerekir.
EmergingThreats kurallarını “install-rules” yazarak kurmuş olduk. Konfigurasyon dosyası /etc/suricata/suricata.yml dizininde bulunuyor. Default olarak tanımlı bir konfigurasyon var. Şimdi en temel değişiklik, suricata’yı kullandığımız network interface’i belirlemek. Ben bir adet management interface’ine sahibim. Dinlemek istediğiniz interface’i Promisc moda alıp, suricata’nın sniff etmesini sağlayabilirsiniz.
/usr/local/bin/suricata -c /etc/suricata//suricata.yaml -i em0
em0 = management interface
all 3 packet processing threads, 4 management threads initialized, engine started.
‘Engine started’ yazısını gördüğümüz an itibariyle suricata çalışıyor demektir. Suricata’nın tüm logları /var/log/suricata altındadır, bunu isterseniz konfigurasyon dosyasından düzenleyebilirsiniz.
Şimdi 1 adet test kuralı girip, alarm üretiliyor mu test edelim. Suricata’ya kural yazmak gerçekten oldukça eğlenceli bir iştir. Anlaması kolay basit bir pattern’i vardır. Örneğin;
ICMP paketleri için 1 adet kural yazalım.
alert ip any any -> any any ( msg: "ICMP packet detected!"; sid: 1; )
Bu kuralı /etc/suricata/rules/local.rules dosyasına ekledim ve suricata.yml rules kısmında şu şekilde ekledim ve kaydettim;
Daha sonra suricata’yı tekrar başlatıyorum ve bir ICMP paketleri gönderiyorum.
Şimdi, suricata’nın eve.json loguna tail -f ile baktığımda yazdığım kuralın tetiklenmiş olduğunu görüyorum.
tail -f /var/log/suricata/eve.json
Şimdilik suricata’yı çalıştırmış olalım ve bir adet kuralımızı tetiklemiş bulunalım. Tuning işlemini bir başka yazıyla daha detaylı bir şekilde anlatmak istiyorum. Oldukça detaylı ve sistem düzeyinde bilgi gerektiren bir konu. Benim de bu konu hakkında öğrenmem gereken tonlarca konu var:)
Bu konuda yine en faydalı yer benim için Suricata’nın kendi dökümanları. Bakmak isteyenler için; https://redmine.openinfosecfoundation.org/projects/suricata/wiki/Suricata_User_Guide
Suricata’nın en sevdiğim yönü ise log outputları, json olarak aldığımız eve.json dosyasını Elasticsearch, Logstash ve Kibana ile birleştirip daha sonra bu logları daha iyi analiz edebiliyoruz...
BSD ailesiyle yeni tanışıyor olmamdan ötürü yazıda yanlışlarım olabilir, eğer herhangi bir konuda düzeltme yapmak isterseniz lütfen bir mail atarak bildirin...
Kullandığım kaynakları yazının içerisinde link olarak belirttim, son olarak kurulum için şuradaki script tercihten faydalandığımı belirtir, siz de kolayca kurulum yapabilirsiniz.
- https://gist.github.com/gretel/d8d19be5e0d9c2996355
Okuduğunuz için teşekkürler....