Soporte de Web App Firewall para el kit de herramientas web de Google

Nota: Esta función está disponible en Citrix ADC versión 10.5.e.

Los servidores web que siguen los mecanismos de llamada a procedimiento remoto (RPC) de Google Web Toolkit (GWT) pueden ser protegidos por Citrix Web App Firewall sin necesidad de ninguna configuración específica para habilitar la compatibilidad con GWT.

¿Qué es GWT

GWT se utiliza para crear y optimizar aplicaciones web complejas de alto rendimiento por personas que no tienen experiencia en XMLHttpRequest y JavaScript. Este kit de herramientas de desarrollo gratuito de código abierto se utiliza ampliamente para desarrollar aplicaciones de pequeña y gran escala y se utiliza con bastante frecuencia para mostrar datos basados en el explorador, como resultados de búsqueda para vuelos, hoteles, etc. GWT proporciona un conjunto básico de API Java y widgets para escribir scripts JavaScript optimizados que se pueden ejecutar en la mayoría de los exploradores y dispositivos móviles. El marco GWT RPC facilita que los componentes cliente y servidor de la aplicación web intercambien objetos Java a través de HTTP. Los servicios GWT RPC no son los mismos que los servicios web basados en SOAP o REST. Son simplemente un método ligero para transferir datos entre el servidor y la aplicación GWT en el cliente. GWT maneja la serialización de los objetos Java intercambiando los argumentos en las llamadas al método y el valor devuelto.

Para los sitios web más populares que usan GWT, consulte

https://www.quora.com/What-web-applications-use-Google-Web-Toolkit-%28GWT%29

Cómo funciona una solicitud GWT

La solicitud GWT RPC está delimitada por procesos y tiene un número variable de argumentos. Se lleva como una carga útil de HTTP POST y tiene los siguientes valores:

  1. Content-type = text/x-gwt-rpc. Charset puede ser cualquier valor.
  2. Método = POST.

Tanto las solicitudes GET como POST HTTP se consideran solicitudes GWT válidas si el tipo de contenido es “text/x-gwt-rpc”. Las cadenas de consulta ahora son compatibles como parte de las solicitudes GWT. Configure el parámetro “InspectQueryContentTypes” del perfil de App Firewall en “Other” para examinar la porción de consulta de solicitud para el tipo de content-type “text/x-gwt-rpc”.

El siguiente ejemplo muestra una carga útil válida para una solicitud GWT:

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|

La solicitud se puede dividir en tres partes:

a) Header: 5|0|8|

Los primeros 3 dígitos “5 0 8 ” en la solicitud anterior, representan “versión, subversión y tamaño de la tabla”, respectivamente. Estos deben ser enteros positivos.

b) Tabla de cadenas:

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

Los miembros de la tabla de cadenas delimitadas por procesos anteriores contienen las entradas proporcionadas por el usuario. Estas entradas se analizan para las comprobaciones de Web App Firewall y se identifican de la siguiente manera:

  • 1.º:http://localhost:8080/test/

    Esta es la URL de solicitud.

  • 2.º: 16878339F02B83818D264AE430C20468

    Identificador HEX único. Una solicitud se considera mal formada si esta cadena tiene caracteres no hexadecimales.

  • 3.º: com.test.client.TestService

    Nombre de la clase de servicio

  • 4.º: testMethod

    Nombre del método de servicio

  • A partir del 5.º: java.lang.String|java.lang.Integer|myInput1|java.lang.Integer/3438268394

    Tipos de datos y datos. Los tipos de datos no primitivos se especifican como

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

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

La carga útil consiste en referencias a los elementos de la tabla de cadenas. Estos valores enteros no pueden ser mayores que el número de elementos de la tabla de cadenas.

Protección de Web App Firewall para aplicaciones GWT

El Web App Firewall entiende e interpreta las solicitudes de GWT RPC, inspecciona la carga útil para detectar infracciones de comprobación de seguridad y realiza acciones específicas.

Los encabezados de Web App Firewall y las comprobaciones de cookies para solicitudes GWT son similares a los de otros formatos de solicitud. Después de la decodificación URL apropiada y la conversión del juego de caracteres, se inspeccionan todos los parámetros de la tabla de cadenas. El cuerpo de la solicitud GWT no contiene nombres de campo, solo los valores de campo. Los valores de entrada se pueden validar con el formato especificado mediante la comprobación Formato de campo de Web App Firewall, que también se puede utilizar para controlar la longitud de la entrada. Los ataques de Scripting entre sitios y SQL Injection en las entradas pueden ser fácilmente detectados y frustrados por el Web App Firewall.

Reglas de aprendizaje y relajación: el aprendizaje y el implementación de reglas de relajación son compatibles con las solicitudes GWT. Las reglas de Web App Firewall están en forma de <actionURL> <fieldName> mapeo. El formato de solicitud GWT no tiene los nombres de campo y, por lo tanto, requiere un manejo especial. El Web App Firewall inserta nombres de campo ficticios en las reglas aprendidas que se pueden implementar como reglas de relajación. El indicador -IsRegex funciona como lo hace para reglas que no son GWT.

  • URL de acción:

    Se pueden configurar varios servicios que responden a un RPC en el mismo servidor web. La solicitud HTTP tiene la dirección URL del servidor web, no del servicio real que maneja el RPC. Por lo tanto, la relajación no se aplica sobre la base de la URL de solicitud HTTP, porque eso relajaría todos los servicios de esa URL para el campo de destino. Para las solicitudes GWT, Web App Firewall utiliza la dirección URL del servicio real que se encuentra en la carga útil GWT, en el cuarto campo de la tabla de cadenas.

  • Nombre del campo:

    Dado que el cuerpo de la solicitud GWT solo contiene valores de campo, Web App Firewall inserta nombres de campo ficticios como 1, 2, etc. al recomendar reglas aprendidas.

    Ejemplo de una regla de GWT aprendida

     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
    

    Ejemplo de una regla de relajación GWT

    bind appfw profile pr1 -crossSiteScripting 1 abcd -isregex NOTREGEX

Mensajes de registro: Web App Firewall genera mensajes de registro para las infracciones de comprobación de seguridad detectadas en las solicitudes GWT. Un mensaje de registro generado por una solicitud GWT mal formada contiene la cadena “GWT” para facilitar la identificación.

Ejemplo de un mensaje de registro para solicitud GWT mal formada:

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>”

Diferencia en el procesamiento de solicitudes GWT vs no GWT:

La misma carga útil puede desencadenar diferentes infracciones de comprobación de seguridad de Web App Firewall para diferentes tipos de contenido. Considere el siguiente ejemplo:

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:

Una solicitud enviada con este tipo de contenido da como resultado una infracción SQL si el tipo de inyección SQL está configurado para utilizar cualquiera de las cuatro opciones disponibles: SQLSplCharANDKeyword, SQLSplCharORKeyword, SQLKeyword o SQLSplChar. El Web App Firewall considera que ‘&’ es el separador de campos y ‘=’ es el separador de nombre-valor al procesar la carga útil anterior. Dado que ninguno de estos caracteres aparece en ninguna parte del cuerpo de la publicación, todo el contenido se trata como un único nombre de campo. El nombre de campo de esta solicitud contiene tanto un carácter especial SQL (;) como una palabra clave SQL (select). Por lo tanto, las violaciones se detectan para las cuatro opciones de tipo de inyección SQL.

Tipo de contenido: text/x-gwt-rpc:

Una solicitud enviada con este tipo de contenido desencadena una infracción SQL solo si el tipo de inyección SQL se establece en una de las tres opciones siguientes:SQLSPLCharorKeyword, SQLKeyword o SQLPlChar. No se desencadena ninguna infracción si el tipo de inyección SQL se establece en SqlsPlCharandKeyword, que es la opción predeterminada. El Web App Firewall considera la barra vertical ‘ ‘para ser el separador de campo para la carga útil anterior en la solicitud GWT. Por lo tanto, el cuerpo del poste se divide en varios valores de campo de formulario y se agregan nombres de campo de formulario (de acuerdo con la convención descrita anteriormente). Debido a esta división, el carácter especial SQL y la palabra clave SQL se convierten en partes de campos de formulario independientes.

Campo de formulario 8: java.lang.String%3b ->%3b es el carácter (;)

Campo de formulario 10: seleccione

Como resultado, cuando el tipo de inyección SQL se establece en SQLSplChar, el campo 8 indica la infracción SQL. Para SQLKeyword, el campo 10 indica la infracción. Cualquiera de estos dos campos puede indicar una infracción si el tipo Inject SQL está configurado con la opción SqlsPlCharorKeyword, que busca la presencia de una palabra clave o de un carácter especial. No se detecta ninguna infracción para la opción predeterminada SQLSplCharandKeyword, porque no hay ningún campo único que tenga un valor que contenga tanto SQLSplChar como SQLKeyword juntos.

Consejos:

  • No se necesita ninguna configuración especial de Web App Firewall para habilitar la compatibilidad con GWT.
  • El tipo de contenido debe ser text/x-gwt-rpc.
  • El aprendizaje y la implementación de las reglas de relajación para todas las comprobaciones de seguridad pertinentes de Web App Firewall aplicadas a la carga útil GWT funciona igual que para los otros tipos de contenido admitidos.
  • Solo las solicitudes POST se consideran válidas para GWT. Todos los demás métodos de solicitud están bloqueados si el tipo de contenido es text/x-gwt-rpc.
  • Las solicitudes GWT están sujetas al límite de cuerpo POST configurado del perfil.
  • La configuración sin sesión para las comprobaciones de seguridad no es aplicable y se ignorará.
  • El formato de registro CEF es compatible con los mensajes de registro GWT.

Soporte de Web App Firewall para el kit de herramientas web de Google