Como faço o upload de arquivos bloqueados pelo AWS WAF?

8 minuto de leitura
0

Preciso fazer upload (POST) de um arquivo que usa uma extensão bloqueada pelo AWS WAF.

Breve descrição

Para entender por que o AWS WAF pode bloquear uma solicitação POST, observe os seguintes pontos:

  • As regras gerenciadas _BODY do AWS WAF inspecionam somente o corpo da solicitação até o limite de tamanho do corpo da lista de controle de acesso (ACL) da Web. O limite é de 8 KB para ACLs da Web regionais e 16 KB para ACLs Web do Amazon CloudFront. Para ACLs Web do CloudFront, é possível aumentar o limite até 64 KB na configuração da ACL Web.
  • As regras de injeção de SQL e cross-site scripting (XSS) são sensíveis a arquivos com caracteres aleatórios em seus metadados. Esses caracteres aleatórios podem invocar regras de ACL Web devido à sua semelhança com uma assinatura real de injeção de XSS ou SQL no AWS WAF.

Primeiro, analise as regras comuns que podem bloquear uploads de arquivos. Se uma regra comum não bloquear o upload, considere opções adicionais para permitir arquivos bloqueados.
As regras a seguir geralmente bloqueiam uploads de arquivos:

  • CrossSiteScripting_BODY
  • SQLi_BODY
  • WindowsShellCommands_BODY
  • GenericLFI_BODY
  • SizeRestrictions_BODY

Resolução

Uploads de arquivos bloqueados pelas regras SQLi_BODY e CrossSiteScripting_BODY

Verifique o campo terminatingRuleMatchDetails nos logs abrangentes do AWS WAF para obter as informações da regra.

Observação: o campo terminatingRuleMatchDetails é preenchido somente para ataques de SQLi_BODY e CrossSiteScripting_BODY.

Veja a seguir um exemplo de matchedData para CrossSiteScripting_BODY:

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

Veja a seguir um exemplo de matchedData para SQLi_BODY:

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

Para resolver os uploads bloqueados por SQLi_BODY ou CrossSiteScripting_BODY, escolha uma das seguintes opções:

Adicione endereços IP conhecidos a uma lista segura
Se você conhecer o intervalo de endereços IP que acessa a aplicação, adicione endereços IP conhecidos a uma regra de lista segura com condições de correspondência de IPs. Para obter instruções, consulte Como trabalhar com condições de correspondência de IPs.

Use uma lista segura com uma condição de correspondência
Use uma lista segura com uma condição de correspondência de string ou expressão regular (regex) para permitir a solicitação. Você pode criar uma lista segura com base em um URI, cabeçalhos HTTP ou uma frase associados ao CORPO dos arquivos do AWS WAF.

Para criar sua lista segura, crie uma nova regra personalizada. Essas regras bloqueiam vetores XSS ou SQLi com uma condição de exceção baseada nos dados correspondentes de atributos de solicitação válidos para upload. Certifique-se de substituir a ação das regras específicas dentro dos grupos de regras gerenciadas que causam o falso positivo: SQLi_BODY e CrossSiteScripting_BODY.

Para criar essa regra personalizada, conclua as seguintes etapas:

  1. Abra o console do AWS WAF.
  2. No painel de navegação, em AWS WAF, escolha ACLs Web.
  3. Em Região, selecione a região da AWS em que você criou sua ACL Web.
    Observação: selecione Global se sua ACL Web estiver configurada para o Amazon CloudFront.
  4. Selecione sua ACL Web. Em seguida, na guia Regras da ACL Web, escolha Regras.
  5. Escolha Adicionar regras e depois escolha Adicionar minhas próprias regras e grupos de regras.
  6. Em Nome, insira um nome de regra e escolha Regra regular.
  7. Em Se uma solicitação, escolha corresponder a todas as instruções (E).
  8. Preencha a Instrução 1 com os seguintes campos:
    Em Inspecionar, selecione Tiver uma etiqueta.
    Em Escopo de correspondência, selecione Rótulo.
    Em Chave de correspondência, insira o rótulo da regra que cria o falso positivo. Por exemplo, se a regra CrossSiteScripting_BODY criar o falso positivo, insira awswaf:managed:aws:core-rule-set:CrossSiteScripting_Body.
  9. Preencha a Instrução 2 com os seguintes campos:
    Marque a caixa de seleção para Negar resultados da instrução.
    Em Inspecionar, selecione Corpo.
    Em Tipo de correspondência, selecione Contém string.
    Em String para correspondência, insira o valor que você deseja que corresponda à regra.
  10. (Opcional) Para Transformação de texto, escolha uma Transformação de texto ou Nenhuma.
  11. Em Ação, escolha Bloquear. Em seguida, escolha Adicionar regra.
  12. Em Definir prioridade da regra, mova a regra abaixo do grupo de regras gerenciado que bloqueia a solicitação. Isso define o rótulo da regra gerenciada primeiro para a inspeção do grupo de regras, antes que o AWS WAF use o rótulo na próxima prioridade da regra.
  13. Escolha Salvar.

Importante: é uma prática recomendada testar regras em um ambiente de não produção com a Ação definida como Contar. Para avaliar a regra, use métricas do Amazon CloudWatch combinadas com amostras de solicitações do AWS WAF ou logs do AWS WAF. Quando a regra fizer o que você deseja, altere a Ação para Bloquear.

Uploads de arquivos bloqueados por regras WindowsShellCommands_BODY, GenericLFI_BODY ou SizeRestrictions_BODY

Use um arquivo HTTP Archive (HAR) quando o arquivo for carregado. Em seguida, revise-o em busca de regras WindowsShellCommands_BODY, GenericLFI_BODY, ou SizeRestrictions_BODY. Para obter instruções, consulte Como crio um arquivo HAR a partir do meu navegador para um caso do AWS Support?

Para permitir falsos positivos para WindowsShellCommands_BODY, GenericLFI_BODY ou SizeRestrictions_BODY, primeiro defina a regra correspondente como o modo de Contar. Para obter instruções, consulte Substituir o resultado da avaliação de um grupo de regras para Contar.

Em seguida, crie uma regra personalizada para a regra gerenciada específica que causa o falso positivo:

  1. Abra o console do AWS WAF.
  2. No painel de navegação, em AWS WAF, escolha ACLs Web.
  3. Em Região, selecione a região da AWS em que você criou sua ACL Web.
    Observação: selecione Global se sua ACL Web estiver configurada para o Amazon CloudFront.
  4. Selecione sua ACL Web. Em seguida, na guia Regras da ACL Web, escolha Regras.
  5. Escolha Adicionar regras e depois escolha Adicionar minhas próprias regras e grupos de regras.
  6. Em Nome, insira um nome de regra e escolha Regra regular.
  7. Em Se uma solicitação, escolha corresponder a todas as instruções (E).
  8. Preencha a Instrução 1 com os seguintes campos:
    Em Inspecionar, selecione Tiver uma etiqueta.
    Em Escopo de correspondência, selecione Rótulo.
    Em Chave de correspondência, insira o rótulo da regra que cria o falso positivo. Por exemplo, se a regra WindowsShellCommands_BODY criar o falso positivo, insira awswaf:managed:aws:windows-os:WindowsShellCommands_Body.
  9. Preencha a Instrução 2 com os seguintes campos:
    Marque a caixa de seleção para Negar resultados da instrução.
    Em Inspecionar, selecione Caminho do URI.
    Em Tipo de correspondência, selecione Corresponde exatamente à string.
    Em String para correspondência, insira o caminho do URI em que as solicitações estão sendo feitas.
  10. (Opcional) Para Transformação de texto, escolha uma Transformação de texto ou Nenhuma.
  11. Em Ação, escolha Bloquear.
  12. Escolha Adicionar regra.
  13. Em Definir prioridade da regra, mova a regra abaixo da regra gerenciada que bloqueou a solicitação.
  14. Escolha Salvar.

Importante: é uma prática recomendada testar regras em um ambiente de não produção com a Ação definida como Contar. Avalie a regra com métricas do CloudWatch combinadas com amostras de solicitações do AWS WAF ou logs do AWS WAF. Quando a regra fizer o que você deseja, altere a Ação para Bloquear.

Opções adicionais para permitir arquivos bloqueados

Observação: as regras são processadas na mesma ordem que na ACL Web. Para as recomendações a seguir, não se esqueça de reordenar suas prioridades de regras conforme necessário.
Escolha o melhor método para seu caso de uso:

  • Aplique a exclusão seletiva com uma instrução de regra de correspondência de strings (AWS WAF) ou uma condição de correspondência de string (AWS WAF Classic). Adicione frases específicas associadas ao elemento CORPO dos arquivos à sua lista segura. Se falsos positivos ocorrerem em um determinado caminho de URI, adicione esse caminho à sua lista segura.
  • Use um domínio separado para uploads de arquivos. Não deixe de considerar se esta é uma opção econômica para seu caso de uso.
  • Examine (limpe) arquivos e imagens em busca de código e dados incorporados. Você pode realizar essa ação no lado do cliente antes de fazer o upload dos arquivos. Ou, se você criar uma regra de exclusão, é possível realizar essa ação no backend após o upload dos arquivos.
  • Compacte os arquivos antes do upload.
    Cuidado: certifique-se de não compactar arquivos mal-intencionados.
  • Se o upload ocorrer a partir de vários endereços IP conhecidos, adicione esses endereços IP à sua lista segura.
  • Use a codificação base64 para codificar todos os dados de imagem. de forma que o AWS WAF não invoque XSS ou SQLi nessas imagens.
    Cuidado: tome medidas para evitar a codificação de imagens mal-intencionadas.
  • Implemente técnicas de otimização de imagem, como remoção de fragmentos ou randomização de bits.
AWS OFICIAL
AWS OFICIALAtualizada há 4 meses