Protección de aplicaciones JSON mediante firmas
La notación de objetos de JavaScript (JSON) es un estándar abierto basado en texto derivado del lenguaje de secuencias de comandos JavaScript. Se prefiere JSON para la representación legible por humanos de estructuras de datos simples y matrices asociativas, denominadas objetos. Sirve como una alternativa al XML y se utiliza principalmente para transmitir estructuras de datos serializadas para comunicarse con aplicaciones web. Los archivos JSON se guardan normalmente con la extensión.json.
La carga JSON normalmente se envía con el tipo MIME especificado como application/json.Los otros tipos de contenido “estándar” para JSON son:
- application/x-javascript
- text/javascript
- text/x-javascript
- text/x-json
Uso de las firmas de NetScaler Web App Firewall para proteger las aplicaciones JSON
Para permitir las solicitudes de JSON, el dispositivo está preconfigurado con el tipo de contenido JSON, tal como se muestra en el siguiente resultado de show-command:
> sh appfw jsonContentType 1) JSONContenttypevalue: "^application/json$" IsRegex: REGEX Done
El NetScaler Web应用程序冷杉ewall procesa el cuerpo de la publicación únicamente para los siguientes tipos de contenido:
- aplicación/x-www-form-urlencoded
- multipart/form-data
- texto/x-gwt-rpc
拉斯维加斯关怀,se reciben反对其它encabezados de tipo de contenido, incluidos application/json (o cualquier otro tipo de contenido permitido), se reenvían al backend tras inspeccionar el encabezado. El cuerpo de la publicación de estas solicitudes no se inspecciona para detectar infracciones de los controles de seguridad, incluso cuando las comprobaciones de seguridad del perfil, como SQL o las secuencias de comandos entre sitios, están habilitadas.
帕拉门生las aplicaciones JSON y detectar正无穷racciones, se pueden utilizar las firmas de Web App Firewall. El Web App Firewall procesa todas las solicitudes que contienen el encabezado de tipo de contenido permitido para comprobar la coincidencia de firmas. Puede añadir sus propias reglas de firma personalizadas para procesar la carga útil de JSON y realizar diversas inspecciones de comprobación de seguridad (por ejemplo, secuencias de comandos entre sitios, SQL y coherencia de campos), detectar infracciones en los encabezados y en el cuerpo de la publicación y tomar las medidas específicas.
Sugerencia
A diferencia de los otros valores predeterminados integrados, el tipo de contenido JSON preconfigurado se puede editar o eliminar mediante la CLI o la GUI (GUI). Si las solicitudes legítimas para aplicaciones JSON se bloquean y desencadenan infracciones de tipo de contenido, compruebe que el valor del tipo de contenido está configurado con precisión. Para obtener más información sobre cómo Web App Firewall procesa el encabezado de tipo de contenido, consulteProtección de tipos de contenido
Para agregar o quitar el tipo de contenido JSON mediante la interfaz de línea de comandos
En el símbolo del sistema, escriba uno de los siguientes comandos:
add appfw jsonContentType ^application/json$ IsRegEx REGEX
rm appfw JSONContentType "^application/json$"
Para administrar los tipos de contenido JSON mediante la interfaz gráfica de usuario
Vaya aSeguridad>Web App Firewally, en la secciónConfiguración, seleccioneAdministrar tipos de contenido JSON.
En el panelConfigurar el tipo de contenido JSON de Web App Firewall, añada, edite o elimine los tipos de contenido JSON para adaptarlos a las necesidades de sus aplicaciones.
Configuración de la protección de firmas para detectar ataques en la carga útil de JSON
Además de un tipo de contenido JSON válido, debe configurar las firmas para especificar los patrones que, cuando se detectan en una solicitud de JSON, indican una violación de seguridad. Las acciones especificadas, como bloquear y registrar, se llevan a cabo cuando una solicitud entrante desencadena una coincidencia para todos los patrones de destino de la regla de firma.
Para añadir una regla de firma personalizada, Citrix recomienda utilizar la GUI. Vaya aSistema>Seguridad>Web App Firewall>Firmas. Haga doble clic en el objeto de firma de destino para acceder al panelEditar firmas de Web App Firewall. Haga clic en el botónAgregarpara configurar las acciones, la categoría, la cadena de registro, los patrones de reglas, etc. Si bien Web App Firewall inspecciona todas las cargas de tipos de contenido permitidas para comprobar si coinciden firmas, puede optimizar el procesamiento especificando la expresión JSON en la regla. Alañadirun nuevo patrón de reglas, seleccioneExpresiónen las opciones desplegables deMatchy proporcione la expresión de coincidencia objetivo de su carga útil de JSON para identificar las solicitudes específicas que deben inspeccionarse. Una expresión debe empezar por unTEXTO.prefijo. Puede añadir otros patrones de reglas para especificar patrones de coincidencia adicionales a fin de identificar el ataque.
El siguiente ejemplo muestra una regla de firma. Si se detecta alguna etiqueta de script entre sitios en el cuerpo POST de la carga JSON que coincida con la expresión XPATH_JSON especificada, se activa una coincidencia de firmas.
Ejemplo de una firma para detectar secuencias de comandos entre sitios en una carga JSON
TEXT.XPATH_JSON(xp%/glossary/title%).CONTAINS("example glossary") POST Cross-site scripting violation detected in json payload
Ejemplo de carga
La siguiente carga activa la coincidencia de firmas, ya que incluye la etiqueta de secuencias de comandos entre sitios
{"glossary": {"title": "example glossary","GlossDiv": {"title": "S","GlossList": {"GlossEntry": {"ID": "SGML","SortAs": "SGML","GlossTerm": "Standard Generalized Markup Language","Acronym": "SGML","Abbrev": "ISO 8879:1986","GlossDef": {"para": "A meta-markup language, used to create markup languages \*\*\*\* such as DocBook.","GlossSeeAlso": ["GML", "XML"]},"GlossSee": "markup"}}}}}
Ejemplo del mensaje de registro
Aug 21 12:21:42 10.217.31.239 08/21/2015:23:21:42 GMT ns 0-PPE-1 : APPFW APPFW_SIGNATURE_MATCH 1471 0 : 10.217.253.62 990-PPE0 NtJnVMNnvPeQJnaUzXYW/GTvAQsA010 prof1 http://10.217.31.212/FFC/login_post.php Signature violation rule ID 1000001: cross-site scripting violation detected in json payload
Nota
Si envías la misma carga después de eliminar la etiqueta del script entre sitios (
>), la coincidencia de reglas de firma no se activa.
Resumen
- Para proteger la carga útil de JSON, utilice las firmas de Web App Firewall para detectar las secuencias de comandos entre sitios, el SQL y otras infracciones.
- Compruebe que el tipo de contenido JSON esté configurado en el dispositivo como el tipo de contenido permitido.
- Asegúrese de que el tipo de contenido de la carga coincida con el tipo de contenido JSON configurado.
- Asegúrese de que todos los patrones configurados en la regla de firma coincidan para que se active la infracción de firma.
- Al añadir una regla de firma, DEBE tener al menos un patrón de regla para que coincida con la expresión de la carga útil de JSON. Todas las expresiones PI de las reglas de firma deben empezar por el prefijo TEXT. y deben ser booleanas.
Proteja el contenido de la aplicación o el tipo JSON con una carga útil codificada para SQL y secuencias de comandos entre sitios mediante directivas y firmas
El NetScaler Web应用程序冷杉ewall puede proteger la aplicación o el tipo de contenido JSON mediante directivas y firmas.
Inspeccione el tipo de contenido de la aplicación o JSON para la inyección de SQL mediante directivas
Debe agregar las siguientes directivas y vincularlo al servidor virtual globalmente para admitir la inyección SQL.
add appfw policy sqli_1 HTTP.REQ.BODY(10000).SET_TEXT_MODE(IGNORECASE).SET_TEXT_MODE(URLENCODED).DECODE_USING_TEXT_MODE.REGEX_MATCH(re#(((\\A)|(?<=[^a-zA-Z0-9_])))(select|insert|delete|update|drop|create|alter|grant|revoke|commit|rollback|shutdown|union|intersect|minus|case|decode|where|group|begin|join|exists|distinct|add|modify|constraint|null|like|exec|execute|char|or|and|sp_sdidebug)((Z)|(?=[^a-zA-Z0-9_]))#) APPFW_BLOCK
add appfw policy sqli_2 HTTP.REQ.BODY(10000).SET_TEXT_MODE(IGNORECASE).SET_TEXT_MODE(URLENCODED).DECODE_USING_TEXT_MODE.REGEX_MATCH(re#((\\A)|(?<=[^a-zA-Z0-9_]))(xp_availablemedia|xp_cmdshell|xp_deletemail|xp_dirtree|xp_dropwebtask|xp_dsninfo|xp_enumdsn|xp_enumerrorlogs|xp_enumgroups|xp_enumqueuedtasks|xp_eventlog|xp_findnextmsg|xp_fixeddrives|xp_getfiledetails|xp_getnetname|xp_grantlogin|xp_logevent|xp_loginconfig|xp_logininfo|xp_makewebtask|xp_msver|xp_regread|xp_perfend|xp_perfmonitor|xp_perfsample|xp_perfstart|xp_readerrorlog|xp_readmail|xp_revokelogin|xp_runwebtask|xp_schedulersignal|xp_sendmail|xp_servicecontrol|xp_snmp_getstate|xp_snmp_raisetrap|xp_sprintf|xp_sqlinventory|xp_sqlregister|xp_sqltrace|xp_sscanf|xp_startmail|xp_stopmail|xp_subdirs|xp_unc_to_drive)((Z)|(?=[^a-zA-Z0-9_]))#) APPFW_BLOCK
add appfw policy sqli_3 HTTP.REQ.BODY(10000).SET_TEXT_MODE(IGNORECASE).SET_TEXT_MODE(URLENCODED).DECODE_USING_TEXT_MODE.REGEX_MATCH(re#((\\A)|(?<=[^a-zA-Z0-9_]))(sysobjects|syscolumns|MSysACEs|MSysObjects|MSysQueries|MSysRelationships)((Z)|(?=[^a-zA-Z0-9_]))#) APPFW_BLOCK
add appfw policy sqli_4 HTTP.REQ.BODY(10000).SET_TEXT_MODE(IGNORECASE).SET_TEXT_MODE(URLENCODED).DECODE_USING_TEXT_MODE.REGEX_MATCH(re#((\\A)|(?<=[^a-zA-Z0-9_]))(SYS\.USER_OBJECTS|SYS\.TAB|SYS\.USER_TABLES|SYS\.USER_VIEWS|SYS\.ALL_TABLES|SYS\.USER_TAB_COLUMNS|SYS\.USER_CONSTRAINTS|SYS\.USER_TRIGGERS|SYS\.USER_CATALOG|SYS\.ALL_CATALOG|SYS\.ALL_CONSTRAINTS|SYS\.ALL_OBJECTS|SYS\.ALL_TAB_COLUMNS|SYS\.ALL_TAB_PRIVS|SYS\.ALL_TRIGGERS|SYS\.ALL_USERS|SYS\.ALL_VIEWS|SYS\.USER_ROLE_PRIVS|SYS\.USER_SYS_PRIVS|SYS\.USER_TAB_PRIVS)((Z)|(?=[^a-zA-Z0-9_]))#) APPFW_BLOCK
Inspeccionar el tipo de contenido JSON o aplicación mediante firmas
Puede agregar las siguientes reglas de firma al objeto de firma del perfil del firewall de la aplicación para admitir la inyección de SQL para el tipo de contenido JSON.
Nota:
Las firmas de los cuerpos de las publicaciones requieren un uso intensivo de la CPU.
TEXT.SET_TEXT_MODE(IGNORECASE).SET_TEXT_MODE(URLENCODED).DECODE_USING_TEXT_MODE.REGEX_MATCH(re#(((\A)|(?<=[^a-zA-Z0-9_])))(select|insert|delete|update|drop|create|alter|grant|revoke|commit|rollback|shutdown|union|intersect|minus|case|decode|where|group|begin|join|exists|distinct|add|modify|constraint|null|like|exec|execute|char|or|and|sp_sdidebug)(( Z)|(?=[^a-zA-Z0-9_]))#) T sql Injection TEXT.SET_TEXT_MODE(IGNORECASE).SET_TEXT_MODE(URLENCODED).DECODE_USING_TEXT_MODE.REGEX_MATCH(re#((\A)|(?<=[^a-zA-Z0-9_]))(xp_availablemedia|xp_cmdshell|xp_deletemail|xp_dirtree|xp_dropwebtask|xp_dsninfo|xp_enumdsn|xp_enumerrorlogs|xp_enumgroups|xp_enumqueuedtasks|xp_eventlog|xp_findnextmsg|xp_fixeddrives|xp_getfiledetails|xp_getnetname|xp_grantlogin|xp_logevent|xp_loginconfig|xp_logininfo|xp_makewebtask|xp_msver|xp_regread|xp_perfend|xp_perfmonitor|xp_perfsample|xp_perfstart|xp_readerrorlog|xp_readmail|xp_revokelogin|xp_runwebtask|xp_schedulersignal|xp_sendmail|xp_servicecontrol|xp_snmp_getstate|xp_snmp_raisetrap|xp_sprintf|xp_sqlinventory|xp_sqlregister|xp_sqltrace|xp_sscanf|xp_startmail|xp_stopmail|xp_subdirs|xp_unc_to_drive)(( Z)|(?=[^a-zA-Z0-9_]))#) T sql Injection TEXT.SET_TEXT_MODE(IGNORECASE).SET_TEXT_MODE(URLENCODED).DECODE_USING_TEXT_MODE.REGEX_MATCH(re#((\A)|(?<=[^a-zA-Z0-9_]))(sysobjects|syscolumns|MSysACEs|MSysObjects|MSysQueries|MSysRelationships)(( Z)|(?=[^a-zA-Z0-9_]))#) T sql Injection TEXT.SET_TEXT_MODE(IGNORECASE).SET_TEXT_MODE(URLENCODED).DECODE_USING_TEXT_MODE.REGEX_MATCH(re#((\A)|(?<=[^a-zA-Z0-9_]))(SYS.USER_OBJECTS|SYS.TAB|SYS.USER_TABLES|SYS.USER_VIEWS|SYS.ALL_TABLES|SYS.USER_TAB_COLUMNS|SYS.USER_CONSTRAINTS|SYS.USER_TRIGGERS|SYS.USER_CATALOG|SYS.ALL_CATALOG|SYS.ALL_CONSTRAINTS|SYS.ALL_OBJECTS|SYS.ALL_TAB_COLUMNS|SYS.ALL_TAB_PRIVS|SYS.ALL_TRIGGERS|SYS.ALL_USERS|SYS.ALL_VIEWS|SYS.USER_ROLE_PRIVS|SYS.USER_SYS_PRIVS|SYS.USER_TAB_PRIVS)(( Z)|(?=[^a-zA-Z0-9_]))#) T sql Injection
En este artículo
- Uso de las firmas de NetScaler Web App Firewall para proteger las aplicaciones JSON
- Para agregar o quitar el tipo de contenido JSON mediante la interfaz de línea de comandos
- Para administrar los tipos de contenido JSON mediante la interfaz gráfica de usuario
- Configuración de la protección de firmas para detectar ataques en la carga útil de JSON
- Ejemplo de una firma para detectar secuencias de comandos entre sitios en una carga JSON
- Ejemplo de carga
- Ejemplo del mensaje de registro
- Resumen
- Proteja el contenido de la aplicación o el tipo JSON con una carga útil codificada para SQL y secuencias de comandos entre sitios mediante directivas y firmas