Cyberattacken: 10 Schritte um Deine Website zu schützen

Cyberattacken: 10 Schritte um Deine Website zu schützen

Tagtäglich werden unzählige Websites Ziel von Angriffen. Viele Website Betreiber kümmern sich nicht um die Sicherheit Ihrer Seiten, obwohl das eine extrem wichtige Aufgabe ist. Damit Du nicht (mehr) Ziel solcher Angriffe wirst, gibt es hier die wichtigsten Informationen um Angriffe vorzubeugen.

Es gibt unendlich viele Angriffsarten in diesem Bereich. Vielleicht bist Du selber schon einmal Opfer eines Angriffes geworden und bist jetzt hier um Deine Seite zu schützen. Man kann sich natürlich nicht gegen alles schützen, allerdings ist deine Seite deutlich sicherer, wenn Du die folgenden Schritte befolgst!

1. SSL Zertifikat

SSL Zertifikate bei Websites sind für die sichere Kommunikation zwischen Client und Server zuständig. Sichere (verschlüsselte) Verbindungen erkannt man an dem Schloss vor der Domain und dem voranstehenden https:// wie hier:

Außerdem bestätigen Zertifizierungsstellen, wie GlobalSign die Authentizität einer Domain/Website. Damit ist gewährleistet, dass es sich um eine echte Website handelt und nicht um eine Phising Seite o.ä.. Gerade bei Seiten mit Login solltest Du unbedingt immer darauf achten, dass dieses Schloss vor der Domain erscheint.

Wenn deine Website mit personenbezogenen Daten handelt, benötigst Du unbedingt ein SSL Zertifikat. Die Benutzung muss außerdem in den Datenschutzbestimmungen in einem entsprechenden Paragraph erwähnt werden. Mehr Infos dazu erhälst Du von deinem Datenschutzbeauftragten.

Um an ein solches Zertifikat zu gelangen, kannst Du dieses kostenpflichtig bei deinem Hoster kaufen. Alternativ kannst Du ein kostenloses Zertifikat von Let’s Encrypt generieren lassen. Wenn Du Plesk zum Verwalten deiner Hostings benutzt, kannst Du die Erweiterung kostenlos installieren und deine Domains und auch Mailserver schützen.

FunFact: Google zertifiziert seine Zertifikate selbst 😉

Weitere Informationen zu SSL Zertifikaten erhälst Du bei GlobalSign.

2. SQL Injection

SQL Injection bezeichnet den Angriff, fremden SQL Code in das serverseitige System des Servers zu schleusen. Dadurch kann der Angreifer Daten erlangen, manipulieren, löschen oder sogar Code auf dem Zielserver ausführen.

Hier ein kleines Beispiel. Ein MySQL-Statement lautet:

SELECT name, place, phone FROM index WHERE ID=4;

„4“ wurde durch eine Benutzereingabe in das SQL-Statement geschrieben und alles ist in Ordnung. Wenn jetzt allerdings die Benutzereingabe

4; UPDATE name SET place='irgendwo' WHERE ID=4

lautet, sieht das SQL-Statement folgendermaßen aus:

SELECT name, place, phone FROM index WHERE ID=4; UPDATE name SET place='irgendwo' WHERE ID=4;

Damit ist ein Update-Befehl in das Statement geschoben worden. So einfach hat der Angreifer einen Datensatz aus der Datenbank geändert. In diesem Beispiel wird zwar nur ein unwichtiger Wert verändert, allerdings lassen sich solche Angriffe auch auf beispielsweiße Passwortspalten und wichtige oder sensible Daten anpassen.

Sich vor SQL Injections zu schützen ist eine große Aufgabe und liegt nicht in der Hand jedes Website Betreibers. Wenn Du selber Datenbankapplikationen programmierst, solltest Du dir weitere Beiträge dazu im Internet, wie Diesen durchlesen. Wenn Du deine Website nur über Plugins verwaltest, solltest Du dir den Schritt Updates genau durchlesen.

Hier findest Du eine PHP 7.* Datenbankklasse, die gegen SQL Injections abgesichert ist und Du kostenlos für Deine Website benutzen kannst.

3. XSS (CORS)

XSS bedeutet Cross-Site-Scripting und ist ein Angriff, bei dem bösartiger Code bei den Clients ausgeführt wird. Wie es dazu kommt ist recht einfach: In einem Formular auf einer Website kann man natürlich ganz normalen Text schreiben. Nehmen wir an, wir haben ein Gästebuch bei dem der Text einfach auf der Website angezeigt wird, das heißt: die Benutzereingabe wird 1:1 in die Website geladen. Wenn der Angreifer allerdings statt einem Text JavaScript Tags mit Schadcode eingibt und dieser auf der Website eingebunden wird, wird er bei allen Benutzern im Browser ausgeführt. Das ist natürlich ein erhebliches Sicherheitsrisiko.

CORS steht für Cross-Origin Resource Sharing und kann solche Angriffe verhindern. Es verbietet (oder erlaubt) Verbindungen für bestimmte Scripte oder URLs. Deshalb solltest Du unbedingt deine CORS Konfiguration am Server überprüfen.

Da dieser Schadcode über Benutzereingaben auf den Server gelangen, ist es von Vorteil jede Benutzereingabe zu prüfen. Dabei solltest Du von Blacklists absehen. Bei Blacklists werden alle Benutzereingaben abgelehnt, die auf dieser Liste stehen. Da Du aber nie wissen kannst, welcher Angriff benutzt wird ist es sinnvoller Whitelists zu programmieren. Das bedeutet, dass Du nur Benutzereingaben zulässt die in dieser Liste stehen.

Weitere Infos zu CORS findest Du hier.

4. DDOS Protection

DDOS steht für Distributed-Denial-of-Service und ist ein Angriff, bei dem durch Überlastung der Server in die Knie gezwungen wird. Das geschieht, da ein rießen Rechnernetzwerk (Botnets) den Server mit Verbindungen „zuspammen“.

Quelle: https://de.wikipedia.org/wiki/Denial_of_Service#/media/File:Stachledraht_DDos_Attack.svg

Glücklicherweise gibt es Dienste die solche Angriffe unterbinden können. Ein Anbieter ist z.B. Cloudflare. Meist sind diese Dienste allerdings kostenpflichtig. Deshalb solltest Du Dir gut überlegen, ob Du Schutz gegen DDOS Angriffe benötigst.

5. Passwörter

Dieser Schritt ist für jeden wichtig. Nicht nur Administrator, sondern auch Privatpersonen sollten auf sichere Passwörter achten. Dazu gehören Groß- und Kleinbuchstaben, Zahlen, Ziffern und Sonderzeichen. Dazu sollten Passwörter meiner Meinung nach mindestens 8 Zeichen und länger sein.

Wenn Du sichere Passwörter gewählt hast, ist es in meinen Augen auch nicht wichtig, diese regelmäßig zu ändern. Da man dann über eine große Anzahl an Passwörtern hast und diese nur schwer zu merken sind, kann man sich das Leben mit Passwort-Managern wie KeePass erleichtern.

6. Session Management

Bei Logins werden Sessions benötigt, um zu wissen welcher Nutzer angemeldet ist und alle Dienste bereitzustellen. Dazu werden Session Daten gespeichert um einen Nutzer eindeutig zu identifizieren. Früher wurden diese oftmals an der URL angehängt:

https://example.com/dashboard?sid=89234nFJK98nkdf823njkFsdn387$

Wenn man nun diesen Link verschickt, um Bekannten diese Seite zu zeigen, ist dieser direkt eingeloggt. Die Session ID wurde mit übermittelt und der Server denkt, es handelt sich um den gleichen Benutzer. Bei Bekannten ist das im Normalfall nicht so schlimm. Aber stell Dir mal vor, du teilst diesen Link in einem sozialen Netzwerk…

Deshalb ist man schon vor vielen Jahren zu dem Schluss gekommen, eine andere Lösung zu finden. Deshalb findet man heute eigentlich nur noch Links die so aussehen:

https://example.com/dashboard

Hier ist die Session ID in einem Cookie gespeichert, der nur im temporären Speicher des Nutzers liegt. Andere die den Link aufrufen, haben somit keine Möglichkeit seine Session zu übernehmen.

Wenn Du also deine Session umsetzt, behalte diese Information im Hinterkopf. 🙂

7. Öffentliche Informationen

Es gibt Informationen, die gehören nicht an die Öffentlichkeit. Bei Websites zählen dazu z.B. die PHP Version und der Dateipfad der Website.

Um das zu verdeutlichen, habe ich hier ein sehr aufschlussreiches Beispiel. Mit Google habe ich die Möglichkeit nicht nur nach bestimmten Suchbegriffen, sondern auch mit Parametern z.B. nach Dateiendungen und Zitaten zu suchen. So kann ich mit dieser Suche mir Seiten ausgeben lassen, die eine phpinfo-Datei öffentlich zugänglich haben. In dieser Datei wird die komplette PHP Konfiguration eines Servers offen gelegt und wir erhalten viele interessante Infos zum Server.

Dazu habe ich das in die Google Suche eingegeben:

ext:php intitle:phpinfo

Mit dieser Suche habe ich ca. 12.000 Ergebnisse bekommen. Eines der ersten Suchergebnisse lieferte mir dieses Ergebnis:

Darunter folgen noch hunderte Zeilen mit allen PHP Einstellungen. Das ist natürlich hier ganz fatal, da dieser Server noch mit der PHP Version 4.4.2 läuft. Bereits seit 2008 ist der Support und die Weiterentwicklung dieser PHP Version eingestellt und enthält schwerwiegende Sicherheitslücken.

Quelle: https://de.wikipedia.org/wiki/PHP#PHP_4

Diese sensiblen Dateien solltest Du also unbedingt nach Gebrauch löschen oder mit einem Passwort (z.B. über eine .htaccess Datei) schützen.

Außerdem solltest Du darauf achten, dass deine display_errors Variable auf Live-Systemen auf Off steht, denn auch dort erhalten Angreifer Informationen über das interne Dateisystem. Noch schlimmer ist es bei Datenbankfehlern. Hier werden im schlimmsten Fall die Zugangsdaten ausgegeben. Das sollte unbedingt verhindert werden. In deinen PHP Einstellungen kannst Du stattdessen festlegen, dass Fehlermeldungen in eine Log Datei geschrieben werden sollen.

8. Validierung

Das Thema Validierung ist ein großes Gebiet und für Entwickler interessant und sogar essentiell. Bei Validierung handelt es sich darum, Daten die vom Client zum Server geschickt werden nach bestimmten Regeln zu überprüfen, zu validieren. Dabei werden nicht zulässige Benutzerdaten zurückgewiesen, da diese auch Schadcode enthalten können. Dieser Schritt ist auch gegen XSS Angriffe wichtig.

Gerade, wenn Daten in eine Datenbank geschrieben werden, ist Validierung noch wichtiger. Hierdurch können sogar Serverbefehle ausgeführt werden. Im schlimmsten Fall sogar Daten gelöscht werden oder Server heruntergefahren werden. Diesen Angriff nennt man SQL Injection.

Damit deutlich wird, was ich mit Validierung meine, hier ein Beispiel in PHP:

<?php
$id = $_GET["id"];
$type = $_GET["type"];


// if id is not a number
if(!is_numeric($id)) {
	exit("id not valid");
}

// type must be one of the following strings
$types = array("slow", "slower", "normal", "fast", "faster");
if(!in_array($type, $types)) {
	exit("invalid type");
}

// Parameters successfully validated
// Code goes here

exit("success");
?>

Hier werden die Parameter id und type als GET Parameter übergeben. Das Skript wird abgebrochen, wenn id keine Nummer ist oder type nicht in der Whitelist $types steht. Das Skript wird durch exit() beendet. Sollten die Bedingungen nicht zutreffen, kann der restliche Code ausgeführt werden.

9. Updates

Fast jede Website hat als Basis ein CMS (Content-Management-System), wie WordPress, Drupal oder Joomla. In regelmäßigen Abständen gibt es Updates, um die Sicherheit zu gewährleisten. Und das ist nicht einfach so daher gesagt. Immer wieder werden neue Sicherheitslücken gefunden und möglichst schnell von den Entwickler geschlossen. Aus diesem Grund sollte deine CMS Installation immer auf dem neusten Stand sein. Bei den meisten CMS kannst Du E-Mail Benachrichtungen einstellen, um über neue Updates informiert zu werden. Das solltest Du nutzen und in regelmäßigen Abständen nach Deinen Seiten schauen.

Das gleiche gilt für die installierten Plugins. Vorhanden Updates solltest Du regelmäßig installieren.

Weiterhin sollte dein Host System immer auf dem aktuellsten Stand sein. Schau nach, dass Du das aktuellste Linux (oder Windows), PHP und MySQL installiert hast. Auch hier werden regelmäßig gepatchte Versionen rausgebracht um die Sicherheit der Benutzer zu gewährleisten.

Bevor Du Deine Seite und Plugins jedoch auf den neusten Stand bringst, solltest Du vorher ein Backup anlegen, falls beim Update etwas schief laufen sollte und Du den alten Stand wieder einspielen musst.

10. Backups

Regelmäßige Backups tragen auch zur Sicherheit Deiner Website bei. Wenn Du heute feststellst, dass Deine Seite kompromittiert wurde, kannst Du ganz einfach auf einen alten Stand zurückspringen und Updates ausführen um die Sicherheitslücken zu schließen.

Je nach dem welches Serversystem Du einsetzt kannst Du Backups konfigurieren. Viele Hoster bieten regelmäßige Snapshots kostenlos oder gegen Aufpreis an. Wenn Du Deine Hostings über Plesk verwaltest, kannst Du dafür z.B. den Backup-Manager benutzen oder direkt ein Shell-Script erstellen, welches Verzeichnisse, wie /var/www/vhosts auf einen externen Backup-Storage sichert. Dein Hoster ist Dir bestimmt bei der Wahl der richtigen Backup Lösung behilflich.

Fazit

Wie Du siehst gibt es viele mögliche Schwachstellen an einer Website, die die Sicherheit gefährden. Wenn Du allerdings diese Schritte beherzigst, ist die Gefahr für einen erfolgreichen Angriff deutlich niedriger. Wenn man sich Statistiken anschaut, wie viele Websites gehackt sind, denke ich, dass viele Website Betreiber die Sicherheit auf die leichte Schulter nehmen. Aber Du bist jetzt schlauer und begehst diese Fehler nicht.

Wenn Du noch weitere Tipps oder Feedback hast, lass es mich gerne in den Kommentaren wissen! 🙂

Beteilige dich an der Unterhaltung

1 Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.