Scapy Nedir ve Nasıl Kullanılır?

Eşref Erol
Three Arrows Security
6 min readJul 21, 2018

Merhaba sevgili okurlarımız bu konumda sizlere elimden geldiğince, dilim döndüğünce scapy hakkında bilgiler vereceğim. Konuyu daha iyi anlayabilmeniz için network temelinizin olması gerekmektedir lakin ben ufak özetler şeklinde hiç bilmeyen arkadaşlar için bilgiler vereceğim. Konuyu okuduktan sonra içerisinde geçen bilmediğiniz terimleri araştırmanız ve sorgulamanız sizin faydanıza olacaktır. Şimdi dilerseniz konu başlıklarımızı sıralayalım:

1)Scapy Nedir?

2)Scapy Nasıl Kurulur?

3)Scapy Nasıl Kullanılır?

4)Scapy Kodunu Nasıl Dönüştürürüz?

5)Scapy Ne İşimize Yarar?

Şimdi ön bilgilerimiz verdiğimize göre yavaş yavaş konumuzun asıl kısmına giriş yapalım, keyifli okumalar.

1)Scapy Nedir?

Scapy pythonla yazılmış olan, spesifik paketler oluşturup bunları iletmemizi sağlayan açık kaynak kodlu bir araç/python kütüphanesidir.

2)Scapy Nasıl Kurulur?

Bilgisayarınıza scapy’i kurabilmeniz için bilgisayarınızda python’un kurulu olması gerekmektedir. Python’un 2 veya 3 olması önemli değildir lakin 2.7 ve 3.3 sürümlerinden biri yada daha güncel olması önemlidir. Ayrıca bilgisayarınıza python’u yüklerken path olarak tanımlamanız işinize yarayacaktır. GNU/Linux sistemlerde python kurulu olarak gelir ve path olarak tanımlıdır yani direkt terminale python yazdığınızda program çalışmaya başlar ayrıca bir yol belirtmenize gerek kalmaz lakin windows’a yüklerken yükleme seçeneklerinden path olarak tanımlamayı sağlayan tiki işaretlemeyi unutmayınız.

Debian/Ubuntu’da Kurulum:

sudo apt-get install scapy

Not: Kali Linux kullanıcılar için belirteyim scapy zaten dağıtımda yüklü geliyor bu işlemi yapmanıza gerek yok.

Windows’da Kurulum:

Scapy’nin çalışması için Npcap yada Winpcap yazılımlarından biri bilgisayarınıza kurulu olmalıdır. Eğer wireshark gibi programlar yüklüyse Windows’a yüklerken zaten Winpcap’i default olarak programla beraber kuruyor. Ben böyle bir durumun söz konusu olmadığı kullanıcılar için ikisinin de ayrı ayrı kurulumunu anlatacağım.

Npcap Kurulumu:

https://nmap.org/npcap/dist/npcap-0.97.exe

Adresinden çalıştırılabilir windows dosyasını yükleyip çalıştırarak tipik program kurulumu yapar gibi bam bam bam diye kurabilirsiniz.

Winpcap Kurulumu:

https://www.winpcap.org/install/

Adresinden yine npcap’ın kurulumuyla aynı şekilde kurabilirsiniz.

Not: Açgözlülük yapıp fazla mal göz çıkarmaz diyerek ikisini de yüklemeyin. Birbirlerine negatif etki yaparlar ki zaten yüklerken birinden biri varsa kaldırmanızı söyleyip hatta kendisi kaldırıyor.

Yazılımlarımızı kurduktan sonra gelelim scapy’nin kurulumuna:

https://github.com/secdev/scapy/archive/master.zip

Adresinden zip dosyamızı indirip istediğimiz bir yere çıkarıyoruz. Daha sonra komut satırını açıyoruz. Dosyayı çıkardığımız dizine gelip çıkardığımız dizine giriyoruz. “Setup.py” dosyasının olduğu dizine geldiğimizde. Komut satırına aşağıdaki kodu yazıp çalıştırıyoruz:

python setup.py install

Tebrikler scapy’nin bilgisayarınıza kurulumu tamamlandı.

3)Scapy Nasıl Kullanılır?

Şimdi scapy kullanımına girmeden önce konuyu daha iyi anlayabilmeniz için network temelleri hakkında birkaç bilgi vermek istiyorum. Scapy’i doğru bir şekilde kullanabilmeniz için paket başlıklarını biliyor olmanız gerekli. Ben şimdi burada size tek tek paketleri, başlıkları, protokolleri anlatamam lakin bilmeniz gereken birkaç şeyi söyleyeceğim. Sürekli tekrar ettiğim ve konularımda belirttiğim gibi eğer siber güvenlik alanında ilerlemek istiyorsanız temellerinizin sağlam olması gerekmektedir. Üşenip sıkılıp ben direkt güvenliğe girecem diye dalamazsınız yoksa bir halt anlamaz ezbere iş yaparsınız bu yüzden network, web öğrenmeye ve araştırmaya başlayınız bizim burada verebileceğimiz bilgiler kısıtlı bilgilerdir.

IP Başlığı Hk.

Source IP: Kaynağın IP adresi

Destination IP: Hedef IP adresi

Flags: Paketin bozulmadan iletilebilmesi için gerekirse parçalanıp parçalanmayacağı hk. Bilgi veren kısımdır.

Header Checksum: Karşıdaki makinenin paketi bozulmadan alıp almadığını kontrol etmesini sağlayan paketin bilgi kısmı.

TTL(Time to Live): Gönderdiğimiz paketin loop’a(sonsuz döngü) girmemesi için ne kadar süre sonra yok olacağı hakkında bilgi veren kısımdır.

TCP Başlığı Hk.

Sec ve Ack Num: Üçlü el sıkışma sırasında cihazların birbirlerini tanımaları için kullandıkları değerler.

Code Bits: Paket çeşidini belirten kısım.

ICMP Başlığı Hk.

Type: Kontrol mesajının tipi

Code: Kontrol mesajı tipinin alt dalı, daha spesifik bilgi.

DHCP: Dynamic Host Configuration Protocol. Ağda bulunan cihazlara IP, subnet mask, gateway gibi verilerin otomatik olarak atanmasını sağlayan protokoldür. IP çakışması vb durumları önlemek için çok önemlidir.

Şimdi bu bilgilerimizi verdiğimize göre scapy kullanımına geçebiliriz. Öncelikle temel komutlarımızla başlayalım.

Help(): Scapy hakkında yardım almanızı sağlayan komuttur. Parantez içine yardım almak istediğiniz şeyi yazabilir yada boş bırakarak fonksiyonu çalıştırıp komut satırına yardım almak istediğiniz konuyu yazabilirsiniz. Girip çıkamayan olursa diye çıkmak için “q”ya basınız.

Ls(): Scapy içinde bulunan hazır protokolleri sizin için listeler.

Ls(Protokol): Kullanacağınız protokolün içeriğini ve default değerlerini gösterir.

Sendp(): 2.katmandan paket yollamaya yarar.

Send(): 3.katmandan paket yollamaya yarar.

Not: Bu ikisi arasındaki fark oldukça önemlidir programlarınızda kullanırken birini değilde diğerini kullanırsanız “Lan nerede bu hata” diye saçınızı başınızı yolabilirsiniz.

Temel komutlarımızı verdiğimize göre şimdi paketlerimizi oluşturmaya geçebiliriz. Paketlerimizi oluştururken katman katman içeriklerini gireceğiz.

Scapy İle Ağ Paketi Oluşturmak ve Göndermek:

ICMP Paketi:

Ip başlığı ve ıcmp başlığı oluşturmamız gerekiyor. Aşağıdaki kodları sırayla takip edin.

ip_basligi=IP(dst=”Hedef ip”, src=”kaynak ip”, ttl=20)
icmp_basligi=ICMP(type=8, code=0)
icmp_paketi=ip_basligi/icmp_basligi
send(icmp_paketi)

Şimdi paketimiz gitmiş mi bakalım:

DHCP Paketi:

Ip, udp ve dhcp basliklarını kullanacağız.

ip_basligi=IP(src=”0.0.0.0", dst=”255.255.255.255")

udp_basligi=UDP(dport=67, sport=68)

dhcp_basligi=DHCP(options=[(“lease_time”, 70000)])

dhcp_paketi=ip_basligi/udp_basligi/dhcp_basligi

send(dhcp_paketi)

Paketimizi kontrol edelim:

DNS Paketi:

IP, UDP ve DNS kullanacağız.

ip_basligi=IP(dest=”8.8.8.8")
udp_basligi=UDP(dport=53)
dns_basligi=DNS(rd=1, qd=DNSQR(qname=”www.threearrowsec.com"))
dns_paketi=ip_basligi/udp_basligi/dns_basligi
send(dns_paketi)

Kontrol edelim:

TCP Paketi:

tcp_basligi=TCP(sport=8080, dport=22, flags=”S”)
ip_basligi=IP(src=”127.0.0.1",dst=”127.0.0.1")
tcp_paketi=ip_basligi/tcp_basligi
send(tcp_paketi)

Kontrol edelim:

NOT: Paketleri oluştururken örneklerde olduğu gibi alt katmandan üst katmana doğru yazdığımızı unutmayalım.

4)Scapy Kodunu Nasıl Dönüştürürüz?

Mesela siz Python 2.7 kullanıyorsunuz ama kodunuzu Python 3.x’e çevirmeniz lazım. Bunu nasıl yaparsınız? Anlatacağım bu aracı sadece scapy kodlarınız için değil başka python betikleriniz için de kullanabilirsiniz. Bunun için 2to3 adında bir python araç mevcut. Anlatımımda bu araçtan faydalanacağız.

2to3 aracımız genellikle interpreter olarak python betiğimize eklenir ancak Tools/scripts python dizininde de bulunmaktadır. Mesela python 2.7 ile yazılmış “scapy_deneme.py” adında bir betiğimiz olsun. Bu betiği python 3.x bir sürüme dönüştürmek için kullanımı terminalde aşağıdaki gibidir:

$ 2to3 scapy_deneme.py

Yukarıdaki gibi kullanırsanız Orijinal betiğinize ek olarak başka bir dosya halinde 3.x sürümünde bir python betiği oluşturur. Aşağıdaki kod dizimini kullanırsanız orijinal dosyanızdan bir kopya oluşturmayarak direkt orijinal dosyanız üzerinde değişiklikler yapıp kaydeder.

$ 2to3 -w scapy_deneme.py

Bu aracın bu makalemiz için kullanım alanı şimdilik bu kadarıyla yeterli bulunmaktadır. Sonra başka bir yazıda örneklerle ayrıntılı olarak aracımızı inceleyeceğiz.

5)Scapy Ne İşimize Yarar?

Scapy ağ trafiğine müdahale edebilmemizi, istekler ve cevaplar yollayabilmemizi sağlar. Scapy’i kullanarak network saldırıları yapabilirsiniz. (Örn:MITM) Kendiniz network bilginizi pekiştirmek veya test etmek için scapy’i kullanabilirsiniz. NMAP konumda verdiğim koddaki gibi toollar yazmak için kullanabilirsiniz. Yani içinde ağ geçen neredeyse her şey de kullanabilirsiniz. Gerisi sizin hayal gücünüze ve yeteneğinize bağlı.

Umarım konu faydalı olmuştur. Bir yanlışımız varsa belirtiniz biz de feyzlenelim. Sürç-ü lisan ettiysek affola hayırlı geceler.

--

--

Eşref Erol
Three Arrows Security

Dr. | Editor at @threearrowsec & @h4cktimes | @Parrotsec TR Community