LINUXMAKER, OpenSource, Tutorials

Viele Webserver und deren Webapplikation laufen mit Defaultkonfigurationen. Dabei wird die Chance verpasst, sich und die Besucher besser vor Angriffen zu schützen. Nur wenige Einstellungen erwarten eine wirklich tief gehende Kenntnis über deren Funktion und ermöglicht somit den meisten Admins recht einfach eine ordentlich robusten Webserver zu betreiben.

Die Konfigurationen sind in den Distributionen leider alle unterschiedlich strukturiert d.h. man sollte den Apache-Server schon etwas kennen gelernt haben. Letztlich hat man eine Apache-Konfiguration, die bei Debian und Ubuntu unter /etc/apache2/apache2.conf respektive explizit in /etc/apache2/conf-available/security.conf liegt. Bei RedHat/CentOS liegen die Dateien unter /etc/httpd/conf.d/httpd.conf. Dort sollten nur Apache relevante Einstellungen erfolgen, keine Modulkonfigurationen! Die Modulkonfigurationen wie z.B. TLS, Caching, FCGI usw. erfolgen in der Regel in den eigenen Konfigurationen. Doch nicht alle nötigen Einstellungen sind zwingen in diesen Dateien zu erfolgen, sondern können auch in einer VirtualHost speziell für eine Domain repektive Subdomian hinterlegt werden.

Apache Header

Per Default sendet der Apache stets seine Versionsnummer und gegebenenfalls die Module über den Header nach außen. Das ist für Angreifer die einfachste Einladung und sollte abgestellt werden. Mit der Option “Servertoken”, kann die Ausgabe gesteuert werden. Stellt daher den Servertoken auf "Prod", damit wird der Header des Dienstes auf die Ausgabe "Apache" reduziert. Die Version des Apaches kann man dennoch über Tools ermitteln, es erschwert nur die Erkennung und reduziert "DriveBy"-Angriffe.

Servertoken Prod

Apache Signatur

Völlig unnötig ist die Option “ServerSignature”. Sie gibt ebenfalls Versionsummern und bei Bedarf sogar die Mailadresse des hinterlegten ServerAdmins aus. Diese Ausgabe sollte man auch hier unterbinden.

ServerSignature off

Trace

Die Option TRACE wird für Test- und Diagnoseanfragen im Proxymodus gebraucht und hat nichts in öffentlichen Netzwerken zu suchen. Sollte man den Dienst nutzen wollen, dann sollte man ihn explizit absichern.

TraceEnable off

ProxyRequest

Wird der Apache als interner Proxy genutzt respektive ist das Proxy-Modul aktiviert, dann sollte die Option “ProxyRequest” deaktiviert werden. Denn sonst wird der Apache als Open-Proxy genutzt und fremde Inhalte aus dem Netz werden vom Apache ausgeliefert.

ProxyRequest off

Status

Status ist ein Modul, das auf einem Produktivserver keinen Sinn macht. Man kann mit dem Modul beispielsweise Sitzungsdaten auslesen und sollte nur abgesichert auf öffentliche Webserver genutzt werden. Ansonsten sollte es deaktiviert sind, wenn dasd MOdul nihct explizit benötigt wird. Der Regelbetrieb des Webserver wird nicht beeinträchtigt.

a2dismod status

TLS/SSL

Standardinstallationen haben meist kein TLS aktiviert. Wenn es aktiviert ist hat das Protokoll meist eine viel zu hohe Toleranz bei der Verschlüsselung, was wenig sinnvoll ist. Dieser kurze VirtualHost-Eintrag zeigt die Verwendung

# SSL SSLEngine on SSLProxyEngine on SSLHonorCipherOrder On # SSL - Protokoll/Chipher SSLProtocol ALL -SSLv2 -SSLv3 SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4" SSLCertificateFile /etc/apache2/ssl/<zertifikat>.crt SSLCACertificateFile /etc/apache2/ssl/<zertifikat>.bundle SSLCertificateKeyFile /etc/apache2/ssl/<zertifikat>.key

Die eigene Konfiguration läßt unter SSL Labs testen.

HSTS

Mit HTTP Strict Transport Security kann festgelegt werden, ob der Client/Browser die Domain nur via TLS ereichen soll. Nach der ersten Verbindung mit dem Server, wird im Client  die HSTS-Option gesetzt. Selbst wenn jetzt eine HTTP-URL der Domain geöffnet wird, wird automatisch auf der Clientseite auf HTTPS umgestellt. Diese Option reduziert die Möglichkeit, dass man per DNS Manipulationen dem Client eine gefälschte Seite angeboten werden kann. Diese Option benötigt zusätzlich das Header-Modul.

Header always append Strict-Transport-Security "max-age=31536000 includeSubDomains;"

Mit der Option sollte man vorsichtig handeln, da diese im globalen Kontext alle Internetseiten auf einem Apache dazu zwingen ein TLS Konfiguration anzubieten. Ist dem nicht so, wird der Client die Verbindung mit einem Fehler quittieren. Wer einige Domains in unterschiedlicher Konfiguration auf seinem Server hat, kann die Header-Anweisung auch gezielt in einer VirtualHost unterbringen. Die letzte Option in der obigen Header-Anweisung "includeSubDomains", sollte nur mit Bedacht gesetzt werden - sie ist optional.

Die Funktion HSTS geht sogar noch einen Schritt weiter: Mit der Option "preload" und einem Eintrag auf HSTSpreload, wird die Domain in einer HSTS-Preload-Liste der Browser hinterlegt - Damit ist die Domain, für Browser, nur noch via HTTPS erreichbar.

HTTPOnly Cookie

Damit gesetzte Cookies nicht von Scripten genutzt werden können, kann man im Apache einen entsprechenden Header setzen. Man reduziert damit merklich die Möglichkeit eines XSS Angriffs.

Header always edit Set-Cookie (.*) "$1; HTTPOnly; Secure"

OCSP

Online Certificate Status Protocol prüft, ob das vom Server ausgelieferte Zertifikat noch gültig ist. Ist dem nicht so, wird eine entsprechende Meldung an den Client gesendet. Die Prüfung des Zertifikates erfolgt, vom Webserver selbst, direkt beim CA-Aussteller via HTTP.  Gegebenenfalls benötigt die Firewall noch ein weiteres RuleSet für das OCSP-Protokoll.

SSLUseStapling on SSLStaplingResponderTimeout 5 SSLStaplingReturnResponderErrors off SSLStaplingCache shmcb:${APACHE_LOG_DIR}/ocsp(128000)

X-Frame-Options

Mit dieser Option lässt es sich unterbinden, dass die eigene Seite und teile davon in Frames dargestellt werden können. Damit verhindert man die Darstellung der eigenen Seite unter einer anderen Domain. Diese Sicherheitsoption ist in fast allen neueren Browser aktiviert, kann aber gezielt umgangen werden. Es ist eine Sicherheitsfunktion für den Browser-Nutzer. Diese Option benötigt ebenfalls das Header-Modul.

Header always append X-Frame-Options SAMEORIGIN;

Es gibt folgende Optionen:
DENY - Es ist verboten die Seite in einem Frame darzustellen.
SAMEORIGIN - Nur der eigene Domain ist dies erlaubt.
ALLOW-FROM - Mit Angabe welche Domain dies dürfen.

X-Content-Type-Options

Diese Option teilt dem Browser (InternetExplorer und Chrome) mit, dass er z.B. CSS-Dateien nur als solchen nutzen soll, wenn die Datei auch den entsprechenden MIME-Typ "text/css" entspricht - das gilt auch für Scripte.

Header set X-Content-Type-Options: "nosniff"