Citrix ADC

Vérification par injection HTML SQL

De nombreuses applications Web ont des formulaires Web qui utilisent SQL pour communiquer avec des serveurs de bases de données relationnelles. Un code malveillant ou un pirate peut utiliser un formulaire Web non sécurisé pour envoyer des commandes SQL au serveur Web. La vérification HTML SQL Injection du Web App Firewall fournit des défenses spéciales contre l’injection de code SQL non autorisé qui pourrait briser la sécurité. Si le Web App Firewall détecte du code SQL non autorisé dans une demande utilisateur, il transforme la demande, rend le code SQL inactif ou bloque la demande. Le Web App Firewall examine la charge utile de la requête pour le code SQL injecté à trois emplacements : 1) corps POST, 2) en-têtes et 3) cookies. Afin d’examiner la partie de requête dans les requêtes de code SQL injecté, veuillez configurer le paramètre de profil appfw ‘InspectQueryContentTypes’ pour les types de contenu spécifiques.

Un ensemble par défaut de mots-clés et de caractères spéciaux fournit des mots-clés connus et des caractères spéciaux couramment utilisés pour lancer des attaques SQL. Vous pouvez ajouter de nouveaux modèles et modifier le jeu par défaut pour personnaliser l’inspection de vérification SQL. Le Web App Firewall offre diverses options d’action pour implémenter la protection SQL Injection. En plus des actions Block, Log, Statset Learn, le profil Web App Firewall offre également la possibilité de transformer des caractères spéciaux SQLpour rendre une attaque inoffensive.

En plus des actions, il existe plusieurs paramètres qui peuvent être configurés pour le traitement par injection SQL. Vous pouvez vérifier les caractères génériques SQL. Vous pouvez modifier le type d’injection SQL et sélectionner l’une des 4 options (SQLKeyword, SQLSplChar, SQLSplCharANDKeyword, SQLSplCharORKeyword) pour indiquer comment évaluer les mots-clés SQL et les caractères spéciaux SQL lors du traitement de la charge utile. Le paramètre SQL Comments Handling vous permet de spécifier le type de commentaires qui doivent être inspectés ou exemptés lors de la détection SQL Injection.

Vous pouvez déployer des relaxations pour éviter les faux positifs. Le moteur d’apprentissage du Web App Firewall peut fournir des recommandations pour la configuration des règles de relaxation.

Les options suivantes sont disponibles pour configurer une protection SQL Injection optimisée pour votre application :

Block—Si vous activez le bloc, l’action de bloc n’est déclenchée que si l’entrée correspond à la spécification de type d’injection SQL. Par exemple, si SQLSplCharANDKeyword est configuré comme type d’injection SQL, une requête n’est pas bloquée si elle ne contient pas de mots-clés, même si des caractères spéciaux SQL sont détectés dans l’entrée. Une telle requête est bloquée si le type d’injection SQL est défini sur SQLSplCharou SQLSplCharORKeyword.

Log—Si vous activez la fonction de journal, la vérification SQL Injection génère des messages de journal indiquant les actions qu’elle effectue. Si bloc est désactivé, un message de journal distinct est généré pour chaque champ d’entrée dans lequel la violation SQL a été détectée. Toutefois, un seul message est généré lorsque la demande est bloquée. De même, un message de journal par requête est généré pour l’opération de transformation, même lorsque des caractères spéciaux SQL sont transformés dans plusieurs champs. Vous pouvez surveiller les journaux pour déterminer si les réponses aux demandes légitimes sont bloquées. Une forte augmentation du nombre de messages de journal peut indiquer des tentatives de lancement d’une attaque.

Statistiques : si cette option est activée, la fonction de statistiques recueille des statistiques sur les violations et les journaux. Une augmentation inattendue du compteur de statistiques peut indiquer que votre application est attaquée. Si des demandes légitimes sont bloquées, vous devrez peut-être revoir la configuration pour voir si vous devez configurer de nouvelles règles de relaxation ou modifier celles existantes.

Learn—Si vous n’êtes pas sûr des règles de relaxation SQL qui conviennent parfaitement à votre application, vous pouvez utiliser la fonctionnalité learn pour générer des recommandations basées sur les données apprises. Le moteur d’apprentissage du Web App Firewall surveille le trafic et fournit des recommandations d’apprentissage SQL basées sur les valeurs observées. Pour obtenir un avantage optimal sans compromettre les performances, vous pouvez activer l’option d’apprentissage pendant une courte période afin d’obtenir un échantillon représentatif des règles, puis déployer les règles et désactiver l’apprentissage.

Transformer les caractères spéciaux SQL : le Web App Firewall considère trois caractères : guillemets simples (‘), barre oblique inverse () et point-virgule ( ;) comme caractères spéciaux pour le traitement des vérifications de sécurité SQL. La fonction de transformation SQL modifie le code d’injection SQL dans une requête HTML pour s’assurer que la requête est rendue inoffensive. La requête HTML modifiée est ensuite envoyée au serveur. Toutes les règles de transformation par défaut sont spécifiées dans le fichier /netscaler/default_custom_settings.xml.

L’opération de transformation rend le code SQL inactif en apportant les modifications suivantes à la demande :

  • Citation simple (‘) à double citation droite (“).
  • Inversible () à double barre oblique inverse ().
  • Le point-virgule (;) est supprimé complètement.

Ces trois caractères (chaînes spéciales) sont nécessaires pour émettre des commandes à un serveur SQL. À moins qu’une commande SQL ne soit précédée d’une chaîne spéciale, la plupart des serveurs SQL ignorent cette commande. Par conséquent, les modifications effectuées par le Web App Firewall lorsque la transformation est activée empêchent un attaquant d’injecter du SQL actif. Une fois ces modifications effectuées, la demande peut être transmise en toute sécurité à votre site Web protégé. Lorsque les formulaires Web de votre site Web protégé peuvent légitimement contenir des chaînes spéciales SQL, mais que les formulaires Web ne dépendent pas des chaînes spéciales pour fonctionner correctement, vous pouvez désactiver le blocage et activer la transformation pour empêcher le blocage des données de formulaire Web légitimes sans réduire la protection que l’application Web Firewall fournit à vos sites Web protégés.

L’opération de transformation fonctionne indépendamment du paramètre Type d’injection SQL. Si la transformation est activée et que le type d’injection SQL est spécifié en tant que mot-clé SQL, les caractères spéciaux SQL sont transformés même si la requête ne contient aucun mot clé.

Conseil

Vous activez normalement la transformation ou le blocage, mais pas les deux. Si l’action de blocage est activée, elle a priorité sur l’action de transformation. Si le blocage est activé, l’activation de la transformation est redondante.

Check for SQL Wildcard Characters—Les caractères Wild card peuvent être utilisés pour élargir les sélections d’une instruction SQL-SELECT (langage de requête structuré). Ces opérateurs de carte génériques peuvent être utilisés en conjonction avec les opérateurs LIKE et NOT LIKE pour comparer une valeur à des valeurs similaires. Le pourcentage (%) et le trait de soulignement (_) sont fréquemment utilisés comme caractères génériques. Le signe de pourcentage est analogue au caractère générique astérisque (*) utilisé avec MS-DOS et correspond à zéro, un ou plusieurs caractères dans un champ. Le trait de soulignement est similaire au point d’interrogation MS-DOS ( ?) caractère générique. Il correspond à un nombre ou un caractère unique dans une expression.

Par exemple, vous pouvez utiliser la requête suivante pour effectuer une recherche de chaîne pour rechercher tous les clients dont les noms contiennent le caractère D.

SELECT * from customer WHERE name like “%D%”:

L’exemple suivant combine les opérateurs pour rechercher les valeurs de salaire qui ont 0 en deuxième et troisième place.

SELECT * from customer WHERE salary like ‘_00%’:

Différents fournisseurs de SGBD ont étendu les caractères génériques en ajoutant des opérateurs supplémentaires. Le pare-feu Citrix Web App peut se protéger contre les attaques lancées en injectant ces caractères génériques. Les 5 caractères génériques par défaut sont le pourcentage (%), le trait de soulignement (_), l’accent circonflexe (^), crochet ouvrant ([), et le crochet de fermeture (]). Cette protection s’applique aux profils HTML et XML.

Les caractères génériques par défaut sont une liste de littéraux spécifiés dans *Signatures par défaut :

  • <wildchar type=”LITERAL”>%</wildchar>
  • <wildchar type=”LITERAL”>_</wildchar>
  • <wildchar type=”LITERAL”>^</wildchar>
  • <wildchar type=”LITERAL”>[</wildchar>
  • <wildchar type=”LITERAL”>]</wildchar>

Les caractères génériques dans une attaque peuvent être PCRE, comme [^A-F]. Le Web App Firewall prend également en charge les caractères génériques PCRE, mais les caractères génériques littéraux ci-dessus sont suffisants pour bloquer la plupart des attaques.

Remarque

La vérification des caractères génériques SQL est différente de la vérification des caractères spéciaux SQL. Cette option doit être utilisée avec prudence pour éviter les faux positifs.

Check Request Contenant le type d’injection SQL : le Web App Firewall fournit 4 options pour implémenter le niveau de rigueur souhaité pour l’inspection SQL Injection, en fonction des besoins individuels de l’application. La demande est vérifiée par rapport à la spécification de type d’injection pour détecter les violations SQL. Les 4 options de type d’injection SQL sont les suivantes :

  • Caractère spécial SQL et mot-clé : un mot-clé SQL et un caractère spécial SQL doivent être présents dans l’entrée pour déclencher une violation SQL. Ce paramètre le moins restrictif est également le paramètre par défaut.
  • Caractère spécial SQL : au moins un des caractères spéciaux doit être présent dans l’entrée pour déclencher la violation SQL.
  • Mot-clé SQL—Au moins un des mots-clés SQL spécifiés doit être présent dans l’entrée pour déclencher une violation SQL. Ne sélectionnez pas cette option sans considération. Pour éviter les faux positifs, assurez-vous qu’aucun des mots-clés n’est attendu dans les entrées.
  • Caractère spécial SQL ou mot-clé : le mot clé ou la chaîne de caractères spéciaux doit être présent dans l’entrée pour déclencher la violation de vérification de sécurité.

Conseil

Si vous configurez le Web App Firewall pour rechercher les entrées contenant un caractère spécial SQL, le pare-feu Web App ignore les champs de formulaire Web qui ne contiennent pas de caractères spéciaux. Étant donné que la plupart des serveurs SQL ne traitent pas les commandes SQL qui ne sont pas précédées d’un caractère spécial, l’activation de cette option peut réduire considérablement la charge sur le Web App Firewall et accélérer le traitement sans mettre vos sites Web protégés en danger.

Gestion des commentaires SQL : par défaut, le Web App Firewall vérifie tous les commentaires SQL pour les commandes SQL injectées. De nombreux serveurs SQL ignorent quoi que ce soit dans un commentaire, même s’ils sont précédés d’un caractère spécial SQL. Pour un traitement plus rapide, si votre serveur SQL ignore les commentaires, vous pouvez configurer le Web App Firewall pour ignorer les commentaires lors de l’examen des demandes de SQL injecté. Les options de gestion des commentaires SQL sont les suivantes :

  • ANSI—Ignorer les commentaires SQL au format ANSI, qui sont normalement utilisés par les bases de données SQL UNIX. Par exemple :
    • — (Deux traits d’union) - Ceci est un commentaire qui commence par deux traits d’union et se termine par la fin de la ligne.

    • {} - Accolades (Les accolades enferment le commentaire. La { précède le commentaire, et la } le suit. Les accolades peuvent délimiter les commentaires à une ou plusieurs lignes, mais les commentaires ne peuvent pas être imbriqués)

    • /* */ : C style comments (Does not allow nested comments). Please note /*! <comment that begin with slash followed by asterisk and exclamation mark is not a comment > */

    • MySQL Server prend en charge certaines variantes de commentaires de style C. Ceux-ci vous permettent d’écrire du code qui inclut des extensions MySQL, mais qui est toujours portable, en utilisant les commentaires de la forme suivante :/*! MySQL-specific code */

    • . # : Mysql comments : ceci est un commentaire qui commence par le caractère # et se termine par la fin de la ligne

  • Imbriqué—Ignorer les commentaires SQL imbriqués, qui sont normalement utilisés par Microsoft SQL Server. Par exemple ; — (Deux hypens), et /* */ (Autorise les commentaires imbriqués)
  • ANSI/imbriqué—Ignorer les commentaires qui respectent les normes ANSI et SQL de commentaires imbriqués. Les commentaires qui correspondent uniquement à la norme ANSI, ou uniquement à la norme imbriquée, sont toujours vérifiés pour le SQL injecté.
  • Check all Comments—Vérifiez l’intégralité de la requête pour SQL injecté sans sauter quoi que ce soit. C’est le réglage par défaut.

Conseil

Dans la plupart des cas, vous ne devez pas choisir l’option imbriquée ou ANSI/imbriquée sauf si votre base de données principale s’exécute sur Microsoft SQL Server. La plupart des autres types de logiciels SQL Server ne reconnaissent pas les commentaires imbriqués. Si des commentaires imbriqués apparaissent dans une requête dirigée vers un autre type de serveur SQL, ils peuvent indiquer une tentative de violation de la sécurité sur ce serveur.

Vérifier les en-têtes de demande : activez cette option si, en plus d’examiner l’entrée dans les champs de formulaire, vous souhaitez examiner les en-têtes de demande pour les attaques HTML SQL Injection. Si vous utilisez l’interface graphique, vous pouvez activer ce paramètre dans le volet Paramètres avancés -> Paramètres de profil du profil Pare-feu de l’application Web.

Remarque

Si vous activez l’indicateur d’en-tête de demande de vérification, vous devrez peut-être configurer la règle de relaxation pour l’en-tête User-Agent. La présence du mot-clé SQL like et du caractère spécial SQL point-virgule ( ; ) peut déclencher des requêtes fausses positives et bloquer qui contiennent cet en-tête. Avertissement

Si vous activez à la fois la vérification des en-têtes de requête et la transformation, tous les caractères spéciaux SQL trouvés dans les en-têtes sont également transformés. Les en-têtes Accept, Accept-Charset, Accept-Encoding, Accept-Language, Expect et User-Agent contiennent normalement des points-virgules ( ;). L’activation simultanée de la vérification des en-têtes de demande et de la transformation peut entraîner des erreurs.

InspectQueryContentTypes : configurez cette option si vous souhaitez examiner la partie requête pour les attaques SQL Injection pour les types de contenu spécifiques. Si vous utilisez l’interface graphique, vous pouvez configurer ce paramètre dans le volet Paramètres avancés -> Paramètres du profil du profil Pare-feu de l’application.

SQL Relaxations à grain fin

Le Web App Firewall vous permet d’exempter un champ de formulaire, un en-tête ou un cookie spécifique de la vérification d’inspection SQL Injection. Vous pouvez contourner complètement l’inspection d’un ou de plusieurs de ces champs en configurant des règles de relaxation pour la vérification SQL Injection.

Le Web App Firewall vous permet de mettre en œuvre une sécurité plus stricte en affinant les règles de relaxation. Une application peut nécessiter la flexibilité nécessaire pour autoriser des modèles spécifiques, mais la configuration d’une règle de relaxation pour contourner l’inspection de sécurité peut rendre l’application vulnérable aux attaques, car le champ cible est exempté de l’inspection pour tout modèle d’attaque SQL. La relaxation à grain fin SQL fournit la possibilité d’autoriser des motifs spécifiques et de bloquer le reste. Par exemple, le Web App Firewall dispose actuellement d’un ensemble par défaut de plus de 100 mots-clés SQL. Étant donné que les pirates peuvent utiliser ces mots-clés dans des attaques SQL Injection, le Web App Firewall les signale comme des menaces potentielles. Vous pouvez détendre un ou plusieurs mots clés considérés comme sûrs pour l’emplacement spécifique. Le reste des mots-clés SQL potentiellement dangereux sont toujours vérifiés pour l’emplacement cible et continuent de déclencher les violations de vérification de sécurité. Vous avez maintenant un contrôle beaucoup plus serré.

Les commandes utilisées dans les relaxations ont des paramètres facultatifs pour Type de valeur et Expression de valeur. Vous pouvez spécifier si l’expression de valeur est une expression régulière ou une chaîne littérale. Le type de valeur peut être laissé vide ou vous avez une option pour sélectionner Mot-clé ou SpecialString ou WildChar.

Avertissement

Les expressions régulières sont puissantes. Surtout si vous n’êtes pas familier avec les expressions régulières au format PCRE, vérifiez les expressions régulières que vous écrivez. Assurez-vous qu’ils définissent exactement l’URL que vous souhaitez ajouter en tant qu’exception, et rien d’autre. L’utilisation négligente des caractères génériques, et en particulier de la combinaison de métacaractres/caractères génériques (.*), peut avoir des résultats que vous ne voulez pas, comme bloquer l’accès au contenu Web que vous n’aviez pas l’intention de bloquer ou autoriser une attaque que la vérification HTML SQL Injection aurait autrement bloquée.

Points à considérer :

  • L’expression de valeur est un argument facultatif. Un nom de champ peut ne pas avoir d’expression de valeur.
  • Un nom de champ peut être lié à plusieurs expressions de valeur.
  • Un type de valeur doit être attribué aux expressions de valeur. Le type de valeur SQL peut être : 1) Mot-clé, 2) SpecialString ou 3) WildChar.
  • Vous pouvez avoir plusieurs règles de relaxation par combinaison nom/URL de champ.

Utilisation de la ligne de commande pour configurer la vérification d’injection SQL

Pour configurer des actions SQL Injection et d’autres paramètres à l’aide de la ligne de commande :

Dans l’interface de ligne de commande, vous pouvez utiliser la commande set appfw profile ou la commande add appfw profile pour configurer les protections SQL Injection. Vous pouvez activer le bloc, apprendre, enregistrer, stats action et spécifier si vous souhaitez transformer les caractères spéciaux utilisés dans les chaînes d’attaque SQL Injection pour désactiver l’attaque. Sélectionnez le type de modèle d’attaque SQL (mots-clés, caractères génériques, chaînes spéciales) que vous souhaitez détecter dans les charges utiles et indiquez si vous souhaitez que le Web App Firewall inspecte également les en-têtes de requête pour les violations SQL Injection. Utilisez la commande unset appfw profile pour rétablir les paramètres configurés à leurs valeurs par défaut. Chacune des commandes suivantes ne définit qu’un seul paramètre, mais vous pouvez inclure plusieurs paramètres dans une seule commande :

  • définir le profil appfw “Description des paramètres fournie en bas de la page.”
  • <name> -SQLInjectionAction (([block] [learn] [log] [stats]) | [none])
  • définir le profil appfw “Description des paramètres fournie en bas de la page.”
  • <name> -SQLInjectionTransformSpecialChars (**ON** | OFF)
  • définir le profil appfw “Description des paramètres fournie en bas de la page.”
  • <name> -**SQLInjectionCheckSQLWildChars** (**ON** |**OFF**)
  • définir le profil appfw “Description des paramètres fournie en bas de la page.”
  • **<name> -**SQLInjectionType** ([**SQLKeyword**] | [**SQLSplChar**] | [**SQLSplCharANDKeyword**] | [**SQLSplCharORKeyword**])
  • définir le profil appfw “Description des paramètres fournie en bas de la page.”
  • <name> -**SQLInjectionParseComments** ([**checkall**] | [**ansi|nested**] | [**ansinested**])
  • **définir le profil appfw “Description des paramètres fournie en bas de la page.”
  • <name> -CheckRequestHeaders (ON | OFF) Description des paramètres fournie en bas de la page.
  • <name> - CheckRequestQueryNonHtml (ON | OFF) Description des paramètres fournie en bas de la page.

Pour configurer une règle de relaxation SQL Injection à l’aide de la ligne de commande

Utilisez la commande bind ou unbind pour ajouter ou supprimer une liaison, comme suit :

  • bind appfw profile <name> -SQLInjection <String> [isRegex(REGEX| NOTREGE)] <formActionURL> [-location <location>] [-valueType (Keywor|SpecialString|Wildchar) [<valueExpression>][-isValueRegex (REGEX | NOTREGEX) ]]

  • unbind appfw profile <name> -SQLInjection <String> <formActionURL> [-location <location>] [-valueTyp (Keyword|SpecialString|Wildchar) [<valueExpression>]]

Remarque

Vous pouvez trouver la liste des mots-clés SQL à partir du contenu du fichier de signature par défaut en affichant l’objet de signature de vue, qui contient la liste des mots-clés sql et des caractères spéciaux sql.

Utilisation de l’interface graphique pour configurer la vérification de sécurité SQL Injection

Dans l’interface graphique, vous pouvez configurer le contrôle de sécurité SQL Injection dans le volet pour le profil associé à votre application.

Pour configurer ou modifier la vérification SQL Injection à l’aide de l’interface graphique

  1. Accédez à Application Pare-feu > Profils, mettez en surbrillance le profil cible et cliquez sur Modifier.
  2. Dans le volet Paramètres avancés, cliquez sur Vérifications de sécurité.

La table de vérification de sécurité affiche les paramètres d’action actuellement configurés pour tous les contrôles de sécurité. Vous avez 2 options de configuration :

a. Si vous souhaitez simplement activer ou désactiver les actions Bloquer, Journaliser, Statistiques et Apprendre pour HTML SQL Injection, vous pouvez activer ou désactiver les cases à cocher dans le tableau, cliquez sur OK, puis cliquez sur Enregistrer et fermer pour fermer le volet Contrôle de sécurité.

b. Si vous souhaitez configurer des options supplémentaires pour cette vérification de sécurité, double-cliquez sur HTML SQL Injection ou sélectionnez la ligne et cliquez sur Paramètres d’action, pour afficher les options suivantes :

Transformer le caractère spécial SQL—Transformez tous les caractères spéciaux SQL dans la requête.

Rechercher des caractères génériques SQL : considérez les caractères génériques SQL dans la charge utile comme des motifs d’attaque.

Check Request Contenant—Type d’injection SQL (SQLKeyword, SQLSplChar, SQLSplCharandKeyword ou SQLSplCharorKeyword) à vérifier.

Gestion des commentaires SQL : type de commentaires (Vérifier tous les commentaires, ANSI, imbriqué ou ANSI/imbriqué) à vérifier.

Après avoir modifié l’un des paramètres ci-dessus, cliquez sur OK pour enregistrer les modifications et revenir au tableau Vérifications de sécurité. Vous pouvez procéder à la configuration d’autres vérifications de sécurité si nécessaire. Cliquez sur OK pour enregistrer toutes les modifications apportées dans la section Vérifications de sécurité, puis cliquez sur Enregistrer et fermer pour fermer le volet Contrôle de sécurité.

Pour configurer une règle de relaxation SQL Injection à l’aide de l’interface graphique

  • Accédez à Application Firewall > Profils, mettez en surbrillance le profil cible et cliquez sur Modifier.
  • Dans le volet Paramètres avancés, cliquez sur Règles de relaxation.
  • Dans le tableau Règles de relaxation, double-cliquez sur l’entrée HTML SQL Injection ou sélectionnez-la et cliquez sur Modifier.
  • Dans la boîte de dialogue Règles de relaxation HTML Injection SQL, effectuez les opérations Ajouter, Modifier, Supprimer, Activer ou Désactiver pour les règles de relaxation.

Remarque

Lorsque vous ajoutez une nouvelle règle, le champ Expression de la valeur n’est pas affiché, sauf si vous sélectionnez l’option Mot-clé ou SpecialString ou WildChar dans le champ Type de valeur.

Pour gérer les règles de relaxation SQL Injection à l’aide du visualiseur

Pour obtenir une vue consolidée de toutes les règles de relaxation, vous pouvez mettre en surbrillance la ligne HTML SQL Injection et cliquer sur Visualizer. Le visualiseur pour les relaxations déployées vous offre la possibilité d’ajouter une nouvelle règle ou de modifier une règle existante. Vous pouvez également activer ou désactiver un groupe de règles en sélectionnant un nœud et en cliquant sur les boutons correspondants dans le visualiseur de relaxation.

Pour afficher ou personnaliser les modèles d’injection SQL à l’aide de l’interface graphique

Vous pouvez utiliser l’interface graphique pour afficher ou personnaliser les modèles SQL.

Les modèles SQL par défaut sont spécifiés dans Application Firewall > Signatures > Signaturespar défaut. Si vous ne liez aucun objet de signature à votre profil, les modèles SQL par défaut spécifiés dans l’objet Signatures par défaut seront utilisés par le profil pour le traitement des vérifications de sécurité SQL Injection. Les règles et les motifs, spécifiés dans l’objet signatures par défaut, sont en lecture seule. Vous ne pouvez pas les modifier ou les modifier. Si vous souhaitez modifier ou modifier ces modèles, faites une copie de l’objet Signatures par défaut pour créer un objet signature défini par l’utilisateur. Modifiez les modèles SQL dans le nouvel objet de signature défini par l’utilisateur et utilisez cet objet de signature dans votre profil qui traite le trafic pour lequel vous souhaitez utiliser ces modèles SQL personnalisés.

Pour de plus amples informations, consultez Signatures

  1. Pour afficher les modèles SQL par défaut :

    a. Accédez à Application Pare-feu > Signatures, sélectionnez *Signatures par défaut, puis cliquez sur Modifier.

    Cliquez ensuite sur Gérer les modèles SQL/XSS.

    La table Gérer les chemins SQL/XSS présente les quatre lignes suivantes relatives à SQL Injection :

    • Injection (not_alphanum, SQL)/ Keyword
    • Injection (not_alphanum, SQL)/ wildchar
    • Injection (not_alphanum, SQL)/ transformrules/transform
    • Injection (not_alphanum, SQL)/ wildchar

    b. Sélectionnez une ligne et cliquez sur Gérer les éléments pour afficher les modèles SQL correspondants (mots-clés, chaînes spéciales, règles de transformation ou caractères génériques) utilisés par la vérification d’injection SQL du Web App Firewall.

  2. Pour personnaliser les modèles SQL : vous pouvez modifier l’objet signature défini par l’utilisateur pour personnaliser les mots-clés SQL, les chaînes spéciales et les caractères génériques. Vous pouvez ajouter de nouvelles entrées ou supprimer celles qui existent déjà. Vous pouvez modifier les règles de transformation des chaînes spéciales SQL.

    a. Accédez à Application Pare-feu > Signatures, mettez en surbrillance la signature définie par l’utilisateur cible et cliquez sur Modifier. Cliquez sur Gérer les modèles SQL/XSS pour afficher la table Gérer les chemins SQL/XSS.

    b. Sélectionnez la ligne d’injection SQL cible.

    i. Cliquez sur Gérer les élémentspour ajouter, modifierou supprimerl’élément SQL correspondant.

    ii. Cliquez sur Supprimer pour supprimer la ligne sélectionnée.

    Avertissement

    Vous devez être très prudent avant de supprimer ou de modifier un élément SQL par défaut, ou de supprimer le chemin SQL pour supprimer toute la ligne. Les règles de signature ainsi que la vérification de sécurité SQL Inject s’appuient sur ces éléments pour détecter les attaques SQL Injection afin de protéger vos applications. La personnalisation des modèles SQL peut rendre votre application vulnérable aux attaques SQL si le modèle requis est supprimé lors de la modification.

Utilisation de la fonctionnalité d’apprentissage avec la vérification d’injection SQL

Lorsque l’action d’apprentissage est activée, le moteur d’apprentissage du Web App Firewall surveille le trafic et apprend les violations déclenchées. Vous pouvez inspecter périodiquement ces règles apprises. Après avoir dûment pris en considération, vous pouvez déployer la règle apprise en tant que règle de relaxation SQL Injection.

Amélioration de l’apprentissage par injection SQL : une amélioration de l’apprentissage du Web App Firewall a été introduite dans la version 11.0 du logiciel Citrix ADC. Pour déployer une relaxation SQL Injection fine, le Web App Firewall offre un apprentissage SQL Injection à grain fin. Le moteur d’apprentissage formule des recommandations concernant le type de valeur observé (mot-clé, SpecialString, Wildchar) et l’expression de valeur correspondante observée dans les champs d’entrée. En plus de vérifier les demandes bloquées pour déterminer si la règle actuelle est trop restrictive et doit être assouplie, vous pouvez consulter les règles générées par le moteur de formation pour déterminer quels types de valeur et expressions de valeur déclenchent des violations et doivent être traitées dans les règles de relaxation.

Important

Le moteur d’apprentissage de Web App Firewall ne peut distinguer que les 128 premiers octets du nom. Si un formulaire comporte plusieurs champs dont les noms correspondent aux 128 premiers octets, le moteur d’apprentissage peut ne pas être en mesure de les distinguer. De même, la règle de relaxation déployée peut par inadvertance relâcher tous ces champs de l’inspection SQL Injection.

Remarque Pour contourner l’enregistrement SQL dans l’en-tête User-Agent, utilisez la règle de relaxation suivante :

bind appfw profile your_profile_name -SQLInjection User-Agent " .*" -location HEADER

Pour afficher ou utiliser les données apprises à l’aide de l’interface de ligne de commande

À l’invite de commandes, tapez l’une des commandes suivantes :

  • show appfw learningdata <profilename> SQLInjection
  • rm appfw learningdata <profilename> -SQLInjection <string> <formActionURL> [<location>] [<valueType> <valueExpression>]
  • export appfw learningdata <profilename> SQLInjection

Pour afficher ou utiliser les données apprises à l’aide de l’interface graphique

  1. Accédez à Application Pare-feu > Profils, mettez en surbrillance le profil cible et cliquez sur Modifier.

  2. Dans le volet Paramètres avancés, cliquez sur Règles apprises. Vous pouvez sélectionner l’entrée HTML SQL Injection dans le tableau Règles apprises et double-cliquer dessus pour accéder aux règles apprises. Vous pouvez déployer les règles apprises ou modifier une règle avant de la déployer en tant que règle de relaxation. Pour ignorer une règle, vous pouvez la sélectionner et cliquer sur le bouton Ignorer. Vous ne pouvez modifier qu’une seule règle à la fois, mais vous pouvez sélectionner plusieurs règles à déployer ou à ignorer.

Vous avez également la possibilité d’afficher une vue résumée des relaxations apprises en sélectionnant l’entrée HTML SQL Injection dans le tableau Règles apprises et en cliquant sur Visualizer pour obtenir une vue consolidée de toutes les violations apprises. Le visualiseur facilite la gestion des règles apprises. Il présente une vue complète des données sur un seul écran et facilite l’action sur un groupe de règles en un seul clic. Le plus grand avantage du visualiseur est qu’il recommande des expressions régulières pour consolider plusieurs règles. Vous pouvez sélectionner un sous-ensemble de ces règles, en fonction du délimiteur et de l’URL Action. Vous pouvez afficher 25, 50 ou 75 règles dans le visualiseur, en sélectionnant le nombre dans une liste déroulante. Le visualiseur des règles apprises offre la possibilité de modifier les règles et de les déployer en tant que relaxations. Ou vous pouvez ignorer les règles pour les ignorer.

Utilisation de la fonction de journal avec la vérification d’injection SQL

Lorsque l’action du journal est activée, les violations de vérification de sécurité HTML SQL Injection sont enregistrées dans le journal d’audit en tant que violations APPFW_SQL. Le Web App Firewall prend en charge les formats de journaux natifs et CEF. Vous pouvez également envoyer les journaux à un serveur syslog distant.

Pour accéder aux messages du journal à l’aide de la ligne de commande

Basculez vers le shell et recherchez les fichiers ns.logs dans le dossier /var/log/ pour accéder aux messages de journal relatifs aux violations SQL Injection :

> Shell

# tail -f /var/log/ns.log | grep APPFW_SQL

Exemple d’un message de journal HTML SQL Injection lorsque la requête est transformée

Jun 26 21:08:41 <local0.info> 10.217.31.98 CEF:0|Citrix|Citrix ADC|NS11.0|APPFW|APPFW_SQL|6|src=10.217.253.62 geolocation=Unknown spt=54001 method=GET request=http://aaron.stratum8.net/FFC/login.php?login_name=%27+or&passwd=and+%3B&drinking_pref=on&text_area=select+*+from+%5C+%3B&loginButton=ClickToLogin&as_sfid=AAAAAAXjnGN5gLH-hvhTOpIySEIqES7BjFRs5Mq0fwPp-3ZHDi5yWlRWByj0cVbMyy-Ens2vaaiULKOcUri4OD4kbXWwSY5s7I3QkDsrvIgCYMC9BMvBwY2wbNcSqCwk52lfE0k%3D&as_fid=feeec8758b41740eedeeb6b35b85dfd3d5def30c msg= Special characters seen in fields cn1=74 cn2=762 cs1=pr_ffc cs2=PPE1 cs3=9ztIlf9p1H7p6Xtzn6NMygTv/QM0002 cs4=ALERT cs5=2015 act=transformed

Exemple d’un message de journal HTML SQL Injection lorsque la demande de publication est bloquée

Jun 26 21:30:34 <local0.info> 10.217.31.98 CEF:0|Citrix|Citrix ADC|NS11.0|APPFW|APPFW_SQL|6|src=10.217.253.62 geolocation=Unknown spt=9459 method=POST request=http://aaron.stratum8.net/FFC/login_post.php msg=SQL Keyword check failed for field text_area="(')" cn1=78 cn2=834 cs1=pr_ffc cs2=PPE1 cs3=eVJMMPtZ2XgylGrHjkx3rZLfBCI0002 cs4=ALERT cs5=2015 act=blocked

Remarque

Dans le cadre des changements de streaming dans la version 10.5.e (builds d’amélioration) et la version 11.0 ultérieure, nous traitons maintenant les données d’entrée en blocs. La correspondance de motifs RegEx est désormais limitée à 4K pour la correspondance de chaînes de caractères contiguës. Avec cette modification, les messages du journal des violations SQL peuvent inclure des informations différentes par rapport aux versions précédentes. Le mot-clé et le caractère spécial de l’entrée peuvent être séparés par un grand nombre d’octets. Nous gardons maintenant une trace des mots-clés SQL et des chaînes spéciales lors du traitement des données, au lieu de mettre en mémoire tampon toute la valeur d’entrée. Outre le nom du champ, le message de journal inclut désormais le mot-clé SQL ou le caractère spécial SQL, ou à la fois le mot-clé SQL et le caractère spécial SQL, comme déterminé par le paramètre configuré. Le reste de l’entrée n’est plus inclus dans le message de journal, comme illustré dans l’exemple suivant :

Exemple :

Dans 10.5, lorsque le Web App Firewall détecte la violation SQL, la chaîne d’entrée entière peut être incluse dans le message de journal, comme indiqué ci-dessous :

SQL Keyword check failed for field text=\"select a name from testbed1;(;)\".*<blocked>

Dans les versions d’amélioration de 10.5.e qui prennent en charge le streaming côté demande ainsi que la version 11.0 ultérieure, nous enregistrons uniquement le nom du champ, le mot clé et le caractère spécial (le cas échéant) dans le message de journal, comme indiqué ci-dessous :

SQL Keyword check failed for field **text="select(;)" <blocked>

Cette modification s’applique aux demandes qui contiennent des types de contenu application/x-www-form-urlencoded, multipart/form-data ou text/x-gwt-rpc. Les messages de journal générés lors du traitement des charges utiles JSON ou XML ne sont pas affectés par cette modification.

Pour accéder aux messages du journal à l’aide de l’interface graphique

L’interface graphique Citrix inclut un outil utile (Syslog Viewer) pour analyser les messages du journal. Vous disposez de plusieurs options pour accéder à la visionneuse Syslog :

  • Accédez au pare-feu des applications > Profils, sélectionnez le profil cible et cliquez sur Vérifications de sécurité. Mettez en surbrillance la ligne HTML SQL Injection et cliquez sur Journaux. Lorsque vous accédez aux journaux directement à partir de la vérification HTML SQL Injection du profil, l’interface graphique filtre les messages de journal et affiche uniquement les journaux relatifs à ces violations de vérification de sécurité.
  • Vous pouvez également accéder à la visionneuse Syslog en accédant à Citrix ADC > Système > Audit. Dans la section Messages d’audit, cliquez sur le lien Messages Syslog pour afficher Syslog Viewer, qui affiche tous les messages du journal, y compris les autres journaux des violations de contrôle de sécurité. Ceci est utile pour le débogage lorsque plusieurs violations de vérification de sécurité peuvent être déclenchées pendant le traitement de la demande.
  • Accédez à Application Firewall > Stratégies > Audit. Dans la section Messages d’audit, cliquez sur le lien Messages Syslog pour afficher Syslog Viewer, qui affiche tous les messages du journal, y compris les autres journaux des violations de contrôle de sécurité.

La visionneuse Syslog basée sur HTML fournit diverses options de filtre pour sélectionner uniquement les messages de journal qui vous intéressent. Pour sélectionner les messages de journal pour la vérification HTML SQL Injection, filtrez en sélectionnant APPFW dans les options déroulantes du module. La liste Type d’événement offre un ensemble complet d’options pour affiner votre sélection. Par exemple, si vous activez la case à cocher APPFW_SQL et cliquez sur le bouton Appliquer, seuls les messages de journal relatifs aux violations de vérification de sécurité SQL Injection apparaissent dans la visionneuse Syslog.

Si vous placez le curseur dans la ligne d’un message de journal spécifique, plusieurs options, telles que Module, Type d’événement, ID d’événement, IP du client, etc. apparaissent sous le message de journal. Vous pouvez sélectionner l’une de ces options pour mettre en surbrillance les informations correspondantes dans le message de journal.

Cliquez sur pour Déployer la fonctionnalité est disponible uniquement dans l’interface graphique. Vous pouvez utiliser la visionneuse Syslog non seulement pour afficher les journaux, mais aussi pour déployer des règles de relaxation HTML SQL Injection basées sur les messages de journal pour les violations de vérification de sécurité du Web App Firewall. Les messages de journal doivent être au format de journal CEF pour cette opération. Cliquez pour déployer la fonctionnalité est disponible uniquement pour les messages de journal générés par l’action Bloquer (ou non bloquer). Vous ne pouvez pas déployer une règle de relaxation pour un message de journal concernant l’opération de transformation.

Pour déployer une règle de relaxation à partir de la visionneuse Syslog, sélectionnez le message de journal. Une case à cocher s’affiche dans le coin supérieur droit de la case Visionneuse Syslog de la ligne sélectionnée. Activez la case à cocher, puis sélectionnez une option dans la liste Action pour déployer la règle de relaxation. Modifier et déployer, déployeret déployer toutsont disponibles en tant qu’options Action.

Les règles d’injection SQL déployées à l’aide de l’option Cliquez pour déployer n’incluent pas les recommandations de relaxation du grain fin.

Pour utiliser la fonctionnalité Cliquez pour déployer dans l’interface graphique :

  1. Dans la visionneuse Syslog, sélectionnez Application Firewall dans les options du module.
  2. Sélectionnez APP_SQL comme type d’événement pour filtrer les messages de journal correspondants.
  3. Activez la case à cocher pour identifier la règle à déployer.
  4. Utilisez la liste déroulante d’options Action pour déployer la règle de relaxation.
  5. Vérifiez que la règle apparaît dans la section Règle de relaxation correspondante.

Statistiques pour les violations SQL Injection

Lorsque l’action des statistiques est activée, le compteur pour la vérification Injection SQL est incrémenté lorsque le Web App Firewall prend une action pour cette vérification de sécurité. Les statistiques sont collectées pour le taux et le nombre total pour le trafic, les violations et les journaux. La taille d’un incrément du compteur de journaux peut varier en fonction des paramètres configurés. Par exemple, si l’action de blocage est activée, la demande d’une page contenant 3 violations SQL Injection incrémente le compteur de statistiques d’un, car la page est bloquée dès que la première violation est détectée. Toutefois, si le bloc est désactivé, le traitement de la même demande incrémente le compteur de statistiques pour les violations et les journaux de trois, car chaque violation génère un message de journal distinct.

Pour afficher les statistiques de vérification SQL Injection à l’aide de la ligne de commande :

À l’invite de commandes, tapez :

statistiques sh appfw

Pour afficher les statistiques d’un profil spécifique, utilisez la commande suivante :

> stat appfw profile <profile name>

Pour afficher les statistiques HTML SQL Injection à l’aide de l’interface graphique

  1. Accédez à Système > Sécurité > Pare-feu d’application.
  2. Dans le volet droit, accédez au lien Statistiques.
  3. Utilisez la barre de défilement pour afficher les statistiques sur les violations HTML SQL Injection et les journaux. Le tableau des statistiques fournit des données en temps réel et est mis à jour toutes les 7 secondes.

Résumé

Notez les points suivants à propos de la vérification SQL Injection :

  • Prise en charge intégrée de la protection par injection SQL : le pare-feu Citrix Web App protège contre l’injection SQL en surveillant une combinaison de mots-clés SQL et de caractères spéciaux dans les paramètres de formulaire. Tous les mots-clés SQL, caractères spéciaux, caractères génériques et règles de transformation par défaut sont spécifiés dans le fichier /netscaler/default_custom_settings.xml.
  • Personnalisation : vous pouvez modifier les mots clés par défaut, les caractères spéciaux, les caractères génériques et les règles de transformation pour personnaliser l’inspection de vérification de sécurité SQL en fonction des besoins spécifiques de votre application. Effectuez une copie de l’objet signature par défaut, modifiez les entrées existantes ou ajoutez de nouvelles entrées. Liez cet objet signature à votre profil pour utiliser la configuration personnalisée.
  • Modèle de sécurité hybride : les signatures et les protections de sécurité profondes utilisent les modèles SQL/XSS spécifiés dans l’objet de signature lié au profil. Si aucun objet de signature n’est lié au profil, les motifs SQL/XSS présents dans l’objet de signature par défaut sont utilisés.
  • Transform—Notez ce qui suit à propos de l’opération de transformation :
    • L’opération de transformation fonctionne indépendamment des autres paramètres d’action SQL Injection. Si la transformation est activée et que le bloc, le journal, les statistiques et l’apprentissage sont tous désactivés, les caractères spéciaux SQL seront transformés.
    • Lorsque la transformation SQL est activée, les requêtes utilisateur sont envoyées aux serveurs backend après la transformation des caractères spéciaux SQL en mode non-bloc. Si l’action de blocage est activée, elle a priorité sur l’action de transformation. Si le type d’injection est spécifié comme caractère spécial SQL et que le bloc est activé, la requête est bloquée malgré l’action de transformation.
  • Relaxation fine et apprentissage : affinez la règle de relaxation pour détendre un sous-ensemble d’éléments SQL de l’inspection par vérification de sécurité, mais détectez le reste. Le moteur d’apprentissage recommande un type de valeur spécifique et des expressions de valeur basées sur les données observées.
  • Cliquez pour déployer : sélectionnez un ou plusieurs messages de journal des violations SQL dans la visionneuse syslog et déployez-les en tant que règles de relaxation.