Comment puis-je charger des fichiers bloqués par AWS WAF ?

Lecture de 8 minute(s)
0

Je dois charger (POST) un fichier qui utilise une extension bloquée par AWS WAF.

Brève description

Pour comprendre pourquoi AWS WAF peut bloquer une demande POST, tenez compte des points suivants :

  • Les règles gérées par AWS WAF _BODY inspectent uniquement le corps de la demande jusqu’à la limite de taille du corps de la liste de contrôle d’accès Web (ACL). La limite est de 8 Ko pour les ACL Web régionales et de 16 Ko pour les ACL Web Amazon CloudFront. Pour les ACL Web CloudFront, vous pouvez augmenter la limite jusqu’à 64 Ko dans votre configuration ACL Web.
  • Les règles d’injection SQL et de scripts inter-site (XSS) sont sensibles aux fichiers dont les métadonnées contiennent des caractères aléatoires. Ces caractères aléatoires peuvent invoquer des règles ACL Web en raison de leur similitude avec une signature d’injection XSS ou SQL réelle dans AWS WAF.

Commencez par examiner les règles communes susceptibles de bloquer le téléchargement de fichiers. Si aucune règle courante ne bloque le téléchargement, envisagez d’autres options permettant d’autoriser les fichiers bloqués.
Les règles suivantes bloquent généralement les téléchargements de fichiers :

  • CrossSiteScripting_BODY
  • SQLi_BODY
  • WindowsShellCommands_BODY
  • GenericLFI_BODY
  • SizeRestrictions_BODY

Résolution

Chargements de fichiers bloqués par les règles SQLi_BODY et CrossSiteScripting_BODY

Consultez le champ terminatingRuleMatchDetails dans les journaux complets d’AWS WAF pour obtenir les informations relatives aux règles.

Remarque : le champ terminatingRuleMatchDetails est renseigné uniquement pour les attaques SQLi_BODY et CrossSiteScripting_BODY.

Voici un exemple de valeur matchedData pour CrossSiteScripting_BODY :

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

Voici un exemple de valeur matchedData pour SQLi_BODY :

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

Pour traiter les téléchargements bloqués par SQLi_BODY ou CrossSiteScripting_BODY, choisissez l’une des options suivantes :

Ajouter des adresses IP connues à une liste sécurisée
Si vous connaissez la plage d’adresses IP qui accède à l’application, ajoutez des adresses IP connues à une règle de liste sécurisée avec des conditions de correspondance IP. Pour obtenir des instructions, consultez la page Utilisation des conditions de correspondance d’IP.

Utiliser une liste sécurisée avec une condition de correspondance
Utilisez une liste sécurisée avec une condition de correspondance de chaîne ou d’expression régulière (regex) pour autoriser la demande. Vous pouvez créer une liste sécurisée à partir d’un URI, d’en-têtes HTTP ou d’une phrase associée au CORPS des fichiers AWS WAF.

Pour créer votre liste sécurisée, créez une nouvelle règle personnalisée. Cette règle bloque les vecteurs XSS ou SQLi avec une condition d’exception basée sur les données correspondantes d’attributs de demande valides pour le téléchargement. Veillez à modifier l’action associée aux règles spécifiques au sein des groupes de règles gérées qui causent le faux positif : SQLi_BODY et CrossSiteScripting_BODY.

Pour créer cette règle personnalisée, procédez comme suit :

  1. Ouvrez la console AWS WAF.
  2. Dans le volet de navigation, sous AWS WAF, sélectionnez ACL Web.
  3. Dans le champ Région, choisissez la région AWS dans laquelle vous avez créé votre ACL Web.
    Remarque : choisissez Global si votre ACL Web est configurée pour Amazon CloudFront.
  4. Sélectionnez votre ACL Web. Ensuite, dans l’onglet Règles ACL Web, choisissez Règles.
  5. Choisissez Ajouter des règles, puis Ajouter mes propres règles et groupes de règles.
  6. Dans le champ Nom, saisissez un nom de règle, puis choisissez Règle régulière.
  7. Dans le champ Si une demande, choisissez correspond à toutes les instructions (ET).
  8. Complétez la section Instruction 1 avec les champs suivants :
    Dans le champ Inspecter, sélectionnez Possède une étiquette.
    Dans le champ Portée de correspondance, sélectionnez Étiquette.
    Dans le champ Clé de correspondance, saisissez l’étiquette de la règle qui crée le faux positif. Par exemple, si la règle CrossSiteScripting_BODY crée le faux positif, saisissez awswaf:managed:aws:core-rule-set:CrossSiteScripting_Body.
  9. Complétez la section Instruction 2 avec les champs suivants :
    Cochez la case correspondant au champ Résultats de l’instruction de négation.
    Dans le champ Inspecter, sélectionnez Corps.
    Dans le champ Type de correspondance, sélectionnez Contient une chaîne.
    Dans le champ Chaîne à faire correspondre, saisissez la valeur que vous souhaitez associer à la règle.
  10. (Facultatif) Dans le champ Transformation de texte, choisissez une Transformation de texte ou Aucune.
  11. Dans le champ Action, sélectionnez Bloquer. Choisissez ensuite Ajouter une règle.
  12. Dans le champ Définir la priorité des règles, déplacez la règle en dessous du groupe de règles gérées qui bloquent la demande. Cela définit d’abord l’étiquette de règle gérée pour l’inspection du groupe de règles, avant qu’AWS WAF utilise l’étiquette dans la priorité de règle suivante.
  13. Choisissez Enregistrer.

Important : il est recommandé de tester les règles dans un environnement hors production en réglant le paramètre Action sur Nombre. Pour évaluer la règle, utilisez les métriques Amazon CloudWatch combinées aux échantillons de demandes AWS WAF ou aux journaux AWS WAF. Lorsque la règle agit comme vous le souhaitez, remplacez la valeur du paramètre Action par Bloquer.

Chargements de fichiers bloqués par la règle WindowsShellCommands_BODY, GenericLFI_BODY ou SizeRestrictions_BODY

Prenez un fichier d’archive HTTP (HAR) lors du chargement du fichier. Regardez ensuite s’il contient la règle WindowsShellCommands_BODY, GenericLFI_BODY ou SizeRestrictions_BODY. Pour obtenir des instructions, consultez la page Comment puis-je créer un fichier HAR à partir de mon navigateur pour un ticket AWS Support ?

Afin d’autoriser les faux positifs pour WindowsShellCommands_BODY, GenericLFI_BODY ou SizeRestrictions_BODY, définissez d’abord la règle correspondante sur le mode Nombre. Pour obtenir des instructions, consultez la page Remplacement du résultat d’évaluation d’un groupe de règles par Nombre.

Créez ensuite une règle personnalisée pour la règle gérée spécifique à l’origine du faux positif :

  1. Ouvrez la console AWS WAF.
  2. Dans le volet de navigation, sous AWS WAF, sélectionnez ACL Web.
  3. Dans le champ Région, choisissez la région AWS dans laquelle vous avez créé votre ACL Web.
    Remarque : choisissez Global si votre ACL Web est configurée pour Amazon CloudFront.
  4. Sélectionnez votre ACL Web. Ensuite, dans l’onglet Règles ACL Web, choisissez Règles.
  5. Choisissez Ajouter des règles, puis Ajouter mes propres règles et groupes de règles.
  6. Dans le champ Nom, saisissez un nom de règle, puis choisissez Règle régulière.
  7. Dans le champ Si une demande, choisissez correspond à toutes les instructions (ET).
  8. Complétez la section Instruction 1 avec les champs suivants :
    Dans le champ Inspecter, sélectionnez Possède une étiquette.
    Dans le champ Portée de correspondance, sélectionnez Étiquette.
    Dans le champ Clé de correspondance, saisissez l’étiquette de la règle qui crée le faux positif. Par exemple, si la règle WindowsShellCommands_BODY crée un faux positif, saisissez awswaf:managed:aws:windows-os:WindowsShellCommands_Body.
  9. Complétez la section Instruction 2 avec les champs suivants :
    Cochez la case correspondant au champ Résultats de l’instruction de négation.
    Dans le champ Inspecter, sélectionnez Chemin URI.
    Dans le champ Type de correspondance, sélectionnez Correspond exactement à la chaîne.
    Dans le champ Chaîne à faire correspondre, saisissez le chemin de l’URI où les demandes sont émises.
  10. (Facultatif) Dans le champ Transformation de texte, choisissez une Transformation de texte ou Aucune.
  11. Dans le champ Action, sélectionnez Bloquer.
  12. Choisissez Ajouter une règle.
  13. Dans le champ Définir la priorité des règles, déplacez la règle en dessous de la règle gérée qui bloque la demande.
  14. Choisissez Enregistrer.

Important : il est recommandé de tester les règles dans un environnement hors production en réglant le paramètre Action sur Nombre. Évaluez la règle en utilisant les métriques Amazon CloudWatch combinées aux échantillons de demandes AWS WAF ou aux journaux AWS WAF. Lorsque la règle agit comme vous le souhaitez, remplacez la valeur du paramètre Action par Bloquer.

Options supplémentaires pour autoriser les fichiers bloqués

Remarque : les règles sont traitées en fonction de leur ordre d’apparition dans la liste de l’ACL Web. Pour appliquer les recommandations suivantes, veillez à réorganiser l’ordre de priorité de vos règles le cas échéant.
Choisissez la méthode la mieux adaptée à votre cas d’utilisation :

  • Appliquez une exclusion sélective à l’aide d’une instruction de règle de correspondance de chaînes (AWS WAF) ou d’une condition de correspondance de chaînes (AWS WAF Classic). Ajoutez des phrases spécifiques associées au CORPS des fichiers à votre liste sécurisée. Si des faux positifs apparaissent sur un chemin d’URI spécifique, ajoutez-le à votre liste sécurisée.
  • Utilisez un domaine distinct pour les chargements de fichiers. Veillez à déterminer s’il s’agit d’une option rentable pour votre cas d’utilisation.
  • Numérisez (par balayage) les fichiers et les images pour obtenir les données et le code intégrés. Vous pouvez effectuer cette action côté client avant de charger les fichiers. Si vous créez une règle d’exclusion, vous pouvez également effectuer cette action en backend après avoir chargé les fichiers.
  • Compressez les fichiers avant de les charger.
    Attention : veillez à ne pas compresser de fichiers malveillants.
  • Si le chargement est effectué à partir d’une plage d’adresses IP connues, ajoutez ces adresses IP à votre liste sécurisée.
  • Utilisez le codage base64 pour coder toutes les données d’image afin qu’AWS WAF n’invoque pas XSS ou SQLi sur les images.
    Attention : veillez à ne pas encoder d’images malveillantes.
  • Mettez en œuvre des techniques d’optimisation de l’image, telles que la suppression de blocs ou l’aléatorisation des bits.
AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 3 mois