Ağ Trafiğinde Pasif İşletim Sistemi ve Uygulama Tespiti

İnternet teknolojisinin yaygınlaşmasının sonucunda teknoloji sürekli kendini yenilemekte ve yeni sistemler ortaya çıkmaktadır. Bu teknolojilerden en sık karşılaşılanları kuşkusuz web sunucular,güvenlik duvarları, web uygulama güvenlik duvarları, IPS cihazları ve Load balancer(yük dengeleyici) gibi cihazlardır. 
Birçok kurumda uygulama sunucularına direk erişim olmaz ve arada sizi başka bir cihaz karşılar. Sızma testlerinde bilgi toplama aşamasında veya  ele geçirilmiş bir linux ya da windows sistemin adli bilişim çalışmalarında bağlantı esnasındaki aktörlerin kimler olduğu önemlidir.
Aşağıda örnek olarak bahsedilen,
  • Herhangi bir kurum yerel ağda oluşan bir trafiğin incelenmesi esnasında istemcinin hangi kanaldan hangi browser üzerinden iletişim kurduğu, sunucun türü, uptime süresi veya bağlantı esnasında taşınan http trafiğini incelemek
  • İnternet ortamında kurum ağından  dışarıya giden internet trafiğinde bağlantıyı kuran ve bağlantı kurulan sistemlerin özelliklerini öğrenmek
  • Ele geçirilmiş bir sistemin analizini yaparken kaydedilmiş ağ trafiği üzerinden  bağlantı aktörlerinin kimliklerini öğrenmek ve oluşan trafiği görmek
gibi senaryolarda analizi kolaylaştıracak ve basite indirgeyecek bir takım yöntemler kullanılmalıdır. Açık kaynak kodlu bir çok yazılımla bunları yapmak oldukça kolaydır. Bu makalede ise p0f adında bir araç ile  bu işlemlerin  nasıl gerçekleştirileceği basitçe anlatılacaktır.



p0f Nedir ?



p0f, TCP/IP bağlantı mekanizmasındaki bağlantı aktörlerini bağlantıya herhangi bir müdahalede bulunmadan, tamamen pasif fingerprint yöntemleri ile tespit etmeye çalışan bir araçtır. Uygulamanın bazı özellikleri aşağıdaki gibidir.
  • Son derece hızlı bir şekilde işletim sistemi tanıma
  • NAT arkasındaki sistemler de dahil olmak üzere sistemlerin uptime sürelerinin ölçümü
  • Hedef sistemlerin ön tarafında çalışan Load balancer, NAT, proxy gibi sistemlerin tespiti
  • Sahte istemci ve sunucuların tespiti  vs.



Nasıl Çalışır ?



P0f, IPv4 ve IPv6 başlıklardaki verileri, TCP başlıklarını, 3 yollu el  sıkışma esnasındaki bağlantıyı inceler. Bunun yanısıra  uygulama düzeyinde kendine ait bir takım payloadlar kullanarak trafiği analiz eder.   



Özellikleri ve Kullanımı



p0f aracının güncel versiyonunu http://lcamtuf.coredump.cx/p0f3/ adresinden indirebilirsiniz.
Uygulama indirildikten sonra ilk olarak tar dosyası açılır.
root@osmncht:~/Desktop# tar -zxvf p0f-3.08b.tgz
p0f-3.08b/
p0f-3.08b/languages.h
p0f-3.08b/alloc-inl.h
p0f-3.08b/tools/
p0f-3.08b/tools/p0f-sendsyn6.c
….



Sonrasında sıkıştırılmış dosyalar açıldığı zaman build.sh çalıştırılabilir dosyasının olduğu görülecektir. Uygulamayı kurmak için yapılması  gereken tek şey bu dosyayı çalıştırmaktır.
root@osmncht:~/Desktop/p0f-3.08b# ./build.sh
Welcome to the build script for p0f 3.08b!
Copyright (C) 2012 by Michal Zalewski <lcamtuf@coredump.cx>

[+] Configuring production build.
[*] Checking for a sane build environment… OK
[*] Checking for working GCC… OK
[*] Checking for *modern* GCC… OK
[*] Checking if memory alignment is required… nope
[*] Checking for working libpcap… OK
[*] Checking for working BPF… OK
[+] Okay, you seem to be good to go. Fingers crossed!
[*] Compiling p0f… OK

Well, that’s it. Be sure to review README. If you run into any problems, you
can reach the author at <lcamtuf@coredump.cx>.



Artık uygulama kullanıma hazırdır. Uygulamanın özelliklerine help menüsünden bakılabilir.
Sık kullanılacak olan bazı parametrelerin neleri ifade ettiği aşağıda belirtilmiştir.
  •  -i iface  – Dinlenilecek olan ağ arayüzünü belirtir
  •  -r file   – Çevrimdışı olarak pcap dosyalarını okumak için kullanılır
  •  -p        – Ağ arayüzünü promiscuous modda dinlemek için kullanılır
  •  -L        – Kullanılabilir ağ arayüzlerini listeler
  •  -o file   – Sonuçları harici bir dosyaya yazmak için kullanılır
  •  -d        – Arka planda deamon olarak çalıştırmak için kullanılır



Herhangi bir filtre kullanılmadan en temel kullanım şekliyle eth0 arayüzü dinlenildiği zaman uygulamanın çalışma mantığı kolayca anlaşılacaktır. Örnek bir çıktısı aşağıdaki gibidir. Burada uygulamayı test etmek için bir web uygulamasına browser üzerinden erişim denenmiştir. Aşağıdaki tabloda hedef siteye bağlantı kurabilmek için ilk olarak test makinesi ile hedef site arasında 3 yollu el sıkışmanın gerçekleştiği görülmektedir. Bunun yanısıra istemci makinenin hangi işletim sistemini kullandığı da çıktılar arasındadır.
root@osmncht:~/Desktop/p0f-3.08b# ./p0f -i eth0
— p0f 3.08b by Michal Zalewski <lcamtuf@coredump.cx> —

[+] Closed 1 file descriptor.
[+] Loaded 320 signatures from ‘p0f.fp’.
[+] Intercepting traffic on interface ‘eth0’.
[+] Default packet filtering configured [+VLAN].
[+] Entered main event loop.

.-[ 192.168.0.24/41902 -> 192.99.12.218/80 (syn) ]-
|
| client   = 192.168.0.24/41902
| os       = Linux 3.x
| dist     = 0
| params   = generic
| raw_sig  = 4:64+0:0:1460:mss*10,10:mss,sok,ts,nop,ws:df,id+:0
|
`—-

.-[ 192.168.0.24/41902 -> 192.99.12.218/80 (mtu) ]-
|
| client   = 192.168.0.24/41902
| link     = Ethernet or modem
| raw_mtu  = 1500
|
`—-

.-[ 192.168.0.24/41902 -> 192.99.12.218/80 (syn+ack) ]-
|
| server   = 192.99.12.218/80
| os       = Linux 3.x
| dist     = 16
| params   = none
| raw_sig  = 4:48+16:0:1460:mss*10,9:mss,sok,ts,nop,ws:df:0
|
`—-



Aynı uygulamanın devamına bakıldığı zaman, hedef siteye yapılan bir http isteğinin p0f formatında çıktısı aşağıdaki gibidir. Burada istemci makinenin ip adresi, bağlantı kurulan browser bilgileri ve http başlık bilgileri gösterilmiştir.
.-[ 192.168.0.24/41902 -> 192.99.12.218/80 (http request) ]-
|
| client   = 192.168.0.24/41902
| app      = Firefox 10.x or newer
| lang     = English
| params   = none
| raw_sig  = 1:Host,User-Agent,Accept=[text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8],Accept-Language=[en-US,en;q=0.5],Accept-Encoding=[gzip, deflate],?Cookie,Connection=[keep-alive]:Accept-Charset,Keep-Alive:Mozilla/5.0 (X11; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0 Iceweasel/22.0
|
`—-



Kurulan bir tcp bağlantısında sadece istemci makineye ait bilgiler değil, hedef uygulamaya ait birtakım bilgileri de p0f aracı ile tespit etmek mümkündür. Örnek olarak bga.com.tr adresine yapılan bir bağlantı p0f aracı ile incelenirse hedef uygulamaya ait sunucu bilgileri aşağıdaki gibi görülebilir.
.-[ 192.168.0.27/45954 -> 50.22.202.163/80 (http response) ]-
|
| server   = 50.22.202.163/80
| app      = Apache 2.x
| lang     = none
| params   = none
| raw_sig  = 1:Date,Server,?Location,?Content-Length,Keep-Alive=[timeout=5, max=100],Connection=[Keep-Alive],Content-Type:Accept-Ranges:Apache



Uygulamayı online olarak test etmek isterseniz http://lcamtuf.coredump.cx/p0f3/ adresini ziyaret edebilirsiniz. Bağlantıya tıkladığınız zaman size bağlantı kurmaya çalıştığınız makine ile ilgili birtakım bilgileri gösterecektir.
Uygulamanın API erişimi, NAT tespiti gibi  diğer yeteneklerini de görmek için kendi sayfasını (http://lcamtuf.coredump.cx/p0f3/README ) ziyaret edebilisiniz.
Osman Cihat IŞIK  < cihat.isik@bga.com.tr >