![m9RCVr.png](https://i.hizliresim.com/m9RCVr.png)
Herkese Merhaba, ben Anka Red Team'den Louise0357. Bu yazımda Linux üzerinde Suricata aracı ile nasıl IDS/IPS kurulacağını ve yapılandırılacağını ele alacağım.
![iwxqmay.png](https://i.hizliresim.com/iwxqmay.png)
IDS (Intrusion Detection System);
IDS (Intrusion Detection System), yani Saldırı Algılama Sistemi'nin kısaltmasıdır. IDS, ağ trafiğini ve sistem loglarını izleyerek, sisteminizdeki anormal aktiviteleri kayıt tutar veya sistem yöneticisine bildirir.
IDS, herhangi bir olaya müdahele etmez. Yani örneğin sisteminizde bir saldırı var ise bu saldırıyı önlemeye çalışmaz, sadece
bunun log'unu tutar veya size bildirir.
![k96aomu.png](https://i.hizliresim.com/k96aomu.png)
IPS (Intrusion Prevention System);
IPS (Intrusion Prevention System), Saldırı Önleme Sistemi'nin kısaltmasıdır. IPS'yi, IDS'nin geliştirilmiş versiyonu gibi düşünebilirsiniz. IDS, sadece saldırıyı tespit etmek amacıyla tasarlanmıştır. Yani IDS Saldırıyı önlemek için herhangi
çaba içerisine girmez. Fakat IPS hem saldırıyı tespit eder, hem de bu saldırıyı engellemek için
önlemler alır.
IPS'nin saldırıyı engelleme yöntemlerinden birkaç tanesi şunlardır;
- Belirli bir IP Adresinden gelen trafiği engelleyebilir.
- Ağ trafiğini izleyerek normal trafik akışını belirleyip, anormal aktiviteleri engelleyebilir.
- Belirli komut veya içeriği içeren işlemleri algılayıp engelleyebilir.
Kısaca IDS/IPS arasındaki temel fark, IDS'nin sadece saldırıları algılayıp kayıt tutması, IPS'nin ise saldırıları hem algılayıp hem de
bunu engellemesidir.
![pDHFoUY.png](https://i.imgur.com/pDHFoUY.png)
Suricata Kurulumu
Kurulum için aşağıdaki adımları izleyebilirsiniz;
Adım 1,
İlk öncelikle paketlerimizi ve sistemimizi güncelleyelim:
Kod:
apt-get update && apt-get upgrade
Adım 2,
Suricata için gerekli paketleri yükleyelim:
Kod:
sudo apt-get -y install libpcre3 libpcre3-dbg libpcre3-dev build-essential autoconf automake libtool libpcap-dev libnet1-dev libyaml-0-2 libyaml-dev zlib1g zlib1g-dev libcap-ng-dev libcap-ng0 make libmagic-dev
Adım 3,
Normalde Suricata programı varsayılan olarak IDS olarak kurulur. Biz Suricata'yı hem IDS hem de
IPS için kullanacağımızdan dolayı aşağıdaki paketleri yükleyeceğiz:
Kod:
sudo apt-get -y install libnetfilter-queue-dev libnetfilter-queue1 libnfnetlink-dev libnfnetlink0
Adım 4,
Şimdi ise Suricata'yı yükleyeceğiz;
Kod:
wget http://www.openinfosecfoundation.org/download/suricata-2.0.3.tar.gz
tar -xvf suricata-2.0.3.tar.gz
cd suricata-2.0.3
Adım 5,
Suricata'yı IPS olarak kullanmak için;
Kod:
./configure –enable-nfqueue –prefix=/usr –sysconfdir=/etc –localstatedir=/var
Suricata'yı IDS olarak kullanmak için;
Kod:
./configure –prefix=/usr –sysconfdir=/etc –localstatedir=/var
Adım 6,
Suricata kurulumunu tamamlamak için aşağıdaki komutları kullanacağız;
Kod:
make
sudo make install
sudo ldconfig
![pDHFoUY.png](https://i.imgur.com/pDHFoUY.png)
Suricata'yı Yapılandırma
İlk öncelikle "nano /etc/suricata/suricata.yaml" komutu ile Suricata
yapılandırma dosyamızı açıyoruz.
![qwpxbrt.png](https://i.hizliresim.com/qwpxbrt.png)
HOME_NET kısmını kendi ağımıza göre yapılandırıyoruz. ve daha sonra EXTERNAL_NET kısmını ise
"!$HOME_NET" Olarak ayarlıyoruz.
Daha sonra kullandığınız interface'ın ismini konfigürasyon dosyasındaki eth0 olan yerlere yazıyoruz. Çünkü
konfigürasyon dosyasında default olarak interface name eth0'dır.
İnterface name düzenlemesini yaptıktan sonra rule'larımızın çalışması için konfigürasyon dosyasında
bunların ismini cismini tanıtmamız gerekiyor.
![9ke55mg.png](https://i.hizliresim.com/9ke55mg.png)
Burada rule'ların olduğu dizin resimde görüldüğü gibi "/var/lib/suricata/rules" imiş.
rule-file kısmında ise default olarak suricata.rules Rule'u tanımlı. fakat biz bunu yorum satırına alıp kendi Rule'larımızı
tanıtacağız. Şimdi örnek bir test Rule'u oluşturacağım. bundan dolayı rule-files kısmına resimdeki gibi test.rules yazıyorum.
Ayarlarımızı yaptıktan sonra konfigürasyon dosyasını kaydedip çıkabiliriz.
![pDHFoUY.png](https://i.imgur.com/pDHFoUY.png)
Suricata Rule'u Nasıl Yazılır?
IDS Rule yazımı;
Rule'ların yer aldığı dizin ( "/etc/suricata/rules" ) altında biz nano ile yeni bir Rule yazacağız.
![edjmzpw.png](https://i.hizliresim.com/edjmzpw.png)
Şimdi belirli bir domain'e istek gider ise alert veren bir rule yazalım;
Kod:
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"Zararlı bir Websiteye HTTP İsteği gönderildi"; flow:to_server, established; content:"Host|3a| zararli.com"; http_host; sid:100001; rev:1;)
burayı kısım kısım anlayalım
"alert http $HOME_NET any -> $EXTERNAL_NET any"
bu kısım rule'umuzun hangi trafiği izleyeceğini belirtir. Biz burada $HOME_NET tarafından $EXTERNAL_NET tarafına giden HTTP trafiğini izliyoruz.
"(msg:"Zararlı bir Websiteye HTTP İsteği gönderildi"; )"
bu kısımda ise rule alert verdiği zaman neden alert verildiğinin açıklamasını ifade ediyoruz.
"content:"Host|3a| zararli.com"; http_host;"
burada monitor edilecek içeriği belirtiyoruz. Biz burada HTTP Header'ının
Host field'ında zararli.com ifadesini monitor ediyoruz. Yani böyle bir durum gerçekleştiğinde alert veriyoruz.
"sid:100001; rev:1;"
Burada ise Rule'umuzun benzersiz id'sini ve versiyonunu belirtiyoruz. Bu kısım, alert durumunu etkilemeyecektir.
![k96aomu.png](https://i.hizliresim.com/k96aomu.png)
SSH Brute force saldırısı durumunda alert veren bir Rule daha yazarak pekiştirelim
Kod:
alert tcp any any -> $HOME_NET 22 (msg:"SSH Bruteforce saldırısı yapılıyor"; flow:to_server, established; content:"SSH-"; depth:5; threshold:type threshold, track by_src, count 5, seconds 60; sid:100002; rev:1;)
"alert tcp any any -> $HOME_NET 22"
bu kısımda tcp protokolünde herhangi bir kaynaktan bizim 22 portumuza gelen istekleri izliyoruz.
"msg:"SSH Bruteforce saldırısı yapılıyor";"
bu kısımda rule alert'inin açıklamasını belirtiyoruz.
flow:to_server, established;
bu kısımda bağlantı yönünü ve bağlantı durumunu belirtiyoruz. to_server ile servera giden bağlantılara ve
zaten kurulmmuş olan bağlantıları izliyoruz.
"content:"SSH-"; depth:5;"
bu kısımda SSH Headerında "SSH-" ibaresini arıyoruz ve en fazla 5 karakter derinliğinde arama yapıyoruz.
"threshold:type threshold, track by_src, count 5, seconds 60;"
bu kısımda her kaynaktan (by_src) 60 saniyede en fazla 5 SSH Brute force denemesini izliyoruz.
"sid:100002; rev:1;"
Burada ise yine Rule'umuzun benzersiz id'sini ve versiyonunu belirtiyoruz. Bu kısım, alert durumunu etkilemeyecektir.
![k96aomu.png](https://i.hizliresim.com/k96aomu.png)
IPS Rule yazımı;
Belirli bir websiteye giden istekleri engelleyen bir rule yazalım;
Kod:
drop http $HOME_NET any -> any any (msg:"zararli.com websitesine erişim engellendi"; flow:to_server; content:"Host|3a| zararli.com"; http_header; sid:100004; rev:1;)
"drop http $HOME_NET any -> any any"
bu kısımda bizim ağımız tarafından herhangi bir hedefe http isteği gönderilmesini engelliyoruz.
"(msg:"zararli.com websitesine erişim engellendi"; )"
bu kısımda log'a düşerken buraya girdiğimiz açıklama yazar.
"flow:to_server;"
bu kısımda bağlantının nereden nereye kurulduğunu belirtiyoruz. Burada biz server'a doğru
giden bağlantıları belirtiyoruz.
"content:"Host|3a| zararli.com"; http_header;"
bu kısımda ise HTTP Header'ına Host field içeriğini zararli.com olarak filtreleriz. Bu sayede
sadece zararli.com'a giden istekleri engelleriz.
"sid:100004; rev:1;"
bu kısımda yine aynı şekilde rule'un benzersiz id'si ve versiyonunu belirtiyoruz.
![k96aomu.png](https://i.hizliresim.com/k96aomu.png)
IPS Rule olayını da pekiştirmek için bu sefer SSH Brute force saldırılarını algılayıp engelleyen bir rule
yazalım.
Kod:
drop tcp any any -> $HOME_NET 22 (msg:"SSH Brute-force girişmesi engellendi"; flow:to_server; content:"SSH-"; depth:5; threshold:type limit, track by_src, count 5, seconds 60; sid:100006; rev:1;)
yine bu Rule'u mercek altına alıp inceleyelim;
"drop tcp any any -> $HOME_NET 22"
bu kısımda herhangi bir kaynaktan $HOME_NET yani bizim 22 portumuza gelen istekleri filtreliyoruz.
"(msg:"SSH Brute-force girişmesi engellendi"; )"
Bu kısımda ise istek engelleme işlemini log'a geçilirken buraya yazdığımız açıklama ile beraber geçilir.
"flow:to_server, established;"
bu kısımda ise yine belirli bir clientten bizim servera gelen istekleri ve canlı olan istekleri alıyoruz.
"content:"SSH-"; depth:5;"
bu kısımda SSH Headerında "SSH-" ibaresini arıyoruz ve en fazla 5 karakter derinliğinde arama yapıyoruz.
"threshold:type limit, track by_src, count 5, seconds 60;"
Burada ise her kaynaktan (by_src) gelen SSH brute force denemelerini 60 saniyede en fazla 5 kez izliyoruz.
"sid:100006; rev:1;"
Burada da yine rule'umuzun benzersiz id'sini ve versiyonunu belirtiyoruz.
Artık Suricata'mızı başlatabiliriz;
Kod:
systemctl start suricata
komutu ile Suricata'mızı başlatıyoruz ve artık rule'larımız çalışmaya başlayacaktır
![pDHFoUY.png](https://i.imgur.com/pDHFoUY.png)
Yazımı okuduğunuz için teşekkür ederim.
Diğer konulara göz atın;
Linux Privilege Escalation - Linpeas Toolu Kullanımı
https://turkhackteam.org/konular/sql-enjeksiyon-zafiyetini-kullanalim.2061227/
Apache 2.4.49-50 LFİ to RCE
https://www.turkhackteam.org/konular/wordpressi-taniyalim.2061212/
SQL injection attack, listing the database contents on non-Oracle databases WriteUp (Port Swigger)
![kbrn6ph.png](https://i.hizliresim.com/kbrn6ph.png)
![logo.png](https://www.turkhackteam.org/styles/v1/tht/logo.png)
Son düzenleme: