¿Cómo puedo cargar archivos bloqueados por AWS WAF?

8 minutos de lectura
0

Necesito cargar (POST) un archivo que utiliza una extensión bloqueada por AWS WAF.

Breve descripción

Para comprender por qué AWS WAF podría bloquear una solicitud POST, tenga en cuenta los siguientes puntos:

  • Las reglas administradas _BODY de AWS WAF solo inspeccionan el cuerpo de la solicitud hasta el límite de tamaño del cuerpo en el caso de la lista de control de acceso (ACL) web. El límite es de 8 KB para las ACL web regionales y de 16 KB para las ACL web de Amazon CloudFront. En el caso de las ACL web de CloudFront, puede aumentar el límite hasta los 64 KB en la configuración de ACL web.
  • Las reglas de inyección de código SQL y scripting entre sitios (XSS) son sensibles a los archivos con caracteres aleatorios en sus metadatos. Estos caracteres aleatorios podrían invocar reglas de ACL web debido a su similitud con una firma de inyección de código SQL o XSS real en AWS WAF.

En primer lugar, revise las reglas habituales que pueden bloquear la carga de archivos. Si la carga no está bloqueada por una regla habitual, plantéese otras opciones para permitir los archivos bloqueados.
Las siguientes reglas suelen bloquear la carga de archivos:

  • CrossSiteScripting_BODY
  • SQLi_BODY
  • WindowsShellCommands_BODY
  • GenericLFI_BODY
  • SizeRestrictions_BODY

Solución

La carga de archivos está bloqueada por las reglas SQLi _BODY y CrossSiteScripting_BODY

Consulte la información de la regla en el campo terminatingRuleMatchDetails en los registros detallados de AWS WAF.

Nota: El campo terminatingRuleMatchDetails solo se rellena para los ataques SQLi_BODY y CrossSiteScripting_BODY.

A continuación se muestra un ejemplo de matchedData para CrossSiteScripting_BODY:

"terminatingRuleMatchDetails": [{
        "conditionType": "XSS",
        "location": "BODY",
        "matchedData": [
            "<?",
            "`"
        ]

A continuación se muestra un ejemplo de matchedData para SQLi_BODY:

"terminatingRuleMatchDetails": [{
        "conditionType": "SQL_INJECTION",
        "location": "BODY",
        "matchedData": [
            ")",
            "*",
            "(",
            "0"
        ]

Para solucionar el bloqueo de la carga mediante SQLi_BODY o CrossSiteScripting_BODY, elija una de las siguientes opciones:

Agregación de direcciones IP conocidas a una lista segura
Si conoce el rango de direcciones IP que accede a la aplicación, agregue las direcciones IP conocidas a una regla de lista segura con condiciones de coincidencia de IP. Consulte las instrucciones en Working with IP match conditions.

Uso de una lista segura con una condición de coincidencia
Utilice una lista segura con una condición de coincidencia de cadena o expresión regular para permitir la solicitud. Puede crear una lista segura basada en una URI, encabezados HTTP o una frase asociada al cuerpo (BODY) de los archivos de AWS WAF.

Para crear una lista segura, cree una nueva regla personalizada. Esta regla bloquea los vectores XSS o SQLi con una condición de excepción basada en los datos coincidentes de los atributos de solicitud válidos para la carga. Asegúrese de anular la acción para las reglas específicas dentro de los grupos de reglas administrados que provocan el falso positivo: SQLi_BODY y CrossSiteScripting_BODY.

Para crear esta regla personalizada, siga estos pasos:

  1. Abra la consola de AWS WAF.
  2. En el panel de navegación, en AWS WAF, seleccione Web ACLs.
  3. En Región, elija la región de AWS en la que haya creado la ACL web.
    Nota: Seleccione Global si la ACL web se ha configurado para Amazon CloudFront.
  4. Seleccione la ACL web. A continuación, en la pestaña Reglas de ACL web, elija Reglas.
  5. Elija Agregar reglas y, a continuación, seleccione Add my own rules and rule groups.
  6. En Nombre, introduzca un nombre de regla y, a continuación, elija Regular Rule.
  7. En If a request, elija matches all the statements (AND).
  8. Complete Statement 1 con los siguientes campos:
    En Inspeccionar, seleccione Has a label.
    En Match scope, seleccione Etiqueta.
    En Clave de coincidencia, introduzca la etiqueta para la regla que crea el falso positivo. Por ejemplo, si la regla CrossSiteScripting_BODY crea el falso positivo, introduzca awswaf:managed:aws:core-rule-set:CrossSiteScripting_Body.
  9. Complete Statement 2 con los siguientes campos:
    Marque la casilla Negate statement results.
    En Inspeccionar, seleccione Cuerpo.
    En Tipo de coincidencia, elija Contains string.
    En String to match, indique el valor que desee que cumpla la regla.
  10. (Opcional) En Text transformation, elija Text transformation o None.
  11. En Acción, seleccione Bloque. A continuación, elija Agregar regla.
  12. En Establecer la prioridad de las reglas, coloque la regla debajo del grupo de reglas administradas que bloquea la solicitud. De este modo, primero se establece la etiqueta de la regla administrada para la inspección del grupo de reglas, antes de que AWS WAF utilice la etiqueta en la siguiente prioridad de regla.
  13. Elija Guardar.

Importante: Se recomienda probar las reglas en un entorno no productivo con la Acción definida como Contar. Para evaluar la regla, utilice métricas de Amazon CloudWatch combinadas con solicitudes de muestra de AWS WAF o registros de AWS WAF. Si la regla hace lo que quiere, cambie la Acción a Bloquear.

Cargas de archivos bloqueadas por las reglas WindowsShellCommands_BODY, GenericLFI_BODY o SizeRestrictions_BODY

Tome un archivo HTTP Archive (HAR) cuando se cargue el archivo. A continuación, revíselo para las reglas WindowsShellCommands_BODY, GenericLFI_BODY o SizeRestrictions_BODY. Consulte las instrucciones en ¿Cómo creo un archivo HAR desde mi navegador para un caso de AWS Support?

Para permitir los falsos positivos para WindowsShellCommands_BODY, GenericLFI_BODY o SizeRestrictions_BODY, primero defina la regla correspondiente como Contar. Consulte las instrucciones en Overriding a rule group's evaluation result to Count.

A continuación, cree una regla personalizada para la regla administrada en cuestión que provoca el falso positivo:

  1. Abra la consola de AWS WAF.
  2. En el panel de navegación, en AWS WAF, seleccione Web ACLs.
  3. En Región, elija la región de AWS en la que haya creado la ACL web.
    Nota: Seleccione Global si la ACL web se ha configurado para Amazon CloudFront.
  4. Seleccione la ACL web. A continuación, en la pestaña Reglas de ACL web, elija Reglas.
  5. Elija Agregar reglas y, a continuación, seleccione Add my own rules and rule groups.
  6. En Nombre, introduzca un nombre de regla y, a continuación, elija Regular Rule.
  7. En If a request, elija matches all the statements (AND).
  8. Complete Statement 1 con los siguientes campos:
    En Inspeccionar, seleccione Has a label.
    En Match scope, seleccione Etiqueta.
    En Clave de coincidencia, introduzca la etiqueta para la regla que crea el falso positivo. Por ejemplo, si la regla WindowsShellCommands_BODY crea el falso positivo, introduzca awswaf:managed:aws:windows-os:WindowsShellCommands_Body.
  9. Complete Statement 2 con los siguientes campos:
    Marque la casilla Negate statement results.
    En Inspeccionar, seleccione URI path.
    En Tipo de coincidencia, seleccione Exactly matches string.
    En String to match, indique la ruta URI en la que se realizan las solicitudes.
  10. (Opcional) En Text transformation, elija Text transformation o None.
  11. En Acción, seleccione Bloque.
  12. Elija Agregar regla.
  13. En Establecer la prioridad de las reglas, coloque la regla debajo de la regla administrada que bloqueó la solicitud.
  14. Elija Guardar.

Importante: Se recomienda probar las reglas en un entorno no productivo con la Acción definida como Contar. Evalúe la regla con métricas de CloudWatch combinadas con solicitudes de muestra de AWS WAF o registros de AWS WAF. Si la regla hace lo que quiere, cambie la Acción a Bloquear.

Opciones adicionales para permitir archivos bloqueados

Nota: Las reglas se procesan en el mismo orden de la lista en la ACL web. Para las siguientes recomendaciones, asegúrese de reordenar las prioridades de las reglas según sea necesario.
Elija el mejor método para su caso de uso:

  • Aplique la exclusión selectiva con una instrucción de regla de coincidencia de cadena (AWS WAF) o una condición de coincidencia de cadena (versión clásica de AWS WAF). Agregue frases específicas asociadas con el cuerpo (BODY) de los archivos a su lista segura. Si aparecen falsos positivos en una determinada ruta URI, añada la ruta a su lista segura.
  • Use un dominio independiente para cargar archivos. No olvide tener en cuenta si se trata de una opción rentable para su caso de uso.
  • Escanee (limpie) archivos e imágenes en busca de código y datos incrustados. Puede realizar esta acción en el lado del cliente antes de cargar los archivos. También puede realizar esta acción en el backend después de cargar los archivos si crea una regla de exclusión.
  • Comprima los archivos antes de cargarlos.
    Precaución: Asegúrese de no comprimir los archivos malintencionados.
  • Si la carga se produce desde un rango de direcciones IP conocidas, añada esas direcciones IP a su lista segura.
  • Utilice la codificación base64 para codificar todos los datos de imagen, de modo que AWS WAF no invoque XSS ni SQLi en las imágenes.
    Precaución: Asegúrese de evitar la codificación de imágenes malintencionadas.
  • Implemente técnicas de optimización de imágenes, como la eliminación de fragmentos o la aleatorización de bits.
OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año