Der NSA-Whistleblower James Bamford veröffentlichte 2012 einen Artikel bei wired.com, dass der NSA ein Durchbruch bei Angriffen auf verschlüsselte Verbindungen gelungen sein muss und dass die NSA einen erheblichen Teil des verschlüsselten Datenverkehrs entschlüsseln kann. Die Dokumente des NSA-Whistleblowers Edward Snowden belegen diese Vermutung und zeigen, dass die NSA einen erheblichen Teil der SSL/TLS, SSH und VPN-Verbindungen entschlüsseln kann. Die "NSA VPN decryption infrastructur" zeigt, dass wenige Daten an einen Supercomputer gesendet werden, wenn ein "Internet Key Exchange"-Handshake zum Aufbau einer VPN-Verbindung erkannt wird. Der Supercomputer liefert den Key zum Entschlüsseln der Daten, die dann on-the-fly entschlüsselt und in XKeyscore eingespeist werden. Doch eine gute Server-Administration schützt...
Auf der ACM CCS im Okt. 2015 wurde das Paper "How is NSA breaking so much crypto?" mit dem Best Paper Award ausgezeichnet, da es erstmals eine plausible Erklärung für die Kapazitäten der NSA liefert. Die Autoren beschreiben einen Angriff auf den Diffie-Hellman Schlüsseltausch, wenn "common DH parameters" mit 1024 Bit Schlüssellänge verwendet werden, wie sie im RFC 2409 empfohlen wurden.
Es ist eine Ironie, dass ausgerechnet der Diffie-Hellmann-Schlüsseltausch den Ansatzpunkt für einen Angriff der NSA auf die Verschlüsselung bietet, da diese Technik als Forward Secrecy für die Transportverschlüsselung SSL/TLS sowie für SSH und VPNs besonders guten Schutz gegen Angriffe auf die Krypto bieten sollte.
Ähnlich wie bei dem Angriff auf die GSM-Verschlüsselung im Mobilfunk, kann die NSA mit der zur Verfügung stehenden Rechenpower ihrer Supercomputer für einige häufig verwendete DH-Parametersätze Rainbowtables berechnen. Nach Ansicht der Autoren braucht die NSA mit der angenommenen Rechenpower etwa 1 Jahr, um einen DH-Parametersatz mit 1024 zu analysieren. Danach können die vorberechneten Daten genutzt werden, um einen Diffie-Hellmann-Schlüsseltausch innerhalb von wenigen Sekunden zu knacken. Wenn ein Key Exhange von einem Lauschkonten erkannt wird, werden die ersten Daten an den Supercomputer gesendet, der entweder den Key knackt und den Schlüssel zurücksendet oder einen Fehler meldet. Wurde der Key geknackt, kann der verschlüsselte Datenverkehr on-the-fly entschlüsselt und in XKeyscore eingespielt werden. Wenn die NSA die beiden am häufigsten verwendeten 1024 Bit DH-Parametersätze mit ihren Supercomputern analysiert hat, dann kann sie etwa 2/3 der VPN Verbindungen, 1/4 der SSH Verbindungen und 1/5 der SSL/TLS Verbindungen on-the-fly knacken.
Um sich gegen diese Angriffe zu schützen, sollten die Administratoren von Web-, Mail-, SSH- und VPN-Servern ihre Konfigurationen anpassen. Einige FAQ für die Server-Konfigurationen wie z.B. die Apache FAQ sind als out-of-date zu betrachten.
Apache 2.2 unterstützt keine 2048 Bit DH-Parameter. Der Diffie-Hellmann-Schlüsseltausch (DHE) sollte deshalb deaktiviert werden. Der ECDHE-Schlüsseltausch ist nicht von dem Angriff betroffen und kann weiter verwendet werden. Dazu müssen alle DHE-Parameter aus
SSLCipherSuite
entfernt werden -- ECDHE-Ciphers hingegen dürfen weiterhin aktiv bleiben.
Diese Server können individuell generierte DH-Parameter verwenden. Die DH-Parameter können wöchentlich oder monatlich mit einem Cron-Job erneuert werden, der folgendes Kommando ausführt (Beispiele für Apache):
FILE=`mktemp` ; openssl dhparam 2048 -out $FILE && mv -f $FILE /etc/apache2/ssl/dh2048.pem
In den SSL-Konfigurationen der Server kann man die Datei mit den DH-Parametern konfigurieren. Für Apache 2.4.x steht folgende Option zur Verfügung:
SSLOpenSSLConfCmd DHParameters "/etc/apache2/ssl/dh2048.pem"
In der nginx-Konfiguration kann man folgende Option verwenden:
ssl_dhparam /etc/nginx/dh2048.pem
In Postfix verwendet man etwas irreführend folgende Option:
smtpd_tls_dh1024_param_file = /etc/postfix/dh2048.pem
Dovecot generiert automatisch wöchentlich neue DH-Parameter, wenn folgende Option gesetzt sind:
ssl_dh_parameters_length=2048
OpenSSH bietet 8 Protokolle für den Schlüsseltausch. Drei Protokolle verwenden Eliptische Kurven mit NIST-Curven und werden deshalb als suspekt angesehen. Die Protokolle mit SHA1 oder 1024 Bit DH-Parametern gelten ebenfalls nicht mehr als sicher. Damit bleiben zwei als sicher geltende Protokolle für den Schlüsseltausch übrig. In der Konfigurationsdatei /etc/ssh/sshd_config kann man festlegen, dass nur diese beiden Protokolle für den Schlüsseltausch verwendet werden dürfen:
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
Unser Crypto-Experte Karsten Ness hat dazu auf unserer letzten Secure Linux Administration Conference einen schönen Vortrag gehalten und gibt dort auch weitergehende Tipps zur sicheren Server-Konfiguration:
Kommentare
11 Antworten zu Wie die NSA den Diffie-Hellman Schlüsseltausch knackt
Danke für die Tipps!
In der "KexAlgorithms"-Zeile musste ich das Leerzeichen nach dem Komma entfernen, sonst gab es beim Starten von OpenSSH folgenden Fehler: "garbage at end of line"
Der Android-SSH-Client "VX ConnectBot" unterstützt leider keinen der beiden Algorithmen, aber mit dem Original "ConnectBot" (der mittlerweile wieder weiterentwickelt wird) klappt es: https://play.google.com/store/apps/details?id=org.connectbot
Leerzeichen habe ich entfernt, das hat sich vielleicht beim Einstellen in den Blog eingeschlichen, Danke für den Hinweis!
Danke!
Wäre schön noch courier-mta mit aufzunehmen:
http://www.courier-mta.org/mkdhparams.html
Hallo Peer, der Apache 2.4 kennt den Parameter SSLOpenSSLConfCmd laut http://httpd.apache.org/docs/current/mod/mod_ssl.html#sslopensslconfcmd nur, wenn Apache >= 2.4.8 und gleichzeitig openssl in Version >= 1.0.2 eingesetzt werden. So kann man bei dem Apache 2.4.10 beim SLES 12 den Parameter aktuell nicht benutzen, weil dort nur openssl 1.0.1i zur Verfügung steht.
Soeben entdeckt ... :-\
Sehr guter Artikel!
Könntet Ihr Eure Anleitung "Perfect Forward Secrecy (PFS) für Postfix und Dovecot einrichten" entsprechend updaten (für die Freunde des cut&paste - wie mich z.B. ;-) ) ?
Danke!
Wer einen FTP-Server betreibt, sollte diesen nicht vergessen:
ProFTPd:
TLSDHParamFile /etc/proftpd/dh2048.pem
Bei PureFTPd wird automatisch die /etc/ssl/private/pure-ftpd-dhparams.pem verwendet, sofern vorhanden.
Hallo
Wichtig ist auch die Apache und OpenSSL Version.
Min.:
* Apache 2.4.8
* OpenSSL 1.02
Damit ist Ubuntu 14.04 schonmal raus
[…] wird empfohlen, die DH-Parameter täglich via Cronjob zu erneuern (Siehe auch Beitrag von mailbox.org). Dazu wird das Verzeichnis /etc/myssl erstellt […]
<cite>Dovecot generiert automatisch wöchentlich neue DH-Parameter, wenn folgende Option gesetzt sind[...]</cite>
Mit Dovecot 2.2 wurde die wöchentliche Neugenerierung <a href="http://wiki2.dovecot.org/SSL/DovecotConfiguration" rel="nofollow">deaktiviert</a>.
Laut https://wiki.dovecot.org/SSL/DovecotConfiguration werden wöchentlich neue DH-Parameter nur in Dovecot 2.1 und älter generiert, bei Dovecot 2.2 jedoch nicht. Das widerspricht der Angabe im Blogposting. Was ist nun richtig?
Der Cron-Job funktioniert so nicht. Openssl erwartet numbits nach den Optionen. Also kommt 2048 nach -out $FILE. Nicht davor. Die Zeile lautet richtig:
FILE=`mktemp` ; openssl dhparam -out $FILE 2048 && mv -f $FILE /etc/apache2/ssl/dh2048.pem