Snort: Ağ Güvenliği İçin Güvenilir Müttefik’in Kurulumu

mesubasi

Team Member
Katılım
23 Ocak 2024
Mesajlar
3
Tepkime puanı
3
Puanları
3
Muhammed Emin Subaşı tarafından yazılmıştır.

[TR] Snort: Ağ Güvenliği İçin Güvenilir Müttefik’in Kurulumu​


Merhaba, ben Muhammed Emin Subaşı bu yazımda ağ tabanlı saldırı tespit sistemi olan Snort yazılımı hakkında bilgi vereceğim. Nedir? Nasıl kurulur? Nasıl kural yazılır? Saldırı ya da port taramasında nasıl tepki verir? vb. konu başlıklarını ele alacağım. Çok kısa olarak Snort’un ne işe yaradığını anlatayım. Direkt konuya başlayalım
🙂


Snort, açık kaynaklı bir ağ güvenliği ve paket analizi aracıdır. Snort, ağ trafiğini izleyen ve ağdaki potansiyel tehditleri tespit eden bir IDS (Intrusion Detection System) ve IPS (Intrusion Prevention System) potansiyel tehditleri engelleyen araç olarak kullanılır. Bu yazılım, ağdaki veri paketlerini analiz eder, belirli imzaları veya desenleri arar ve bu imzalarla eşleşen potansiyel saldırıları algılar. Snort, ağ yöneticilerine, bilgisayar korsanları, kötü amaçlı yazılımlar ve diğer tehditler hakkında uyarılar gönderir, böylece ağ güvenliğini artırmak için önleyici önlemler alabilirler. Bu şekilde, ağ güvenliğini sağlama ve saldırılara karşı koruma sağlama konusunda yardımcı olur.

Ne olduğunu kısaca anladığımıza göre hızlıca kuruluma geçelim.

Gerekli Kurulumlar Nasıl Yapılır?


Windows üzerinde de kullanılabilir fakat ben Ubuntu sistemi üzerine kuracağım. Windows üzerinde exe olarak kurulum yapılabiliyor. Ubuntu vb. işletim sistemlerinde ise terminal üzerinden kurulumu makaledeki şekilde yapabilirsiniz.

Terminali açıyoruz.
Sırasıyla
Kod:
cd Desktop --> Gerekli dosyaları masaüstüne kurmak için
[ICODE]sudo su --> root yetkisi alıyoruz ki işimiz kolaylaşsın.[/ICODE]

apt install build-essential libpcap-dev libpcre3-dev libnet1-dev zlib1g-dev luajit hwloc libdnet-dev libdumbnet-dev bison flex liblzma-dev openssl libssl-dev pkg-config libhwloc-dev cmake cpputest libsqlite3-dev uuid-dev libcmocka-dev libnetfilter-queue-dev libmnl-dev autotools-dev libluajit-5.1-dev libunwind-dev libfl-dev -y --> Araçları yüklerken hata almamak için paket bağımlılıklarını kurmamız gerekir.

Snort 3 paket bağımlılıklarının kurulması için gereken komut
Snort 3 paket bağımlılıklarının kurulması için gereken komut

LibDAQ Kurulumu


Gerekli paketleri kurduk şimdi sıra Snort’un veri toplama kütüphanesi olan LibDAQ’ı kuracağız.

git clone https://github.com/snort3/libdaq.git --> libdaq'ı githubdan indiriyoruz.

apt-get install git --> git bulunumadı hatası alanlar için versiyon kontrol sisteminin kurulu olması gerekiyor.

Kurulum için sırasıyla aşağıdaki komutları uyguluyoruz.

cd libdaq --> Libdaq'ın klasörüne ulaşıyoruz.

./bootstrap --> Kuruluma başlıyoruz.

LibDAQ Kurulumu İçin Gerekli Komutlar
LibDAQ Kurulumu İçin Gerekli Komutlar

./configure && make && make install --> Bu aşamaları yaptığınızda gerekli olan ilk paketin kurulumu tamamlanmıştır.

cd .. --> Masaüstüne geri dönüyoruz.

GPerfTools Kurulumu


Sıra şimdi de gperftools aracını kurmakta. Google’a ait olan bu araç özellikle büyük ölçekli ve karmaşık yazılım projelerinde performans sorunlarını tespit etmede, hafıza sızıntılarını bulmak, CPU kullanımını analiz etmek ve programların genel performansını iyileştirmede kullanılan araçlar koleksiyonudur.

Hızlıca kuruluma başlayalım.

wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.13/gperftools-2.13.tar.gz --> Github'dan indiriyoruz.

tar xzf gperftools-2.13.tar.gz && cd gperftools-2.13 --> Dosyayı çıkart ve çıkan dosyanın içeriğine geçiş yap anlamında olan komut.

./configure && make && make install --> komutu ile kurulumu başlatalım. Bu kurulum biraz uzun sürebilir.

Programların genel performansını iyileştirmek için kullanılan gperftools kurulumu
Programların Genel Performansını İyileştirmek İçin Kullanılan Gperftools’un Kurulumu

Komutları eksiksiz uyguladıysanız hatasız bir şekilde tamamlanmış olması gerekir.

Performansı ve bellek kullanımını optimize etmek amacıyla kullanacağımız gperftools’un da kurulumunu böylelikle bitirmiş olduk.

Snort 3 Kurulumu


git clone https://github.com/snort3/snort3.git --> Masaüstüne aracımızı indiriyoruz.

cd snort3 --> İndirmiş olduğumuz klasöre geçiş yapıyoruz.

./configure_cmake.sh --prefix=/usr/local --enable-tcmalloc --> klsör içindeki betik dosyasını çalıştır. Yazılıma /usr/local dizinine yükle. tcmalloc adı verilen hafıza yönetim kütüphanesini etkinleştir.

Konfigürasyonu Çalıştırmak Kurulacağı Dizini Belirtmek Ve Performans Aracını Etkinleştirmek İçin Gereken Komut
Konfigürasyonu Çalıştırmak Kurulacağı Dizini Belirtmek Ve Performans Aracını Etkinleştirmek İçin Gereken Komut

cd build && make && make install --> build klasörüne geçiş yap ve yüklemeleri yap. (Bu kısım biraz uzun sürebilir.)

Kurulum Başlaması İçin Gereken Komutlar
Kurulum Başlaması İçin Gereken Komutlar

ldconfig && snort -V --> Kütüphaneleri güncelle ve snort aracının versiyonunu göster diyoruz. Aşağıdaki gibi bir çıktı almanız gerekmektedir. Buraya kadar geldiyseniz hatasız kurulum yapmışsınızdır.

Araç Hakkında Versiyon Bilgisi
Araç Hakkında Versiyon Bilgisi

snort -c /usr/local/etc/snort/snort.lua --> Konfigürasyon doğrulaması yapıyoruz. Hata çıkmaz ise aşağıdaki gibi gözükmektedir.

Hatasız Kurulumda Alınması Gereken Çıktı
Hatasız Kurulumda Alınması Gereken Çıktı

Snort Yapılandırması Nasıl Yapılır?


Gerekli araç ve gereçleri kurduktan sonra şimdi en önemli adım olan yapılandırma işlemlerine başlayacağız.

Öncelikle kendisine gönderilen trafiiği görebilmesi için ağ kartını karışık moda ayarlamalıyız.

Öncelikle ağ kartının adını öğrenmemiz gerekmektedir. Ip Address Show komutunu yazdıktan sonra (yüklü olmayanlar için apt install net-tools) resimde gösterilen kırmızı işaretli kısımdan ağ kartının adıdır.

Ağ Kartı Adının Bulunduğu Kısım
Ağ Kartı Adının Bulunduğu Kısım

ip link set dev enp0s3 promisc on

[ICODE]ip add sh enp0s3[/ICODE]

ethtool -k enp0s3 | grep receive-offload --> Bu komutu yazdıktan sonra aşağıdaki çıktıyı almanız gerekmektedir.
Ağ Kartının Gönderilen Trafiği Görebilmesi İçin Karışık Moda Ayarlanması
Ağ Kartının Gönderilen Trafiği Görebilmesi İçin Karışık Moda Ayarlanması

ethtool -K enp0s3 gro off lro off --> Şimdi deaktif hale getirebilirsiniz.

Ağ kartını ayarladığımıza göre diğer işlemlere geçebiliriz.

Snort için Systemd Service Dosyası Oluşturma


nano /etc/systemd/system/snort3.service --> nano editörü ile konumdaki dosyayı açıyoruz.

[Unit]
Description=Set Snort 3 NIC in promiscuous mode and Disable GRO, LRO on boot
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/sbin/ip link set dev enp0s3 promisc on
ExecStart=/usr/sbin/ethtool -K enp0s3 gro off lro off
TimeoutStartSec=0
RemainAfterExit=yes

[Install]
WantedBy=default.target

Yukarıdaki çıktıyı ağ kartının adını enp0s3 ise direkt kopyala yapıştır yapıp. Ctrl + X ile çıkış yapıp Y ile direkt onaylayabilirsiniz.

Devamında aşağıdaki komutları uyguluyoruz.

systemctl daemon-reload --> Systemd arkaplan programını yeniden yükle.

systemctl start snort3-nic.service --> Servisi başlat.

systemctl enable snort3-nic.service --> Servisi aktif et.
systemctl status snort3-nic.service --> Durumunu görüntüle. Systemd doğru yapılandırıldıysa aşağıdaki gibi çıktı almanız beklenmektedir.

Systemd Doğru Yapılandırmada Alınacak Çıktı
Systemd Doğru Yapılandırmada Alınacak Çıktı

Böylelikle Systemd servisinin de altyapısını hazırlamış olduk.

Özel Kural Nasıl Yazılır?


Geldik en önemli konuya. Şimdi kendi kurallarımızı tanımlayıp IDS tarafında uyarıları görüntüleyeceğiz.

cd Desktop
sudo su

mkdir /usr/local/etc/rules --> Kurallar için klasör oluşturuyoruz

nano /usr/local/etc/snort/snort.lua --> Konfigürasyonu düzenlemek için açacağımız dosya

Dosyayı açtığımızda resimdeki gibi tanımlama yapıyoruz. Ben köprü bağdaştırıcısı kullandığım için “ip addr” komutundan kontrol ettiğimde inet adresi 192.168 ile başlıyor. Bu yüzden 192.168.1.0/24 diyip 192.168.1.0 ile 192.168.1.255 aralığında olan cihazlar üzerinde çalışmasını istedim.

Özel Kurallar İçin IP Aralıklarını Tanımlama
Özel Kurallar İçin IP Aralıklarını Tanımlama

Yine aynı dosya içerisinde belirtilen kısıma gelip aşağıdaki şekilde düzenliyoruz.

Özel kuralları tanımlamak için yapılması gereken ayarlar
Özel kuralları tanımlamak için yapılması gereken ayarlar

Bu ayarları yaptıktan sonra CTRL + X sonrasında Y yapıp kaydediyoruz.

nano /usr/local/etc/rules/local.rules --> Lokal kural dosyasını açıyoruz

Kod:
alert icmp any any -> $HOME_NET any (msg:"ICMP connection test"; sid:1000001; rev:1;)
alert tcp any any -> any 22 (msg:"SSH Girişi Denemesi"; content:"SSH-2.0"; flow:to_server; sid:100003; rev:1;)
uyarı protokol kaynak ip kaynak port -> hedef ip hedef port (içerikler) --> kuralın anlamı bu şekildedir

Örnek amaçlı ping ve ssh denemelerini takip eden kuralları tanımladık

SSH Denemesi ve Ping için Kurallar
SSH Denemesi ve Ping için Kurallar

Kod:
snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/local.rules --> İle kurallarda bir hata var mı? diye kontrol yapıyoruz. Alacağınız çıktı aşağıdaki gibi olmalıdır
Hatasız Kurulumda Alınması Gereken Çıktı
Hatasız Kurulumda Alınması Gereken Çıktı

Kod:
snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/local.rules -i enp0s3 -A alert_fast -s 65535 -k none --> komutu ile aracımızı başlatıyoruz
Tanımladığımız SSH ve Ping Kurallarının Çalışması
Tanımladığımız SSH ve Ping Kurallarının Çalışması

Gördüğünüz üzere kurallarımız ssh denemesi ve ping atıldığında yukarıdaki gibi çıktı vermekte. En son kısımı incelediğimizde 192.168.1.20:55786 portundan gelen ve 192.168.1.21:22 portuna bir ssh girişini denemesi olduğunu tespit etti.

Özel kural tanımlamayı bitirdiğimize göre sırada OpenAppID kuralları ile uygulamaları görmek için bir hazırlığımız olacak.

OpenAppID Nedir? Nasıl Kurulur?


OpenAppID netflix, google, facebook, vb. platformların IDS sisteminde tanımlanması için oluşturulmuş bir pakettir. Kısacası ağ trafiğindeki uygulamaları tanımlamak ve kategorize etmek için kullanılır.

sudo su

cd Desktop

wget https://www.snort.org/downloads/openappid/33380 -O OpenAppId-33380.tgz --> eklentiyi indiriyoruz

tar -xzvf OpenAppId-33380.tgz --> Dosyadan çıkarıyoruz

cp -R odp /usr/local/lib/ --> belirtilen dizine kopyalıyoruz

nano /usr/local/etc/snort/snort.lua --> editör ile düzenlemek için açıyoruz

appid =
{
app_detector_dir = '/usr/local/lib',
log_stats = true,

} nano editörü ile açtığımız dosyanın içindeki kısım bu şekilde düzenlenecek.



mkdir /var/log/snort --> log klasörü oluşturuyoruz

snort -c /usr/local/etc/snort/snort.lua --> Sorun olmadığına dair doğrulama yapıyoruz

nano /usr/local/etc/rules/local.rules --> Kural tanımlaması yapmak için dosyayı açıyoruz daha sonra aşağıdaki kurallarımızı yazıyoruz. alert tcp any any -> any any (content:"www.facebook.com"; msg:"Facebook Ziyareti Tespit Edildi"; sid:100006; rev:1;) alert tcp any any -> any any (content:"netflix.com"; msg:"Netflix Ziyareti Tespit Edildi"; sid:100002; rev:1;) CTRL + X ardından Y ile onaylayıp dosyayı kapatıyoruz. Bu iki kural OpenAppID sayesinde content(içerik) eğer ki paket içeriğinde tespit edilirse devreye girecek şekilde kullanılmaktadır.

snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/local.rules --> Konfigürasyonu doğruluyoruz

snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/local.rules -i enp0s3 -A alert_fast -s 65535 -k none --> Aracı çalıştırıyoruz
OpenAppID İle Ziyaret Edilen Siteleri Yakalama
OpenAppID İle Ziyaret Edilen Siteleri Yakalama

Resimde de görüldüğü gibi ağ üzerinde content kısmında geçen site paketi var ise kurallarımız çalışacaktır.

Topluluk Kuralları Nasıl Kullanılır?


Araç içerisinde topluluk tarafından yazılmış birçok kural bulunmakta. Bu kurallar içerisinde A’dan Z’ye, exploit vb. zararlıların IDS tarafından yakalanması için kurallar yer almaktadır.

wget -qO- https://www.snort.org/downloads/community/snort3-community-rules.tar.gz | tar xz -C /usr/local/etc/rules/ --> Topluluk kurallarını indiriyoruz

nano /usr/local/etc/snort/snort.lua --> Kuralları düzenliyoruz
Topluluk Kurallarını Tanımlama
Topluluk Kurallarını Tanımlama

ips =
{
-- use this to enable decoder and inspector alerts
enable_builtin_rules = true,
include = { RULE_PATH .. "/local.rules",
RULE_PATH .. "/snort3-community-rules/snort3-community.rules" },

-- use include for rules files; be sure to set your path
-- note that rules files can include other rules files
-- (see also related path vars at the top of snort_defaults.lua)

variables = default_variables,
}
Direkt bu şekilde ips kısmına tanımlayabilirsiniz.
Böylelikle hem lokal kurallar tanımlı hem de topluluk kuralları tanımlı oldu.

snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/snort3-community-rules/snort3-community.rules --> İle doğrulamayı yapıyoruz
Hatasız Kurulumda Alınması Gereken Çıktı
Hatasız Kurulumda Alınması Gereken Çıktı

Yukarıdaki gibi bir çıktı aldığınızda kurallar sorunsuz bir şekilde çalışacaktır.

snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/snort3-community-rules/snort3-community.rules -i enp0s3 -A alert_fast -s 65535 -k none --> Kuralları çalıştırıp trafiğimizi izliyoruz

Dikkat etmemiz gereken nokta “rules/” kısmından sonra lokal kurallardan mı? yoksa topluluk kurallarından mı? çalıştırmak istediğimiz. Sadece bu kısım değişecek.

Nmap Taramasında IDS Tarafından Algılanan Trafik
Nmap Taramasında IDS Tarafından Algılanan Trafik

nmap -p- -sV -sS -A -O 192.168.1.21 –> Nmap ile IDS kurulu olan makineye tarama yapıldığında yakaladığı trafik yukarıdaki gibi olacaktır. 192.168.1.39 ip adresinden 192.169.1.21 ip adresine yapılan taramalarda hangi port açıksa o porta yapılan istekleri yakalamıştır.

Makalemizde, Snort 3’ün kurulumu, lokal, topluluk kurallarının tanımlanması ve OpenAppID entegrasyonu gibi önemli adımları detaylı bir şekilde ele aldık. Ayrıca, exploit ve benzeri zararlı yazılımların IDS tarafından tespit edilebilmesi için daha detaylı kurallar oluşturulabilir. Snort 3’ü kapsamlı bir şekilde inceledik ve bu güçlü güvenlik aracının etkili bir şekilde nasıl kullanılacağını anlatmaya çalıştık.

Makalelerimizde ele aldığımız konularla ilgili sorularınız veya ek bilgiler isterseniz, bana ulaşabilirsiniz. Bir sonraki makalede görüşmek üzere şimdilik hoşça kalın.
 
Moderatör tarafında düzenlendi:
Geri
Üst