Förhindra spoofing med DMARC
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=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDmzRmJRQxLEuyYiyMg4suA2Sy2MwR5MGHpP9diNT1hRiwUd/mZp1ro7kIDTKS8ttkI6z6eTRW9e9dDOxzSxNuXmume60Cjbu08gOyhPG33GfWdg7QkdN6kR4V75MFlw624VY35DaXBvnlTJTgRg/EW72O1DiYVThkyCgpSYS8nmEQIDAQAB"
1"k=rsa; t=s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDmzRmJRQxLEuyYiyMg4suA2Sy2MwR5MGHpP9diNT1hRiwUd/mZp1ro7kIDTKS8ttkI6z6eTRW9e9dDOxzSxNuXmume60Cjbu08gOyhPG33GfWdg7QkdN6kR4V75MFlw624VY35DaXBvnlTJTgRg/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.
Ö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.
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=softfail2 smtp.mailfrom=aposporogony@marcusolsson.me; dkim=none header.i=@; dmarc=fail3 action=none header.from=marcusolsson.me;4Received: from localhost ([159.203.165.238]) by mail3.scanscope.net5 with Microsoft SMTPSVC(8.5.9600.16384); Sat, 19 Feb 2022 14:00:52 +00006Zidvbm-Vz-Wxq: 97677MIME-Version: 1.08Odhrfnij-Z-Jynpjtpa: 19H-Zqqvd-Fvlib: C7142F9910Date: Sat, 19 Feb 2022 09:00:53 +000011To: josef@redacted.com12Rsq-Qxd-Wygpk: vflhub13Subject: Express Courier Ticket No.2531614From: Express Courier <aposporogony@marcusolsson.me>15Message-ID: <c82b_44752_bb1459276@localhost>16Lu-W-Ereniwl: 427b428339286617Return-Path: aposporogony@marcusolsson.me18X-CoreService2-Score: 9919X-OriginalArrivalTime: 19 Feb 2022 14:00:52.0107 (UTC)20 FILETIME=[1B0695B0:01D82599]
1Authentication-Results: CNWEUMTA03.scanscope.net; spf=softfail2 smtp.mailfrom=aposporogony@marcusolsson.me; dkim=none header.i=@; dmarc=fail3 action=none header.from=marcusolsson.me;4Received: from localhost ([159.203.165.238]) by mail3.scanscope.net5 with Microsoft SMTPSVC(8.5.9600.16384); Sat, 19 Feb 2022 14:00:52 +00006Zidvbm-Vz-Wxq: 97677MIME-Version: 1.08Odhrfnij-Z-Jynpjtpa: 19H-Zqqvd-Fvlib: C7142F9910Date: Sat, 19 Feb 2022 09:00:53 +000011To: josef@redacted.com12Rsq-Qxd-Wygpk: vflhub13Subject: Express Courier Ticket No.2531614From: Express Courier <aposporogony@marcusolsson.me>15Message-ID: <c82b_44752_bb1459276@localhost>16Lu-W-Ereniwl: 427b428339286617Return-Path: aposporogony@marcusolsson.me18X-CoreService2-Score: 9919X-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:
- dmarc.postmarkapp.com – Gratis DMARC-övervakning ifrån Postmark
- dmarc.org – Overview – Översikt och tillgängliga parametrar
- Google – Tutorial: Recommended DMARC rollout