28. September 2016

Episode 4 – TR-02102-2 und Microsoft™ Internet Information Service (IIS)

Dieser Blog Post ist Teil der Blogserie zur TLS-Konfiguration – Technische Richtlinie TR-02102-2 des BSI.

In Episode 1 habe ich erläutert, was der Richtlinie zweiter Teil empfiehlt. In dieser Episode möchte ich veranschaulichen, wie man das mit einem IIS Webserver umsetzt. Dafür habe ich in unserer Testumgebung einen deutschen Windows Server 2016 mit installiertem IIS hergenommen. Ich beschreibe daher für diesen Server und diese Sprache die Einstellung, da ich davon überzeugt bin, dass ein guter Admin das auf seinen Server mit der entsprechenden Sprache übersetzen kann. Wer gar nur den Knowledgebase-Artikeln von Microsoft vertraut oder noch eine ältere Version (schon mal ans Migrieren gedacht? 🙂 ) verwendet, dem sei KB 245030 ans herz gelegt.

An dieser Stelle der Hinweis: es gibt Werkzeuge, die das Konfigurieren des IIS einfacher machen. Auch gibt es Skripte, die eine gute Vorarbeit machen. Ich hab mich jedoch bewusst dafür entschieden, das „mit der Hand am Arm“ zu machen, um meine Kenntnisse in dem Bereich auszubauen.

Wichtig: Ich setze in diesem Posting voraus, dass der Anwender dieser Tutorials weis, was er vor hat und dass er mit äußerster Vorsicht vor geht. Daher vor den Änderungen besser einen Systemwiederherstellungspunkt setzen oder die Registry anderweitig sichern.

Wie setzt man die TR mit dem Microsoft™ Internet Information Service (IIS) um?

Dazu muss man an zwei Stellen ansetzen. Zum einen möchten wir ja ungewollte Protokolle deaktivieren und zum anderen ja die Cipher-Suites aus den Empfehlungen umsetzen.

Zu den Cipher-Suites.

Hier öffnen wir den Gruppenrichtlinien-Editor. Diejenigen, die das über das AD machen, erstellen dafür einfach ein neues Gruppenrichtlinienobjekt und verknüpfen es mit der OU, in der die Webserver beheimatet sind.

Start -> Ausführen -> gpedit.msc
Computerkonfiguration -> Administrative Vorlagen -> Netzwerk -> SSL Einstellungen -> Reihenfolge der SSL Cipher Suites

Dort fügen wir den folgende Zeichenkette wie abgebildet ohne Umbrüche und Leerzeichen ein:

TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256

Zu den Protokollen.

Update Juni 2022: Zwar wird in der TR bereits empfohlen, TLS 1.3 einzusetzen, jedoch wird diese TLS-Version erst ab Windows Server 2022 von SCHANNEL unterstützt. Daher ist die folgende Konfiguration noch immer auf TLS in Version 1.2 abgestimmt.
Das wird etwas umfangreicher, wenn man nur durch Klicken administriert. Daher hab ich mir eine .reg-Datei mit folgendem Inhalt gebaut:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Protocols\SSL 2.0\Server]
"Enabled"=dword:00000000
"DisabledByDefault"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Protocols\SSL 3.0\Server]
"Enabled"=dword:00000000
"DisabledByDefault"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Protocols\TLS 1.0\Server]
"Enabled"=dword:00000000
"DisabledByDefault"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Protocols\TLS 1.1\Server]
"Enabled"=dword:00000000
"DisabledByDefault"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Protocols\TLS 1.2\Server]
"Enabled"=dword:00000001
"DisabledByDefault"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\KeyExchangeAlgorithms\Diffie-Hellman]
"ServerMinKeyBitLength"=dword:00002048

Nach einem Neustart bekommt man folgendes Bild mit nmap:

| ssl-enum-ciphers:
|  SSLv3: No supported ciphers found
|  TLSv1.0: No supported ciphers found
|  TLSv1.1: No supported ciphers found
|  TLSv1.2:
|    ciphers:
|      TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 - strong
|      TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 - strong
|      TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 - strong
|      TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 - strong
|    compressors:
|     NULL
|_ least strength: strong

Und was bedeutet das für die Kompatibilität mit anderen Systemen?

Nur Systeme, die mindestens TLSv1.2 sprechen können, sind in der Lage, sich mit dem Server zu verbinden. Welche man ausschließt steht in Episode 2 beim Apache unten aufgelistet.