Comprobación de inyección HTML SQL

Muchas aplicaciones web tienen formularios web que utilizan SQL para comunicarse con servidores de bases de datos relacionales. El código malintencionado o un hacker pueden usar un formulario web inseguro para enviar comandos SQL al servidor web. La comprobación de inyección HTML SQL de Web App Firewall proporciona defensas especiales contra la inyección de código SQL no autorizado que podría romper la seguridad. Si Web App Firewall detecta código SQL no autorizado en una solicitud de usuario, transforma la solicitud para que el código SQL esté inactivo o bloquea la solicitud. El Web App Firewall examina la carga útil de solicitud para el código SQL inyectado en tres ubicaciones: 1) cuerpo POST, 2) encabezados y 3) cookies. Para examinar la parte de consulta en las solicitudes de código SQL inyectado, configure la configuración del perfil appfw ‘InspectQueryContentTypes’ para los tipos de contenido específicos.

Un conjunto predeterminado de palabras clave y caracteres especiales proporciona palabras clave conocidas y caracteres especiales que se utilizan comúnmente para lanzar ataques SQL. Puede agregar nuevos patrones y modificar el conjunto predeterminado para personalizar la inspección de comprobación SQL. El Web App Firewall ofrece varias opciones de acción para implementar la protección de SQL Injection. Además de las acciones Bloquear, Registrar, Estadísticasy Aprender, el perfil Web App Firewall también ofrece la opción de transformar caracteres especiales de SQLpara hacer que un ataque sea inofensivo.

Además de las acciones, hay varios parámetros que se pueden configurar para el procesamiento de inyección SQL. Puede comprobar si hay caracteres comodín SQL. Puede cambiar el tipo de inyección de SQL y seleccionar una de las 4 opciones (SQLKeyword, SQLSplChar, SQLSplCharANDKeyword, SQLSplCharORKeyword) para indicar cómo evaluar las palabras clave SQL y los caracteres especiales de SQL al procesar la carga útil. El parámetro Manejo de comentarios SQL ofrece una opción para especificar el tipo de comentarios que deben inspeccionarse o eximirse durante la detección de SQL Injection.

Puede implementar relajantes para evitar falsos positivos. El motor de aprendizaje de Web App Firewall puede proporcionar recomendaciones para configurar reglas de relajación.

Las siguientes opciones están disponibles para configurar una protección optimizada de SQL Injection para su aplicación:

Bloquear: Si habilita el bloque, la acción de bloque se activa solo si la entrada coincide con la especificación del tipo de inyección SQL. Por ejemplo, si SQLSplCharANDKeyword está configurado como el tipo de inyección SQL, una solicitud no se bloquea si no contiene palabras clave, incluso si se detectan caracteres especiales de SQL en la entrada. Tal solicitud se bloquea si el tipo de inyección SQL se establece en SQLSplChar o SQLSplCharORKeyword.

Log: Si habilita la función de registro, la comprobación de SQL Injection genera mensajes de registro que indican las acciones que realiza. Si el bloqueo está inhabilitado, se genera un mensaje de registro independiente para cada campo de entrada en el que se detectó la infracción SQL. Sin embargo, solo se genera un mensaje cuando se bloquea la solicitud. Del mismo modo, se genera un mensaje de registro por solicitud para la operación de transformación, incluso cuando los caracteres especiales SQL se transforman en varios campos. 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: si está activada, la función de estadísticas recopila 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.

Aprender: si no está seguro de qué reglas de relajación SQL podrían ser ideales para su aplicación, puede utilizar la función de aprendizaje para generar recomendaciones basadas en los datos aprendidos. El motor de aprendizaje de Web App Firewall supervisa el tráfico y proporciona recomendaciones de aprendizaje SQL basadas en los valores observados. Para obtener un beneficio óptimo sin comprometer el rendimiento, es posible que quiera habilitar la opción de aprendizaje durante un corto tiempo para obtener una muestra representativa de las reglas y, a continuación, implementar las reglas e inhabilitar el aprendizaje.

Transformar caracteres especiales de SQL: el Web App Firewall considera tres caracteres, comillas simples (‘), barra invertida () y punto y coma (;) como caracteres especiales para el procesamiento de comprobaciones de seguridad SQL. La función Transformación SQL modifica el código de inyección SQL en una solicitud HTML para asegurarse de que la solicitud se vuelve inofensiva. La solicitud HTML modificada se envía al servidor. Todas las reglas de transformación predeterminadas se especifican en el archivo /netscaler/default_custom_settings.xml.

La operación de transformación hace que el código SQL inactivo realizando los siguientes cambios en la solicitud:

  • Comilla recta simple (‘) a comilla recta doble (“).
  • Barra invertida () a barra invertida doble ().
  • Punto y coma (;) se elimina por completo.

Estos tres caracteres (cadenas especiales) son necesarios para emitir comandos a un servidor SQL. A menos que un comando SQL esté precedido de una cadena especial, la mayoría de los servidores SQL ignoran ese comando. Por lo tanto, los cambios que realiza Web App Firewall cuando la transformación está habilitada impiden que un atacante inyecte SQL activo. Después de realizar estos cambios, la solicitud puede ser reenviada de forma segura a su sitio web protegido. Cuando los formularios web de su sitio web protegido pueden contener legítimamente cadenas especiales de SQL, pero los formularios web no dependen de las cadenas especiales para funcionar correctamente, puede inhabilitar el bloqueo y habilitar la transformación para evitar el bloqueo de datos legítimos de formularios web sin reducir la protección que la aplicación web Firewall proporciona a sus sitios web protegidos.

La operación de transformación funciona independientemente del valor Tipo de inyección SQL. Si la transformación está habilitada y el tipo de inyección SQL se especifica como palabra clave SQL, los caracteres especiales SQL se transforman incluso si la solicitud no contiene palabras clave.

Sugerencia

Normalmente se habilita la transformación o el bloqueo, pero no ambos. Si la acción de bloqueo está habilitada, tiene prioridad sobre la acción de transformación. Si tiene activado el bloqueo, la activación de la transformación es redundante.

Comprobar caracteres comodín SQL: los caracterescomodín se pueden utilizar para ampliar las selecciones de una instrucción de lenguaje de consulta estructurado (SQL-SELECT). Estos operadores de comodín se pueden utilizar junto con los operadores LIKE y NOT LIKE para comparar un valor con valores similares. Los caracteres de porcentaje (%) y subrayado (_) se utilizan con frecuencia como comodines. El signo de porcentaje es análogo al carácter comodín de asterisco (*) utilizado con MS-DOS y para hacer coincidir cero, uno o varios caracteres en un campo. El guión bajo es similar al signo de interrogación de MS-DOS (?) carácter comodín. Coincide con un único número o carácter en una expresión.

Por ejemplo, puede utilizar la siguiente consulta para realizar una búsqueda de cadenas para buscar todos los clientes cuyos nombres contengan el carácter D.

SELECT * del nombre WHERE del cliente como “%D%”:

En el ejemplo siguiente se combinan los operadores para buscar cualquier valor salarial que tenga 0 en el segundo y tercer lugar.

SELECT * del cliente WHERE salario como ‘_ 00% ‘:

Diferentes proveedores de DBMS han ampliado los caracteres comodín agregando operadores adicionales. Citrix Web App Firewall puede proteger contra ataques que se inician mediante la inyección de estos caracteres comodín. Los 5 caracteres comodín predeterminados son porcentaje (%), guión bajo (_), intercalación (^) y corchete de apertura ([), y el corchete cuadrado de cierre (]). Esta protección se aplica tanto a perfiles HTML como XML.

Los caracteres comodín predeterminados son una lista de literales especificados en la *Firmas predeterminadas:

  • <wildchar type=”LITERAL”>%</wildchar>
  • <wildchar type=”LITERAL”>_</wildchar>
  • <wildchar type=”LITERAL”>^</wildchar>
  • <wildchar type=”LITERAL”>[</wildchar>
  • <wildchar type=”LITERAL”>]</wildchar>

Los caracteres comodín en un ataque pueden ser PCRE, como [^A-F]. El Web App Firewall también admite comodines PCRE, pero los caracteres comodín literales anteriores son suficientes para bloquear la mayoría de los ataques.

Nota

La comprobación de caracteres comodín SQL es diferente de la comprobación de caracteres especiales SQL. Esta opción debe utilizarse con precaución para evitar falsos positivos.

Check Request Conteniendo SQL Injection Type: Web App Firewall proporciona 4 opciones para implementar el nivel deseado de rigor para la inspección de SQL Injection, en función de las necesidades individuales de la aplicación. La solicitud se comprueba con la especificación de tipo de inyección para detectar infracciones SQL. Las 4 opciones de tipo de inyección SQL son:

  • Caracteres y palabra clave especialesde SQL: tanto una palabra clave SQL como un carácter especial SQL deben estar presentes en la entrada para desencadenar una infracción SQL. Esta configuración menos restrictiva es también la predeterminada.
  • Carácter especial de SQL: al menos uno de los caracteres especiales debe estar presente en la entrada para desencadenar una infracción SQL.
  • Palabra clave SQL: al menos una de las palabras clave SQL especificadas debe estar presente en la entrada para desencadenar una infracción SQL. No seleccione esta opción sin tener debidamente en cuenta. Para evitar falsos positivos, asegúrese de que no se espera ninguna de las palabras clave en las entradas.
  • Character especial o palabra clave de SQL: la palabra clave o la cadena de caracteres especial deben estar presentes en la entrada para desencadenar la infracción de comprobación de seguridad.

Sugerencia

Si configura Web App Firewall para buscar entradas que contengan un carácter especial de SQL, Web App Firewall omite los campos de formulario web que no contienen caracteres especiales. Dado que la mayoría de los servidores SQL no procesan comandos SQL que no están precedidos por un carácter especial, habilitar esta opción puede reducir significativamente la carga en el Web App Firewall y acelerar el procesamiento sin poner en riesgo los sitios web protegidos.

Manejo de comentarios SQL: de forma predeterminada, Web App Firewall comprueba todos los comentarios SQL en busca de comandos SQL inyectados. Sin embargo, muchos servidores SQL ignoran cualquier cosa en un comentario, incluso si están precedidos por un carácter especial SQL. Para un procesamiento más rápido, si el servidor SQL ignora los comentarios, puede configurar Web App Firewall para que omita los comentarios al examinar las solicitudes de SQL inyectado. Las opciones de manejo de comentarios SQL son:

  • ANSI—Omitir comentarios SQL con formato ANSI, que normalmente son utilizados por bases de datos SQL basadas en UNIX. Por ejemplo:
    • — (Dos guiones) - Este es un comentario que comienza con dos guiones y termina con el final de la línea.

    • {} - Tirantes (Las llaves encierran el comentario. El {precede al comentario y el} lo sigue. Las llaves pueden delimitar los comentarios de una o varias líneas, pero los comentarios no se pueden anidar)

    • /* */ : C style comments (Does not allow nested comments). Please note **/*!** <comment that begin with slash followed by asterisk and exclamation mark is not a comment > ***/**

    • MySQL Server admite algunas variantes de comentarios de estilo C. Estos le permiten escribir código que incluye extensiones MySQL, pero aún es portátil, mediante el uso de comentarios de la siguiente forma: /! Código específico de MySQL /

    • . #: Comentarios de MySQL: Este es un comentario que comienza con # carácter y termina con el final de la línea

  • Anidado: omita los comentarios de SQL anidados, que normalmente utiliza Microsoft SQL Server. Por ejemplo; — (Dos guiones) y /* */ (Permite comentarios anidados)
  • ANSI/anidado: omite los comentarios que se ajustan a los estándares de comentarios ANSI y SQL anidados. Los comentarios que solo coinciden con el estándar ANSI, o solo el estándar anidado, se siguen comprobando si se inyecta SQL.
  • Comprobar todos los comentarios: comprueba toda la solicitud de SQL inyectado sin omitir nada. Esta es la opción predeterminada.

Sugerencia

En la mayoría de los casos, no debe elegir la opción Anidado o ANSI/anidado a menos que la base de datos back-end se ejecute en Microsoft SQL Server. La mayoría de los otros tipos de software de SQL Server no reconocen los comentarios anidados. Si aparecen comentarios anidados en una solicitud dirigida a otro tipo de servidor SQL, pueden indicar un intento de violar la seguridad en ese servidor.

Comprobar encabezados de solicitud: Habilite esta opción si, además de examinar la entrada en los campos de formulario, quiere examinar los encabezados de solicitud para ataques de inyección HTML SQL. Si utiliza la GUI, puede habilitar este parámetro en el panel Configuración avanzada -> Configuración del perfil del perfil Web App Firewall.

Nota

Si habilita el indicador de encabezado Comprobar solicitud, es posible que tenga que configurar la regla de relajación para el encabezado User-Agent. La presencia de la palabra clave SQL como y el carácter especial SQL punto y coma (; ) podría desencadenar solicitudes falsas positivas y bloquear que contienen este encabezado. Advertencia

Si habilita tanto la comprobación de encabezados de solicitud como la transformación, los caracteres especiales de SQL encontrados en los encabezados también se transforman. Los encabezados Accept, Accept-Charset, Accept-Encoding, Accept-Language, Expect y User-Agent normalmente contienen punto y coma (;). Habilitar tanto la comprobación de encabezado de solicitud como la transformación simultáneamente puede causar errores.

InspectQueryContentTypes: Configure esta opción si quiere examinar la parte de consulta de solicitud para ataques de SQL Injection para los tipos de contenido específicos. Si utiliza la GUI, puede configurar este parámetro en el panel Configuración avanzada -> Configuración del perfil del perfil de App Firewall.

Relajaciones de grano fino SQL

El Web App Firewall le ofrece la opción de eximir un campo de formulario específico, encabezado o Cookie de la comprobación de inspección de SQL Injection. Puede omitir completamente la inspección de uno o más de estos campos configurando reglas de relajación para la comprobación de inyección SQL.

El Web App Firewall le permite implementar una seguridad más estricta ajustando las reglas de relajación. Una aplicación puede requerir flexibilidad para permitir patrones específicos, pero configurar una regla de relajación para omitir la inspección de seguridad puede hacer que la aplicación sea vulnerable a ataques, ya que el campo de destino está exento de inspección para cualquier patrón de ataque SQL. La relajación de grano fino SQL proporciona la opción de permitir patrones específicos y bloquear el resto. Por ejemplo, Web App Firewall tiene actualmente un conjunto predeterminado de más de 100 palabras clave SQL. Dado que los hackers pueden usar estas palabras clave en ataques de SQL Injection, Web App Firewall las marca como amenazas potenciales. Puede relajar una o más palabras clave que se consideran seguras para la ubicación específica. El resto de las palabras clave SQL potencialmente peligrosas se siguen comprobando para la ubicación de destino y continúan activando las infracciones de comprobación de seguridad. Ahora tienes un control mucho más estricto.

Los comandos utilizados en las relajaciones tienen parámetros opcionales para Tipo de valor y Expresión de valor. Puede especificar si la expresión de valor es una expresión regular o una cadena literal. El tipo de valor se puede dejar en blanco o tiene la opción de seleccionar Palabra clave o SpecialString o WildChar.

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 la URL que quiere agregar como excepción, y nada más. El uso descuidado de comodines, y especialmente de la combinación de metacarácter/comodín de punto (.*), puede tener resultados que no quiere, como bloquear el acceso al contenido web que no tenía intención de bloquear o permitir un ataque que la comprobación de inyección HTML SQL habría bloqueado de otro modo.

Puntos a considerar:

  • La expresión de valor es un argumento opcional. Es posible que un nombre de campo no tenga ninguna expresión de valor.
  • Un nombre de campo se puede enlazar a varias expresiones de valor.
  • Se debe asignar un tipo de valor a las expresiones de valor. El tipo de valor SQL puede ser: 1) Palabra clave, 2) SpecialString o 3) WildChar.
  • Puede tener varias reglas de relajación por combinación nombre/URL de campo.

Uso de la línea de comandos para configurar la comprobación de inyección SQL

Para configurar acciones de SQL Injection y otros parámetros mediante la línea de comandos:

En la interfaz de línea de comandos, puede utilizar el comando set appfw profile o el comando add appfw profile para configurar las protecciones de SQL Injection. Puede habilitar las acciones de bloqueo, aprendizaje, registro, estadísticas y especificar si quiere transformar los caracteres especiales utilizados en cadenas de ataque de SQL Injection para inhabilitar el ataque. Seleccione el tipo de patrón de ataque SQL (palabras clave, caracteres comodín, cadenas especiales) que quiere detectar en las cargas útiles e indique si quiere que Web App Firewall también inspeccione los encabezados de solicitud para infracciones de Inyección SQL. Utilice el comando unset appfw profile para revertir la configuración configurada a sus valores predeterminados. Cada uno de los comandos siguientes establece un solo parámetro, pero puede incluir varios parámetros en un solo comando:

  • establecer perfil appfw “Las descripciones de los parámetros se proporcionan en la parte inferior de la página”.
  • <name> -SQLInjectionAction (([block] [learn] [log] [stats]) | [none])
  • establecer perfil appfw “Las descripciones de los parámetros se proporcionan en la parte inferior de la página”.
  • <name> -SQLInjectionTransformSpecialChars (**ON** | OFF)
  • establecer perfil appfw “Las descripciones de los parámetros se proporcionan en la parte inferior de la página”.
  • <name> -**SQLInjectionCheckSQLWildChars** (**ON** |**OFF**)
  • establecer perfil appfw “Las descripciones de los parámetros se proporcionan en la parte inferior de la página”.
  • **<name> -**SQLInjectionType** ([**SQLKeyword**] | [**SQLSplChar**] | [**SQLSplCharANDKeyword**] | [**SQLSplCharORKeyword**])
  • establecer perfil appfw “Las descripciones de los parámetros se proporcionan en la parte inferior de la página”.
  • <name> -**SQLInjectionParseComments** ([**checkall**] | [**ansi|nested**] | [**ansinested**])
  • **establecer perfil appfw “Las descripciones de los parámetros se proporcionan en la parte inferior de la página”.
  • <name> -CheckRequestHeaders (ON | OFF) Descripciones de parámetros proporcionadas en la parte inferior de la página.
  • <name> - CheckRequestQueryNonHtml (ON | OFF) Descripciones de parámetros proporcionadas en la parte inferior de la página.

Para configurar una regla de relajación de SQL Injection mediante la línea de comandos

Utilice el comando bind o unbind para agregar o eliminar enlaces, como se indica a continuación:

  • bind appfw profile <name> -SQLInjection <String> [isRegex(REGEX| NOTREGE)] <formActionURL> [-location <location>] [-valueType (Keywor|SpecialString|Wildchar) [<valueExpression>][-isValueRegex (REGEX | NOTREGEX) ]]

  • unbind appfw profile <name> -SQLInjection <String> <formActionURL> [-location <location>] [-valueTyp (Keyword|SpecialString|Wildchar) [<valueExpression>]]

Nota

Puede encontrar la lista de palabras clave SQL del contenido predeterminado del archivo de firma viendo el objeto de firma de vista, que tiene una lista de palabras clave sql y caracteres especiales sql.

Uso de la GUI para configurar la comprobación de seguridad de inyección SQL

En la GUI, puede configurar la comprobación de seguridad de SQL Injection en el panel para el perfil asociado a la aplicación.

Para configurar o modificar la comprobación de SQL Injection mediante la interfaz gráfica de usuario

  1. Vaya a Servidor de seguridad de aplicaciones > 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, Estadísticas y Aprender para HTML SQL Injection, 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. Si quiere configurar opciones adicionales para esta comprobación de seguridad, haga doble clic en Inyección SQL HTML o seleccione la fila y haga clic en Configuración de acción para mostrar las siguientes opciones:

Transformar caracteres especiales de SQL: transforma los caracteres especiales de SQL de la solicitud.

Comprobar caracteres comodín SQL: considere los caracterescomodín SQL de la carga útil como patrones de ataque.

Solicitud de comprobación que contiene: Tipo de inyección SQL (SQLKeyword, SQLSplChar, SQLSplCharANDKeyword o SQLSplCharORKeyword) que se va a comprobar.

Manejo de comentarios SQL: tipo de comentarios (Comprobar todos los comentarios, ANSI, anidados o ANSI/anidados) que se van a comprobar.

Después de cambiar cualquiera de los parámetros anteriores, 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 SQL Injection mediante la interfaz gráfica de usuario

  • Vaya a Servidor de seguridad de aplicaciones > Perfiles, resalte el perfil de destino y haga clic en Modificar.
  • En el panel Configuración avanzada, haga clic en Reglas de relajación.
  • En la tabla Reglas de relajación, haga doble clic en la entrada HTML SQL Injection, o selecciónela y haga clic en Modificar.
  • En el cuadro de diálogo Reglas de relajación de inyección SQL HTML, realice las operaciones Agregar, Modificar, Eliminar, Habilitar o Inhabilitar para las reglas de relajación.

Nota

Al agregar una regla nueva, el campo Expresión de valor no se muestra a menos que seleccione la opción Palabra clave o SpecialString o WildChar en el campo Tipo de valor.

Para administrar las reglas de relajación de SQL Injection mediante el visualizador

Para obtener una vista consolidada de todas las reglas de relajación, puede resaltar la fila HTML SQL Injection 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 inyección SQL mediante la interfaz gráfica de usuario

Puede utilizar la GUI para ver o personalizar los patrones SQL.

Los patrones SQL predeterminados se especifican en Firewall de aplicaciones > Firmas > Firmas predeterminadas. Si no vincula ningún objeto de firma a su perfil, el perfil utilizará los patrones SQL predeterminados especificados en el objeto Firmas predeterminadas para el procesamiento de comprobación de seguridad de SQL Injection. Las reglas y patrones, especificados en el objeto de firmas predeterminado, son de solo lectura. No puede modificarlos ni modificarlos. Si quiere modificar o cambiar estos patrones, realice una copia del objeto Signatures Default para crear un objeto Signatures definido por el usuario. Realice cambios en los patrones SQL en el nuevo objeto de firma definida por el usuario y utilice este objeto de firma en el perfil que está procesando el tráfico para el que quiere utilizar estos patrones SQL personalizados.

Para obtener más información, consulte Firmas

  1. Para ver patrones SQL predeterminados:

    a. Vaya a Servidor de seguridad de aplicaciones > Firmas, seleccione *Firmas predeterminadas yhaga clic en Modificar.

    A continuación, haga clic en Administrar patrones SQL/XSS.

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

    • Inyección (not_alphanum, SQL) /Palabra clave
    • Inyección (not_alphanum, SQL) /specialstring
    • Inyección (not_alphanum, SQL) /transformrules/transform
    • Inyección (not_alphanum, SQL) /comodín

    b. Seleccione una fila y haga clic en Administrar elementos para mostrar los patrones SQL correspondientes (palabras clave, cadenas especiales, reglas de transformación o caracteres comodín) utilizados por la comprobación de inyección SQL de Web App Firewall.

  2. Para personalizar patrones SQL: puede modificar el objeto Firma definida por el usuario para personalizar las palabras clave SQL, las cadenas especiales y los caracteres comodín. Puede agregar nuevas entradas o eliminar las existentes. Puede modificar las reglas de transformación para las cadenas especiales de SQL.

    a. Vaya a Servidor de seguridad de aplicaciones > 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.

    b. Seleccione la fila de inyección SQL de destino.

    i. Haga clic en Administrar elementospara agregar, modificaro quitarel elemento SQL correspondiente.

    ii. Haga clic en Eliminar para eliminar la fila seleccionada.

    Advertencia

    Debe tener mucho cuidado antes de quitar o modificar cualquier elemento SQL predeterminado, o eliminar la ruta SQL para quitar toda la fila. Las reglas de firma, así como la comprobación de seguridad de SQL Inject, se basan en estos elementos para detectar ataques de SQL Injection con el fin de proteger sus aplicaciones. Personalizar los patrones SQL puede hacer que la aplicación sea vulnerable a los ataques SQL si se elimina el patrón requerido durante la edición.

Uso de la función Learn con la comprobación de inyección SQL

Cuando la acción de aprendizaje está habilitada, el motor de aprendizaje de Web App Firewall supervisa el tráfico y descubre las infracciones desencadenadas. Puede inspeccionar periódicamente estas reglas aprendidas. Después de tener debidamente en cuenta, puede implementar la regla aprendida como una regla de relajación de SQL Injection.

Mejora de SQL Injection Learning: se introdujo una mejora de aprendizaje de Web App Firewall en la versión 11.0 del software Citrix ADC. Para implementar una relajación de inyección SQL de grano fino, Web App Firewall ofrece un aprendizaje de inyección SQL de grano fino. El motor de aprendizaje hace recomendaciones sobre el Tipo de Valor observado (palabra clave, SpecialString, Wildchar) y la expresión Valor correspondiente observada en los campos de entrada. Además de comprobar las solicitudes bloqueadas para determinar si la regla actual es demasiado restrictiva y necesita ser relajada, puede revisar las reglas generadas por el motor de aprendizaje para determinar qué tipo de valor y expresiones de valor están desencadenando infracciones y que deben abordarse en las reglas de relajación.

Importante

El motor de aprendizaje de Web App Firewall puede distinguir solo los primeros 128 bytes del nombre. Si un formulario tiene varios campos con nombres que coinciden con los primeros 128 bytes, es posible que el motor de aprendizaje no pueda distinguir entre ellos. Del mismo modo, la regla de relajación implementada podría relajar inadvertidamente todos estos campos de la inspección de SQL Injection.

Nota Para omitir la comprobación SQL en el encabezado User-Agent, utilice la siguiente regla de relajación:

bind appfw profile your_profile_name -SQLInjection User-Agent " .*" -location HEADER

Para ver o utilizar datos aprendidos mediante la interfaz de línea de comandos

En el símbolo del sistema, escriba uno de los siguientes comandos:

  • show appfw learningdata <profilename> SQLInjection
  • rm appfw learningdata <profilename> -SQLInjection <string> <formActionURL> [<location>] [<valueType> <valueExpression>]
  • export appfw learningdata <profilename> SQLInjection

Para ver o utilizar datos aprendidos mediante la interfaz gráfica de usuario

  1. Vaya a Servidor de seguridad de aplicaciones > Perfiles, resalte el perfil de destino y haga clic en Modificar.

  2. En el panel Configuración avanzada, haga clic en Reglas aprendidas. Puede seleccionar la entrada HTML SQL Injection en la tabla Reglas aprendidas y hacer doble clic en ella para acceder a las reglas aprendidas. Puede implementar las reglas aprendidas o modificar una regla antes de implementarla como regla de relajación. Para descartar una regla, puede seleccionarla y hacer clic en el botón Omitir. Solo puede modificar una regla a la vez, pero puede seleccionar varias reglas para implementar u omitir.

También tiene la opción de mostrar una vista resumida de las relajaciones aprendidas seleccionando la entrada HTML SQL Injection en la tabla Reglas aprendidas y haciendo clic en Visualizador para obtener una vista consolidada de todas las infracciones aprendidas. El visualizador hace que sea muy fácil administrar las reglas aprendidas. Presenta una visión completa de los datos en una pantalla y facilita la acción en un grupo de reglas con un solo clic. La mayor ventaja del visualizador es que recomienda expresiones regulares para consolidar varias reglas. Puede seleccionar un subconjunto de estas reglas, basado en el delimitador y la URL de acción. Puede mostrar 25, 50 o 75 reglas en el visualizador seleccionando el número de una lista desplegable. El visualizador de reglas aprendidas ofrece la opción de modificar las reglas e implementarlas como relajaciones. O puede omitir las reglas para ignorarlas.

Uso de la función de registro con la comprobación de inyección SQL

Cuando se habilita la acción de registro, las infracciones de comprobación de seguridad de inyección SQL HTML se registran en el registro de auditoría como infracciones de APTFW_SQL. 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 de SQL Injection:

> Shell

# tail -f /var/log/ns.log | grep APPFW_SQL

Ejemplo de un mensaje de registro HTML SQL Injection cuando se transforma la solicitud

Jun 26 21:08:41 <local0.info> 10.217.31.98 CEF:0|Citrix|Citrix ADC|NS11.0|APPFW|APPFW_SQL|6|src=10.217.253.62 geolocation=Unknown spt=54001 method=GET request=http://aaron.stratum8.net/FFC/login.php?login_name=%27+or&passwd=and+%3B&drinking_pref=on&text_area=select+*+from+%5C+%3B&loginButton=ClickToLogin&as_sfid=AAAAAAXjnGN5gLH-hvhTOpIySEIqES7BjFRs5Mq0fwPp-3ZHDi5yWlRWByj0cVbMyy-Ens2vaaiULKOcUri4OD4kbXWwSY5s7I3QkDsrvIgCYMC9BMvBwY2wbNcSqCwk52lfE0k%3D&as_fid=feeec8758b41740eedeeb6b35b85dfd3d5def30c msg= Special characters seen in fields cn1=74 cn2=762 cs1=pr_ffc cs2=PPE1 cs3=9ztIlf9p1H7p6Xtzn6NMygTv/QM0002 cs4=ALERT cs5=2015 act=transformed

Ejemplo de un mensaje de registro HTML SQL Injection cuando se bloquea la solicitud de publicación

Jun 26 21:30:34 <local0.info> 10.217.31.98 CEF:0|Citrix|Citrix ADC|NS11.0|APPFW|APPFW_SQL|6|src=10.217.253.62 geolocation=Unknown spt=9459 method=POST request=http://aaron.stratum8.net/FFC/login_post.php msg=SQL Keyword check failed for field text_area="(')" cn1=78 cn2=834 cs1=pr_ffc cs2=PPE1 cs3=eVJMMPtZ2XgylGrHjkx3rZLfBCI0002 cs4=ALERT cs5=2015 act=blocked

Nota

Como parte de los cambios de transmisión en la compilación 10.5.e (compilaciones de mejora), así como en la compilación 11.0 en adelante, ahora procesamos los datos de entrada en bloques. La coincidencia de patrones RegEx ahora está restringida a 4K para la coincidencia de cadenas de caracteres contiguos. Con este cambio, los mensajes de registro de infracciones SQL pueden incluir información diferente en comparación con las compilaciones anteriores. La palabra clave y el carácter especial en la entrada podrían estar separados por un gran número de bytes. Ahora hacemos un seguimiento de las palabras clave SQL y las cadenas especiales al procesar los datos, en lugar de almacenar en búfer todo el valor de entrada. Además del nombre del campo, el mensaje de registro incluye ahora la palabra clave SQL, o el carácter especial SQL, o tanto la palabra clave SQL como el carácter especial SQL, según lo determinado por la configuración configurada. El resto de la entrada ya no se incluye en el mensaje de registro, como se muestra en el ejemplo siguiente:

Ejemplo:

En 10.5, cuando Web App Firewall detecta la infracción SQL, es posible que la cadena de entrada completa se incluya en el mensaje de registro, como se muestra a continuación:

SQL Keyword check failed for field text=\"select a name from testbed1;(;)\".*<blocked>

En las compilaciones de mejora de 10.5.e que admiten la transmisión del lado de solicitud, así como la compilación 11.0 en adelante, registramos solo el nombre del campo, la palabra clave y el carácter especial (si corresponde) en el mensaje de registro, como se muestra a continuación:

SQL Keyword check failed for field **text="select(;)" <blocked>

Este cambio es aplicable a las solicitudes que contienen application/x-www-form-urlencoded, o multipart/form-data, o text/x-gwt-rpc Content-types. Los mensajes de registro generados durante el procesamiento de cargas JSON o XML no se ven afectados por este cambio.

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 > Perfiles, seleccione el perfil de destino y haga clic en Comprobaciones de seguridad. Resalte la fila HTML SQL Injection y haga clic en Registros. Cuando accede a los registros directamente desde la comprobación HTML SQL Injection 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.
  • Vaya a Servidor de seguridad de aplicaciones > 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 HTML proporciona varias opciones de filtro para seleccionar solo los mensajes de registro que le interesan. Para seleccionar mensajes de registro para la comprobación HTML SQL Injection, filtre seleccionando APTFW en las opciones desplegables para 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_SQL y hace clic en el botón Aplicar, solo aparecerán mensajes de registro relacionados con las infracciones de comprobación de seguridad de SQL Injection 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.

La funcionalidadClick to Deploy solo está disponible en la interfaz gráfica de usuario. Puede utilizar el Visor de Syslog no solo para ver los registros, sino también para implementar reglas de relajación de HTML SQL Injection basadas en los mensajes de registro para las infracciones de comprobación de seguridad de Web App Firewall. Los mensajes de registro deben estar en formato de registro CEF para esta operación. Haga clic para implementar la funcionalidad solo está disponible para los mensajes de registro generados por la acción de bloque (o no bloque). No se puede implementar una regla de relajación para un mensaje de registro sobre la operación de transformación.

Para implementar una regla de relajación desde el Visor de Syslog, seleccione el mensaje de registro. Aparece una casilla de verificación en la esquina superior derecha del cuadro Visor de Syslog de la fila seleccionada. Active la casilla de verificación y, a continuación, seleccione una opción de la lista Acción para implementar la regla de relajación. Modificar e implementar, Implementar e Implementar todoestán disponibles como opciones de acción.

Las reglas de SQL Injection que se implementan mediante la opción Hacer clic para implementar no incluyen las recomendaciones de relajación de grano fino.

Para utilizar la funcionalidad Click to Deploy en la GUI:

  1. En Syslog Viewer, seleccione Application Firewall en las opciones del módulo.
  2. Seleccione APP_SQL como Tipo de evento para filtrar los mensajes de registro correspondientes.
  3. Active la casilla de verificación para identificar la regla que se va a implementar.
  4. Utilice la lista desplegable Acción de opciones para implementar la regla de relajación.
  5. Compruebe que la regla aparece en la sección correspondiente de regla de relajación.

Estadísticas de las infracciones de SQL Injection

Cuando la acción de estadísticas está habilitada, el contador para la comprobación de SQL Injection 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, la solicitud de una página que contiene 3 infracciones de Inyección SQL incrementa 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 SQL Injection mediante la línea de comandos:

En el símbolo del sistema, escriba:

estadísticas sh appfw

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

> stat appfw profile <profile name>

Para mostrar estadísticas HTML SQL Injection mediante la interfaz gráfica de usuario

  1. Vaya a Sistema > Seguridad > Servidor de seguridad de aplicaciones.
  2. En el panel derecho, acceda al Enlace de estadísticas.
  3. Utilice la barra de desplazamiento para ver las estadísticas sobre infracciones y registros de HTML SQL Injection. La tabla de estadísticas proporciona datos en tiempo real y se actualiza cada 7 segundos.

Resumen

Tenga en cuenta los siguientes puntos acerca de la comprobación de SQL Injection:

  • Soporte integrado para protección de inyección de SQL: Citrix Web App Firewall protege contra la inyección de SQL mediante la supervisión de una combinación de palabras clave SQL y caracteres especiales en los parámetros del formulario. Todas las palabras clave SQL, los caracteres especiales, los caracteres comodín y las reglas de transformación predeterminadas se especifican en el archivo /netscaler/default_custom_settings.xml.
  • Personalización: puede cambiar las palabras clave predeterminadas, los caracteres especiales, los caracteres comodín y las reglas de transformación para personalizar la inspección de comprobación de seguridad SQL según las necesidades específicas de la aplicación. Realice una copia del objeto de firma predeterminado, modifique las entradas existentes o agregue otras nuevas. Enlazar este objeto de firma a su perfil para hacer uso de la configuración personalizada.
  • Modelo de seguridad híbrido: tanto las firmas como las protecciones de seguridad profundas utilizan los patrones SQL/XSS especificados en el objeto de firma enlazado al perfil. Si no hay ningún objeto de firma enlazado al perfil, se utilizan los patrones SQL/XSS presentes en el objeto de firma predeterminado.
  • Transformar: tenga en cuenta lo siguiente acerca de la operación de transformación:
    • La operación de transformación funciona independientemente de la otra configuración de acción de inyección SQL. Si la transformación está habilitada y bloquear, registrar, estadísticas y aprender están desactivados, los caracteres especiales de SQL se transformarán.
    • Cuando la Transformación SQL está habilitada, las solicitudes de usuario se envían a los servidores back-end después de que los caracteres especiales SQL se transforman en modo no bloque. Si la acción de bloqueo está habilitada, tiene prioridad sobre la acción de transformación. Si el tipo de inyección se especifica como carácter especial SQL y bloque está habilitado, la solicitud se bloquea a pesar de la acción de transformación.
  • Relajación y aprendizaje de grano fino: ajuste la regla de relajación para relajar un subconjunto de elementos SQL de la inspección de comprobación de seguridad, pero detecte el resto. El motor de aprendizaje recomienda un tipo de valor específico y expresiones de valor basadas en los datos observados.
  • Haga clic para implementar: seleccione uno o varios mensajes de registro de infracciones SQL en el visor de syslog e implemente como reglas de relajación.