
Analysieren Sie HTTP-Anfragen, um Risiken von HTTP-Desync-Angriffen (Vorläufer von HTTP-Request-Smuggling/-Splitting) zu minimieren.
Dies bedeutet, dass es eine Vielzahl von Servern und Clients gibt, die unterschiedliche Ansichten über Anfragegrenzen haben könnten, wodurch Angriffsmöglichkeiten für Desynchronisationsangriffe (auch bekannt als HTTP Desync) entstehen.
Es mag einfach erscheinen, den neuesten RFC-Empfehlungen zu folgen. Für große Systeme, die schon eine Weile bestehen, könnte dies jedoch eine inakzeptable Beeinträchtigung der Verfügbarkeit mit sich bringen.
Die Bibliothek http_desync_guardian wurde entwickelt, um HTTP-Anfragen zu analysieren und HTTP-Desync-Angriffe zu verhindern, wobei Sicherheit und Verfügbarkeit abgewogen werden.
Sie klassifiziert Anfragen in verschiedene Kategorien und gibt Empfehlungen, wie jede Stufe behandelt werden soll.
Sie kann entweder für rohe HTTP-Anfrage-Header oder bereits von einer HTTP-Engine geparste Anfragen verwendet werden. Anwender können Protokollierung und Metriksammlung konfigurieren. Die Protokollierung ist ratenbegrenzt und alle Benutzerdaten werden verschleiert.
Wenn Sie glauben, ein sicherheitsrelevantes Problem gefunden zu haben, folgen Sie bitte unserem Benachrichtigungsprozess für Sicherheitsprobleme.
Der Hauptfokus dieser Bibliothek liegt auf HTTP/1.1. Siehe Tests für alle abgedeckten Fälle. Vorgänger von HTTP/1.1 unterstützen keine Wiederverwendung von Verbindungen, was die Möglichkeiten für HTTP-Desync einschränkt.
Einige Proxys können jedoch solche Anfragen auf HTTP/1.1 upgraden und Backend-Verbindungen wiederverwenden, was das Erstellen bösartiger HTTP/1.0-Anfragen ermöglichen könnte.
Deshalb werden sie mit denselben Kriterien wie HTTP/1.1 analysiert. Für andere Protokollversionen gelten folgende Ausnahmen:
HTTP/0.9-Anfragen werden nie als Compliant betrachtet, sondern als Acceptable eingestuft. Wenn Content-Length/Transfer-Encoding vorhanden ist, gilt die Anfrage als Ambiguous.HTTP/1.0 – das Vorhandensein von Transfer-Encoding macht eine Anfrage Ambiguous.HTTP/2+ ist nicht im Fokus. Falls Ihr Proxy jedoch HTTP/2 auf HTTP/1.1 herabstuft, stellen Sie sicher, dass die ausgehende Anfrage analysiert wird.Siehe Dokumentation für weitere Informationen.
Diese Bibliothek ist hauptsächlich für die Verwendung von HTTP-Engines in C/C++ ausgelegt.
cargo install --force cbindgencbindgen --output http_desync_guardian.h --lang c für C aus.cbindgen --output http_desync_guardian.h --lang c++ für C++ aus.cargo build --release aus. Die Binärdateien befinden sich in ./target/release/libhttp_desync_guardian.* Dateien.#include "http_desync_guardian.h"
/*
* http_engine_request_t - bereits von der HTTP-Engine geparst
*/
static int check_request(http_engine_request_t *req) {
http_desync_guardian_request_t guardian_request = construct_http_desync_guardian_from(req);
http_desync_guardian_verdict_t verdict = {0};
http_desync_guardian_analyze_request(&guardian_request, &verdict);
switch (verdict.tier) {
case REQUEST_SAFETY_TIER_COMPLIANT:
// Die Anfrage ist in Ordnung. Grünes Licht
break;
case REQUEST_SAFETY_TIER_ACCEPTABLE:
// Ablehnen, wenn Modus == STRICTEST
// Ansonsten OK
break;
case REQUEST_SAFETY_TIER_AMBIGUOUS:
// Die Anfrage ist mehrdeutig.
// Ablehnen, wenn Modus == STRICTEST
// Ansonsten senden, aber weder FE- noch BE-Verbindungen wiederverwenden.
break;
case REQUEST_SAFETY_TIER_SEVERE:
// Sende 400 und schließe die FE-Verbindung.
break;
default:
// nicht erreichbarer Code
abort();
}
}
Siehe Benchmarks als Beispiel für die Verwendung von Rust.
Wenn Sie ein potenzielles Sicherheitsproblem in http_desync_guardian entdecken, bitten wir Sie, AWS Security über unsere Seite zur Meldung von Schwachstellen zu benachrichtigen. Bitte erstellen Sie kein öffentliches GitHub-Issue.
Siehe CONTRIBUTING für weitere Informationen.
Dieses Projekt ist unter der Apache-2.0-Lizenz lizenziert.