Ana sayfa » Offensive Bakış Açısı İle DHCP Starvation Saldırısı Nedir?
Atak ve Savunma

Offensive Bakış Açısı İle DHCP Starvation Saldırısı Nedir?

DHCP Starvation Saldırısı

DHCP starvation saldırısı nedir? Sorusuna detaylı bir şekilde cevap vermeden önce eğer okumadıysanız DHCP protokolü nasıl çalışır? adlı yazım ile debian sistemlerde DHCP server kurulumu adlı yazımı okumanızı tavsiye ediyorum. Özellikle VirtualBox ile sanal olarak DHCP server kurulumunu, ikinci verdiğim linkten incelemeniz yararlı olacaktır. Çünkü bu yazıda direkt olarak saldırı analizinden başlayacağız. Gerekli sanal lab ortamının kurulması için dediğim gibi ikinci verdiğim linki incelemeniz faydalı olacaktır. İsterseniz lafı daha fazla uzatmadan offensive bakış açısı ile DHCP starvation saldırısını incelemeye başlıyalım.

Burada her ne kadar belli başlı toolları kullanacak olsakta, asla tool kullanmayı öğrenmeyin. Olayın arka planını öğrenin, tool amaç değil araç olsun.

DHCP Starvation Attack Nedir?

DHCP Starvation saldırısı, bir networkte DHCP server olarak hizmet veren bir sunucuya ait IP havuzunun sahte mac adresleri ile tüketilip, hizmet vermesini engellemeye yarayan bir saldırı çeşididir. Bu saldırıyı başarılı bir şekilde gerçekleştirmek için öncelikle DHCP protokolünün nasıl çalıştığını çok iyi bir şekilde bilmemiz gerekmektedir. Eğer protokolün nasıl çalıştığını bilmez isek karşılaşacağımız herhangi bir soruna karşı çözüm üretemeyiz. Öncelikle protokolün algoritmasına bir bakalım;

dhcp starvation algorithmDikkat ettiyseniz daha önceden ip adresi almamış bir client, direkt olarak DHCP Discover mesajı yayarak süreci başlatmaktadır. Eğer client bu networke daha önceden gelmiş ve bir ip adresi edinmiş ise DHCP Request mesajı yollayarak, o eski edindiği ip adresinin müsait olup olmadığını sunucuya sorar. Eğer boş ise direkt olarak bu cliente ip adresi verilmiş olur. Burada karşımıza 2 sonuç çıkmaktadır.

Eğer bir networke bir client ilk defa bağlanıyorsa DHCP Discover mesajı ile başlayan 4 adımlık bir süreç sonucunda ip adresini alır, eğer daha önceden bu networke bağlanıp bir ip adresi aldıysa DHCP Request mesajı yollayıp 2 adımlık bir süreç sonucunda ip adresini alır. Peki bu süreç nasıl oluyorda 2 adıma düşüyor? Bir alt paragrafta bu sorunun cevabını bulacaksınız.

O zaman bu networke saldırı yapacağımız vakit kullanacağımız veya yazacağımız tool DHCP Discover mesajı yayarak süreci başlatmalıdır. Çünkü daha önce networke hiç girmemiş sahte mac adresleri kullanılarak bu saldırı yapılacaktır. Eğer direkt olarak sahte mac adresleri ile DHCP Request mesajları üretirsek, sunucu sahte mac adresimizi alacak /var/lib/dhcp/dhcpd.leases dosyası içindeki mac adresleri ile karşlılaştıracak ve bir eşleştirme yapamayacağı için ip adresi atamıyacaktır. Dolayısıyla saldırımız başarısız bir şekilde sonuçlanacaktır. Bu bilgilerden sonra sanal lab ortamımızda saldırımızı incelemeye başlayalım.

DHCP Starvation Saldırı Analizi

Öncelikle VirtualBox uygulamamızdan hem sunucu olarak hizmet verecek olan sanal işletim sistemimizin hem de client olarak kullanacağım işletim sistemlerinin network ayarlarından promiscuous mode kısmını aşağıdaki şekilde ayarlıyoruz.

dhcp starvation

Aslında burada virtualbox, sanal switch oluştururken anladığım kadarıyla belli başlı önlemler alıp bu tarz saldırıları engelliyor. Veya başka bir özellik bu saldırıyı engelliyor. Bu sebepten dolayı saldırıyı görebilmemiz açısından bu ayarı sanal lab için yapmamız gerekmekte. Zaten defensive bakış açısı ile de DHCP starvation saldırısının nasıl engellenebileceği hakkında bir yazı yazmayı düşünüyorum. Konumuza dönecek olursak gerekli ayarı yaptıktan sonra DHCP server olarak hizmet veren Debian işletim sistemi mi açıyorum. Aşağıdaki komut ile DHCP serverımın 67 port numarasında sağlıklı bir şekilde çalışıp çalışmadığını kontrol ediyorum.

sudo netstat -tulpn | grep dhcpd
udp        0      0 0.0.0.0:58635           0.0.0.0:*                           834/dhcpd           
udp        0      0 0.0.0.0:67              0.0.0.0:*                           834/dhcpd           
udp6       0      0 :::30200                :::*                                834/dhcpd           

Görüldüğü gibi 67 port numaralı socketin arkasında dhcpd deamonu aktif bir şekilde çalışmakta. Şimdi ise sanaldan saldırıyı yapacağım kali makinamı açıyorum.

Artık saldırıyı yapmak için her şey hazır. Tek eksik olan şey aracımız. İşte burada ister kendi aracınızı geliştirirsiniz, isterseniz de hazır olarak kullanılan araçlardan birini kullanırsınız. Ben burada dhcpstarv adlı bir aracı kullanacağım. İndirmek ve kurmak için debian ortamlarda aşağıda komutu yazabilirsiniz.

sudo apt-get install dhcpstarv

Ayrıca bu adresten de indirip derleyerek kurabilirsiniz. Bu aşamaları geçtikten sonra aracımızı terminalden aşağıdaki şekilde başlatarak saldırıyı gerçekleştiriyoruz.

sudo dhcpstarv -i <interface> -v

Eğer saldırı başarılı bir şekilde gerçekleştiyse yukarıdaki gibi bir görsel ile karşılaşmanız gerekmekte. Tabi toolu basıp geçmek kolay. Saldırının analizine bakacak olursak; kırmızı ile belirttiğim yerlerde for dan sonra belirtilen mac adresi için 192.168.2.2 adlı ip adresinden 192.168.2.x ip adresinin alındığını belirtiliyor. Peki bunu nasıl yapıyor? İlk önce maddeler halinde inceleyelim, daha sonra wireshark çıktısı üzerinden pratiğini görelim ve yazımızı sonlandıralım.

Dhcpstarv Tam Olarak Ne Yapıyor?

Hatırlarsanız yazının başlarında eğer client bir networkten ilk defa ip alacaksa süreci DHCP Discover mesajı yayarak başlatır şeklinde belirtmiştik. Buradan yola çıkarak dhcpstarv adlı uygulamamızın çalışma şeklini maddeler halinde inceleyelim.

  • Dhcpstarv uygulamamız sahte bir mac adresi üretir ve broadcast olarak DHCP Discover mesajını networke yollar.
  • Broadcast olarak yayılan bu mesaj 67 port numaralı socketi açık olan serverımıza gelir ve işleme tabi tutulur. Serverımız bu mac adresine(aslında sahte olan mac adresine) DHCP Offer mesajı ile bir ip adresi önerir. Bu mesajı sahte mac adresine yollar.
  • Switch-based bir topology de olduğumuza göre serverdan gönderilen mesaj, switch tarafından bize yönlendirilecektir.
  • DHCP Offer mesajını gören aracımız broadcast olarak DHCP Request mesajı yollar.
  • DHCP Request mesajını alan server, DHCP ACK mesajı ile sahte mac adresine ip’yi atar.
  • Sonuç olarak sahte mac adresi kullanarak bir ip almış olduk. Bundan sonra en baştaki adıma dönülür ve bu işlemler, sunucudaki ip’ler tükenene kadar devam eder.

Saldırının wireshark görünütüsü ise aşağıdaki gibidir;

dhcp-starvation-wiresharkEkran alıntısını kutucuklara alıp boğmak istemedim. Bu arada bu wireshark görüntüsü Debian serverdan alınmıştır. Dikkat ederseniz sürekli olarak yukarıda maddeler halinde bahsettiğimiz süreç sahte mac adresleri üzerinden işlemektedir. Ne zaman serverımız ip adresi veremez hale gelir, o zaman saldırı başarı ile sonuçlanmış demektir. Şimdi de serverın dhcpd.leases dosyasının içine bir bakalım.

Aslında ekran alıntısı yerine aşağıdaki gibi paylaşmak daha faydalı olacaktır.

root@serverDHCP:~# more /var/lib/dhcp/dhcpd.leases
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-4.3.5
# authoring-byte-order entry is generated, DO NOT DELETE
authoring-byte-order little-endian;
lease 192.168.2.9 {
starts 6 2017/07/15 09:56:55;
ends 6 2017/07/15 09:56:59;
tstp 6 2017/07/15 09:56:59;
cltt 6 2017/07/15 09:56:59;
binding state free;
hardware ethernet 08:00:27:d7:28:12;
}
lease 192.168.2.4 {
starts 6 2017/07/15 09:52:16;
ends 6 2017/07/15 10:52:16;
tstp 6 2017/07/15 10:52:16;
cltt 6 2017/07/15 09:52:16;
binding state free;
hardware ethernet 08:00:27:f7:72:ce;
}
server-duid "\000\001\000\001 \374\242L\010\000'\012\323\226";
lease 192.168.2.4 {
starts 6 2017/07/15 20:01:22;
ends 6 2017/07/15 21:01:22;
cltt 6 2017/07/15 20:01:22;
binding state active;
next binding state free;
rewind binding state free;
hardware ethernet 08:00:27:f7:72:ce;
client-hostname "kali";
}
lease 192.168.2.10 {
starts 6 2017/07/15 20:02:12;
ends 6 2017/07/15 21:02:12;
cltt 6 2017/07/15 20:02:12;
binding state active;
next binding state free;
rewind binding state free;
hardware ethernet 00:16:36:29:bd:2e;
}
lease 192.168.2.11 {
starts 6 2017/07/15 20:02:13;
ends 6 2017/07/15 21:02:13;
cltt 6 2017/07/15 20:02:13;
binding state active;
next binding state free;
rewind binding state free;
hardware ethernet 00:16:36:27:9e:af;
}
lease 192.168.2.12 {
starts 6 2017/07/15 20:02:14;
ends 6 2017/07/15 21:02:14;
cltt 6 2017/07/15 20:02:14;
binding state active;
next binding state free;
rewind binding state free;
hardware ethernet 00:16:36:1c:e2:ca;
}
...
...
...

Bu liste uzayıp gitmekte. Çok uzun gözükeceği için hepsini almadım. Buradaki örneği incelersek, sahte mac adresleri üzerinden ip adreslerinin başarılı bir şekilde kiralandığını görebiliriz. Yalnız bu işlemden sadece networke yeni giren clientler etkilenecektir. Daha önce networkte bulunmuş ve ip adresi almış clientler DHCP Request mesajı yollayacağı için serverımız /var/lib/dhcp/dhcpd.leases dosyasına bakacak ve kullanıcımızı burada bulduğu vakit(mac adresi eşleştirmesi yaparak) ip adresini verecektir. Mesela örnek vermek gerekirse yukarıda client-hostname bilgisi “kali”; mac adresi hardware ethernet 08:00:27:f7:72:ce; olan cihazımız bu networke çıkıp tekrar girdiği vakit hiç bir sıkıntı yaşamadan 192.168.2.4 ip adresini alacaktır. Halbuki biz starvation saldırısı yaptık ama burada işe yaramadı. Tam tersi olarak networke ilk defa gelip bağlanmak isteyen client ise ip adresi alamayacaktır.  İşte burada saldırımız işe yarayacaktır. Peki o zaman daha önceden sunucumuzdan ip adresi almış kayıtlı cihazların bağlantısını nasıl engelleyeceğiz? Bu sorunun cevabı DHCP Release paketinde gizli. Bu konuyu ayrı bir yazı olarak yazmayı düşünüyorum. Şimdilik bu paket ile bu işlemin gerçekleştirildiğini bilmek bu yazı için yeterli olacaktır. İsterseniz şimdi yazımızın sonuç kısmına geçelim.

Sonuç

Artık saldırı başarı ile gerçekleşti ve bağlı olduğunuz networke ilk defa gelen clientler tuhaf bir şekilde IP alamamaya başladılar. Çünkü o network içinde hizmet veren DHCP sunucusunun ip havuzunu boşalttık. Peki bundan sonra neler yapılabilir? Aslında bundan sonra dananın kuyruğu kopuyor diyebiliriz. Mesela şunlar olası senaryolar;

  • Kendimiz sahte bir DHCP sunucusu kurup, bu DHCP sunucusundan clientlere cevap gönderebiliriz.
  • Bu cevapları kendi isteklerimize göre manipüle edebiliriz. Mesela default gateway kısmına kendi ip adresimizi vererek tüm clientlerin trafiğinin kendimiz üzerinden geçmesini sağlayabiliriz.
  • DNS adresi kısmına kendi belirlediğimiz bir adresi verip, clientleri DNS diye başka başka sunuculara yönlendirebiliriz.

Senaryolar artık network ve bu alandaki bilginize göre farklılık gösterebilir. Bu yazımda offensive bakış açısı ile DHCP starvation saldırısını anlatmaya çalıştım. Bu konu ile ilgili olarak birde defensive bakış açısı ile bir yazı yazmayı düşünüyorum. Bir sonraki yazımda görüşmek üzere.

Yazar Hakkında

Hakan İlbiz

Ağ güvenliği başta olmak üzere çeşitli siber güvenlik konularında çalışmalar yapan ve bu yaptığı çalışmalardan elde ettiği tecrübeleri blog yazısı olarak takipçileri ile paylaşan Sakarya Üniversitesi öğrencisi, siber güvenlik meraklısı bir vatandaş.

Yorum Ekle

Yorum Yazmak İçin Tıkla