
Giriş: Python ve Siber Güvenlikteki Yeri
Siber güvenlik, günümüzün dijital dünyasında hayati bir öneme sahiptir. Kurumlar ve bireyler, sürekli gelişen tehditlere karşı kendilerini korumak zorundadır. Bu koruma mekanizmalarından biri de sızma testleridir. Sızma testi (penetrasyon testi), bir sistemin, ağın veya uygulamanın güvenlik açıklarını etik hacker'lar tarafından simüle edilmiş saldırılarla ortaya çıkarma sürecidir. Bu süreçte kullanılan birçok araç ve yöntem bulunmaktadır. Python, esnekliği, zengin kütüphane ekosistemi ve okunabilir sözdizimi sayesinde siber güvenlik profesyonelleri arasında popüler bir dil haline gelmiştir. Otomasyon, exploit geliştirme, ağ taraması, zafiyet analizi ve adli bilişim gibi birçok alanda Python kütüphaneleri vazgeçilmez bir rol oynamaktadır. Bu yazımızda, sızma testi süreçlerinde sıkça kullanılan ve her güvenlik uzmanının bilmesi gereken başlıca Python kütüphanelerini detaylı bir şekilde inceleyeceğiz. Bu kütüphanelerin sunduğu yetenekleri ve pratik kullanım senaryolarını ele alarak, Python'ın siber güvenlikteki gücünü gözler önüne sereceğiz.
Ağ ve Protokol Manipülasyonu İçin Kütüphaneler
Sızma testlerinin temelini ağ iletişimi oluşturur. Ağ paketlerini incelemek, değiştirmek veya yeni paketler oluşturmak, birçok saldırı senaryosunun anahtarıdır.
- Scapy: Scapy, ağ paketlerini oluşturan, gönderen, yakalayan ve analiz eden güçlü bir interaktif paket manipülasyon programıdır. Ağ taramaları, zafiyet tespiti, protokol testleri ve hatta kablosuz ağ saldırıları için kullanılabilir. ICMP, ARP, TCP, UDP gibi birçok protokolü destekler ve özel paketler oluşturmanıza olanak tanır. Scapy ile karmaşık ağ senaryolarını hızlıca test edebilirsiniz. Örneğin, özel bir SYN paketi göndermek veya ARP zehirlenmesi yapmak Scapy ile oldukça kolaydır.
Kod:from scapy.all import * # Bir SYN paketi oluştur ve gönder ip_layer = IP(dst="192.168.1.1") tcp_layer = TCP(dport=80, flags="S") packet = ip_layer / tcp_layer # Paketi gönder ve yanıtı bekle response = sr1(packet, timeout=1, verbose=0) if response and response.haslayer(TCP): if response.getlayer(TCP).flags == 0x12: # SYN-ACK print("80. port açık!") else: print("80. port kapalı veya filtrelenmiş.") else: print("Yanıt alınamadı.") # Basit bir ARP isteği gönderme arp_request = Ether(dst="ff:ff:ff:ff:ff:ff") / ARP(pdst="192.168.1.1/24") ans, unans = srp(arp_request, timeout=2, verbose=0) for sent, received in ans: print(f"IP: {received.psrc} MAC: {received.hwsrc}")
- Nmap (python-nmap): Nmap, sektör standardı bir ağ tarama aracıdır. python-nmap kütüphanesi, Nmap'in güçlü özelliklerini Python betiklerinize entegre etmenizi sağlar. Bu sayede port tarama, servis versiyon tespiti, işletim sistemi parmak izi çıkarma gibi işlemleri otomatikleştirebilirsiniz. Özellikle büyük ağlarda bilgi toplama aşamasında kritik bir rol oynar.
Kod:import nmap nm = nmap.PortScanner() # Bir IP adresindeki popüler portları tarama host = '192.168.1.1' nm.scan(hosts=host, arguments='-p 21,22,23,80,443') for host in nm.all_hosts(): print(f'Host : {host} ({nm[host].hostname()})') print(f'State : {nm[host].state()}') for proto in nm[host].all_protocols(): print(f'----------') print(f'Protocol : {proto}') lport = nm[host][proto].keys() for port in sorted(lport): print(f'port : {port}\tstate : {nm[host][proto][port]['state']}')
- Requests: Her ne kadar web odaklı gibi görünse de, Requests HTTP/HTTPS protokolleri üzerinden iletişim kurmak için en popüler ve kullanımı kolay kütüphanelerden biridir. Web tabanlı zafiyetlerin (örneğin SQL Injection, XSS) otomasyonunda, API testlerinde ve web servisleriyle etkileşimde vazgeçilmezdir. Ağ güvenliği testlerinde web uygulamalarıyla olan etkileşimi simüle etmek için kullanılır.
Kod:import requests # Basit bir GET isteği response = requests.get('http://testphp.vulnweb.com/artists.php?artist=1') print(f"Durum Kodu: {response.status_code}") print(f"Yanıt Boyutu: {len(response.text)} karakter") # POST isteği ile form gönderme (örneğin login sayfası) login_url = 'http://testphp.vulnweb.com/login.php' data = {'username': 'test', 'password': 'test'} headers = {'User-Agent': 'Mozilla/5.0'} response = requests.post(login_url, data=data, headers=headers) if 'You are logged in' in response.text: print("Giriş Başarılı!") else: print("Giriş Başarısız!")
Web Uygulaması Güvenliği İçin Kütüphaneler
Web uygulamaları, günümüzde en sık hedeflenen alanlardan biridir. Bu alandaki zafiyetleri tespit etmek ve sömürmek için özel kütüphaneler mevcuttur.
- BeautifulSoup (bs4): Web sayfalarından veri çekme (web scraping) ve HTML/XML içeriğini ayrıştırma için mükemmel bir kütüphanedir. Özellikle zafiyet tarayıcıları geliştirirken veya web uygulamasından belirli bilgileri toplarken kullanılır. Form elemanlarını, linkleri, script tag'lerini ayrıştırarak XSS (Cross-Site Scripting) veya CSRF (Cross-Site Request Forgery) gibi zafiyetlerin tespitine yardımcı olabilir.
Kod:from bs4 import BeautifulSoup import requests url = 'http://testphp.vulnweb.com/' response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') # Tüm linkleri bul for link in soup.find_all('a'): print(f"Link: {link.get('href')}") # Tüm formları bul ve metotlarını yazdır for form in soup.find_all('form'): print(f"Form Metodu: {form.get('method')} Aksiyon: {form.get('action')}") for input_tag in form.find_all('input'): print(f" Input Adı: {input_tag.get('name')} Tipi: {input_tag.get('type')}")
- Selenium: Tarayıcı otomasyonu için tasarlanmış bir araçtır. Web uygulamalarında kullanıcı etkileşimlerini (form doldurma, butonlara tıklama, JavaScript çalıştırma) simüle etmek için kullanılır. Özellikle XSS, Clickjacking gibi istemci tarafı zafiyetlerin testinde ve otomatik sızma testleri senaryolarında etkilidir. Kullanıcı girişlerini taklit ederek, kompleks test senaryolarını gerçekleştirmenize olanak tanır.
Kod:from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager # WebDriver'ı başlat (Chrome için) service = Service(ChromeDriverManager().install()) driver = webdriver.Chrome(service=service) url = 'http://testphp.vulnweb.com/login.php' driver.get(url) # Kullanıcı adı ve şifre alanlarını bul ve doldur username_field = driver.find_element(By.NAME, 'username') password_field = driver.find_element(By.NAME, 'password') username_field.send_keys('test') password_field.send_keys('test') # Giriş butonuna tıkla login_button = driver.find_element(By.NAME, 'login') login_button.click() # Sayfadaki bir elementi bulup içeriğini kontrol et if 'You are logged in' in driver.page_source: print("Giriş başarılı!") else: print("Giriş başarısız!") driver.quit()
Exploit Geliştirme ve İkili Analiz Kütüphaneleri
Sistem güvenliği ve ikili (binary) analiz, sızma testlerinin daha derin katmanlarına inmek isteyenler için elzemdir. Bu kütüphaneler, bellek bozulmaları, tersine mühendislik ve exploit yazma konularında yardımcı olur.
- PwnTools: Exploit geliştirme için Python'da yazılmış kapsamlı bir kütüphanedir. CTF (Capture The Flag) yarışmalarında ve gerçek dünya exploit geliştirmelerinde sıkça kullanılır. G/Ç (I/O) manipülasyonu, format string zafiyetleri, rop zincirleri oluşturma, kabuk kodu (shellcode) oluşturma ve uzak süreçlerle etkileşim gibi birçok gelişmiş özelliği sunar. PwnTools, exploit yazma sürecini büyük ölçüde basitleştirir ve hızlandırır.
Kod:from pwn import * # Hedef bağlantısı (yerel bir servis veya uzak bir sunucu olabilir) # p = process('./vulnerable_program') # Yerel program p = remote('example.com', 1234) # Uzak sunucu # Bir input al ve gönder p.recvuntil(b'Enter your name: ') p.sendline(b'AAAA' * 10) # Bir zafiyeti sömürme örneği (basit bir taşma) # Taşma payload'ı oluşturma payload = b'A' * 64 + p64(0xdeadbeef) # Örnek ROP veya adresi p.sendline(payload) # Shell elde etmeyi bekle p.interactive()
- Capstone: Çoklu mimari desteğine sahip güçlü bir disassembly framework'üdür. Güvenlik araştırmacıları, kötü amaçlı yazılım analistleri ve tersine mühendisler tarafından ikili dosyaları ve kabuk kodlarını analiz etmek için kullanılır. Farklı CPU mimarileri (x86, ARM, MIPS vb.) için assembly kodunu ayrıştırabilir ve okunabilir hale getirebilir.
Kod:from capstone import * # Örnek makine kodu (x86 64-bit) CODE = b"\x55\x48\x8b\x05\xb8\x13\x00\x00\x48\x8b\x00\x48\x83\xc4\x08\x5d\xc3" md = Cs(CS_ARCH_X86, CS_MODE_64) for i in md.disasm(CODE, 0x1000): print("0x%x:\t%s\t%s" %(i.address, i.mnemonic, i.op_str)) # Çıktı: # 0x1000: push rbp # 0x1001: mov rax, qword ptr [rip + 0x13b8] # 0x1008: mov rax, qword ptr [rax] # 0x100b: add rsp, 0x8 # 0x100f: pop rbp # 0x1010: ret
- Unicorn: Çoklu mimari desteğine sahip bir CPU öykünücüsüdür. Güvenlik araştırmacılarının ve kötü amaçlı yazılım analistlerinin, farklı mimarilerde kabuk kodunu veya ikili kod parçalarını güvenli bir ortamda çalıştırmasına olanak tanır. Bu sayede, potansiyel exploitlerin veya kötü amaçlı yazılımların davranışlarını analiz etmek için gerçek bir CPU'ya ihtiyaç duyulmadan testler yapılabilir.
Kod:from unicorn import * from unicorn.x86_const import * # 64-bit x86 mimarisini başlat mu = Uc(UC_ARCH_X86, UC_MODE_64) # Bellek haritalama ADDRESS = 0x1000000 SIZE = 2 * 1024 * 1024 # 2MB mu.mem_map(ADDRESS, SIZE) # Kabuk kodu (shellcode) - basit bir 'ret' (x64) SHELLCODE = b"\xc3" mu.mem_write(ADDRESS, SHELLCODE) # RSP kaydını ayarla mu.reg_write(UC_X86_REG_RSP, ADDRESS + SIZE) print("Çalışan kodu: %s" % SHELLCODE) try: # Kodu çalıştır mu.emu_start(ADDRESS, ADDRESS + len(SHELLCODE)) print("Çalıştırma tamamlandı.") except UcError as e: print("Hata: %s" % e)
Kriptografi ve Hashing İçin Kütüphaneler
Şifreleme ve karma (hashing) algoritmaları, hem savunma hem de saldırı amaçlı siber güvenlik operasyonlarında temel bir rol oynar. Bu kütüphaneler, şifre kırma, şifreleme analizi ve güvenli iletişim testleri için kullanılır.
- PyCryptodome (veya eski PyCrypto): Çeşitli şifreleme algoritmalarını (AES, RSA, ECC vb.) ve hashing fonksiyonlarını (MD5, SHA vb.) içeren kapsamlı bir kütüphanedir. Güvenli iletişim kanalları oluşturma, verileri şifreleme ve şifre çözme, dijital imzalarla çalışma gibi görevlerde kullanılır. Kriptografik zafiyetlerin testinde veya özel şifreleme algoritmalarının analizinde kritik bir araçtır.
Kod:from Cryptodome.Cipher import AES from Cryptodome.Random import get_random_bytes from Cryptodome.Protocol.KDF import PBKDF2 from Cryptodome.Hash import SHA256 # AES şifreleme örneği key = PBKDF2(b"supersecretpassword", get_random_bytes(16), dkLen=32) cipher = AES.new(key, AES.MODE_EAX) nonce = cipher.nonce data = b"Bu gizli bir mesajdir." ciphertext, tag = cipher.encrypt_and_digest(data) print(f"Şifreli Metin: {ciphertext.hex()}") # SHA256 hashing örneği hasher = SHA256.new() hasher.update(b"Merhaba Dunya") print(f"SHA256 Hash: {hasher.hexdigest()}")
Diğer Faydalı Kütüphaneler
Yukarıda bahsedilen ana kategorilerin dışında da sızma testlerinde işimize yarayacak birçok Python kütüphanesi bulunmaktadır:
- Subprocess, Os, Sys: Bu yerleşik Python modülleri, işletim sistemiyle etkileşim kurmak, dışarıdan komutlar çalıştırmak ve dosya sistemi üzerinde operasyonlar yapmak için kullanılır. Özellikle otomasyon betikleri yazarken veya sistem seviyesi testler yaparken vazgeçilmezdir. Örneğin, bir güvenlik aracını Python içinden çalıştırmak veya dosya izinlerini kontrol etmek bu modüllerle kolayca yapılabilir.
- Paramiko: SSHv2 protokolü için Python ile yazılmış bir kütüphanedir. SSH üzerinden komut çalıştırma, SCP ile dosya transferi gibi işlemleri otomatikleştirmek için kullanılır. Brute-force saldırıları, SSH tünelleme veya uzaktan komut yürütme testlerinde faydalıdır.
- Impacket: Ağ protokolleriyle düşük seviyede etkileşim kurmak için tasarlanmış bir koleksiyondur. Özellikle Windows ağ protokolleri (SMB, MSRPC, DCERPC vb.) üzerinden sızma testleri yaparken çok güçlüdür. Pass-the-hash, psexec gibi saldırıları uygulamak için kullanılır.
Sonuç ve Tavsiyeler
Python, siber güvenlik profesyonelleri için bir İsviçre çakısı gibidir. Sunduğu zengin kütüphane ekosistemi sayesinde ağ taramasından web zafiyet analizine, exploit geliştirmeden kriptografik testlere kadar geniş bir yelpazede sızma testi faaliyetlerini gerçekleştirmek mümkündür. Bu yazımızda ele aldığımız kütüphaneler, Python ile sızma testi dünyasına adım atmak isteyen veya mevcut yeteneklerini geliştirmek isteyen herkes için bir başlangıç noktasıdır.
Unutulmamalıdır ki, bir aracın veya kütüphanenin gücü, onu kullanan kişinin bilgi ve becerisiyle doğru orantılıdır. Bu kütüphaneleri etkin bir şekilde kullanabilmek için sadece sözdizimini bilmek yeterli değildir; aynı zamanda temeldeki ağ, işletim sistemi ve uygulama güvenliği prensiplerini de iyi anlamak gerekmektedir. Güvenlik testleri yaparken her zaman etik kurallara ve yasal sınırlamalara uyulmalıdır. Yetkisiz sistemlere karşı test yapmak yasa dışıdır ve ciddi sonuçları olabilir. Bilgi güvenliği, sürekli öğrenmeyi ve pratik yapmayı gerektiren dinamik bir alandır. Bu kütüphaneleri projelerinizde kullanarak deneyim kazanın ve siber güvenlik yolculuğunuzda Python'ın sunduğu sınırsız potansiyeli keşfedin.
"Bir güvenlik uzmanının en iyi arkadaşı, yazılımını otomatikleştirebilen ve tekrar edebilir testler yapabilen kod parçacıklarıdır."
Python Resmi Web Sitesi | Scapy Dökümantasyonu | Requests Kütüphanesi
Umarım bu kapsamlı rehber, sızma testlerinde Python kütüphanelerini kullanma konusunda size yol gösterir ve yeni ufuklar açar. Güvenli günler dileriz!