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

Dernière mise à jour : 27/07/2022

J'ai besoin de charger (POST) un fichier qui utilise une extension bloquée par AWS WAF. Comment télécharger des fichiers bloqués par AWS WAF ?

Brève description

Considérez ce qui suit pour comprendre pourquoi une requête POST est bloquée par AWS WAF :

  • 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 SQLinjection 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 SQLinjection 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 causés par le chargement de fichiers ou d'images.

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

Les règles communes suivantes bloquent 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. Pour activer la journalisation AWS WAF, consultez Comment activer la journalisation AWS WAF et envoyer des journaux vers CloudWatch, Amazon S3 ou Kinesis Data Firehose ?
Remarque : le champ terminatingRuleMatchDetails n'est renseigné que pour les attaques SQLi_BODY et CrossSiteScripting_BODY.

Voici un exemple de matchedData pour CrossSiteScripting_BODY :

{
    "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

Ajoutez des adresses IP connues à une règle de liste sécurisée avec des conditions de correspondance IP si la plage d'adresses IP accédant à l'application est connue. 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 regex pour autoriser la demande. Vous pouvez créer une liste de confiance basée sur l'URI, les en-têtes HTTP ou une phrase spécifique associée au Body (Corps) des fichiers sur AWS WAF.

Pour créer une liste de confiance basée sur les données correspondantes, procédez comme suit :

Ajoutez un énoncé de réduction de la portée à la règle gérée AWS spécifique qui bloque vos demandes.

  1. Ouvrez la console AWS WAF.
  2. Dans le volet de navigation, sous AWS WAF, choisissez Web ACLs (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 the statement (correspond à l'énoncé).
  9. Dans Statement 1 (Énoncé 1) :
    Pour Inspect (Inspecter), choisissez Body (Corps).
    Pour Content type (Type de contenu), choisissez Plain text (Texte brut) ou JSON.
    Pour Match type (Type de correspondance), choisissez Contains string (Contient une chaîne).
    Pour String to match (Chaîne à correspondre), saisissez la valeur que vous voulez faire correspondre à la règle.
  10. (Facultatif) Pour Text transformation (Transformation de texte), choisissez une Text transformation (Transformation de texte) ou None (Aucune).
  11. Pour Action (Action), choisissez Allow (Autoriser).
  12. Choisissez Add rule (Ajouter une règle).
  13. 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 par AWS qui bloquait la demande.
  14. 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 vous êtes convaincu que la règle fait ce que vous voulez, définissez Action (Action) sur Allow (Autoriser).

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 à partir de mon navigateur pour un cas AWS Support ? et suivez les instructions dans Création d'un fichier HAR dans votre navigateur.

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 Définition des actions de règle de comptage dans un groupe de règles.

Ensuite, ajoutez un énoncé de réduction de la portée à la règle gérée AWS spécifique qui bloque vos demandes.

  1. Ouvrez la console AWS WAF.
  2. Dans le volet de navigation, sous AWS WAF, choisissez Web ACLs (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 énoncés (AND)).
  9. Dans Statement 1 (Énoncé 1) :
    Pour Inspect (Inspecter), choisissez Has a label (Possède une étiquette).
    Pour Match scope (Portée de la correspondance), choisissez Label (Étiquette).
    Pour Match key (Clé de correspondance), saisissez l'étiquette de la règle qui crée les faux positifs. Par exemple, saisissez awswaf:managed:aws:windows-os:WindowsShellCommands_Body si la règle WindowsShellCommands_BODY crée le faux positif.
  10. Dans Statement 2 (Énoncé 2) :
    Choisissez Negate statement results (Négation des résultats de l'énoncé).
    Pour Inspect (Inspecter), choisissez URI path (Chemin d'accès URI).
    Pour Match type (Type de correspondance), choisissez 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 par AWS 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 vous êtes convaincu que 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 associées au BODY des fichiers à votre liste sécurisée. Si un URI a un certain chemin d'accès, ajoutez ce chemin à 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 du code et des données incorporés. Vous pouvez effectuer cette action côté client avant de télécharger les fichiers. Ou, si vous devez créer 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 : confirmez 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. Toutes les données d'image sont encodées, ce qui signifie qu'AWS WAF ne peut pas lancer XSS 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.

Cet article vous a-t-il été utile ?


Avez-vous besoin d'aide pour une question technique ou de facturation ?