AI-система детекции фишинга: email и URL
Фишинг — вектор №1 в 80%+ APT-атак. Современные фишинговые письма пишутся с помощью GPT, визуально идентичны брендовым шаблонам, приходят с легитимно выглядящих доменов (typosquatting, lookalike domains). SpamAssassin с его правилами и репутационными листами ловит прошлое поколение фишинга.
Почему традиционная фильтрация не успевает
Zero-day phishing домены. Атакующий регистрирует домен за час до кампании. Reputation databases не обновляются так быстро. ML, работающий с характеристиками домена и письма, не зависит от black lists.
LLM-generated spear phishing. Персонализированные письма, написанные с учётом публично доступной информации о жертве. Не выглядят как «нигерийские письма». NLP-детектор учится на паттернах, а не содержании.
Legitimate services abuse. Фишинговые ссылки на Google Forms, OneDrive, Dropbox — легитимные домены в URL, SPF/DKIM проходят. Нужен анализ конечной страницы, а не только домена.
Многоуровневая детекция фишинг-email
Header analysis. SPF, DKIM, DMARC — первый слой. Но: прошедший DMARC != легитимный. Анализируем рассогласования: Display Name ≠ From address, Reply-To отличается от From, X-Originating-IP из подозрительного ASN.
URL features (без перехода). Характеристики URL в письме:
- Длина URL и количество субдоменов
- Энтропия домена (typosquatting имеет высокую энтропию)
- Возраст домена (свежезарегистрированные — риск)
- TLD аномалии
- Lookalike detection: levenshtein к известным брендам ≤ 2 символа
NLP на тексте письма. BERT fine-tuned на phishing corpus: urgency indicators («ваш аккаунт заблокирован»), impersonation patterns, request for credentials. Важно: model должна быть multilingual — фишинг на русском не хуже английского.
Visual similarity (для HTML email). Отрендеренный email → screenshot → сравнение с brand fingerprint базой. CosineSimilarity эмбеддингов ResNet50: если визуально похоже на Sberbank, но отправитель не sberbank.ru — флаг.
class PhishingEmailDetector:
def __init__(self):
self.header_scorer = HeaderAnalyzer()
self.url_scorer = URLFeatureExtractor()
self.text_classifier = load_model("phishing-bert-multilingual")
self.visual_matcher = BrandVisualMatcher(brand_db="brand_embeddings.index")
def score_email(self, email: ParsedEmail) -> PhishingScore:
scores = {
'header': self.header_scorer.score(email.headers),
'url': max(self.url_scorer.score(u) for u in email.urls) if email.urls else 0,
'text': self.text_classifier.predict(email.body_text),
'visual': self.visual_matcher.similarity_score(email.html_screenshot)
}
# Взвешенное объединение
final_score = (0.2*scores['header'] + 0.35*scores['url'] +
0.3*scores['text'] + 0.15*scores['visual'])
return PhishingScore(score=final_score, breakdown=scores)
URL-детектор в реальном времени
Для защиты браузера: расширение или proxy, проверяющий URL до перехода пользователя. Требование: latency < 200ms.
Быстрый слой: VirusTotal/Google Safe Browsing API lookup — 50–100ms. Покрывает известные URL.
ML-слой для неизвестных URL: LightGBM на ~30 URL-фичах (без перехода на страницу). Latency: 5–15ms. Точность: 94% при FPR 0.8%.
Глубокий слой (асинхронно): если URL прошёл быстрый слой, но score средний — реальный переход в headless sandbox: анализ DOM, детекция форм для ввода credentials, JavaScript поведение. Результат через 2–5 секунд, обновляет reputation базу.
Детекция lookalike domains
Для защиты бренда и pre-emptive blocking:
import tldextract
from rapidfuzz import distance
PROTECTED_BRANDS = ["sberbank", "tinkoff", "vtb", "gosuslugi", "mail"]
def check_lookalike(domain: str) -> float:
extracted = tldextract.extract(domain)
domain_name = extracted.domain
min_dist = min(
distance.Levenshtein.normalized_distance(domain_name, brand)
for brand in PROTECTED_BRANDS
)
# Расстояние 0.15 = 1-2 символа разницы для коротких имён
return 1.0 - min_dist if min_dist < 0.2 else 0.0
Дополнительно: Unicode homoglyph detection (кириллическая «а» vs. латинская «a» в домене).
Практический кейс
Производственная компания, 1 200 сотрудников. Целенаправленная spear phishing кампания под CFO: персонализированные письма от «поставщика», запрос подтвердить реквизиты для платежа.
Microsoft Defender пропустил: письма прошли SPF/DKIM, текст без типичных фишинговых признаков, ссылка на Google Forms.
AI-детектор поймал на трёх сигналах:
- Домен отправителя зарегистрирован 3 дня назад
- Lookalike similarity к реальному поставщику: 0.89 (1 буква разница)
- NLP score: urgency + financial request паттерн → 0.78
6 писем заблокированы. CFO и 2 бухгалтера получили уведомление с объяснением почему письма подозрительны.
Сроки: 2–4 недели для email gateway интеграции с ML-детектором, 6–10 недель для полного решения с URL-анализом, brand monitoring и sandbox.







