Register Now

Login

Lost Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Login

Register Now

Canyoupwn.me ~

TR | IP Fragmantasyonu ile DOS Saldırısı

Bu çalışmada servis dışı bırakma saldırıları olarak bilinen (denial of service) dos saldırılarından biri gerçekleştirilecektir. Bu saldırıyı gerçekleştirmeden önce dos saldırısının ne olduğu bilinmelidir. Dos saldırısı bilgisayar sistemlerini çalışamaz hale getirmek için gerçekleştirilen saldırılardır. Burada amaç hedef sistemden veri sızdırmak değil, hedef sistemin sağlıklı olarak çalışmasını önlemektir. Dos saldırısı birçok farklı yöntemle gerçekleştirilebilir. Bu yazıda dos saldırıları içerisinde pek popüler olmayan, ip fragmantasyonu yöntemi ile dos saldırısı gösterilecektir.

Ip fragmantasyonu ile dos  atağından  bahsetmeden önce ip fragmantasyonundan ve bunun saldırıda nasıl kullanılacağından bahsedelim. Bir ip datagramı bir düğümden diğerine seyahat ederken farklı fiziksel ağlar üzerinden geçmektedir. (Internetworking) Her fiziksel ağın desteklemiş olduğu maksimum çerçeve boyutu ise birbirinden farklıdır. Örneğin Ethernet fiziksek ağı en fazla 1500 bayt çerçeve uzunluğuna sahip ip paketleri taşıyabiliyorken, ATM 9180, 802.5 4465, X25 de 526 baytlık çerçeve uzunluğuna sahip paketleri taşıyabilmektedir.  Bir ip datagramının uzunluğu ise 65536 bayttır. Bu boyuttaki verinin hedef sisteme iletilebilmesi için daha küçük parçalara ayrılması gerekir. Bu işi uç düğümlerde çalışan TCP protokolü yerine getirmektedir.(Bknz TCP Segmentation) Fakat ağ üzerinde seyahat eden ip paketleri farklı fiziksel haberleşme altyapıları üzerinden seyrettiklerinde TCP nin parçalamış olduğu ip datagramlarının boyutları bu haberleşme altyapılarına uyum gösterememektedir. Bu durum aşağıda gösterilmiştir.

Ekran Alıntısı

Şekilde görüldüğü gibi Ethernet altyapıya sahip A PC sinden  çıkan ip paketi 1500 bayt büyüklüğünde olup, hedefe giderken,  X25 altyapısına sahip bir başka ağ ile karşılaşmıştır. X25 haberleşme altyapısı ise en fazla 526 bayt büyüklüğünde paketlerin oluşturulmasını desteklemekte olup, 1500 baytlık ip paketinin bu altyapı üzerinden iletilmesi için parçalanması gerektiği anlaşılmaktadır.  Burada router ip paketini parçalar ve bu parçaları B PC’sine gönderir. B PC’sinin bu paketleri anlamlandırabilmesi için ip paketlerini yeniden birleştirmesi gerekmektedir. (Reassemble) Yeniden birleştirme işlemi yalnızca uç düğümlerde –bu örnek için PC B de– ip katmanında gerçekleştirilebilmektedir. Bu paketlerin ip katmanına iletilebilmesi için eksiksiz olarak uç düğüme ulaşmaları gerekmektedir. Uç düğümde fragmantasyona uğraşmış paketin parçaları birleştirilmeden önce eksiksiz olarak alınıp daha sonra IP katmanına iletilmesi için bir buffer tahsis edilir.

Bu buffer ip katmanı ile veri bağı katmanı arasında yer almaktadır.(mantıksal olarak) Uç düğüm fragmante edilmiş paketleri aldığında ip katmanında birleştirme işlemini icra eder. Aşağıdaki şekilde bu proses gösterilmiştir.

image

Birleştirilme işleminde aşırı zaman ve bellek kaybı oluşmaması amacıyla bir zamanlayıcı kullanır. Zamanlayıcı ilk ip fragmanı alındığında başlar ve set edildiği değere ulaştığında fragmate edilmiş paketlerin tamamı ulaşmamışsa parçalanmış tüm paketler elemine edilir. Tüm bu durumlar göz önüne alınarak bir atak vektör oluşturulması gerekmektedir.

Saldırı vektörümüzü oluşturmadan önce bir paketin uç düğümde alındığında gerçekleşecek olan yaşam döngüsünü bilmemiz gerekmektedir. Aksi takdirde bu dos atağını gerçekleştirmek imkânsız hale gelecektir.

Bir ip paketinin alıcı (receiver) tarafındaki yaşam döngüsü, diğer bir deyişle paket alma prosesi aşağıda açıklanmıştır.(Layer 1-2)

  • Alıcı donanım harekete geçer. Network Interface Controller (NIC), DMA (Direct Memory Access) ile paketi alır ve kernel belleğinde bulunan rx_ring halkasına paketi gönderir. Ham veri (Raw data) rx_ring ile birlikte sk_buff alanına kopyalanır. Veri kernel belleğine alındıktan sonra NIC aldığı veriyi anlamlandırabilmek için CPU ya kesme gönderir. (İnterrulp- Top halves)  CPU paketi işlemesi için kontrolü çekirdek ISR ye (Interrulp Service Routine) aktarır. Bu aşamada proses interrulp kontexinde çalışmaktadır yani diğer tüm kesmeler vb şeyler bu prosesi bölemez. Bu sebeple ISR hızlı çalışmalıdır.
  • Ortam kontrol edilir. ISR NET_RX_SOFTIQR fonksiyonunu çalıştırır ve interrulp handler çalıştırılmaya başlar. Paketler mümkün olduğunda hızlıca işlenip ağ katmanına alınabilmek için bottom halves bayrağı set edilir ve bottom halves durumuna gelinir.
  • Daha sonra net_rx_action fonsiyonu çalışır ve paket üzerinde yapması gereken kontrolleri yapar ve paketi işler. İşlemeler sonlanınca kesmeler sonlandırılır.
  • Backlog_device denilen yapay birikim kontrol aracı paketler için yoklama listesi tutar. Şayet liste tamam değilse netif_rx fonksiyonunu yeniden çağırır. Yoklama listesi tam ise kesme durumundan tekrar çıkılır. Bu mekanizma bir paketin safahatı tamamlanmış ise ağ sürücüsü tarafından eklendiği input_pkt_queue kuyruğundan silinmesi için kullanılır.
  • Bu aşamada işlemi tamamlanan paketler için netif_receive_skb fonksiyonu çalıştırılır ve paketler tiplerine göre ayrılır ve ip_rcv fonsiyonlarına devredilerek işlemler tamamlanır.
  • Mevcut proses denetimine geri dönülür.

Yukarıda ayrıntılı olarak anlatılan paket işleme durumunu özetleyecek olursak. Bottom halves durumunda network ile veri katmanı arası çalıştırılır. (Layer 2-3)

  • Bu katman bottom halvesta çalıştırılır.
  • Bottom halves durumundan çıkmak için ağ katmanına gönderilecek bekleyen paket var ise bu paketi hemen ağ katmanına gönderilir.
  • Döngü boyunca kuyrukta bekleyen ve işlenmiş tüm paketleri Internet kabul protokolüne gönderilir.
  • Gönderilen paketler kuyruğu temizlenir.
  • İşleme prosesi sona erince Bottom half durumundan çıkılır.

Anlatılan prosesin aşağıdaki şekilde data link ve internet katmanlarında gerçekleştiği  görülmektedir.

r_rx

Geliştireceğimiz atak vektör tamda bu noktada devreye girecektir. Burada alıcı proses çalışırken bottom halvese girip oradan çıkamamasını sağlamak istemekteyiz. Çünkü bottom halves işlemleriyle meşgul olan cpu, diğer proseslere kaynak ve zaman ayıramayacak ve çalışma verimliliğini yitirecektir. Paket alma prosesinini bottom halves durumundan çıkamaması için sürekli olarak ip katmanına iletilecek olan bekleyen paket kuyruğunun dolu olması gerekmektedir. Burada bu kuyruğu doldurmak için normal olarak gönderilecek ip paketleri yetersiz kalacaktır.  Çünkü bu katman bu paketleri hızlıca işleyip  bir üst katmana yani ip katmanına iletir. Fakat sisteme sürekli ve yoğun olarak fragmante edilmiş ip paketleri gönderilirse (hatırlanacağı gibi fragmente edilmiş ip paketleri yalnızca ip katmanında birleştirilebilir) backlog_device kontrollerinde görüleceği gibi tampon fragmante edilmiş ip paketleriyle dolacak ve işlenmesi bitmemiş ip paketleri -fragmente edilmiş parçaların tamamının gelmesini beklenecek-  tamponda yer kaplamaya devam edecek, böylece yukarıda da anlatıldığı gibi net_rx_action fonksiyonu sürekli olarak çağrılacaktır. Yani sistem bottom halves durumundan fragmente edilen paketler için kurulan timer süresi dolana kadar çıkamayacaktır.

Yukarıda da anlatılan algoritmada belirtildiği gibi boşalmayan tampon bottom halves durumundan çıkamayacaktır. Böylece sistem kaynakları kernel alanı tarafından yani (software interrulp) kesmeler tarafından kullanılacaktır ve bu da CPU’nun verimliliğini düşürecektir.

Bu aşamada kesmelerin ne olduğunu ve özelliklerini bilmek ve açıklamak zorunlu hale gelmiştir. Özellikle Linux tabanlı işletim sistemlerinde iki farklı çeşit kesme çeşidi bulunmaktadır. Bunlar top halves ve bottom halves olarak adlandırılırlar.

Top halves zaman hassasiyeti olan işler için gerçekleştirilir ve bu kesme handle edildiğinde işletim sistemi önceliği tamamen bu kesmeye verir. Bu durum genelde donanımların göndermiş oldukları kesmelerde meydana gelir. Top halves kesmeler kısa ve hızlı olmak zorundadır. Çünkü işletim sistemi diğer tüm işlemleri askıya alıp önceliği bu işleme vermiştir. Bu durum Top-half kesmelerin interrulp contex alanında tanımlanmasıyla açıklanmaktadır. Top halves kesmeleri, yapılması gereken ertelenebilir işleri ikinci kesme kategorisi olan bottom halvese devreder. Bottom halves da bir kesme türüdür fakat ertelenebilir kesme işlemleri bu seviyede icra edilir. Örneğin network donanımına gelen bir paket ilk algılandığında top halves kesmesi gelir ve bu paketin geriye kalan tüm işlemlerinin icrası için durum bottom halvesa devredilir. Bottom Halves kernel contexi alanında tanımlıdır ve daha fazla aciliyete sahip bir kesme geldiğinde beklemeye geçebilir.  Aşağıdaki şekilde kesme contex alanları gösterilmiştir.

figure1

Tüm bu açıklamalar yapıldıktan sonra artık ip fragmantasyonu tabanlı atak gerçekleştirilebilir. Bu atak çift çekirdek ve multiple cores işlemcili Centos 7 işletim sistemine sahip sanallaştırılmış bir makineye gerçekleştirilecektir. CPU bilgileri aşağıda gösterilmiştir.

cpu

Saldırının amacı bol miktarda fragmante edilmiş ip paketi göndererek Centos 7 sunucusunda yazılım kesmeleri kaynaklı CPU faaliyeti meydana getirmektir. Fragmante edilmiş ip paketi hazırlayabilmek için çeşitli araçlar bulunmaktadır. Bu atakta bu araçlardan hping3 tercih edilmiştir. Bunun sebebi, kullanımı kolay, hızlıca paket oluşturabilmesi ve birçok faydalı özelliğinin bulunmasıdır. Hping3’ ün kullanımı için https://canyoupwn.me/?p=441  adresini ziyaret edebilirsiniz.

Saldırıyı gerçekleştirmek için aşağıdaki hping komutunu çalıştırıyoruz.

Hping3 192.168.1.47 –data 3000 –mtu 200 –flood –rand-source –C 8

Bu komutu açıklayacak olursak, burada 192.168.1.47 saldırıyı gerçekleştireceğimiz sunucunun ip adresi, –flood hping’in olabildiğince fazla paket hazırlayıp göndermesini sağlayan parametre, –rand-source parametresi oluşturulan her pakete farklı bir kaynak ip adresi ekleme parametresi ve –C 8 ise oluşturulan paketin bir ICMP Echo Request paketi olmasını sağlayan parametredir. Bu komutta –data parametresi ile oluşturulacak olan pakete 3000 bayt büyüklüğünde veri eklemeyi amaçlıyoruz ve –mtu parametresiyle de gönderilecek olan paketlerin boyutunun en fazla 200 bayt olabileceğini belirtiyoruz. Bu şekilde paket oluşturmamızın amacı ise hpingin ip fragmantasyonunu paketi gönderirken otomatik olarak yapmasını istememizdir. Şöyle ki hping oluşturduğu her pakete 3000 baytlık veriyi yüklemeye çalışacak fakat mtu değerinin 200 olduğunu gördüğü an bu verinin tek bir pakette gönderilemeyeceğine karar vererek ve 3000 baytı 200 baytlık parçalara fragmante ederek göndermeye çalışacaktır. Gerçekleştirilen bu saldırılar sonucu kurban makinenin (192.168.1.47) CPU durumu ise aşağıda gösterilmiştir.

dasdsa

Kurban makine yukarıdaki ekran görüntüsünde de görüldüğü gibi CPU zamanının önemli bir kısmını si yani software interrulplara harcamaktadır. Yani istenilen sonuca ulaşılmıştır. Burada dikkat edilmesi gereken farklı bir nokta ise CPU faaliyetinin user space yani kullanıcı proseslerinde değil, kernel space yani kernel seviyesinde olmasıdır. Yukarıdaki top komutunun çıktısında da görüldüğü gibi kullanıcı proseslerinin gösterildiği alanda CPU yoğunluğu gösterilmemiştir.

IP fragmantasyonun bu saldırıdaki rolünü iyice anlamak için fragmantasyon yapılmış ve yapılmamış ip paketleriyle bu atak vektörü denenmelidir. İlk olarak aşağıda ip fragmantasyonuna uğramamış paketler ile gerçekleştirilen saldırı gösterilmiştir. Sonuç aşağıdaki gibidir.

Hping3 192.168.1.47  –flood –rand-source –C 8

41412441

IP fragmantasyonuna uğramış paketler ile gerçekleştirilen saldırının sonuçları ise aşağıdaki gibidir.

213131313

Ekran görüntülerinden de anlaşılacağı gibi fragmantasyona uğrayan paketler ile gerçekleştirilen ataklar cpunun zamanını neredeyse iki kat daha fazla almışlardır. (Kurban makinde cpu durumunu görüntülemek için htop komutu kullanılmıştır. Htop anlık verileri ekrana getirdiğinden cpu faaliyetleri stabil hale geldikten sonra ekran görüntüsü alınmıştır.)

Sonuç olarak ip fragmantasyonu ile gerçekleştirilen dos ataklarının, parçalanmamış ip paketleriyle yapılan ataklara göre daha fazla sistemi yorduğu anlaşılmıştır. Burada önemli olan bunun sebeplerinin başlangıçta da bahsedildiği gibi iyi irdelenmesidir.

About CanYouPwnMe

Hero!

Follow Me