Dieser Blogbeitrag zu unserer Reihe zur OWASP Top Ten, den häufigsten Sicherheitslücken in Webapplikationen, erläutert die Gefahr der Preisgabe von sensiblen Daten und wie Sie Ihre Anwendung sowie deren Benutzer davor schützen können.
Bei sensiblen Daten handelt es sich beispielsweise um Gesundheits-, Kreditkarten- oder auch Zugangsdaten, deren Vertraulichkeit sowohl bei der Speicherung als auch bei der Übertragung zu jeder Zeit gewährleistet sein muss. Aufgrund der Sensibilität der Daten sowie deren Vertraulichkeitsanforderungen und vor allem durch das damit verbundene hohe Schutzniveau sind entsprechende Angriffe einerseits zwar häufig sehr komplex und aufwendig, andererseits stellen die möglicherweise erbeuteten Informationen durchaus lohnende Ziele für potentielle Angreifer dar.
Beispielszenarien:
- Anmeldedaten werden vom Browser des Benutzers im Klartext oder mit veralteten Verschlüsselungsverfahren zur Webapplikation übermittelt und können daher durch einen Angreifer mit Zugriff auf den Netzwerkverkehr, z.B. im Rahmen eines sogenannten Man-In-The-Middle-Angriffs, mitgelesen bzw. entschlüsselt werden.
- Passwörter wurden durch einen SQL-Injection-Angriff erbeutet, aber glücklicherweise nicht im Klartext, sondern als Hash-Wert gespeichert. Allerdings sind diese durch einen fehlenden „Salt“ respektive „Pepper“ dennoch anfällig für Wörterbuch- und Brute-Force-Angriffe.
Bei Wörterbuchangriffen werden sogenannte „Rainbow Tables“ verwendet, welche die vorberechneten Hash-Werte für eine Vielzahl von möglichen Kennwörtern enthalten. Damit können vor allem schwache Kennwörter sehr schnell und mit geringem Rechenaufwand bestimmt werden. Hätte die Webapplikation die Passwörter vor der Erzeugung der Hash-Werte jeweils mit einem benutzerspezifischen Datum, wie beispielsweise der E-Mail-Adresse, verknüpft bzw. „gesalzen“, wäre die vorberechnete Hash-Tabelle des Angreifers nutzlos.
Mit Brute-Force-Angriffen, also dem Ausprobieren von allen möglichen Kombinationen, können Angreifer gezielt einzelne Passwörter knacken. Ein „Pfeffern“ der Passwörter vor der Hash-Bildung mit einer ausreichend langen, ausschließlich dem Webserver bekannten sowie vor allem nicht in der SQL-Datenbank gespeicherten Zeichenkette hätte einen erfolgreichen Brute-Force-Angriff verhindern können. - Die Webapplikation speichert Kreditkartendaten verschlüsselt in einer Datenbank. Durch einen Fehler in der horizontalen Zugriffsberechtigung kann ein Angreifer auf den Datensatz eines anderen Benutzers zugreifen und erhält die automatisch von der Anwendung entschlüsselten Kreditkartendaten im Klartext. Sofern die Applikation die Daten beispielsweise mit einem Public-Key-Verschlüsselungsverfahren verschlüsselt hätte und ausschließlich nachgelagerte Anwendungen mit dem entsprechenden geheimen Schlüssel (dem sogenannten „Private Key“) in der Lage gewesen wären, die Daten wieder zu entschlüsseln, wäre die Vertraulichkeit der Kreditkartendaten erhalten geblieben.
- Die Authentisierungsfunktion der Webapplikation erlaubt das persistente Speichern von Passwörtern im Browser. Externe Angreifer oder andere Benutzer mit Zugang zum Client können die gespeicherten Zugangsdaten eventuell auslesen bzw. für eine unbefugte Authentisierung nutzen. Der zusätzliche Formular-Parameter autocomplete=“off“ verhindert dabei das Speichern von sensiblen Informationen im Browser.
Gegenmaßnahmen
Um die Vertaulichkeit von sensiblen Informationen zu schützen, sollten die betroffenen Daten sowie alle möglichen Angriffsvektoren zunächst systematisch identifiziert werden. Dabei gilt es vor allem sowohl externe als auch interne Angriffswege sowie übertragene und auch gespeicherte Daten – inklusive Backups – zu betrachten. Sofern die möglichen Bedrohungen für einen Verlust der Vertraulichkeit von sensiblen Daten feststehen, muss im nächsten Schritt jeweils eine dem Schutzbedarf angemessene Verschlüsselung implementiert werden.
Für eine symmetrische Verschlüsselung von Daten eignet sich dabei unter anderem der Advanced Encryption Standard (AES) mit einer Mindestschlüssellänge von 128 Bits. Eine Transportverschlüsselung sollte grundsätzlich nur noch mit TLS (Transport Layer Security) und nicht mehr mit SSL (Secure Sockets Layer) umgesetzt werden, wobei besonders darauf geachtet werden sollte, dass keine Algorithmen mit SHA-1 zur Signaturerstellung oder der RC4-Stromverschlüsselung aktiviert sind. Konkrete Empfehlungen zu kryptographischen Verfahren und Schlüssellängen erhalten Sie unter anderem in den technischen Richtlinien des Bundesamtes für Sicherheit in der Informationstechnik (BSI). Passwörter sollten ausschließlich mit speziell dafür entwickelten Verfahren, wie z.B. bcrypt oder PBKDF2, als Hash-Wert gespeichert werden.
Um die Angriffsfläche zu minimieren sollten generell keine sensiblen Daten unnötiger Weise verarbeitet und vor allem nicht gespeichert werden. Zudem sollten Funktionen zur Autovervollständigung oder zum Caching innerhalb von Formularen mit vertraulichen Informationen deaktiviert werden.
Zusammenfassung
Der Verlust der Vertraulichkeit sensibler Daten entsteht in der Regel durch einen inadäquaten Schutz der entsprechenden Informationen. Dies betrifft sowohl das Fehlen einer Verschlüsselung als auch den Einsatz von veralteten oder unangemessenen kryptografischen Funktionen. Erfolgreiche Angriffe können dabei für die betroffenen Benutzer erhebliche finanzielle sowie persönliche Konsequenzen haben, beispielsweise durch Kreditkartenbetrug oder Identitätsdiebstahl. Als Folge werden Sie als Webseitenbetreiber letztendlich nicht nur durch einen ggf. hochgradigen Imageverlust geschädigt, sondern müssen sich möglicherweise auch mit mehreren juristischen Verfahren auseinandersetzen. Daher sollten Sie alle vertraulichen Informationen, welche von Ihrer Webapplikation verarbeitet und gespeichert werden, im Vorfeld identifizierten und gegen externe sowie interne Angriffsvektoren dem Schutzbedarf entsprechend absichern.
Anonymous
4. März 2016 @ 14:54
Tippfehler „Stromverschlüsellung“