Artikel mit Tag script

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 Script - Selbstsigniertes SSL Zertifikat mit SHA256 erstellen und ausgeben

Anfang des Jahres hatte ich euch ein Skript bereitgestellt, welches selbst signierte Zertifikate generiert (siehe Artikel).

Nicht erst seit gestern ist es jedoch sinnvoll auf SHA2 umzustellen. Denn das alte SHA1 gilt seit einiger Zeit als unsicher. 

Übersicht SHA Funktionen

uebersicht_sha

Für euch heißt dies in Zukunft bei der Zertifikatsgenerierung auf SHA2 zu achten.

Selbstsigniertes SSL Zertifikat mit SHA256 erstellen

Im Prinzip muss der alte Befehl nur um einen weiteren Schlüssel "SHA256" oder "SHA512" ergänzt werden.

Unten seht ihr den Befehl, der eine privaten Serverschlüssel mit Zertifikatsanfrage erstellt und im gleichen Zug selbst signiert.

sudo openssl req -x509 -nodes -sha256 -days 1825 -newkey rsa:4096 -keyout server_256.key -out server_256.crt

Generating a 4096 bit RSA private key

...........................++

......................................................................++

writing new private key to 'server_256.key'

-----

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [AU]:DE

State or Province Name (full name) [Some-State]:NRW

Locality Name (eg, city) []:ITrig

Organization Name (eg, company) [Internet Widgits Pty Ltd]:ITrig

Organizational Unit Name (eg, section) []:Itrig

Common Name (eg, YOUR name) []:itrig.de

Email Address []:

Zertifikat auf SHA2 überprüfen

Natürlich lassen sich vorhandene oder soeben erzeugte Schlüssel auch auf ihren Inhalt überprüfen. In diesem Fall interessiert uns der SHA Wert.

sudo openssl x509 -noout -text -in server_256.crt

Certificate:

    Data:

        Version: 3 (0x2)

        Serial Number:

            fc:f8:7d:d9:cd:f7:e7:b5

        Signature Algorithm: sha256WithRSAEncryption

        Issuer: C=DE, ST=NRW, L=ITrig, O=ITrig, OU=Itrig, CN=itrig.de

        Validity

            Not Before: Dec 18 13:20:41 2014 GMT

border: none; padding: 0px;">

            Not After : Dec 17 13:20:41 2019 GMT

Damit ihr euch die Eingaben alle sparen könnt, hab ich das Script auf SHA256 angepasst, zusätzlich werden alle Daten am Ende zur Kontrolle ausgegeben.

SHA 256 Skript

Linux Script - Serverzertifikat erstellen und selbst signieren

Nicht nur auf Produktivsystemen, sondern schon im Testumgebungen und erst recht im Intranet ist eine sichere Datenübertragung zwischen Geräten wichtig. Dazu werden Zertifikate benötigt. Für die Erstellung solcher Bescheinigungen ist unter Linux eigentlich nur ein Einzeiler notwendig.

Da dieser recht lang sein kann und bei einem selbstsignierten Zertifikate noch eine weiter Zeile hinzukommt, habe ich es mal auf die schnelle zusammengeschrieben. Zunächst muss aber das benötigte Paket installiert werden.

sudo apt-get install openssl

Im Folgenden wird eine Zertifikatsanfrage "server.csr" und eine privater Schlüssel mit 4096 Bit erstellt.

Die Gültigkeit beträgt 1825 Tage. 

Zusätzlich sind diverse Eingaben notwendig, wobei der Common Name am wichtigsten ist. Hier muss entweder die richtige IP Adresse oder der Domainname des Servers angegeben werden.

Serverzertifikat erstellen 


openssl req -newkey rsa:4096 -outform PEM -out server.csr -keyout server.key -keyform PEM -days 1825 -nodes

Generating a 4096 bit RSA private key

.++.........................................++

writing new private key to 'server.key'

-----

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [AU]:US

State or Province Name (full name) [Some-State]:Hawaii 

Locality Name (eg, city) []:Honolulu

Organization Name (eg, company) [Internet Widgits Pty Ltd]:ITrig

Organizational Unit Name (eg, section) []:Test

Common Name (e.g. server FQDN or YOUR name) []:itrig.de

Email Address []:Mailadresse

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:

Serverzertifikat selbst signieren 

Nun haben wir den ersten Schritt hinter uns und sollten eine "server.key" und eine "server.csr" im Verzeichnis liegen haben. Letztere kann nun zur einer offiziellen CA gesendet werden, was allerdings Geld kostet. Alternativ kann diese, gerade für Testzwecke, auch selbst signiert werden. Mit dem folgenden Befehl erhalten wir als Ausgabe ein fertiges Zertifikat "server.crt", welches auf "itrig.de" ausgestellt. ist.

openssl x509 -req -days 1825 -in server.csr -signkey server.key -out server.crt

Signature ok

subject=/C=DE/ST=Hawaii /L=Honolulu/O=ITrig/OU=Test/CN=itrig.de/emailAddress=Mailadresse

Getting Private key

Insgesamt eine recht leichte Übung, dennoch hier das Ganze noch einmal als fertiges Script. Das fertige Skript muss nach dem herunterladen noch entpackt "unzip" und mit "sudo chmod +x" ausführbar gemacht werden.

Download Script Serverzertifikat erstellen

Wie ist der Ranking Score meiner Facebook Freunde ?

Bekannterweise schlägt die Plattform Facebook neue Freunde vor oder bewertet vorhandene aufgrund der Kommunikation. Aus all diesen Werten wird ein Ranking erstellt, welches zum Beispiel die Ergebnisse einer Freundesuche beeinflusst usw.

Arjun Sreedharan hat ein Script veröffentlicht, welches diesen Score auswertet.

facebook_ranking

Das Vorgehen ist denkbar einfach, dank intelligentem Lesenzeichen

  1. FB Ranking Button als Lesezeichen in der Lesezeichenleiste ablegen
  2. Auf Facebook einloggen und das Lesezeichen klicken
  3. Der Ranking Score wird angezeigt

Je niedriger die Werte desto besser das Ranking. Vergleichbar ist das mit der Länge der Kanten (Verbindungslinien) zwischen den einzelnen Freunden (Knoten).


pgBadger 4.0 - PostgreSQL Logs analysieren und auswerten

Ende Oktober ist Version 4.0 des PostgreSQL Datenbanken Log Analysierers pgBadger erschienen. Der Log Analyzer wurde komplett neu geschrieben und setzt nun auf Bootstrap als Framework für die Darstellung der generierten Reporte.

pgBadger

Das neue Auftreten des pgBadgers ist durchaus erfrischend und dank Registerkarten auch sehr übersichtlich gehalten. Das Tool kann als Alternative für Pgfouine angesehen werden, dieses dürfte den PostgreSQL Benutzern geläufig sein. Die Installation und Nutzung der Logauswertung ist denkbar einfach.

PGBadger in Ubuntu, Mint, ElementaryOS installieren

sudo wget -O pgbadger-4.0.tar.gz  http://sourceforge.net/projects/pgbadger/files/4.0/pgbadger-4.0.tar.gz/download

sudo tar xzf pgbadger-4.0.tar.gz

cd pgbadger-4.0/

sudo perl Makefile.PL

sudo make && sudo make install

sudo cp /etc/postgresql/9.1/main/postgresql.conf /etc/postgresql/9.1/main/postgresql.conf.orig

sudo nano /etc/postgresql/9.1/main/postgresql.conf

log_checkpoints = on
log_connections = on
log_disconnections = on
log_duration = on
log_line_prefix = '%t '
log_lock_waits = on                  
log_temp_files = 0

 

sudo service postgresql restart

sudo pgbadger /var/log/postgresql/postgresql-9.1-main.log

Danach ist im selben Verzeichnis unter out.html der vollständige Bericht zu finden. Welche Bereiche geloggt werden sollen und welche nicht, lässt sich natürlich individuell einstellen.