Ich habe gerade im Internet über eine neu entdeckte Sicherheitslücke in ASP.NET gelesen. Die Details können Sie hier lesen.
Das Problem liegt in der Art und Weise, wie ASP.NET den AES-Verschlüsselungsalgorithmus implementiert, um die Integrität der Cookies zu schützen, die diese Anwendungen generieren, um Informationen während Benutzersitzungen zu speichern.
Das ist ein bisschen vage, aber hier ist ein erschreckenderer Teil:
Die erste Phase des Angriffs dauert einige tausend Anfragen, aber sobald er erfolgreich ist und der Angreifer die geheimen Schlüssel erhält, ist er völlig verstohlen. Die erforderlichen kryptografischen Kenntnisse sind sehr grundlegend.
Alles in allem bin ich mit dem Thema Sicherheit / Kryptographie nicht vertraut genug, um zu wissen, ob dies wirklich so ernst ist.
Sollten alle ASP.NET-Entwickler diese Technik fürchten, die jede ASP.NET-Website in Sekunden besitzen kann, oder was?
Wie wirkt sich dieses Problem auf den durchschnittlichen ASP.NET-Entwickler aus? Betrifft es uns überhaupt? Welche Konsequenzen hat diese Sicherheitsanfälligkeit im wirklichen Leben? Und schließlich: Gibt es eine Problemumgehung, die diese Sicherheitsanfälligkeit verhindert?
Danke für deine Antworten!
EDIT: Lassen Sie mich die Antworten zusammenfassen, die ich erhalten habe
Dies ist also im Grunde eine Art "Padding Orakel" -Angriff. @Sri lieferte eine großartige Erklärung, was diese Art von Angriff bedeutet. Hier ist ein schockierendes Video zu diesem Thema!
Über die Schwere dieser Sicherheitsanfälligkeit: Ja, es ist in der Tat schwerwiegend. Dadurch kann der Angreifer den Maschinenschlüssel einer Anwendung kennenlernen. So kann er einige sehr unerwünschte Dinge tun .
- Im Besitz des Computerschlüssels der App kann der Angreifer Authentifizierungscookies entschlüsseln.
- Schlimmer noch, er kann Authentifizierungs-Cookies mit dem Namen eines beliebigen Benutzers generieren . Somit kann er als jeder auf der Site erscheinen. Die Anwendung kann nicht zwischen Ihnen und dem Hacker unterscheiden, der ein Authentifizierungscookie mit Ihrem Namen für sich selbst generiert hat.
- Außerdem kann er Sitzungscookies entschlüsseln (und auch generieren) , obwohl dies nicht so gefährlich ist wie das vorherige.
- Nicht so ernst: Er kann den verschlüsselten ViewState von Seiten entschlüsseln. (Wenn Sie ViewState zum Speichern vertraulicher Daten verwenden, sollten Sie dies sowieso nicht tun!)
- Ganz unerwartet : Mit Kenntnis des Maschinenschlüssels kann der Angreifer jede beliebige Datei von Ihrer Webanwendung herunterladen , auch solche, die normalerweise nicht heruntergeladen werden können! (Einschließlich Web.Config usw.)
Im Folgenden finden Sie eine Reihe bewährter Methoden, die das Problem nicht lösen, aber die allgemeine Sicherheit einer Webanwendung verbessern.
- Sie können vertrauliche Daten mit Protected Configuration verschlüsseln
- Verwenden Sie nur HTTP-Cookies
- Verhindern Sie DoS-Angriffe
Konzentrieren wir uns nun auf dieses Thema.
- Scott Guthrie hat einen Eintrag darüber in seinem Blog veröffentlicht
- ScottGus FAQ-Blogbeitrag über die Sicherheitsanfälligkeit
- ScottGus Update zur Sicherheitsanfälligkeit
- Microsoft hat einen Sicherheitshinweis dazu
- Die Sicherheitsanfälligkeit verstehen
- Zusätzliche Informationen zur Sicherheitsanfälligkeit
Die Lösung
- Aktivieren Sie customErrors und erstellen Sie eine einzelne Fehlerseite, auf die alle Fehler umgeleitet werden. Ja, sogar 404er . (ScottGu sagte, dass die Unterscheidung zwischen 404 und 500 für diesen Angriff wesentlich ist.) Auch in Ihren
Application_Error
oderError.aspx
einen Code einfügen, der eine zufällige Verzögerung verursacht. (Generieren Sie eine Zufallszahl und verwenden Sie Thread.Sleep, um so lange zu schlafen.) Dadurch kann der Angreifer nicht entscheiden, was genau auf Ihrem Server passiert ist. - Einige Leute empfahlen, wieder zu 3DES zu wechseln. Wenn Sie AES nicht verwenden, treten theoretisch keine Sicherheitslücken in der AES-Implementierung auf. Wie sich herausstellt, wird dies überhaupt nicht empfohlen .
Einige andere Gedanken
Vielen Dank an alle, die meine Frage beantwortet haben. Ich habe nicht nur über dieses Problem, sondern auch über die Web-Sicherheit im Allgemeinen viel gelernt. Ich habe die Antwort von @ Mikael als akzeptiert markiert, aber die anderen Antworten sind auch sehr nützlich.