SMTP und IMAP auf der Konsole

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

Ziel

In dieser Übung wird eine SMTP-Sitzung manuell durchgeführt. Dabei wird der Unterschied zwischen Envelope und Header sichtbar – und warum das für Spam und Phishing relevant ist.

Envelope vs. Header

Zwei verschiedene Absender

Bei einer E-Mail gibt es zwei verschiedene "Von"-Angaben:

Envelope Header
Befehl MAIL FROM: From:
Sichtbar für Mailserver Empfänger im Mailprogramm
Verwendung Bounces, Spam-Prüfung (SPF) Anzeige an den Benutzer
Kann gefälscht werden Schwerer (SPF prüft dies) Einfach

!!!Wichtig!!! Phishing-Mails nutzen genau diesen Unterschied – der Header zeigt eine vertrauenswürdige Adresse, der Envelope verrät den echten Absender.

SMTP mit STARTTLS (Port 25)

Port 25 ist für Mailserver-zu-Mailserver – keine Authentifizierung
  • openssl s_client -starttls smtp -connect mail.it2XX.int:25 -clrf
220 mail.it2XX.int ESMTP Postfix (Debian)
EHLO test
250-mail.it2XX.int
250-SIZE 10485760
250-STARTTLS
250 8BITMIME
MAIL FROM:<spam@boese.example.com>
250 OK
RCPT TO:<martha@it2XX.int>
250 OK
DATA
354 End data with <CR><LF>.<CR><LF>
From: bank@sparkasse.de
To: martha@it2XX.int
Subject: Ihr Konto wurde gesperrt

Bitte klicken Sie hier: http://phishing.example.com
.
250 OK: queued as 12345
QUIT
221 Bye
Was hier passiert
  • Envelope-Absender: spam@boese.example.com – der echte Absender
  • Header-Absender: bank@sparkasse.de – was Martha im Thunderbird sieht
  • Martha sieht eine Mail von der Sparkasse – obwohl sie von einem Spam-Server kommt

SMTPS (Port 465) mit Authentifizierung

Port 465 ist für Mailclients – hier wird Auth zwingend verlangt

Wie funktioniert AUTH PLAIN?

AUTH PLAIN überträgt Benutzername und Passwort Base64-kodiert. Das Format ist: \0Benutzername\0Passwort

Base64-Wert erzeugen
  • echo -ne '\0martha\0suxer' | base64
AG1hcnRoYQBzdXhlcg==
Dekodieren zur Kontrolle
  • echo "AG1hcnRoYQBzdXhlcg==" | base64 -d | cat -v
^@martha^@suxer

!!!Wichtig!!! Base64 ist keine Verschlüsselung – der Wert ist trivial dekodierbar. AUTH PLAIN ist nur sicher wenn die Verbindung TLS-verschlüsselt ist.

Sitzung

  • openssl s_client -connect mail.it2XX.int:465 -clrf
220 mail.it2XX.int ESMTP Postfix (Debian)
EHLO test
250-mail.it2XX.int
250-SIZE 10485760
250-AUTH PLAIN LOGIN
250 8BITMIME
AUTH PLAIN AG1hcnRoYQBzdXhlcg==
235 2.7.0 Authentication successful
MAIL FROM:<martha@it2XX.int>
250 OK
RCPT TO:<bob@it2XX.int>
250 OK
DATA
354 End data with <CR><LF>.<CR><LF>
From: martha@it2XX.int
To: bob@it2XX.int
Subject: Test

Testmail von martha.
.
250 OK: queued as 67890
QUIT
221 Bye
Was hier anders ist
  • Ohne AUTH PLAIN verweigert der Server die Annahme
  • Envelope und Header stimmen überein – das ist eine legitime Mail
  • TLS schützt die Übertragung – niemand sieht das Passwort im Klartext

IMAPS (Port 993)

IMAP-Befehle müssen mit einer ID beginnen (a1, a2, ...)
Auch hier ist die Verbindung sofort TLS-verschlüsselt
  • openssl s_client -connect mail.it2XX.int:993
* OK Dovecot ready
a1 LOGIN martha suxer
a1 OK Logged in
a2 LIST "" "*"
* LIST (\HasNoChildren) "." "INBOX"
a2 OK List complete
a3 SELECT INBOX
* 3 EXISTS
a3 OK Select complete
a4 FETCH 1 BODY[]
* 1 FETCH (BODY[] {412}
...Mailinhalt...
)
a4 OK Fetch complete
a5 LOGOUT
* BYE Logging out
a5 OK Logout complete
Was hier passiert
  • LOGIN martha suxer – Benutzername und Passwort im Klartext, aber durch TLS geschützt
  • LIST – zeigt alle Mailboxen
  • SELECT INBOX – öffnet den Posteingang
  • FETCH – liest eine Mail
  • Im Gegensatz zu POP3 bleibt die Mail auf dem Server