Web App Firewall Unterstützung für Google Web Toolkit
Hinweis: Diese Funktion ist in Citrix ADC Version 10.5.e verfügbar.
Webserver, die Google Web Toolkit (GWT) Remote Procedure Call (RPC) -Mechanismen folgen, können durch die Citrix Web App Firewall gesichert werden, ohne dass eine bestimmte Konfiguration erforderlich ist, um die GWT-Unterstützung zu ermöglichen.
Was ist GWT?
Das GWT wird zum Erstellen und Optimieren komplexer Hochleistungs-Webanwendungen von Personen verwendet, die über keine Expertise in XMLHttpRequest und JavaScript verfügen. Dieses Open Source, kostenlose Entwicklungs-Toolkit wird ausgiebig für die Entwicklung von kleinen und großen Anwendungen verwendet und wird häufig verwendet, um Browser-basierte Daten wie Suchergebnisse für Flüge, Hotels usw. anzuzeigen. Das GWT bietet einen Kernsatz von Java-APIs und Widgets zum Schreiben optimierter JavaScript-Skripts, die auf den meisten Browsern und mobilen Geräten ausgeführt werden können. Das GWT RPC-Framework erleichtert es den Client- und Server-Komponenten der Webanwendung, Java-Objekte über HTTP auszutauschen. GWT RPC-Dienste sind nicht identisch mit Webdiensten, die auf SOAP oder REST basieren. Sie sind einfach eine einfache Methode, um Daten zwischen dem Server und der GWT-Anwendung auf dem Client zu übertragen. GWT verarbeitet die Serialisierung der Java-Objekte und tauscht die Argumente in den Methodenaufrufen und den Rückgabewert aus.
Beliebte Websites, die GWT verwenden, finden Sie unter
https://www.quora.com/What-web-applications-use-Google-Web-Toolkit-%28GWT%29
Funktionsweise einer GWT-Anfrage
Die GWT-RPC-Anforderung ist durch Pipe getrennt und hat eine variable Anzahl von Argumenten. Es wird als Payload von HTTP POST getragen und hat die folgenden Werte:
- Content-type = text/x-gwt-rpc. Charset kann ein beliebiger Wert sein.
- Method = POST.
Sowohl GET- als auch POST-HTTP-Anforderungen gelten als gültige GWT-Anforderungen, wenn der Inhaltstyp “text/x-gwt-rpc” ist. Abfragezeichenfolgen werden nun als Teil von GWT-Anforderungen unterstützt. Konfigurieren Sie den Parameter “InspectQueryContentTypes” des App-Firewall-Profils auf “OTHER”, um den Anforderungsabfrageteil für den Konent-Typ “text/x-gwt-rpc” zu untersuchen.
Das folgende Beispiel zeigt eine gültige Nutzlast für eine GWT-Anforderung:
5|0|8|http://localhost:8080/test/|16878339F02B83818D264AE430C20468| com.test.client.TestService|testMethod|java.lang.String|java.lang.Integer| myInput1|java.lang.Integer/3438268394|1|2|3|4|2|5|6|7|8|1|
<!--NeedCopy-->
Die Anfrage kann in drei Teile unterteilt werden:
a)Header: 5|0|8|
Die ersten 3 Ziffern 5|0|8|
in der obigen Anfrage stellen “Version, Subversion und Größe der Tabelle” dar. Dies müssen positive ganze Zahlen sein.
b) String-Tabelle:
http://localhost:8080/test/|16878339F02B83818D264AE430C20468| com.test.client.TestService|testMethod|java.lang.String|java.lang.Integer|myInput1| java.lang.Integer/3438268394|
Die Mitglieder der obigen Pipe getrennten String-Tabelle enthalten die vom Benutzer bereitgestellten Eingaben. Diese Eingaben werden für die Web App Firewall Prüfungen analysiert und wie folgt identifiziert:
-
1.:
http://localhost:8080/test/
Dies ist die Anforderungs-URL.
-
2.:
16878339F02B83818D264AE430C20468
Eindeutige HEX-ID. Eine Anforderung gilt als falsch formatiert, wenn diese Zeichenfolge Nicht-Hex-Zeichen enthält.
-
3.:
com.test.client.TestService
Name der Dienstklasse
-
4.:
testMethod
Name der Dienstmethode
-
Ab 5.:
java.lang.String|java.lang.Integer|myInput1|java.lang.Integer/3438268394
Datentypen und Daten. Nicht-primitive Datentypen werden als
<container>.<sub-cntnr>.name/<integer><identifier>
c)Payload: 1|2|3|4|2|5|6|7|8|1|
Die Nutzlast besteht aus Verweisen auf die Elemente in der String-Tabelle. Diese Ganzzahlwerte dürfen nicht größer sein als die Anzahl der Elemente in der String-Tabelle.
Web App Firewall Schutz für GWT-Anwendungen
Die Web App Firewall versteht und interpretiert GWT RPC-Anforderungen, überprüft die Nutzlast auf Sicherheitsüberprüfungsverletzungen und führt bestimmte Aktionen aus.
Die Header der Web App Firewall und Cookies überprüfen auf GWT-Anforderungen ähneln denen für andere Anforderungsformate. Nach entsprechender URL-Dekodierung und Zeichensatzkonvertierung werden alle Parameter in der String-Tabelle überprüft. Der GWT-Anforderungskörper enthält keine Feldnamen, sondern nur die Feldwerte. Die Eingabewerte können anhand des angegebenen Formats validiert werden, indem Sie die Web App Firewall Feldformatprüfung verwenden, die auch zur Steuerung der Länge der Eingabe verwendet werden kann. Die Cross-Site Scripting und SQL Injection-Angriffe in den Eingaben können leicht von der Web App Firewall erkannt und vereitelt werden.
Lern- und Relaxationsregeln: Das Lernen und die Bereitstellung von Relaxationsregeln werden für GWT-Anfragen unterstützt. Web App Firewall rules are in the form of <actionURL> <fieldName> mapping. Das GWT-Anforderungsformat hat nicht die Feldnamen und erfordert daher eine spezielle Behandlung. Die Web App Firewall fügt Dummy-Feldnamen in die erlernten Regeln ein, die als Relaxationsregeln bereitgestellt werden können. Das Flag -isRegex funktioniert wie bei Nicht-GWT-Regeln.
-
Aktions-URL:
Mehrere Dienste, die auf einen RPC reagieren, können auf demselben Webserver konfiguriert werden. Die HTTP-Anforderung hat die URL des Webservers, nicht des tatsächlichen Dienstes, der den RPC verarbeitet. Daher wird die Entspannung nicht auf der Grundlage der HTTP-Anforderungs-URL angewendet, da dies alle Dienste auf dieser URL für das Zielfeld lockern würde. Für GWT-Anforderungen verwendet die Web App Firewall die URL des tatsächlichen Dienstes, der in der GWT-Nutzlast gefunden wird, im vierten Feld in der String-Tabelle.
-
Feldname:
Da der GWT-Anforderungskörper nur Feldwerte enthält, fügt die Web App Firewall Dummy-Feldnamen wie 1, 2 usw. ein, wenn erlernte Regeln empfohlen werden.
Beispiel für eine GWT-Learned Regel
POST /abcd/def/gh HTTP/1.1 Content-type: text/x-gwt-rpc Host: 10.217.222.75 Content-length: 157 5|0|8|http://localhost:8080/acdtest/|16878339F02Baf83818D264AE430C20468| com.test.client.TestService|testMethod|java.lang.String%3b|java.lang.Integer|onblur| The learn data will be as follows: > sh learningdata pr1 crossSiteScripting Profile: pr1 SecurityCheck: crossSiteScripting 1) Url: http://localhost:8080/acdtest/ >> From GWT Payload. Field: 10 Hits: 1 Done <!--NeedCopy-->
Beispiel für eine GWT-Relaxationsregel
bind appfw profile pr1 -crossSiteScripting 1 abcd -isregex NOTREGEX
Protokollmeldungen: Die Web App Firewall generiert Protokollmeldungen für die Sicherheitsüberprüfungsverletzungen, die in den GWT-Anforderungen erkannt werden. Eine Protokollnachricht, die von einer fehlerhaften GWT-Anforderung generiert wird, enthält die Zeichenfolge GWT zur einfachen Identifizierung.
Beispiel für eine Protokollnachricht für fehlerhafte GWT-Anforderung:
Dec 5 21:48:02 <local0.notice> 10.217.31.247 12/05/2014:21:48:02 GMT ns 0-PPE-0 : APPFW Message 696 0 : "GWT RPC request with malformed payload. <blocked>”
Unterschied in der Verarbeitung von GWT gegenüber Nicht-GWT-Anforderungen:
Dieselbe Nutzlast kann verschiedene Verletzungen der Web App Firewall Sicherheitsprüfung für verschiedene Inhaltstypen auslösen. Betrachten Sie das folgende Beispiel:
5|0|8|http://localhost:8080/acdtest/|16878339F02Baf83818D264AE430C20468|com.test.client.TestService|testMethod|java.lang.String%3b|java.lang.Integer|select|
Content-type: application/x-www-form-urlencoded:
Eine mit diesem Inhaltstyp gesendete Anforderung führt zu einer SQL-Verletzung, wenn der SQL-Injectionstyp so konfiguriert ist, dass eine der vier verfügbaren Optionen verwendet wird: SQLSplCharAndKeyword, SQLSplCharorKeyword, SQLKeyword oder SQLSplchar. Die Web App Firewall betrachtet ‘&’ als Feldtrennzeichen und ‘=’ als Name-Wert-Trennzeichen bei der Verarbeitung der obigen Nutzlast. Da keines dieser Zeichen irgendwo im Posttext angezeigt wird, wird der gesamte Inhalt als einzelner Feldname behandelt. Der Feldname in dieser Anforderung enthält sowohl ein SQL-Sonderzeichen (;) als auch ein SQL-Schlüsselwort (select). Daher werden Verstöße für alle vier SQL-Injection-Typoptionen abgefangen.
Content-type: text/x-gwt-rpc:
Eine Anforderung, die mit diesem Inhaltstyp gesendet wird, löst eine SQL-Verletzung nur aus, wenn der SQL-Injectionstyp auf eine der folgenden drei Optionen festgelegt ist: SQLSplCharORKeyword,SQLKeyword oder SQLSplChar. Es wird keine Verletzung ausgelöst, wenn der SQL-Injectionstyp auf SQLSplCharANDKeyword festgelegt ist, was die Standardoption ist. Die Web App Firewall betrachtet den vertikalen Balken |
als Feldtrennzeichen für die oben genannte Nutzlast in der GWT-Anforderung. Daher wird der Postkörper in verschiedene Formularfeldwerte unterteilt, und Formularfeldnamen werden hinzugefügt (entsprechend der oben beschriebenen Konvention). Aufgrund dieser Aufteilung werden das SQL-Sonderzeichen und das SQL-Schlüsselwort zu Teilen separater Formularfelder.
Formularfeld 8: java.lang.String%3b -\> %3b is the (;) char
Formularfeld 10: select
Wenn SQL Injection Type auf SQLSplcharfestgelegt ist, zeigt Feld 8 die SQL-Verletzung an. Für SQLKeywordgibt Feld 10 die Verletzung an. Beide Felder können auf eine Verletzung hinweisen, wenn der Typ SQL Inject mit der Option SQLSplCharorKeyword konfiguriert ist, die nach dem Vorhandensein eines Schlüsselworts oder eines Sonderzeichens sucht. Für die Standardoption SQLSplCharAndKeyword wird keine Verletzung abgefangen, da kein einzelnes Feld mit einem Wert vorhanden ist, der sowohl SQLSplchar als auch SQLKeyword zusammen enthält.
Tipps:
- Für die Aktivierung der GWT-Unterstützung ist keine spezielle Konfiguration der Web App Firewall erforderlich.
- Der Content-Typ muss text/x-gwt-rpc sein.
- Das Lernen und Bereitstellen der Relaxationsregeln für alle relevanten Web App Firewall -Sicherheitsprüfungen, die auf GWT-Nutzlast angewendet werden, funktioniert genauso wie für die anderen unterstützten Inhaltstypen.
- Nur POST-Anfragen gelten für GWT als gültig. Alle anderen Anforderungsmethoden werden blockiert, wenn der Inhaltstyp text/x-gwt-rpc ist.
- GWT-Anforderungen unterliegen dem konfigurierten POST-Body-Limit des Profils.
- Die Sitzungslose Einstellung für die Sicherheitsprüfungen ist nicht anwendbar und wird ignoriert.
- Das CEF-Protokollformat wird für die GWT-Protokollmeldungen unterstützt.