08 Ekim 2014

Ağ Temelli Adli Bilişim Temel Bilgiler - Bölüm- 2

Bu bölümde paket toplama kütüphaneleri ve analiz/saklama araçları üzerinde durulacaktır.

Tüm İçerik Verisi



Araçlar:
Kütüphaneler: libpcap / winpcap
Analiz ve saklama araçları: tcpdump, tethereal, snort, wireshark (eski ethereal), kismet


Ağ izlemede full content data’nın kaydedilmesi görülen her paketin başlık ve içerik bilgileriyle birlikte kaydedilmesi anlamına gelir. Böyle bir izlemenin en önemli maliyeti saklama alan maliyetidir. Ancak full content data 2 çok önemli alanda bilgi sağlar:

  1. Detay (granularity): Full content data kaydedildiğinde her paketteki her nüansı tespit etmek mümkündür. Bu sayede IP ID veya TCP Sequence alanlarında, veya TCP options alanlarını kullanarak kurulan gizli iletişimi tespit etmek mümkündür.
  2. Uygulama bilgisi (application relevance): Tüm paket bilgisi kaydedildiğinde uygulama seviyesindeki iletişim bir araya getirilebilir. Bu sayede iletilen bilginin tamamı bir anlam ifade edecek şekilde gözlenebilir, bu sayede yapılan araştırma daha somut sonuçlara ulaşabilir. Örneğin bir ftp transferinde gönderilen dosyanın paket bilgilerinden yeniden oluşturulması yapılan aktivitenin niteliğini kesin olarak anlamamıza imkan tanır.

Araçlar:


Kütüphaneler – libpcap, winpcap: Packet Capture (pcap) kütüphaneleri izleme programlarına paketleri toplamak için gerekli API’leri sağlar. Libpcap linux ve Unix işletim sistemlerinde çalışırken winpcap windows işletim sistemlerinde çalışır. Bu iki kütüphane en çok karşılaşılan kütüphane olmakla birlikte bunların dışında paket toplama kütüphaneleri de bulunmaktadır (örneğin XXX-Hacking kitabından)

Analiz ve saklama araçları:


Tcpdump: tcpdump diğer pek çok araç gibi hem paket toplama hem de analiz işlevlerine sahiptir. Libpcap kütüphanesini kullanan tcpdump’ın paket toplama ve standart çıktı’ya (yani ekrana) aktarması için en basit kullanım örneği aşağıdaki gibidir:

# tcpdump –n –i <interface> -s <snaplen>

-n anahtarı IP adreslerini alan adlarına ve port numaralarını servis adlarına dönüştürmeyi iptal eder.
-i anahtarı kendisinden sonra gelecek arayüzde dinleme yapmayı ifade eder.
-s anahtarı kendisinden sonra gelecek sayıda byte’ın toplanmasını ifade eder. VLAN tag’leme yapılmayan ethernet ağlarında 1.515 byte yeterlidir. VLAN kullanılan ağlarda bu sayıyı VLAN başlığını da kapsayacak şekilde 4 byte daha artırmak gereklidir. Tcpdump’ın güncel versiyonlarında snaplen değerinin “0” olması paketi toplamak için ne kadar byte toplamak gerekiyorsa toplanması anlamına gelir. Varsayılan toplama miktarı 68 byte’tır. Bu durumda IP başlığının 20 byte, options alanı kullanılmayan bir TCP başlığının 20 byte olduğunu düşünürsek veri olarak her paket’te maksimum 28 byte toplanabilecektir.

Varsayılan modda tcpdump dinleme yapılan arayüzü promiscuous moda getirir.

Tcpdump ile toplanan paketlerin bir dosyaya yazılabilmesi için –w anahtarı kullanılır (ör. –v <capfile.lpc>).

Analiz araçları sadece ağ arayüzlerinden değil kaydedilmiş full content data dosyalarından da okuyabilir. Örneğin tcpdump’ı bir dosyadan okumak ve çıktısını standart çıktıya (ekrana) aktamak için şu komut kullanılabilir:

# tcpdump –n –r capfile.lpc

Ağ izleme açısından önemli olan bir nokta da tcpdump’ın topladığı paket kayıtlarına zaman damgasını eklemesidir.

Tcpdump’ın gösterim detay ve formatına ilişkin diğer anahtarları da bulunmaktadır.

Analiz sırasında veya arayüzden toplanan paketlerde sadece belli paket tipleri ile ilgileniliyorsa bu paketlere yönelik filtreler geliştirmek mümkündür. Tcpdump ile Berkeley Packet Filter filtreleri kullanılır, bu filtreler sıklıkla IP adresleri ya da ağ blokları, protokoller ve portları sınırlamak için kullanılabilir. Bir BPF örneği vermek gerekirse:

# tcpdump –n –r capfile.lpc tcp and dst port 22

komutundaki filtre hedef port numarası 22 olan TCP paketlerini seçmek üzere kullanılır. BPF filtreleri ile paket başlıklarındaki her bir byte’ta belli bir değere sahip olan paketler seçilebilir. Örneğin sadece SYN flag’i işaretli TCP paketlerini seçmek için şöyle bir komut çalıştırılabilir (TCP flag’leri TCP başlığının 13. byte’ının için de yer alır (tcpdump başlık byte’larını saymaya 0’dan başlar), ve SYN flag’i 2. flag olup sadece bu flag işaretliyse byte’ın değeri 2 olmalıdır):

# tcpdump –n –r capfile.lpc ‘tcp[13] == 2’

ya da BPF primitive’leri kullanılarak:

# tcpdump –n –r capfile.lpc ‘tcp[tcpflags] == 2’

Eğer sadece SYN flag’i işaretli olan paketleri değil de SYN flag’i işaretli tüm paketleri görmek istersek mantıksal VE ile bir bitmask kullanabiliriz:

# tcpdump –n –r capfile.lpc ‘tcp[13] & 2 == 2’


Tethereal: tethereal’da tcpdump gibi libpcap kütüphanesini kullanır, paket toplama ve analiz için kullanılır. Tethereal bir GUI uygulaması olan eski adıyla ethereal yeni adıyla wireshark’ın komut satırında çalışan akrabasıdır.

Tethereal’ın sağladığı en önemli fayda paket saklanan dosyaların rotasyonunu sağlamasıdır. “-a” anahtarı ile maksimum dosya boyutu (kilobyte cinsinden) veya süre (saniye cinsinden), “-b” anahtarı ile döndürülecek dosya sayısı tanımlanır. Örneğin 24 saatlik veriyi 24 ayrı dosyada toplamak için aşağıdaki komut çalıştırılabilir:

# tethereal –n –i <interface> -s <snaplen> -a duration:3600 –b 24 –w <capfile.lpc>

Bu komutun sonucunda 25. saat’ten başlayarak eski dosyalar sırayla ezilecektir.

Tethereal’ın diğer özelliklerinden bazıları “-S” anahtarı ile hem paketlerin ekranda izlenmesine hem de dosyaya yazılmasına imkan tanıması ve “-V” anahtarı ile tcpdump’a nazaran çok daha detaylı protokol decoding’i yapmasıdır. Ayrıca “-z io,phs” anahtarıyla (phs – Protocol Hierarchy Statistics anlamına gelir) okunan dosya içindeki protokol istatistiklerini raporlar.

Tethereal kullanarak paketin belli bir bölümü için kriter tanımlarken BPF kullanabileceğimiz gibi tethereal’a ait özel bir sentaksı da bulunmaktadır.

Snort: tcpdump ve tethereal’ın çıktılarından oldukça farklı bir gösterimi olan snort daha çok bir ağ tabanlı saldırı tespit sistemi olarak bilinir. Snort da BPF filtreleriyle uyumludur.

Snort ile analiz yapmak paket toplama amaçlı diğer araçlara nazaran daha pratik olabilir, çünkü snort’un en önemli fonksiyonu imza tabanlı alarm üretmektir. Örneğin sadece SYN flag’i işaretli paketleri seçmek için şu kural yeterlidir:

“alert tcp any any -> any any (msg:”Sadece SYN flagi seçili”; flags: S;)”

SYN flag’i seçili paketlerin tümünü seçmek için ise şu kural çalıştırılabilir:

“alert tcp any any -> any any (msg:”SYN flagi seçili”; flags: S+;)”

Wireshark (eski adıyla Ethereal): Wireshark da temel olarak yukarıda sayılan komut satırında çalışan uygulamalar gibi paket toplama ve protokol analizi işlevlerini yapan bir GUI uygulamasıdır. Bir GUI uygulaması olmasının getirdiği kullanım kolaylığının yanı sıra Wireshark’ın sahip olduğu protokol veritabanı oldukça zengindir. Ancak her GUI uygulaması gibi betik içinde kullanım açısından komut satırında çalışan muadillerine nazaran dezavantajlıdır.

Wireshark hem Unix hem de Windows platformlarda çalışmaktadır. Paket toplama konfigürasyonunda BPF sentaksı ile filtre kabul eder. Ancak toplanan paketlerin gösterimi sırasında kullandığı filtreler kendi formatında yazılır. Kullanıcılar bu filtreleri yaratmak için Wireshark’ın GUI “Filter Expression” yaratma yardımından faydalanabilir.

Wireshark’ın kullanıcıları heyecanlandıran özelliklerinden biri de daha sonra bahsedeceğimiz Tcpflow gibi özel amaçlı araçları bilmeyen kullanıcılar için TCP Stream (oturum içinde iletilen tüm paketler) oluşturabilmesidir. Bir akışa ait herhangi bir paket seçildikten sonra “Analyze” menüsünden “Follow TCP Stream” seçeneği seçildiğinde Wireshark söz konusu akışı ASCII olarak üretir.

Wireshark’da tıpkı akrabası tethereal gibi protokol istatistikleri üretebilir (Statistics/Protocol Hierarchy). Ayrıca “Statistics/Conversations” seçeneği ile oturum verisi üretebilir.

Kismet: Kablosuz ağ full content data toplama konusunda pek çok uygulama bulunmakla birlikte bunlardan en önde geleni Kismet’tir. Kismet’ten paket toplama bağlamında bahsediyor olsak da kismet’in sadece bu özelliğinden bahsetmek yeterli değildir. Kismet paket toplama, wardriving (AP’lerin, peer’ların tespiti, GPS entegrasyonu ile bunların coğrafi yerleşimlerinin kaydedilmesi) ve kablosuz ağ anormalliklerinin tespiti (kablosuz IDS özellikleri) işlevlerine sahiptir. Linux ortamında çalışan kismet’i cygwin ile windows ortamında da çalıştırmak mümkündür.

Topladığı paketleri “pcap” formatında kaydeden kismet ayrıca bulduğu ağları .csv ve .xml formatlarında kaydeder.

Buradaki odak noktamız ağ izleme kapsamı içinde paket toplama olmakla birlikte kablosuz ağ güvenliğinde etraftaki “rogue” AP’lerin varlığının da araştırılması önemlidir. Kablosuz iletişimde ağın sınırlarını tanımlamak daha sıkıntılı olduğundan mobilite ve mobil halde enerji tüketiminin azlığı önem kazanmaktadır. Bu nedenle PDA gibi el cihazları Laptop ve desktop platformlarından daha avantajlı olmaktadır. Kismet’de gerekli switch’lerle derlendiğinde PDA (örneğin Sharp Zaurus) ortamında çalışabilmektedir.

Kismet kablosuz ağ izleme ve paket toplama konusunda elbette tek çözüm değildir, ancak en bilinen ve en çok kullanılan açık kaynaklı çözümlerden biridir.

Ek full content analizleri


Editcap, Mergecap
TCPSlice
TCPReplay
TCPFlow
Ngrep
Etherape


Editcap, Mergecap: Editcap ve Mergecap Wireshark ile birlikte gelen 2 araçtır. Editcap toplanan paket dosyaları üzerinde manipulasyon yapmak için kullanılabilir, örneğin kayıtlar bir dosya formatından diğerine aktarılabilir (örneğin libpcap “lpc” dosya snoop dosyasına dönüştürülebilir), saati hatalı olan cihazlarda toplanan paketlerin timestamp bilgileri düzeltilebilir. Mergecap 2 libpcap paket dosyasını zaman damgalarına bakarak tek bir dosyada gerekli sıralamayı yaparak birleştirir.

TCPSlice: Toplanan paketlerin içinde bulunduğu dosyanın içinden belli zaman dilimlerine ait olanlarını ayırmak için kullanılır (örneğin ilk 10 dakikada toplanan paketleri ya da ilk paketten 5 dakika sonra başlayıp bu zamandan itibaren sonraki 20 dakikada toplanan paketleri gibi).

TCPReplay: libpcap formatında toplanan paketleri tekrar istenen arayüze gönderir. Libpcap formatlı dosyaları okuyamayan araçların paketleri trafik olarak görmesi için kullanılabilir. Örneğin donanım tabanlı bir sensör’e daha önceden toplanmış paketler gönderilmek istenirse bu yöntem kullanılabilir. Ancak bu işlem yapılırken izole bir ağ alanı kullanmakta fayda vardır, örneğin TCPReplay’in paket beslediği arayüz ile sensör bir hub, switch veya crossover kablo ile birbirine izole bir ağ oluşturarak bağlanabilir. Bu 3 donanım içeren alternatife ek olarak aynı donanım üzerinde sanal bir ağ arayüzü yaratarak da paketler gönderilebilir ve dinlenebilir (örneğin FreeBSD üzerindeki “tap” pseudo-interface’ler gibi).

TCPFlow: BPF formatındaki filtreleri anlar ve (daha sonra bahsedeceğimiz) oturum bilgileriyle oluşturulan filtrelerle aktarılan dosyaları oluşturmaya yarar. Örneğin bir ftp oturumu ile saldırganın bir dosya yüklediğini tespit ederseniz eğer topladığınız paketler arasında bir kayıp yoksa aşağıdaki komutla aktarılan dosyayı yeniden bilgisayarınızda oluşturabilirsiniz:

# tcpflow –r capfile.lpc src port 20 and dst port 1041

Ayrıca istenen filtreye göre okuduğu paket dosyasındaki paketleri –c anahtarıyla standart output’a (ekrana) veya yönlendirmeyle (redirection) bir dosyaya ASCII formatında yazdırabilirsiniz. TCPFlow’un doğrudan ağ arayüzünden paket okuması da mümkündür.

Ngrep: Daha önce Snort’u açıklarken paket başlıklarında istediğimiz bilgileri bulmanın yollarından bahsetmiştik. Snort uygulama verisi araştırmak için de, yani paket verileri içinde aradığımız metinleri (ascii veya hex formatta) bulmak için kullanılabilir. Ancak toplanan paketler içinde (ascii veya hex formatta) metin aramak için ngrep’i kullanmak daha pratiktir (snort kurma, rule tanımlama işlemlerini gerçekleştirme ihtiyacı ortadan kalkacaktır).

Ngrep “regular expression” ve BPF filtrelerini anlar. Örneğin aşağıdaki komut, içinde ‘bin.sh’ (yani “bin”, herhangi bir karakter ve “sh” karakterlerinden oluşan kelime) regular expression’ı geçen  paketlerini gösterir:

# ngrep –I capfile.lpc –x –q –i ‘bin.sh’

Bu komuttaki anahtarı açıklamak gerekirse:

-I okunacak libpcap paket dosyasını
-x anahtarı bulunan paketin hem hex hem de ascii olarak gösterilmesini
-q sadece kritere uyan paketlerin gösterilmesini ve diğer çıktıların gösterilmemesini
-i case insensitive araştırma yapılmasını ifade eder.

Hex formatta araştırma yapmak için –X anahtarı kullanılır. Örneğin içinde NOP sled’i bulunan bir hafıza taşma saldırısını tespit etmek için aşağıdaki komut kullanılabilir:

# ngrep –I capfile.lpc –x –q –X ‘909090’

Etherape: Görsel olarak bir ağ arayüzünden toplanan veya bir paket dosyasındaki iletişimi gösteren bir uygulamadır. Tespit edilen bir aktivitenin sunumu için faydalı bir araç olabilir.




<<Önceki Bölüm                                                                                                      Sonraki Bölüm>>