Hoşgeldin Misafir

#STHM-Snort

CW-ommah

17 Ocak 2022
904 Mesaj
TIM Görevleri
1

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
Allah'ın Rahmeti Ve Bereketi Üzerinize Olsun
Selamun aleyküm dostlarım. Bu makalemizde beraber Snortu en ince ayrıntısına kadar ele alacağız nasıl güvenlik kuralları oluşturulur dosya okuma işlemleri nasıl olur IDS/IPS temellerine ve bunların kendi içinde olan bölünmelerini ele alacağız inşallah. Baştan söylüyorum çok uzun bir makale olacak kahvenizi alın :)


IDS/IPS'ye Giriş

1775909001225.png
Snort’a dalmadan ve trafiği analiz etmeden önce, bir Saldırı Tespit Sistemi (IDS) ve Saldırı Önleme Sistemi (IPS) hakkında kısaca genel bir bakış atalım. Ağ altyapınızı her ikisini de kullanacak şekilde yapılandırabilirsiniz, ancak herhangi birini kullanmaya başlamadan önce farklarını öğrenmek önemlidir.

Saldırı Tespit Sistemi (IDS)

IDS, olası kötü niyetli aktiviteleri/desenleri, anormal olayları ve politika ihlallerini tespit etmek için pasif bir izleme çözümüdür. Her şüpheli olay için uyarı üretir.
IDS sistemlerinin iki ana türü vardır:

  • Ağ Tabanlı Saldırı Tespit Sistemi (NIDS): NIDS, ağın farklı bölgelerinden geçen trafik akışını izler. Amaç, tüm alt ağ üzerindeki trafiği incelemektir. Bir imza tespit edilirse, bir uyarı oluşturulur.
  • Host Tabanlı Saldırı Tespit Sistemi (HIDS): HIDS, tek bir uç cihazdaki trafik akışını izler. Amaç, yalnızca o cihazdaki trafiği incelemektir. Bir imza tespit edilirse, bir uyarı oluşturulur.

Saldırı Önleme Sistemi (IPS)

IPS, olası kötü niyetli aktiviteleri/desenleri, anormal olayları ve politika ihlallerini önlemek için aktif bir koruma çözümüdür. Şüpheli olay tespit edildiği anda onu durdurmak/önlemek/sonlandırmak IPS’in sorumluluğundadır.
IPS sistemlerinin dört ana türü vardır:

  • Ağ Tabanlı Saldırı Önleme Sistemi (NIPS): NIPS, ağın farklı bölgelerinden geçen trafik akışını izler. Amaç, tüm alt ağ üzerindeki trafiği korumaktır. Bir imza tespit edilirse, bağlantı sonlandırılır.
  • Davranış Tabanlı Saldırı Önleme Sistemi (Ağ Davranış Analizi - NBA): Davranış tabanlı sistemler, ağın farklı bölgelerinden geçen trafik akışını izler. Amaç, tüm alt ağ üzerindeki trafiği korumaktır. Bir anormallik tespit edilirse, bağlantı sonlandırılır.
    Ağ Davranış Analizi Sistemi, NIPS’e benzer şekilde çalışır. Fark, davranış tabanlı sistemlerin normal trafiği öğrenmek ve kötü niyetli trafiği ve tehditleri ayırt etmek için bir eğitim dönemi (diğer adıyla “baz oluşturma”) gerektirmesidir. Bu model, yeni ve bilinmeyen tehditlere karşı daha etkili sonuçlar sağlar. Sistem, “normal”i bilmek ve “anormal”i tespit etmek için eğitilir. Eğitim dönemi, yanlış pozitifleri önlemek açısından kritik öneme sahiptir. Eğitim sırasında bir güvenlik ihlali olursa, sonuçlar ciddi şekilde sorunlu olur. Bir diğer kritik nokta ise sistemin zararsız faaliyetleri doğru şekilde tanıyacak şekilde iyi eğitilmiş olduğundan emin olmaktır.
  • Kablosuz Saldırı Önleme Sistemi (WIPS): WIPS, kablosuz ağdan geçen trafik akışını izler. Amaç, kablosuz trafiği korumak ve buradan başlatılan olası saldırıları durdurmaktır. Bir imza tespit edilirse, bağlantı sonlandırılır.
  • Host Tabanlı Saldırı Önleme Sistemi (HIPS): HIPS, tek bir uç cihazdaki trafik akışını aktif olarak korur. Amaç, yalnızca o cihazdaki trafiği incelemektir. Bir imza tespit edilirse, bağlantı sonlandırılır.
    HIPS’in çalışma mekanizması HIDS’e benzer. Fark, HIDS’in tehditler için uyarı üretirken, HIPS’in onları bağlantıyı sonlandırarak durdurmasıdır.
Tespit/Önleme Teknikleri
IDS ve IPS çözümlerinde kullanılan üç temel tespit ve önleme tekniği vardır;

TeknikYaklaşım
İmza Tabanlı (Signature-Based)Bu teknik, bilinen kötü niyetli davranışların belirli desenlerini tanımlayan kurallara dayanır. Bu model, bilinen tehditleri tespit etmeye yardımcı olur.
Davranış Tabanlı (Behaviour-Based)Bu teknik, imzaları aşan yeni desenlerle ortaya çıkan yeni tehditleri tespit eder. Model, bilinen/normal davranışları bilinmeyen/anormal davranışlarla karşılaştırarak daha önce bilinmeyen veya yeni tehditlerin tespit edilmesine yardımcı olur.
Politika Tabanlı (Policy-Based)Bu teknik, tespit edilen aktiviteleri sistem yapılandırması ve güvenlik politikaları ile karşılaştırır. Bu model, politika ihlallerinin tespit edilmesine yardımcı olur.

Özet

IDS ve IPS’in genel işlevlerini kısaca özetleyelim:
  • IDS, tehditleri tespit edebilir ancak onları durdurmak için kullanıcı desteğine ihtiyaç duyar.
  • IPS, tehditleri tespit edebilir ve onları tespit anında daha az kullanıcı desteği ile engelleyebilir.

Snort

Şimdi Snort’tan bahsedelim. İşte Snort’un resmi açıklamasının devamı:
"Snort, bu paketleri durdurmak için de çevrimiçi olarak konuşlandırılabilir. Snort’un üç temel kullanımı vardır: tcpdump gibi bir paket dinleyici olarak, ağ trafiği hata ayıklaması için kullanışlı bir paket kaydedici olarak veya tam teşekküllü bir ağ saldırı önleme sistemi olarak kullanılabilir. Snort, kişisel ve ticari kullanım için indirilebilir ve yapılandırılabilir."

SNORT, açık kaynaklı, kural tabanlı bir Ağ Saldırı Tespit ve Önleme Sistemi (NIDS/NIPS)’dir. Martin Roesch, açık kaynak katkıcıları ve Cisco Talos ekibi tarafından geliştirilmiş ve hâlen bakımına devam edilmektedir.

Snort’un Özellikleri

Snort’un sahip olduğu özellikler şunlardır:
  • Canlı trafik analizi
  • Saldırı ve tarama tespiti
  • Paket kaydı
  • Protokol analizi
  • Gerçek zamanlı uyarılar
  • Modüller ve eklentiler
  • Ön işlemciler
  • Çapraz platform desteği (Linux & Windows)

Snort Modları

Snort’un üç temel kullanım modu vardır:
  1. Sniffer Modu: Konsol uygulamasında IP paketlerini okuyup gösterir.
  2. Paket Kaydedici Modu: Ağı ziyaret eden tüm IP paketlerini (gelen ve giden) kaydeder.
  3. NIDS (Ağ Tabanlı Saldırı Tespit Sistemi) ve NIPS (Ağ Tabanlı Saldırı Önleme Sistemi) Modları: Kullanıcı tarafından tanımlanmış kurallara göre kötü niyetli kabul edilen paketleri kaydeder veya düşürür.
Snort ile İlk Tanışma

Snort ile İlk Etkileşim

Öncelikle, Snort’un yüklü olduğunu doğrulayalım. Aşağıdaki komut, size yüklü olan Snort sürümünü gösterecektir.
Kod:
user@Ejder$ snort -V

   ,,_     -*> Snort! <*-
  o"  )~   Version 2.9.7.0 GRE (Build XXXXXX)
   ''''    By Martin Roesch & The Snort Team: http://www.snort.org/contact#team
           Copyright (C) 2014 Cisco and/or its affiliates. All rights reserved.
           Copyright (C) 1998-2013 Sourcefire, Inc., et al.
           Using libpcap version 1.9.1 (with TPACKET_V3)
           Using PCRE version: 8.39 2016-06-14
           Using ZLIB version: 1.2.11

Ellerimizi kirletmeden önce, yapılandırma dosyamızın geçerli olduğundan emin olmalıyız.
Burada, yapılandırmayı test etmek için -T” kullanılır ve yapılandırma dosyasını (snort.conf) belirtmek için -c kullanılır. Ayrıca, başka bir yapılandırma dosyasını kullanmak isterseniz, ona “-c” ile işaret ederek göstermek mümkündür.

Kod:
user@Ejder$ sudo snort -c /etc/snort/snort.conf -T

        --== Initializing Snort ==--
Initializing Output Plugins!
Initializing Preprocessors!
Initializing Plug-ins!
... [Output truncated]
        --== Initialization Complete ==--
   ,,_     -*> Snort! <*-
  o"  )~   Version 2.9.7.0 GRE (Build XXXX)
   ''''    By Martin Roesch & The Snort Team: http://www.snort.org/contact#team
           Copyright (C) 2014 Cisco and/or its affiliates. All rights reserved.
           Copyright (C) 1998-2013 Sourcefire, Inc., et al.
           Using libpcap version 1.9.1 (with TPACKET_V3)
           Using PCRE version: 8.39 2016-06-14
           Using ZLIB version: 1.2.11

           Rules Engine: SF_SNORT_DETECTION_ENGINE  Version 2.4 
           Preprocessor Object: SF_GTP  Version 1.1 
           Preprocessor Object: SF_SIP  Version 1.1 
           Preprocessor Object: SF_SSH  Version 1.1 
           Preprocessor Object: SF_SMTP  Version 1.1 
           Preprocessor Object: SF_POP  Version 1.0 
           Preprocessor Object: SF_DCERPC2  Version 1.0 
           Preprocessor Object: SF_IMAP  Version 1.0 
           Preprocessor Object: SF_DNP3  Version 1.1 
           Preprocessor Object: SF_SSLPP  Version 1.1 
           Preprocessor Object: SF_MODBUS  Version 1.1 
           Preprocessor Object: SF_SDF  Version 1.1 
           Preprocessor Object: SF_REPUTATION  Version 1.1 
           Preprocessor Object: SF_DNS  Version 1.1 
           Preprocessor Object: SF_FTPTELNET  Version 1.2 
... [Output truncated]
Snort successfully validated the configuration!
Snort exiting

Bir yapılandırma dosyası kullandığımızda, Snort çok daha güçlü hale gelir! Yapılandırma dosyası, Snort’un her şeyi bir arada yönetim dosyasıdır. Kurallar, eklentiler, tespit mekanizmaları, varsayılan işlemler ve çıktı ayarları burada belirlenir. Farklı amaçlar ve durumlar için birden fazla yapılandırma dosyası kullanılabilir, ancak çalışma zamanında yalnızca bir tane kullanılabilir.
Snort’u başlattığınızda, varsayılan açılış banner’ını ve sisteminizle ilgili başlangıç bilgilerini otomatik olarak gösterdiğini unutmayın. Bunu önlemek için “-q” parametresini kullanabilirsiniz

ParametreAçıklama
-V / --versionBu parametre, Snort’un yüklü olduğu sürüm hakkında bilgi sağlar.
-cYapılandırma dosyasını belirtir.
-TSnort’un kendi kendine test parametresidir; bu parametre ile kurulumunuzu test edebilirsiniz.
-qSessiz mod, Snort’un varsayılan açılış banner’ını ve sisteminizle ilgili başlangıç bilgilerini göstermesini engeller.


Çalışma Modu 1: Dinleme Modu

1775909164138.png

Snort'u Sniffer Modunda çalıştıralım.
Tcpdump gibi, Snort'ta da işlediği paketle ilgili farklı verileri görüntülemeyi sağlayan çeşitli seçenekler bulunmaktadır.
Sniffer modu parametreleri aşağıdaki tabloda açıklanmıştır dostlarım;

ParametreAçıklama
-vAyrıntılı mod. TCP/IP çıktısını konsolda gösterir.
-dPaket verilerini (yükü/payload) gösterir.
-eBağlantı katmanı (TCP/IP/UDP/ICMP) başlıklarını gösterir.
-XPaketin tüm detaylarını HEX formatında gösterir.
-iBelirli bir ağ arayüzünü dinlemek veya izlemek için kullanılır. Birden fazla arayüzünüz olduğunda, belirli bir arayüzü seçerek izleme yapabilirsiniz.

"-i" Parametresi ile Dinleme

Snort’u ayrıntılı modda (-v) başlatın ve arayüz olarak "eth0"ı kullanın:
Kod:
sudo snort -v -i eth0
Eğer sadece bir arayüzünüz varsa, Snort bunu varsayılan olarak kullanır. Yukarıdaki örnek, "eth0" adlı arayüzde dinleme yapmayı gösterir. -v parametresini simüle ettiğinizde, Snort otomatik olarak "eth0" arayüzünü kullanacak ve bunu gösterecektir.

"-v" Parametresi ile Dinleme

Snort’u ayrıntılı modda (-v) başlatın:
Kod:
sudo snort -v
Trafiği izlediğimizde genellikle şöyle bir ekran ile karşılaşırız

Kod:
user@Ejder$ sudo snort -v
                            
Running in packet dump mode

        --== Initializing Snort ==--
...
Commencing packet processing (pid=64)
12/01-20:10:13.846653 192.168.175.129:34316 -> 192.168.175.2:53
UDP TTL:64 TOS:0x0 ID:23826 IpLen:20 DgmLen:64 DF
Len: 36
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

12/01-20:10:13.846794 192.168.175.129:38655 -> 192.168.175.2:53
UDP TTL:64 TOS:0x0 ID:23827 IpLen:20 DgmLen:64 DF
Len: 36
===============================================================================
Snort exiting

Verilen çıktıda da görebileceğiniz gibi, ayrıntılı mod tcpdump benzeri
çıktı bilgileri sağlar. CTRL+C tuşlarıyla dinlemeyi durdurduğumuzda, dinleme işlemi sona erer ve dinlenen paketler özetlenir.

"-d" Parametresi ile Dinleme

Snort’u paket verilerini dökme modunda (-d) başlatın:

Kod:
sudo snort -d

Trafiği izlediğimizde genellikle şöyle bir ekran ile karşılaşırız

Kod:
user@Ejder$ sudo snort -d
                            
Running in packet dump mode

        --== Initializing Snort ==--
...
Commencing packet processing (pid=67)

12/01-20:45:42.068675 192.168.175.129:37820 -> 192.168.175.2:53
UDP TTL:64 TOS:0x0 ID:53099 IpLen:20 DgmLen:56 DF
Len: 28
99 A5 01 00 00 01 00 00 00 00 00 00 06 67 6F 6F  .............goo
67 6C 65 03 63 6F 6D 00 00 1C 00 01              gle.com.....

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

WARNING: No preprocessors configured for policy 0.
12/01-20:45:42.070742 192.168.175.2:53 -> 192.168.175.129:44947
UDP TTL:128 TOS:0x0 ID:63307 IpLen:20 DgmLen:72
Len: 44
FE 64 81 80 00 01 00 01 00 00 00 00 06 67 6F 6F  .d...........goo
67 6C 65 03 63 6F 6D 00 00 01 00 01 C0 0C 00 01  gle.com.........
00 01 00 00 00 05 00 04 D8 3A CE CE              .........:..

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

Verilen çıktıda da görebileceğiniz gibi, paket veri yük modu ayrıntılı modu da kapsar ve daha fazla veri sunar.

"-de" Parametresi ile Dinleme

Snort’u paket verilerini dökme (-d) ve bağlantı katmanı başlıklarını yakalama (-e) modunda başlatın:
Kod:
snort -de
user@Ejder$ sudo snort -de
                            
Running in packet dump mode

        --== Initializing Snort ==--
...
Commencing packet processing (pid=70)
12/01-20:55:26.958773 00:0C:29:A5:B7:A2 -> 00:50:56:E1:9B:9D type:0x800 len:0x46
192.168.175.129:47395 -> 192.168.175.2:53 UDP TTL:64 TOS:0x0 ID:64294 IpLen:20 DgmLen:56 DF
Len: 28
6D 9C 01 00 00 01 00 00 00 00 00 00 06 67 6F 6F  m............goo
67 6C 65 03 63 6F 6D 00 00 01 00 01              gle.com.....

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

WARNING: No preprocessors configured for policy 0.
12/01-20:55:26.965226 00:50:56:E1:9B:9D -> 00:0C:29:A5:B7:A2 type:0x800 len:0x56
192.168.175.2:53 -> 192.168.175.129:47395 UDP TTL:128 TOS:0x0 ID:63346 IpLen:20 DgmLen:72
Len: 44
6D 9C 81 80 00 01 00 01 00 00 00 00 06 67 6F 6F  m............goo
67 6C 65 03 63 6F 6D 00 00 01 00 01 C0 0C 00 01  gle.com.........
00 01 00 00 00 05 00 04 D8 3A D6 8E              .........:..

"-X" Parametresi ile Dinleme

Snort’u tam paket dökme modunda (-X) başlatın:

Kod:
sudo snort -X
user@Ejder$ sudo snort -X
                            
Running in packet dump mode

        --== Initializing Snort ==--
...
Commencing packet processing (pid=76)
WARNING: No preprocessors configured for policy 0.
12/01-21:07:56.806121 192.168.175.1:58626 -> 239.255.255.250:1900
UDP TTL:1 TOS:0x0 ID:48861 IpLen:20 DgmLen:196
Len: 168
0x0000: 01 00 5E 7F FF FA 00 50 56 C0 00 08 08 00 45 00  ..^....PV.....E.
0x0010: 00 C4 BE DD 00 00 01 11 9A A7 C0 A8 AF 01 EF FF  ................
0x0020: FF FA E5 02 07 6C 00 B0 85 AE 4D 2D 53 45 41 52  .....l....M-SEAR
0x0030: 43 48 20 2A 20 48 54 54 50 2F 31 2E 31 0D 0A 48  CH * HTTP/1.1..H
0x0040: 4F 53 54 3A 20 32 33 39 2E 32 35 35 2E 32 35 35  OST: 239.255.255
0x0050: 2E 32 35 30 3A 31 39 30 30 0D 0A 4D 41 4E 3A 20  .250:1900..MAN:
0x0060: 22 73 73 64 70 3A 64 69 73 63 6F 76 65 72 22 0D  "ssdp:discover".
0x0070: 0A 4D 58 3A 20 31 0D 0A 53 54 3A 20 75 72 6E 3A  .MX: 1..ST: urn:
0x0080: 64 69 61 6C 2D 6D 75 6C 74 69 73 63 72 65 65 6E  dial-multiscreen
0x0090: 2D 6F 72 67 3A 73 65 72 76 69 63 65 3A 64 69 61  -org:service:dia
0x00A0: 6C 3A 31 0D 0A 55 53 45 52 2D 41 47 45 4E 54 3A  l:1..USER-AGENT:
0x00B0: 20 43 68 72 6F 6D 69 75 6D 2F 39 35 2E 30 2E 34   Chromium/95.0.4
0x00C0: 36 33 38 2E 36 39 20 57 69 6E 64 6F 77 73 0D 0A  638.69 Windows..
0x00D0: 0D 0A                                            ..

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

WARNING: No preprocessors configured for policy 0.
12/01-21:07:57.624205 216.58.214.142 -> 192.168.175.129
ICMP TTL:128 TOS:0x0 ID:63394 IpLen:20 DgmLen:84
Type:0  Code:0  ID:15  Seq:1  ECHO REPLY
0x0000: 00 0C 29 A5 B7 A2 00 50 56 E1 9B 9D 08 00 45 00  ..)....PV.....E.
0x0010: 00 54 F7 A2 00 00 80 01 24 13 D8 3A D6 8E C0 A8  .T......$..:....
0x0020: AF 81 00 00 BE B6 00 0F 00 01 2D E4 A7 61 00 00  ..........-..a..
0x0030: 00 00 A4 20 09 00 00 00 00 00 10 11 12 13 14 15  ... ............
0x0040: 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25  .......... !"#$%
0x0050: 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35  &'()*+,-./012345
0x0060: 36 37                                            67

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

Dikkat edin, parametreleri hem birleştirilmiş hem de ayrı biçimde aşağıdaki gibi kullanabilirsiniz:

Kod:
snort -v
snort -vd
snort -de
snort -v -d -e
snort -X

Her parametreyi farklı trafik türleri ile kullanmayı deneyin ve kendi favori kombinasyonunuzu keşfedin dostlarım.

Operasyon Modu 2: Paket Kaydedici Modu

1775909378741.png
Snort’u Logger Modunda Çalıştırma
Snort’u bir sniffer (paket dinleyici) olarak kullanabilir ve logger modu sayesinde yakalanan paketleri kaydedebilirsiniz. Bunun için yalnızca paket kaydedici (packet logger) modu parametrelerini kullanmanız yeterlidir; Snort geri kalan işlemleri kendisi gerçekleştirir.

Paket kaydedici parametreleri aşağıdaki tabloda açıklanmıştır dostlarım:

ParametreAçıklama
-lLogger modu, hedef log ve uyarı çıktı dizinini belirtir. Varsayılan çıktı klasörü /var/log/snort dizinidir. Varsayılan işlem, verileri tcpdump formatında /var/log/snort dizinine kaydetmektir.
-K ASCIIPaketleri ASCII formatında kaydeder.
-rOkuma seçeneği: Snort içinde kaydedilmiş olayları incelemek için kullanılır.
-nİşlenecek veya okunacak paket sayısını belirtir. Snort, belirtilen sayıda paketi okuduktan sonra durur.
Her bir parametreyi kullanmaya başlayalım ve aralarındaki farkı görelim. Snort’un çalıştığını gözlemleyebilmek için ağ arayüzünüzde aktif trafik bulunması gerekir; bu nedenle Snort’un nasıl çalıştığını görmek için trafik oluşturmamız gerekiyor.

Log Dosyası Sahipliği
Log üretmeden ve bunları incelemeden önce, Linux dosya sahipliği ve izinlerini hatırlamamız gerekir. Kullanıcı türleri ve izinlere detaylı şekilde girmeye gerek yoktur. Temel dosya sahipliği kuralı şudur:
Snort, trafiği dinleyebilmek için süper kullanıcı (root) yetkilerine ihtiyaç duyar. Bu nedenle Snort’u sudo komutu ile çalıştırdığınızda, oluşturulan log dosyalarının sahibi root hesabı olur. Dolayısıyla log dosyalarını incelemek için de root yetkilerine ihtiyaç duyarsınız.
Oluşturulan log dosyalarını analiz etmek için iki farklı yaklaşım vardır:

  • Yetki yükseltme (privilege escalation)
  • Dosya/dizin sahipliğini değiştirme: Dosya veya klasörü kendi kullanıcınızla okuyabilmek için sahipliğini değiştirebilirsiniz:
    sudo chown username file veya sudo chown username -R directory
    Buradaki -R parametresi, dosya ve dizinlerin özyinelemeli (recursive) olarak işlenmesini sağlar.
“-l” Parametresi ile Loglama
Öncelikle Snort’u paket logger modunda başlatın:
Kod:
sudo snort -dev -l.
Trafik oluşturulduktan sonra, Snort paketleri göstermeye başlayacak ve bunları hedef dizine kaydedecektir. Varsayılan çıktı dizinini Snort.conf dosyasında yapılandırabilirsiniz. Ancak, hedef dizini belirlemek için “-l” parametresini de kullanabilirsiniz.
Varsayılan log dizinini bilmek, sürekli izleme (monitoring) işlemleri için faydalıdır; ancak “-l” parametresi test amaçlı kullanımlarda çok daha pratiktir.
Komuttaki -l kısmı, logların mevcut (çalışılan) dizinde oluşturulmasını sağlar. Her alıştırma için logları ayrı klasörlerde tutmak istiyorsanız bu seçeneği kullanmanız gerekir.
Kod:
user@Ejder$ sudo snort -dev -l.
                            
Running in packet logging mode

        --== Initializing Snort ==--
Initializing Output Plugins!
Log directory = /var/log/snort
pcap DAQ configured to passive.
Acquiring network traffic from "ens33".
Decoding Ethernet

        --== Initialization Complete ==--
...
Commencing packet processing (pid=2679)
WARNING: No preprocessors configured for policy 0.
WARNING: No preprocessors configured for policy 0.

Şimdi oluşturulan log dosyasını kontrol edelim. Log dosyası adlarının sizin durumunuzda farklı olabileceğini unutmayın.
Kod:
user@Ejder$ ls.                       
snort.log.1638459842
Gördüğünüz gibi, bu tek bir birleşik (all-in-one) log dosyasıdır. Bu dosya, ikili (binary) / tcpdump formatında bir log dosyasıdır. Klasör görünümünde ise bu şekilde görünür.

1775909474288.png
“-K ASCII” Parametresi ile Loglama
Snort’u paket logger modunda başlatın:
Kod:
sudo snort -dev -K ASCII
Snort aşağıdaki gibi ayrıntılı (verbosity) modda paketleri göstermeye başlayacaktır:
Kod:
user@Ejder$ sudo snort -dev -K ASCII -l.
                            
Running in packet logging mode

        --== Initializing Snort ==--
Initializing Output Plugins!
Log directory = /var/log/snort
pcap DAQ configured to passive.
Acquiring network traffic from "ens33".
Decoding Ethernet

        --== Initialization Complete ==--
...
Commencing packet processing (pid=2679)
WARNING: No preprocessors configured for policy 0.
WARNING: No preprocessors configured for policy 0.

Şimdi, oluşturulan günlük dosyasını inceleyelim.

Kod:
user@Ejder$ ls .
                            
142.250.187.110  192.168.175.129  snort.log.1638459842

Klasör görünümünde şöyle görünüyor.

1775909536179.png

“-K ASCII” parametresi ile oluşturulan loglar tamamen farklıdır. IP adresi isimlerine sahip iki klasör bulunmaktadır. Şimdi bunların içine bakalım.
Kod:
user@Ejder$ ls ./192.168.175.129/
                            
ICMP_ECHO  UDP:36648-53  UDP:40757-53  UDP:47404-53  UDP:50624-123

Oluşturulan klasörlere daha yakından baktığımızda, logların ASCII ve kategorize edilmiş formatta olduğunu görebiliriz; bu sayede Snort kullanmadan da okunmaları mümkündür. Klasör görünümünde ise bu şekilde görünür.

1775909569055.png

Kısacası, ASCII modu logları insan tarafından okunabilir bir formatta birden fazla dosya olarak sunar; bu sayede bir metin düzenleyici ile kolayca okunabilirler. Buna karşılık, ikili (binary) format insan tarafından okunamaz ve Snort veya tcpdump gibi bir uygulama ile analiz edilmesi gerekir.

ASCII format ile ikili formatı karşılaştırmak için her ikisini de bir metin düzenleyicide açalım. Aşağıda, ikili log dosyası ile ASCII log dosyası arasındaki fark gösterilmektedir:
(Sol taraf: ikili format, Sağ taraf: ASCII format)

1775909587027.png

Oluşturulan Logları “-r” Parametresi ile Okuma
Snort’u paket okuma (packet reader) modunda başlatın:
Kod:
sudo snort -r
Kod:
user@Ejder$ sudo snort -r snort.log.1638459842
                            
Running in packet dump mode

        --== Initializing Snort ==--
Initializing Output Plugins!
pcap DAQ configured to read-file.
Acquiring network traffic from "snort.log.1638459842".

        --== Initialization Complete ==--
...
Commencing packet processing (pid=3012)
WARNING: No preprocessors configured for policy 0.
12/02-07:44:03.123225 192.168.175.129 -> 142.250.187.110
ICMP TTL:64 TOS:0x0 ID:41900 IpLen:20 DgmLen:84 DF
Type:8  Code:0  ID:1   Seq:49  ECHO
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
WARNING: No preprocessors configured for policy 0.
12/02-07:44:26.169620 192.168.175.129 -> 142.250.187.110
ICMP TTL:64 TOS:0x0 ID:44765 IpLen:20 DgmLen:84 DF
Type:8  Code:0  ID:1   Seq:72  ECHO
===============================================================================
Packet I/O Totals:
   Received:           51
   Analyzed:           51 (100.000%)
    Dropped:            0 (  0.000%)
   Filtered:            0 (  0.000%)
Outstanding:            0 (  0.000%)
   Injected:            0
===============================================================================
Breakdown by protocol (includes rebuilt packets):
...
      Total:           51
===============================================================================
Snort exiting

Dikkat edilmelidir ki, Snort ikili (binary) log çıktısını okuyabilir ve işleyebilir (tcpdump ve Wireshark da bu log formatını işleyebilir). Ancak, logları “-K ASCII” parametresi ile oluşturursanız, Snort bunları okuyamaz.
Yukarıdaki çıktıda da görebileceğiniz gibi, Snort log dosyasını okuyup gösterdi; tıpkı sniffer modunda yaptığı gibi.
Log dosyasını tcpdump ile açmak:
Kod:
user@Ejder$ sudo tcpdump -r snort.log.1638459842 -ntc 10
                            
reading from file snort.log.1638459842, link-type EN10MB (Ethernet)
IP 192.168.175.129 > 142.250.187.110: ICMP echo request, id 1, seq 49, length 64
IP 142.250.187.110 > 192.168.175.129: ICMP echo reply, id 1, seq 49, length 64
IP 192.168.175.129 > 142.250.187.110: ICMP echo request, id 1, seq 50, length 64
IP 142.250.187.110 > 192.168.175.129: ICMP echo reply, id 1, seq 50, length 64
IP 192.168.175.129 > 142.250.187.110: ICMP echo request, id 1, seq 51, length 64
IP 142.250.187.110 > 192.168.175.129: ICMP echo reply, id 1, seq 51, length 64
IP 192.168.175.129 > 142.250.187.110: ICMP echo request, id 1, seq 52, length 64
IP 142.250.187.110 > 192.168.175.129: ICMP echo reply, id 1, seq 52, length 64
IP 192.168.175.1.63096 > 239.255.255.250.1900: UDP, length 173
IP 192.168.175.129 > 142.250.187.110: ICMP echo request, id 1, seq 53, length 64

Günlük dosyasını Wireshark ile açma.
1775909645126.png

-r” parametresi, kullanıcıların ikili log dosyalarını filtrelemesine de olanak tanır. İşlenen logu belirli paketleri görmek için “-r” parametresi ve Berkeley Paket Filtreleri (BPF) ile filtreleyebilirsiniz. Örnek komutlar:
Kod:
    • sudo snort -r logname.log -X
    • sudo snort -r logname.log icmp
    • sudo snort -r logname.log tcp
    • sudo snort -r logname.log 'udp and port 53'

Çıktı, yukarıdakilerle aynı olacak, ancak yalnızca seçilen protokole ait paketler gösterilecektir.

Ayrıca, işlenecek paket sayısını “-n” parametresi ile belirleyebilirsiniz. Örneğin, sadece ilk 10 paketi işlemek için:
Kod:
 Snort -dvr logname.log -n 10

BPF'nin nasıl çalıştığını ve nasıl kullanıldığını anlamak için lütfen aşağıdaki kaynakları inceleyin.

Operasyon Modu3:IPS/IDS
1775909734183.png
Snort’u IDS/IPS Modunda Kullanma
Snort’un yetenekleri yalnızca trafiği dinlemek ve loglamak ile sınırlı değildir. IDS/IPS modu, kullanıcı tanımlı kurallara göre trafiği yönetmenizi sağlar.

ParametreAçıklama
-cYapılandırma (configuration) dosyasını tanımlar.
-TYapılandırma dosyasını test eder.
-NLoglamayı devre dışı bırakır.
-DArka plan (background) modunda çalıştırır.
-AUyarı (alert) modları:
Full: Uyarı ile ilgili tüm olası bilgileri sağlar. Bu mod varsayılan moddur; -A kullanıp mod belirtmezseniz, Snort varsayılan olarak bu modu kullanır.
Fast: Uyarı mesajını, zaman damgasını, kaynak ve hedef IP adreslerini ve port numaralarını gösterir.
Console: Konsol ekranında hızlı uyarı stili sağlar.
cmg: CMG stili, temel başlık bilgileri ile yükü (payload) hem hex hem metin formatında gösterir.
None: Uyarıları devre dışı bırakır.

IDS/IPS modu “-c” ve “-T” parametreleri ile
Snort’u başlatın ve yapılandırma dosyasını test edin:
Kod:
sudo snort -c /etc/snort/snort.conf -T

Bu komut, yapılandırma dosyanızı kontrol edecek ve mevcut ayarlarda herhangi bir yanlışlık varsa sizi uyaracaktır.

IDS/IPS modu “-N” parametresi ile
Snort’u başlatın ve loglamayı devre dışı bırakmak için:
Kod:
sudo snort -c /etc/snort/snort.conf -N

IDS/IPS modu “-D” parametresi ile
Snort’u arka plan (background) modunda başlatın:
Kod:
sudo snort -c /etc/snort/snort.conf -D
Kod:
user@Ejder$ sudo snort -c /etc/snort/snort.conf -D

Spawning daemon child...
My daemon child 2898 lives...
Daemon parent exiting (0)

Komut satırı çıktısı, belirtilen parametrelerle birlikte istenen bilgileri sağlayacaktır. Yani, paket logger modu (-l) ile verbosity (-v) veya full packet dump (-X) aktifleştirilirse, loglar yine log klasöründe tutulur; ancak konsolda herhangi bir çıktı görünmez.
Arka plan (background) modunu başlattıktan sonra ilgili süreci kontrol etmek isterseniz, aşağıdaki gibi ps komutunu kolayca kullanabilirsiniz:

Kod:
user@Ejder$ ps -ef | grep snort

root        2898    1706  0 05:53 ?        00:00:00 snort -c /etc/snort/snort.conf -D

Arka plan hizmetini durdurmak için, “kill” komutunu kullanarak işlemi sonlandırabilirsiniz.

Kod:
user@Ejder$ sudo kill -9 2898

Dikkat edilmelidir ki, daemon (arka plan) modu öncelikle Snort’u otomatikleştirmek için kullanılır. Bu parametre, Snort servisini arka planda başlatmak için script’lerde kullanılır. Snort hakkında çalışır bilgiye ve stabil bir yapılandırmaya sahip değilseniz, bu modu kullanmanız önerilmez.

IDS/IPS modu “-A” parametresi ile
Snort’un birkaç uyarı (alert) modu vardır:

  • console: Konsol ekranında hızlı uyarı stili sağlar.
  • cmg: Temel başlık bilgileri ile yükü (payload) hem hex hem metin formatında gösterir.
  • full: Uyarı ile ilgili tüm olası bilgileri sağlar.
  • fast: Uyarı mesajını, zaman damgasını, kaynak ve hedef IP ile port numaralarını gösterir.
  • none: Uyarıları devre dışı bırakır.
Bu bölümde yalnızca console ve cmg parametreleri konsolda uyarı bilgisi sağlar. Diğer uyarı modlarını terminal üzerinden ayırt etmek mümkün değildir; farklar oluşturulan loglara bakılarak anlaşılabilir.

IDS/IPS modu “-A console” parametresi ile
Konsol modu, konsol ekranında hızlı uyarı stili sağlar. Snort’u konsol uyarı modunda başlatın:
Kod:
sudo snort -c /etc/snort/snort.conf -A console
Kod:
user@Ejder$ sudo snort -c /etc/snort/snort.conf -A console
Running in IDS mode

        --== Initializing Snort ==--
Initializing Output Plugins!
Initializing Preprocessors!
Initializing Plug-ins!
Parsing Rules file "/etc/snort/snort.conf"
...
Commencing packet processing (pid=3743)
12/12-02:08:27.577495  [**] [1:366:7] ICMP PING *NIX [**] [Classification: Misc activity] [Priority: 3] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-02:08:27.577495  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-02:08:27.577495  [**] [1:384:5] ICMP PING [**] [Classification: Misc activity] [Priority: 3] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-02:08:27.609719  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129
^C*** Caught Int-Signal
12/12-02:08:29.595898  [**] [1:366:7] ICMP PING *NIX [**] [Classification: Misc activity] [Priority: 3] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-02:08:29.595898  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-02:08:29.595898  [**] [1:384:5] ICMP PING [**] [Classification: Misc activity] [Priority: 3] {ICMP} 192.168.175.129 -> 142.250.187.110
===============================================================================
Run time for packet processing was 26.25844 seconds
Snort processed 88 packets.

IDS/IPS modu “-A cmg” parametresi ile
CMG modu, temel başlık bilgilerini ve yükü (payload) hem hex hem de metin formatında sağlar. Snort’u CMG uyarı modunda başlatın:
Kod:
sudo snort -c /etc/snort/snort.conf -A cmg
Kod:
user@Ejder$ sudo snort -c /etc/snort/snort.conf -A cmg
Running in IDS mode

        --== Initializing Snort ==--
Initializing Output Plugins!
Initializing Preprocessors!
Initializing Plug-ins!
Parsing Rules file "/etc/snort/snort.conf"
...
Commencing packet processing (pid=3743)
12/12-02:23:56.944351  [**] [1:366:7] ICMP PING *NIX [**] [Classification: Misc activity] [Priority: 3] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-02:23:56.944351 00:0C:29:A5:B7:A2 -> 00:50:56:E1:9B:9D type:0x800 len:0x62
192.168.175.129 -> 142.250.187.110 ICMP TTL:64 TOS:0x0 ID:10393 IpLen:20 DgmLen:84 DF
Type:8  Code:0  ID:4   Seq:1  ECHO
BC CD B5 61 00 00 00 00 CE 68 0E 00 00 00 00 00  ...a.....h......
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F  ................
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F   !"#$%&'()*+,-./
30 31 32 33 34 35 36 37                          01234567

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

Diğer alarm türlerine geçmeden önce, console ve CMG çıktılarının karşılaştırmasını yapalım. Yukarıdaki çıktılarda görebileceğiniz gibi, console modu temel başlık ve kural bilgilerini sağlar. CMG modu ise kural bilgilerine ek olarak paketlerin tamamını detaylı şekilde gösterir.

IDS/IPS modu “-A fast” parametresi ile
Fast modu, uyarı mesajlarını, zaman damgalarını ve kaynak ile hedef IP adreslerini sağlar. Bu modda konsol çıktısı olmadığını unutmayın. Snort’u fast uyarı modunda başlatın:
Kod:
sudo snort -c /etc/snort/snort.conf -A fast
Kod:
user@Ejder$ sudo snort -c /etc/snort/snort.conf -A fast
Running in IDS mode

        --== Initializing Snort ==--
Initializing Output Plugins!
Initializing Preprocessors!
Initializing Plug-ins!
Parsing Rules file "/etc/snort/snort.conf"
...
Commencing packet processing (pid=3743)
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

Hadi alarm dosyasını kontrol edelim.

1775909950556.png

Yukarıdaki resimde de görebileceğiniz gibi, hızlı stil uyarıları, eylemle ilgili
yön ve uyarı başlığı gibi özet bilgileri içerir.

IDS/IPS modu “-A full” parametresi ile
Full uyarı modu, uyarı ile ilgili tüm olası bilgileri sağlar. Bu modda konsol çıktısı olmadığını unutmayın. Snort’u full uyarı modunda başlatın:
Kod:
sudo snort -c /etc/snort/snort.conf -A full
Kod:
user@Ejder$ sudo snort -c /etc/snort/snort.conf -A full
Running in IDS mode

        --== Initializing Snort ==--
Initializing Output Plugins!
Initializing Preprocessors!
Initializing Plug-ins!
Parsing Rules file "/etc/snort/snort.conf"
...
Commencing packet processing (pid=3744)
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

Hadi alarm dosyasını kontrol edelim.

1775910014219.png
Yukarıdaki resimde de görebileceğiniz gibi, tam formatlı uyarılar ilgili eylemle ilgili tüm bilgileri içerir.

IDS/IPS modu “-A none” parametresi ile
Uyarıları devre dışı bırakır. Bu mod, alert dosyası oluşturmaz. Ancak, trafik loglamaya devam eder ve ikili (binary) dump formatında bir log dosyası oluşturur. Bu modda konsol çıktısı olmadığını unutmayın. Snort’u uyarısız modda başlatın:
Kod:
sudo snort -c /etc/snort/snort.conf -A none
Kod:
user@Ejder$ sudo snort -c /etc/snort/snort.conf -A none
Running in IDS mode

        --== Initializing Snort ==--
Initializing Output Plugins!
Initializing Preprocessors!
Initializing Plug-ins!
Parsing Rules file "/etc/snort/snort.conf"
...
Commencing packet processing (pid=3745)
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

Aşağıdaki resimde de görebileceğiniz gibi, herhangi bir uyarı dosyası bulunmamaktadır. Snort yalnızca günlük dosyasını oluşturmuştur.

1775910061971.png

IDS/IPS modu: "Yapılandırma dosyası olmadan kural dosyası kullanımı"
Snort’u yalnızca kural dosyası ile, yapılandırma dosyası olmadan çalıştırmak mümkündür. Bu mod, kullanıcı tarafından oluşturulan kuralları test etmenize yardımcı olur. Ancak, bu mod daha düşük performans sağlayacaktır.
Kod:
user@Ejder$ sudo snort -c /etc/snort/rules/local.rules -A console
Running in IDS mode

12/12-12:13:29.167955  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-12:13:29.200543  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129
12/12-12:13:30.169785  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-12:13:30.201470  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129
12/12-12:13:31.172101  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
^C*** Caught Int-Signal

IPS modu ve paket düşürme (dropping packets)
Snort IPS modu, -Q --daq afpacket parametreleri ile etkinleştirilir. Bu modu ayrıca Snort.conf dosyasını düzenleyerek de aktif edebilirsiniz.Snort’u IPS olarak kullanmak için Data Acquisition (DAQ) modüllerini etkinleştirin ve afpacket modülünü kullanın:
Kod:
-Q --daq afpacket -i eth0:eth1
Kod:
user@Ejder$ sudo snort -c /etc/snort/snort.conf -q -Q --daq afpacket -i eth0:eth1 -A console
Running in IPS mode

12/18-07:40:01.527100  [Drop] [**] [1:1000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.131 -> 192.168.175.2
12/18-07:40:01.552811  [Drop] [**] [1:1000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 172.217.169.142 -> 192.168.1.18
12/18-07:40:01.566232  [Drop] [**] [1:1000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.131 -> 192.168.175.2
12/18-07:40:02.517903  [Drop] [**] [1:1000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.1.18 -> 172.217.169.142
12/18-07:40:02.550844  [Drop] [**] [1:1000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 172.217.169.142 -> 192.168.1.18
^C*** Caught Int-Signal

Operasyon Modu4: PCAP İncelemesi

1775910123647.png
Snort ile PCAP Dosyalarını İnceleme
Snort’un yetenekleri yalnızca trafiği dinlemek, loglamak ve tehditleri tespit/engellemek ile sınırlı değildir. PCAP okuma/inceleme modu, pcap dosyalarıyla çalışmanıza yardımcı olur. Bir pcap dosyanız olduğunda ve Snort ile işlediğinizde, kurallarınıza bağlı olarak uyarılarla birlikte varsayılan trafik istatistiklerini alırsınız.
Önceden tartıştığımız ek parametreleri kullanmadan bir pcap dosyasını okumak, yalnızca paketleri genel olarak görüntüler ve dosya hakkında istatistik sağlar. Çoğu durumda bu çok pratik değildir. Biz, pcap dosyasını Snort ile inceleyerek kurallardan faydalanmak ve tehditlerin bilinen kalıplarını kullanarak inceleme sürecimizi hızlandırmak istiyoruz.
Unutmayın ki, kurallar oluşturmaya başlamaya oldukça yakınız. Bu nedenle, Snort’un çalışma mekanizmasını kavramanız, tartışılan parametreleri öğrenmeniz ve farklı amaçlar için parametreleri birleştirmeye başlamanız gerekir.

PCAP modu parametreleri aşağıdaki tabloda açıklanmıştır dostlarım:

ParametreAçıklama
-r / --pcap-single=Tek bir pcap dosyasını okur.
--pcap-list=""Komutta belirtilen (boşlukla ayrılmış) pcap dosyalarını okur.
--pcap-showİşlem sırasında pcap dosyasının adını konsolda gösterir.

Tek PCAP Dosyasını “-r” Parametresi ile İnceleme
Şimdi pcap dosyasını yapılandırma dosyamız ile inceleyelim ve ne olacağını görelim:
Kod:
sudo snort -c /etc/snort/snort.conf -q -r icmp-test.pcap -A console -n 10
Kod:
user@Ejder$ sudo snort -c /etc/snort/snort.conf -q -r icmp-test.pcap -A console -n 10

12/12-12:13:29.167955  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-12:13:29.200543  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129
12/12-12:13:30.169785  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-12:13:30.201470  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129
12/12-12:13:31.172101  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-12:13:31.204104  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129
12/12-12:13:32.174106  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-12:13:32.208683  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129
12/12-12:13:33.176920  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-12:13:33.208359  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129

Birden Fazla PCAP Dosyasını “--pcap-list” Parametresi ile İnceleme
Şimdi birden fazla pcap dosyasını yapılandırma dosyamız ile inceleyelim ve ne olacağını görelim:
Kod:
sudo snort -c /etc/snort/snort.conf -q --pcap-list="icmp-test.pcap http2.pcap" -A console -n 10
Kod:
user@Ejder$ sudo snort -c /etc/snort/snort.conf -q --pcap-list="icmp-test.pcap http2.pcap" -A console

12/12-12:13:29.167955  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-12:13:29.200543  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129
12/12-12:13:30.169785  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-12:13:30.201470  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129
12/12-12:13:31.172101  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
...
12/12-12:13:31.204104  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129
12/12-12:13:32.174106  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-12:13:32.208683  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129
12/12-12:13:33.176920  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-12:13:33.208359  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129
CMP kuralımız tetiklendi! Verilen çıktıda görebileceğiniz gibi, Snort trafiği tespit etti ve kurallarımıza göre uyarıları oluşturdu.
Burada dikkat edilmesi gereken bir nokta var: İki pcap dosyasını işledik ve birçok uyarı oluştu, bu nedenle uyarıları verilen pcap dosyalarıyla eşleştirmek Snort’un yardımı olmadan imkânsızdır. Uyarıların kaynağını belirleyebilmek için pcap işlemlerini ayrı ayrı yapmak gerekir.

Birden Fazla PCAP Dosyasını “--pcap-show” Parametresi ile İnceleme
Şimdi birden fazla pcap dosyasını inceleyelim, her birini ayırt edelim ve ne olacağını görelim:
Kod:
sudo snort -c /etc/snort/snort.conf -q --pcap-list="icmp-test.pcap http2.pcap" -A console --pcap-show
Kod:
user@Ejder$ sudo snort -c /etc/snort/snort.conf -q --pcap-list="icmp-test.pcap http2.pcap" -A console --pcap-show

Reading network traffic from "icmp-test.pcap" with snaplen = 1514
12/12-12:13:29.167955  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-12:13:29.200543  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129
12/12-12:13:30.169785  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
...

Reading network traffic from "http2.pcap" with snaplen = 1514
12/12-12:13:35.213176  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129
12/12-12:13:36.182950  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-12:13:38.223470  [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129
Böylelikle , Snort trafiği tespit etti, her pcap dosyasını ayırt etti ve kurallarımıza göre uyarıları oluşturdu.

Snort Kural Yapısı

1775910244123.png
Snort Kurallarını Öğrenelim
Snort kural formatını anlamak, her mavi (blue) ve mor (purple) takım üyesi için çok önemlidir. Snort kuralının temel yapısı aşağıda gösterilmiştir:

1775910260269.png
Her kuralın bir eylem türü, bir protokol, kaynak ve hedef IP adresleri, kaynak ve hedef port numaraları ve bir opsiyon içermesi gerekir. Unutmayın, Snort varsayılan olarak pasif moddadır, bu nedenle çoğu zaman Snort’u IDS olarak kullanırsınız. IPS modunu aktif hale getirmek için inline mode’u başlatmanız gerekir. Ancak inline modu kullanmaya başlamadan önce, Snort’un özelliklerini ve kurallarını iyi bilmek önemlidir.
Snort kural yapısı anlaşılması kolaydır, ancak etkili kurallar üretmek zordur. Verimli kurallar oluşturabilmek için kural opsiyonlarına ve ilgili detaylara aşina olmalısınız. Farklı kullanım senaryoları için Snort kuralları ve opsiyon detayları üzerinde pratik yapmak önerilir.
Bu bölümde temel kural yapısını ele alacağız ve Snort kurallarına bir adım atmanıza yardımcı olacağız. Farklı kullanım senaryolarında pratik yaparak ve kural opsiyonlarını derinlemesine inceleyerek kural oluşturma becerilerinizi her zaman geliştirebilirsiniz.
Biz bu odakta iki eyleme odaklanacağız:

  • alert → IDS modu için
  • reject → IPS modu için
Kurallar başlık (header) olmadan işlenemez. Kural opsiyonları ise “opsiyonel” bölümlerdir. Ancak, kural opsiyonlarını kullanmadan gelişmiş saldırıları tespit etmek neredeyse imkânsızdır.
Action / ProtocolAçıklama
Action (Eylem)Kurallar için birden fazla eylem vardır. İşlevselliğini iyi anlayın ve canlı sistemler için kural oluşturmadan önce kapsamlı test yapın. En yaygın eylemler şunlardır: alert → Uyarı üretir ve paketi loglar, log → Paketi loglar, drop → Paketi engeller ve loglar, reject → Paketi engeller, loglar ve paket oturumunu sonlandırır.
Protocol (Protokol)Protokol parametresi, kuralın filtrelediği protokol türünü belirtir. Snort2 yalnızca dört protokol filtresini destekler: IP, TCP, UDP ve ICMP. Ancak port numaraları ve opsiyonlar kullanılarak uygulama akışları tespit edilebilir. Örneğin, FTP trafiğini tespit etmek istiyorsanız, protokol alanında FTP anahtar kelimesini kullanamazsınız; bunun yerine port 21 üzerinden TCP trafiğini inceleyerek FTP trafiğini filtreleyebilirsiniz.

IP ve Port Numaraları
Bu parametreler, kural için filtrelenen kaynak ve hedef IP adreslerini ve bunlara bağlı port numaralarını belirtir.

Kural TürüÖrnek KuralAçıklama
IP Filtrelemealert icmp 192.168.1.56 any <> any any (msg: "ICMP Packet From "; sid: 100001; rev:1; )Bu kural, 192.168.1.56 IP adresinden gelen her ICMP paketi için uyarı oluşturur.
IP Aralığı Filtrelemealert icmp 192.168.1.0/24 any <> any any (msg: "ICMP Packet Found"; sid: 100001; rev:1; )Bu kural, 192.168.1.0/24 alt ağından gelen her ICMP paketi için uyarı oluşturur.
Birden Fazla IP Aralığı Filtrelemealert icmp [192.168.1.0/24, 10.1.1.0/24] any <> any any (msg: "ICMP Packet Found"; sid: 100001; rev:1; )Bu kural, 192.168.1.0/24 ve 10.1.1.0/24 alt ağlarından gelen her ICMP paketi için uyarı oluşturur.
IP Hariç Tutmaalert icmp !192.168.1.0/24 any <> any any (msg: "ICMP Packet Found"; sid: 100001; rev:1; )Bu kural, 192.168.1.0/24 alt ağından gelmeyen her ICMP paketi için uyarı oluşturur.
Port Filtrelemealert tcp any any <> any 21 (msg: "FTP Port 21 Command Activity Detected"; sid: 100001; rev:1; )Bu kural, 21 numaralı porta gönderilen her TCP paketi için uyarı oluşturur.
Belirli Portu Hariç Tutmaalert tcp any any <> any !21 (msg: "Traffic Activity Without FTP Port 21 Command Channel"; sid: 100001; rev:1; )Bu kural, 21 numaralı porta gönderilmeyen her TCP paketi için uyarı oluşturur.
Port Aralığı Filtreleme (Tip 1)alert tcp any any <> any 1:1024 (msg: "TCP 1-1024 System Port Activity"; sid: 100001; rev:1; )Bu kural, 1 ile 1024 arasındaki portlara gönderilen her TCP paketi için uyarı oluşturur.
Port Aralığı Filtreleme (Tip 2)alert tcp any any <> any:1024 (msg: "TCP 0-1024 System Port Activity"; sid: 100001; rev:1; )Bu kural, 1’den 1024’e kadar olan portlara gönderilen her TCP paketi için uyarı oluşturur.
Port Aralığı Filtreleme (Tip 3)alert tcp any any <> any 1025: (msg: "TCP Non-System Port Activity"; sid: 100001; rev:1; )Bu kural, 1025 ve üzeri kaynak portlarına gönderilen her TCP paketi için uyarı oluşturur.
Belirli Portları Filtreleme (Tip 4)alert tcp any any <> any [21,23] (msg: "FTP and Telnet Port 21-23 Activity Detected"; sid: 100001; rev:1; )Bu kural, 21 ve 23 numaralı portlara gönderilen her TCP paketi için uyarı oluşturur.

Yön (Direction)
Yön operatörü, Snort tarafından filtrelenecek trafik akışını gösterir. Kuralın sol tarafı kaynağı, sağ tarafı ise hedefi temsil eder.

  • -> : Kaynaktan hedefe doğru tek yönlü akış.
  • <> : Çift yönlü (bidirectional) akış.
Not: Snort’ta <- operatörü bulunmamaktadır.

1775911379542.png

Snort’ta üç ana kural opsiyonu vardır:

  • Genel Kural Opsiyonları (General Rule Options) Snort için temel kural opsiyonlarıdır.
  • Payload Kural Opsiyonları (Payload Rule Options) Paket içeriğini (payload) incelemeye yardımcı olan kural opsiyonlarıdır. Bu opsiyonlar, belirli payload desenlerini tespit etmek için faydalıdır.
  • Non-Payload Kural Opsiyonları (Non-Payload Rule Options) Paket içeriği dışındaki verilere odaklanan kural opsiyonlarıdır. Bu opsiyonlar, belirli desenler oluşturmak ve ağ sorunlarını tespit etmek için kullanılır.

Genel Kural Seçenekleri

OpsiyonAçıklama
msgMesaj alanı, kuralın temel bir uyarısı ve hızlı tanımlayıcısıdır. Kural tetiklendiğinde, mesaj alanı konsolda veya log dosyasında görünür. Genellikle mesaj kısmı, olayı özetleyen tek satırlık bir açıklamadır.
sidSnort kural ID’si (SID) önceden tanımlanmış bir kapsam ile gelir ve her kuralın doğru formatta bir SID’e sahip olması gerekir. SID kapsamları:
• <100: Ayrılmış kurallar
• 100–999,999: Build ile gelen kurallar
• >=1,000,000: Kullanıcı tarafından oluşturulan kurallar
Özetle, oluşturacağımız kuralların SID’i 100,000,000’dan büyük olmalıdır. SID’ler birbirini tekrar etmemeli ve her ID benzersiz olmalıdır.
referenceHer kural, kuralın veya tehdit deseninin amacını açıklamak için ek bilgi veya referans içerebilir. Bu, bir CVE ID veya harici veri olabilir. Referanslar, uyarı ve olay incelemelerinde analistlere yardımcı olur.
revSnort kuralları performans ve verimlilik için değiştirilebilir ve güncellenebilir. Revision (rev) opsiyonu, her kuralın kaç kez güncellendiğini gösterir ve kural geliştirmelerini anlamayı kolaylaştırır. Her kuralın benzersiz bir rev numarası vardır ve otomatik kural geçmişi yedeklemesi yoktur; analistler kendi kural geçmişlerini tutmalıdır. Rev opsiyonu yalnızca kuralın kaç kez revize edildiğini gösterir.Örnek Kural: alert icmp any any <> any any (msg: "ICMP Packet Found"; sid: 100001; reference:cve,CVE-XXXX; rev:1;)

Yük Algılama Kuralı Seçenekleri

OpsiyonAçıklamaÖrnek Kural
contentPayload verisi. Belirli payload verisiyle ASCII, HEX veya her ikisi ile eşleşir. Bu opsiyon bir kural içinde birden çok kez kullanılabilir. Ancak, ne kadar spesifik desen eşleştirme özellikleri oluşturursanız, paketi incelemek o kadar uzun sürer.ASCII modu: alert tcp any any <> any 80 (msg: "GET Request Found"; content:"GET"; sid: 100001; rev:1; )
HEX modu: `alert tcp any any <> any 80 (msg: "GET Request Found"; content:"
nocaseBüyük/küçük harf duyarlılığını devre dışı bırakır. İçerik aramalarını geliştirmek için kullanılır.alert tcp any any <> any 80 (msg: "GET Request Found"; content:"GET"; nocase; sid: 100001; rev:1; )
fast_patternPayload arama işlemini hızlandırmak için içerik aramasına öncelik verir. Snort varsayılan olarak en büyük content’i kullanır ve onu kurallara karşı değerlendirir. "fast_pattern" opsiyonu, belirli bir değeri kullanarak ilk paket eşleşmesini seçmenizi sağlar. Bu opsiyon her zaman büyük/küçük harf duyarsız çalışır ve kural başına bir kez kullanılabilir. Birden fazla "content" opsiyonu kullanıldığında gereklidir.alert tcp any any <> any 80 (msg: "GET Request Found"; content:"GET"; fast_pattern; content:"www"; sid:100001; rev:1; )

Payload Dışı Tespit Kural Opsiyonları
Bazı kural opsiyonları, paket içeriği dışındaki verilere odaklanır. Bu opsiyonlar, belirli desenler oluşturmanıza ve ağ sorunlarını tespit etmenize yardımcı olur.

OpsiyonAçıklamaÖrnek Kural
IDIP ID alanını filtreler.alert tcp any any <> any any (msg: "ID TEST"; id:123456; sid: 100001; rev:1; )
FlagsTCP bayraklarını filtreler.
F - FIN
S - SYN
R - RST
P - PSH
A - ACK
U - URG
alert tcp any any <> any any (msg: "FLAG TEST"; flags:S; sid: 100001; rev:1; )
DsizePaket payload boyutunu filtreler.
dsize:min<>max;
dsize:>100
dsize:<100
alert ip any any <> any any (msg: "SEQ TEST"; dsize:100<>300; sid: 100001; rev:1; )
SameipKaynak ve hedef IP adreslerindeki tekrarları filtreler.alert ip any any <> any any (msg: "SAME-IP TEST"; sameip; sid: 100001; rev:1; )

Unutmayın, bir kural oluşturduğunuzda bu kural yerel bir kuraldır ve
“local.rules” dosyanızda yer almalıdır. Bu dosya
“/etc/snort/rules/local.rules” dizininde bulunur. Yerel kurallarınızı nasıl düzenleyeceğinize dair
kısa bir hatırlatma aşağıda verilmiştir.
Kod:
user@Ejder$ sudo gedit /etc/snort/rules/local.rules

Bu, sizin “local.rules” dosyanızdır.

1775911459148.png

Snort2 Çalışma Mantığı: Unutulmaması Gereken Noktalar
Hatırlanması Gereken Noktalar
Snort’un Temel Bileşenleri

  • Packet Decoder (Paket Çözücü): Snort’un paket toplama bileşeni. Paketleri toplar ve ön işleme hazırlık yapar.
  • Pre-processors (Ön İşlemciler): Paketleri tespit motoru için düzenleyen ve değiştiren bileşen.
  • Detection Engine (Tespit Motoru): Paketleri işleyen, parçalayan ve kuralları uygulayarak analiz eden birincil bileşen.
  • Logging and Alerting (Kayıt ve Alarm): Kayıt ve alarm üretim bileşeni.
  • Outputs and Plugins (Çıkışlar ve Eklentiler): Çıkış entegrasyon modülleri (örn. uyarıları syslog/mysql’e gönderme) ve ek eklentiler (kural yönetimi, tespit eklentileri) bu bileşenle desteklenir.
Snort Kuralları
Snort için üç tür kural mevcuttur:

  • Community Rules (Topluluk Kuralları): GPLv2 altında ücretsiz kurallar. Herkese açık, kayıt gerektirmez.
  • Registered Rules (Kayıtlı Kurallar): Ücretsiz kurallar (kayıt gerektirir). Abone kuralları içerir ve 30 günlük gecikmeye sahiptir.
  • Subscriber Rules (Ücretli Kurallar): Ücretli kurallar (abonelik gerektirir). Ana kurallar setidir ve haftada iki kez (Salı ve Perşembe) güncellenir.
Kuralları indirip daha fazla bilgiye buradan ulaşabilirsiniz (yeni sekmede açılır).
Not: Snort2 yüklendikten sonra gerekli dizin ve dosyaları otomatik oluşturur. Ancak, topluluk veya ücretli kuralları kullanmak isterseniz, her kuralı Snort.conf dosyasında belirtmeniz gerekir.
Snort.conf uzun ve hepsi bir arada bir yapıdadır; yanlış düzenleme yapmak bazı kullanıcılar için sorun yaratabilir. Bu nedenle Snort, kural güncelleme modülleri ve entegrasyon araçları sunar. Özetle, yapılandırılmış Snort dosyalarınızı değiştirmeyin; bunun yerine yapılandırma dosyalarını manuel olarak düzenleyin veya ek araçlarla kurallarınızı güncelleyin. Bu, hataları, çökmeleri veya eksik özellikleri önler.

  • snort.conf: Ana yapılandırma dosyası.
  • local.rules: Kullanıcı tarafından oluşturulan kurallar dosyası.
Ana yapılandırma dosyası (snort.conf) ile ilgili genel bir bakışla başlayalım:
Kod:
sudo gedit /etc/snort/snort.conf

TAGADIBİLGİÖRNEK
HOME_NETKorumak istediğimiz ağKorunan ağın tanımı.'any' VEYA '192.168.1.1/24'
EXTERNAL_NETDış ağBu alan dış ağı temsil eder; bu yüzden 'any' veya '!$HOME_NET' olarak ayarlanmalıdır.'any' VEYA '!$HOME_NET'
RULE_PATHKural yoluSabitlenmiş kural yolu./etc/snort/rules
SO_RULE_PATHSO kurallarıBu kurallar kayıtlı ve abone kurallarıyla birlikte gelir.$RULE_PATH/so_rules
PREPROC_RULE_PATHÖn işlemci kurallarıBu kurallar kayıtlı ve abone kurallarıyla birlikte gelir.$RULE_PATH/plugin_rules

Bu bölümde, Snort’un IPS modunu yönetiyorsunuz. Tek düğümlü kurulum modelinde IPS modu, "afpacket" modu ile en iyi şekilde çalışır. Bu modu etkinleştirip Snort’u IPS olarak çalıştırabilirsiniz dostlarım.

TAGADIBİLGİÖRNEK
#config daqIPS modu seçimiIPS modunun seçimi için kullanılır.afpacket
#config daq_modeInline modun etkinleştirilmesiInline modu aktifleştirmek için kullanılır.inline
#config logdirVarsayılan log yoluSabitlenmiş varsayılan log dizini./var/logs/snort

Veri Toplama Modülleri (DAQ’lar), paket giriş/çıkışı için kullanılan özel kütüphanelerdir ve paketlerin işlenmesinde esneklik sağlar. Farklı amaçlar için DAQ tipi ve modu seçmek mümkündür.

Snort’ta altı DAQ modülü mevcuttur:

  • PCAP: Varsayılan mod, Sniffer modu olarak bilinir.
  • Afpacket: Inline modu, IPS modu olarak bilinir.
  • Ipq: Linux üzerinde Netfilter kullanılarak çalışan inline modu. Snort_inline yamasının yerini alır.
  • Nfq: Linux üzerinde inline modu.
  • Ipfw: OpenBSD ve FreeBSD üzerinde divert soketleri kullanarak inline modu, pf ve ipfw firewall’ları ile.
  • Dump: Inline ve normalizasyon modlarının test modu.
En popüler modlar, varsayılan (PCAP) ve inline/IPS (Afpacket) modlarıdır.



1775912803069.pngOkuduğunuz için teşekkür ederim

CW-Ommah
Bug Researchers Tim Sundu...

1775912861803.png
 

Ekli dosyalar

  • 1775911374391.png
    1775911374391.png
    22.1 KB · Görüntüleme: 1