Dijital dünyada online dolandırıcılık vakaları her geçen gün artarken, kötü niyetli aktörler sahte alan adları üzerinden kullanıcıları tuzağa düşürmenin yeni yollarını buluyor. Bu rehber, Python programlama dilini kullanarak şüpheli alan adlarını nasıl tespit edebileceğinizi adım adım açıklayacak ve sizi dijital tehditlere karşı donatacak.
Günümüzde internet, hayatımızın vazgeçilmez bir parçası haline geldi. Alışveriş yapmaktan bankacılık işlemlerine, sosyal medyada gezinmekten iş yazışmalarına kadar birçok aktivitemizi çevrimiçi platformlarda gerçekleştiriyoruz. Ancak bu dijitalleşme ile birlikte, siber suçluların faaliyetleri de hız kesmeden artıyor. Özellikle “phishing” (oltalama) saldırıları, kötü amaçlı yazılımların yayılması ve sahte e-ticaret siteleri üzerinden yapılan dolandırıcılıklar, kullanıcıların en sık karşılaştığı tehditler arasında yer alıyor. Bu saldırıların temelinde ise genellikle sahte veya kötü amaçlı alan adları yatıyor.
Ne yazık ki, bir dolandırıcının yasal bir siteye çok benzeyen bir alan adı kaydetmesi ve kullanıcıları bu siteye çekmesi oldukça kolaydır. Örneğin, “bankaniz.com” yerine “bankanniz.com” veya “hepsiburada.com” yerine “hepsiburado.com” gibi küçük harf hatalarıyla oluşturulan alan adları, dikkatli olmayan kullanıcıları kolayca kandırabilir. Bu tür siteler genellikle kişisel bilgilerinizi (kullanıcı adları, şifreler, kredi kartı numaraları) çalmak veya cihazınıza kötü amaçlı yazılım bulaştırmak amacıyla kurulur. Dolandırıcılar, bu yöntemlerle milyonlarca kullanıcıyı hedef alarak ciddi finansal kayıplara ve kimlik hırsızlığına neden olabilmektedir.
Bu noktada, dijital ortamda karşılaştığımız her alan adını şüpheyle yaklaşıp analiz edebilme yeteneği büyük önem taşımaktadır. Ancak her linke tek tek elle bakmak veya her sitenin güvenilirliğini manuel olarak sorgulamak, hem zaman alıcı hem de çoğu zaman imkansızdır. İşte tam da bu yüzden, Python gibi güçlü ve esnek bir programlama dili, bu süreci otomatikleştirmek ve bize anında güvenilirlik analizi sunmak için mükemmel bir araçtır. Python’ın geniş kütüphane ekosistemi sayesinde, alan adlarının WHOIS bilgilerini sorgulayabilir, SSL sertifikalarını kontrol edebilir, alan adı yaşını analiz edebilir ve hatta potansiyel yazım hatalarını tespit edebiliriz. Bu rehber boyunca, bu teknikleri adım adım öğrenerek kendinizi ve sevdiklerinizi dijital dolandırıcılıktan korumanın yollarını keşfedeceksiniz. Kısacası, bu bilgilerle birlikte, artık dijital dünyanın karanlık yüzüne karşı daha bilinçli ve donanımlı olacaksınız.
Temel Kavramlar: Bir Alan Adı Nasıl İncelenir ve Hangi Bilgiler Önemlidir?
Bir alan adının dolandırıcı olup olmadığını anlamak için çeşitli parametreleri incelemek gerekir. Bu parametreler, alan adının kimliğinden teknik altyapısına kadar geniş bir yelpazeyi kapsar. Bu bölümde, Python ile analiz etmeye başlamadan önce bu temel kavramları ve neden önemli olduklarını detaylıca ele alacağız.
WHOIS Bilgileri: Bir Alan Adının Kimliğini Çözmek
Öncelikle, her alan adının bir “WHOIS” kaydı bulunur. Bu kayıtlar, alan adının kime ait olduğunu, ne zaman kaydedildiğini, ne zaman güncellendiğini ve ne zaman sona ereceğini gösteren kamuya açık bilgilerdir. Bir alan adının WHOIS bilgilerini sorgulayarak, arkasındaki kişiyi veya kuruluşu tanımaya başlayabiliriz.
- Kayıt Sahibi Bilgileri: Alan adının kime ait olduğunu gösterir. Gerçek bir şirket veya kişi yerine, “Privacy Protection Service” gibi genel bir isim görüyorsanız, bu durum şüphe uyandırabilir. Dolandırıcılar genellikle kimliklerini gizlemek isterler.
- Kayıt ve Bitiş Tarihleri: Bir alan adının ne zaman kaydedildiği ve ne zaman süresinin dolacağı bilgisi kritik öneme sahiptir. Yeni kaydedilmiş (genellikle birkaç ay veya daha genç) alan adları, özellikle büyük markaları taklit ediyorsa, yüksek risk taşır. Çoğu dolandırıcılık sitesi uzun ömürlü olmaz ve kısa süre içinde kapatılır. Uzun süredir aktif olan alan adları genellikle daha güvenilirdir.
- Kayıtçı Bilgileri: Alan adının hangi firma tarafından kaydedildiğini gösterir. Bazı kayıtçılar, düşük güvenlik standartları veya dolandırıcılık faaliyetlerine karşı gevşek politikaları nedeniyle daha fazla kötü amaçlı alan adı barındırabilir.
Bununla birlikte, WHOIS bilgileri günümüzde genellikle gizlenmektedir. “WHOIS Privacy Protection” adı verilen hizmetler sayesinde, alan adı sahipleri kişisel bilgilerini kamuya açık kayıtlardan saklayabilirler. Yasal ve meşru birçok şirket de bu hizmeti kullanır. Ancak, yepyeni bir e-ticaret sitesi veya bir banka taklidi gibi kritik bir alanda gizlenmiş WHOIS bilgileri, ek bir şüphe işareti olabilir. Dolayısıyla, tek başına gizlenmiş WHOIS bir alan adını dolandırıcı yapmaz, ancak diğer şüpheli sinyallerle birleştiğinde alarm zillerinin çalmasına neden olabilir.
SSL Sertifikası: Bağlantının Güvenilir Olduğunu Nasıl Anlarız?
Bir web sitesinin güvenliğini anlamanın en temel yollarından biri de SSL (Secure Sockets Layer) sertifikasına sahip olup olmadığını kontrol etmektir. SSL, web sunucusu ile tarayıcı arasındaki veri akışını şifreleyen bir güvenlik protokolüdür. Bir site SSL sertifikası kullandığında, URL “http://” yerine “https://” ile başlar ve tarayıcıda genellikle bir kilit simgesi görünür. Bu, bağlantının güvenli olduğu ve gönderdiğiniz bilgilerin şifrelendiği anlamına gelir.
- HTTPS ve Kilit Simgesi: Güvenli bir bağlantının ilk işaretidir. Bu yoksa, o siteye asla kişisel bilgi girmemelisiniz.
- Sertifika Sağlayıcı: Sertifikayı veren kuruluş da önemlidir. Saygın bir sertifika kuruluşu (Comodo, DigiCert, Let’s Encrypt vb.) tarafından verilmiş bir sertifika, sitenin en azından bir kimlik doğrulama sürecinden geçtiğini gösterir.
- Sertifika Geçerliliği: Sertifikanın süresinin dolup dolmadığı veya iptal edilip edilmediği kontrol edilmelidir. Geçersiz sertifikalar, tarayıcınız tarafından güvenlik uyarısı verilmesine neden olur ve ciddi bir risk işaretidir.
Ancak, HTTPS’nin varlığı tek başına bir sitenin meşru olduğu anlamına gelmez. “Let’s Encrypt” gibi ücretsiz SSL sertifikaları sayesinde, dolandırıcılar bile kolayca HTTPS özelliğine sahip siteler oluşturabilirler. Bu nedenle, bir alan adının HTTPS kullanması iyi bir başlangıç olsa da, diğer tüm kontrollerle birlikte değerlendirilmelidir.
Alan Adı Yaşı ve Geçmişi: Yeni Kurulmuş Alan Adları Neden Şüphelidir?
Bir alan adının kayıt tarihi ve yaşı, güvenilirlik analizi için kritik bir metriktir. Çoğu dolandırıcılık sitesi, hızlıca kurulur, kısa bir süre aktif kalır ve tespit edildiklerinde kapatılırlar. Bu nedenle, çok yeni kaydedilmiş alan adları (genellikle 6 aydan daha kısa süredir var olanlar) dikkatli incelenmelidir, özellikle de bir marka veya bankayı taklit ediyorlarsa.
Ayrıca, bir alan adının geçmişini incelemek de önemlidir. “Wayback Machine” (Internet Archive) gibi araçlar sayesinde bir alan adının geçmişteki görünümlerini ve içeriklerini inceleyebiliriz. Eğer bir site eskiden tamamen alakasız bir içerikteyken aniden bir bankanın veya e-ticaret sitesinin klonuna dönüştüyse, bu durum güçlü bir şüphe işaretidir.
Yazım Yanlışları ve Benzer Alan Adları (Typosquatting): Tuzağa Düşmeyin!
Bir diğer kritik nokta da alan adının yazımına dikkat etmektir. Dolandırıcılar, kullanıcıların küçük yazım hatalarını veya dikkatsizliklerini kullanarak orijinal sitelere çok benzeyen alan adları kaydederler. Buna “typosquatting” denir.
- Benzer Harfler: “l” yerine “1”, “o” yerine “0”, “rn” yerine “m” gibi görsel olarak benzer harfler kullanmak. (örnek: g00gle.com, faceb00k.com)
- Harf Ekleme/Çıkarma: “bankam.com” yerine “mybankam.com” veya “banka.com” yerine “bankaa.com”.
- Farklı TLD’ler (Üst Düzey Alan Adları): “.com” yerine “.net”, “.org”, “.info” veya hatta “.xyz” gibi daha ucuz veya az bilinen TLD’leri kullanmak. Örneğin, resmi sitenin “marka.com” olduğu durumlarda “marka.net” dolandırıcı olabilir.
- Uluslararası Alan Adları (IDN Homograph Attacks): Unicode karakterlerin benzerliği kullanılarak yapılan saldırılardır. Örneğin, Kiril alfabesindeki ‘a’ harfi Latin alfabesindeki ‘a’ harfine çok benzer ve bu yolla “apple.com” gibi görünen bir alan adı oluşturulabilir.
Tüm bu temel kavramlar, bir alan adının güvenilirliğini değerlendirmek için bize bir çerçeve sunar. Python ile bu kontrolleri otomatikleştirerek, saniyeler içinde kapsamlı bir analiz yapabilir ve potansiyel tehlikeleri erkenden fark edebiliriz.
Python ile Dolandırıcılık Belirtilerini Tespit Etmeye Başlangıç: Temel Adımlar Nelerdir?
Şimdi sıra geldi teorik bilgileri pratiğe dökmeye. Python’ın gücünü kullanarak bir alan adının temel güvenlik özelliklerini nasıl kontrol edeceğimizi adım adım inceleyeceğiz. Bu kısımda, gerekli kütüphaneleri kuracak, WHOIS bilgilerini çekecek, SSL sertifikası durumunu kontrol edecek ve alan adının yaşını hesaplayacağız.
Gerekli Kütüphaneleri Kurma: whois, requests, ssl
Python’da harici web servisleriyle etkileşim kurmak ve sistem seviyesi bilgilere ulaşmak için bazı kütüphanelere ihtiyacımız olacak. Bu kütüphaneleri komut istemcinizden veya terminalinizden aşağıdaki komutlarla kolayca kurabilirsiniz:
pip install python-whois requests
python-whois: Bu kütüphane, alan adlarının WHOIS bilgilerini sorgulamak için kullanılır.requests: Web sitelerine HTTP istekleri göndermek ve yanıtları almak için standart ve oldukça popüler bir kütüphanedir. SSL sertifikası kontrolü gibi işlemlerde faydalı olacaktır.ssl: Bu kütüphane Python'ın standart kütüphanesinin bir parçasıdır, bu yüzden ayrıca kurmanıza gerek yoktur. SSL/TLS protokolleri üzerinden güvenli ağ iletişimi sağlamak için kullanılır.
Kurulum tamamlandıktan sonra, bu kütüphaneleri kodumuzda kullanmaya başlayabiliriz.
Alan Adının WHOIS Bilgilerini Çekme ve Analiz Etme
Bir alan adının kaydedildiği tarihi öğrenmek, o alan adının güvenilirliği hakkında önemli ipuçları verebilir. Yeni kurulmuş bir site, özellikle tanınmış bir markayı taklit ediyorsa, daha şüpheli olabilir. Aşağıdaki Python kodu, bir alan adının WHOIS bilgilerini çeker ve kayıt tarihini görüntüler:
import whois
from datetime import datetime
def get_domain_whois(domain_name):
try:
w = whois.whois(domain_name)
# Alan adı mevcut değilse
if w.status == None:
return {"status": "not_found", "message": "Alan adı bulunamadı veya WHOIS bilgisi mevcut değil."}
# Kayıt tarihini çekme
creation_date = w.creation_date
if isinstance(creation_date, list): # Bazen liste olarak gelebilir
creation_date = creation_date[0]
# Bitiş tarihini çekme
expiration_date = w.expiration_date
if isinstance(expiration_date, list):
expiration_date = expiration_date[0]
# Kayıtçı bilgisini çekme
registrar = w.registrar
if isinstance(registrar, list):
registrar = registrar[0]
# WHOIS gizliliği kontrolü (basit bir yaklaşım)
is_private = False
if (w.name and "privacy" in str(w.name).lower()) or \
(w.email and "privacy" in str(w.email).lower()) or \
(w.org and "private" in str(w.org).lower()):
is_private = True
return {
"status": "success",
"creation_date": creation_date.strftime("%Y-%m-%d") if creation_date else "Bilinmiyor",
"expiration_date": expiration_date.strftime("%Y-%m-%d") if expiration_date else "Bilinmiyor",
"registrar": registrar if registrar else "Bilinmiyor",
"is_private_whois": is_private,
"domain_age_days": (datetime.now() - creation_date).days if creation_date else None
}
except Exception as e:
return {"status": "error", "message": str(e)}
# Örnek kullanım
domain = "google.com"
whois_info = get_domain_whois(domain)
print(f"Alan Adı: {domain}")
if whois_info["status"] == "success":
print(f" Kayıt Tarihi: {whois_info['creation_date']}")
print(f" Bitiş Tarihi: {whois_info['expiration_date']}")
print(f" Kayıtçı: {whois_info['registrar']}")
print(f" WHOIS Gizli mi?: {whois_info['is_private_whois']}")
if whois_info['domain_age_days'] is not None:
print(f" Alan Adı Yaşı: {whois_info['domain_age_days']} gün")
else:
print(f" Hata: {whois_info['message']}")
domain_scam = "dolandiriciliksitesi.xyz" # Var olmayan veya şüpheli bir domain
whois_info_scam = get_domain_whois(domain_scam)
print(f"\nAlan Adı: {domain_scam}")
if whois_info_scam["status"] == "success":
print(f" Kayıt Tarihi: {whois_info_scam['creation_date']}")
print(f" Bitiş Tarihi: {whois_info_scam['expiration_date']}")
print(f" Kayıtçı: {whois_info_scam['registrar']}")
print(f" WHOIS Gizli mi?: {whois_info_scam['is_private_whois']}")
if whois_info_scam['domain_age_days'] is not None:
print(f" Alan Adı Yaşı: {whois_info_scam['domain_age_days']} gün")
else:
print(f" Hata: {whois_info_scam['message']}")
Bu kod bloğu, alan adının yaşını ve WHOIS gizliliğini kontrol etmenin temelini oluşturur. Genellikle, çok yeni kaydedilmiş alan adları (örneğin 90 günden az) ve WHOIS bilgileri tamamen gizlenmiş olanlar (özellikle bir finans kurumu veya alışveriş sitesi gibi görünüyorsa), daha fazla incelemeyi hak eder.
SSL Sertifikası Durumunu Kontrol Etme
Bir web sitesinin HTTPS kullanıp kullanmadığı ve SSL sertifikasının geçerli olup olmadığı, temel güvenlik göstergelerindendir. Python'ın ssl modülü ve socket kütüphanesi ile bu kontrolü gerçekleştirebiliriz:
import ssl
import socket
from datetime import datetime
def check_ssl_certificate(domain_name):
try:
context = ssl.create_default_context()
with socket.create_connection((domain_name, 443)) as sock:
with context.wrap_socket(sock, server_hostname=domain_name) as ssock:
cert = ssock.getpeercert()
# Sertifika bitiş tarihini kontrol et
not_after_str = cert['notAfter']
not_after_date = datetime.strptime(not_after_str, '%b %d %H:%M:%S %Y %Z')
is_valid = datetime.now() < not_after_date
# Sertifikayı veren kurum (issuer) bilgisini al
issuer = dict(x[0] for x in cert['issuer'])
issuer_org = issuer.get('organizationName', 'Bilinmiyor')
issuer_cn = issuer.get('commonName', 'Bilinmiyor')
return {
"status": "success",
"is_https": True,
"is_ssl_valid": is_valid,
"expiration_date": not_after_date.strftime("%Y-%m-%d"),
"issuer_organization": issuer_org,
"issuer_common_name": issuer_cn
}
except ssl.SSLError as e:
return {"status": "error", "is_https": False, "message": f"SSL Hatası: {e}"}
except socket.gaierror:
return {"status": "error", "is_https": False, "message": "Alan adı çözümlenemedi (DNS hatası)."}
except Exception as e:
return {"status": "error", "is_https": False, "message": str(e)}
# Örnek kullanım
domain_secure = "google.com"
ssl_info_secure = check_ssl_certificate(domain_secure)
print(f"\nAlan Adı: {domain_secure}")
if ssl_info_secure["status"] == "success":
print(f" HTTPS Kullanıyor mu?: {ssl_info_secure['is_https']}")
print(f" SSL Sertifikası Geçerli mi?: {ssl_info_secure['is_ssl_valid']}")
print(f" Sertifika Bitiş Tarihi: {ssl_info_secure['expiration_date']}")
print(f" Sertifika Veren Kuruluş: {ssl_info_secure['issuer_organization']} ({ssl_info_secure['issuer_common_name']})")
else:
print(f" Hata: {ssl_info_secure['message']}")
domain_insecure = "http://example.com" # https kullanmayan veya geçersiz sertifikalı bir siteyi simule edelim
# Not: Bu fonksiyon sadece HTTPS için çalışır. HTTP siteler direkt olarak 'is_https': False dönecektir.
# Gerçek bir HTTP sitesi için istek göndermeniz gerekir.
ssl_info_insecure = check_ssl_certificate(domain_insecure.replace("http://", ""))
print(f"\nAlan Adı: {domain_insecure.replace('http://', '')}")
if ssl_info_insecure["status"] == "success":
print(f" HTTPS Kullanıyor mu?: {ssl_info_insecure['is_https']}")
print(f" SSL Sertifikası Geçerli mi?: {ssl_info_insecure['is_ssl_valid']}")
print(f" Sertifika Bitiş Tarihi: {ssl_info_insecure['expiration_date']}")
print(f" Sertifika Veren Kuruluş: {ssl_info_insecure['issuer_organization']} ({ssl_info_insecure['issuer_common_name']})")
else:
print(f" Hata: {ssl_info_insecure['message']}")
Bu kod parçacığı, bir alan adının SSL sertifikasının geçerli olup olmadığını, ne zaman sona ereceğini ve sertifikayı hangi kuruluşun verdiğini kontrol eder. Geçerli bir SSL sertifikası olmayan veya süresi dolmuş bir sertifikaya sahip sitelerden uzak durulmalıdır. Ayrıca, eğer bir finans veya alışveriş sitesiyse ve ücretsiz bir SSL sertifikası kullanıyorsa (örneğin Let's Encrypt), bu durum tek başına bir risk olmasa da, diğer şüpheli işaretlerle birleştiğinde dikkatli olunması gerektiğini gösterir.
whois sorgusu, alan adının DNS sunucularını veya WHOIS kayıtçısının sunucusunu hedef aldığı için geçici hatalar verebilir. Fonksiyonlarınızı bu tür hataları yakalayacak ve yeniden deneme mekanizmaları (örneğin, 3 kez deneme) içerecek şekilde tasarlamak, uygulamanızın daha sağlam olmasını sağlar.
Gerçek Dünya Senaryoları: Python ile Şüpheli Alan Adı Analizi Vaka Çalışmaları
Şimdiye kadar öğrendiğimiz temel Python fonksiyonlarını ve güvenlik kavramlarını gerçek dünya senaryolarında nasıl uygulayabileceğimizi görelim. Bu vaka analizleri, Python'ın dolandırıcılık tespiti için ne kadar güçlü bir araç olabileceğini somut örneklerle gösterecektir.
Vaka 1: Sahte Banka Alan Adı Tespiti
Hayal edin ki, bankanızdan geldiğini iddia eden bir e-posta aldınız. E-postadaki linke tıkladığınızda sizi bankanızın giriş sayfasına çok benzeyen bir siteye yönlendiriyor. Ancak adres çubuğuna dikkat ettiğinizde, URL'nin "www.bankanizz.com" olduğunu görüyorsunuz. Normalde "www.bankaniz.com" olması gerekirken, fazladan bir 'z' harfi eklenmiş. Bu durumda, Python ile ne gibi kontroller yapabiliriz?
Bu senaryoda, hedef alan adımız bankanizz.com, orijinal alan adımız ise bankaniz.com (farazi olarak). Aşağıdaki Python koduyla bu iki alan adını karşılaştırabilir ve şüpheli işaretleri arayabiliriz:
import difflib
from datetime import datetime
# Önceki fonksiyonları burada tekrar tanımladığımızı varsayalım
# get_domain_whois(domain_name)
# check_ssl_certificate(domain_name)
def analyze_scam_domain_scenario(target_domain, legitimate_domain=None):
print(f"\n--- Şüpheli Alan Adı Analizi: {target_domain} ---")
# 1. WHOIS Bilgileri Kontrolü
whois_data = get_domain_whois(target_domain)
if whois_data["status"] == "success":
print(f" WHOIS Kayıt Tarihi: {whois_data['creation_date']}")
print(f" WHOIS Gizli mi?: {whois_data['is_private_whois']}")
if whois_data['domain_age_days'] is not None:
print(f" Alan Adı Yaşı: {whois_data['domain_age_days']} gün")
if whois_data['domain_age_days'] < 180: # 6 aydan küçükse şüpheli
print(" Potansiyel Şüphe: Alan adı çok yeni kaydedilmiş.")
if whois_data['is_private_whois']:
print(" Potansiyel Şüphe: WHOIS bilgileri gizlenmiş.")
else:
print(f" WHOIS Sorgusu Hatası: {whois_data['message']}")
# 2. SSL Sertifikası Kontrolü
ssl_data = check_ssl_certificate(target_domain)
if ssl_data["status"] == "success":
print(f" HTTPS Kullanıyor mu?: {ssl_data['is_https']}")
print(f" SSL Geçerli mi?: {ssl_data['is_ssl_valid']}")
print(f" Sertifika Veren Kuruluş: {ssl_data['issuer_organization']}")
if not ssl_data['is_ssl_valid']:
print(" Potansiyel Şüphe: SSL sertifikası geçerli değil.")
elif "Let's Encrypt" in ssl_data['issuer_organization'] and whois_data.get('domain_age_days', 0) < 365:
# Yeni bir site ve ücretsiz SSL kullanıyorsa daha fazla dikkat.
print(" Uyarı: Yeni bir alan adı ve ücretsiz SSL kullanıyor, dikkatli olun.")
else:
print(f" SSL Sorgusu Hatası: {ssl_data['message']}")
# 3. Typosquatting (Yazım Hatası) Kontrolü
if legitimate_domain:
s = difflib.SequenceMatcher(None, target_domain, legitimate_domain)
similarity = s.ratio() * 100
print(f" Orijinal Alan Adı ({legitimate_domain}) ile Benzerlik: %{similarity:.2f}")
if similarity > 80 and target_domain != legitimate_domain: # Yüksek benzerlik ama aynı değil
print(f" Potansiyel Şüphe: '{target_domain}', orijinal '{legitimate_domain}' alan adına çok benziyor (typosquatting).")
# Vaka 1 uygulama
# Burada get_domain_whois ve check_ssl_certificate fonksiyonlarının daha önce tanımlandığını varsayıyoruz.
# Gerçek uygulamada, bu fonksiyonları makalenin önceki bölümlerinden kopyalayıp yapıştırmanız gerekecektir.
analyze_scam_domain_scenario("bankanizz.com", "bankaniz.com")
analyze_scam_domain_scenario("trendyoll.com", "trendyol.com")
Bu senaryoda, difflib kütüphanesini kullanarak hedef alan adının orijinal alan adına ne kadar benzediğini oran olarak hesaplıyoruz. %80'in üzerinde bir benzerlik, özellikle domain farklıysa, typosquatting'e işaret edebilir. Ayrıca, bu sahte banka sitesinin WHOIS bilgilerinin gizli olup olmadığını ve çok yeni kaydedilip kaydedilmediğini de kontrol ediyoruz. Genellikle bu tür sitelerin yeni olduğu ve WHOIS bilgilerinin gizlendiği görülür.
Vaka 2: Yeni Kurulmuş E-ticaret Sitesinin Güvenilirlik Kontrolü
Cazip fiyatlarla ürünler sunan yeni bir online alışveriş sitesi keşfettiniz. Siteye üye olmadan veya sipariş vermeden önce güvenilirliğini kontrol etmek istiyorsunuz. Bu durumda, özellikle alan adının yaşı ve SSL sertifikasının detayları kritik olacaktır.
Şüpheli olduğunu düşündüğümüz bir alan adı yeniurunlerburada.xyz olsun. Bu site, ".xyz" gibi daha az bilinen bir TLD kullanıyor ve çok yeni gibi görünüyor. Python ile şu kontrolleri yapabiliriz:
# Vaka 2 uygulama
# Yine get_domain_whois ve check_ssl_certificate fonksiyonlarının tanımlı olduğunu varsayıyoruz.
analyze_scam_domain_scenario("yeniurunlerburada.xyz")
Bu durumda, analyze_scam_domain_scenario fonksiyonumuz legitimate_domain parametresi olmadan çağrılır. Fonksiyon, WHOIS kayıt tarihini inceleyerek alan adının ne kadar süredir var olduğunu belirler. Eğer bu süre çok kısaysa (örneğin birkaç ay), bu siteye karşı şüpheyle yaklaşılmalıdır. Ayrıca, SSL sertifikasının geçerliliğini ve kim tarafından verildiğini kontrol etmek de önemlidir. Çoğu dolandırıcı site, ya hiç SSL kullanmaz ya da bedava, basit sertifikalarla HTTPS yanılsaması yaratır. Bu iki vaka da gösteriyor ki, Python ile yapacağımız otomatik kontroller, dijital dünyadaki potansiyel tehlikelere karşı önemli bir ilk savunma hattı oluşturur.
Derinlemesine Analiz: İleri Düzey Python Teknikleri ve Makine Öğrenimi Potansiyeli
Temel kontroller, birçok dolandırıcılık girişimini yakalamak için yeterli olsa da, siber suçlular da sürekli taktiklerini geliştirmektedir. Bu nedenle, daha sofistike dolandırıcılıkları tespit etmek için ileri düzey tekniklere ve hatta makine öğrenimine başvurabiliriz.
Blacklist Veritabanları ile Entegrasyon
Bir alan adının daha önce kötü amaçlı faaliyetler için kullanılıp kullanılmadığını anlamanın en etkili yollarından biri, onu bilinen kara listelerle karşılaştırmaktır. Google Safe Browsing API, VirusTotal API ve OpenPhish gibi servisler, milyonlarca bilinen kötü amaçlı URL ve alan adını barındırır. Python'ın requests kütüphanesi ile bu API'lere sorgu göndererek bir alan adının mevcut kara listelerde yer alıp almadığını kontrol edebiliriz.
Örneğin, Google Safe Browsing API'sini kullanmak için bir API anahtarı almanız gerekir. Ardından, bir URL'nin kara listede olup olmadığını sorgulayabilirsiniz:
import requests
import json
GOOGLE_SAFE_BROWSING_API_KEY = "SİZİN_API_ANAHTARINIZ" # Buraya kendi API anahtarınızı girin
GOOGLE_SAFE_BROWSING_URL = f"https://safebrowsing.googleapis.com/v4/threatMatches:find?key={GOOGLE_SAFE_BROWSING_API_KEY}"
def check_google_safe_browsing(url):
headers = {'Content-Type': 'application/json'}
payload = {
"client": {
"clientId": "your-app-name",
"clientVersion": "1.0.0"
},
"threatInfo": {
"threatTypes": ["MALWARE", "SOCIAL_ENGINEERING", "UNWANTED_SOFTWARE", "POTENTIALLY_HARMFUL_APPLICATION"],
"platformTypes": ["ANY_PLATFORM"],
"threatEntryTypes": ["URL"],
"threatEntries": [{"url": url}]
}
}
try:
response = requests.post(GOOGLE_SAFE_BROWSING_URL, headers=headers, data=json.dumps(payload))
response.raise_for_status() # HTTP hataları için istisna fırlat
result = response.json()
if "matches" in result:
print(f" {url} Google Safe Browsing tarafından tehlikeli olarak işaretlendi!")
for match in result["matches"]:
print(f" Tehdit Tipi: {match['threatType']}, Platform: {match['platformType']}")
return True
else:
print(f" {url} Google Safe Browsing'de bir tehdit olarak bulunamadı.")
return False
except requests.exceptions.RequestException as e:
print(f" Google Safe Browsing sorgusu sırasında hata oluştu: {e}")
return False
# Örnek kullanım (lütfen kendi API anahtarınızı girin)
# check_google_safe_browsing("http://badexample.com") # Tehlikeli bir site örneği
check_google_safe_browsing("https://www.google.com")
Bu tür API entegrasyonları, alan adlarının mevcut tehdit veritabanlarında olup olmadığını kontrol ederek analizimize önemli bir katman ekler. Ancak unutulmamalıdır ki, yeni kurulan veya henüz tespit edilmemiş dolandırıcı siteler bu listelerde yer almayabilir.
Alan Adı Benzerliği Algoritmaları (Levenshtein Mesafesi)
Typosquatting saldırılarını daha gelişmiş bir şekilde tespit etmek için "Levenshtein mesafesi" veya diğer benzerlik algoritmalarını kullanabiliriz. Levenshtein mesafesi, iki kelimeyi birbirine dönüştürmek için gereken minimum tek karakterlik düzenleme (ekleme, silme, değiştirme) sayısını ölçer. Bu sayede, orijinal bir alan adıyla şüpheli bir alan adının ne kadar farklı olduğunu sayısal olarak ifade edebiliriz.
import Levenshtein # pip install python-Levenshtein
def calculate_levenshtein_similarity(domain1, domain2):
# Domainleri sadece harf ve rakam içerecek şekilde temizleyelim
domain1 = ''.join(filter(str.isalnum, domain1.lower()))
domain2 = ''.join(filter(str.isalnum, domain2.lower()))
distance = Levenshtein.distance(domain1, domain2)
max_len = max(len(domain1), len(domain2))
if max_len == 0: # Boş stringler için özel durum
return 100.0 if distance == 0 else 0.0
similarity = (1 - (distance / max_len)) * 100
return similarity
# Örnek kullanım
original_domain = "hepsiburada.com"
suspicious_domains = [
"hepsiburado.com",
"hepsiburaada.com",
"hepsiburadaa.com",
"hepslburada.com", # l yerine 1
"trendyol.com"
]
print("\n--- Levenshtein Benzerlik Analizi ---")
for s_domain in suspicious_domains:
sim = calculate_levenshtein_similarity(original_domain, s_domain)
print(f" '{original_domain}' ile '{s_domain}' arasındaki benzerlik: %{sim:.2f}")
if sim > 80 and s_domain != original_domain:
print(" Potansiyel Şüphe: Yüksek benzerlik, typosquatting olabilir!")
Bu kod, iki alan adı arasındaki Levenshtein benzerliğini yüzde olarak hesaplar. %80 veya daha yüksek bir benzerlik oranı, manuel inceleme için bir uyarı işareti olabilir. Gelişmiş analize gelince, Levenshtein veya Jaccard benzerliği gibi metrikler, özellikle popüler markaların taklit edildiği phishing sitelerini tespit etmede çok güçlüdür. Çünkü dolandırıcılar genellikle orijinal alan adının küçük varyasyonlarını kullanırlar.
Makine Öğrenimi ile Dolandırıcı Alan Adı Sınıflandırması
Uzun vadede ve büyük ölçekli alan adı analizi için makine öğrenimi (ML) modelleri kullanmak, dolandırıcılık tespiti yeteneğimizi önemli ölçüde artırabilir. Bir ML modeli, binlerce bilinen meşru ve dolandırıcı alan adından öğrenerek, yeni karşılaştığı alan adlarını sınıflandırabilir. Bunun için aşağıdaki adımlar izlenir:
- Özellik Çıkarma (Feature Engineering): Bir alan adından anlamlı özellikler çıkarılır. Bunlar şunlar olabilir:
- WHOIS bilgileri (kayıt yaşı, gizlilik durumu, kayıtçı).
- SSL bilgileri (geçerlilik, sertifika veren).
- Alan adının uzunluğu, içerdiği rakam/harf oranı, tire sayısı.
- Typosquatting göstergeleri (popüler markalara olan benzerlik).
- Blacklist durumları.
- Alan adının anlamsız kelime içerip içermediği (örneğin, rastgele karakter dizileri).
- Veri Toplama ve Etiketleme: Büyük bir veri kümesi toplanır. Bu küme hem meşru hem de bilinen dolandırıcı alan adlarını içermelidir. Her bir alan adı "meşru" veya "dolandırıcı" olarak etiketlenmelidir.
- Model Eğitimi: Toplanan ve özellik çıkarılan veri seti, Random Forest, Destek Vektör Makineleri (SVM) veya Nöral Ağlar gibi bir sınıflandırma algoritması kullanılarak eğitilir.
- Model Değerlendirme ve Kullanım: Eğitilen modelin performansı test edilir ve ardından yeni, bilinmeyen alan adlarını tahmin etmek için kullanılır.
Bu yaklaşımlar, algılama hassasiyetini artırabilir ve insan gözünden kaçabilecek ince dolandırıcılık belirtilerini bile yakalayabilir. Ancak ML modelleri geliştirmek, doğru veri setlerini oluşturmayı ve model optimizasyonunu gerektiren daha karmaşık bir süreçtir. Başlangıç seviyesinde olmasanız bile, bu potansiyel hakkında bilgi sahibi olmak ileriye dönük vizyonunuzu genişletecektir.
Alan Adı Güvenliği İçin En İyi Uygulamalar: Kendinizi ve Verilerinizi Nasıl Korursunuz?
Tüm bu teknik bilgilere ek olarak, dijital dünyada güvende kalmak için bazı temel alışkanlıklar edinmek büyük önem taşır. Unutmayın ki, teknoloji ne kadar gelişmiş olursa olsun, en zayıf halka genellikle insan faktörüdür.
- Şüpheli E-postalar ve Mesajlara Dikkat Edin: Bilinmeyen bir göndericiden gelen veya aciliyet hissi uyandıran e-postalar ve mesajlara karşı tetikte olun. Özellikle kişisel bilgi isteyen veya şüpheli linkler içeren mesajlara asla yanıt vermeyin veya tıklamayın.
- Her Zaman URL'yi Kontrol Edin: Bir linke tıklamadan önce veya bir web sitesine giriş yapmadan önce daima adres çubuğundaki URL'yi dikkatlice kontrol edin. Küçük yazım hataları veya farklı bir TLD (örneğin .net yerine .com) dolandırıcılığın işaretçisi olabilir.
- HTTPS ve Kilit Simgesine Dikkat Edin: Kişisel veya finansal bilgilerinizi gireceğiniz tüm sitelerde URL'nin "https://" ile başladığından ve tarayıcıda bir kilit simgesinin göründüğünden emin olun. Ancak unutmayın, HTTPS tek başına yeterli bir güvenlik göstergesi değildir.
- Güçlü ve Benzersiz Şifreler Kullanın, İki Faktörlü Kimlik Doğrulama (2FA) Kullanın: Her site için farklı, karmaşık şifreler kullanın ve mümkün olan her yerde iki faktörlü kimlik doğrulamayı (2FA) etkinleştirin. Bu, şifreniz çalınsa bile hesabınızın güvenliğini artırır.
- Tarayıcı Eklentileri ve Antivirüs Yazılımları Kullanın: Bilinen kötü amaçlı siteleri ve phishing girişimlerini engelleyen tarayıcı eklentileri (örneğin, ad blocker'lar, anti-phishing araçları) ve güvenilir bir antivirüs yazılımı kullanın. Bunlar, sizi otomatik olarak birçok tehditten koruyacaktır.
- Yazılımlarınızı ve İşletim Sisteminizi Güncel Tutun: Yazılımlardaki güvenlik açıkları, siber saldırganlar tarafından istismar edilebilir. Bu nedenle, tüm yazılımlarınızı, tarayıcınızı ve işletim sisteminizi düzenli olarak güncelleyin.
- Şüphe Duyduğunuzda Kontrol Edin: Bir alan adından veya web sitesinden şüphe duyuyorsanız, bu makalede öğrendiğiniz Python tekniklerini kullanarak veya online WHOIS/SSL kontrol araçlarını kullanarak kendiniz analiz edin. Ayrıca, web sitesinin resmi sosyal medya hesaplarını veya güvenilir bir arama motorunu kullanarak doğru URL'yi bulmaya çalışın.
- Yedekleme Yapın: Önemli verilerinizin düzenli yedeklerini alın. Bir siber saldırı veya kötü amaçlı yazılım bulaşması durumunda verilerinizi geri yüklemenizi sağlar.
Son olarak, en iyi savunma, bilinçli olmaktır. Dijital okuryazarlığınızı artırarak ve yukarıdaki en iyi uygulamaları benimseyerek, çevrimiçi dolandırıcılık kurbanı olma riskinizi önemli ölçüde azaltabilirsiniz. Python ile edindiğiniz bu teknik bilgi, size ek bir güvenlik katmanı sağlayacak ve dijital dünyada daha güvenli adımlar atmanıza yardımcı olacaktır.
Sonuç: Python ile Dijital Güvenliği Güçlendirmek ve Sıkça Sorulan Sorular
Görüldüğü üzere, siber dolandırıcılık dijital dünyanın kaçınılmaz bir gerçeği olsa da, Python gibi güçlü araçlarla kendimizi bu tehditlere karşı donatmak mümkündür. Bu makale boyunca, bir alan adının WHOIS bilgilerini sorgulamaktan, SSL sertifikalarını incelemeye, alan adı yaşını analiz etmekten, typosquatting'i Levenshtein mesafesi ile tespit etmeye kadar birçok temel ve ileri düzey tekniği keşfettik. Ayrıca, blacklist veritabanlarıyla entegrasyon ve makine öğreniminin potansiyeli gibi daha sofistike yaklaşımlara da değindik.
Python'ın esnekliği ve zengin kütüphane ekosistemi, bu tür güvenlik analizlerini otomatikleştirmemizi ve büyük ölçekte uygulamamızı sağlar. Artık sadece tehlikeleri tanımakla kalmıyor, aynı zamanda kendi dijital güvenlik araçlarımızı oluşturma yeteneğine de sahip oluyoruz. Unutulmamalıdır ki, dijital güvenlik sürekli bir öğrenme ve adaptasyon sürecidir. Siber suçlular yeni yöntemler geliştirdikçe, bizim de savunma mekanizmalarımızı güncellememiz gerekecektir. Bu rehberdeki bilgiler ve kod örnekleri, bu yolculukta size sağlam bir başlangıç noktası sunmayı amaçlamaktadır.
Kendi Python script'lerinizi geliştirerek, şüpheli gördüğünüz alan adlarını hızlıca tarayabilir ve potansiyel tehlikelere karşı proaktif bir duruş sergileyebilirsiniz. Dijital güvenlik konusunda bilinçli adımlar atmak, sadece kişisel verilerimizi korumakla kalmaz, aynı zamanda daha güvenli bir internet ortamının oluşmasına da katkıda bulunur. Kendi güvenliğinizi sağlamakla başlayarak, çevrenizdeki insanlara da bu konuda rehberlik edebilirsiniz. Çünkü güvenli bir dijital gelecek, hepimizin sorumluluğundadır.
Sıkça Sorulan Sorular
- Bu teknikler dolandırıcı alan adlarını %100 doğrulukla tespit edebilir mi?
- Hayır, hiçbir teknik %100 doğruluk garantisi veremez. Siber dolandırıcılar sürekli yeni yöntemler geliştirmektedir. Ancak bu teknikler, riskli alan adlarını belirleme olasılığınızı önemli ölçüde artırır ve sizi birçok yaygın dolandırıcılıktan korur. Birden fazla kontrolü bir arada kullanmak, doğruluk oranını artıracaktır.
- Dolandırıcılık tespiti için hangi Python kütüphaneleri en önemlileri?
- En önemlileri
python-whois(WHOIS bilgileri için),requests(HTTP istekleri ve API entegrasyonu için),sslvesocket(SSL sertifikası kontrolü için) veLevenshteinveyadifflib(alan adı benzerliği analizi için) kütüphaneleridir. - Makine öğrenimi kullanarak dolandırıcılık tespiti ne kadar zor bir süreçtir?
- Temel makine öğrenimi kavramlarını ve Python'daki
scikit-learngibi kütüphaneleri anlamak kolaydır. Ancak, etkili bir model oluşturmak için büyük ve etiketli bir veri seti toplamak, doğru özellikleri çıkarmak ve modeli optimize etmek zaman ve çaba gerektiren daha ileri düzey bir konudur. Bu, daha deneyimli Python kullanıcıları için uygun bir sonraki adımdır. - Bu kontrolleri mobil cihazımda veya web tarayıcımda yapabilir miyim?
- Bu Python scriptleri doğrudan bir mobil cihazda veya web tarayıcısında çalışmaz. Ancak, bu scriptleri bir sunucuda çalıştırabilir ve bir API aracılığıyla mobil uygulamalarınıza veya tarayıcı eklentilerinize entegre edebilirsiniz. Alternatif olarak, tarayıcılar için geliştirilmiş anti-phishing eklentileri (örneğin, Netcraft Extension, BlockSite) benzer işlevleri sunar.
- Alan adının yaşı neden bu kadar önemli bir güvenlik göstergesidir?
- Alan adının yaşı, bir web sitesinin ne kadar süredir aktif olduğunu gösterir. Çoğu yasal ve güvenilir web sitesi uzun yıllardır aktiftir. Dolandırıcı siteler ise genellikle çok yeni kaydedilirler ve tespit edildiklerinde hızla kapatılırlar. Bu nedenle, özellikle bir markayı veya kurumu taklit eden yeni kaydedilmiş alan adları, güçlü bir şüphe işaretidir ve dikkatle incelenmelidir.