Scapy MITM Attack

Bu yazımızda sizlere python’da scapy kütüphanesi ile yazdığımız,  local network üstünde  Layer 2 atak için kullanabileceğiniz  MITM (ortadaki adam saldırısı) scriptinden bahsedeceğim. Bildiğiniz üzere bu işi yapan birçok araç  internette var fakat bizim burada yapmak istediğimiz, python ile ilgilenen arkadaşlara farkındalık yaratmak ve bir atak yapılıcağı zaman arka tarafta gerçekten işler nasıl ilerliyor göstermek.  Unutmamanız gereken bir konu var ki, güvenlik yazılımları ile ilgileniyorsanız network katmanlarına hakim olmanız gerekmekte aksi halde yazdığınız script’ler ezberden ileriye geçemez.  Scapy ile ilgili dedaylı bilgiyi http://www.secdev.org/projects/scapy/  adresinden edinebilirsiniz.  Layer 2 atak ile başlayan yazı dizimin, her hafta bir sonraki Layer atak modelleri ile de devam edeceğini belirtmek isterim.

Nadir bu ortakadi adam saldırısı ? 

Şekildende görüleceği üzere aynı network’de olduğunuz iki aygıt (pc to modem, pc to pc v.b) arasına girerek, bu iki aygıt arasındaki trafiği dinleme, yönetme diyebiliriz.

man-in-the-middle

Peki bu işlem nasıl olur ?

İşte burada network bilginiz devreye giriyor. Özet olarak, bir bilgisayar networke dahil olmak istediğinde veya aynı ağ üzerinde başka bir bilgisayara, aygıta veri göndermek istediğinde ARP broadcast (toplu yayın ) yapar ve paketi göndermek istediği bilgisayarın bu yayına Arp Replay cevap vermesini bekler. Bu aşamada request-replay işlemi sonunda her iki aygıt birbirlerinin MAC adreslerini ARP tablolarına tutar ve birbirine paket yollayacakları zaman bu arp tablosundaki karşılığa bakarak paketi iletir.

Bizim yapacağımız senaryoda, hedef makina ve modemin ARP tablolarını zehirleyerek, hedef makinada modemin mac adresi yerine  attacker’ın mac adresini, modemin Arp tablosunu zehirleyerek de hedef mac adresi yerine attacker’ın mac adresini yazacağız. Böylece birbirleri ile haberleşecekleri zaman trafik attacker yani scriptin çalıştığı makinadan geçecek.

Scapy kütüphanesi debian tabanlı işletim sistemlerine otomatik olarak library’de bulunmaktadır.

netifaces modülünü kullanmak için “pip install netifaces” komutunu cli’da çalıştırdığınızda otomatik olarak yükleyecektir. “pip” linux distronuzda yüklü değilse ve ne iş yaptığı ile ilgili bir bilginiz yoksa kısaca, python library’de olmayan modülleri internetten manuel bulup tek tek indirip kurmak yerine bu paket yöneticisini indirip kurduğunuzda, istediğiniz python modülünü repostore’dan indirip yüklüyor. Kısaca python’un “ apt-get ” komutu diyebiliriz.

Kod Alanı

7.Scripting çalışacağı bilgisayarın aktif interface bilgisini alıyor.

8. Script çalıştırılıken verilmesi gereken hedef IP adresini ” hedef_ipadres” değişkenine atıyor

9.Ortamdaki arp tablosu zehirlenecek modem veya gateway’in Ip adresini tespit edip, “gateway_ip” adresi değişkenine yazıyor.

10.Scapy config dosyasına aktif olan interface bilgisini yazıyor.

Bu fonksiyon bizim için çok önemli çünkü bu fonksiyon çağırıldığında, verilen “ip adres” değerini scapy komutunda “pdst” değişkenine atıyoruz ve o ip adresine Arp-request paketi yolluyoruz. Gelen cevabıda döngü ile okuyup içerisinde ilgili ip adresine karşılık gelen mac adresini döndürüyoruz.

ans,unans =srp(Ether(dst=”ff:ff:ff:ff:ff:ff”)/ARP(pdst=ip_adres),timeout=1,retry=1) ”

srp:Layer 2 paket gönderme ve alma komutu. Bu komut 2 sonuç döndürür. Bu yüzden ans, unans diye iki değişken kullandık.

timeout:ip adresine paket gönderdiği zaman, cevap dönmesi için beklediği süre. Bu süreyi belirtmezseniz, böyle bir IP adresi yoksa kod beklemede kalır.

retry: komutu kaç kere çalıştırmayı deneyeceğini belirtiyorsunuz.

for döngüsünde yaptığımız ise ans yani gelen paket içindeki donanım adresini okuyup fonksiyon’a döndürmek.

Bu satırlardan da anlaşılacağı gibi kullanıcının ip adresini ve ortamdaki gateway’in(modemin) ip adresini, macadres fonksiyonuna göndererek, ilgili IP adreslerine arp-request sorgusu ile mac adreslerini öğreniyoruz.

Bu aşamaya kadar yaptıklarımızı özetlersek;

Kullanıcı IP adresini öğren,

Gateway IP adresini öğren,

Zehirleyeceğin aygıtların mac adresini öğrenmek için Arp-request yollayacağın fonksiyonu tanımla

Hedef bilgisayar için fonksiyonu çağır ve mac adresini öğren

Hedef modem için fonksiyonu çağır mac adresini öğren.

Bu bilgiler elimizdeyken şimdi poisoning yapıcak fonksiyonu tanımlayalım.

Bu fonksiyonda yaptığımız ise, ip ve mac adreslerini öğrendiğimiz hedeflere op code =2 değeri ile arp replay paketi yollayıp, hedef makinalara   source mac adresi olarak scriptin çalıştığı makinanın yani bizim mac adresimizi yolluyoruz. Böylece hedef makinalar replay paketimizin içerisinde source mac olarak bizi gördüğü için birbirlerine yollayacakları paketi bize yolluyorlar. bizde arada geçen trafiği izleyebiliyoruz.

Bu kısımda da thread mantığı ile fonksiyonumuzu çağırıyoruz.

Unutmamanız gereken bir konu var ki, bu scripti linux üzerinde çalıştırıyorsanız, sizin makinanızın üzerinden trafik akması için,

Mac OsX üzerinde yapıyorsanız,

Scripti çalıştırmak isterseniz aşağıdaki gibi yapmanız yeterlidir.

root# python Arppois.py  hedef_makina_ip

Test için sanal bir ortamda windows veya linux bir makina kurup, ortamdaki modem ile arasına girebilirsiniz. Eğer ortamdaki modem ile araya girmek yerine iki makina arasına girmek isterseniz o zaman bazı değişiklikler gerekir

 

Teşekkürler.

Leave a Reply

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

*