Comprobación de inyección HTML SQL
Muchas aplicaciones web tienen formularios web que usan SQL para comunicarse con los servidores de bases de datos relacionales. El código malicioso o un hacker pueden usar un formulario web inseguro para enviar comandos SQL al servidor web. La comprobación de inyección SQL HTML de Web App Firewall proporciona defensas especiales contra la inyección de código SQL no autorizado que podría afectar 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 una parte de consulta en las solicitudes de código SQL inyectado, configure una configuración de perfil de firewall de aplicaciones ‘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 por defecto para personalizar la inspección de comprobación SQL. Web App Firewall ofrece varias opciones de acción para implementar la protección de inyección de SQL. Además de las acciones Bloquear, Registrar, Estadísticas y Aprender, el perfil de Web App Firewall también ofrece la opción de transformar caracteres especiales de SQL para 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 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 SQL al procesar la carga útil. El parámetro Gestión de comentarios SQL le da la opción de especificar el tipo de comentarios que deben inspeccionarse o eximirse durante la detección de inyección SQL.
Puede implementar relajaciones para evitar falsos positivos. El motor de aprendizaje de Web App Firewall puede proporcionar recomendaciones para configurar reglas de relajación.
Están disponibles las siguientes opciones para configurar una protección de inyección SQL optimizada para la aplicación:
Bloquear—La acción de bloqueo se activa solo si la entrada coincide con la especificación de 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. Dicha solicitud se bloquea si el tipo de inyección SQL se establece en SQLSplCharo 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 la acción de bloqueo está inhabilitada, se genera un mensaje de registro independiente para cada campo de entrada en el que se detectó la infracción de 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 de 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 la cantidad de mensajes de registro puede indicar intentos de lanzar un ataque.
Estadísticas: si está habilitada, 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 revisar 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 de SQL podrían ser las más adecuadas para su aplicación, puede usar 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 de SQL en función de los valores observados. Para obtener un beneficio óptimo sin comprometer el rendimiento, es posible que desee habilitar la opción de aprendizaje durante un tiempo breve para obtener una muestra representativa de las reglas y, a continuación, implementar las reglas y inhabilitar el aprendizaje.
Transformar caracteres especiales de SQL: Web App Firewall considera tres caracteres, comillas simples (‘) (\)
, barra invertida y punto y coma (;) como caracteres especiales para el procesamiento de comprobaciones de seguridad de 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 esté inactivo al realizar los siguientes cambios en la solicitud:
- Comilla simple (‘) a comilla recta doble (“).
- Barra invertida
(\)
a barra invertida doble(\)
. - El 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 vaya 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 evitan que un atacante inyecte SQL activo. Una vez realizados estos cambios, la solicitud se puede enviar 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 Web Application Firewall proporciona a sus sitios web protegidos.
La operación de transformación funciona independientemente de la configuración del 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 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.
Buscar caracteres comodín SQL: los caracteres comodín se pueden utilizar para ampliar las selecciones de una instrucción SQL (SQL-SELECT). Estos operadores comodín se pueden utilizar con los operadores LIKEy NOTE 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 (*) que se usa con MS-DOS y coincide con cero, uno o varios caracteres en un campo. El guion bajo es similar al signo de interrogación de MS-DOS (?) carácter comodín. Coincide con un solo número o carácter en una expresión.
Por ejemplo, puede usar la siguiente consulta para realizar una búsqueda de cadenas para encontrar todos los clientes cuyos nombres contengan el carácter D.
SELECT * del nombre WHERE del cliente como “%D%”:
El siguiente ejemplo combina los operadores para encontrar cualquier valor salarial que tenga 0 en segundo y tercer lugar.
SELECCIONE* del cliente DONDE el salario como ‘_00%’:
Diferentes proveedores de DBMS han ampliado los caracteres comodín agregando operadores adicionales. NetScaler Web App Firewall puede protegerse contra los 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 (^), corchete de apertura ([) y corchete 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 usarse con precaución para evitar falsos positivos.
Solicitud de verificación que contiene el tipo de inyección SQL: Web App Firewall proporciona 4 opciones para implementar el nivel de rigurosidad deseado para la inspección de inyección SQL, en función de las necesidades individuales de la aplicación. La solicitud se compara con la especificación del tipo de inyección para detectar infracciones de SQL. Las 4 opciones de tipo de inyección SQL son:
- Carácter especial y palabra clave 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 también es la configuración predeterminada.
- Carácter especial de SQL: al menos uno de los caracteres especiales debe estar presente en la entrada para desencadenar una infracción de 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 la debida consideración. Para evitar falsos positivos, asegúrese de que no se espera ninguna de las palabras clave en las entradas.
- Carácter especial o palabra clave de SQL: la palabra clave o la cadena de caracteres especiales deben estar presentes en la entrada para que se active la infracción del control 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 van precedidos de un carácter especial, habilitar esta opción puede reducir significativamente la carga en Web App Firewall y acelerar el procesamiento sin poner en riesgo sus sitios web protegidos.
Gestión 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 van precedidos de un carácter especial de SQL. Para un procesamiento más rápido, si su 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: omite los comentarios SQL en formato ANSI, que normalmente utilizan las 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 que aún es portátil, mediante comentarios de la siguiente forma:
/*! MySQL-specific code */
-
. #: Comentarios de Mysql: Este es un comentario que comienza con el carácter #.
-
- 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 coincidan solo con el estándar ANSI, o solo con el estándar anidado, aún se comprueban en busca de SQL inyectado.
- Comprobar todos los comentarios: compruebe toda la solicitud de SQL inyectado sin omitir nada. Esta es la opción predeterminada.
Sugerencia
Por lo general, no debe elegir la opción Andado 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 los comentarios anidados aparecen 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 del formulario, quiere examinar los encabezados de solicitud en busca de 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 Solicitud de comprobación, es posible que tenga que configurar una 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 la verificación y la transformación del encabezado de solicitud, los caracteres especiales de SQL que se encuentren 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 (;). La activación simultánea de la verificación y la transformación de encabezados de solicitud puede provocar errores.
InspectQueryContentTypes: Configure esta opción si quiere examinar la parte de la consulta de solicitud en busca de ataques de inyección SQL para los tipos de contenido específicos. Si usa la GUI, puede configurar este parámetro en el panel Configuración avanzada -> Configuración de perfil del perfil de App Firewall.
Relajaciones pormenorizadas SQL
Web App Firewall le ofrece la opción de eximir un campo de formulario, encabezado o cookie específicos de la comprobación de inspección de inyección SQL. Puede omitir por completo la inspección de uno o varios de estos campos configurando las reglas de relajación para la comprobación de inyección SQL.
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 pormenorizada de 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 tiene un control mucho más estricto.
Los comandos utilizados en las relajaciones tienen parámetros opcionales para el tipo de valor y la 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á familiarizado con las expresiones regulares en formato PCRE, 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 del metacaracter punto-asterisco (.*) o combinación de comodín, 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 HTML SQL Injection 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.
- A las expresiones de valor se les debe asignar un tipo 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 de nombre de campo/URL.
Uso de la línea de comandos para configurar la comprobación de inyección SQL
Para configurar las acciones de inyección SQL 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, aprender, registrar, estadísticas y especificar si quiere transformar los caracteres especiales utilizados en las cadenas de ataque de inyección SQL 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. Use 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:
- configurar el perfil de firewall de la aplicación “Descripciones de parámetros proporcionadas en la parte inferior de la página.”
<name> -SQLInjectionAction (([block] [learn] [log] [stats]) | [none])
- configurar el perfil de firewall de la aplicación “Descripciones de parámetros proporcionadas en la parte inferior de la página.”
<name> -SQLInjectionTransformSpecialChars (**ON** | OFF)
- configurar el perfil de firewall de la aplicación “Descripciones de parámetros proporcionadas en la parte inferior de la página.”
<name> -**SQLInjectionCheckSQLWildChars** (**ON** |**OFF**)
- configurar el perfil de firewall de la aplicación “Descripciones de parámetros proporcionadas en la parte inferior de la página.”
**<name> -**SQLInjectionType** ([**SQLKeyword**] | [**SQLSplChar**] | [**SQLSplCharANDKeyword**] | [**SQLSplCharORKeyword**])
- configurar el perfil de firewall de la aplicación “Descripciones de parámetros proporcionadas en la parte inferior de la página.”
<name> -**SQLInjectionParseComments** ([**checkall**] | [**ansi|nested**] | [**ansinested**])
- **configurar el perfil de firewall de la aplicación “Descripciones de parámetros proporcionadas 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 inyección SQL mediante la interfaz 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 del archivo de firma predeterminado si ve 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 inyección SQL en el panel para el perfil asociado a su aplicación.
Para configurar o modificar la comprobación de inyección SQL mediante la interfaz gráfica de usuario
- Vaya a Application Firewall > Perfiles, resalte el perfil de destino y haga clic en Editar.
- 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 de configuración:
a. Si quiere habilitar o inhabilitar las acciones Bloquear, Registrar, Estadísticas y Aprender para la inyección HTML SQL, puede seleccionar o desactivar las casillas de verificación de la tabla, hacer clic en Aceptary, a continuación, en Guardar y cerrar para cerrar el panel Comprobación de seguridad.
b. Si quiere configurar más opciones para esta comprobación de seguridad, haga doble clic en Inyección HTML SQL o seleccione la fila y haga clic en Configuración de acciónpara mostrar las siguientes opciones:
Transformar caracteres especiales de SQL: Transforma los caracteres especiales de SQL de la solicitud.
Compruebe si hay caracteres comodín de SQL: considere los caracterescomodín de SQL de la carga como patrones de ataque.
Comprobar solicitud que contiene: tipo de inyección SQL (sqlKeyword, sqlSplChar, sqlSplCharAndKeyword o sqlSplcharorKeyword) que se va a comprobar.
Gestión 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 las configuraciones 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 Verificación de seguridad.
Para configurar una regla de relajación de inyección SQL mediante la interfaz gráfica de usuario
- Vaya a Application Firewall > Perfiles, resalte el perfil de destino y haga clic en Editar.
- 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 Inyección HTML SQL o selecciónela y haga clic en Modificar.
- En el cuadro de diálogo Reglas de relajación de inyección HTML SQL, realice las operaciones Agregar, Modificar, Eliminar, Habilitaro 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 inyección SQL 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 de relajaciones implementadas le ofrece la opción de agregar una nueva regla o editar 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.
Visualización o personalización de patrones de inyección mediante la GUI
Puede utilizar la GUI para ver o personalizar los patrones de inyección.
Los patrones SQL predeterminados se especifican en el archivo de firmas predeterminado. Si no vincula ningún objeto de firma a su perfil, el perfil utilizará los patrones de inyección predeterminados especificados en el objeto de firmas predeterminado para procesar la comprobación de seguridad de inyección de comandos. 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, haga una copia del objeto SSignatures predeterminado para crear un objeto de firma definido por el usuario. Realice cambios en los patrones de inyección de comandos en el nuevo objeto de firma definido por el usuario y utilice este objeto de firma en su perfil que procesa el tráfico para el que quiere utilizar estos patrones personalizados.
Para obtener más información, consulte Firmas
Para ver los patrones de inyección predeterminados mediante la GUI:
-
Vaya a Firewall de aplicaciones > Firmas, seleccione *Firmas predeterminadas y haga clic en Modificar.
-
Haga clic en Administrar patrones CMD/SQL/XSS. La tabla Administrar rutas de scripts SQL/entre sitios muestra patrones relacionados con la inyección de CMD/SQL/XS:
- Seleccione una fila y haga clic en Administrar elementos para mostrar los patrones de inyección correspondientes (palabras clave, cadenas especiales, reglas de transformación o caracteres comodín) utilizados por la comprobación de inyección de comandos de Web App Firewall.
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 detecta las infracciones desencadenadas. Puede inspeccionar periódicamente estas reglas aprendidas. Tras la debida consideración, puede implementar la regla aprendida como regla de relajación de inyección SQL.
Mejora del aprendizaje de inyección de SQL: en la versión 11.0 del software NetScaler se introdujo una mejora de aprendizaje de Web App Firewall. Para implementar una relajación de inyección SQL detallada, Web App Firewall ofrece un aprendizaje detallado de inyección SQL. 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 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 entrada SQL del 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 usar datos aprendidos mediante la interfaz gráfica de usuario
-
Vaya a Application Firewall > Perfiles, resalte el perfil de destino y haga clic en Editar.
-
En el panel Configuración avanzada, haga clic en Reglas aprendidas. Puede seleccionar la entrada Inyección HTML SQL 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 implementarlas u omitirlas.
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 facilita la gestión de las reglas aprendidas. Presenta una vista completa de los datos en una pantalla y facilita la acción sobre 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, en función del delimitador y de la URL de acción. Puede mostrar 25, 50 o 75 reglas en el visualizador, seleccionando el número en una lista desplegable. El visualizador de reglas aprendidas ofrece la opción de modificar las reglas e implementarlas como relajaciones. O puede saltarse las reglas para ignorarlas.
Uso de la función de registro con la comprobación de inyección SQL
Cuando la acción de registro está habilitada, las infracciones de comprobación de seguridad de HTML SQL Injection se registran en el registro de auditoría como infracciones de APPFW_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
Cambia al shell y lleva los ns.logs de la carpeta /var/log/ para acceder a los mensajes de registro relacionados con las infracciones de SQL Injection:
> Shell
# tail -f /var/log/ns.log | grep APPFW_SQL
Ejemplo de un mensaje de registro de inyección HTML SQL cuando se transforma la solicitud
Jun 26 21:08:41 <local0.info> 10.217.31.98 CEF:0|Citrix|NetScaler|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
<!--NeedCopy-->
Ejemplo de un mensaje de registro de inyección HTML SQL cuando se bloquea la solicitud posterior
Jun 26 21:30:34 <local0.info> 10.217.31.98 CEF:0|Citrix|NetScaler|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
<!--NeedCopy-->
Nota
Como parte de los cambios de streaming en la compilación 10.5.e (compilaciones de mejora) y 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 de la entrada se pueden separar por muchos 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 ahora incluye la palabra clave SQL, 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 la solicitud y 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 se aplica a las solicitudes que contienen application/x-www-form-urlencoded, 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 incluye una herramienta útil (Syslog Viewer) para analizar los mensajes de registro. Tiene varias opciones para acceder al Visor de Syslog:
- Vaya a Firewall de aplicaciones > Perfiles, seleccione el perfil de destino y haga clic en Comprobaciones de seguridad. Resalte la fila Inyección HTML SQL y haga clic en Registros. Cuando accede a los registros directamente desde la comprobación de inyección HTML SQL del perfil, la GUI filtra los mensajes de registro y muestra solo los registros relacionados con estas infracciones de comprobación de seguridad.
- También puede acceder al Visor de Syslog navegando a NetScaler > Sistema > Auditoría. En la sección Mensajes de auditoría, haga clic en el enlace de mensajes de Syslog para ver el Visor de Syslog, que muestra todos los mensajes de registro, incluidos otros registros de infracciones de las comprobaciones de seguridad. Esto resulta útil para depurar cuando se pueden desencadenar varias infracciones de comprobación de seguridad durante el procesamiento de solicitudes.
- Vaya a Firewall de aplicaciones > directivas > Auditoría. En la sección Mensajes de auditoría, haga clic en el enlace de mensajes de Syslog para ver el Visor de Syslog, que muestra todos los mensajes de registro, incluidos otros registros de infracciones de las comprobaciones 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 de inyección HTML SQL, filtra seleccionando APPFW en las opciones de la lista desplegable 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 selecciona la casilla de verificación APPFW_SQL y hace clic en el botón Aplicar, solo aparecerán en el Visor de Syslog los mensajes de registro relacionados con las infracciones de la comprobación de seguridad de inyección SQL.
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 funcionalidadHacer clic para implementar solo está disponible en la GUI. Puede usar Syslog Viewer no solo para ver los registros, sino también para implementar reglas de relajación de inyección HTML SQL 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. La funcionalidad Hacer clic para implementar solo está disponible para los mensajes de registro generados por la acción bloquear (o no bloquear). No 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. Seleccione 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 todo están disponibles como opciones de Acción.
Las reglas de inyección SQL que se implementan mediante la opción Haga clic para implementar no incluyen las recomendaciones de relajación pormenorizada.
Para usar la función Click to Deploy en la GUI:
- En el Visor de Syslog, seleccione Firewall de aplicaciones en las opciones del módulo.
- Seleccione APP_SQL como Tipo de evento para filtrar los mensajes de registro correspondientes.
- Seleccione la casilla de verificación para identificar la regla que se va a implementar.
- Utilice la lista desplegable Acción de opciones para implementar la regla de relajación.
- Compruebe que la regla aparece en la sección de reglas de relajación correspondiente.
Estadísticas de las infracciones de la inyección SQL
Cuando la acción de estadísticas está habilitada, el contador de la comprobación de inyección SQL se incrementa cuando 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, Infracciones y Registros. El tamaño de un incremento del contador de registro puede variar en función 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 de infracciones y registros, porque 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 la línea de comandos, escriba:
sh appfw estado
Para mostrar las estadísticas de un perfil específico, use el siguiente comando:
> stat appfw profile <profile name>
Para mostrar estadísticas de inyección HTML SQL mediante la interfaz gráfica de usuario
- Vaya a Sistema > Seguridad > Firewall de aplicaciones.
- En el panel derecho, acceda al enlace de Estadísticas.
- Use la barra de desplazamiento para ver las estadísticas sobre las infracciones y los registros de inyección HTML SQL. La tabla de estadísticas proporciona datos en tiempo real y se actualiza cada 7 segundos.
Resumen
Tenga en cuenta los siguientes puntos sobre la comprobación de inyección SQL:
- Compatibilidad integrada para la protección de inyección de SQL: NetScaler 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 de SQL para las necesidades específicas de la aplicación. Realice una copia del objeto de firma predeterminado, modifique las entradas existentes o agregue otras nuevas. Enlaza 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 de scripts SQL/de sitios especificados en el objeto de firma que está enlazado al perfil. Si ningún objeto de firma está enlazado al perfil, se utilizan los patrones de scripts SQL/de sitios presentes en el objeto de firma predeterminado.
-
Transformación: tenga en cuenta lo siguiente sobre 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 el bloque, el registro, las estadísticas y el aprendizaje están inhabilitados, se transforman los caracteres especiales de SQL.
- 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 de SQL se hayan transformado 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 el bloque está habilitado, la solicitud se bloquea a pesar de la acción de transformación.
- Relajación y aprendizaje finos: 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.
- Hacer clic para implementar: seleccione uno o varios mensajes de registro de infracciones de SQL en el visor de syslog e impleméntelos como reglas de relajación.
En este artículo
- Relajaciones pormenorizadas SQL
- Uso de la línea de comandos para configurar la comprobación de inyección SQL
- Uso de la GUI para configurar la comprobación de seguridad de inyección SQL
- Visualización o personalización de patrones de inyección mediante la GUI
- Uso de la función Learn con la comprobación de inyección SQL
- Uso de la función de registro con la comprobación de inyección SQL
- Estadísticas de las infracciones de la inyección SQL
- Resumen