E-Mail-Header-Analyse / Fake Header erkennen

Die Analyse eines E-Mail-Headers ist, sobald Du sie verstanden hast, relativ einfach. Das Problem ist, dass Du mit viel Code konfrontiert wirst. Ich habe dazu auch ein paar Videos gemacht. Vielleicht ist es auch per Video leichter nachzuvollziehen als in meinem Blogbeitrag. Es sind die Videos 16 – 18 aus der Serie „OSINT für Einsteiger“. Du kannst auch gerne beides nutzen, da mein Blog-Eintrag etwas aktueller ist und sich an ein paar Stellen zum Video unterscheidet. Ich habe viel von dem was ich über den Header nun weiß in dem Artikel von Thomas Hochstein gelernt. Ich gehe nur auf die aus meiner Sicht wesentlichen Inhalte für die Analyse ein.

Jede E-Mail wird mit einem digitalen Briefkopf versendet. Neben Grunddaten wie Absender, Empfänger, Betreff, Datum etc enthält er auch das komplette Versandprotokoll. Jeder Server macht einen Eintrag von wem er die Mail erhalten hat und wer er ist. In folgendem Bild zeige ich beispielhaft was der Sender und jeder Mailserver eintragen bis der Empfänger den kompletten Header erhält.

Ich habe mal für folgendes Beispiel den Header etwas eingekürzt, damit Du die wesentlichen Informationen leichter erkennen kannst. Außerdem habe ich die relevanten Einträge fett markiert. Die E-Mail habe ich von gmail zu protonmail gesendet. Die für eine Header-Analyse interessanten Zeilen beginnen mit dem Schlüsselwort Received. Das sind die Einträge aus dem Versandprotokoll. Der erste Eintrag ist unten. Jeder beteiligte Mailserver schreibt seinen Eintrag oben drüber.

Received: from mail-oo1-f51.google.com (mail-oo1-f51.google.com [209.85.161.51]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mailin038.protonmail.ch (Postfix) with ESMTPS id 4T1lh56y8zz3D for <bashinho.de@proton.me>; Fri, 29 Dec 2023 12:54:29 +0000 (UTC) 
Received: by mail-oo1-f51.google.com with SMTP id 006d021491bc7-5942259ca62so4130098eaf.3 for <bashinho.de@proton.me>; Fri, 29 Dec 2023 04:54:29 -0800 (PST)
X-Received: by 2002:a05:6820:822:b0:594:c1:2bd9 with SMTP id bg34-20020a056820082200b0059400c12bd9mr6617269oob.5.1703854468719; Fri, 29 Dec 2023 04:54:28 -0800 (PST) Mime-Version: 1.0
From: Bashinho <bashinho61@gmail.com> Date: Fri, 29 Dec 2023 13:54:17 +0100
Message-Id: <CA+D3P9w2Mo2=-HrKKALbSdz2QV2tr171Ss-_g27gOs7RnJwG6Q@mail.gmail.com>
Subject: =?utf-8?Q?Test_f=C3=BCr_E-Mail-Header-Analyse?=
To: bashinho.de@proton.me

Jeder Received-Eintrag enthält standardisierte Werte, die in dieser Reihenfolge eingetragen werden:

  • Received
  • from ← Server von dem die Mail erhalten wurde, es folgt in eckigen Klammern eine IP-Adresse
  • by ← Server der die Mail aktuell hat, es folgt ein Domainname
  • with ← es folgt eine (E)SMTP(S) ID
  • Datum ← mit Zeitzonenangabe

Unterhalb der Received-Zeilen folgen noch folgende Zeilen

X-Received: <- hier steht die IP des Absenders. In diesem Fall ist es eine private IP-Adresse. Gmail spielt die echten Adressen bei der Nutzung der Weboberfläche beim Mailversand nicht mehr aus. An sich sollte die IP-Adresse des Absenders in der untersten Received Zeile stehen. In diesem Beispiel ist dies jedoch nicht der Fall. X-Zeilen wie X-Received müssen im Versandprotokoll nicht vorkommen.
From: Absendeadresse, die auch gefälscht sein kann
Message-ID: ist eine ID des absendenden Servers. Diese sollte der absendenden Mailservers entsprechen, ansonsten könnte es ein Fälschungshinweis sein.
To: Empfängeradresse

Wie Du siehst, ist das Versandprotokoll nicht sonderlich lang. Der oberste Eintrag stammt von Protonmail und dieser muss auch immer stimmen, wenn die Mail ankam. Protonmail sagt hier, dass die Mail von der IP 209.85.161.5 stammt. Diese Angabe muss auch immer stimmen, da es die Kommunikation zwischen dem Proton-Server und dem absendenden Server beschreibt. Eine Whois-Abfrage bestätigt dies auch:

Ich habe daraufhin eine Antwortmail verfasst um den umgekehrte Weg aufzuzeichnen:

Received: by 2002:a8a:5d4:0:b0:50c:b503:e9c4 with SMTP id b20csp4453468ocm; Fri, 29 Dec 2023 05:04:03 -0800 (PST) 
X-Google-Smtp-Source: AGHT+IGsgnccdAzutp6PvXfaKDGIpzo5az4OMmtskqlM6JMiptt4IpeE8HqYjw6LLR6bU7KMxu/d 
X-Received: by 2002:a05:600c:ac3:b0:40d:5c7d:20f0 with SMTP id c3-20020a05600c0ac300b0040d5c7d20f0mr1648281wmr.37.1703855042804; Fri, 29 Dec 2023 05:04:02 -0800 (PST) A
Received: from mail-4325.protonmail.ch (mail-4325.protonmail.ch. [185.70.43.25]) by mx.google.com with ESMTPS id hg5-20020a05600c538500b0040c4be1af0csi9231609wmb.61.2023.12.29.05.04.02 for <bashinho61@gmail.com> (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 29 Dec 2023 05:04:02 -0800 (PST)
Date: Fri, 29 Dec 2023 13:03:44 +0000 
To: Bashinho <bashinho61@gmail.com> 
From: "bashinho.de" <bashinho.de@proton.me> 
Subject: Re: Test für E-Mail-Header-Analyse 
Message-ID: <y5fdoeNvl7yb_B80t0IxwhOTNzl9e543TtoRLn7_4qDa0U0IwtuOzcvsGCPBun22Ow2G1jRJX4FjatXrnrnB-sq2nMvuJCPQkHw5pZtDRLY=@proton.me>

Auch hier siehst Du wieder das selbe Bild. Die Message-ID lautet nun auf proton.me, von dem die Mail versandt wurde. Auch Proton trägt die Absende-IP-Adresse bei der Nutzung der Weboberfläche nicht ein. Die IP 185… ist eine Proton-IP. Google hat wieder zusätzliche X-Zeilen eingezogen. Die IP-Adressen sind private IP-Adressen also IP-Adressen aus dem internen Google-Netz.

Liest Du so einen Header von oben nach unten kannst Du immer folgendes Schema erkennen. Die oberste Received Zeile muss stimmen, sonst wäre die Mail nicht angekommen. Siehst Du dort private IP-Adressen im From oder By, befindet sich die E-Mail noch im Internen Netzwerk. Die erste Zeile mit Kontakt nach außen ist hier die 2. Received Zeile die von Googles-Mailserver eingetragen wurde. In dem Fall eine Proton Mail-Adresse

Was auffällt, ist dass sehr wenige Received-Einträge zu finden sind. Mails werden also auf sehr kurzen Wegen versandt. Die Zeitabstände zwischen den Einträgen sind sehr gering. Lediglich die Zeitzonen können für größere Unterschiede sorgen.

Nachdem bei dem Nutzen von Webmail-Oberflächen keine Absende-IP zu finden war, habe ich als nächstes den Test gemacht und eine E-Mail von vodafone.de nach gmail mit Thunderbird geschickt.

Received: by 2002:a8a:5d4:0:b0:50c:b503:e9c4 with SMTP id b20csp4471274ocm; Fri, 29 Dec 2023 05:35:13 -0800 (PST) X-Google-Smtp-Source: AGHT+IHDCUlvC3tYz1kOoIk/Swzeor7wWXBVb27+DBUVL8qhEDUShXN6BvogQBFEhdLI1WdmnV89 
X-Received: by 2002:a7b:c5c7:0:b0:40d:70c5:541 with SMTP id n7-20020a7bc5c7000000b0040d70c50541mr505664wmk.99.1703856913001; Fri, 29 Dec 2023 05:35:13 -0800 (PST)  
Received: from mr6.vodafonemail.de (mr6.vodafonemail.de. [145.253.228.166]) by mx.google.com with ESMTPS id d17-20020a05600c34d100b0040d71953ec6si1211826wmq.194.2023.12.29.05.35.12 for <bashinho61@gmail.com> (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 29 Dec 2023 05:35:12 -0800 (PST) 
Received: from smtp.vodafone.de (unknown [10.0.0.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by mr6.vodafonemail.de (Postfix) with ESMTPS id 4T1mb41hnhz1y1H for <bashinho61@gmail.com>; Fri, 29 Dec 2023 13:35:12 +0000 (UTC) 
Received: from [192.168.0.114] (dslb-002-206-162-117.002.206.pools.vodafone-ip.de [1.2.3.4]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp.vodafone.de (Postfix) with ESMTPSA id 4T1mb40N70z9scg for <bashinho61@gmail.com>; Fri, 29 Dec 2023 13:35:09 +0000 (UTC) 
Message-ID: <2ca98fba-8b0a-4eab-b376-9d3d587f8be5@vodafone.de>

Der unterste Eintrag ist vom empfangenden Mailserver Vodafone und dort wo 1.2.3.4 steht, stand meine richtige IP-Adresse, mit der ich gerade ins Netz gehe. Manchmal findet man den Eintrag der Absende IP unter dem Zeilenanfang X-Originating-IP.
An der Message-ID kannst Du wieder erkennen es ist eine Mail, die über Vodafone verschickt wurde.
In der Received Zeile darüber kannst Du sehen, dass die Mail von einer 10.-IP empfangen wurde, das ist eine private IP, die Mail wurde hier im internen Netzwerk von Vodafone versendet.
Die Zeile darüber ist interessant, da hier der Übergang von Vodafone zu Google stattfand. Die von Googles Mailserver aufgezeichnete IP gehört zu Vodafone. Auch die Bezeichnung des empfangenden Mailservers aus der vorhergehenden Zeile (mr6.vodafonemail.de) stimmt mit dem überein, was mx.google.com aufgezeichnet hat. Was Du hier lernen kannst, ist dass sich die Zeilen aufeinander beziehen. Der from in der aktuellen Zeile muss mit dem by aus der vorhergehenden Zeile übereinstimmen.

Welche Erkenntnisse gibt es nun?

  • Die Zeitabstände sind sehr kurz. Der Zeitabstand zwischen Versand und Empfang ist nur ein paar Sekunden.
  • Die Received Zeilen beziehen sich aufeinander (Der From in der aktuellen Zeile steht im By der darunterliegenden Zeile)
  • Die Message-ID stimmt mit dem absendenden Mailserver überein
  • Die IP-Adresse im From lässt sich über Whois der Domain im From zuordnen
  • Mails werden z.T. in den privaten Netzwerken des Mailproviders weitergegeben.
  • Die oberste Zeile muss stimmen (lediglich der Domainname des From könnte ein Fake sein, falls die Mail von einem gehackten Server stammt, denn den Servernamen kann der Hacker ändern)
  • In der untersten Received-Zeile kann die IP des Absenders stehen.
  • In der Received-Zeile steht eine SMTP-ID die auch ESMTP-ID oder ESMTPS-ID oder LMTP-ID heißen kann
  • Es steht viel Zeugs drin, das man ignorieren muss. Bei der Header-Analyse sollte man sich erstmal auf die relevanten Zeilen und Werte konzentrieren.

Fake Header

E-Mail-Header lassen sich fälschen. Aber nur bis zu einem gewissen Grad. Man kann vor dem Versand zusätzliche Headerzeilen eintragen die Quatsch sind. Sobald die Mail losgeschickt wurde, kommen echte Einträge hinzu. Ich habe hier mal einen Fake-Header von einer Sextortion Erpressung an eine one.com Adresse dabei:

Received: from mx1.pub.mailpod4.cph3.one.com ([10.27.27.11]) by mailstorage33.cst.mailpod4.cph3.one.com with LMTP id GDqWCE2nDFxxBAAAnR/SKw for example@one.com; Sun, 09 Dec 2018 05:25:33 +0000
Received: from yahoo.jp (unknown [2.135.158.148]) by mx1.pub.mailpod4 cph3.one.com (Halon) with SMTP id d62dc1eafb7211e8b7feec0d9a6ed3ae ; Sun, 09 Dec 2018 05:25:30 +0000 (UTC)
Received: from smtp.endend.nl [28.74.241.227] by qnx.mdrost.com with ESMTP; Sun, 09 Dec 2018 00:10:11 0500
Received: from smtp18.yenddx.com ([ Sat, 08 Dec 2018 23:58:54 0500]) by rsmail.alkoholic.net with LOCAL; Sat, 08 Dec 2018 23:58:54 0500
Received: from public.micromail.com.au [60.213.145.70] by m1.gns.snv.thisdomainl.com with LOCAL; Sat, 08 Dec 2018 23:41:15 0500
Received: from mmx09.tilkbans.com ([169.55.67.61]) by mmx09.tilkbans.com with ESMTP; Sat, 08 Dec 2018 23:28:06 0500
Message ID: <A17620D5.7C3729AC@yahoo.jp>
Date: Sat, 08 Dec 2018 23:28:06

Du kannst gerne anhand o.g. Liste mal versuchen die Fehler zu finden ansonsten:

  • Domains in From stimmen nicht mit genannten IP-Adressen überein (Whois und Ping), Domains wurden z.T. erfunden
  • From Bezüge der aktuellen Zeile zum By Eintrag in der Zeile darunter fehlen
  • In einer Zeile steht ein Datum statt einer IP im From (from smtp18.yenddx.com)
  • Zeitsprünge zwischen Zeilen von 15 und mehr Minuten
  • SMTP IDs fehlen, oft steht dort LOCAL

Wie kannst Du also herausfinden, von wo die Mail verschickt wurde? Du musst mit dem echten Eintrag ganz oben beginnen und erkennen dass die Mail von einer 10.-IP empfangen wurde, also im lokalen Netz des Providers weitergeschickt wurde.
Die Zeile darunter sagt, sie hätte die Mail von yahoo.jp empfangen und der Kontakt war zur IP 2.135.158.148. Ein Whois dieser IP ergibt, dass die IP zur Kasachischen Telekom gehört:

Vermutlich handelt es sich um einen gehackten Server der Kasachischen Telekom, dessen Name auf yahoo.jp verändert wurde. Die zweite Received-Zeile ist auch die letzte Zeile, die (bis auf den Servernamen yahoo.jp) noch plausibel ist. Darunter beginnen die ganzen o.g. Fehler. Die Message-ID lautet auch auf yahoo.jp. Das passt also zusammen.

Und ja, Fake-Header sind in der Regel genau so schlecht wie dieser. Aber es kann dennoch nicht ausgeschlossen werden, dass sich jemand mehr Mühe macht als dieser Sextortion-Erpresser.

Wenn Du wissen willst, wo sich bei Deinem Programm oder Online-Dienst die Anzeige des E-Mail-Headers verbirgt, empfehle ich die Anleitungen von Thomas Hochstein.

Ja, ich weiß, es gibt Dienste, die einem den E-Mail-Header schöner anzeigen. Ich neige nur dazu, meine Recherche-Daten möglichst nicht in irgendwelche Onlinedienste einzutragen, sofern das nicht unbedingt erforderlich ist. Daher werde ich hier auch keinen Dienst empfehlen. Du solltest bedenken, dass ein Mailheader eben E-Mail-Adressen und Betreff enthält, den man unnötig übermittelt, sofern man diese Daten nicht vorher austauscht. Die gezeigten Mailadressen wurden für diesen Artikel angelegt, ich werde darüber nicht erreicht.