Ngrep ile Ag Trafigi Analizi

Ilk olarak Ngrep’in ismini burada zikretmistim fakat yaptigi is harici bir detay vermemistim. Bugun egitim notlarini guncellerken Ngrep ile ilgili eksikliklerin oldugunu gordum ve daha detayli yazim icin kollari sivadim. Buraya da egitime katilamayan fakat icerigini merak edenler icin kisa bir bolumunu ekliyorum.

grep komutu: UNIX/Linux sistemlerde text dosyalarla uğraşıyorsanız grep komutunun hayati önemini bilirsiniz.  Mesela  100000 satirlik bir dosya icerisinde sayi ile baslayan satirlari ve bu satirlar icerisinde “passwd” stringi geçenleri bulmak icin grep komutu tek basina yeterli olacaktir.

Ya da web sunucunuzun ürettiği erişim logları arasında googlebot’un kaç kere sitenize uğradığını öğrenmek istiyorsanız basit bir grep komutu ve wc ile hesaplayabilirsiniz.

#grep  googlebot /var/log/web_sunucu_erisimlogu|wc -l

Grep’in gücüne güç katan ise düzenli ifadelerle(regular expressions) birlikte kullanabilmemizdir.

Ngrep: grep benzeri bir yazılım fakat klasik dosyalarda değil de ağ trafiğinde arama/bulma işlemi yapar. Kısaca UNIX sistemlerin vazgecilmez aracı grep komutu’nun network trafiğine uyarlanmış versiyonudur diyebiliriz.

Ngrep ile Neler yapabiliriz?

Tamamen hayal dünyamızın genişliğine kalmış.

Mesela  http portu üzerinden kullanılan SSH bağlantılarını ngrep ile keşfedebilirsiniz ya da sisteme bağlanan ve cleartext protokol kullanan tüm bilgileri kaydedip sahiplerine şifreli protokol kullanmaları için öneri de bulunabilirsiniz. Ya da tünelleme programlarını ortamda hiçbir IPS, Firewall vs ye ihtiyaç duymadan Ngrep ile yakalayabilirsiniz.Geçenlerde bir arkadaş ile konuşurken kendi şirketlerindeki SSL tünellemeleri ngrep aracılığı ile yakaladıklarından bahsediyordu. Ngrep Çalışmaları Ngrep’in en basit kullanımı  ngrep yazıp ekrana bakmaktır. Tabi bu durumda ekranda akan binlerce paketi göreceksiniz. Tıpkı tcpdump’ın parametresiz kullanımı gibi. Sadece belirli bir port üzerinden geçen trafikte huzeyfe kelimesini aratmak isterseniz;

# ngrep huzeyfe tcp port 25

interface: rl0 (111.111.111.11/255.255.255.248) filter: (ip or ip6) and ( tcp port 25 ) match: huzeyfe ######################################################################################

######################################################################################

T 212.252.168.253:37148 -> 80.93.212.86:25 [AP] ehlo huzeyfe..

NOT: ###### ile başlayan ve devam eden satırlar bizim aradığımız harici trafiği gösterir. Bunları görmemek için –q parametresi kullanılır.

~]# ngrep -q huzeyfe tcp port 25 interface: rl0 (111.111.111.11/255.255.255.248) filter: (ip or ip6) and ( tcp port 25 ) match: huzeyfe T 212.252.168.253:37148 -> 80.93.212.86:25 [AP] ehlo localhost.huzeyfe.net.. T 212.252.168.253:37148 -> 80.93.212.86:25 [AP] mail from: [email protected] T 212.252.168.253:37148 -> 80.93.212.86:25 [AP] rcpt to:[email protected]

gibi…

SMTP Trafiği üzerinde ngrep kullanımı

SMTP Trafiğinde gelen ve giden maillerin kimler tarafından gönderildiği bilgisini almak için aşağıdakine benzer bir regexp yazmanız yeterli olacaktır.

[[email protected] ~]# ngrep -q -i ‘rcpt to:|mail from:’ tcp port 25

interface: rl0 (111.111.111.11/255.255.255.248) filter: (ip or ip6) and ( tcp port 25 ) match: rcpt to:|mail from: T 213.154.215.92:4257 -> 80.93.212.86:25 [AP] MAIL FROM: <[email protected]>..RCPT TO: <[email protected]>..DATA.. T 87.212.128.168:1284 -> 80.93.212.86:25 [AP] RCPT TO: <[email protected]>.. T 77.123.113.49:14892 -> 80.93.212.86:25 [AP] …

HTTP  trafiğini Ngrep ile izleme

Sisteminize hangi tip browserlarla bağlanıldığını görmek için

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

interface: rl0 (111.111.111.11/255.255.255.248) filter: (ip or ip6) and ( tcp port 80 ) match: user-agent

T 66.249.72.236:65241 -> 80.93.212.86:80 [AP] GET /robots.txt HTTP/1.1..Host: blog.lifeoverip.net..Connection: Keep-alive..Accept: text/plain,text/html..From: googlebot(at)googlebot.com..User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html )..Accept-Encoding: gzip,deflate….

T 80.93.212.86:80 -> 66.249.72.236:65241 [AP] HTTP/1.1 200 OK..Date: Thu, 27 Nov 2008 07:48:49 GMT..Server: Apache/2.2.4 (FreeBSD) mod_ssl/2.2.4 OpenSSL/0.9.7 T 66.249.72.236:65241 -> 80.93.212.86:80 [AP] GET /tag/linux/ HTTP/1.1..Host: blog.lifeoverip.net..Connection: Keep-alive..Accept: */*..From: googlebot(at)goo glebot.com..User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)..Accept-Encodin g: gzip,deflate..If-Modified-Since: Wed, 26 Nov 2008 07:54:53 GMT… …

Http portundan yapılan ssh bağlantılarını izleme

http portundan ssh bağlantısı yapıldığından şüpheleniyorsanız aşağıdaki ngrep komutu size gerçeği söyleyecektir.

# ngrep -q -i SSH tcp port 80

interface: rl0 (111.111.111.11/255.255.255.248) filter: (ip or ip6) and ( tcp port 80 ) match: SSH

T 80.93.212.86:80 -> 212.252.168.235:44020 [AP] SSH-2.0-OpenSSH_4.5p1 FreeBSD-20061110. T 80.93.212.86:80 -> 212.252.168.235:44034 [AP] SSH-2.0-OpenSSH_4.5p1 FreeBSD-20061110. T 212.252.168.235:44034 -> 80.93.212.86:80 [AP] SSH-2.0-OpenSSH_5.0. T 80.93.212.86:80 -> 212.252.168.235:44034 [AP] …….^…D…..=z……~diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman ..

-i parametresi büyük küçük harf farketmeksizin arama yap manasına gelir.

Bu komutu biraz daha geliştirip SSH portu harici herhangi bir porttan SSH kullanmaya çalışanları izleyebilirsiniz.

# ngrep -q -i ‘^SSH’ tcp

T 80.93.212.86:443 -> 212.252.168.235:44197 [AP] SSH-2.0-OpenSSH_4.5p1 FreeBSD-20061110.

T 212.252.168.235:44197 -> 80.93.212.86:443 [AP] SSH-2.0-OpenSSH_5.0.

Http Protokolü üzerinden başka protokollerin kullanılması

IDS/IPS konuları ile ilk ilgilenmeye başladığımda hep protokol anormalliklerini nasıl anladıklarını merak ederdim. Yani http portu üzerinden başka protokollerin aktığını nasıl fark eder ve engellerlerdi.

Zamanla protokolleri  detaylı öğrenmeye başladıkça nasıl yapılabileceği konusunda kafamda net bir şeyler oluşmuştır. Sonrasinda Snort ile tanıştıktan sonra merakim dindi:)

Ngrep ile de başka hiçbir şey kullanmadan bazı  “basit” anormallikleri keşfedebiliriz.  Mesela http portu üzerinden HTTP protokolu harici başka trafik akıyorsa bir anormallik var demektir. Bunu ngrep ile anlayabiliriz.

#ngrep -q -W byline -v ‘^GET|POST|PUT|HTTP/1.[01]’ tcp port 80

filter: (ip or ip6) and ( tcp port 80 and dst host 80.93.212.86 ) don’t match: ^GET|POST|PUT|HTTP/1.[01] T 212.252.168.253:23885 -> 80.93.212.86:80 [AP] SSH-2.

Ngrep Çıktılarını düzenlemek

#ngrep ‘ ‘ tcp port 80

T 80.93.212.86:80 -> 88.253.104.43:49313 [AP] et/feed/”>Site Feed (RSS)</a> | <a href=”http://blog.lifeoverip.net/wp-login.php”>Log in</a> |    –> LifeOverIP   .net 2007             <!–necessary–>….<script src=”http://stats.wordpress.com/e-200848.js” type=”text/javasc   ript”></script>.<script ype=”text/javascript”>.st_go({blog:’3591255′,v:’ext’,post:’0′});.var load_cmc = functio n(){linktracker_init(3591255,0,2);};.if ( typeof addLoadEvent != ‘undefined’ ) addLoadEvent(load_cmc);.else load   _cmc();.</script>…</div>..</div>..</body>..</html>….0….

gibi çıktıların daha düzenli olması  için –W byline parametresi kullanılabilir.

# ngrep -W byline port 80

T 88.243.211.238:3646 -> 80.93.212.86:80 [AP] GET /images/senti.png HTTP/1.1. Accept: */*. Referer: http://mail.atakmail.com/src/left_main.php. Accept-Language: tr. Accept-Encoding: gzip, deflate. If-Modified-Since: Wed, 02 Aug 2006 09:02:00 GMT. If-None-Match: “6cec2a-23d-25e89200”. User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 1.1.4322). Host: mail.atakmail.com. Connection: Keep-Alive. Cookie: SQMSESSID=f5273e504f50a9349de34da61a19ce32; key=2xArYuX6PhA

Kaydedilmiş trafik üzerinde veri arama

Ngrep ile  yakalanan trafiği kaydetmek için –O parametresi kullanılır. Sonradan bu trafik üzerinde tekrar ngrep kullanılarak veri arama yapılabilir.

User/Password bilgilerini alma

Ngrep  ile şifresiz iletişim kullanan tüm protokollerin bilgisi alınabilir. (Şifreli iletişim kullanmak için güzel bir neden). Mesela ftp  sunucuya giden/gelen user/pass bilgilerini görmek için aşağıdaki gibi bir komut yeterli olacaktır.

#ngrep –w i -d any ‘user|pass’ port 21

Ya da POP3, IMAP üzerinden akan user/pass bilgileri aşağıdaki gibi bir komutla izlenebilir.

# ngrep -t -q ‘(PASS)’ ‘tcp and port 110 or tcp port 143’

Ngrep  ile şifreli protokollerin İzlenmesi

Ngrep normalde şifreli protokolleri inceleyemez. Inceleyebilmesi için şifreli protokollerin bir şekilde deşifre edilmesi gerekir. Bunun için stunnel ya da ssldump programı kullanılabilir. Stunnel ya da ssldump ile gelen şifreli trafik (uygun sertifikalar ile) deşifre edilerek ngrep’e yönlendirilir. Ngrep de bu trafiğin içerisinde akan düzmetinler arasında arama/bulma işlemini yapar.

Parçalanmış Paketler ve Ngrep

Doğası gereği Ngrep her gelen paketi ayrı değerlendirir ve parçalanmış paketleri anlamaz ve yazacağınız düzenli ifadeler fragmented paketlerde işe yaramaz. Bu tip işler için snort’un tcp reassembly özelliği kullanılır…

This entry was posted in Linux Security, Network Security, Network Tools, Security Tools and tagged , . Bookmark the permalink.

1 Response to Ngrep ile Ag Trafigi Analizi

  1. Pingback: ngrep ile Ağ Trafiğinin İncelenmesi - Pattern Search | Syslogs

Leave a Reply

Your email address will not be published. Required fields are marked *

twenty − 12 =