Schwachstellen der Rennbedingung in Webanwendungen

Schwachstellen der Rennbedingung in Webanwendungen
Wenn eine Webanwendung zur Verwaltung von Funktionen in einer festen Sequenz konfiguriert ist, um zwei oder mehr Vorgänge gleichzeitig auszuführen, erfolgt ein Angriff auf Rennbedingungen. Diese Technik nutzt eine Zeitverzögerung zwischen dem Einführung eines Dienstes und der Eintritt in eine Sicherheitskontrolle. Dieser Angriff kann eine der beiden Arten durchgeführt werden, die auf Multithread -Anwendungen basieren: Eindringung durch nicht vertrauenswürdige Prozesse und Eindringen eines vertrauenswürdigen Prozesses, das die gleichen und gleichberechtigten Rechte haben könnte.

Verschiedene Prozesse können ohne angemessene Maßnahmen miteinander interagieren. Diese Angriffe werden auch als Zeitpunkt des Check -Angriffs, den Gebrauchszeitangriff oder TOC/TOU -Angriffe bezeichnet. Schwachstellen der Rennbedingung sind aufgrund grundlegender Programmierfehler, die Entwickler normalerweise erzeugen. Bösartige Unternehmen haben Rennbedingungen für viele böswillige Zwecke ausgenutzt, ich.e., Von kostenlosen Gutscheinen bis hin zu Geld von Online -Konten und Investmentfirmen rauben.

Nehmen wir an, dass zwei Parallelausführungs -Threads versuchen, den Wert einer globalen Variablen um 5 zu steigern. Letztendlich hätte die globale Variable einen Wert von 10. Wenn jedoch alle Threads gleichzeitig ausgeführt werden, kann die Ausführung ohne Ressourcensperrungen oder Synchronisation falsch sein. Wenn der erste Thread einige Manipulationen zu dieser globalen Variablen durchführt, liest der zweite Thread ihn und beginnt einige andere Manipulationen. In diesem Fall wäre der Endwert nicht wie erwartet.

Dies geschieht, da die Auswirkung einer Fadenbeende vom Ergebnis des anderen abhängt. Wenn die beiden Threads gleichzeitig ausgeführt werden, werden unbeabsichtigte Konsequenzen geben.

Umfang der Angriffe von Rassenbedingungen:

Stellen Sie sich vor, etwas kritischeres wird von den beiden Threads des obigen Beispiels ausgeführt, wie beim Austausch von Geld zwischen Bankkonten. Um das Geld korrekt zu senden, muss das Programm diese Aufgaben in dieser Sequenz ausführen. Überprüfen Sie, ob auf dem Konto des Absenders genügend Guthaben vorhanden ist, Geld auf das Konto des Empfängers hinzufügen und dann vom Absenderkonto abziehen. Wenn Sie jedoch gleichzeitig zwei Anfragen einreichen, können Sie möglicherweise eine Bedingung auslösen, in der sich die Abfolge der Thread -Ausführung ändert. In einer solchen Situation haben Sie einen anderen Betrag als erwartet.

Anfälligkeit der Rennbedingung wurde von Egor Homakov auf der Starbucks -Website gefunden. Er entdeckte einen Weg, um einen unendlichen Kredit auf Starbucks -Geschenkgutscheine kostenlos mit verschiedenen Browsern mit verschiedenen Cookies zu erstellen.

Der prominente Meltdown -Angriff ist ein Beispiel für die Verwundbarkeit der Rennbedingung. Bei dem Meltdown -Angriff wird die Schwäche durch parallele Verarbeitung des Datenabrechnung aus dem Speicher und der Authentifizierung ausgelöst, ob ein Benutzer auf den Speicher zugreifen kann oder nicht. Dieser Fehler ermöglicht es einem Tool, Standard -Privileg -Überprüfungen zu vermeiden, die den Angriffsmechanismus vom Zugriff auf OS -Daten trennen. Diese Lücke führt dazu, dass ein nicht autorisierter Prozess Daten und Informationen von einer anderen Adresse angezeigt wird, die mit dem Status des aktuellen Fortschritts im Speicher verbunden sind. Im Prozess der fehlerhaften Ausführung werden Informationen aus einer nicht genehmigten Adresse häufig schnell in den Cache der CPU gestapelt, aus dem die Informationen wiederhergestellt werden können.

Real-Life-Angriffsszenarien:

Indem Sie kontinuierlich zahlreiche Anfragen an den Webserver senden, können Sie Rennbedingungen in Webanwendungen suchen und manipulieren. Wenn Sie feststellen möchten, ob Sie mehr Geld abheben können als auf Ihrem Bankkonto mit der Curl -Funktion, können Sie gleichzeitig mehrere Auszahlungsanfragen an den Server senden.

Curl (50000) & (50000) & (50000 abheben) & (50000 abheben) & (50000 abheben) & (50000 abheben)

Je mehr Anforderungen Sie in kurzer Zeit einreichen, desto höher ist die Chancen, dass Ihr Angriff funktioniert.

Wenn Sie asynchrone Follow-up-Anfragen senden, folgen Sie außerdem mehrmals einem Benutzer, anstatt eine Fehlerantwort zu senden. ICH.e., Wenn Sie einen gefälschten Header mit %s hinzufügen, während Sie Anforderungen mit Turbo -Eindringling fallen lassen und den folgenden Python -Code einfügen:

Def FollowReqs (Ziel, Wordlisten):
Motor = RequestEgine (Endpoint = Ziel.Endpunkt,
Concurrent Connections = 40,
RequestSerConnection = 100,
Pipeline = Falsch
)
für i in Reichweite (40):
Motor.Warteschlange (Ziel.Req, Str (i), Gate = 'Check')
Motor.OpenGate ('Check')
Motor.komplett (Timeout = 60)
Def Reaktionshandle (req, interessant):
Tisch.add (req)

Sie sehen einen Angriffstaste. Nachdem der Turbo -Eindringling dies gedrückt hat, reicht er 40 Abfragen ein und scannt die Statuscodes. Wenn Sie mehrere Antworten mit dem 201 generierten Status sehen, zeigt dies mehrmals an, dass Sie der Person befolgt sind.

Es gibt eine Anfälligkeit für die Rennbedingung, bei der Sie auf mehrere Konsolen zugreifen können, die für kostenlose Konten angeboten werden. Die meisten Websites, die kostenlose Konsolen anbieten, verfügen über kostenlose Konten, Standard- und Premium -Pakete. Kostenlose Konten liefern nur 2 oder 3 Konsolen pro Benutzer. Um diese Grenze zu brechen und unbegrenzte Konsolen zu verwenden, drücken Sie die GET -Anforderung mehrmals mit Null -Nutzlasten wie 100 oder 200 mithilfe von Null -Nutzlasten ein, z. B. 100 oder 200. Und dann eine der Konsolen manuell aus der Benutzeroberfläche löschen, während Threads ausgeführt werden.

Abschluss:

Als Mittel zur Untergrenze der Zugangskontrollen sind Rennbedingungen enthalten. Jedes Programm, das von Mechanismen der Zugangskontrolle abhängig ist, kann anfällig sein. Meistens nutzen Hacker auf Websites von Finanzinstituten die Rennbedingungen aus. Da dies zu unbegrenzten finanziellen Leistungen für den Hacker führen könnte, wenn eine Rennbedingung in einer wichtigen Funktion wie Bargeldabhebung, Geldübertragung oder Kreditkartenzahlung festgestellt werden könnte. E-Commerce-Plattformen, Videospiele und Online-Abstimmungsdienste sind weitere Hochrisikotechnologien. Die Implementierung einer sicheren Parallelität ist das Geheimnis der Vermeidung von Rennbedingungen. Und Sie können auch Ressourcenschlösser verwenden. Es wird auch ein Verriegelungsfunktion für Programmiersprachen mit Parallelitätsfähigkeiten integriert, die dazu beitragen, solche Bedingungen zu verhindern. Darüber hinaus nach sichern Codierungsstandards, i, i.e., Das Konzept und der Prüfungscode am wenigsten Privilegien verringern die Wahrscheinlichkeit des Programms, eine Verletzung des Programms zu erhalten.