Förhindra spoofing med DMARC

Marcus Olsson,

DMARC är ett kraftfullt protokoll för att förhindra externa aktörer från att spoofa/imitera ens domän för att skicka e-post. Någonting jag fick lära mig nyligen efter att någon eller några använde min domän för att skicka ut stora mängder spam och skräppost.

På egen hand gör DMARC inte så mycket, utan det är en förlängning av SPF och DKIM-protokollen – så innan man börjar kika på att säkra upp med DKIM måste man säkerställa att alla ens andra inställningar och konfiguration är korrekta.

DMARC vs. SPF och DKIM

SPF (Sender Policy Framework) och DKIM (DomainKeys Identified Mail) är två inställningar man konfigurerar i DNS:en som möjliggör mottagande e-postserver att verifiera att det inkommande meddelandet faktiskt är skickat från den avsändaren som anges. DMARC (Domain-based Message Authentication, Reporting and Conformance) å andra sidan är regler för vad som ska hända med det meddelandet om det inte klarar av verifikationen.

Oftast om man t.ex. använder Gmail/Google Apps/Google Workspace eller liknande tjänst så får man SPF- och DKIM-inställningar från dem, de kan se ut enligt följande:

SPF

1v=spf1 include:_spf.google.com ~all
1v=spf1 include:_spf.google.com ~all

DKIM

1"k=rsa; t=s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDmzRmJRQxLEuyYiyMg4suA2Sy
2MwR5MGHpP9diNT1hRiwUd/mZp1ro7kIDTKS8ttkI6z6eTRW9e9dDOxzSxNuXmume60Cjbu08gOyhPG3
3GfWdg7QkdN6kR4V75MFlw624VY35DaXBvnlTJTgRg/EW72O1DiYVThkyCgpSYS8nmEQIDAQAB"
1"k=rsa; t=s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDmzRmJRQxLEuyYiyMg4suA2Sy
2MwR5MGHpP9diNT1hRiwUd/mZp1ro7kIDTKS8ttkI6z6eTRW9e9dDOxzSxNuXmume60Cjbu08gOyhPG3
3GfWdg7QkdN6kR4V75MFlw624VY35DaXBvnlTJTgRg/EW72O1DiYVThkyCgpSYS8nmEQIDAQAB"

I ovanstående så definieras _spf.google.com som en tillåten domän att skicka e-post ifrån. Samtidigt som domänen signeras med en RSA-nyckel för att verifiera äktheten.

Uppsättning av DMARC

Men ovanstående inställningar så kan mottagande server snabbt och enkelt verifiera att inkommande epost från ens domän är äkta. I de allra flesta fallen så kommer e-post från en otillåten avsändare att hamna i ens spam-mapp. Men vad händer om man kanske har ett dåligt spam-filter, ens e-postserver är dåligt konfigurerad eller liknande? Då finns det faktiskt en liten chans att det hamnar i ens inkorg – då med en falsk avsändare.

Det är här DMARC kommer in i bilden. Med DMARC kan man med flera parametrar styra vad som ska ske med e-post som inte klarar "äkthetsintygen".

1"v=DMARC1;p=quarantine;pct=50;rua=mailto:dmarcreports@example.com;"
1"v=DMARC1;p=quarantine;pct=50;rua=mailto:dmarcreports@example.com;"

I ovanstående exempel så används p för att tala om att e-post som inte verifierar ska sättas i "quarantine" (i.e. flaggas som spam), 50% (pct) av all inkommande mail ska passera filtret. Dessutom så ska periodiska felrapporter skickas till dmarcreports@example.com (rua).

En till flagga som är värd att känna till är ruf. Med denna kan man ange en mottagande adress för detaljerade rapporter för nekade utskick med headers etc. – vad dock försiktig här då om din domän används i ett botnätverk som skickar stora mängder mail så kan man snabbt bli överröst av rapporter.

När min domän blev spoofad

I 1-2 år så har jag använt Postmarks mycket smidiga DMARC-tjänst för att få veckorapporter på hur många mail som verifieras för min domän, ger en snabb och enkel "snapshot" på ens mail veckovis.

Dock härom veckan så såg det lite dystert ut.

DMARC status report

Över en halv miljon mail hade skickats ut från min domän under en vecka. Lyckligtvis har jag bra SPF och DKIM-skydd så med största sannolikhet så skickas mailen till spam-mappen hos mottagarna. Men det är fortfarande trist när någon använder ens domän och det finns alltid risken att något mail slinker förbi.

För att reda bot på det hela började jag med att skaffa ett konto hos dmarcdigest.com (också från Postmark – men ger mycket mer data och statistik än deras gratistjänst) och började logga fel där. Efter ett par dagar hade jag någonting att gå på, t.ex. en komplett lista vilka IP-adresser och domäner som skickade i mitt namn/med min domän.

DMARC rejected report

Flera av IP-adresserna spårade jag till Digital Ocean så jag kontaktade deras "abuse"-avdelning med en lista på 20-30 adresser för att undersöka. Många av dessa och andra adresser var till riktiga företag och tjänster, så förmodligen är det hackade servrar som är kopplade till bot-nätverk som låg bakom utskicken.

Nästa steg blev till konfigurera DMARC.

1v=DMARC1; p=reject; pct=90; rua=mailto:mail@example.com; ruf=mailto:forensic@example.com;
1v=DMARC1; p=reject; pct=90; rua=mailto:mail@example.com; ruf=mailto:forensic@example.com;

Här talar jag om att 90% av alla inkommande mail som inte klarar SPF- eller DMARC-verifiering ska avvisas omgående (reject), övriga 10% hanteras då automatiskt som quarantine. Vidare valde jag att ta emot forensics till en nyuppsatt adress för att se vad som faktiskt skickades.

Exempel på ett sådant mail för den intresserade:

1Authentication-Results: CNWEUMTA03.scanscope.net; spf=softfail
2 smtp.mailfrom=aposporogony@marcusolsson.me; dkim=none header.i=@; dmarc=fail
3 action=none header.from=marcusolsson.me;
4Received: from localhost ([159.203.165.238]) by mail3.scanscope.net
5 with Microsoft SMTPSVC(8.5.9600.16384); Sat, 19 Feb 2022 14:00:52 +0000
6Zidvbm-Vz-Wxq: 9767
7MIME-Version: 1.0
8Odhrfnij-Z-Jynpjtpa: 1
9H-Zqqvd-Fvlib: C7142F99
10Date: Sat, 19 Feb 2022 09:00:53 +0000
11To: josef@redacted.com
12Rsq-Qxd-Wygpk: vflhub
13Subject: Express Courier Ticket No.25316
14From: Express Courier <aposporogony@marcusolsson.me>
15Message-ID: <c82b_44752_bb1459276@localhost>
16Lu-W-Ereniwl: 427b4283392866
17Return-Path: aposporogony@marcusolsson.me
18X-CoreService2-Score: 99
19X-OriginalArrivalTime: 19 Feb 2022 14:00:52.0107 (UTC)
20 FILETIME=[1B0695B0:01D82599]
1Authentication-Results: CNWEUMTA03.scanscope.net; spf=softfail
2 smtp.mailfrom=aposporogony@marcusolsson.me; dkim=none header.i=@; dmarc=fail
3 action=none header.from=marcusolsson.me;
4Received: from localhost ([159.203.165.238]) by mail3.scanscope.net
5 with Microsoft SMTPSVC(8.5.9600.16384); Sat, 19 Feb 2022 14:00:52 +0000
6Zidvbm-Vz-Wxq: 9767
7MIME-Version: 1.0
8Odhrfnij-Z-Jynpjtpa: 1
9H-Zqqvd-Fvlib: C7142F99
10Date: Sat, 19 Feb 2022 09:00:53 +0000
11To: josef@redacted.com
12Rsq-Qxd-Wygpk: vflhub
13Subject: Express Courier Ticket No.25316
14From: Express Courier <aposporogony@marcusolsson.me>
15Message-ID: <c82b_44752_bb1459276@localhost>
16Lu-W-Ereniwl: 427b4283392866
17Return-Path: aposporogony@marcusolsson.me
18X-CoreService2-Score: 99
19X-OriginalArrivalTime: 19 Feb 2022 14:00:52.0107 (UTC)
20 FILETIME=[1B0695B0:01D82599]

Efter att ha testkört ett par dagar för att säkerställa att alla mina egna mail gick ut och verifierade som de skulle så höjde jag pct till 100 för att filtrera samtliga mail.

Digital Ocean verkar ha rättat till servrarna som låg hos sig (inväntar dock fortfarande bekräftelse på detta) – och detta tillsammans med att antingen om botnätverket har snappat upp mina ändringar (varför betala för epostutskick om ens spam med 100% avvisas?) alternativt att de helt enkelt roterar sina adresser så gick volymerna snabbt neråt. Från ~60-80 000 mail om dagen till sedan ~5000 för att nu vara nere på i princip 0 efter en vecka.

Annat värt att tänka på

Om man har större och mer avancerad infrastruktur för e-post, där man gör utskick via flera externa tjänster (tänk t.ex. Mailchimp, Mandrill, Sparkpost o.s.v.) så måste man först verkligen säkerställa att alla ens SPF och DKIM-records är helt korrekt konfigurerade. Använd tjänster liknande de som jag listat här ovanför för att se så att alla "äkta" mail verifieras om de ska. I annat fall blir det lätt hänt att ens utskick inte når fram.

Likaså kan DKIM ställa till det vid vidarebefordring av e-post; de flesta tjänsterna hanterar detta per automatik – men då vissa tjänster skickar vidare mailet med intakta headers så kan alltså mailet i somliga fall inte nå mottagaren (tänk t.ex. att ett mail vidarebefordras ifrån example.com till test.com) – värt att ha i åtanke.


Vidare läsning: