Python ile Ortadaki adam saldırısı 1 (ARP Spoffing)

Berkan Türel
6 min readMar 1, 2022

--

Herkese merhaba, bu yazımda python kullanarak herkesin bildiği man in the middle attack (MITM) türkçesi ile ortadaki adam saldırısı nasıl yapılır onu anlatmaya çalışacağım. Umarım işinize yarar bilgiler verebilirim. O zaman başlayalım …

Ortadaki adam saldırısını iki parçaya bölerek anlatacağım. İlk yazımda ARP spoofing (aldatma) veya ARP Poisoning nedir, python ile nasıl kodlanır gibi sorulara cevap vermeye çalışacağım. İkinci yazımda ise network sniffing (ağ koklama) konusunu ele alacağım.Ben ortadaki adam için gelmiştim, ARP ne, nereye geldim ben gibi yanılgılara düşüp yazının geri kalanını okumayı bırakmayın sakın. Hepsini detaylı bir şekilde anlatmaya çalışacağım.

Man In The Middle Attack Nedir ?

Eğer siber güvenliğe ilgi duymaya başladıysanız muhtemelen duyacağınız ilk saldırı türü ortadaki adam saldırısı olacaktır. Hatta siber güvenliğe ilgi duymanıza bile gerek kalmadan duymuş olabilirsiniz. Nedir ulan bu ortadaki adam saldırısı, kim bu ortada duran adam, ne işi var ortada sorularını gelin beraber inceleyelim.

Ortadaki adam saldırısına kabaca iki ağ arasındaki iletişimin dinlenmesi ile saldırgan tarafından bilgilerin ele geçirilmesi diyebiliriz. Bu sadece iletişimin dinlenmesi ile de sınırlı değil. İstediği zaman iletişimi kesebilir ve aynı zamanda her türlü değişiklikte yapabilir.Bu saldırının tepsiti oldukça zor olmasıyla birlikte saldırganın hedefi siz ve bağlı olduğunuz ağ unsurlarıdır.(Modem vb.)

Daha iyi kavramanız için şöyle açıklayabilirim. Modeme kendini sizmişsiniz gibi tanıtıyor ve modemden size gelecek paketleri kendisi alıyor. Aynı olayı size de gerçekleştirerek sizden giden paketleri de alarak inceleyebiliyor ve bundan sizin hiç haberiniz olmuyor. İki tarafta birbirleriyle iletişimde olduklarını zannediyor ve ortada başka birinin olduğunu bilmiyor.

Peki nasıl kandırıyor ulan bu bizi dediğinizi duyar gibiyim. İşte yazının asıl amacına gelmiş bulunmaktayız. Burada ARP protokolünün ne olduğuna bir bakalım.

Address Resolution Protocol (ARP) Nedir ?

Türkçesi ile adres çözümleme protokolü yani ARP, IP adresimizin fiziksel adresimiz yani MAC adresimiz ile eşleşmesinde kullanılan bir protokoldür. Bilgisayarımızı örnek olarak gösterelim. Bilgisayarımız ile bir ağa bağlandığımızda ağdaki diğer cihazları tanımak için kim olduklarını soran paketler gönderiyor. Yani ARP isteği (request) gönderiyor.

Daha iyi kavramanız açısından bilgisayarımız,192.168.1.156 IP adresini local ağda arıyor olsun. Bir ARP request (istek) paketi gönderir ve 192.168.1.156 kim diye bir soru sorar eğer ağda o IP adresine sahip bir cihaz varsa el kaldırır ve bilgisayarımız o cihazın MAC adresini alarak 192.168.1.156 IP adresi ile eşleştirir.

Şöyle düşünelim bir cafede oturuyorsunuz ve biri yanınıza gelip birşey verdi ve bunu Berkan’a yani bana teslim etmenizi istedi. Ne yapabilirdiniz. Tabii ki beni tanımadığınız için hiçbirşey yapamazdınız. Bu ne alaka diye düşünebilirsiniz fakat bizlerde normal hayatımızda ARP protokolü kullanıyoruz diyebilirim. Birinin yüzü ile ismini eşleştirmeden ismini bilmeniz bir fayda sağlamaz ve eşleştirme yapmanız gerekir. Bilgisayarımız içinde yüz, MAC adresi oluyor ve isim yani IP adresi ile eşleştirmeye çalışıyor.

Bu anlattıklarım ile ARP prokolünü kavradığınızı düşünüyorum. Şimdide bilgisayar üzerinde birkaç örnekle tam anlamıyla konuya hakim olmanızı sağlayalım.

Windows komut ekranına (cmd) gelerek arp -a komutunu yazıp çalıştırdığımızda bilgisayarımızın ağ üzerindeki cihaz IP adresleri ile MAC adreslerini eşleştirdiğini görebiliriz.

Komutu yazıp çalıştırdığımızda çıktımız yukardaki gibi olacaktır. Yukarıda da gördüğünüz gibi Internet Addres kısmında cihazın IP adresi ile Physical Address kısmındaki MAC adresinin eşleştirildiğini görüyoruz. Peki bu süreç nasıl işliyor. Gelin bunu da görelim.

Bu bölümde wireshark uygulamasını kullanacağım. Wireshark, ağ trafiğinin bir arayüz ile izlenmesini sağlayan açık kaynak kodlu bir yazılımdır. Konumuz wireshark olmadığı için uzatmayacağım. Merak edenler detaylı olarak araştırabilir.

Wireshark uygulaması üzerinden ağ üzerindeki paketleri inceleğimde yukarıdaki fotoğrafta bulunan istek ve cevapları farkettim. Dikkatli bakarsanız en üstteki satırda 192.168.43.1 adlı cihaz bir istek oluşturuyor ve “192.168.43.207 kim bana söylesin” diyor. Bu ARP isteğine (request) ARP cevabı (response) hemen bir alt satırda göreceğiniz gibi geliyor. “192.168.43.207 benim MAC adresim ise şu şekilde ….” diye cevap veriyor. Bu şekilde IP adresinin kime ait olduğunu öğrenmiş oluyor.

ARP protokolü süreci de bu şekilde işliyor. İşte bizim yapacağımız da tam olarak bu olacak. Hedef IP adresini bilgisayara kendimizmiş gibi tanıtacağız yani aldatacağız (spoofing). Bu kadar ön bilgiden sonra şimdi ana yemeğe geçiyoruz. Python kullanarak ARP aldatması (spoofing) yada zehirlemesi (poisoning) nasıl yapılır görelim.

ARP spoofing için scapy kütüphanesini kullanacağım. Scapy, paketler oluşturup bunları göndermemizi sağlayan açık kaynak kodlu python kütüphanesidir. Scapy hakkında daha detaylı bilgiyi aşağıdaki linkten alabilirsiniz.

https://medium.com/three-arrows-security/scapy-nedir-ve-nas%C4%B1l-kullan%C4%B1l%C4%B1r-e2b1a264898a

Önce scapy kütüphanesini import etmek ile başlayalım.

import scapy.all as scapy

Kütüphanemizi ekledikten sonra iki tane sınıf oluşturacağız bunlar ön hazırlık ve saldırı sınıfları olacak. İlk olarak ön hazırlık sınıfını oluşturalım.

Hazırlık adında bir sınıf oluşturarak içine mac bul adında bir fonksiyon açtık. Adından da anlayacağınız gibi bu fonksiyon hedefin IP adresini alarak MAC adresini döndürecek.

Kod bloğunda ise scapy bir arp paketi oluşturup bunu srp ile gönderdik ve dönen sonuç içinden hwsrc ile kaynak adresini yani MAC adresini aldık. Paket gönderirken verbose = false diyerek de gereksiz çıktıları yazdırmasını engelledik. Buraları anlamakta sorun yaşadıysanız size tavsiyem scapy kütüphanesine önce bir göz gezdirin.

Denemek amaçlı print(hazirlik.MAC_bul(“192.168.1.107”)) şeklinde bir kod ekledim. 192.168.1.107 IP adresine sahip cihazın mac adresini doğru bir şekilde verdi.

Hazırlık sınıfımızın çalıştığından emin olduğumuza göre saldırı sınıfımızı oluşturabiliriz.

Saldırı sınıfımızın içinde iki adet fonksiyon bulunuyor. Bunlar zehirle ve düzelt. Türkçe kod yazmak her ne kadar saçma olsa da daha iyi anlayabilmeniz için böyle bir yol izledim. Her neyse zehirle fonksiyonuna hedef IP ve sahte IP yani yerine geçmek istediğimiz cihazın IP adresini vererek gönderdiğimiz ARP paketiyle hedefi yanıltarak kendimizi başka bir cihazmış gibi tanıtıyoruz örneğin modem olarak tanıtıyoruz.

Düzelt fonksiyonunu oluşturmamızın sebebi ise işimiz bittikten sonra tekrar iletişim kurabilmeleri için bulduğumuz hale geri çevirmek. zehirle fonksiyonundaki aynı yolu izliyoruz, tek fark bu kez doğru bilgileri vermek olacak. Bitti mi, tabii ki bitmedi. Main sınıfımızı oluşturmak kaldı geriye.

Main metodumuz içine de yine bir kaç kütüphane import ettik. argparse kütüphanesi ile kodumuzu komut ekranında çalıştırırken yanında vereceğimiz parametreleri girdi olarak almasını sağladık.

python3 ARP_spoofing.py -t1 ilk_hedef_ip -t2 ikinci_hedef_ip

Argparse yukarıdaki örnekteki gibi kodumuzu çalıştırmamıza olanak sağladı. İki adet argumanımızı ekledikten sonra eksik arguman girişi veya hatalı girişte programı kapatması gereken iki adet if bloğu ekledik.

Artık geldik paketi göndermeye. While ile sonsuz bir döngü açarak iki hedefi de aldatmak adına ikisine de zehirli paketler gönderiyoruz. sayac değişkenimiz ile de kaç adet paket gönderildiğini ekrana yazdırıyoruz. Hata olması durumunda da try except bloğunu kullanarak ekrana paket gönderilemedi yazılmasını sağlıyoruz ve son olarak da klavye kesmesi ile kapanmasını sağlıyoruz.

Evet sonunda kodlama da bitti. Sıra geldi uygulamaya fakat bu yazılık bu kadar.Python ile Man in the middle attack birinci bölümünü burada kesiyorum. İkinci bölümde yani ağ koklama (Network Sniffing) yazısında hem ARP spoofing kodumuzu test edeceğiz hem de network sniffing uygulamamızı da yazarak python ile ortadaki adam saldırısını sonlandıracağız.

Buraya kadar okuyan sizleri ve buraya kadar yazan kendimi alkışlıyorum. Çünkü benim için uzun bir yazı oldu. Bu linkten ARP spoofing github repositorisine ulaşabilirsiniz.

Umarım işinize yarar bir yazı olmuştur. İkinci bölümde görüşmek üzere kendinize iyi bakın.

Kişisel WebSitem için tıklayınız.

--

--

Berkan Türel
Berkan Türel

No responses yet