Websites sicher betreiben – Teil 1

Hundertprozentige Sicherheit im Internet lässt sich wohl kaum jemals erreichen. Sie können das Risiko von Angriffen jedoch erheblich minimieren, wenn Sie ein paar grundlegende Regeln befolgen. Ich gebe Ihnen einige Tipps an die Hand, wie Sie den Betrieb Ihrer Website sicherer gestalten.

Passwörter und Benutzernamen

Regel Nummer 1 für den sicheren Betrieb einer Website sind starke Passwörter und sichere Benutzernamen. Erstaunlich häufig werden bei Websites, die einen Online-Administrationsbereich zur Verfügung stellen, schwache Passwörter und Benutzernamen verwendet. Im schlimmsten Fall ist es die Kombination: Benutzername = admin, Passwort = admin. Aber auch Konstellationen aus Vor- und Nachnamen, Hobbys, Geburtsdatum, Nummernschildern etc. sollten nicht gewählt werden. Angreifer versuchen über Informationen die über Sie zugänglich sind, Passwortlisten zu generieren, über die automatisiert ein Login versucht wird. Die Erfolgsquote ist dabei erstaunlich hoch.

Passwortmanager

Beim Betrieb einer oder mehrerer Websites haben Sie sehr schnell eine Menge an Passwörtern zu verwalten, die im Idealfall alle kryptisch sind. Um diese sicher auf dem lokalen Rechner abzulegen, empfiehlt sich der Einsatz eines Passwortmanagers. Damit können Sie komplexe, unterschiedliche Passwörter generieren und verschlüsselt abspeichern.

Mitarbeitern nur notwendige Rechte und Passwörter geben

Meistens arbeiten mehrere Mitarbeiter und externe Dienstleister an einer Website. In den seltensten Fällen brauchen alle Beteiligten sämtliche Zugangsdaten und Berechtigungen. Nutzen Sie die Möglichkeit, den Berechtigten verschiedene Nutzerrollen mit entsprechend abgestuften Berechtigungen zuzuweisen.

Weitergabe von Zugangsdaten

Ein großes Risiko birgt das Versenden von Zugangsdaten.

Oft wird vergessen, dass eine gewöhnliche E-Mail unverschlüsselt übertragen wird. Das Abgreifen von Zugangsdaten ist für Angreifer hier besonders leicht. Auf diesen Übertragungsweg sollte bei Passwörtern am besten ganz verzichtet werden. Sollte es dennoch nötig werden, Zugangsdaten zu versenden, so verteilen Sie die Daten zumindest auf verschiedene Kanäle. Den Benutzernamen und die Login-URL z.B. über eine E-Mail, das Passwort per SMS.

Nach Versand sollten Sie den Empfänger nach Möglichkeit darum bitten, für sich ein neues Passwort zu erstellen und dieses sicher abzuspeichern.

Backups der Website durchführen

Nicht nur aus sicherheitstechnischen Gründen sollten immer automatisierte Backups aller Daten und der Website-Datenbank durchgeführt werden. Stellen Sie sich nur vor, Sie verlieren durch einen Angriff, einen Programmierfehler alle Daten und müssen Ihre Website komplett neu erstellen.

Bei Backups der Website kann Ihnen Ihr Webhoster behilflich sein.

Testsystem

In der Entwicklung von komplexen Webanwendungen ist es üblich, Änderungen in verschiedenen Stufen freizugeben und diese zu testen. Details gehen zu weit in die Softwareentwicklung, was sich aber für jedermann empfiehlt, ist ein Testsystem, eine Kopie Ihrer Website auf einer Subdomain mit Passwortschutz.

Darüber können Sie z.B. neue Features, Plugins und Updates testen, ohne einen Totalausfall Ihrer aktiven Website zu riskieren.

Dateiabgleich auf dem Webserver

Prüfen Sie automatisiert, ob sich Dateien auf dem Webserver verändert haben.

Bei den meisten Websites kommen heutzutage Content-Management-Systeme (CMS) zum Einsatz. Die Prüfung einzelner Dateien von Hand würde einen zu hohen Aufwand bedeuten. Für den Abgleich eignen sich Programme, die neue bzw. geänderte Dateien auflisten.

Unerlaubte Modifizierungen des Datenbestandes fallen Ihnen dabei sofort auf.

Logfiles überprüfen

Gerade automatisierte Angriffe, die Ihre Website auf bekannte Schwachstellen abchecken, verursachen eine Menge verdächtiger Zugriffe.

Diese Zugriffe werden von Ihrem Webserver protokolliert. Mit entsprechenden Tools lassen sich diese Logfiles überwachen und informieren Sie bei verdächtigen Einträgen per E-Mail.

Sichere Übertragung von Daten mit SSL/https

Ein normaler Zugriff auf eine Website mit http:// ist unverschlüsselt. Jeder kann die Kommunikation mitschneiden, auswerten und zu seinen Gunsten manipulieren. Viele kennen den Sinn von SSL in Verbindung mit Formularen. So werden vom Nutzer eingegebene Daten verschlüsselt übertragen und können nicht über WLAN, Router und Netzwerkknoten ausgelesen werden. Ich habe es schon oft erlebt, dass Websites SSL erst dann einschalten, wenn Daten über ein Formular übertragen werden.

SSL hat aber einen weiteren wertvollen Zweck. Mit SSL wird garantiert, dass beim User genau die Informationen ankommen, die vom Server gesendet werden. Das können Cookies, JavaScript oder der HTML-Quelltext der Website sein. Stellen Sie sich vor, ein User der Ihre Website besucht, bekommt Werbung eingeblendet, die nicht von Ihnen, sondern vom Betreiber eines offenen WLAN stammt.

Dieses Szenario wird durch SSL unterbunden.

Verschlüsselte Passwörter in Datenbanken

Zugangsdaten müssen auf dem Server gespeichert werden. Für gewöhnlich wird dies in einer Datenbank umgesetzt. Auf diese Datenbank haben verschiedene Personen Zugriff, die damit auch die Passwörter Ihrer Nutzer auslesen können. Dazu gehören z.B. Mitarbeiter des Webhosters und die meisten Ihrer Entwickler. Da Passwörter grundsätzlich sehr sensible Informationen sind, sollten diese immer verschlüsselt gespeichert werden. Gängige CMS-Systeme unterstützen das Hash-Verfahren MD5. Dabei werden logische Abbildungen von Passwörtern erstellt und abgespeichert, ohne die Passwörter selbst auf dem Server abzulegen. Da MD5 mittlerweile nicht mehr als sicher gilt, wird vor der Verschlüsselung ein zusätzlicher Salt-Wert – eine Kette von Zufallszeichen – erzeugt und an das Passwort angehängt. Bei der Installation eines CMS sollten Sie diesen Salt-Wert anpassen bzw. generieren lassen.

SQL-Injection

SQL-Injection ist ein Angriff auf SQL-Datenbanken, der es zum Ziel hat, Datenbank-Abfragen zu manipulieren. Durch das Eingeben von zusätzlichen Befehlen in ein Formularfeld oder in einer URL, kann eine Datenbankabfrage verändert werden. Je nach Abfragetyp bekommt der Angreifer Zugriff auf die komplette Datenbank und kann Informationen auslesen, manipulieren oder löschen. Bekannte SQL-Injection-Angriffe kommen vor allem bei gängigen Open Source Lösungen, aber auch bei älteren, ungepatchten Webprojekten vor. Sensibilisieren Sie Ihre Entwickler dafür, ein Verfahren zur Prüfung von SQL-Abfragen einzurichten und achten Sie immer darauf, dass Sie stets die aktuellste Version eines CMS oder Online-Shops nutzen.

Spielen Sie vorhandene Updates zeitnah ein.

Administrationsbereich schützen

Bei Websites ist es üblich, dass diese über den Browser verwaltet werden. Zu diesem Zweck gibt es einen Verwaltungs- bzw. Administrationsbereich, der über eine URL erreichbar ist. Bei gängigen CMS wie Joomla, WordPress, Contao und anderen, ist es ein Leichtes, diese URL herauszufinden und aufzurufen. Natürlich muss sich ein potenzieller Angreifer noch einloggen können, um Zugriff zu erhalten.

Sollte dem Angreifer aber schon der Benutzername bekannt sein, könnte über eine Passwortliste ein erfolgreicher, unerlaubter Login erfolgen.

Schützen Sie den Administrationsbereich zusätzlich mit einem Verzeichnisschutz. Dieser Baustein ist ein zusätzlicher Passwortschutz vor dem eigentlichen Login, ohne „Passwort vergessen“ Funktion. Dadurch kann der Angreifer nicht ermitteln, ob ein Benutzername (z.B. eine E-Mail-Adresse) zu einem Nutzer passt.

Zusätzlich sollten Sie beim Login die Anzahl der Fehlversuche beschränken und eine IP-Adresse, die verdächtig viele Anmeldeversuche verzeichnet, entsprechend sperren.

Regelmäßige Updates

Führen Sie immer regelmäßig und zeitnah Sicherheitsupdates durch.

Bei gängigen CMS werden geschlossene Sicherheitslücken bei jedem Update veröffentlicht. Dies bedeutet, wenn Systeme ungepatcht bleiben, dass Angreifer alle veröffentlichten Sicherheitslücken kennen und diese gezielt angreifen können. Je länger ein Update zurück liegt, umso mehr bekannte Sicherheitslücken liegen vor.

Erweiterungen („Plugins“)

Wenn Ihre Website auf einem CMS oder einem Framework basiert, wird es immer Erweiterungen geben, die Sie entweder kostenlos oder gegen eine Gebühr nutzen können. Die Verlockung ist groß, vor allem die kostenlosen Plugins einzusetzen.

Bitte nutzen Sie nur aktuelle Erweiterungen, die mit der neuesten Version Ihres CMS kompatibel sind. Prüfen Sie auch die Seriosität des Entwicklers. Hat der Entwickler eine Website? Wird Support angeboten? Laden Sie sich Ihre Erweiterungen von vertrauenswürdigen Plattformen herunter. Lassen Sie die Erweiterung von einem Entwickler prüfen, um ganz sicher zu gehen. Die Erweiterung hat Zugriff auf die Datenbank und Ihre Dateien auf der Website, sie stellt eventuell Formulare zur Verfügung und führt Datenbankabfragen durch.

Die meisten Sicherheitslücken finden sich nicht im eigentlichen CMS, sondern in seinen Erweiterungen.

Automatisierte Sicherheitstests bei Websites (Web Penetration Tester)

SQL-Injection, XSS (Cross Site Scripting), CSRF (Cross Site Request Forgery), DOM-based XSS, Directory Traversal – alles Fachbegriffe, die Möglichkeiten für einen unautorisierten Zugriff auf eine Website beschreiben. Hinzu kommen noch die vielen bekannten CMS-spezifischen Schwachstellen.

Sie können einen Penetrations-Tester damit beauftragen, automatisierte Scans Ihrer Website von außen durchzuführen. Solche Tests decken einen Großteil der potenziellen Sicherheitslücken auf. Besonders wichtig können diese Scans sein, wenn neue Features programmiert wurden, nach Implementierung neuer Erweiterungen oder nach einspielen von Updates.

Für den BvD-Blog, Alexander Heit

 

……………….

Alexander Heit ist technischer Leiter bei der H&N IT-SERVICES UG mit den Schwerpunkten:

Server-Administration unter Linux, Webentwicklung, Kundenberatung und Betreuung von Webprojekten

E-Mail: alexander.heit@hn-websolutions.com

Internet: www.hn-websolutions.com