Coders Conquer Security: Share & Learn Series - Schwachstellen in der Sitzungsverwaltung

Veröffentlicht Jan 31, 2019
von Jaap Karan Singh
FALLSTUDIE

Coders Conquer Security: Share & Learn Series - Schwachstellen in der Sitzungsverwaltung

Veröffentlicht Jan 31, 2019
von Jaap Karan Singh
Ressource anzeigen
Ressource anzeigen

Sie navigieren zu einer Website und melden sich an. Wie gewohnt füllen Sie Ihren Warenkorb mit Produkten, die Sie kaufen möchten. Dann, schwupps - rutscht Ihnen die Hand ab und Sie schließen den Browser-Tab. Nach einer kleinen Panik geben Sie die URL der Seite wieder in den Browser ein und drücken die "Enter"-Taste. Sie werden zurück auf die Seite gebracht, sind eingeloggt und alle Artikel befinden sich noch im Warenkorb. Uff.

Woher wusste die Website, wer Sie waren, ohne sich erneut zu authentifizieren? Sie hat Sie identifiziert, weil sie Sitzungen verwendet hat. Sitzungen sind der Schlüssel zu einem guten Benutzererlebnis bei der Nutzung des Internets. Die falsche Verwaltung von Sitzungen kann jedoch zu Sicherheitslücken führen, die Angreifer ausnutzen können.

Lassen Sie uns nun überprüfen, was Sitzungsverwaltung bedeutet, wie eine schwache Sitzungsverwaltung Ihnen schaden kann und was Sie tun können, um Sitzungen richtig zu verwalten.

Schwachstellen im Session Management verstehen

Eine Sitzung bezieht sich auf einen auf dem Server gespeicherten Wert, der für einen einzelnen Benutzer der Anwendung spezifisch ist. Dies ist aus zwei Gründen notwendig: Erstens: HTTP ist ein zustandsloses Protokoll. Jede Anfrage ist separat und hat keine Kenntnis von Anfragen, die vor oder nach ihr gekommen sind. Eine Sitzung hilft dem Server zu verfolgen, wer die Anfrage gesendet hat. Andernfalls müssten Sie sich jedes Mal anmelden, wenn Sie auf eine Schaltfläche oder einen Link klicken.

Der zweite Grund für Sitzungen ist die Autorisierung des Benutzers. Die Sitzungskennung kann verwendet werden, um einen bestimmten Benutzer mit bestimmten Rechten innerhalb des Systems zu erkennen. Die Anwendung weiß dann, wer die Person ist und was sie tun darf.

Eine Sitzung besteht aus zwei Komponenten. Ein Datenspeicher auf der Serverseite speichert einen Sitzungsbezeichner und ordnet ihn Informationen über den Benutzer zu, wie z. B. seine Benutzerkennung oder Warenkorbinformationen. Derselbe Sitzungsbezeichner wird in einem Cookie an den Browser gesendet. Die Cookies werden vom Browser auf dem System des Benutzers gespeichert. Der Client übergibt das Cookie bei jeder Anfrage, so dass der Server weiß, dass diese Anfrage von demselben Benutzer stammt. Die meisten Anwendungen verwenden Sitzungen, um Benutzer sowohl vor als auch nach der Authentifizierung zu verfolgen.

Eine ordnungsgemäße Sitzungsverwaltung ist für die Sicherheit einer Anwendung unerlässlich. Eine gültige Sitzungs-ID hat den gleichen Vertrauensgrad wie ein Benutzername/Passwort oder sogar ein Second-Factor-Authentifizierungstoken.

Warum schlechtes Session Management gefährlich ist

Schlechte Sitzungsverwaltung kann zu einer kompletten Kontoübernahme führen. Das bedeutet, dass Kundendaten gestohlen oder Produkte in betrügerischer Absicht gekauft werden können. Es gibt mehrere Möglichkeiten für Angreifer, eine gültige Sitzungs-ID zu erhalten.

Ein Sitzungsfixierungsangriff tritt auf, wenn Sitzungen zu wichtigen Zeitpunkten nicht geändert werden, z. B. wenn sich ein Benutzer am System anmeldet, und wenn Sitzungskennungen über die URL gesetzt werden können. Das Setzen von Sitzungskennungen auf diese Weise kann verwendet werden, um Benutzer über verschiedene Anwendungen hinweg angemeldet zu halten, die die gleiche Authentifizierungsquelle verwenden. In diesem Fall kann ein Angreifer eine Website aufrufen und eine Sitzungskennung erlangen. Der Angreifer sendet dann eine URL an ein ahnungsloses Opfer per E-Mail mit der Sitzungs-ID in der URL. Das Opfer klickt auf die URL in der E-Mail und meldet sich bei der Website an. Wenn die Sitzungs-ID bei der Anmeldung nicht rotiert wird, verfügt der Angreifer nun über eine gültige, authentifizierte Sitzungs-ID. Dies ermöglicht eine vollständige Kontoübernahme.

Ein weiterer Angriff auf eine schlechte Sitzungsverwaltung ist ein Brute-Force-Rate-Angriff. Wenn Entwickler versuchen, ihre eigenen Sitzungsverwaltungssysteme zu erstellen, verwenden sie oft Sitzungs-IDs, die ziemlich einfach zu erraten sind. Diese könnten eine Sequenz (1, 2, 3) oder eine Art vorhersehbares Muster sein. Der Angreifer rät einfach so lange Sitzungs-IDs, bis er eine gültige entdeckt hat. Dies führt auch zu einer Kontoübernahme.

Sitzungen, die nach Ablauf einer bestimmten Zeit nicht automatisch ungültig gemacht werden, können ausgenutzt werden, um Benutzer anzugreifen. Ein erfolgreicher Cross-Site-Request-Forgery-Angriff hängt von Sitzungen ab, die noch gültig sind, nachdem der Benutzer die Website verlassen hat. Angenommen, ein Angreifer platziert einen Iframe oder ein Bild auf einer vom Benutzer besuchten Website. Das Attribut "src" (Quelle) wird auf die URL der verwundbaren Site gesetzt und führt eine Aktion im Namen des Benutzers aus. Zum Beispiel könnte eine verwundbare Banking-Anwendung dazu gebracht werden, ohne die Erlaubnis des Benutzers Geld auf das Konto eines Angreifers zu überweisen.

Sitzungsmanagement kann knifflig sein, und Schwächen können verheerend sein. Es ist jedoch ein bekanntes Problem und es kann gelöst werden.

Unsicheres Sitzungsmanagement besiegen

Die Sitzungsverwaltung ist ein Kernstück einer jeden Webanwendung. Daher verfügen viele Webentwicklungs-Frameworks über eine eingebaute Session-Management-Funktionalität. Diese Systeme wurden von Experten untersucht, um Probleme zu finden und auszumerzen. Verwenden Sie sie.

Einige allgemeine Eigenschaften einer guten Sitzungsverwaltung sind:

     Generierung zufälliger Sitzungs-IDs, die Angreifer nicht erraten können

     Sitzungen werden ungültig, wenn sich ein Benutzer abmeldet

     Sitzungen werden nach Ablauf einer bestimmten Zeit automatisch ungültig gemacht

     Sitzungs-IDs werden nach der Anmeldung des Benutzers geändert

     Sitzungs-IDs, die mindestens 128 Bit lang sind, um Brute-Force-Angriffe zu verhindern

Web-Frameworks wie Spring, ASP.NET Core, Rails und Django verfügen über diese Eigenschaften und sollten in diesem Fall aufgrund ihrer höheren Sicherheitsstandards verwendet werden.

Unterm Strich: Erstellen Sie Ihr eigenes Sitzungsmanagementsystem nicht von Grund auf neu.

Sobald die Sitzungs-IDs erstellt sind, müssen sie geschützt werden. Setzen Sie die Flags "Secure" und "HttpOnly" bei Sitzungscookies auf "true". Dadurch wird sichergestellt, dass ihr Wert nicht mit JavaScript abgerufen werden kann und der Browser das Cookie nur über HTTPS sendet, wodurch Angreifer daran gehindert werden, die Sitzung eines Benutzers während der Übertragung zu stehlen.

Sichern Sie Ihre Sitzungen

Sehen Sie sichunsere kostenlosen Lernressourcen an, um mehr über sicheres Sitzungsmanagement zu erfahren. Wenn Sie lernen, wie Sie Ihre Sitzungen sichern, können Sie die Übernahme von Benutzerkonten, Rufschädigung und Umsatzeinbußen aufgrund von Sicherheitsverletzungen verhindern. Sichern Sie Ihre Sitzungen und schützen Sie Ihre Benutzer.

Ressource anzeigen
Ressource anzeigen

Autor

Jaap Karan Singh

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

Coders Conquer Security: Share & Learn Series - Schwachstellen in der Sitzungsverwaltung

Veröffentlicht Jan 31, 2019
Von Jaap Karan Singh

Sie navigieren zu einer Website und melden sich an. Wie gewohnt füllen Sie Ihren Warenkorb mit Produkten, die Sie kaufen möchten. Dann, schwupps - rutscht Ihnen die Hand ab und Sie schließen den Browser-Tab. Nach einer kleinen Panik geben Sie die URL der Seite wieder in den Browser ein und drücken die "Enter"-Taste. Sie werden zurück auf die Seite gebracht, sind eingeloggt und alle Artikel befinden sich noch im Warenkorb. Uff.

Woher wusste die Website, wer Sie waren, ohne sich erneut zu authentifizieren? Sie hat Sie identifiziert, weil sie Sitzungen verwendet hat. Sitzungen sind der Schlüssel zu einem guten Benutzererlebnis bei der Nutzung des Internets. Die falsche Verwaltung von Sitzungen kann jedoch zu Sicherheitslücken führen, die Angreifer ausnutzen können.

Lassen Sie uns nun überprüfen, was Sitzungsverwaltung bedeutet, wie eine schwache Sitzungsverwaltung Ihnen schaden kann und was Sie tun können, um Sitzungen richtig zu verwalten.

Schwachstellen im Session Management verstehen

Eine Sitzung bezieht sich auf einen auf dem Server gespeicherten Wert, der für einen einzelnen Benutzer der Anwendung spezifisch ist. Dies ist aus zwei Gründen notwendig: Erstens: HTTP ist ein zustandsloses Protokoll. Jede Anfrage ist separat und hat keine Kenntnis von Anfragen, die vor oder nach ihr gekommen sind. Eine Sitzung hilft dem Server zu verfolgen, wer die Anfrage gesendet hat. Andernfalls müssten Sie sich jedes Mal anmelden, wenn Sie auf eine Schaltfläche oder einen Link klicken.

Der zweite Grund für Sitzungen ist die Autorisierung des Benutzers. Die Sitzungskennung kann verwendet werden, um einen bestimmten Benutzer mit bestimmten Rechten innerhalb des Systems zu erkennen. Die Anwendung weiß dann, wer die Person ist und was sie tun darf.

Eine Sitzung besteht aus zwei Komponenten. Ein Datenspeicher auf der Serverseite speichert einen Sitzungsbezeichner und ordnet ihn Informationen über den Benutzer zu, wie z. B. seine Benutzerkennung oder Warenkorbinformationen. Derselbe Sitzungsbezeichner wird in einem Cookie an den Browser gesendet. Die Cookies werden vom Browser auf dem System des Benutzers gespeichert. Der Client übergibt das Cookie bei jeder Anfrage, so dass der Server weiß, dass diese Anfrage von demselben Benutzer stammt. Die meisten Anwendungen verwenden Sitzungen, um Benutzer sowohl vor als auch nach der Authentifizierung zu verfolgen.

Eine ordnungsgemäße Sitzungsverwaltung ist für die Sicherheit einer Anwendung unerlässlich. Eine gültige Sitzungs-ID hat den gleichen Vertrauensgrad wie ein Benutzername/Passwort oder sogar ein Second-Factor-Authentifizierungstoken.

Warum schlechtes Session Management gefährlich ist

Schlechte Sitzungsverwaltung kann zu einer kompletten Kontoübernahme führen. Das bedeutet, dass Kundendaten gestohlen oder Produkte in betrügerischer Absicht gekauft werden können. Es gibt mehrere Möglichkeiten für Angreifer, eine gültige Sitzungs-ID zu erhalten.

Ein Sitzungsfixierungsangriff tritt auf, wenn Sitzungen zu wichtigen Zeitpunkten nicht geändert werden, z. B. wenn sich ein Benutzer am System anmeldet, und wenn Sitzungskennungen über die URL gesetzt werden können. Das Setzen von Sitzungskennungen auf diese Weise kann verwendet werden, um Benutzer über verschiedene Anwendungen hinweg angemeldet zu halten, die die gleiche Authentifizierungsquelle verwenden. In diesem Fall kann ein Angreifer eine Website aufrufen und eine Sitzungskennung erlangen. Der Angreifer sendet dann eine URL an ein ahnungsloses Opfer per E-Mail mit der Sitzungs-ID in der URL. Das Opfer klickt auf die URL in der E-Mail und meldet sich bei der Website an. Wenn die Sitzungs-ID bei der Anmeldung nicht rotiert wird, verfügt der Angreifer nun über eine gültige, authentifizierte Sitzungs-ID. Dies ermöglicht eine vollständige Kontoübernahme.

Ein weiterer Angriff auf eine schlechte Sitzungsverwaltung ist ein Brute-Force-Rate-Angriff. Wenn Entwickler versuchen, ihre eigenen Sitzungsverwaltungssysteme zu erstellen, verwenden sie oft Sitzungs-IDs, die ziemlich einfach zu erraten sind. Diese könnten eine Sequenz (1, 2, 3) oder eine Art vorhersehbares Muster sein. Der Angreifer rät einfach so lange Sitzungs-IDs, bis er eine gültige entdeckt hat. Dies führt auch zu einer Kontoübernahme.

Sitzungen, die nach Ablauf einer bestimmten Zeit nicht automatisch ungültig gemacht werden, können ausgenutzt werden, um Benutzer anzugreifen. Ein erfolgreicher Cross-Site-Request-Forgery-Angriff hängt von Sitzungen ab, die noch gültig sind, nachdem der Benutzer die Website verlassen hat. Angenommen, ein Angreifer platziert einen Iframe oder ein Bild auf einer vom Benutzer besuchten Website. Das Attribut "src" (Quelle) wird auf die URL der verwundbaren Site gesetzt und führt eine Aktion im Namen des Benutzers aus. Zum Beispiel könnte eine verwundbare Banking-Anwendung dazu gebracht werden, ohne die Erlaubnis des Benutzers Geld auf das Konto eines Angreifers zu überweisen.

Sitzungsmanagement kann knifflig sein, und Schwächen können verheerend sein. Es ist jedoch ein bekanntes Problem und es kann gelöst werden.

Unsicheres Sitzungsmanagement besiegen

Die Sitzungsverwaltung ist ein Kernstück einer jeden Webanwendung. Daher verfügen viele Webentwicklungs-Frameworks über eine eingebaute Session-Management-Funktionalität. Diese Systeme wurden von Experten untersucht, um Probleme zu finden und auszumerzen. Verwenden Sie sie.

Einige allgemeine Eigenschaften einer guten Sitzungsverwaltung sind:

     Generierung zufälliger Sitzungs-IDs, die Angreifer nicht erraten können

     Sitzungen werden ungültig, wenn sich ein Benutzer abmeldet

     Sitzungen werden nach Ablauf einer bestimmten Zeit automatisch ungültig gemacht

     Sitzungs-IDs werden nach der Anmeldung des Benutzers geändert

     Sitzungs-IDs, die mindestens 128 Bit lang sind, um Brute-Force-Angriffe zu verhindern

Web-Frameworks wie Spring, ASP.NET Core, Rails und Django verfügen über diese Eigenschaften und sollten in diesem Fall aufgrund ihrer höheren Sicherheitsstandards verwendet werden.

Unterm Strich: Erstellen Sie Ihr eigenes Sitzungsmanagementsystem nicht von Grund auf neu.

Sobald die Sitzungs-IDs erstellt sind, müssen sie geschützt werden. Setzen Sie die Flags "Secure" und "HttpOnly" bei Sitzungscookies auf "true". Dadurch wird sichergestellt, dass ihr Wert nicht mit JavaScript abgerufen werden kann und der Browser das Cookie nur über HTTPS sendet, wodurch Angreifer daran gehindert werden, die Sitzung eines Benutzers während der Übertragung zu stehlen.

Sichern Sie Ihre Sitzungen

Sehen Sie sichunsere kostenlosen Lernressourcen an, um mehr über sicheres Sitzungsmanagement zu erfahren. Wenn Sie lernen, wie Sie Ihre Sitzungen sichern, können Sie die Übernahme von Benutzerkonten, Rufschädigung und Umsatzeinbußen aufgrund von Sicherheitsverletzungen verhindern. Sichern Sie Ihre Sitzungen und schützen Sie Ihre Benutzer.

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.