Skip to content

SSLyze - SSL Server Einstellungen per Kommandozeile überprüfen

Die richtigen SSL/TLS Einstellungen für Server zu finden ist nicht immer leicht. Eine etablierte Prüfvariante wird von SSL Labs gestellt. Auf deren Webseite können Server auf Herz und Nieren geprüft werden und bekommen im Optimalfall ein A+ Rating, wenn Techniken wie beispielsweise HTTP Strict Transport Security aktiv sind.

Seit kurzen stellt Qualys mit ssllabs-scan ein Tool auf Github zur Verfügung, welches einen Server Test via Kommandozeile erlaubt. Das Tool basiert auf der vorhandenen Technik und greift somit auch immer auf die Qualys Server zurück.

Als Alternative bietet sich das ebenfalls etablierte Phyton Script SSLyze an. Anders als ssllabs-scan unterstützt der SSL Scanner bereits SMTP, XMPP, LDAP, POP, IMAP, RDP und FTP und steht auch für Windows Nutzer zur Verfügung (Download).

SSLyze unter Ubuntu Server 14.04 verwenden

Installation

wget https://github.com/nabla-c0d3/sslyze/releases/download/release-0.10/sslyze-0_10-linux64.zip
unzip sslyze-*
cd sslyze/

Alle Funktionen anzeigen

./sslyze.py --help

Usage: sslyze.py [options] target1.com target2.com:443 etc...

Normaler Scan

Prüfung auf die Protokolle SSLv2.0, SSLv3.0, TLS1.0/1.1/1.2 Heartbleed, CipherSuites und andere Einstellungen.

Die reguläre Methode fast quasi eine Befehlskette zusammen "--sslv2 --sslv3 --tlsv1 --reneg --resum --certinfo=basic --hide_rejected_ciphers --http_get"

./sslyze.py --regular url.de:443

REGISTERING AVAILABLE PLUGINS
 -----------------------------
  PluginSessionRenegotiation
  PluginCompression
  PluginSessionResumption
  PluginHSTS
  PluginOpenSSLCipherSuites
  PluginChromeSha1Deprecation
  PluginCertInfo
  PluginHeartbleed

 CHECKING HOST(S) AVAILABILITY
 -----------------------------

   url.de:443                        => 127.0.0.1:443

 SCAN RESULTS FOR url.DE:443 - 127.0.0.1:443
 ---------------------------------------------------

  Deflate Compression:
      OK - Compression disabled

  Session Renegotiation:
      Client-initiated Renegotiations:   OK - Rejected
      Secure Renegotiation:              OK - Supported

  OpenSSL Heartbleed:
      OK - Not vulnerable to Heartbleed

  Session Resumption:
      With Session IDs:                  OK - Supported (5 successful, 0 failed, 0 errors, 5 total attempts).
      With TLS Session Tickets:          OK - Supported

  Certificate - Content:
      SHA1 Fingerprint:                  xxxxxxxxxxxxxxxx
      Common Name:                       url.com
      Issuer:                            url Internet xxxxxxxxx G2
      Serial Number:                     xxxxxxxxxxxxx
      Not Before:                        
      Not After:                         
      Signature Algorithm:               sha1WithRSAEncryption
      Key Size:                          2048 bit
      Exponent:                          xxxxxx (0x10001)
      X509v3 Subject Alternative Name:
 * Certificate - Trust:
      Hostname Validation:               FAILED - Certificate does NOT match url.de
      "Mozilla NSS - 08/2014" CA Store:  OK - Certificate is trusted
      "Microsoft - 08/2014" CA Store:    OK - Certificate is trusted
      "Apple - OS X 10.9.4" CA Store:    OK - Certificate is trusted
      "Java 6 - Update 65" CA Store:     OK - Certificate is trusted
      Certificate Chain Received:        ['url.com', ']

  Certificate - OCSP Stapling:
      NOT SUPPORTED - Server did not send back an OCSP response.

  SSLV2 Cipher Suites:
      Server rejected all cipher suites.

...........

Mit dem Zusatz "--hide_rejected_ciphers" lassen sich abgelehnte CipherSuites ausblenden, was die Übersicht erhöht.

Scan auf SHA-1

Eine ebenso praktische Scanvariante ist der Test auf SHA-1. Die Hasfunktion SHA-1 wird beispielsweise von Google Chrome inzwischen als unsicher gemeldet.

--chrome_sha1 url.de:443

 REGISTERING AVAILABLE PLUGINS
 -----------------------------

  PluginSessionRenegotiation
  PluginCompression
  PluginSessionResumption
  PluginHSTS
  PluginOpenSSLCipherSuites
  PluginChromeSha1Deprecation
  PluginCertInfo
  PluginHeartbleed

 CHECKING HOST(S) AVAILABILITY
 -----------------------------

  url.de:443                        => xxxxxxxxx:443

 SCAN RESULTS FOR url.DE:443 - xxxxxxxx:443
 ------------------------------------------------

  Google Chrome SHA-1 Deprecation Status:
      OK - Certificate chain does not contain any SHA-1 certificate.

Prüfung auf  HTTP Strict Transport Security HSTS Unterstützung

Auch das bereits oben erwähnte HSTS lässt sich überprüfen.

./sslyze.py --hsts url.de:443

Test auf StartTLS für SMTP oder XMPP Server

Gleiches gilt für XMPP oder SMTP Server.

./sslyze.py --starttls=smtp url

./sslyze.py --starttls=xmpp url

Zu den genannten Befehlen gibt es noch zig weitere Möglichkeiten SSL Server auf Konfiguration zu testen. Hier sei für alle Funktionen auf die Hilfe verwiesen, welche alle Befehle auflistet und erklärt. (Die Scanausgaben wurden zugunsten der Übersicht gekürzt).

Fazit

Anders als SSL Lab zeigt SSLyze kein Ranking und macht keine Überprüfung auf Browserunterstützung, dafür werden mehr Protokolle unterstützt. Je nach Einsatzgebiet werden wohl beide Tools benötigt. Auf einem Server ohne Browser und Co bietet sich SSLyze natürlich an.

Das Tool ist auf gängigen Linux Distributionen wie Kali Linux, die für Pentesting und andere Sicherheitschecks verwendet werden, mit an Bord.

Eine Übersicht, auf welche Wege SSL/TLS Cipher Suites gestetet werden können, bietet Oswap.

Hardening Apache Server - In 5min einen Webserver sicherer machen

Letzte Woche hatte ich euch kurz erklärt wie sich ein Apache in Verbindung mit einem Tomcat installieren lässt. Um auf der sicheren Seite zu sein, wurde der Apache gleich mit SSL "SSLEngine on" und einem selbstsignierten Zertifikat konfiguriert. 

In den folgenden Schritten möchte ich zeigen, wie ein Webserver (Apache) weiter abgesichert werden kann. Dazu müssen lediglich weitere Parameter in der Apache Konfiguration "/etc/apache2/sites-available/default-ssl.conf" gesetzt werden.

apache

Theoretisch könnt ihr die folgenden Zeilen direkt in eure Konfigdatei kopieren:

Apache Server härten

Wie bereits oben beschrieben werden alle Einstellungen in der default-ssl.conf gesetzt, innerhalb des ""VirtualHost" Bereichs:

Unsichere SSL Versionen blockieren

SSLProtocol All -SSLv2 -SSLv3

SSL Kompression deaktivieren um beispielsweise der "Crime" Attacke vorzubeugen 

SSLCompression off

Der Server soll vorgeben welche Verschlüsselung verwendet werden darf, normalerweise sucht sich der Client selbst etwas aus. 

SSLHonorCipherOrder On

Sichere Cipher Suites direkt vorgeben und ungewollte blockieren 

SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4

Damit ist der Grundstock für einen sicheren Apache gelegt.

HTTP Strict Transport Security aktivieren

Ein weiterer Sicherheitsaspekt wäre beispielsweise HTTP Strict Transport Security.

Nach Aktivierung dieser Option ist es nicht mehr möglich Session Cookies abzugreifen, indem man den Anwender auf eine unsichere HTTP Webseite leitet. Dem Apache wird sozusagen mitgeteilt, über einen bestimmten Zeitraum (max-age - Angaben in Sekunden) nur noch HTTPS Verbindungen zuzulassen.

Um diese Funktion nutzen zu können, muss zunächst ein Apache Modul installiert werden

a2enmod headers

Danach kann wiederum in die default-ssl.conf folgendes eingetragen werden. Im Beispiel wir dem Server mitgeteilt, dass er die nächste 10 Jahre nur HTTPS Verbindungen zulassen soll. Mögliche Subdomains werden mit einbezogen.

Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"

OCSP (Online Certificate Status Protocol) aktivieren

Eine weitere Möglichkeit den eigenen Webserver gegen Angriffe zu schützen ist OCSP. Hierbei wird während des Aufbaus einer SSL/TLS Verbindung das Zertifikat auf Echtheit überprüft.

Hierzu ist natürlich ein offizielles Zertifikat eines CA notwendig. Diese Sicherheits-Funktion bietet ihre Vor- und Nachteile, warum ich sie nur bedingt empfehle.

Bei einem selbstsignierten Zertifikat, macht diese Sicherheitsfunktion sowieso wenig Sinn. Dennoch hier der Befehl, wie diese eingebunden wird (benötigt Apache 2.4):

SSLUseStapling on

SSLStaplingCache "shmcb:logs/stapling-cache(150000)"

Abschlusstest

Egal welche Funktion ihr in eine Konfiguration einbaut. Sie sollte vor Inbetriebnahme immer getestet werden

apache2ctl -t

sudo service apache2 restart