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

SSLyze unter Ubuntu Server 14.04, 16.04, 20.04 LTS verwenden

Installation

sudo apt install python-pip
pip install --upgrade setuptools
pip install sslyze
pip install --upgrade setuptools
pip install --upgrade sslyze
python -m sslyze --regular www.yahoo.com:443 www.google.com "[2607:f8b0:400a:807::2004]:443"

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"

python -m sslyze --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.

python -m sslyze --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.

python -m sslyze --hsts url.de:443

Test auf StartTLS für SMTP oder XMPP Server

Gleiches gilt für XMPP oder SMTP Server.

python -m sslyze --starttls=smtp url

python -m sslyze --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.

Linux Dash - Schlanke Server Überwachung auf Ubuntu installieren

Es muss nicht immer Nagios, Icinga und Co sein. Um alle Daten eines Serversystems zu überwachen reichen einfachere Mittel.
Wenn auf den eigenen Systemen sowieso Apache oder Nginx installiert ist, reicht es oft Linux Dash zu verwenden.
Das Github Projekt zeigt die wichtigsten Linux Systemdaten auf einer eigenen Webseite an.

Dazu zählen unter anderem Benutzer, Prozesse, Laufzeit, RAM-Auslastung, Swap-Nutzung, Festplattenauslastung oder Netzwerkdaten.
Durch die schmale Programmierleistung eignet sich das Tool ebenfalls für  Raspberry Pi oder Banana Pi.

linux-dash

Die Server Übersicht ist recht schnell installiert vorausgesetzt ein LAMP Server ist bereits installiert und mit TLS konfiguriert (siehe Artikel)
Referenzsystem für die folgende Anleitung ist wie immer ein Ubuntu Server 14.04.

Linux Dash - Server Überwachung auf Ubuntu installieren

Benötigte Pakete installieren

sudo apt-get install git apache2-utils

Linux Dash herunterladen

cd /var/www/html
git clone https://github.com/afaqurk/linux-dash.git
sudo service apache2 restart

Im Prinzip könnte hier schon abgebrochen werden, da unter https://localhost/linux-dash die Server Übersicht bereits abrufbar ist.
Um das System abzusichern ist allerdings die Konfiguration von htaccess notwendig, da Linux Dash von Haus aus keine Nutzer Authentifizierung mitbringt.

Htaccess für Linux Dash aktivieren

sudo nano /etc/apache2/sites-available/default-ssl.conf

    <Directory /var/www/html/linux-dash>
        Options FollowSymLinks
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>

sudo nano /var/www/html/linux-dash/.htaccess

    AuthType Basic
    AuthName "Restricted Files"
    AuthUserFile /var/www/html/linux-dash/.htpasswd
    Require valid-user

Htaccess Benutzer anlegen

sudo htpasswd -c /var/www/html/linux-dash/.htpasswd user

    New password:
    Re-type new password:
    Adding password for user user

sudo service apache2 restart

Troubleshooting

htpasswd: command not found

Die apache2-utils wurden nicht installiert.

Fazit

Linux Dash bietet für interne Server das passende Werkzeug, um wichtige Serverdaten regelmäßig abzufragen. Durch die schlanke Oberfläche lassen sich wichtige Kennziffern schnell erkennen und eventuelle Probleme meistern.

Nach Tinder, Cuddlr folgt nun Bristlr - die App für Bartträger und deren Anhänger

Es war ja nur eine Frage der Zeit, bis der gemeine Hipster eine App für sein Statussymbol entwickelt, den Bart. Das Erkennungszeichen wuchert inzwischen durch ganz Europa. Nun hat ein findiger Engländer die passende App dazu entwickelt.

Via Browser, iPhone oder Android App können sich Menschen verabreden, die Bärte tragen, diese toll finden, anfassen möchten oder vielleicht sogar stutzen. Es bleiben quasi keine Wünsche offen, wenn das Gestrüpp erst einmal vermittelt wurde.

BristlrIrgendwie fehlt nun noch eine App für Brusthaar Fans, gibt es meines Wissens auch noch nicht, also Nix wie ran an die Tasten.

Bristlr

Let's Encrypt - Ein erster Blick auf die kostenlose Zertifizierungsstelle von Mozilla und der EFF

Mozilla, die Electronic Frontier Foundation und weitere wollen in Zukunft mit der Initiative "Lets Encrypt" sichere Server bereitstellen.
Genauer gesagt wollen sich die Partner als CA (Zertifizierungsstelle) in Stellung bringen, um kostenlose SSL/TLS-Zertifikate für Linux Server anzubieten.

Lets_Encrypt
Anders als bei bekannten Anbietern wie Cacert oder StartSSL, sollen bei "Lets Encrypt" zwei Linux Befehle ausreichen, um ein Zertifikat zu generieren es in den Server einzubinden und sofort live zu schalten.
Ob das klappt wird sich zeigen, denn bei den bereits bekannten Anbietern sorgte in der Vergangenheit oft die nicht vorhandene Akzeptanz der Browserhersteller für Probleme, auch die soll sich beim neuen Projekt ändern.


Laut eigenen Aussagen soll das Projekt im Sommer 2015 fertig gestellt werden, einen ersten Einblick konnte sich jeder beim C31c3 verschaffen.
Doch wie steht es momentan um das Projekt und wie soll es im Endeffekt funktionieren.
Eine Installation der bereits vorhandenen Skripte sollte einen ersten Einblick geben.
Referenzsystem ist ein Ubuntu 14.04 mit installiertem Apache.

Voraussetzung

Voraussetzung ist ein installierter Apache Server, mit einer Beispielseite, da Lets-encrypt automatisch eingerichtete Webseiten im Apache erkennt und konfiguriert.
Nginx und anderen Webserver werden in der jetzigen Entwickler Version leider noch nicht unterstützt.

Apache einrichten und Beispielseite konfigurieren

sudo apt-get install apache2
sudo touch /etc/apache2/sites-available/beispiel-le
sudo mkdir /home/beispiel
sudo touch /var/log/apache2/beispiel-access.log
sudo touch /var/log/apache2/beispiel-error.log

Die VirtualHosts Konfiguration sieht nach einer Grundeinrichtung wie folgt aus:

sudo nano /etc/apache2/sites-available/beispiel-le

<VirtualHost server:80>

 ServerName beispiel
 ServerAlias
 DocumentRoot /home/beispiel/
 ServerAdmin prontos@email.de
 CustomLog /var/log/apache2/beispiel-access.log combined
 ErrorLog /var/log/apache2/beispiel-error.log
 LogLevel warn

</VirtualHost>

Webseite aktivieren und Konfiguration neu laden

sudo a2ensite beispiel
sudo service apache2 reload

Testinstallation Lets Encrypt

Zunächst müssen die nötigen Pakete installiert werden.

sudo apt-get install python python-setuptools python-virtualenv python-dev gcc swig dialog libaugeas0 libssl-dev ca-certificates python-m2crypto python-augeas

sudo virtualenv --no-site-packages -p python2 venv

    Running virtualenv with interpreter /usr/bin/python2
    New python executable in venv/bin/python2
    Also creating executable in venv/bin/python
    Installing setuptools, pip...done.

Nun das Git Repository auschecken

sudo git clone  https://github.com/letsencrypt/lets-encrypt-preview.git

Die Python Umgebung verschieben

sudo mv /home/user/venv/ /home/user/lets-encrypt-preview/

Nun kann die eigentliche Installation gestartet werden


cd lets-encrypt-preview
sudo ./venv/bin/python setup.py install

    Installing easy_install-3.4 script to /home/user/lets-encrypt-preview/venv/bin
    Installing easy_install script to /home/user/lets-encrypt-preview/venv/bin

        Using /home/user/lets-encrypt-preview/venv/lib/python2.7/site-packages
        Finished processing dependencies for letsencrypt==0.1

Ist alles ohne Fehler verlaufen, kann LetsEncrypt ausgeführt werden.

sudo ./venv/bin/letsencrypt
        
     Generating key: /etc/apache2/ssl/key-letsencrypt_1.pem               
     x Performing the following challenges:                                 
     x   DVSNI challenge for name beispiel.                                 
     x Created an SSL vhost at                                              
     x /etc/apache2/sites-available/beispiel-le-ssl.conf                    
     x Ready for verification...                                            
     x Waiting for 3 seconds...                                             
     x Expected message (authorization) not received                        
     x Failed Authorization procedure - cleaning up challenges              
     x Cleaning up challenges for beispiel    
        

let-encryptlet-encrypt

Lets Encrypt passt die vorhandene Webseite so an, dass diese auf HTTPS hört und bindet zusätzlich eine TLS/SSL Konfigurationsdatei namens "options-ssl.conf" ein.
Ein Blick in die erzeugte VirtualHosts zeigt die Details.

sudo nano /etc/apache2/sites-available/beispiel-le-ssl.conf

<IfModule mod_ssl.c>
<VirtualHost 10.8.0.49:443>
 ServerName beispiel
 ServerAlias
 DocumentRoot /home/beispiel/
 ServerAdmin prontos@email.de
 CustomLog /var/log/apache2/beispiel-access.log combined
 ErrorLog /var/log/apache2/beispiel-error.log
 LogLevel warn
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
Include /etc/letsencrypt/options-ssl.conf
</VirtualHost>
</IfModule>

Ein weiterer Blick auf die eingebundene Zusatzkonfiguration zeigt typische Sicherheitseinstellungen für Apache Webserver, der ITrig Leser sollte diese bereits aus vergangenen Artikeln kennen.
SSL 2.0 und 3.0 sind deaktiviert, Kompression ist ausgeschaltet, es sind sichere CypherSuites hinterlegt, die Serversignatur ist deaktiviert, usw.

Hier die Konfiguration im Detail:


sudo nano /etc/letsencrypt/options-ssl.conf
    # Baseline setting to Include for SSL sites
    SSLEngine on
    # Intermediate configuration, tweak to your needs
    SSLProtocol             all -SSLv2 -SSLv3
    SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-     ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE$
    SSLHonorCipherOrder     on
    SSLCompression          off
    ServerSignature Off
    AcceptPathInfo Off
    AddOutputFilterByType DEFLATE text/html text/plain text/xml application/pdf
    AddDefaultCharset UTF-8
    SSLOptions +StrictRequire
    # Add vhost name to log entries:
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" vhost_combined
    LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common
    CustomLog /var/log/apache2/access.log vhost_combined
    LogLevel warn
    ErrorLog /var/log/apache2/error.log
    # Always ensure Cookies have "Secure" set (JAH 2012/1)
    #Header edit Set-Cookie (?i)^(.*)(;\s*secure)??((\s*;)?(.*)) "$1; Secure$3$4"

Troubleshooting

Fehlermeldung, wenn die Umgebung nicht richtig gefunden wurde.

sudo ./venv/bin/python lets-encrypt-preview/setup.py install

        running bdist_egg
        running egg_info
        creating letsencrypt.egg-info
        writing dependency_links to letsencrypt.egg-info/dependency_links.txt
        writing requirements to letsencrypt.egg-info/requires.txt
        writing letsencrypt.egg-info/PKG-INFO
        writing top-level names to letsencrypt.egg-info/top_level.txt
        writing entry points to letsencrypt.egg-info/entry_points.txt
        writing manifest file 'letsencrypt.egg-info/SOURCES.txt'
        error: package directory 'letsencrypt' does not exist

Fazit

Zum jetzigen Zeitpunkt ein Urteil zu fällen ist recht schwer. Die Installation ist noch im Entwicklungsstadium und wird, sobald das Projekt produktiv geht, sicherlich einfach von der Hand gehen. Mit den versprochenen zwei Befehlen "sudo apt-get install lets-encrypt" und "lets-encrypt webseitename" kann zwar bis jetzt noch nicht gearbeitet werden, dennoch lädt das Installationsskript automatisch das SSL Modul in den Apache und fragt nach der gewünschten HTTPS Seite. Die Sicherheitseinstellungen die automatisch eingebunden werden sind so gut wie up2date und könnten zu diesem Zeitpunkt belassen werden. (Bei CipherSuites gehen die Meinungen ja bekanntlich auseinander)

Die automatische Einbindung des Zertifikats hat bei disen Versuch nicht geklappt, was nicht weiter verwundert, da die Autorisierung fehlschlägt.

Schon jetzt kann jedoch behauptet werden, dass dieses Projekt wenn dann an der Browserintegration scheitern könnte und nicht an der Bedienung.

Das automatische Erneuern (renew) oder das Zurücknehmen von Zertifikaten (revoke) ist leider noch nicht funktionsfähig, genauso werden andere Webserver wie Nginx vermisst, aber bis zum Sommer ist auch noch etwas Zeit.

Um sich diese zu verkürzen kann das Installationsskript gerne selbst ausprobiert werden, aber bitte nicht auf Produktivsystemen.

github