TLS Basics and Hardening

Hallo zusammen,

In den letzten Tagen habe ich mich etwas mit Transport Layer Security (kurz TLS) auseinandergesetzt.

Hierzu muss man erst einmal ein bisschen die Begriffe SSL und TLS entwirren. SSL ist der alte Begriff und sollte nicht mehr verwendet werden. http://de.wikipedia.org/wiki/Transport_Layer_Security

Geschichte

Version Beschreibung Jahr
SSL v1 von Netscape erfunden 1994
SSL v2 von Netscape weiterentwickelt - gilt als unsicher 1994
PCT 1.0 Private Communication Technology war die SSL Implementation von Microsoft 1995
SSL v3 wurde später grösstenteils als TLS v1 übernommen 1996
TLS v1 http://tools.ietf.org/html/rfc2246 1999
TLS v1.1  http://tools.ietf.org/html/rfc4346 2006
TLS v1.2 http://tools.ietf.org/html/rfc5246 2008

SSL Handshake

Mit dem SSL Handshake wird die Verschlüsselung ausgehandelt.

Deutsch Englisch Varianten
Schlüsselaustausch Key Exchange NULL, RSA, DH, ADH, EDH, SRP
Authentifizierung Authentication NULL, RSA, DSS, DH
Verschlüsselung Symmetric Encryption Method/Cipher NULL, RC2, RC4, DES, 3DES, IDEA, AES
Hashfunktion Message Authentication Code NULL, MD5, SHA, SHA1, SHA256, SHA384
Export Flag Export Flag Export
Eine Verschlüsselung (CipherSuite) sieht dann etwa so aus: TLS_RSA_WITH_RC4_128_MD5
Und bedeutet Key Exchange=RSA, Verschlüsselung=RC4_128, Hash=MD5

Eine seht detailierte Abhandlung darüber kann man unter folgendem Link nachlesen
http://blogs.msdn.com/b/kaushal/archive/2013/08/03/ssl-handshake-and-https-bindings-on-iis.aspx

Unsichere Verschlüsselungen

Es gibt viele verschiede Verschlüsselungen (CipherSuites) und Protokolle. Einige davon sind nicht mehr sicher und die Frage ist bloss, welche denn nun als unsicher gelten?

Leider habe ich nirgends eine Liste von Cipher Suites gefunden welche als unsicher gelten. Aufgrund meiner Tests mit verschiedenen Tools habe die folgende Liste zusammengestellt. Diese sollten nicht mehr verwendet werden.

  • ADH-AES256-SHA
  • ADH-CAMELLIA256-SHA
  • ADH-DES-CBC3-SHA
  • ADH-AES128-SHA
  • ADH-CAMELLIA128-SHA
  • ADH-RC4-MD5
  • EDH-RSA-DES-CBC-SHA
  • ADH-DES-CBC-SHA
  • DES-CBC-SHA

Guidelines

Die folgenden Guidelines habe ich den folgenden Guides entnommen:

Zertifikate

  • Private Keys von Zertifikaten sollten mindestens 1024 bit besser jedoch 2048 Bit sein
  • Der Private Key muss geschützt werden
  • Zertifikate nur von vertrauenswürdigen Zertifizierungsstellen kaufen
  • Korrekte Certificate Chain prüfen

Protokolle

  • SSL v2 ist unsicher und darf nicht mehr verwendet werden
  • SSL v3 ist veraltet und alle Clients unterstützen TLS v1.0 deshalb kann SSLv3 deaktiviert werden
  • TLS v1.0 ist grösstenteils sicher und kann mit entsprechender Konfiguration abgehärtet werden
  • TLS v1.1/1.2 haben keine bekannten Sicherheitslücken

Verschlüsselung

  • Anonymous Diffie-Hellman (ADH) bieten keine Authentifizierung - nicht verwenden
  • NULL cipher suites bieten keine Verschlüsselung - nicht verwenden
  • Export key exchange suites nutzen Authentifizierung welche leicht gebrochen werden können - nicht verwenden
  • Suites mit schwacher Verschlüsselung (typisch 40 und 56 bits) können leicht gebrochen werden können - mindestens 128 bit verwenden
  • RC4 is schwächer als vermutet . Support für RC4 sollte in nächster Zeit engfernt wrden (BEAST attack) - nicht verwenden
  • 3DES bietet nur 108 bits Sicherheit (oder 112 je nach source), welches tiefer als das empfohlene Minimum von 128 bits liegt - nicht verwenden
  • Elliptic Curve DSA (ECDSA) Zertifikate verwenden

Weitere Massnahmen

  • Festlegen der Reihenfolge der Verschlüsselungsmethoden
  • Unterstützung von Forward Secrecy
  • Deaktivieren von Client-initiierten Renegotiation
  • Deaktivieren von TLS Compression (CRIME Attack)

Praxis

Nun hast du viel gelesen aber immer noch keinen Plan, wie man das in der Praxis umsetzt. Tja, mir ist das genau gleich gegangen.

Microsoft Windows und IIS

Bei Windows wird alles über die Registry eingestellt. Der folgende KB Artikel erklärt das genauer.

How to restrict the use of certain cryptographic algorithms and protocols in Schannel.dll
http://support.microsoft.com/kb/245030/en-us

Eigentlich ist alles in der Registry. Ich habe mir mal die Mühe gemacht und die Registry Keys von Windows 2008, Windows 2008 R2, Windows 2012 und Windows 2012 R2 zu vergleichen. Die grosse Überraschung - überrall steht das selbe drin.

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL]
"EventLogging"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\CipherSuites]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Hashes]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\KeyExchangeAlgorithms]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Client]
"DisabledByDefault"=dword:00000001
Da stellt sich doch die Frage ob Microsoft über die Jahre nichts verbessert hat. Dabei bin ich über folgenden Artikel gestolpert http://www.dotnetnoob.com/2013/10/hardening-windows-server-20082012-and.html

Here are the important differences between the Windows Server versions:

  • WS 2003 had SSL 2.0/3.0 and TLS 1.0 enabled by default. The default installation did not support AES ciphers – but support could be added through a hotfix.
  • WS 2008 also had SSL 2.0/3.0 and TLS 1.0 enabled by default, but improved the cryptographic support with new AES cipher suites.
  • WS 2008 R2 introduced TLS 1.1 and TLS 1.2, but they were disabled by default.
  • WS 2012 takes us a step further with TLS 1.2 enabled by default.
Nun geht man hin und setzt all die Registry Keys oder man benutzt einfach IIS Crypto
https://www.nartac.com/Products/IISCrypto/Default.aspx
Apache Webserver
Auch für den Apache Webserver gibt es entsprechende Anleitungen

SSLCipherSuite ALL:!aNULL:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM
SSLCipherSuite ALL:!aNULL:RC4+RSA:+HIGH:+MEDIUM:+LOW:+EXP:+eNULL
SSLCipherSuite HIGH:!aNULL:!MD5

Prüfen der Security

Anschliessend sollte die Sicherheit geprüft werden. Dazu stehen verschiedene Tools zur Verfügung

Qualys SSL Labs

https://www.ssllabs.com/ssltest/

SSLscan

http://sourceforge.net/projects/sslscan/
http://code.google.com/p/sslscan-win/downloads/list

SSLScan.exe --no-failed icesrv01.corp.icewolf.ch:44

SSLDiagnos

http://sourceforge.net/projects/ssldiagnos/

ssldiagnos.exe -t icesrv01.corp.icewolf.ch -p 443

Nmap

http://nmap.org/download.html

nmap --script ssl-cert,ssl-enum-ciphers -p 443 icesrv01.corp.icewolf.ch

Weitere Informationenen

Grüsse
Andres Bohren