ADC

Web App Firewall-Unterstützung für das Google Web Toolkit

Hinweis: Diese Funktion ist in NetScaler Version 10.5.e verfügbar.

Webserver, die den Remote Procedure Call (RPC) -Mechanismen des Google Web Toolkit (GWT) folgen, können durch die NetScaler Web App Firewall gesichert werden, ohne dass eine spezielle Konfiguration erforderlich ist, um die GWT-Unterstützung zu aktivieren.

Was ist GWT

Das GWT wird für die Erstellung und Optimierung komplexer Hochleistungs-Webanwendungen von Personen verwendet, die keine Erfahrung mit XMLHttpRequest und JavaScript haben. Dieses kostenlose Open-Source-Entwicklungs-Toolkit wird in großem Umfang für die Entwicklung kleiner und großer Anwendungen verwendet und häufig für die Anzeige von browserbasierten Daten wie Suchergebnissen für Flüge, Hotels usw. verwendet. 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 den Client- und Serverkomponenten der Webanwendung den Austausch von Java-Objekten über HTTP. GWT RPC-Dienste sind nicht dasselbe wie Webdienste, die auf SOAP oder REST basieren. Sie sind einfach eine einfache Methode für die Übertragung von Daten zwischen dem Server und der GWT-Anwendung auf dem Client. GWT kümmert sich um 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

So funktioniert eine GWT-Anfrage

Die GWT-RPC-Anfrage ist durch eine Pipe getrennt und hat eine variable Anzahl von Argumenten. Es wird als Payload von HTTP POST übertragen und hat die folgenden Werte:

  1. Inhaltstyp = text/x-gwt-rpc. Charset kann ein beliebiger Wert sein.
  2. Methode = POST.

Sowohl GET- als auch POST-HTTP-Anfragen werden als gültige GWT-Anfragen betrachtet, wenn der Inhaltstyp „text/x-gwt-rpc“ ist. Abfragezeichenfolgen werden jetzt als Teil von GWT-Anfragen unterstützt. Konfigurieren Sie den Parameter „inspectQueryContentTypes“ des App Firewall-Profils auf „OTHER“, um den Anforderungsabfrageteil auf den Inhaltstyp „text/x-gwt-rpc“ zu untersuchen.

Das folgende Beispiel zeigt eine gültige Payload für eine GWT-Anfrage:

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 stehen jeweils für “Version, Subversion und Größe der Tabelle”. Dies müssen positive Ganzzahlen sein.

b) Stringtabelle:

http://localhost:8080/test/|16878339F02B83818D264AE430C20468| com.test.client.TestService|testMethod|java.lang.String|java.lang.Integer|myInput1| java.lang.Integer/3438268394|

Die Elemente der obigen durch Pipe getrennten Zeichenfolgentabelle 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-Kennung. Eine Anfrage gilt als falsch formatiert, wenn diese Zeichenfolge Nicht-Hex-Zeichen enthält.

  • 3.: com.test.client.TestService

    Name der Serviceklasse

  • 4.: testMethod

    Name der Servicemethode

  • Ab 5.: java.lang.String|java.lang.Integer|myInput1|java.lang.Integer/3438268394

    Datentypen und Daten. Nicht-primitive Datentypen werden spezifiziert als

    <container>.<sub-cntnr>.name/<integer><identifier>

c) Payload: 1|2|3|4|2|5|6|7|8|1|

Die Payload besteht aus Verweisen auf die Elemente in der String-Tabelle. Diese Ganzzahlwerte können nicht größer sein als die Anzahl der Elemente in der Zeichenfolgentabelle.

Web App Firewall-Schutz für GWT-Anwendungen

Die Web App Firewall versteht und interpretiert GWT-RPC-Anfragen, überprüft die Payload auf Verstöße gegen die Sicherheitsüberprüfung und ergreift bestimmte Maßnahmen.

Die Header- und Cookie-Prüfungen der Web App Firewall für GWT-Anfragen ähneln denen für andere Anforderungsformate. Nach der entsprechenden URL-Dekodierung und Zeichensatzkonvertierung werden alle Parameter in der Stringtabelle überprüft. Der GWT-Anforderungstext enthält keine Feldnamen, sondern nur die Feldwerte. Die Eingabewerte können anhand des angegebenen Formats überprüft werden, indem die Web App Firewall Field Format Check verwendet wird, mit der auch die Länge der Eingabe gesteuert werden kann. Die Cross-Site Scripting - und SQL-Injection-Angriffe in den Eingaben können von der Web App Firewall leicht erkannt und vereitelt werden.

Lern- und Entspannungsregeln: Das Erlernen und Anwenden von Entspannungsregeln werden für GWT-Anfragen unterstützt. Die Web App Firewall-Regeln haben die Form von <actionURL> <fieldName>. Das GWT-Anforderungsformat hat keine Feldnamen und erfordert daher eine spezielle Behandlung. Die Web App Firewall fügt Dummy-Feldnamen in die erlernten Regeln ein, die als Relaxationsregeln verwendet werden können. Das -isRegex-Flag funktioniert genauso wie bei Regeln, die nicht unter GWT fallen.

  • Aktions-URL:

    Mehrere Dienste, die auf einen RPC reagieren, können auf demselben Webserver konfiguriert werden. Die HTTP-Anfrage hat die URL des Webservers, nicht des eigentlichen 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-Anfragen verwendet die Web App Firewall die URL des tatsächlichen Dienstes, der in der GWT-Payload im vierten Feld der String-Tabelle zu finden ist.

  • Feldname:

    Da der GWT-Anforderungstext nur Feldwerte enthält, fügt die Web App Firewall bei der Empfehlung erlernter Regeln Scheinfeldnamen wie 1, 2 usw. ein.

    Beispiel für eine gelernte GWT-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 Verstöße gegen die Sicherheitsüberprüfung, die in den GWT-Anfragen festgestellt wurden. Eine durch eine falsch formatierte GWT-Anfrage generierte Protokollnachricht enthält zur einfachen Identifizierung die Zeichenfolge „GWT“.

Beispiel für eine Lognachricht für eine falsch formatierte GWT-Anfrage:

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 bei der Verarbeitung von GWT- und Nicht-GWT-Anfragen:

Dieselbe Payload kann verschiedene Verstöße gegen die Web App Firewall-Sicherheitsüberprü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|

Inhaltstyp: application/x-www-form-urlencoded:

Eine mit diesem Inhaltstyp gesendete Anfrage führt zu einer SQL-Verletzung, wenn der SQL Injection Type so konfiguriert ist, dass er eine der vier verfügbaren Optionen verwendet: sqlSplcharAndKeyword, sqlSplcharOrKeyword, sqlKeyword oder sqlSplChar. Die Web App Firewall betrachtet bei der Verarbeitung der obigen Payload ‘&’ als Feldtrennzeichen und ‘=’ als das Name-Wert-Trennzeichen. Da keines dieser Zeichen irgendwo im Beitragstext vorkommt, wird der gesamte Inhalt als ein einziger Feldname behandelt. Der Feldname in dieser Anfrage enthält sowohl ein SQL-Sonderzeichen (;) als auch ein SQL-Schlüsselwort (select). Daher werden Verstöße für alle vier SQL-Injection-Typoptionen erkannt.

Inhaltstyp: text/x-gwt-rpc:

Eine mit diesem Inhaltstyp gesendete Anfrage löst nur dann eine SQL-Verletzung aus, wenn der SQL-Injection-Typ auf eine der folgenden drei Optionen gesetzt ist: SqlSplcharOrKeyword, SqlKeyword oder SqlSplChar. Es wird keine Verletzung ausgelöst, wenn der SQL-Injektionstyp auf sqlSplcharAndKeyword gesetzt ist, was die Standardoption ist. Die Web App Firewall betrachtet den vertikalen Balken | als Feldtrennzeichen für die obige Payload in der GWT-Anfrage. Daher wird der Beitragstext in verschiedene Formularfeldwerte unterteilt, und Formularfeldnamen werden hinzugefügt (gemäß der zuvor 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 der SQL-Injection-Typ auf SQLSplChargesetzt ist, gibt Feld 8 daher die SQL-Verletzung an. Für SqlKeywordgibt Feld 10 den Verstoß an. Jedes dieser beiden Felder kann auf eine Verletzung hinweisen, wenn der SQL-Inject-Typ mit der Option SqlSplCharOrKeyword konfiguriert ist, die nach dem Vorhandensein eines Schlüsselworts oder eines Sonderzeichens sucht. **Für die Standardoption **SqlSplCharAndKeyword wurde kein Verstoß festgestellt, da es kein einzelnes Feld gibt, das einen Wert hat, der sowohl SqlSplChar als auch SqlKeyword zusammen enthält.**

Tipps:

  • Es ist keine spezielle Web App Firewall-Konfiguration erforderlich, um die GWT-Unterstützung zu aktivieren.
  • Der Inhaltstyp muss text/x-gwt-rpc sein.
  • Das Erlernen und Implementieren der Lockerungsregeln für alle relevanten Web App Firewall-Sicherheitsprüfungen, die auf GWT-Payload angewendet werden, funktioniert genauso wie bei den anderen unterstützten Inhaltstypen.
  • Nur POST-Anfragen werden für GWT als gültig angesehen. Alle anderen Anforderungsmethoden werden blockiert, wenn der Inhaltstyp text/x-gwt-rpc ist.
  • GWT-Anfragen unterliegen dem konfigurierten POST-Body-Limit des Profils.
  • Die Einstellung „Sitzungslos“ für die Sicherheitsüberprüfungen ist nicht anwendbar und wird ignoriert.
  • Das CEF-Protokollformat wird für die GWT-Protokollnachrichten unterstützt.
Web App Firewall-Unterstützung für das Google Web Toolkit