Comprobación de scripts XML entre sitios

La comprobación XML Cross-Site Scripting examina las solicitudes de los usuarios para posibles ataques de scripts entre sitios en la carga útil XML. Si encuentra un posible ataque de scripts entre sitios, bloquea la solicitud.

Para evitar el uso indebido de las scripts de los servicios web protegidos para infringir la seguridad de los servicios web, la comprobación XML Cross-Site Scripting bloquea las scripts que infringen la misma regla de origen, que establece que los scripts no deben tener acceso ni modificar el contenido de ningún servidor que no sea el servidor en el que se encuentran. Cualquier script que infrinja la misma regla de origen se denomina script entre sitios, y la práctica de utilizar scripts para acceder o modificar contenido en otro servidor se denomina script entre sitios. La razón por la que las scripts entre sitios son un problema de seguridad es que un servidor web que permite la creación de scripts entre sitios puede ser atacado con un script que no está en ese servidor web, sino en un servidor web diferente, como uno propiedad y controlado por el atacante.

El Web App Firewall ofrece varias opciones de acción para implementar la protección de scripts XML entre sitios. Tiene la opción de configurar acciones Bloquear, Registrary Estadísticas.

La comprobación XML XSS de Web App Firewall se realiza en la carga útil de las solicitudes entrantes y las cadenas de ataque se identifican incluso si se distribuyen en varias líneas. La comprobación busca cadenas de ataque XSS en el elemento y los valores de atributo. Puede aplicar relajantes para eludir la inspección de comprobación de seguridad bajo condiciones especificadas. Los registros y las estadísticas pueden ayudarle a identificar las relajantes necesarias.

La sección CDATA de la carga útil XML podría ser un área de enfoque atractiva para los hackers porque los scripts no son ejecutables fuera de la sección CDATA. Una sección CDATA se utiliza para el contenido que se va a tratar completamente como datos de caracteres. Los delimitadores de etiquetas de marca HTML <, >y />no harán que el analizador interprete el código como elementos HTML. El siguiente ejemplo muestra una sección CDATA con cadena de ataque XSS:

    <![CDATA[rn
    <script language="Javascript" type="text/javascript">alert ("Got you")</script>rn
    ]]>

Opciones de acción

Se aplica una acción cuando la comprobación XML Cross-Site Scripting detecta un ataque XSS en la solicitud. Las siguientes opciones están disponibles para optimizar la protección de scripts XML entre sitios para su aplicación:

  • Bloquear: la acción de bloqueo se activa si se detectan las etiquetas XSS en la solicitud.
  • Registro: genera mensajes de registro que indican las acciones realizadas por la comprobación XML Cross-Site Scripting. Si el bloque está inhabilitado, se genera un mensaje de registro independiente para cada ubicación (ELEMENT, ATTRIBUTE) en la que se detecta la infracción XSS. Sin embargo, solo se genera un mensaje cuando se bloquea la solicitud. Puede supervisar los registros para determinar si las respuestas a las solicitudes legítimas se están bloqueando. Un gran aumento en el número de mensajes de registro puede indicar intentos de lanzar un ataque.
  • Estadísticas: permite recopilar estadísticas sobre infracciones y registros. Un aumento inesperado en el contador de estadísticas podría indicar que su aplicación está siendo atacada. Si las solicitudes legítimas se bloquean, es posible que tenga que volver a visitar la configuración para ver si necesita configurar nuevas reglas de relajación o modificar las existentes.

Reglas de relajación

Si la aplicación requiere que omita la comprobación Cross-Site Scripting para un ELEMENT o ATTRIBUTE específico en la carga útil XML, puede configurar una regla de relajación. Las reglas de relajación de comprobación XML Cross-Site Scripting tienen los siguientes parámetros:

  • Name—Puede utilizar cadenas literales o expresiones regulares para configurar el nombre del ELEMENTO o del Atributo. La siguiente expresión exime a todos los ELEMENTOS que comiencen con la cadena name_ seguida de una cadena de letras mayúsculas o minúsculas, o números, que tenga al menos dos y no más de quince caracteres de longitud:

    ^name_[0-9A-Za-z]{2,15}$

Nota

Los nombres distinguen mayúsculas de minúsculas. No se permiten entradas duplicadas, pero puede utilizar mayúsculas y minúsculas de los nombres y las diferencias de ubicación para crear entradas similares. Por ejemplo, cada una de las siguientes reglas de relajación es única:

  1. XMLXSS: ABC IsRegex: NOTREGEX Location: ATTRIBUTE State: ENABLED

  2. XMLXSS: ABC IsRegex: NOTREGEX Location: ELEMENT State: ENABLED

  3. XMLXSS: abc IsRegex: NOTREGEX Location: ELEMENT State: ENABLED

  4. XMLXSS: abc IsRegex: NOTREGEX Location: ATTRIBUTE State: ENABLED

  • Ubicación: puede especificar la ubicación de la excepción Comprobación de scripts entre sitios en la carga XML. La opción ELEMENT está seleccionada por defecto. Puede cambiarlo a ATTRIBUTE.
  • Comentario: se trata de un campo opcional. Puede utilizar hasta una cadena de 255 caracteres para describir el propósito de esta regla de relajación.

Advertencia

Las expresiones regulares son potentes. Especialmente si no está completamente familiarizado con las expresiones regulares con formato PCRE-format, compruebe las expresiones regulares que escriba. Asegúrese de que definen exactamente el nombre que quiere agregar como excepción, y nada más. El uso descuidado de expresiones regulares puede tener resultados que no quiera, como bloquear el acceso al contenido web que no tenía intención de bloquear o permitir un ataque que la comprobación de scripts XML entre sitios habría bloqueado de otro modo.

Comprobación Uso de la línea de comandos para configurar la script XML entre sitios

Para configurar XML Cross-Site Scripting, compruebe las acciones y otros parámetros mediante la línea de comandos

Si utiliza la interfaz de línea de comandos, puede introducir los siguientes comandos para configurar la comprobación de scripts entre sitios XML:

> set appfw profile <name> -XMLXSSAction (([block] [log] [stats]) | [none])

Para configurar una regla de relajación de comprobación de scripts XML entre sitios mediante la línea de comandos

Puede agregar reglas de relajación para omitir la inspección de ataques de scripts XSS en una ubicación específica. Utilice el comando bind o unbind para agregar o eliminar el enlace de la regla de relajación, como se indica a continuación:

> bind appfw profile <name> -XMLXSS <string> [isRegex (REGEX | NOTREGEX)] [-location ( ELEMENT | ATTRIBUTE )] –comment <string> [-state ( ENABLED | DISABLED )]

> unbind appfw profile <name> -XMLXSS <String>

Ejemplo:

> bind appfw profile test_pr -XMLXSS ABC

Después de ejecutar el comando anterior, se configura la siguiente regla de relajación. La regla está habilitada, el nombre se trata como un literal (NOTREGEX) y ELEMENT se selecciona como la ubicación predeterminada:

1)      XMLXSS:  ABC             IsRegex:  NOTREGEX

        Location:  ELEMENT       State:  ENABLED

`> unbind appfw profile test_pr -XMLXSS abc`

ERROR: No such XMLXSS check

`> unbind appfw profile test_pr -XMLXSS ABC`

 Done

Uso de la GUI para configurar la comprobación de scripts XML entre sitios

En la GUI, puede configurar la comprobación de scripts XML entre sitios en el panel del perfil asociado a la aplicación.

Para configurar o modificar la comprobación XML Cross-Site Scripting mediante la interfaz gráfica de usuario

  1. Vaya a Web App Firewall > Perfiles, resalte el perfil de destino y haga clic en Modificar.
  2. En el panel Configuración avanzada, haga clic en Comprobaciones de seguridad.

La tabla de comprobación de seguridad muestra los valores de acción configurados actualmente para todas las comprobaciones de seguridad. Tiene 2 opciones para la configuración:

a) Si solo quiere habilitar o inhabilitar las acciones Bloquear, Registrar y Estadísticas para la verificación XML Cross-Site Scripting, puede activar o desactivar las casillas de verificación de la tabla, hacer clic en Aceptar y, a continuación, en Guardar y cerrar para cerrar el panel Comprobación de seguridad.

b) Puede hacer doble clic en XML Cross-Site Scripting, o seleccionar la fila y hacer clic en Configuración de acción, para mostrar las opciones de acción. Después de cambiar cualquiera de las opciones de acción, haga clic en Aceptar para guardar los cambios y volver a la tabla Comprobaciones de seguridad.

Puede proceder a configurar otras comprobaciones de seguridad si es necesario. Haga clic en Aceptar para guardar todos los cambios realizados en la sección Comprobaciones de seguridad y, a continuación, haga clic en Guardar y cerrar para cerrar el panel Comprobación de seguridad.

Para configurar una regla de relajación de scripts XML entre sitios mediante la interfaz gráfica de usuario

  1. Vaya a Web App Firewall > Perfiles, resalte el perfil de destino y haga clic en Modificar.
  2. En el panel Configuración avanzada, haga clic en Reglas de relajación.
  3. En la tabla Reglas de relajación, haga doble clic en la entrada XML Cross-Site Scripting, o selecciónela y haga clic en Modificar.
  4. En el cuadro de diálogo Reglas de relajación de scripts entre sitios XML, realice las operaciones Agregar, Modificar, Eliminar, Habilitar o Inhabilitar para las reglas de relajación.

Para administrar reglas de relajación de scripts XML entre sitios mediante el visualizador

Para obtener una vista consolidada de todas las reglas de relajación, puede resaltar la fila XML Cross-Site Scripting en la tabla Reglas de relajación y hacer clic en Visualizador. El visualizador para las relajaciones implementadas le ofrece la opción de Agregar una nueva regla o Modificar una existente. También puede habilitar o inhabilitar un grupo de reglas seleccionando un nodo y haciendo clic en los botones correspondientes en el visualizador de relajación.

Para ver o personalizar los patrones de scripts entre sitios mediante la interfaz gráfica de usuario

Puede utilizar la GUI para ver o personalizar la lista predeterminada de atributos XSS permitidos o etiquetas permitidas. También puede ver o personalizar la lista predeterminada de patrones denegados XSS.

Las listas predeterminadas se especifican en Web App Firewall > Firmas > Firmas predeterminadas. Si no vincula ningún objeto de firma a su perfil, el perfil utilizará la lista XSS Permitido y Denegado predeterminada especificada en el objeto Firmas predeterminadas para el procesamiento de comprobación de seguridad Cross-Site Scripting. Tags, Attributes y Patterns, especificados en el objeto de firmas predeterminado, son de solo lectura. No puede modificarlos ni modificarlos. Si quiere modificarlos o cambiarlos, realice una copia del objeto Signatures Default para crear un objeto Signatures definido por el usuario. Realice cambios en las listas Permitidas o Denegadas del nuevo objeto de firma definido por el usuario y utilice este objeto de firma en el perfil que está procesando el tráfico para el que quiere utilizar estas listas personalizadas permitidas y denegadas.

Para obtener más información acerca de las firmas, consulte http://support.citrix.com/proddocs/topic/ns-security-10-map/appfw-signatures-con.html.

Para ver los patrones XSS predeterminados:

  1. Vaya a Web App Firewall > Firmas, seleccione *Firmas predeterminadas y haga clic en Modificar. A continuación, haga clic en Administrar patrones SQL/XSS.

La tabla Administrar rutas SQL/XSS muestra las siguientes tres filas pertenecientes a XSS:

           xss/allowed/attribute

           xss/allowed/tag

           xss/denied/pattern

Seleccione una fila y haga clic en Administrar elementos para mostrar los elementos XSS correspondientes (Etiqueta, Atributo, Patrón) utilizados por la comprobación Web App Firewall Cross-Site Scripting.

Para personalizar elementos XSS: puede modificar el objeto de firma definido por el usuario para personalizar la etiqueta, los atributos permitidos y los patrones denegados permitidos. Puede agregar nuevas entradas o eliminar las existentes.

  1. Vaya a Web App Firewall > Firmas, resalte la firma definida por el usuario de destino y haga clic en Modificar. Haga clic en Administrar patrones SQL/XSS para mostrar la tabla Administrar rutas SQL/XSS.
  2. Seleccione la fila XSS de destino.

a) Haga clic en Administrar elementos, para agregar, modificaro eliminarel elemento XSS correspondiente.

b) Haga clic en Eliminar para eliminar la fila seleccionada.

Advertencia

Tenga mucho cuidado cuando elimine o modifique cualquier elemento XSS predeterminado, o elimine la ruta XSS para eliminar toda la fila. Las firmas, la comprobación de seguridad HTML Cross-Site Scripting y la comprobación de seguridad XML Cross-Site Scripting se basan en estos elementos para detectar ataques con el fin de proteger las aplicaciones. Personalizar los elementos XSS puede hacer que la aplicación sea vulnerable a los ataques de scripts entre sitios si se elimina el patrón requerido durante la edición.

Uso de la función de registro con la comprobación de scripts XML entre sitios

Cuando se habilita la acción de registro, las infracciones de comprobación de seguridad de scripts XML entre sitios se registran en el registro de auditoría como infracciones de APTFW_XML_XSS. El Web App Firewall admite los formatos de registro nativo y CEF. También puede enviar los registros a un servidor syslog remoto.

Para acceder a los mensajes de registro mediante la línea de comandos

Cambie al shell y siga los ns.logs en la carpeta /var/log/ para acceder a los mensajes de registro correspondientes a las infracciones XML Cross-Site Scripting:

> \*\*Shell\*\*

> \*\*tail -f /var/log/ns.log | grep APPFW_XML_XSS\*\*

Ejemplo de un mensaje de registro de infracción de comprobación de seguridad de scripts XML entre sitios en formato de registro nativo que muestra la acción <blocked>

Oct  7 01:44:34 <local0.warn> 10.217.31.98 10/07/2015:01:44:34 GMT ns 0-PPE-1 : default APPFW APPFW_XML_XSS 1154 0 :  10.217.253.69 3466-PPE1 - owa_profile http://10.217.31.101/FFC/login.html Cross-site script check failed for field script="Bad tag: script" <\*\*blocked\*\*>

Ejemplo de un mensaje de registro de infracción de comprobación de seguridad XML Cross-Site Scripting en formato de registro CEF que muestra la acción <not blocked>

Oct  7 01:46:52 <local0.warn> 10.217.31.98 CEF:0|Citrix|Citrix ADC|NS11.0|APPFW|APPFW_XML_XSS|4|src=10.217.30.17 geolocation=Unknown spt=33141 method=GET request=http://10.217.31.101/FFC/login.html msg=Cross-site script check failed for field script="Bad tag: script" cn1=1607 cn2=3538 cs1=owa_profile cs2=PPE0 cs4=ERROR cs5=2015 act=\*\*not blocked\*\*

Para acceder a los mensajes de registro mediante la interfaz gráfica de usuario

La GUI de Citrix incluye una herramienta útil (Syslog Viewer) para analizar los mensajes de registro. Tiene varias opciones para acceder al Visor de Syslog:

  • Vaya a Servidor de seguridad de aplicaciones web > Perfiles, seleccione el perfil de destino y haga clic en Comprobaciones de seguridad. Resalte la fila XML Cross-Site Scripting y haga clic en Registros. Cuando accede a los registros directamente desde la comprobación XML Cross-Site Scripting del perfil, la GUI filtra los mensajes de registro y muestra solo los registros correspondientes a estas infracciones de comprobación de seguridad.

  • También puede acceder al Visor de Syslog navegando a Citrix ADC > Sistema > Auditoría. En la sección Mensajes de auditoría, haga clic en el vínculo Mensajes de Syslog para mostrar el Visor de Syslog, que muestra todos los mensajes de registro, incluidos otros registros de infracciones de comprobación de seguridad. Esto es útil para depurar cuando se pueden desencadenar varias infracciones de comprobación de seguridad durante el procesamiento de solicitudes.

  • Desplácese hasta Web App Firewall > Directivas > Auditoría. En la sección Mensajes de auditoría, haga clic en el vínculo Mensajes de Syslog para mostrar el Visor de Syslog, que muestra todos los mensajes de registro, incluidos otros registros de infracciones de comprobación de seguridad.

El Visor de Syslog basado en XML proporciona varias opciones de filtro para seleccionar solo los mensajes de registro que le interesan. Para seleccionar mensajes de registro para la comprobación XML Cross-Site Scripting, filtre seleccionando APTFW en las opciones desplegables del módulo. La lista Tipo de evento ofrece un amplio conjunto de opciones para refinar aún más su selección. Por ejemplo, si activa la casilla de verificación APTFW_XML_XSS y hace clic en el botón Aplicar, solo aparecerán mensajes de registro relacionados con las infracciones de comprobación de seguridad de scripts XML entre sitios en el Visor de Syslog.

Si coloca el cursor en la fila de un mensaje de registro específico, aparecen varias opciones, como Módulo, Tipo de evento, ID de evento, IP de cliente, etc. debajo del mensaje de registro. Puede seleccionar cualquiera de estas opciones para resaltar la información correspondiente en el mensaje de registro.

Estadísticas de las infracciones de scripts entre sitios XML

Cuando la acción de estadísticas está habilitada, el contador de la comprobación XML Cross-Site Scripting se incrementa cuando el Web App Firewall realiza cualquier acción para esta comprobación de seguridad. Las estadísticas se recopilan para Rate and Total count para Tráfico, Violaciones y Registros. El tamaño de un incremento del contador de registro puede variar dependiendo de la configuración configurada. Por ejemplo, si la acción de bloqueo está habilitada, una solicitud de una página que contiene tres infracciones de scripts XML entre sitios aumenta el contador de estadísticas en uno, porque la página se bloquea tan pronto como se detecta la primera infracción. Sin embargo, si el bloque está inhabilitado, el procesamiento de la misma solicitud aumenta en tres el contador de estadísticas para infracciones y los registros, ya que cada infracción genera un mensaje de registro independiente.

Para mostrar las estadísticas de comprobación de scripts XML entre sitios mediante la línea de comandos

En el símbolo del sistema, escriba:

> **sh appfw stats**

Para mostrar las estadísticas de un perfil específico, utilice el siguiente comando:

> **stat appfw profile** <profile name>

Para mostrar estadísticas XML Cross-Site Scripting mediante la interfaz gráfica de usuario

  1. Vaya a Sistema > Seguridad > Web App Firewall.
  2. En el panel derecho, acceda al Enlace de estadísticas.
  3. Utilice la barra de desplazamiento para ver las estadísticas sobre las infracciones y los registros de scripts entre sitios XML. La tabla de estadísticas proporciona datos en tiempo real y se actualiza cada 7 segundos.