Autore: Andrea Gallazzi
Lo standard DKIM (DomainKeys Identified Mail) è una metodologia di crittografia basata su chiave pubblica che funziona in congiunzione con Sender Policy Framework (SPF), prevenendo lo spoofing tramite l’aggiunta di una firma digitale alle intestazioni dei messaggi.
In informatica, per “spoofing” si intende la manipolazione dei dati trasmessi in una rete, consiste nella falsificazione del proprio indirizzo IP, oppure nell’utilizzo abusivo di username e password di altri utenti, o anche nel camuffamento di file nocivi al fine di renderli irriconoscibili.
SPF e DKIM permettono ai mail server di verificare l’autenticità del mittente e validare la posta elettronica in ingresso, valutando correttamente quale identificare come spam e quale invece considerare come legittima. Al fine di evitare che le proprie email vengano erroneamente classificate come spam è fondamentale configurare il proprio dominio implementando alcuni record denominati SPF (Sender Policy Framework) e DKIM (DomainKeys Identified Mail).
Figura 1 – Funzionamento Validazione Mail Server
Entrambi questi record, se configurati correttamente, consentono di implementare una tecnologia di autenticazione che verrà utilizzata dai filtri anti-spam per certificare l’identità del mittente. Il mail server ricevente verificherà il dominio del mittente che risulta nel campo FROM e verificherà quale sia il dominio del mittente nell’header RETURN PATH. Per entrambi, il server interrogherà i rispettivi DNS al fine di verificare che l’IP da cui l’email proviene sia in realtà tra quelli autorizzati. Se questa corrispondenza non viene rispettata, il messaggio verrà rifiutato oppure segnalato come potenziale spam assegnando un punteggio SCL (Spam Confidence Level) più alto. Quando un messaggio di posta elettronica passa attraverso il filtro di posta indesiderata viene assegnato un determinato punteggio. Tale punteggio viene mappato con una classificazione di probabilità di spam (Spam Confidence Level “SCL”) e contrassegnato nell’header con “X-Forefront-Antispam-Report”. Nella tabella seguente viene illustrata la modalità di interpretazione del filtro EOP (Exchange Online Protection) indicando la “Default Action” in base al valore del parametro SCL.
SCL Rating | Spam Confidence Interpretation | Default Action |
-1 | Non-spam coming from a safe sender, safe recipient, or safe listed IP address (trusted partner) | Deliver the message to the recipients’ inbox. |
0, 1 | Non-spam because the message was scanned and determined to be clean | Deliver the message to the recipients’ inbox. |
5, 6 | Spam | Deliver the message to the recipients’ Junk Email folder. |
7, 8, 9 | High confidence spam | Deliver the message to the recipients’ Junk Email folder. |
Tabella 1 – Gestione EOP
Il record SPF associato ad un nome di dominio è un parametro molto importante nella configurazione di un server DNS dato che consente di identificare i mail server che sono autorizzati ad inviare per conto del proprio dominio. In assenza dell’applicazione di queste tecniche risulta piuttosto semplice inviare messaggi da indirizzi email falsi, che spesso riportano estensioni uguali a nomi a dominio molto noti o addirittura realmente esistenti.
Per configurare un record SPF è necessario creare un record TXT nel DNS che contenga la sintassi seguente:
v=spf1 ip4:IP include:example.com –all
dove con il comando “ip4” si specificano gli indirizzi IPv4 degli host autorizzati ad inviare email in uscita per un determinato dominio e con il comando “include” si indicano invece eventuali nomi di dominio per cui valgono le medesime regole per il nome di dominio che si sta configurando. Il comando “-all” indica che tutti gli altri server mail, eccetto quelli indicati, non sono autorizzati all’invio. Prendiamo in esempio un’altra tipologia di record SPF:
v=spf1 mx a:mail.example.it include:example.com –all
dove con il comando “mx” si indicano i server riceventi (MX) del dominio che sono autorizzati anche a spedire i messaggi, “a:mail.example.it” indica che la macchina attestata su mail.example.it è autorizzata all’invio, mentre il comando “-all” continua ad indicare che tutti gli altri server mail, eccetto quelli indicati, non sono autorizzati all’invio. Al posto del qualificatore “-“ è possibile utilizzare il qualificatore “~”, che sta ad indicare che sono esclusi dall’autorizzazione tutti gli indirizzi IP non specificati, ma che il messaggio può essere accettato purché venga contrassegnato e il filtro antispam effettui ulteriori controlli sull’IP di provenienza (Soft Fail).
Una configurazione errata del record SPF può portare al rifiuto della gran parte delle email considerate “legittime”. Per verificare che la configurazione del DNS sia corretta è possibile ricorrere all’utilizzo di strumenti online come ad esempio MXToolBox.
I record DKIM, rappresentano una specie di firma digitale del proprio dominio che viene aggiunta all’intestazione del messaggio. I destinatari delle mail possono verificare che la firma coincida con il nome a dominio dei mittenti “conosciuti” e che non sia stata modificata da eventuali spammer.
Una mail “solo” firmata non è comunque sinonimo di posta elettronica legittima. Configurare SPF e DKIM non sono quindi due tecniche antispam alternative ma piuttosto devono essere implementate contemporaneamente.
DKIM in Office 365
Lo spoofing è una sfida comune che le imprese odierne devono affrontare, che può portare ad un aumento considerevole dello spam e addirittura potrebbe contribuire all’intensificazione del phishing. Al fine di contrastare queste pratiche e fornire un’esperienza utente più sicura, Office 365 supporta la validazione sia in entrata e in uscita di DomainKeys Identified Mail (DKIM) su IPv4/IPv6 e Domain-based Message Authentication, Reporting & Conformance (DMARC).
Per la convalida in entrata, non abbiamo bisogno di fare nulla, dato che Exchange Online Protection (EOP) convalida automaticamente DKIM attraverso l’intestazione DKIM-Signature, come è possibile osservare nell’header di un messaggio inviato verso Office 365 – tabella 2.
# | Header | Value |
1 | Authentication-Results | spf=pass (sender IP is 209.85.161.179) smtp.mailfrom=gmail.com; Example.it; dkim=pass (signature was verified) header.d=gmail.com;Example.it; dmarc=pass action=none header.from=gmail.com; |
2 | Received-SPF | Pass (protection.outlook.com: domain of gmail.com designates 209.85.161.179 as permitted sender) receiver=protection.outlook.com; client-ip=209.85.161.179; helo=mail-yw0-f179.google.com; |
3 | DKIM-Signature | v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to; bh=a4utkRm/rD7Dt9LUhW0L6LetuQsURHXhWQsK2gunM9c=; b=MG4VVjWem7BCpcxRG1gly75rNg5+fTkB9UCbrZS/HURdzj1XY6J06AR3Xr53r6UG3l d//agWa1G1fSe7V+53mi40ssxNBv0x+dGL0b8BbioqqlzVK8GNpou3WlCp/ta+daV9zk AalgCFb6iR5XNs+odv0pFsHYzri8GQwnlW7GYKhYAndXROH3+TXgfIxJkZdf/kRmPCNT VUSmd8/Tofird0SqvYgSvyc6PD8fAXN53ToLLpwJrrgePl2u9eUkaHbUtmfPgd5gcgCs 6Hwfj0QEBU/f5PSqCe9EOvNjlgPscrC/d3c5Y08KHLu7Poj97JA8hx61nnbnFIvXB1Uw rVuA== |
18 | X-MS-Exchange-Organization-MessageDirectionality | Incoming |
21 | X-DkimResult-Test | Passed |
Tabella 2 – Esempio Mail in Entrata
Dove “a” corrisponde all’algoritmo di firma, “d” al dominio corrispondente alla firma, “h” alla lista degli header inclusi nella firma mentre “b” alla firma stessa. Se un messaggio fallisce la verifica DKIM, l’intestazione restituirà DKIM = Fail in aggiunta alla ragione del fallimento tra parentesi, tra i motivi: invalid body hash, key query timeout, no key for signature.
Possiamo notare che in “Authentication-Results” si legge anche il valore dkim=pass (signature was verified). Questo perché Microsoft sta aggiungendo ai tenant la firma DKIM alle email in ingresso. Nella tabella 3, prestiamo attenzione alla firma apposta in una email che questa volta è stata inviata da O365 verso Gmail.
# | Header | Value |
6 | DKIM-Signature | v=1; a=rsa-sha256; c=relaxed/relaxed; d=tenatdomain.onmicrosoft.com; s=selector1-example-it; h=From:To:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=rSdjLA+A51w17hTn1TOK90R/YA76RCXuIslU8Hxy9gw=; b=EDGcI3hX8CkhgxZpSwO1+Eu0Qsqx4akmun1lHUNTP1tKn8MqoZesLMzWk6rMdExEt1hYOrz2 xjtAPrGF92JPwKjeGb8iBLSJVi UKZg954fdCM1PjxG5Sf0k6JVscXLCgeEVI8eMvDGqLwSCxKI6sCjJc5cuIUeB3yfzNdlnUtTg= |
Tabella 3 – Mail verso Gmail
Notare che la firma riguarda solamente il nome del tenant in quanto non risulta ancora implementata una firma per il dominio vero e proprio dato che, naturalmente, Microsoft non ha accesso al dominio example.it per poter implementare i record DNS necessari.
Abilitare la Firma DKIM per un Dominio Ospitato su Office 365
Con i servizi di posta elettronica di “terze parti”, abbiamo l’onere di pubblicare la chiave pubblica nel DNS e configurare i server per firmare i messaggi con la propria chiave privata. Una differenza importante nel modo in cui Office 365 implementa DKIM è che i clienti devono solo pubblicare due record CNAME delegando il namespace ad Office 365.
Dunque al fine di consentire la firma dei messaggi in uscita abbiamo bisogno di pubblicare i record CNAME di cui sopra ed illustrati nella tabella 4.
Hostname | Puntamento | TTL |
selector1._domainkey | selector1-<domain_O365_MX>._domainkey.<original_signup_Domain> | 3600 |
selector2._domainkey | selector2-<domain_O365_MX>._domainkey.<original_signup_Domain> | 3600 |
Tabella 4 – Configurazione DNS
Dove <domain_O365_MX> sta ad indicare la prima parte dell’MX attribuito al vostro tenant in Office 365, in questo caso “example-it.mail.protection.outlook.com”, quindi “example-it”. Potete facilmente reperire il nome del vostro MX utilizzando ad esempio mxtoolbox.com (figura 2) e <original_signup_Domain> sta per il dominio assegnato in fase di sottoscrizione del tenant.
Figura 2 – mxtoolbox.com
In figura 3 possiamo osservare i record CNAME configurati dal pannello di gestione del DNS presso l’hoster in cui è ospitato il dominio (selector1-example-it._domainkey.tenatdomain.onmicrosoft.com.).
Figura 3 – Impostazione CNAME Pubblici
I due selettori verranno utilizzati alternativamente per firmare i messaggi in uscita delegando ad EOP la rotazione. Importante ricordare che in un’implementazione DKIM standard, il selettore corrisponde ad un record TXT contenente la chiave pubblica con cui i destinatari valideranno la firma. Essendo Office 365 un ambiente “Hosted”, si rende necessario pubblicare i relativi record CNAME che di fatto reindirizzano le query DNS al “selettore” del dominio <tenant_orginal>.onmicrosoft.com che a sua volta contiene la chiave pubblica. (Figura 8).
Figura 4 – Chiave Pubblica
Come è facile immaginare ogni dominio possiede le proprie e univoche chiavi DKIM che non sono condivise tra i tenant o altri domini all’interno dello stesso tenant. Non resta che connettersi al proprio tenant e abilitare DKIM per il dominio interessato, come mostra la figura 5.
Figura 5 – Attivazione DKIM in Office 365
Nel caso in cui non abbiate configurato a dovere entrambi i record CNAME, riceverete un errore simile a questo: “CNAME record does not exist for this config. Please publish a CNAME record first”. Non rimane che inviare una email verso un altro dominio e verificare che la configurazione implementata sia effettivamente attiva e funzionante. Analizzando l’header di una email inviata ad un determinato destinatario, tabella 5, si evince che “d” corrisponde al dominio “ufficiale” e che in questo passaggio viene effettivamente usata la chiave corrispondente al dominio “d” example.it.
# | Header | Value |
3 | DKIM-Signature | v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.it; s=selector1; h=From:To: Date:Subject:Message-ID:Content-Type:MIME-Version; bh=Q3DM1LGbJuLEGlodjHEWSBs0tK90m95Fw9Or7A3NVeY=; b=IfX6uZHzUhSQRCBoHvSHKkm 8dtIJxdH2GaF7w6zYghs5yITWtz5xKGxkJFUk+AOjBELE3cOSItmxg2S wW0T7V3slKIEcEoBsg887ADhUkSSto4Vg7o/DwxQ4DBtiT8SqG3K3PhnjYsoC1JCw+ t0ujWBcREq53UD8f9EJwrDIuoU= |
Tabella 5 – Analisi Header
Continuando ad analizzare l’header, tabella 6, in “Authentication-Results” troviamo la verifica che ci aspettavamo nonché “dkim=pass (signature was verified)”.
# | Header | Value |
1 | Authentication-Results | spf=pass (sender IP is 104.47.1.49) smtp.mailfrom=example.it; examplerecipentdomain.eu; dkim=pass (signature was verified) header.d=example.it;examplerecipentdomain.eu; dmarc=bestguesspass action=none header.from=example.it; |
Tabella 6 – Analisi Header
Conclusioni
Avere Office 365 non ci rende immuni da rischi di mancato recapito di mail né ci mette al sicuro da falsi positivi, generati da server obsoleti o non in linea con i nuovi standard, ecco perché queste piccole operazioni possono metterci al sicuro nello scambio di mail business.