Ana Sayfa » *nix » ngrep – Network Grep İle Ağ Trafiğinin İncelenmesi

ngrep – Network Grep İle Ağ Trafiğinin İncelenmesi


BerbatKötüİdare EderGüzelHarika (Toplam 5 oy. 5 puan üzerinden ortalama 5,00 || Oy vererek siz de katkıda bulunabilirsiniz.)
Loading...

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYbBiRHn' (Errcode: 28 - No space left on device) in /usr/share/nginx/html/syslogs/wp-includes/class-wpdb.php on line 2349

Kısaca bildiğimiz grep'in network trafiği üzerinde iş yapan versiyonu olan ngrep, özellikle sorun çözme, anormallik tespiti vs. gibi konularda benim sık sık kullanıdığım oldukça güzel bir araçtır. Özellikla HTTP, SMTP, FTP gibi plain-text her türlü ağ trafiğini izlemek, analiz etmek ve içerisinde string/pattern aramak gibi işlere olanak sağlayan ngrep ile örnek olarak bir ağ uygulamasındaki problem, sunucu – istemci arasındaki ilgili trafiği analiz ederek tespit edilebilir ki bu şekilde problemi iligli uygulamanın hata bildirimlerinden ya da log dosyaları üzerinden tespit etmek yerine daha alt bir katmanda yakalamanıza olanak sağlar.

Çok uzun zamandır kullandığım bir araç olmasına rağmen kendisi ile ilgili herhangi bir yazı yazmamış olduğumu farkedince ne olduğundan ve nasıl çalıştığından bahseden dair bu yazıyı yazmak istedim. İlginizi çekerse göz atmak isteyebilirsiniz.

Başlangıçta da belirttiğim gibi grep'in network katmanı üzerinde çalışan versiyonu diyebileceğimiz ngrep, IP, TCP, UDP, ICMP, IGMP protokollerini tanıyabiliyor ve BPF destekliyor. Bu nedenle spesifik olarak hedef, kaynak, protokol ve port seçilebilmesine olanak sağlıyor. Ayrıca filtrelenen bu network trafiğinde data paketleri içerisinde aynı grep'te olduğu gibi string ya da regular expression patternleri arayabiliyorsunuz.

Ngrep, promiscuous mode'da çalışabildiğinden dolayı, hedefi dinlediği interface olmayan paketleri de analiz edebilmektedir. Başka bir deyişle firewall vs. gibi merkezi bir noktadan geçen trafik, ilgili paketlerin hedefi firewall'un kendisi olmasa bile dinlenebilmekte ve analiz edilebilmektedir. Bu şekilde örneğin networkünüzde bulunan bir zombie bilgisayarı (misal irc trafiğini dinleyerek ) saptamanız münkün olabilir.

Öte yandan ngrep trafiği sonradan incelemek için bir pcap dump dosyasına kaydedebilir, daha önceden kaydedilmiş bir pcap dump dosyasını okuyabilip ve replay edebilir.

KURULUM


Ngrep hemen bir çok *nix sistemde çalışabilmektedir. Ayrıca bir çok popüler dağıtım için de  pre compiled paketleri bulunmaktadır. Dolayısı ile ilgili sistemlerin paket yöneticileri üzerinden kurmak mümkündür.

Debian, RHEL ve FreeBSD sistemler için paket yöneticisi üzerinden ngrep kurulumu şu şekildedir. :

Debian / Ubuntu / Mint

Debian gibi apt kullanan dağıtımların base paket depolarında ngrep öntanımlı olarak bulunmaktadır. Dolayısı ile apt-get ile klasik şekilde kurulabilir:

# apt-get install ngrep

RHEL / CentOS / Fedora

Yum paket yöneticisi kullanan RHEL tabanlı dağıtımlarda ise ngrep RPMForge yum deposunda bulunmaktadır. Dolayısı ile yum üzerinden kurulum için öncelikle sisteminize RPMForge deposunu tanıtabilir ve aşağıdaki şekilde kurulumu yapabilirsiniz.

# yum install ngrep

FreeBSD

FreeBSD sistemlerde ngrep base paket deposunda bulunmaktadır. Bu nedenle ya ports üzerinden ya da aşağıdaki gibi pkg_add komutu ile kurabilirsiniz:

# pkg_add -r ngrep

KULLANIM ŞEKİLLERİ


ngrep BPF filtreleme mantığını desteklediği için and / or ve not ifadelerini de kullanarak host / network / source / destination / port gibi değişkenleri filtreleyip ve içlerinde pattern arayabilmektedir.

Temel Kullanım

Örnek olarak kaynak ya da hedef portu 25 olan tüm trafiği görüntülemek için aşağıdaki komut kullanılabilir.

# ngrep -d any port 25

Yukarıdaki komut tüm smtp trafiğini ekrana basacaktır. -d parametresi host üzerinde bulunan tüm network interfaceleri üzerinden geçen trafiğin görüntülenmesini söylemektedir. Eğer spesifik bir interface üzerinden akan trafiği görüntülemek isterseniz “-d eth0” gibi interface ismini belirtebilirsiniz.

And / Or Parametreleri ile Filtre Daraltma

Aynı komutu and / or parametreleri ile kullanarak sonuçları daraltmak da mümkündür.

# ngrep -d any port 25 or port 578 and host 1.1.1.1

Yukarıdaki örnekte hedef ya da kaynak portu 25 ya da 587 olan ve hedef ya da source IP'si 1.1.1.1 olan paketleri görüntüle denmektedir.

Source ve Destination Parametreleri

Eğer source ya da destination ip adreslerini de belirlemek isterseniz komutu şu şekilde düzenleyebilirsiniz.

# ngrep -d any port 25 or port 578 and dst 1.1.1.1 and src 2.2.2.2

Böylece destination'i 1.1.1.1 olan ve source'u 2.2.2.2 olan paketlerin görüntülenmesi sağlanmaktadır.

Not Parametresi ile Hariç Tutma

Filtreden hariç tutmak istediğiniz öğeler olması durumunda “not” parametresi kullanılır:

# ngrep -d any port 80 and dst not 1.1.1.1

Yukarıdaki örnekte portu 80 olan ancak hedefi 1.1.1.1 olmayan tüm paketleri görüntüle denmektedir.

Çıktıların Düzenlenmesi

ngrep'i yukarıdaki örneklerde olduğu gibi çalıştırmanız durumunda çıktılar ekrana düzensiz bir sıra ile basılacaktır. Örnek olarak http trafiğinin görüntüsü şuna benzer olacaktır:

T 1.1.1.1:80 -> 2.2.2.2:34766 [AP]
  HTTP/1.1 302 Found..Date: Thu, 27 Sep 2012 20:52:05 GMT..Server:..Expires: Wed, 11 Jan 1984 05:00:00 GMT..Last-Modified: Thu, 27 Sep 2012 20:52:05 GMT..Cach
  e-Control: no-cache, must-revalidate, max-age=0..Pragma: no-cache..X-Frame-Options: SAMEORIGIN..Location: http://www.syslogs.org/?p=99303&preview=true..Content-Len
  gth: 0..Keep-Alive: timeout=5, max=100..Connection: Keep-Alive..Content-Type: text/html....                                                                        
##
T 2.2.2.2:34766 -> 1.1.1.1:80 [A]
  GET /?p=10303&preview=true HTTP/1.1..Host: www.syslogs.org..Connection: keep-alive..Cache-Control: max-age=0..Authorization:=
  ..User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.11 (KHTML, like Gecko) Ubuntu/12.04 Chromium/20.0.1132.47 Chrome/20.0.1132.47 Safari/536.11..Accept: 
  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8..Referer: http://www.syslogs.org/post-new.php..Accept-Encoding: gzip,deflate,sdch..Accept-
  Language: en-US,en;q=0.8..Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3..Cookie:

Sonucun daha okunaklı olarak basılması için -W Byline parametresi kullanılır:

# ngrep -d any -W Byline port 80

T 2.2.2.2:53723 -> 1.1.1.1:80 [AP]
GET /analytics/?wt=framework&type=widgetJSTracking&trackingInfo=a=cws-fwk-anonymous&123as&or=http%12%2F1a2Fwww.syslogs.org%2F%3Fp%123a%29preview%3Dtrue HTTP/1.1.
Host: www.linkedin.com.
Connection: keep-alive.
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.11 (KHTML, like Gecko) Ubuntu/12.04 Chromium/20.0.1132.47 Chrome/20.0.1132.47 Safari/536.11.
Cache-Control: max-age=0.
Accept: */*.
Referer: http://www.syslogs.org/?p=2012&preview=true.
Accept-Encoding: gzip,deflate,sdch.
Accept-Language: en-US,en;q=0.8.
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3.

Bu şekilde çıktılar daha düzgün bir şekilde görüntülenecektir.

Trafik İçerisinde Pattern Aramak

Örnek olarak FTP trafiği içinde geçen kullanıcı adı / şifre bilgiler şu şekilde aranabilir:

# ngrep -wi -d any 'user|pass' port 21

Bu komutun örnek bir çıktısı şu şekilde olacaktır.

interface: any
filter: (ip or ip6) and ( port 21 )
match: ((^user|pass\W)|(\Wuser|pass$)|(\Wuser|pass\W))
##########
T 2.2.2.2:44711 -> 1.1.1.1:21 [AP]
  USER yokya..                                                                                                                                 
###
T 2.2.2.2:44711 -> 1.1.1.1:21 [AP]
  PASS tabiitabii..                                                                                                                            
###########

Yukarıdaki komutta geçen -w ibaresi aranan ifadenin kelime olması gerektiğini belirten bir regex patterni oluşturur. ((^user|pass\W)|(\Wuser|pass$)|(\Wuser|pass\W))
Ayrıca, -i parametresi aranan kelimenin büyük ya da küçük harflerden ibaret olabileceğini belirtir. (ignore case)

Bir diğer örnek ise http trafiği içerisinde user-agent toplamak olabilir:

# ngrep  -q -i ‘user-agent' tcp port 80

Bu şekilde http trafiği içindeki tüm agent bilgileri ekrana basılacaktır.

Bu komutta kullanılan -q paratresi, eşleşmeyen trafik için basılan ##### ibarelerinin görüntülenmemesini sağlar.

Trafiğin PCAP dump dosyasına kaydedilmesi

Çok yoğun network trafiğinin incelenmesi için akan trafiğin bir pcap dosyasına kaydedilmesi düşünülebilir. Bu şekilde ilgili dosyayı yeniden replay edebilir ve içerisinde detaylı tarama yapabilirsiniz.

Bir ngrep cümlesinin sonucunu bir pcap dosyasına kaydetmek için kullanılabilecek örnek komut şu şekildedir:

# ngrep -O /tmp/dns.dump -d any -T port domain

Bu komutta tüm dns (port domain) trafiği timestamp (-T) değeri ile birlikte /tmp/dns.dump isimli dosyaya yazılacaktır.
(Dikkatinizi çektiği gibi port olarak direk ilgili port üzerinde çalışan servisin ismini yazdık. domain ifadesinin port 53 olduğu /etc/services dosyası içerisinden alınmaktadır. Bu mantıkla port kısmına direk ftp, http, smtp de yazabilirsiniz.)

PCAP Dosyasından Trafik Analizi

Aynı şekilde, daha önceden kaydedilmiş bir pcap dosyası içerisindeki trafik kaydedildiği andaki gibi yeniden yürütülebilir ve içerisinde analiz yapılabilir:

# ngrep -w 'falanca'  -I /tmp/dns.dump

Bu örnekte, /tmp/dns.dump dosyası içerisinde falanca ibaresi aranacaktır.

Örnekleri çoğaltmak mümkün. Daha fazla bilgi isterseniz aşağıdaki linklere göz atabilirsiniz.

http://ngrep.sourceforge.net/

http://blog.lifeoverip.net/2008/11/27/ngrep-ile-ag-trafigi-analizi/

Visited 2.639 times, 1 visit(s) today
Kategoriler: *nix,ipucu |

Bu yazılar da ilginizi çekebilir:


- IPTraf – IP Network Monitoring Tool
- Linux: Ethernet Bağlantı Hızının Tespit Edilmesi
- WAFP – Web Application Finger Printer
- Portspoof ile Network Scanner’ları Yanıtlamak
- FreeBSD Sistemlerde Kurulu Paketlerin Update Edilmesi

Yorumlar


Henuz yorum yapilmamis.

Yorumda bulunun.