Sicherheitscheckliste für Webentwickler

05. Juli 2017

Veröffentlicht in:

Webentwicklung

Was Sie für einen wirklich sicheren Internetservice beachten sollten

Die Entwicklung sicherer und robuster Webservices ist kein Kinderspiel. Es gilt, die Anwendung vor allerlei Gefahren und Angriffen zu schützen. Basierend auf unseren praktischen Erfahrungen haben wir eine List von Punkten zusammengestellt, die es Webentwicklern einfacher machen soll, die Sicherheit Ihrer Services zu überprüfen. Diese Liste ist noch weit davon entfernt, vollständig zu sein, aber sie ist ein Anfang.

Datenbank

  • Verschlüsseln Sie Benutzerdaten wie Zugriffstoken, E-Mail-Adressen oder Abrechnungsdetails, soweit dies möglich ist (dies schränkt allerdings die Möglichkeit zur Abfrage exakter Übereinstimmungen ein).
  • Wenn Ihre Datenbank eine kostengünstige Verschlüsselung wie AWS Aurora unterstützt, dann aktivieren Sie diese, um Daten auf Festplatte zu sichern. Vergewissern Sie sich, dass alle Backups auch verschlüsselt gespeichert sind.
  • Vergeben Sie für das Benutzerkonto, mit dem Sie auf die Datenbank zugreifen, nur minimale Berechtigungen. Verwenden Sie das Datenbank-Root-Konto nicht und überprüfen Sie die Datenbank regelmäßig auf unbenutzte Konten und Konten mit schwachen Passwörtern.
  • Speichern und verteilen Sie sensible Daten mit einem geeigneten Schlüsselspeicher. Vermeiden Sie jegliche Spur dieser Daten im Quellcode Ihrer Anwendung.
  • Verhindern Sie SQL-Injections, indem Sie nur vordefinierte (prepared) SQL Anweisungen zulassen.

Entwicklung

  • Stellen Sie sicher, dass alle Komponenten Ihrer Software auf Schwachstellen gescannt werden. Kontrollieren Sie jede Version, die für die Veröffentlichung gedacht ist. Continous Delivery ist eine geeignete Technik zur Verbesserung des Softwareauslieferungsprozesses.
  • Lassen Sie für Entwicklungssysteme die gleiche Sorgfalt walten, mit der Sie Ihre fertigen Produkte überpüfen. Verwenden Sie nur gesicherte und isolierte Entwicklungssysteme.

Authentifizierung

  • Stellen Sie sicher, dass alle Passwörter mit entsprechender Verschlüsselung wie bcrypt gehasht werden. Versuchen Sie nicht, einen eigenen Verschlüsselungsalgorithmus zu entwickeln.
  • Verwenden Sie Best-Practices und bewährte Komponenten für Routineaufgaben wie Login, Passwortanforderung und Passwortrücksetzung. Entwickeln Sie auch hier keine eigene Lösung; die Gefahr, einen entscheidenden Fehler zu machen, ist zu groß.
  • Implementieren Sie einfache, aber adäquate Kennwortregeln, die Benutzer dazu ermutigen, lange, zufällig zusammengesetzte Passwörter zu benutzen.
  • Verwenden Sie Multifaktor-Authentifizierung für Ihre Anmeldungen bei allen Diensteanbietern.

Schutz vor Denial of Service Attacken

  • Vergewissern Sie sich, dass DOS-Angriffe auf Ihre APIs Ihre Website nicht lahmlegen können. Verwenden Sie CAPTCHA auf allen Front-End-APIs, um Back-End-Dienste gegen DOS zu schützen.
  • Legen Sie vernünftige Datenlimits für Daten und Anfragen von Nutzern fest.
  • Mildern Sie Auswirkungen einer Distributed Denial of Service (DDOS) Attacke mit einem globalen Caching-Proxy-Service wie CloudFlare ab. Dies kann eingeschaltet werden, wenn Sie Opfer eines DDOS-Angriffs werden. In der übrigen Zeit kann dieser Service als DNS-Lookup fungieren.

Web Traffic

  • Verwenden Sie TLS (Transport Layer Security )für die gesamte Website, nicht nur für Anmelde- und Antwortformulare.
  • Cookies müssen sicher, httpOnly und in Ihrem Geltungsbereich genau definiert sein.
  • Verwenden Sie CSP (Content Security Policy), um XSS-Angriffen vorzubeugen. Die Konfiguration ist ein wenig mühsam aber lohnenswert.
  • Verwenden Sie X-Frame-Options und X-XSS-Protection-Header in Client-Antworten.
  • Nutzen Sie HSTS-Antworten verwenden, um lediglich TLS-Zugriffe zuzulassen. Leiten Sie alle HTTP-Anfragen auf einen HTTPS-Server um.
  • Verwenden Sie CSRF-Token für alle Formulare und implementieren Sie den SameSite Cookie Response Header, um CSRF-Token auch in allen neueren Browser zuzulassen.

API's

  • Stellen Sie sicher, dass keine Ressourcen in Ihren öffentlichen APIs aufzählbar sind.
  • Stellen Sie sicher, dass die Benutzer bei der Verwendung Ihrer APIs vollständig authentifiziert und autorisiert sind.
  • Schützen Sie APIs vor einem Buffer Overflow, um illegale oder abnormale Anfragen zu erkennen, die Angriffe hindeuten können.

Validierung und Codierung

  • Nutzen Sie clientseitige Eingabe-Validierung für schnelle Benutzer-Feedbacks, aber vertrauen Sie Ihr nicht blind. Validieren Sie Benutzereingaben vor der Anzeige.
  • Bestätigen Sie jedes letzte Bit der Benutzereingabe mithilfe von serverseitigen White Lists. Verwenden Sie keine nicht vertrauenswürdigen Benutzereingaben in SQL-Anweisungen.

Cloud-Konfiguration

  • Stellen sie sicher, dass nur wirklich benötigte Ports offen sind. Verwirrung ist zwar kein wirklich wirksamer Schutz gegen Angriffe, aber die Nutzung von Ports, die nicht dem Standard entsprechen, machen es Angreifern ein wenig schwerer.
  • Hosten Sie die Backend-Datenbank und ähnliche Dienste auf privaten VPCs, die in keinem öffentlichen Netzwerk sichtbar sind. Seien Sie sehr vorsichtig bei der Konfiguration von AWS-Gruppen und VPCs, die versehentlich bestimmte Dienste öffentlich sichtbar machen können.
  • Isolieren Sie logische Dienste in separaten VPCs und Peer-VPCs, um Kommunikation zwischen einzelnen Services zu ermöglichen.
  • Stellen sie sicher, dass alle Dienste nur Daten von einer minimalen Anzahl an IP-Adressen akzeptieren.
  • Beschränken Sie den ausgehenden IP- und Port-Traffic, um APTs und Botattacken zu minimieren.
  • Verwenden Sie immer AWS Identity and Access Management und nicht Ihre Root-Anmeldeinformationen.
  • Verleihen Sie jedem Entwickler nur die Rechte, die er wirklich benötigt. Handhaben Sie die Rechtevergabe lieber zu strikt.
  • Wechseln sie regelmäßig Passwörter und Anmeldeinformationen. Nutzen Sie hierzu am besten einen starren Zeitplan.

Infrastruktur

  • Stellen Sie sicher, dass Sie Upgrades ohne Ausfallzeiten einspielen können. Stellen Sie sicher, dass Sie Software schnell und vollständig automatisieren können.
  • Erstellen Sie die Infrastruktur Ihres Projektes mit einem Tool wie Terraform und nicht über die Cloud-Konsole. Infrastruktur sollte als "Code" definiert werden, der auf Knopfdruck neu erstellt werden kann.
  • Verwenden Sie eine zentrale Protokollierung für alle Dienste. Sie sollten niemals SSH benötigen, um auf Protokolle zuzugreifen.
  • Nutzen Sie SSH nur für einmalige Diagnosen und nicht regelmäßig. Nicht SSH in Dienste außer für einmalige Diagnose. Übermäßiger Gebrauch von SSH deutet in der Regel auf eine schlechte Automatisierung von Routinezugriffen hin.
  • Halten Sie Port 22 nicht dauerhaft für irgendwelche AWS-Servicegruppen auf. Wenn Sie SSH verwenden müssen, verwenden Sie nur Public-Key-Authentifizierung und keine Passwörter.
  • Erstellen Sie unveränderliche Hosts anstelle von langlebigen Servern, die Sie dauernd patchen und upgraden.
  • Verwenden Sie ein Intrusion Detection System, um APTs zu minimieren.

Betrieb

  • Schalten Sie unbenutzte Dienste und Server ab. Der sicherste Server ist einer, der heruntergefahren ist.

Test

  • Überprüfen Sie Ihr Design und seine Umsetzung regelmäßig.
  • Führen Sie Stresstests durch und lassen Sie sich selbst hacken. Das liefert wertvolle Hinweise auf vorhandene Schwachstellen.

Schulung

  • Schulen Sie Mitarbeiter (vor allem leitende Angestellte) im Hinblick auf die Gefahren, die im Social Engineering drohen, und vermitteln Sie die notwendigen Techniken, diesen zu begegnen.

Für den Notfall

  • Formulieren Sie ein Bedrohungsmodell, das beschreibt, auf welche Art von Angriffen sie vorbereitet sind. Es sollte die möglichen Bedrohungen und Akteure auflisten und priorisieren.
  • Verfügen Sie über einen funktionierenden Notfallplan. Eines Tages werden Sie ihn brauchen.

Haben wir etwas vergessen? Haben Sie Ergänzungsvorschläge? Dann schreiben Sie uns doch einfach. Wir freuen uns, wenn diese Liste mit Ihrer Hilfe immer weiter wächst und besser wird.

Können wir weiterhelfen?

Sie haben ein spannendes Projekt und möchten mit uns zusammenarbeiten? Kontaktieren Sie uns jetzt!

Kostenloses Erstgespräch

Bildnachweis/e: stas11 - shutterstock.com (Bildnummer: 556889749)