1.1 Yönetici Özeti
E-posta domain sahteciliği bir "protokol bypass"ı değil, SMTP'nin (RFC 5321, 1982 tasarım varsayımı) yapısal kimlik doğrulama boşluğudur. SPF, DKIM, DMARC bu boşluğa sonradan eklenmiş üç ayrı yama katmanıdır; hiçbiri tek başına yeterli değildir ve üçü birlikte de yalnızca sahip olunan domain'in exact-domain sahteciliğini önler.
Katman | Doğruladığı şey | Doğrulamadığı şey |
|---|---|---|
SPF | Zarf göndericisi ( |
|
DKIM | Mesaj imzalandıktan sonra değişmedi mi | Mesajın kimin adına gönderildiği ( |
DMARC |
| Cousin-domain, display-name, ele geçirilmiş hesap, |
2026 : DMARC, Mayıs 2026'da RFC Editor tarafından resmen yayımlanan RFC 9989/9990/9991 ile 11 yıllık Informational statüsünden (RFC 7489, 2015) çıkıp IETF Standards Track'e (Proposed Standard) taşındı. RFC 9989'un künyesi açıkça "Obsoletes: 7489, 9091" diyor. v=DMARC1 hâlâ geçerli; ama pct=/rf=/ri= kaldırıldı, np=/psd=/t= eklendi, Organizational Domain tespiti PSL yerine DNS Tree Walk ile yapılıyor.
1.2 Tehdit Modeli — SMTP'nin Yapısal Boşluğu
SMTP Zarfı (protokol seviyesi, kullanıcı GÖRMEZ)
MAIL FROM:<saldirgan@yetkili-gonderici.com> ← SPF bunu kontrol eder
↓
Mesaj Başlıkları (kullanıcı GÖRÜR)
From: "CEO Adı" <ceo@hedef-kurum.com> ← SPF bunu KONTROL ETMEZ
Reply-To: saldirgan@disaridan-kontrol.com ← Hiçbir standart bunu kontrol etmez
Bu ayrım RFC 5321 zarfı vs. RFC 5322 başlığından yola cıkılarak oluşturulmuş bir tasarımdır. mailing list, forwarding, bounce-handling, transactional mail servisleri bu ayrım sayesinde çalışır. Aynı ayrım saldırgana zarfı meşru bir SPF-geçerli sunucudan gönderme, başlığı istediği gibi sahte üretme imkânı verir.
Saldırı Vektör Taksonomisi (Beş Sınıf)
Vektör | Yöntem | SPF/DKIM/DMARC Etkisi | MITRE (güncel, v19) |
|---|---|---|---|
Exact-domain spoofing |
|
| T1684.002 |
Header forgery |
| DMARC eşleşme kontrolünde yakalar ( | T1684.002 |
Display-name spoofing |
| Yapısal olarak tamamen etkisiz | T1684.001 |
Cousin domain |
| Yapısal olarak tamamen etkisiz, Saldırgan kendi domain'i için geçerli SPF/DKIM/DMARC yayımlayabilir | T1566 |
Ele geçirilmiş meşru hesap | Gerçek | Tasarım gereği her zaman pass çünkü mesaj gerçekten o altyapıdan geliyor | T1078, T1534 |
1.3 SPF (RFC 7208) — Mekanizma ve Zafiyet Yüzeyi
1.3.1 Mekanizmalar ve Niteleyiciler
Mekanizma | Anlamı | DNS lookup sayılır mı? |
|---|---|---|
| CIDR yetkilendirir | Hayır |
| A/MX kaydına göre yetki | Evet |
| Başka SPF kaydını dahil et | Evet |
| SPF politikasını tamamen ikame et | Evet |
| Fail açıklaması döndürür | Hayır |
| DNS varlığına göre geçer | Evet |
| PTR doğrulaması — önerilmez, yavaş/güvenilmez | Evet |
Niteleyici | Davranış |
|---|---|
| Tüm göndericiler geçer. SPF'yi tamamen anlamsız kılar |
| Soft fail , çoğu MTA yine de teslim eder, yalnızca etiketler |
| Nötr |
| Hard fail |
1.3.2 Zafiyetler
#1 — Eksik/zayıf SPF: kayıt yok → spf=none; +all/?all → fiilen SPF yok; ~all → alıcı çoğunlukla teslim eder, kullanıcı Received-SPF: softfail'i görmez.
Kritik bağımlılık: SPF tek başına hiçbir mesajı reddetmez kararı DMARC/MTA politikası verir.
-allyayınlamış domain, DMARC yoksa veyap=noneise hâlâ sömürülebilir.
#2 — 10 DNS-lookup sınırı (RFC 7208 ): include/a/mx/exists/redirect/ptr sayılır (ip4/ip6/all sayılmaz). Aşılırsa PermError → DMARC bu mesajı fail sayar bu sebepten kendi meşru postanız kendi karmaşıklığınız yüzünden spoofing gibi görünür.
v=spf1 include:spf.protection.outlook.com include:sendgrid.net
include:mailchimp.com include:salesforce.com include:zendesk.com
include:_spf.google.com include:spf.mandrillapp.com -all
→ Her include kendi iç zincirini taşır → 10 sınırı kolayca aşılır → PermError
Ek olarak Void lookup (RFC 7208 §4.6.4):
NXDOMAIN veya boş yanıt dönen sorgular ayrıca sayılır;
2'yi aşarsa yine PermError. Saldırgan, kaydınızdaki ölü include/a/mx
hedeflerini tetikleyerek meşru postanızı PermError'a düşürebilir.#3 — Unutulmuş üçüncü taraf include:: Artık kullanılmayan ama SPF'de kalan bir platform, o platformdaki eski/tenant hesabı üzerinden domain adına SPF-pass mesaj gönderebilir. Bu bir syntax hatası değil, yetki devri hatasıdır.
#4 — Birden fazla SPF TXT kaydı: Standart tek kayıt bekler; birden fazla v=spf1 kaydı PermError üretir.
1.4 DKIM (RFC 6376) — Mekanizma ve Zafiyet Yüzeyi
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ornek.com; s=mail2026;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version;
bh=nRxPejqDeN2l/N0Bd57Ct8lu0lQkhmq8m26Ts86il9E=;
b=M9Q7HknXuCNoSMyiajVJACwpaqjCoSJHc4AyA2GF+J88dpUEj5tH...
1.4.1 Kritik Boşluk — DKIM From: ile Aynı Olmak Zorunda Değil
Saldırgan kendi meşru domain'inden DKIM-imzalı gönderip From: başlığını başka domain gibi gösterebilir ve DKIM pass döner (imza geçerli, kendi domain'i içindir) ama mesaj sahtedir. Bunu tespit eden tek mekanizma DMARC dogrulamasıdır (adkim=).
1.4.2 Zayıf Anahtar (RFC 8301)
Anahtar Boyutu | Durum |
|---|---|
< 1024-bit | İmzalar kullanılmamalı Verifier'lar geçersiz saymalı (RFC 8301 |
1024-bit | Protokol minimumu ( |
2048-bit | Önerilen ( |
Ed25519 (RFC 8463) | Küçük/verimli, ama büyük sağlayıcılarda destek hâlâ tutarsız |
1.4.3 Selector/Rotasyon İhmali
s= yıllarca değişmezse sızmış/eski özel anahtar süresiz geçerli imza üretebilir. Rotasyon yapılmaması operasyonel zafiyettir.
1.4.4 h= Header Coverage Hatası
h=Date:Subject:Message-ID ← From imzalanmamış!
From başlığı h= listesinde yoksa, DKIM imzası geçerli kalırken From: değeri imza bozulmadan değiştirilebilir. Modern DKIM uygulamaları ve DMARC uyumluluğu açısından From alanının imzalanması fiilen zorunlu kabul edilir. Modern imzalarda From mutlaka imzalanmalıdır.
1.4.5 l= (Body Length) Riski
l=1200 yalnızca gövdenin ilk 1200 byte'ını imzalar; sonrasına ekleme yapılırsa imza yine pass kalabilir. Bazı mailing-list uyumluluk gerekçeleri olsa da güvenlik açısından kötü bir trade-off'tur.
1.4.6 Canonicalization
c=simple/simple tek karakter değişikliğinde imzayı bozar (mailing list/proxy'ler mesajı hafifçe değiştirdiğinde yanlış-pozitif fail). c=relaxed/relaxed bunu tolere eder ama saldırgana whitespace manipülasyon toleransı bırakır anlamı değiştirmez, yalnızca format farklarını tolere eder.
1.4.7 DKIM Replay (Relay) Saldırısı
1.4.7 DKIM Replay (Relay) Saldırısı
Saldırgan, kendi meşru domaininden DKIM-imzalı TEK bir mesajı ele geçirip binlerce alıcıya aynen yeniden gönderir.
İmza gövde/başlık değişmediği için DKIM PASS kalır;
DMARC de d= hizası kendi domaininde geçerli olduğu için PASS döner. Böylece spam/phishing, yüksek itibarlı bir domainin geçerli imzasını "taşıyarak" filtreleri aşar.
Sömürüyü kolaylaştıran hatalar:
-
l= (body length) kullanımı → imzalı kısmın ardına içerik eklenebilir-
x= (imza son kullanma) yok → imza süresiz yeniden oynatılabilir- Geniş/gevşek
h= ve uzun ömürlü selector → replay penceresi büyür
MITRE: T1684.002. 2023–2025'te Gmail/Yahoo gibi sağlayıcıların ek oran-limiti ve replay tespiti getirmesinin nedeni budur.
1.5 DMARC — eşleşme kontrolü Mantığı ve Zafiyet Yüzeyi
DMARC PASS: (SPF PASS VE SPF-domain From-domain ile eşleşme )
VEYA
(DKIM PASS VE DKIM d= From-domain ile eşleşme )
Eşleşme |
| Anlamı |
|---|---|---|
relaxed (varsayılan, | Organizasyonel domain yeterli |
|
strict ( | Tam eşleşme gerekir |
|
1.5.1 Zafiyet #1 — p=none (En Yaygın, En Kritik)
_dmarc.hedef.com TXT "v=DMARC1; p=none"
Yalnızca raporlama sağlar, koruma sağlamaz. Eşleşme fail olsa da mesaj teslim edilir; domain sahibine yalnızca rapor gider. p=none, saldırgan için fiilen "korumasız domain" ile eşdeğerdir.
Veri | Kaynak |
|---|---|
DMARC kayıtlı domainlerin ~%29’u | EasyDMARC 2026 |
Global enforcement ( | DMARCguard 2026 |
Fortune 500 | EasyDMARC 2026 |
1.5.2 Zafiyet #2 — Header Forgery ile SPF/DMARC Ayrımının Sömürülmesi
Zarf (MAIL FROM): legitspammer@yetkili-gondericiler.com ← SPF PASS
From: (görünen): ceo@hedef.com ← SPF bunu kontrol ETMEZ
SPF pass döner (zarf domain'i kendi kaydına uygun), kullanıcı sahte From: görür. DMARC kontrolü tam bu senaryoyu yakalamak için var, p=none altında hâlâ sömürülebilir, p=quarantine/p=reject altında engellenir.
1.5.3 DMARCbis (RFC 9989/9990/9991)
Değişiklik | Eski (RFC 7489) | Yeni (RFC 9989/9990) | Zafiyet Açısından Sonuç |
|---|---|---|---|
Organizational Domain tespiti | Statik PSL — üçüncü taraf bağımlılığı | DNS Tree Walk — | PSL güncel-olmayan girişleri eşleşme kontrollerini atlatabiliyordu; bu kapatılıyor fakat geçiş döneminde PSL/Tree-Walk kullanan alıcılar aynı anda farklı sonuç üretebilir |
| Kademeli yaptırım yüzdesi | Kaldırıldı — receiver'lar göz ardı edip politikayı %100 uygular |
|
| Rapor formatı/aralığı | Kaldırıldı | Düşük etki |
| Yok | Var olmayan alt alan politikası |
|
| Yok | Test modu |
|
| Koşulsuz "en güçlü koruma" | Mailing-list/forwarding trafiği olan domainler için artık koşulsuz önerilmiyor; RFC 9989 receiver'ları ek bağlam (yerel politika, itibar, ARC) olmadan | p=reject güçlü bir politika sinyali olmaya devam etse de, tüm alıcılar tarafından koşulsuz SMTP reddi olarak uygulanması garanti değildir. |
1.6 Saldırı Zincirleri — PoC
Uyarı: Aşağıdaki PoC'ler yalnızca yazılı izinli test ortamında çalıştırılmalıdır.
1.6.1 Zincir A — SPF Eksikliği/Zayıflığı → Doğrudan Spoofing
[1] dig TXT hedef.com → SPF yok veya ~all/?all
[2] Saldırgan VPS/SMTP sunucusu
[3] MAIL FROM:<finans@hedef.com>
[4] From: Finans Direktörü <finans@hedef.com>
[5] Alıcı MTA: SPF none/softfail → çoğu sunucu teslim eder; DKIM yok; DMARC yok/p=none → yaptırım yok
[6] Mesaj gelen kutusuna düşer
swaks --to kurban@hedef-kurum.test \
--from ceo@hedef-kurum.test \
--header "Subject: Acil — fatura onayı" \
--body "Yetkili lab PoC mesajı." \
--server saldirgan-smtp.test:25
Tipik zayıf-hedef Authentication-Results:
Authentication-Results: mx.hedef-kurum.test;
spf=none (hedef-kurum.test: no SPF record) smtp.mailfrom=ceo@hedef-kurum.test;
dkim=none; dmarc=none
1.6.2 Zincir B — Header Split (MAIL FROM ≠ From)
SMTP MAIL FROM: legitspammer@yetkili-gondericiler.test ← SPF PASS
From: ceo@hedef.test ← SPF KONTROL ETMEZ
swaks --to kurban@hedef-kurum.test \
--from "ceo@hedef-kurum.test" \
--mail-from "bounce@yetkili-ucuncu-taraf.test" \
--header "Subject: Hizalama testi" \
--server saldirgan-smtp.test:25
Başarı koşulu: hedef domainde DMARC yok veya p=none. p=reject + doğru eşleşme bu vektörü kapatır.
1.6.3 Zincir C — SMTP Smuggling (doğrulanmış: CVE-2023-51764, USENIX Security 2025)
Gönderen ve alan MTA'ların end-of-data dizisini (\r\n.\r\n vs \n.\n) farklı yorumlaması, saldırganın tek SMTP oturumuna ikinci bir mesajı sıkıştırmasına izin verir — bu mesaj yetkili gönderici altyapısından geliyormuş gibi SPF/DMARC geçer.
[Gönderen A — yetkili altyapı] → DATA gövdesine \n.\n ile ikinci mesaj enjekte
[Alan B — savunmasız MTA] → \n.\n'yi mesaj sonu sanır, kalanı yeni SMTP komutu sayar
[Sıkıştırılmış mesaj] MAIL FROM:<ceo@yetkili-altyapi.test> → SPF PASS + DMARC PASS → teslim
CVE/Kaynak | Etki |
|---|---|
CVE-2023-51764 (Postfix ≤3.8.5) |
|
USENIX Security 2025 (Wang et al.) | 19 kamu servisi, 1.577 özel servis, 5 açık kaynak yazılım ve 1 e-posta gateway savunmasız ölçüldü |
Kritik nokta: Smuggling klasik açık relay değildir, relay gerektirmez protokol yorum farkı yeterlidir. Hedef
p=rejectolsa bile, meşru gönderici altyapısı üzerinden bypass mümkündür. Sonuç, kullanılan MTA yazılımlarına ve yapılandırmalara bağlıdır.
1.6.4 Zincir D — MTA Parser Bypass (CVE-2025-61084)
MDaemon Mail Server ≤23.5.2, SPF/DKIM/DMARC doğrulamasını açı parantezi içindeki adresle yapar; e-posta istemcisi genelde parantez öncesi metni gösterir. Saldırgan görünen kısma sahte adres, parantez içine görünmez Unicode ince-boşluk (\u2009) ile ayrılmış meşru adres yerleştirir:
From: spoofed@hedef.com\u2009\u2009\u2009\u2009<valid@hedef.com>
MTA doğrular: valid@hedef.com → SPF/DKIM/DMARC PASS
İstemci gösterir: spoofed@hedef.com (ince boşluklar görünmez)
Alan | Değer |
|---|---|
CVE | CVE-2025-61084 |
CVSS v3.1 | 7.1 (High) — |
CWE | CWE-116 (Improper Encoding), CWE-20 |
Durum | Vendor disputed — üretici "UI spoofing istemci sorunu, sunucu sorunu değil" diyor; mitigasyon: MDaemon "From Header Screening" özelliği |
Bu sınıf zafiyetler DMARC'ın üstüne oturan bir katmandır — p=reject aktif olsa bile MTA yanlış adresi doğrularsa mesaj yine teslim edilir.
1.6.5 Zincir E — Display-Name Spoofing (T1684.001)
From: "CEO Adı" <saldirgan@gmail.com>
Domain gmail.com'dur; SPF/DKIM/DMARC gmail.com için pass döner hedef.com için değil, çünkü saldırgan hedef.com adına sahtecilik yapmıyor, kendi (meşru) Gmail hesabından gönderiyor. SPF/DKIM/DMARC bu vektörü doğrudan çözmek için tasarlanmamıştır. Ancak modern Secure Email Gateway (SEG) ürünleri, VIP koruması ve display-name analizi gibi ek kontrollerle bu saldırıları tespit etmeye çalışabilir.
1.6.6 Zincir F — Cousin Domain
dnstwist hedef.com --registered
Saldırgan hedef-mail.test gibi kendi domain'i için tamamen geçerli SPF/DKIM/DMARC (p=reject dahil!) yayımlayabilir çünkü teknik olarak kendi domain'inden gönderiyor. hedef-mail.test ≠ hedef.test ayrımını hiçbir kimlik doğrulama standardı çözemez.
1.6.7 Saldırgan Altyapı Kalıbı — "Meşru Görünen, Yaptırımsız Domain"
; Saldırgan phishing domaini
pwneip.test. TXT "v=spf1 a mx ~all"
_dmarc.pwneip.test. TXT "v=DMARC1; p=none;"
~all + p=none birlikteliği bilinçli tasarımdır — alıcı güvenlik geçitlerinin reddetmesini engeller. Savunma perspektifinden bu kombinasyon tek başına bir sinyaldir: "yeni kayıtlı, sıfır yaptırım domaini" (SPF ~all/?all + DMARC p=none/yok + domain yaşı < 30 gün) — Bölüm 3'te davranışsal erken uyarı olarak işlenecek.
1.7 Sömürülebilirlik Karar Ağacı
SPF kaydı var mı?
├─ Hayır ─────────────────────────► DOĞRUDAN SPOOF
└─ Evet
├─ +all/?all ─────────────────► DOĞRUDAN SPOOF
├─ ~all ──────────────────────► SOFTFAIL → çoğu teslim
├─ PermError (10-lookup) ─────► SPF fail
└─ -all ──────────────────────► SPF fail
DMARC var mı?
├─ Hayır ─────────────────────────► YAPTIRIM YOK → teslim
└─ Evet
├─ p=none ─────────────────────► YAPTIRIM YOK → teslim
├─ p=quarantine ───────────────► junk (BEC için zayıf savunma)
└─ p=reject ───────────────────► SMTP red
├─ Smuggling? ────────────► BYPASS mümkün (§1.6.3)
├─ MTA parser zafiyeti? ─► BYPASS mümkün (§1.6.4)
├─ Compromised account? ─► BYPASS (tasarım gereği pass)
├─ RFC 9989 uyumlu alıcı ─► fail mesajı quarantine gibi işlenebilir
└─ Cousin/display-name? ─► FARKLI VEKTÖR
1.8 MITRE ATT&CK
Bu bölümün en önemli düzeltmesi: MITRE ATT&CK v19 (28 Nisan 2026) ile T1656 (Impersonation) ve T1672 (Email Spoofing) revoke edildi, yeni teknik T1684 (Social Engineering) altında yeniden yayımlandı. Bu değişiklik doğrudan MITRE'nin kendi resmi duyurusuyla (ATT&CK blog, Amy L. Robertson) doğrulanmıştır.
Eski ID (v18 ve öncesi) | Yeni ID (v19, güncel — Nisan 2026) | Durum |
|---|---|---|
T1656 — Impersonation | T1684.001 — Social Engineering: Impersonation | T1656 revoked by T1684.001 |
T1672 — Email Spoofing | T1684.002 — Social Engineering: Email Spoofing | T1672 revoked by T1684.002 |
Güncel Teknik | Bu Bölümdeki Karşılığı |
|---|---|
T1684.002 (Social Engineering: Email Spoofing) | Exact-domain spoofing, header forgery, MTA parser bypass — §1.6.1, 1.6.2, 1.6.4 |
T1684.001 (Social Engineering: Impersonation) | Display-name spoofing — §1.6.5 |
T1566 / T1566.001 / T1566.002 | Cousin-domain üzerinden ek/link phishing — §1.6.6 |
T1598 (Phishing for Information) | Sahte domain'den bilgi toplama |
T1534 (Internal Spearphishing) / T1078 (Valid Accounts) | Ele geçirilmiş meşru hesap (kapsam dışı ama ilgili) |
1.9 Kontrol Matrisi — Saldırgan Hangi Kontrolü Nasıl Aşar?
Saldırı | SPF | DKIM | DMARC | Alternatif Vektör |
|---|---|---|---|---|
SPF yok + | — | — | — | Doğrudan spoofing |
SPF | Fail | — | Fail → | Doğrudan spoofing |
SPF | Fail | — | Fail → reject | Smuggling, cousin domain, compromised account |
Header split (DMARC yok) | Pass (farklı domain) | — | — | Doğrudan |
SMTP smuggling | Pass (meşru IP) | Pass | Pass | — |
CVE-2025-61084 sınıfı | Pass (yanlış parse) | Pass | Pass | Parser bypass |
Display-name | — | — | — | Her zaman açık |
Cousin domain | — | — | — | Her zaman açık |
Compromised M365/Google Workspace | Pass | Pass | Pass | — |
1.10 Kapsam Sınırları — Bu Üçlünün Kapatmadığı Alan
Senaryo | Neden Etkisiz |
|---|---|
Typosquatting / IDN homoglyph | Saldırgan kendi (farklı) domain'i için geçerli SPF/DKIM/DMARC yayımlar |
Display-name spoofing | Eşleşme kontrolü domain düzeyinde çalışır, görünen ada bakmaz tespit için ek gateway veya istemci kontrolleri gerekir. |
Ele geçirilmiş meşru hesap | Mesaj gerçekten o domain'den, o sunucudan gönderiliyor — tasarım gereği geçer |
Forwarding/mailing-list | SPF kırılır, DKIM bazen kırılır (footer/prefix eklenmesi); ARC bunu otomatik meşru yapmaz, yalnızca önceki hop'un authentication sonucunu taşır |
Reply-To manipülasyonu | Hiçbir standart Reply-To'yu kontrol etmez |
Tamamlayıcı kontroller (Bölüm 2'de): dnstwist izleme + defensive registration, display-name eşleştirme/VIP koruma kuralları, mail gateway impersonation politikası, ARC, MTA-STS/TLS-RPT (bunlar transport güvenliği sağlar, From: sahteciliğini çözmez — BIMI de authentication mekanizması değil, marka göstergesidir).
1.11 Bölüm 1 Sonuçları
E-posta domain sahteciliği, SMTP'nin tasarım gereği kimlik doğrulamasız olmasının doğal sonucudur; SPF zarfı, DKIM mesaj bütünlüğünü, DMARC ikisinin From: başlığıyla hizalanmasını doğrular ve üçü birlikte öncelikle sahip olunan domain'in yetkisiz kullanımına karşı koruma sağlar; ancak display-name spoofing, cousin-domain, hesap ele geçirme ve çeşitli uygulama katmanı zafiyetleri gibi senaryolar ek kontroller gerektirir. p=none, zayıf/rotasyonsuz DKIM, SMTP smuggling, MTA parser zafiyetleri (CVE-2025-61084 sınıfı) ve cousin-domain/display-name (T1684.001)/hesap-ele-geçirme senaryoları bu üçlünün kapsamı dışında kalır; 2026 itibarıyla hem DMARC'ın kendisi (RFC 9989/9990/9991, DNS Tree Walk, np=/t=, p=reject tavsiyesinin nüanslanması) hem de MITRE ATT&CK eşlemesi (T1684 ailesi, v19) değişmiştir — bu güncellemeleri görmezden gelen bir analiz hem teknik hem referans hijyeni açısından güncelliğini kaybeder.