it-swarm.com.de

Wie kann man feststellen, ob eine Benutzeragentenzeichenfolge die richtige Syntax aufweist oder ein Hacking-Versuch sein könnte?

Ich habe meinen Server über awstats überprüft, um festzustellen, wer meine Website besucht hat, und ich habe einen Benutzeragenten mit dem folgenden Wert:

}__test|O:21:\

Einige Nachforschungen haben mich zu der Annahme geführt, dass jemand versucht hat, meinen Server zu hacken.

Wie lauten die Syntaxregeln, um zu verhindern, dass eine Benutzeragentenzeichenfolge zu 100% legitim und keine von Hackern erstellte Zeichenfolge ist? Welche Zeichen sind beispielsweise in einer richtigen Benutzeragentenzeichenfolge zulässig/nicht zulässig, und müssen einige Zeichen in einer bestimmten Reihenfolge angegeben werden?

4
Mike

Es gibt keine Regeln. Ein User Agent kann alles sein .

Es gibt keine vernünftige Möglichkeit, Benutzeragenten auf die Whitelist zu setzen, da es viele legitime Agenten gibt und Sie einen legitimen Benutzer nicht versehentlich blockieren möchten. Es gibt auch keine Möglichkeit, fehlerhafte Benutzeragenten zu blockieren, da es auch hier keine Standardmethode gibt, um festzustellen, ob ein Benutzeragent einen fehlerhaften Benutzer darstellt.

Wenn Sie versuchen möchten, fehlerhafte Bots zu blockieren, können Sie einen Benutzeragenten mit dieser Datenbank vergleichen und herausfinden, um wen es sich handelt, und dann eine halbherzige Entscheidung treffen, ob Sie ihn blockieren sollen oder nicht. Es gibt auch einige Versuche, Listen fehlerhafter Benutzeragenten zu pflegen aber ich weiß nicht, wie aktuell sie sind und jeden Tag erscheinen neue Benutzeragenten.

3
John Conde

Da das Benutzerprogramm vollständig vom Client gesteuert wird, sollten Sie darauf achten, da es für verschiedene Angriffe verwendet werden kann.

Zulässige Zeichen im User Agent

welche Zeichen sind in einer richtigen User-Agent-Zeichenfolge zulässig/nicht zulässig und müssen einige Zeichen in einer bestimmten Reihenfolge sein?

@ Stephen Ostermiller bereits mit RFC2616 verknüpft. Es wurde in RFC7231 aktualisiert, aber nichts hat sich wirklich geändert:

User-Agent = Produkt * (RWS (Produkt/Kommentar))
[...]
Produkt = Token ["/" Produktversion]
Produktversion = Token

Es verweist jedoch auf RFC72 , um anzugeben, wie Kommentare aussehen können:

comment = "(" * (ctext/quoted-pair/comment) ")"
ctext = HTAB/SP /% x21-27 /% x2A-5B /% x5D-7E/obs-text
[...]
quoted-pair = "\" (HTAB/SP/VCHAR/obs-text)

Dies ist eine originelle Art zu sagen, dass im Kommentarteil des Benutzeragenten so ziemlich alle Zeichen erlaubt sind. ()\ sind die einzigen, die nicht frei platziert werden können.

token ist etwas restriktiver, wie aus RFC72 hervorgeht. Es erlaubt (),/:;<=>[email protected][\]{} nicht.

Benutzeragenten filtern

welche Syntaxregeln legen fest, dass eine Benutzeragentenzeichenfolge zu 100% legitim und keine von Hackern erstellte Zeichenfolge ist?

Da Benutzerprogramme so ziemlich jedes Zeichen enthalten können, ist eine sinnvolle Filterung nicht möglich. Dabei wird nicht einmal berücksichtigt, dass nicht alle Clients dem RFC folgen (die Filterung sollte aus Gründen der Benutzerfreundlichkeit nicht sehr restriktiv sein).

Das Filtern von Benutzereingaben ist eine gute erste Verteidigungslinie, sollte jedoch niemals Ihre einzige sein, da es äußerst schwierig ist, alle Angriffe mit der Eingabefilterung zu verhindern.

Sie benötigen sichere Codierungsmethoden und müssen angemessene Abwehrmaßnahmen gegen häufige Angriffe implementieren. Wenn also das Benutzerprogramm wiederholt wird, müssen Sie es codieren, um XSS zu verhindern. Wenn das Benutzerprogramm in der Datenbank gespeichert ist, müssen Sie vorbereitete Anweisungen verwenden, um die SQL-Injection zu verhindern. Wenn Sie etwas an die Funktion PHP unserialize übergeben, müssen Sie die Objektinjektion im Hinterkopf behalten (ich erwähne dies, weil O:21 ein wenig aussieht, als wäre es ein Test gewesen). Und so weiter.

Wenn Sie eine zusätzliche Verteidigungslinie wünschen, können Sie eine WAF wie mod_security verwenden.

2
tim

Der _User-Agent_ -Header ist Teil des RFC2616 , einer verbesserten Version des RFC1945 .

Das Anforderungsheaderfeld des Benutzeragenten enthält Informationen zum Benutzeragenten, der die Anforderung erstellt hat. Dies dient statistischen Zwecken, der Verfolgung von Protokollverstößen und der automatischen Erkennung von Benutzeragenten, um die Antworten so anzupassen, dass bestimmte Einschränkungen von Benutzeragenten vermieden werden. Benutzerprogramme MÜSSEN dieses Feld bei Anfragen einschließen. Das Feld kann mehrere Produkttoken (Abschnitt 3.8) und Kommentare enthalten, die den Agenten und alle Unterprodukte identifizieren, die einen wesentlichen Teil des Benutzeragenten ausmachen. Standardmäßig werden die Produkt-Tokens in der Reihenfolge ihrer Bedeutung für die Identifizierung der Anwendung aufgelistet.

_   User-Agent     = "User-Agent" ":" 1*( product | comment )
_

Wobei product definiert ist als:

_   product         = token ["/" product-version]
   product-version = token
   token           = 1*<any CHAR except CTLs or separators>
_

Und comment als:

_   comment        = "(" *( ctext | quoted-pair | comment ) ")"
   ctext          = <any TEXT excluding "(" and ")">
_

Quelle: Paulo Santos 's Antwort auf Was ist das Standardformat für den User-Agent-String eines Browsers?

1