Zwakke DKIM-sleutel
CWE-326CWE-290OWASP A02:2021Bijgewerkt 4 september 20264 min leestijd
DKIM ondertekent uw uitgaande e-mail zodat ontvangers kunnen verifiëren dat een bericht van u komt. Is de sleutel 1024 bits of korter, dan is die handtekening met voldoende rekenkracht na te maken en verliest de controle haar waarde. Gebruik 2048 bits en roteer de sleutel periodiek.
DKIM is de schakel die een ontvanger laat vaststellen dat een bericht werkelijk van uw domein komt en onderweg niet is gewijzigd. Die zekerheid rust volledig op de sleutel waarmee wordt ondertekend. Is die sleutel te kort, dan bestaat de controle nog wel, maar wordt de uitkomst ervan onbetrouwbaar. Dit artikel legt uit waarom, en hoe u het opruimt.
Wat is DKIM en waar zit de sleutel?
DomainKeys Identified Mail (DKIM) voegt aan elk uitgaand bericht een digitale handtekening toe over de inhoud en een aantal headers. De bijbehorende publieke sleutel publiceert u in het DNS van uw domein, onder een zelfgekozen naam die de selector heet. De ontvangende server haalt die sleutel op en controleert daarmee de handtekening.
Van een zwakke DKIM-sleutel spreken we wanneer de gebruikte sleutel te kort is om die controle betekenisvol te maken. In de praktijk gaat het vrijwel altijd om een RSA-sleutel van 1024 bits, soms nog korter. De standaard schrijft minimaal 1024 bits voor en beveelt 2048 aan; de gangbare norm is inmiddels 2048.
De vergelijking met een zegel op een brief gaat hier goed op. Het zegel is er, de ontvanger controleert het, en het proces werkt zoals bedoeld. Alleen is het zegel eenvoudig genoeg van vorm dat iemand met de juiste apparatuur een kopie kan maken. Vanaf dat moment bewijst het zegel niets meer, terwijl iedereen er nog steeds op vertrouwt.
Hoe controleert u de lengte van uw DKIM-sleutel?
Kwetsbaar:
sel1._domainkey.uwbedrijf.nl. TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEB..."
De lengte van de sleutel is af te lezen uit de gepubliceerde waarde. Een sleutel die begint met MIGfMA0GCSqGSIb3DQEB en die in zijn geheel rond de 216 tekens telt, is een RSA-sleutel van 1024 bits. Een 2048-bits sleutel begint met MIIBIjANBgkqhkiG9w0B en is ongeveer twee keer zo lang.
Wordt zo’n sleutel gebroken, dan kan een aanvaller berichten ondertekenen die uw DKIM-controle doorstaan. Dat is ernstiger dan het ontbreken van DKIM, omdat het bericht dan niet alleen aankomt maar ook actief wordt bevestigd als authentiek, en daarmee ook uw DMARC-beleid passeert. Een ontvanger die alles correct controleert, krijgt te horen dat het bericht klopt.
Veilig:
# Nieuwe sleutel van 2048 bits, met een nieuwe selector
openssl genrsa -out dkim-2026a.private 2048
openssl rsa -in dkim-2026a.private -pubout -outform PEM \
| grep -v '^-----' | tr -d '\n'
; Het record wordt opgesplitst omdat één tekstblok maximaal 255 tekens telt
dkim2026a._domainkey.uwbedrijf.nl. TXT ( "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA"
"7Xk2pQvR8xM1nZ0Yf1yqk8dK1vI0IuqC3dLm9Rt4Wp7Nx2Vb6Hs..." )
De nieuwe sleutel krijgt bewust een eigen selector. Het overstappen verloopt daardoor naadloos: u publiceert de nieuwe sleutel, schakelt uw mailserver om naar het ondertekenen met die selector, en verwijdert de oude pas nadat de laatste berichten die daarmee zijn ondertekend zijn afgeleverd. Er is geen moment waarop de controle faalt.
Neem het roteren daarna op in uw reguliere onderhoud. Een selector die de datum in de naam draagt, maakt in één blik zichtbaar hoe oud de sleutel is.
none staat. Beoordeel de drie in samenhang.Wat is de impact van een zwakke DKIM-sleutel?
De ernst is laag tot middelzwaar. Anders dan bij een volledig ontbrekende e-mailconfiguratie is er hier geen aanval die zonder meer uitvoerbaar is: het breken van de sleutel vraagt aanzienlijke rekencapaciteit en dus een aanvaller met middelen en een reden.
Waar de bevinding wel gewicht krijgt, is bij organisaties die een aantrekkelijk doelwit vormen voor gerichte fraude, financiële dienstverleners, notariskantoren, organisaties die grote betalingen verwerken. Daar is de investering die een aanvaller moet doen in verhouding tot wat een geloofwaardige, correct ondertekende e-mail kan opleveren.
Bijzonder is de omkering die hier optreedt. Zonder DKIM is een vervalst bericht in het gunstigste geval te herkennen. Met een gebroken DKIM-sleutel wordt een vervalst bericht actief bevestigd als authentiek: het doorstaat de handtekeningcontrole, het doorstaat daarmee uw DMARC-beleid, en het komt in het postvak van de ontvanger als geverifieerde post van uw domein. De maatregel werkt dan tegen u.
Hoe spoor je een zwakke DKIM-sleutel op?
De controle bestaat uit het opvragen van het DKIM-record voor de gebruikte selector en het bepalen van de sleutellengte. De selector is af te lezen uit de DKIM-Signature-header van een e-mail die de organisatie heeft verstuurd; die vermeldt hem in het s=-veld.
Daarna wordt gekeken of er meerdere selectors in gebruik zijn en of daar oude, korte sleutels tussen zitten die nooit zijn opgeruimd. Ook wordt gecontroleerd of er nog records staan voor diensten die de organisatie niet meer gebruikt, want een achtergelaten sleutel bij een voormalige leverancier is een risico op zichzelf. Verder wordt beoordeeld welke headers worden ondertekend: een handtekening die het From-veld niet dekt, biedt aanzienlijk minder dan het lijkt. AssistSec beoordeelt dit als onderdeel van uw e-mailconfiguratie als geheel, omdat de sterkte van de sleutel pas betekenis krijgt in combinatie met een SPF-record dat afdwingt en een DMARC-beleid dat op weigeren staat.
Hoe voorkom je een zwakke DKIM-sleutel?
- Gebruik een RSA-sleutel van ten minste 2048 bits voor het ondertekenen van uitgaande e-mail.
- Splits het DNS-record in meerdere tekstblokken wanneer de sleutel niet in één blok past.
- Voer een sleutelwissel uit met een nieuwe selector, zodat er geen moment is waarop de controle faalt.
- Roteer de sleutel periodiek, bijvoorbeeld eens per zes tot twaalf maanden.
- Verwijder DKIM-records van selectors en leveranciers die u niet meer gebruikt.
- Zorg dat de handtekening in elk geval het
From-veld en de belangrijkste headers dekt. - Bewaar de private sleutel met dezelfde zorg als andere geheimen, in een sleutelkluis.
- Beoordeel DKIM samen met uw SPF- en DMARC-configuratie; de drie werken alleen als geheel.
Bronnen
Veelgestelde vragen
Waarom is 1024 bits niet meer genoeg?
Omdat het breken van een RSA-sleutel van die lengte binnen het bereik van serieuze rekencapaciteit ligt. Voor een handtekening die maandenlang geldig blijft, is dat een reëel risico. De standaard voor DKIM schrijft daarom minimaal 1024 bits voor en beveelt 2048 bits aan; 2048 is de praktische norm.
Waarom kiezen partijen dan toch 1024?
Meestal om een praktische reden: een DNS-record met een 2048-bits sleutel past niet in één tekstblok van 255 tekens en moet worden opgesplitst. Sommige beheerinterfaces maakten dat lastig, waardoor de kortere sleutel de weg van de minste weerstand was. Vrijwel elke DNS-aanbieder ondersteunt het splitsen nu.
Hoe vaak moet ik de sleutel roteren?
Eens per zes tot twaalf maanden is gangbaar. Werk daarvoor met meerdere selectors: publiceer de nieuwe sleutel, schakel het ondertekenen om, en verwijder de oude pas nadat de laatste berichten met die handtekening zijn afgeleverd.
Wat gebeurt er als de sleutel is gebroken?
Dan kan iemand berichten ondertekenen die de DKIM-controle doorstaan, en daarmee ook uw DMARC-beleid. De e-mail lijkt dan volledig legitiem, ook voor een ontvanger die alles correct controleert. Dat is precies wat de handtekening had moeten voorkomen.
Verwante artikelen
- KwetsbaarhedenCWE-327A02:2021Cryptographic failuresCryptographic failures uitgelegd: MD5 voor wachtwoorden, ECB-modus, vaste IV's en eigen crypto, en waarom Argon2id en AES-GCM het wel goed doen.
- KwetsbaarhedenCWE-290A05:2021E-mail versturen namens uw domeinZonder correcte SPF-, DKIM- en DMARC-records kan iedereen e-mail versturen namens uw domein. Lees hoe u dat sluit zonder post kwijt te raken.
- KwetsbaarhedenCWE-319A02:2021Onveilig transport en zwakke TLSOnveilig transport uitgelegd: plain HTTP, ontbrekende HSTS, verouderde TLS-versies en cookies zonder Secure, en hoe u HTTPS overal afdwingt.
- KwetsbaarhedenCWE-16A05:2021Security misconfigurationSecurity misconfiguration uitgelegd: hoe standaardwachtwoorden, debug-modi en open cloud-buckets aanvallers binnenlaten, en hoe u dit voorkomt.