Comment télécharger des fichiers bloqués par AWS WAF ?

Lecture de 8 minute(s)
0

J'ai besoin de charger (POST) un fichier qui utilise une extension bloquée par AWS WAF.

Brève description

Pour comprendre pourquoi une requête POST est bloquée par AWS WAF, notez les points suivants :

  • Les filtres AWS WAF BODY inspectent uniquement les 8 192 premiers octets de la charge utile d'une requête POST pour les scripts malveillants.
  • Les règles d'injection SQL et XSS (Cross Site Scripting) sont sensibles aux fichiers qui contiennent des caractères aléatoires dans leurs métadonnées. Ces caractères aléatoires peuvent déclencher des règles ACL Web en raison de leur similitude avec une signature XSS ou d'injection SQL réelle dans AWS WAF.

Le filtrage de types de fichiers spécifiques n'est pas pris en charge par AWS WAF. Vous devez utiliser d'autres méthodes pour éliminer les faux positifs du chargement de fichiers ou d'images.

Tout d'abord, recherchez les règles communes qui peuvent bloquer les chargements de fichiers. Si une règle commune ne bloque pas le chargement, puis envisagez des options supplémentaires pour autoriser les fichiers bloqués.

Les règles suivantes bloquent généralement les chargements de fichiers :

  • CrossSiteScripting_BODY
  • SQLi_BODY
  • WindowsShellCommands_BODY
  • GenericLFI_BODY
  • SizeRestrictions_BODY

Solution

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

Vérifiez le champ terminatingRuleMatchDetails dans les journaux complets d'AWS WAF pour obtenir les informations sur la règle.

Remarque : le champ terminatingRuleMatchDetails n'est renseigné que pour les attaques SQLi_BODY et CrossSiteScripting_BODY.

Voici un exemple de matchedData pour CrossSiteScripting_BODY :

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

Voici un exemple de matchedData pour SQLi_BODY :

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

Pour résoudre le problème des chargements bloqués par SQLi_BODY ou CrossSiteScripting_BODY, choisissez l'une des options suivantes :

Option 1

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

Option 2

Utilisez une liste sécurisée avec une condition de correspondance de type chaîne ou expression régulière (regex) pour autoriser la demande. Vous pouvez créer une liste de confiance basée sur une URI, les en-têtes HTTP ou une phrase associée au BODY (Corps) des fichiers AWS WAF.

Pour créer votre liste sécurisée, créez une nouvelle règle personnalisée pour bloquer les vecteurs XSS ou SQLi avec une condition d'exception basée sur des données correspondantes. Veillez à annuler l'action correspondant à la règle spécifique à l'origine du faux positif.

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

1.    Ouvrez la console AWS WAF.

2.    Dans le panneau de navigation, sous AWS WAF, sélectionnez Web ACLs (Listes ACL web).

3.    Pour Region (Région), sélectionnez la région AWS dans laquelle vous avez créé votre liste ACL web.
Remarque : sélectionnez Global si votre liste ACL web est configurée pour Amazon CloudFront.

4.    Sélectionnez votre liste ACL web.

5.    Dans l'onglet Rules (Règles) de la liste ACL Web, sélectionnez Rules (Règles).

6.    Choisissez Add rules (Ajouter des règles), puis Add my own rules and rule groups (Ajouter mes propres règles et groupes de règles).

7.    Pour Name (Nom), saisissez un nom de règle, puis choisissez Regular Rule (Règle régulière).

8.    Pour If a request (Si une demande), choisissez matches all the statements (AND) [correspond à toutes les instructions (AND)].

9.    Complétez la Statement 1 (Déclaration 1) avec les champs suivants :
Pour Inspect (Inspecter), sélectionnez Has a label (Dispose d'une étiquette).
Pour Match scope (Portée de la correspondance), sélectionnez Label (Étiquette).
Pour Match key (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.

10.    Complétez la Statement 2 (Déclaration 2) avec les champs suivants :
Cochez la case pour Negate statement results (Négation des résultats de l'énoncé).
Pour Inspect (Inspecter), sélectionnez Body (Corps).
Pour Match type (Type de correspondance), sélectionnez Contains string (Contient une chaîne).
Pour String to match (Chaîne à correspondre), saisissez la valeur que vous voulez faire correspondre à la règle.

11.    (Facultatif) Pour Text transformation (Transformation de texte), choisissez une Text transformation (Transformation de texte) ou None (Aucune).

12.    Pour Action (Action), choisissez Block (Bloquer).

13.    Choisissez Add rule (Ajouter une règle).

14.    Pour Set rule priority (Définir la priorité des règles), déplacez la règle en dessous de la règle gérée qui bloquait la demande.

15.    Choisissez Save (Enregistrer).

Important : il est recommandé de tester les règles dans un environnement hors production avec Action définie sur Count (Compter). Évaluez la règle à l'aide des métriques Amazon CloudWatch combinées aux demandes échantillonnées AWS WAF ou aux journaux AWS WAF. Lorsque la règle fait ce que vous voulez, définissez Action (Action) sur Block (Bloquer).

Chargements de fichiers bloqués par les règles WindowsShellCommands_BODY, GenericLFI_BODY ou SizeRestrictions_BODY

Prenez un fichier d'archive HTTP (HAR) pendant que le fichier est en train d'être chargé et examinez-le à la recherche de règles WindowsShellCommands_BODY, GenericLFI_BODY ou SizeRestrictions_BODY. Pour obtenir des instructions, consultez Comment créer un fichier HAR dans mon navigateur pour une demande AWS Support ?

Pour autoriser les faux positifs pour WindowsShellCommands_BODY, GenericLFI_BODY ou SizeRestrictions_BODY, définissez d'abord la règle correspondante en mode Count (Compter). Pour obtenir des instructions, consultez Remplacer le 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 avec une condition d'exception à l'aide de Labels: (Étiquettes :)

1.    Ouvrez la console AWS WAF.

2.    Dans le panneau de navigation, sous AWS WAF, sélectionnez Web ACLs (Listes ACL web).

3.    Pour Region (Région), sélectionnez la région AWS dans laquelle vous avez créé votre liste ACL web.
Remarque : sélectionnez Global si votre liste ACL web est configurée pour Amazon CloudFront.

4.    Sélectionnez votre liste ACL web.

5.    Dans l'onglet Rules (Règles) de la liste ACL Web, sélectionnez Rules (Règles).

6.    Choisissez Add rules (Ajouter des règles), puis Add my own rules and rule groups (Ajouter mes propres règles et groupes de règles).

7.    Pour Name (Nom), saisissez un nom de règle, puis choisissez Regular Rule (Règle régulière).

8.    Pour If a request (Si une demande), choisissez matches all the statements (AND) [correspond à toutes les instructions (AND)].

9.    Complétez la Statement 1 (Déclaration 1) avec les champs suivants :
Pour Inspect (Inspecter), sélectionnez Has a label (Dispose d'une étiquette).
Pour Match scope (Portée de la correspondance), sélectionnez Label (Étiquette).
Pour Match key (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 le faux positif, puis saisissez awswaf:managed:aws:windows-os:WindowsShellCommands_Body.

10.    Complétez la Statement 2 (Déclaration 2) avec les champs suivants :
Cochez la case pour Negate statement results (Négation des résultats de l'énoncé).
Pour Inspect (Inspecter), sélectionnez URI path (Chemin d'accès URI).
Pour Match type (Type de correspondance), sélectionnez Exactly matches string (Correspondance exacte de la chaîne).
Pour String to match (Chaîne à correspondre), saisissez le chemin URI où les demandes sont effectuées.

11.    (Facultatif) Pour Text transformation (Transformation de texte), choisissez une Text transformation (Transformation de texte) ou None (Aucune).

12.    Pour Action (Action), choisissez Block (Bloquer).

13.    Choisissez Add rule (Ajouter une règle).

14.    Pour Set rule priority (Définir la priorité des règles), déplacez la règle en dessous de la règle gérée qui bloquait la demande.

15.    Choisissez Save (Enregistrer).

Important : il est recommandé de tester les règles dans un environnement hors production avec Action définie sur Count (Compter). Évaluez la règle à l'aide des métriques CloudWatch combinées aux demandes échantillonnées AWS WAF ou aux journaux AWS WAF. Lorsque la règle fait ce que vous voulez, définissez Action (Action) sur Block (Bloquer).

Options supplémentaires pour autoriser les fichiers bloqués

Remarque : les règles sont traitées dans l'ordre dans lequel elles sont répertoriées dans la liste ACL Web. Pour les recommandations suivantes, assurez-vous de réorganiser les priorités de vos règles au besoin.

Choisissez la meilleure méthode pour votre cas d'utilisation :

  • Appliquez une exclusion sélective à l'aide d'une instruction de règle de correspondance de chaîne (AWS WAF) ou d'une condition de correspondance de chaîne (AWS WAF Classic). Ajoutez des phrases spécifiques qui sont associées au BODY des fichiers à votre liste sécurisée. Si des faux positifs se produisent sur un certain chemin d'URI, ajoutez-le à votre liste de sécurité.
  • Utilisez un domaine distinct pour les téléchargements de fichiers. Assurez-vous d'examiner s'il s'agit d'une option rentable pour votre cas d'utilisation.
  • Analysez (nettoyez) les fichiers et les images pour le code et les données incorporés. Vous pouvez effectuer cette action côté client avant de télécharger les fichiers. Ou, si vous créez une règle d'exclusion, vous pouvez effectuer cette action sur le backend après avoir téléchargé les fichiers.
  • Compressez les fichiers avant de les télécharger.
    Attention : assurez-vous que vous ne compressez pas les fichiers malveillants.
  • Si le téléchargement se produit à partir d'une plage d'adresses IP connues, ajoutez ces adresses IP à votre liste de sécurité.
  • 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 : assurez-vous d'éviter l'encodage des images malveillantes.
  • Mettez en œuvre des techniques d'optimisation d'image, telles que la suppression de fragments ou la répartition aléatoire des bits.

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 9 mois