Wie man die Aufzählung von Benutzernamen vermeidet | Secure Code Warrior

Veröffentlicht Okt 09, 2017
von Pieter De Cremer
FALLSTUDIE

Wie man die Aufzählung von Benutzernamen vermeidet | Secure Code Warrior

Veröffentlicht Okt 09, 2017
von Pieter De Cremer
Ressource anzeigen
Ressource anzeigen

Von einem Seitenkanalangriff spricht man, wenn ein Hacker Informationen aus der physischen Implementierung eines Softwaresystems gewinnen kann und nicht aus einer theoretischen Schwäche im Algorithmus oder einem Fehler im Code der Software.

Ein Beispiel, das ich gerne verwende, um dies zu verdeutlichen, ist eine Methode zur Aufzählung von Benutzernamen. Wenn Sie wissen möchten, was die Aufzählung von Benutzernamen ist oder warum sie schlecht ist, besuchen Sie unsere Website für eine Videoerklärung oder spielen Sie eine Herausforderung, um zu sehen, ob Sie sie im Code identifizieren können.

Um nun zu verstehen, wie die Aufzählung von Benutzernamen durch einen Seitenkanalangriff durchgeführt werden kann, müssen Sie ein gewisses Verständnis dafür haben, wie Kennwörter in modernen Webanwendungen gehandhabt werden (oder zumindest gehandhabt werden sollten). Eine gute Webanwendung kennt Ihr Kennwort nicht, sie speichert Ihr Kennwort nirgendwo. Woher weiß sie also, dass das, was Sie eingegeben haben, korrekt ist und tatsächlich Ihr Passwort ist? Nun, Ihr Passwort ist gehasht.

Eine Hash-Funktion ist eine mathematische Operation, die einfach in eine Richtung ausgeführt werden kann (obwohl sie etwas rechenintensiv ist), aber sehr schwer umkehrbar ist, und bei guten Hash-Algorithmen ist die Ausgabe abhängig von der Eingabe eindeutig. Wenn Sie sich auf einer Website anmelden, wird dieser Hash sicher gespeichert, nicht Ihr Passwort selbst. Das bedeutet, dass die Webanwendung jedes Mal, wenn Sie sich anmelden, Ihre Eingabe hasht und die gehashten Ergebnisse mit dem gespeicherten Hash vergleicht. Wenn Sie mehr über die sichere Speicherung von Passwörtern erfahren möchten, können Sie das auf unserer Plattform tun.

Das Hashing von Eingaben nimmt auf einem Computer einige Zeit in Anspruch und die Entwickler versuchen immer, alles, was sie schreiben, zu optimieren, damit die Benutzer eine reibungslose Erfahrung haben. Eine Sache, die das Programm beschleunigt, ist, das Hashing zu überspringen, wenn es nicht benötigt wird. Wenn zum Beispiel der Benutzername nicht existiert (und somit kein Passwort geprüft werden muss), können sie dem Benutzer sofort antworten. Auf diese Weise können sie die langsame Berechnung des Hashes für das Passwort überspringen. Wenn der Benutzername korrekt war, wird die Kennworteingabe gehasht und mit dem gespeicherten Hashwert verglichen.

An dieser Stelle haben Sie vielleicht schon erraten, wo es schief gehen kann. Auch wenn das Hashing in Wirklichkeit nur ein paar Millisekunden dauert, kann ein Hacker diese zusätzliche Verzögerung nutzen, um herauszufinden, ob der eingegebene Benutzername richtig war oder nicht, da ein falscher Benutzername eine etwas schnellere Antwort hat, weil kein Hashing durchgeführt wurde. Diese Art von Seitenkanalangriff wird als Timing-Angriff bezeichnet und ist ein gutes Beispiel dafür, wie verschiedene nicht-funktionale Anforderungen einander entgegenwirken können. Manchmal kann Code nicht gleichzeitig schnell und sicher sein.

Auch wenn die Kennwörter perfekt verarbeitet werden und die angezeigte Meldung generisch ist und nicht angibt, ob das Kennwort oder der Benutzername falsch war, ist das System also immer noch anfällig. Die Lösung ist einfach: Verschlüsseln Sie das Kennwort immer mit einem Hash-Wert oder verzögern Sie das Senden der Antwort um die Zeit, die für den Hash-Wert erforderlich wäre.

Die erhaltenen Informationen können von einem Angreifer verwendet werden, um eine Liste der Benutzer auf dem System zu erhalten. Diese Informationen können verwendet werden, um die Webanwendung anzugreifen, z. B. durch einen Brute-Force- oder Standard-Benutzername/Passwort-Angriff.

https://www.owasp.org/index.php/Testing_for_User_Enumeration_and_Guessable_User_Account_(OWASP-AT-002)

Ressource anzeigen
Ressource anzeigen

Autor

Pieter De Cremer

Sie wollen mehr?

Tauchen Sie ein in unsere neuesten Erkenntnisse über sichere Kodierung im Blog.

Unsere umfangreiche Ressourcenbibliothek zielt darauf ab, die menschliche Herangehensweise an eine sichere Weiterbildung im Bereich der Programmierung zu stärken.

Blog ansehen
Sie wollen mehr?

Holen Sie sich die neuesten Forschungsergebnisse zur entwicklergesteuerten Sicherheit

Unsere umfangreiche Ressourcenbibliothek ist voll von hilfreichen Ressourcen, von Whitepapers bis hin zu Webinaren, die Ihnen den Einstieg in die entwicklungsorientierte sichere Programmierung erleichtern. Erforschen Sie sie jetzt.

Ressourcendrehscheibe

Wie man die Aufzählung von Benutzernamen vermeidet | Secure Code Warrior

Veröffentlicht Okt 09, 2017
Von Pieter De Cremer

Von einem Seitenkanalangriff spricht man, wenn ein Hacker Informationen aus der physischen Implementierung eines Softwaresystems gewinnen kann und nicht aus einer theoretischen Schwäche im Algorithmus oder einem Fehler im Code der Software.

Ein Beispiel, das ich gerne verwende, um dies zu verdeutlichen, ist eine Methode zur Aufzählung von Benutzernamen. Wenn Sie wissen möchten, was die Aufzählung von Benutzernamen ist oder warum sie schlecht ist, besuchen Sie unsere Website für eine Videoerklärung oder spielen Sie eine Herausforderung, um zu sehen, ob Sie sie im Code identifizieren können.

Um nun zu verstehen, wie die Aufzählung von Benutzernamen durch einen Seitenkanalangriff durchgeführt werden kann, müssen Sie ein gewisses Verständnis dafür haben, wie Kennwörter in modernen Webanwendungen gehandhabt werden (oder zumindest gehandhabt werden sollten). Eine gute Webanwendung kennt Ihr Kennwort nicht, sie speichert Ihr Kennwort nirgendwo. Woher weiß sie also, dass das, was Sie eingegeben haben, korrekt ist und tatsächlich Ihr Passwort ist? Nun, Ihr Passwort ist gehasht.

Eine Hash-Funktion ist eine mathematische Operation, die einfach in eine Richtung ausgeführt werden kann (obwohl sie etwas rechenintensiv ist), aber sehr schwer umkehrbar ist, und bei guten Hash-Algorithmen ist die Ausgabe abhängig von der Eingabe eindeutig. Wenn Sie sich auf einer Website anmelden, wird dieser Hash sicher gespeichert, nicht Ihr Passwort selbst. Das bedeutet, dass die Webanwendung jedes Mal, wenn Sie sich anmelden, Ihre Eingabe hasht und die gehashten Ergebnisse mit dem gespeicherten Hash vergleicht. Wenn Sie mehr über die sichere Speicherung von Passwörtern erfahren möchten, können Sie das auf unserer Plattform tun.

Das Hashing von Eingaben nimmt auf einem Computer einige Zeit in Anspruch und die Entwickler versuchen immer, alles, was sie schreiben, zu optimieren, damit die Benutzer eine reibungslose Erfahrung haben. Eine Sache, die das Programm beschleunigt, ist, das Hashing zu überspringen, wenn es nicht benötigt wird. Wenn zum Beispiel der Benutzername nicht existiert (und somit kein Passwort geprüft werden muss), können sie dem Benutzer sofort antworten. Auf diese Weise können sie die langsame Berechnung des Hashes für das Passwort überspringen. Wenn der Benutzername korrekt war, wird die Kennworteingabe gehasht und mit dem gespeicherten Hashwert verglichen.

An dieser Stelle haben Sie vielleicht schon erraten, wo es schief gehen kann. Auch wenn das Hashing in Wirklichkeit nur ein paar Millisekunden dauert, kann ein Hacker diese zusätzliche Verzögerung nutzen, um herauszufinden, ob der eingegebene Benutzername richtig war oder nicht, da ein falscher Benutzername eine etwas schnellere Antwort hat, weil kein Hashing durchgeführt wurde. Diese Art von Seitenkanalangriff wird als Timing-Angriff bezeichnet und ist ein gutes Beispiel dafür, wie verschiedene nicht-funktionale Anforderungen einander entgegenwirken können. Manchmal kann Code nicht gleichzeitig schnell und sicher sein.

Auch wenn die Kennwörter perfekt verarbeitet werden und die angezeigte Meldung generisch ist und nicht angibt, ob das Kennwort oder der Benutzername falsch war, ist das System also immer noch anfällig. Die Lösung ist einfach: Verschlüsseln Sie das Kennwort immer mit einem Hash-Wert oder verzögern Sie das Senden der Antwort um die Zeit, die für den Hash-Wert erforderlich wäre.

Die erhaltenen Informationen können von einem Angreifer verwendet werden, um eine Liste der Benutzer auf dem System zu erhalten. Diese Informationen können verwendet werden, um die Webanwendung anzugreifen, z. B. durch einen Brute-Force- oder Standard-Benutzername/Passwort-Angriff.

https://www.owasp.org/index.php/Testing_for_User_Enumeration_and_Guessable_User_Account_(OWASP-AT-002)

Wir bitten Sie um Ihre Erlaubnis, Ihnen Informationen über unsere Produkte und/oder verwandte Themen der sicheren Codierung zuzusenden. Wir werden Ihre persönlichen Daten immer mit äußerster Sorgfalt behandeln und sie niemals zu Marketingzwecken an andere Unternehmen verkaufen.

Senden
Um das Formular abzuschicken, aktivieren Sie bitte "Analytics"-Cookies. Sie können die Cookies wieder deaktivieren, sobald Sie fertig sind.