Konuyu Açan
#1
Python E-posta Tehdit Analizi Otomasyonu
[code]
Basit bir prova akışı örneği
import imaplib, email
from email.header import decode_header
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
Not: Bu sadece kavramsal bir iskelet; gerekli güvenlik ve hata yönetimi eksiksiz uygulanmalı.
def fetch_emails(host, user, password, mailbox="INBOX"):
M = imaplib.IMAP4_SSL(host)
M.login(user, password)
M.select(mailbox)
typ, data = M.search(None, "UNSEEN")
ids = data[0].split()
emails = []
for i in ids:
typ, msg_data = M.fetch(i, "(RFC822)")
raw = msg_data[0][1]
msg = email.message_from_bytes(raw)
subject, encoding = decode_header(msg["Subject"])[0]
if isinstance(subject, bytes):
subject = subject.decode(encoding or "utf-8", errors="ignore")
body = ""
if msg.is_multipart():
for part in msg.walk():
if part.get_content_type() == "text/plain":
charset = part.get_content_charset() or "utf-8"
body += part.get_payload(decode=True).decode(charset, errors="ignore")
else:
charset = msg.get_content_charset() or "utf-8"
body = msg.get_payload(decode=True).decode(charset, errors="ignore")
emails.append({"subject": subject, "body": body})
M.logout()
return emails
def build_model():
# Bu sadece örnek; gerçek kullanım için etiketli veri gerekir.
corpus = [
"please verify your account immediately",
"invoice attached",
"congratulations you won a prize",
"update your password now",
"meeting reminder for today"
]
labels = [1, 0, 1, 1, 0] # 1 tehdit benzeri
vectorizer = TfidfVectorizer(stop_words="turkish")
X = vectorizer.fit_transform(corpus)
clf = LogisticRegression()
clf.fit(X, labels)
return vectorizer, clf
def score_email(email_text, vectorizer, clf):
X = vectorizer.transform([email_text])
return float(clf.predict_proba(X)[0,1])
Örnek çalışma betiği
if name == "main":
host = "imap.example.com"
user = "user@example.com"
password = "sifre"
emails = fetch_emails(host, user, password)
vec, model = build_model()
for e in emails:
text = e["subject"] + " " + e["body"]
score = score_email(text, vec, model)
print(f"Subject: {e['subject']}\nTehdit Skoru: {score:.2f}\n")
Bu temel çerçeve, kendi e-posta güvenlik akışınıza bağlı olarak genişletilebilir. E-posta tehdit analizi için güvenilir bir veri setiyle eğitilmiş bir model, ek güvenlik katmanları (URL analizleri, ek dosya tarama sonuçları, SPF/DKIM/DMARC kontrolleri) ile birleşince operasyonel bir fark yaratır. Bu tür bir otomasyonu kurarken hangi ortamı kullanmayı düşünüyorsunuz ve hangi güvenlik standartlarına uyum sağlamayı amaçlıyorsunuz?
Bir e-posta tehdidini tespit etmek ve sınıflandırmak için basit bir otomasyon geliştirmenin temellerini paylaşacağım. Bu yazı, teknik bilgilerle dolu ama uygulanabilir adımlar sunar; ana hedef, olası tehditleri hızlı bir şekilde işaretlemek ve müdahale sürecini hızlandırmaktır.
- Amaç ve kapsam: Bu otomasyon, gelen kutusundaki e-postaları analiz ederken metin tabanlı göstergeleri (kullanılan kelimeler, bağlam, aciliyet ifadeleri) değerlendirir ve zararlı veya tehdit içerikli olabilecek iletileri işaretler. Kapsam, sipariş onayları gibi meşru e-postalarda yanlış pozitifleri azaltmaya odaklıdır; güvenlik ekibi için önceliklendirme sağlar.
- Girdi ve çıktı tasarımı: Kaynaklar IMAP/POP3 üzerinden gelen kutusu veya olay akışları olabilir. Çıktı olarak tehdit skorları, etiketler ve bağlam notları üretilir. Örneğin: [Tehdit Skoru: 0.78] [Konu: Fatura Yükümlülüğü] [İpucu: Şüpheli dosya ekine dikkat edin].
- Metodoloji:
- Anahtar kelime ve bağlam analizi: tehdit içeren kelimeler (acil, hemen, yetkili, password, ödeme) ve bunların bağlamdaki kullanımı incelenir.
- Makine öğrenmesi temeli: Basit bir sınıflandırıcı için tf-idf ile özellik çıkarımı ve lojistik regresyon veya hafif bir ağ kullanımı önerilir.
- E-posta üstbilgileri ve bağlantılar: Gönderen alanı, SPF/DKIM/DMARC durumları ve bağlantı içeriği (kısmi URL analizleri) ek güvenlik sinyalleri sağlar.
- Uygulama akışı:
- E-posta alınır, başlık ve gövde ayrıştırılır.
- Küçük bir doğruluk için ön işleme uygulanır (kullanılan dil temizleme, stopword temizleme).
- Özellikler çıkarılır ve modeller tarafından skor üretilir.
- Sonuçlar loglanır ve güvenlik ekibi için uyarı oluşturulur.
- Örnek yapı ve bileşenler:
- Python kütüphaneleri: imaplib veya aiosmtpd ile bağlantı, email modülü ile ayrıştırma, scikit-learn ile sınıflandırma, urllib veya tldextract ile URL analizi.
- Basit bir prototip için bir.csv/JSON üzerinde etiketlenmiş veriye dayalı bir model kullanılabilir.
- Güvenlik ve etik: E-posta içeriği işlemek hassas olabilir; yerel veri güvenliği politikaları, minimum yetkili erişim ve log güvenliği önemlidir. Yanlış pozitifler iş akışını bozabilir, bu yüzden kullanıcı geri bildirimi ve periyodik model güncellemeleri önerilir.
- Genişletilebilirlik: Şablon, ek güvenlik sinyalleriyle zenginleştirilebilir; örneğin ekli zararlı dosya tespit modülleri, MIME türü analizleri veya bağlam bazlı davranış analizi ile desteklenebilir.
[code]
Basit bir prova akışı örneği
import imaplib, email
from email.header import decode_header
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
Not: Bu sadece kavramsal bir iskelet; gerekli güvenlik ve hata yönetimi eksiksiz uygulanmalı.
def fetch_emails(host, user, password, mailbox="INBOX"):
M = imaplib.IMAP4_SSL(host)
M.login(user, password)
M.select(mailbox)
typ, data = M.search(None, "UNSEEN")
ids = data[0].split()
emails = []
for i in ids:
typ, msg_data = M.fetch(i, "(RFC822)")
raw = msg_data[0][1]
msg = email.message_from_bytes(raw)
subject, encoding = decode_header(msg["Subject"])[0]
if isinstance(subject, bytes):
subject = subject.decode(encoding or "utf-8", errors="ignore")
body = ""
if msg.is_multipart():
for part in msg.walk():
if part.get_content_type() == "text/plain":
charset = part.get_content_charset() or "utf-8"
body += part.get_payload(decode=True).decode(charset, errors="ignore")
else:
charset = msg.get_content_charset() or "utf-8"
body = msg.get_payload(decode=True).decode(charset, errors="ignore")
emails.append({"subject": subject, "body": body})
M.logout()
return emails
def build_model():
# Bu sadece örnek; gerçek kullanım için etiketli veri gerekir.
corpus = [
"please verify your account immediately",
"invoice attached",
"congratulations you won a prize",
"update your password now",
"meeting reminder for today"
]
labels = [1, 0, 1, 1, 0] # 1 tehdit benzeri
vectorizer = TfidfVectorizer(stop_words="turkish")
X = vectorizer.fit_transform(corpus)
clf = LogisticRegression()
clf.fit(X, labels)
return vectorizer, clf
def score_email(email_text, vectorizer, clf):
X = vectorizer.transform([email_text])
return float(clf.predict_proba(X)[0,1])
Örnek çalışma betiği
if name == "main":
host = "imap.example.com"
user = "user@example.com"
password = "sifre"
emails = fetch_emails(host, user, password)
vec, model = build_model()
for e in emails:
text = e["subject"] + " " + e["body"]
score = score_email(text, vec, model)
print(f"Subject: {e['subject']}\nTehdit Skoru: {score:.2f}\n")
Bu temel çerçeve, kendi e-posta güvenlik akışınıza bağlı olarak genişletilebilir. E-posta tehdit analizi için güvenilir bir veri setiyle eğitilmiş bir model, ek güvenlik katmanları (URL analizleri, ek dosya tarama sonuçları, SPF/DKIM/DMARC kontrolleri) ile birleşince operasyonel bir fark yaratır. Bu tür bir otomasyonu kurarken hangi ortamı kullanmayı düşünüyorsunuz ve hangi güvenlik standartlarına uyum sağlamayı amaçlıyorsunuz?
