Konuyu Açan #1
Python Phishing URL Tespit Sistemi

Giriş ve neden önemli
Günlük güvenlik ihmallerinin çoğu, kullanıcıları aldatan sahte sitelerin URL’lerine dayanır. Phishing’e karşı etkili bir savunma, kötü amaçlı URL’leri olabildiğince erken tespit etmekten geçer. Bu yazıda, basit bir Python tabanlı phishing URL tespit sistemi için temel adımları ve pratik bir yapı öneriyorum. Amacım, güvenlik farkındalığını artırmak ve savunma katmanlarını kodla nasıl güçlendirebileceğimizi göstermek.

Yaklaşım ve bileşenler
  • URL ön işleme: Giriş olarak alınan metnin temizlenmesi, küçük/büyük harflerin normalize edilmesi, URL’nin bileşenlerinin ayrıştırılması gerekir. Örneğin, net bir domain elde etmek için tld ve subdomain ayrımı yapılır.
  • Özellik mühendisliği: Phishing’i ayırt etmek için birkaç temel özellik kullanılır. Domain uzunluğu, ip adresi kullanımı, ana sayfanın yol yapısı, URL’nin query ve hash kullanımları, URL’deki idna veya punycode varyantları gibi göstergeler değerlendirilebilir.
  • Basit makine öğrenmesi: Küçük bir sınıflandırıcı, örneğin Logistic Regression veya Random Forest, üzerinde birkaç yüz özelliğin sınıflandırılmasıyla işe yarayabilir. Bu durumda güvenli ve basit bir küme olarak, doğruluk için kalıp kuralları ile birlikte çalışabilir.
  • Kural tabanlı güvenlik katmanı: URL’nin bilinen sahteci örnekler listesiyle karşılaştırma ve benzerlik tabanlı kontroller (domain age, whois bilgisi) eklemek, yanlış pozitifi azaltır.
  • Kullanılabilirlik ve performans: Gerçek zamanlı kontrol için hızlı bir ön işleyici ve hafif bir sınıflandırıcı tercih edilir. Dış API bağımlılığı yoksa güvenlik açısından da daha kontrollüdür.


Basit bir örnek akış
1) URL alımı ve normalizasyon: http veya https, www kaldırma, trailing slash temizliği. 2) Domain çıkarımı: urlparse ile ana domain elde edilir; alt alan adları, kahverengi liste (siyah liste) kontrolü. 3) Özelliklerin hesaplanması: domain uzunluğu, hyphen/ sayı oranı, ip kullanımı, TLD güvenilirlik göstergeleri, URL içinde olağandışı karakter dizileri. 4) Model veya kurallar: Yeni bir URL için hızlı kurallar uygula; gerektiğinde ön işleme sonrası basit bir sınıflandırıcıya veri aktar. 5) Sonuç ve geri bildirim: tespit oranı ve güvenlik uyarısı, kullanıcıya net bir uyarı mesajı ile iletilir.

Örnek bir Python şablonu (kullanıma hazır değil, temel bir yapı sunar)
KOD
12345678910111213141516171819202122232425262728293031323334353637
import urllib.parse, tldextract
from sklearn.ensemble import RandomForestClassifier

[b]Basit ön işleme[/b]
def normalize(url):
    parsed = urllib.parse.urlparse(url)
    domain = parsed.netloc or parsed.path
    domain = domain.split(':')[0]  # port kaldırma
    if domain.startswith('www.'):
        domain = domain[4:]
    return domain.lower()

[b]Özellik üretimi (örnek)[/b]
def extract_features(url):
    domain = normalize(url)
    ext = tldextract.extract(domain)
    features = {
        'domain_len': len(ext.domain + ext.suffix),
        'has_hyphen': '-' in domain,
        'is_ip': domain.replace('.', '').isdigit(),
        'tld_len': len(ext.suffix),
    }
    return features

[b]Basit bir sınıflandırıcı (örnek)[/b]
model = RandomForestClassifier(n_estimators=100, random_state=42)

def is_phishing(url):
    feat = extract_features(url)
    # Burada gerçek dünyada eğitimli bir modele ihtiyaç var.
    # Şimdilik basit kuralla karar verelim:
    if feat['is_ip']:
        return True
    if feat['domain_len'] > 30 and feat['has_hyphen']:
        return True
    return False


Uygulama şartları ve güvenlik değerlendirmesi
  • Eğitim verisi olmadan üretimde modele güvenmek risklidir; basit kurallarla başlamak ve zamanla güvenilir bir eğitim seti eklemek daha güvenli olur.
  • Whois, DNS kayıtları ve domain age gibi ek göstergeler, doğruluk için yararlı olabilir; ancak bu verileri toplarken kullanıcı gizliliğini ihlal etmemek gerekir.
  • Dağıtımda performans önemliyse, önbellekleme ve asenkron kontrol uygulanabilir. Ayrıca API bağımlılığını azaltmak için yerel bir kütüphane tercih edin.


Sonuç ve ilerleyen adımlar
Bu taslak, phishing URL’lerini yakalamak için bir temel mekanizma sağlar: URL’yi temizleyip basit özelliklerle hızlı bir karar vermek. Gerçek dünyada güvenilirlik için, daha geniş bir veri setiyle eğitilmiş bir model ve çoklu katmanlı kurallar eklemek gerekir. Bu yapı üzerinden kendi veri kümenizi oluşturarak iyileştirme yoluna gidebilirsiniz. Bu alanda siz hangi özellikleri faydalı buluyorsunuz, deneyimleriniz nelerdir?

Yanıt vermek için giriş yapmış olmalısınız.

0 alıntı seçildi