Açıkkod Güvenlik Araçları:Fragroute ve fragrouter

Günümüz ağ ve güvenlik sistemlerinin başa çıkmakta zorlandığı en ciddi tehditlerden birisi IP parçalamadır. IP parçalama bir IP paketini(içerisinde TCP, UDP taşıyabilir) güvenlik sistemlerinden geçirirken birden fazla parçaya bölmektir. Genellikle güvenlik cihazlarındaki imza tabanlı kontrolleri atlatmak için tercih edilir.

Fragroute ve fragrouter geliştirilmiş ve TCP/IP ağlarda isteğe göre bir IP paketini parçalamayı ve hedefe parçalı şekilde göndermeye yarayan açık kaynak kodlu bir araçtır.

Aralarındaki fark ise fragrote kurulu olduğu cihazdan çıkan paketlerde değişiklik yaparken fragrouter route modta çalışan ve paketleri yönlendiren cihazların üzerinden geçen paketleri değiştirmeye yardımcı olur. İşlevsel açıdan değerlendireceğimizden yazıda iki yazılım için fragroute ismini kullanacağız.

Güvenlik cihazları genelde gelen trafiği kendi üzerinde birleştirerek saldırı veya zararlı kod içeren imzanın olup olmadığını kontol ederler . Fragroute’ın amacı güenlik cihazının imzayı bulmasını engellemektir.

Bir saldırganın zafiyet bulunan bir sistemi exploit etmesinin ilk adımı information gathering ‘tir . Herhnagi bir vulnerability scan aracı ile hedef sistem tarandıktan ve zafiyet bulunduktan sonra
sıra bu açıklığı exploit etmeye gelir . Bu aşamada hedef sistemin önünde güncel bir ips varsa sistemi exploit etmemizi engelleyecektir . İşte fragroute bu aşamada devreye girer.

Örneğin hedef sistem bir ftp sunucu olsun ve sunucu ya bağlantı yapıldığında versyon bilgisi olarak bize 2.0.4 bilgisini dönsün . Sunucun son versyonunun 3.2.2 olduğunu bilen vulnerability scan aracı aradaki patchlerin geçilmediğini anlar ve bu patchlerin kapattığı tüm açıklıkları raporlar. İps ‘ler sistemin göndereceği versyon bilgisini göndermesini engellemediğinden vulnerability tool ile veya bağlantı deneyerek bu bilgi elde edilebilir. Fakat exloit aşamasında ips exploit işleminde geçen veriyi analiz eder ve gerekli imzayı bulduğunda bloklar

Bu durumda hedef sistemde uygulancak exploitleri , parçalayarak , eksik göndererek , araya başka paylod lu paketler koyarak ips ‘in imzayı eşlemesını engellememiz gerekir . Fragroute bu işlemi yaparken aşşağıdaki yolları denemeyi destekler.

Delay : kuyruğun başındakisonundaki veya herhangi bir yerindeki paketi verilen süre kadar geciktirir
Drop : kuyruğun başındakisonundaki veya herhangi bir yerindeki paketi verilen oran kadar düşürür
Dup : kuyruğun başındakisonundaki veya herhangi bir yerindeki paketi verilen oran kadar ikiler
İp_chaff : kuyruktaki paketler arasına farklı paylodlarda başka paketler sokar
İp_frag : verilen değer kadar ip paketlerini parçalar
İp_opt : ip paketlerine farkli opsyonlar ekler
İp_ttl : ip paketlerinin time-to-live değerlerini ayarlar
İp_tos : ip paketlerinin type-of-services değerlerini ayarlar
Order : kuyruktaki paketleri yeniden düzenler
tcp_chaff : kuyruktaki tcp segmentleri arasına farklı payloadlardaki tcp segmentleri yerleştirir .
Geçersiz checksum değerine sahip , tcp flag setlenmemiş veya eski TCP timestamp e sahip paketler kullanır.
Tcp_opt : tüm tcp paketleri farkli tcp seçenekleri ekler
Tcp_seg : kuyruktaki her tcp segmentini parçalar.

Fragroute çalışması sırasında yukarıdaki parametreleri default olrak fragroute.conf dosyasından alır
Default olarak fragroute.conf dosyası aşağıdaki seçenekleri içerir

root@bt:~# cat /etc/fragroute.conf
tcp_seg 1 new
ip_frag 24
ip_chaff dup
order random
print
root@bt:~#

Çalışma esnasında hangi işlemleri yaptığını gösterir.

root@bt:~# fragroute -f fragroute.conf4 192.168.2.81
frafroute: tcp_seg -> ip_frag -> ip_chaff -> order -> print

Yeni conf dosyası ile çalıştırdığımızda uygulamış olduğu seçenekler değişmektedir

root@bt:~# fcat fragroute.conf3
ip_chaff dup
print
root@bt:~# fragroute -f fragroute.conf3 192.168.2.81
fragroute: ip_chaff -> print

Fragroute u en kolay test etmenin yolu;
ngrep ve netcat kullarak netcat in gelen paketlerdeki stringleri Fragroute kullanmadan yakaladığını,
fragroute kullanıldığında netcat in birleştirme özelliği olmadığından yakalayamadığını görerek test edebiliriz . Ayrıca ip seviyesinde parçalama opsyonu ile çalıştırıldığında tcpdump ile bakıldıgında da tcpdump in port bazlı filtrelerinin çalışmadığını ve ip bazlı filtrelerde de port bilgisi bulunmayan çıktı verdiğini görebilirsiniz .

Ayrıca bir önceki sayımızda bahsettiğimiz tcpreplay/tcprewrite ve fragroute ‘u birlikte kullanabilirsiniz
Oluşturduğunuz saldırı imzaları içeren pcap dosyasını bir kez ips ten geçirip daha sonra
ikinci kez tcprewrite ve fragroute ile değiştirdiğimiz pcap dosyasını geçirip ips in ürettiği logları karşılaştırabilirsiniz .

Dump altığınız tarafı degiştirmek için :
tcprewrite –fragroute=frag.conf –infile=input.pcap –outfile=output.pcap

Karşı tarafınkini değiştirmek için :
tcprewrite –fragroute=frag.conf –fragdir=c2s –cachefile=input.cache –infile=input.pcap –outfile=output.pcap

Not :
Ngrep ile network te string arama : eth5 i dinleyen ve deneme geçen stringleri bulun komut
ngrep -q -i “deneme” -d eth5

Netcat ile 500 nolu portu dinleme
nc -l 500

Netcat ile 500. port bağlanıp veri gonderme
nc 192.168.2.33 500

Kaynaklar :

The Tao of Network Security Monitoring Beyond Intrusion Detection
http://www.youtube.com/watch?v=k7viy_NN8f4
http://tcpreplay.synfin.net/wiki/tcprewrite#tcprewrite
http://www.sans.org/security-resources/idfaq/fragroute.php