E-posta güvenliği: SPF, DKIM, DMARC

Ahmet Can KARAAĞAÇLI
5 min readApr 24, 2021

SPF, DKIM ve DMARC terimleri başlangıçta bana anlaşılması güç konulardan, pek bilindik kelimeler olmadığı için araştırmaya ve bakmaya üşendiğim, çekindiğim, fazla teknik bilgi içeren konular olduğunu düşündüğüm terimler olmuştur. Bu yazıda bu konular hakkında bilgi sahibi olmayanlara basit bir şekilde anlatmaya, bilen duyan arkadaşlarında kafalarındaki soru işaretlerini gidermeye çalışacağım.

Detaylara çok ihtiyacı olmayan arkadaşlara özet geçmek gerekirse:

SPF, DKIM ve DMARC standartları E-posta güvenliği konusunda bize yardımcı olurlar.
a. SPF, e-postanın bize gerçekten kimden geldiğini (facebooktan geldiğini belirten bir e-posta gerçekten facebook üzerinden mi geldi yoksa biri bizi kandırıyor mu?) tespit etmemize olanak tanır.
b. DKIM, SPF gibi e-postanın gerçekten söylenen kişiden geldiğini test ederken aynı zamanda e-postanın bozulmadığını, orijinalliğini koruduğunu test etmemize olanak tanır.
c. DMARC ile SPF ve DKIM çıktılarına bakılarak kural oluşturulabilir. Gelen bu e-posta kabul mü edilmeli, spam mı işaretlenmeli veya direkt red mi edilmeli? Aynı zamanda bu olaylar nereye raporlanmalı? (log)

Mekanizmaların çalışma şeması

Biraz Daha Ayrıntı

SPF ( Sender Policy Framework)

Kurumumuz veya domainimiz adına SPF kaydı oluşturarak bizim domain adımızı kullanarak phising e-postaları göndermeye çalışanları engellemeye çalışabiliriz. Peki SPF kaydı nasıl eklenir?

SPF kaydı bir DNS txt kaydıdır. DNS sisteminde TXT kaydına ilgili metni yazarak SPF kaydını oluşturabiliriz. SPF kaydı örneği

v=spf1 ip4:61.1.1.1 include:ucuncuparti.com -all

SPF kaydı örneği

v=spf1 : v parametresi ile spf versiyon belirtilir. Bu kısım günümüzde genellikle statik kalır. Bu kısımda spf1 değeri kullanılabilir.

ipv4:61.1.1: ipv4 parametresi e-posta kaynak ip adresini ifade eder. Bu iplerden gelen e-postalar için koşul sağlanır.

include: include parametresi ile kabul görecek kaynak domain adresleri ifade edilir. Birden fazla domain için tek tek include parametresi eklenir. Burada include ile ifade edilen domain adresinin spf kaydına bakılır. (dns txt sorgusu yapılır) Eğer gelen e-posta, include edilen domain adresinin spf kayıtlarında var ise koşulu sağlar. Bu noktada her bir include değeri için dns sorgusu yapılacağını belirtebiliriz.

SPF kaydında ‘include’ değişkeninin çalışma mantığı

all: all parametresi gelen tüm e-postalar için bu parametreler ışığında nasıl hareket edilmesi gerektiğini söyler.

(-)all : Eğer e-posta gönderen sunucu, spf kayıtlarında yoksa bu e-postayı reddet. ( fail and discard olarak değerlendirilir )
(~)all: Eğer e-posta gönderen sunucu spf kayıtlarında yoksa, gelen e-postayı içeri al ancak spam olarak işaretle. (Not pass olarak ifade edilir. Softfail de denir. )
(+)all: E-posta hangi sunucudan gelirse gelsin spf kayıtlarına bakmadan içeri al.

Ekstra: Burada bahsedilen parametrelerin dışında dns kayıtları ile paralel parametreler olabilir. Örneğin spf kaydı içerisinde “a=ornek.com” olabilir. Bu durumda ornek.com için A kaydı bir ip adresini ifade eder. Eğer ornek.com için A kaydı (veya birden fazla A kaydı varsa kayıtlarından biri), gönderen sunucu ip adresi ile eşleşiyorsa geçerli sayılır. Bunun gibi mx, ipv6, ptr dns kayıtlarında da aynı mantık uygulanır.

DKIM (DomainKeys Identified Mail)

DKIM, e-postanın orijinalliğini ve kaynağını doğrulamak için asimetrik şifreleme yöntemlerinden faydalanır.

Asitmetrik şifreleme veriyi şifrelemek için public key ve deşifre etmek için private key kullanır. Public key ile şifrelenen veri yalnızca private key ile deşifre edilir. Private key ile imzalanan veri public key ile doğrulanabilir.

DKIM nasıl çalışır?

  1. E-posta gönderen sunucu, e-posta başlıklarını (headers) elindeki private key (yalnızca gönderen sunucuda tutulur) ile imzalar.
  2. Daha sonra e-posta içeriğini (body) private key ile imzalar.
  3. İmzalama sonucu çıkan verileri hash olarak düşünebiliriz. Bu imzaları e-posta başlıklarına ayrıca ekler.
  4. Private key ile imzalanan bu veriler public key ile doğrulanabilir. Public key ise ilgili alan adının DNS txt kaydında tutulur.
  5. DKIM kaydı olan bir domain üzerinden e-posta alan mail sunucu, gelen domaine ait DKIM kaydı var mı diye dns sorgusu yapar. Eğer DKIM kaydı var ise public key’i alarak gelen e-posta headerlarındaki ilgili imzaları doğrular.
  6. Doğrulama sonucuna göre e-postanın geçerliliği değerlendirilir.
DKIM algoritması akış diyagramı

Örnek bir DKIM Signature

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=ilgilidomain.com; s=selektor;
h=from:content-transfer-encoding:subject:message-id:date:to:mime-version;
bh=LtrWiLQ8B7I9vFIen3+/FXErUuKv33PmCuZAwpemGyp=;
b=iY53DkXsbP5bMGzOwivNE4fmF125W2/Yq0YqXD4Og1fPT6ViqB35uLxLGGhHv2lqXBWwFhODPVPauUXxRYEpMsuisdU5TgYmbwSJYYrFLFj5ZWTZ7VGgg6/nI1hoPWbzUpL1Rl

v: Versiyonu ifade eder. Burası sabit 1 olarak kullanılabilir.
c: Standartlaştırma algoritması.
d: Alan adını ifade eder.
s: Selektör. İlgili domainin dns kaydında birden fazla public key kaydı olabilir. Bu public keylerin hangisinin kullanılması gerektiği selector yardımı ile belirlenir.
h: İmzalanan / şifrelenen kısımların sıralı listesini ifade eder.
bh: E-postanın body kısmının imzalanmış halini ifade eder.
b: E-postanın header ve body dahil tüm kısmının imzalanmış halini ifade eder.

Örnek bir DKIM kaydı (DNS txt içerisinde):

myselector._domainkey.domain.com TXT "k=rsa; p=AIGf ... AQAB"

E-postada gelen selektor burada selektor_domainkey.domain şeklinde görünür. _domainkey kendiliğinden gelen bir ifadedir. Ayrıca selektör olması zorunlu değildir. Ancak birden fazla selektör ve bu selektörlere atanmış public key kullanılabilir.

k ile hangi şifreleme algoritması kullanıldığı p ile ise public key belirtilir.

DMARC (Domain-based Message Authentication, Reporting, and Conformance)

DMARC standardı, gelen e-postaların belirli parametrelerine bakarak (SPF DKIM vb) kabul edilip edilmeyeceğine veya farklı bir bayrakla işaretlenmesine karar verir. SPF ve DKIM standartlarından en az birisi doğru koşulu sağlarsa DMARC koşulu sağlanır. Her ikiside koşulu sağlamazsa DMARC koşulu sağlanmaz ve fail olarak işaretlenir. Bu durumda ne yapılacağına DMARC policy karar verir. Sonrasında bu olayı raporlar.

Örnek bir DMARC Kaydı:

_dmarc.mydomain.com. IN TXT “v=DMARC1\; p=none\; rua=mailto:dmarc-aggregate@mydomain.com\; ruf=mailto:dmarc-afrf@mydomain.com\; pct=100”

v:Kullanılan versiyonu tanımlar. DMARC1 sabit olarak kullanabiliriz.

p:belirlenecek policy yani kuralı tanımlar.
1. none: herhangi bir policy belirlenmedi. DMARC olmadığında nasıl aksiyon alınırsa aynı şekilde devam eder.
2.Quarantine:e-postaya izin ver ama gelen kutusuna taşıma. Genelde bunlar spam klasörüne düşer.
3. Reject: E-postayı redder.
rua:günlük olarak gelen e-posta raporlarının gönderileceği e-posta adresi.
ruf: anlık olarak her fail olduğunda incelenmek üzere raporun gönderileceği mail adresi.
pct: Gelen e-postaların yüzde kaçına bu kuralların uygulanması istendiği ifade edilir. Örneğin pct=10 olarak belirtilseydi bu durumda gelen e-postaların %10 kadarına belirlenen DMARC kuralları uygulanır, geri kalan %90 kısmına policy olarak none uygulanır.

Referanslar

--

--