Heutzutage werden nur mehr selten Betriebssysteme direkt angegriffen, da
sind die gängigen Firewalls zu gut, aber über Applikationen werden
dafür umso mehr (Web-)Server attackiert.
Häufige Einfallstore sind z. B. schlecht gewartete
WordPress-Installationen (wenn man da nicht jemanden hat, der täglich
überprüft, ob es sicherheitsrelevante Updates gibt und diese dann
auch sofort installiert, …) oder nicht upgedatete PHP-Versionen - bitte
beachten Sie, dass Sie nur (vom Hersteller und Ihnen) gewartete Systeme ans
Netz der TU Graz anschließen dürfen und dass wir schlecht gewartete
Systeme nach Vorwarnung und bereits gehackte Systeme sofort vom Netz nehmen.
Auch wenn es teilweise in Richtung „security through obscurity“ geht, wird noch immer empfohlen z. B. die Version des Webservers etc. nicht zu verraten, hier am Beispiel Apache veranschaulicht:
RequestHeader unset Proxy
RequestHeader unset Proxy_Host
RequestHeader unset Proxy_Port
RequestHeader unset Proxy_User
RequestHeader unset Proxy_Pass
RequestHeader unset Proxy_Password
ServerTokens ProductOnly
ServerSignature Off
TraceEnable Off
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
Verschlüsselung alleine ist aber nicht genug, es muss sich um vertrauenswürdige Verschlüsselung nach dem Stand der Technik handeln und dafür sind mehrere Dinge notwendig, u. a. ein offizielles Zertifikat und einige wichtige Einstellungen am Web-Server:
SSLEngine on
SSLProtocol -all +TLSv1.3 +TLSv1.2
SSLCipherSuite 'EECDH+AESGCM:EDH+AESGCM'
SSLHonorCipherOrder on
Weitere Einstellungen finden Sie z. B. auf cipherli.st, dabei
sollten Sie aber überprüfen, ob Ihre Benutzer dadurch
nicht ausgesperrt werden.
<VirtualHost *:80>
ServerName NAME.tugraz.at
Redirect permanent / https://NAME.tugraz.at/
</VirtualHost>
<VirtualHost NAME.tugraz.at:443>
ServerName NAME.tugraz.at
SSLCACertificateFile /pfad/zu/den/certs/geant.crt
SSLCertificateFile /pfad/zu/den/certs/NAME.crt
SSLCertificateKeyFile /pfad/zu/den/certs/NAME.key
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
…
</VirtualHost>
geant.crt braucht man nur dann, wenn das in NAME.crt nicht enthalten ist.
Bei den folgenden Einstellungen müssen Sie überprüfen, ob dann
noch alles funktioniert (z. B. Frames,
SSI, externe Inhalte etc.)
und sonst einzelne Zeilen auskommentieren:
Header always set X-Frame-Options "sameorigin"
Header always set X-XSS-Protection "1; mode=block"
Header always set X-Content-Type-Options nosniff
Header always set Content-Security-Policy "default-src 'mailto' 'self'"
Eine Alternative könnte z. B. auch so ausssehen:
Header always set Content-Security-Policy "default-src 'mailto' 'unsafe-inline' 'self' https://www.youtube.com;"
SSLStaplingCache shmcb:/tmp/stapling_cache(128000)
SSLUseStapling on
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors off
Das „Pinning“ selbst ist eigentlich recht einfach.
Header always set Referrer-Policy same-origin
Header always set Feature-Policy "geolocation 'self'"
Unter Can I Use… (→ Show all) kann man überprüfen, welche Clients man aussperrt, wenn man bestimmte Versionen von SSL/TLS nicht mehr unterstützt.
Man kann sich das - wenn man sehr viele virtuelle Server hat - vereinfachen,
indem man sich z.B. 2 Dateien tls.conf und
hardening.conf anlegt und diese dann
einfach in jedem virtuellen Server einbindet:
<VirtualHost NAME.tugraz.at:443>
ServerName NAME.tugraz.at
Include conf/tls.conf
SSLCACertificateFile /pfad/zu/den/certs/geant.crt
SSLCertificateFile /pfad/zu/den/certs/NAME.crt
SSLCertificateKeyFile /pfad/zu/den/certs/NAME.key
Include hardening.conf
…
</VirtualHost>
Durch einen Bug in OpenSSL ist es derzeit nicht möglich in name based virtuellen Servern unterschiedliche Cipher-Suites zu definieren, es wird immer die erste Cipher-Suite in der Konfig-Datei verwendet!
STIGs
(DISA /
(DoD).
CIS Benchmarks.
Apache Security Hardening Guide.
Header-Checks Security Headers, SSL Labs (Qualys), ImmuniWeb.
Neben der Voraussetzung, dass der Webserver möglichst sicher
aufgesetzt sein sollte (eine Aufgabe, die laufend durchzuführen ist,
es werden immer wieder Schwachstellen entdeckt, die dann geschlossen werden
müssen), ist natürlich auch bei den Anwendungen darauf zu achten,
dass sie sicher umgesetzt werden.
Das OWASP
führt 2 Listen für die am meisten ausgenutzten Schwachstellen:
Jede neue Anwendung sollte in Richtung dieser Schwachstellen überprüft werden.