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. Pour examiner une partie de requête dans les demandes de code SQL injecté, configurez un paramètre de profil de pare-feu d’application « 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—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 l’action de blocage est désactivée, un message de journal distinct est généré pour chaque champ de saisie 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 apporté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 Le pare-feu fournit à vos sites Web protégés.

L’opération de transformation fonctionne indépendamment du paramètre SQL Injection Type . Si la transformation est activée et que le type d’injection SQL est spécifié comme 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.

Vérifier les caractères génériques SQL —Lescaractères génériques peuvent être utilisés pour élargir les sélections d’une instruction SQL (SQL-SELECT). Ces opérateurs de caractères génériques peuvent être utilisés avec des opérateurs LIKEet 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 Citrix Web App Firewall 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 (_), le caret (^), le crochet d’ouverture ([) 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 d’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) - Il s’agit d’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 */

    • . # : Commentaires Mysql : Il s’agit d’un commentaire qui commence par # caractère.

  • Imbriqué—Ignorer les commentaires SQL imbriqués, qui sont normalement utilisés par Microsoft SQL Server. Par exemple ; — (Deux traits d’union) 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

Habituellement, vous ne devez pas choisir l’option imbriquée ou l’option 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 Check Request, vous devrez peut-être configurer une 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 et la transformation des en-têtes de requête, tous les caractères spéciaux SQL présents 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 complètement contourner l’inspection d’un ou de plusieurs de ces champs en configurant les règles de relaxation pour la vérification SQL Injection.

Le Web App Firewall vous permet d’implémenter 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 un 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 imprudente des caractères génériques, et en particulier du métacaractère d’astérisque de points (.*) ou de la combinaison de caractères génériques, peut avoir des résultats que vous ne souhaitez pas, tels que le blocage de l’accès au contenu Web que vous n’aviez pas l’intention de bloquer ou autoriser une attaque que la vérification d’injection HTML SQL 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 affecté 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 les actions de blocage, d’apprentissage, de journalisation et de statistiques 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 :

Pour configurer une règle de relaxation SQL Injection à l’aide de l’interface 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 signatures 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 Firewall > Profils, mettez en surbrillance le profil cible, puis 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 activer ou désactiver les actions Block, Log, Stats et Learn pour HTML SQL Injection, vous pouvez sélectionner ou désactiver des cases à cocher dans le tableau, cliquer sur OK, puis cliquer sur Enregistrer et fermer pour fermer le volet de contrôle de sécurité .

b. Si vous souhaitez configurer d’autres options pour cette vérification de sécurité, double-cliquez sur Injection HTML SQL, 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 les caractères génériques SQL—Considérez les caractères génériques SQL dans la charge utile comme des modèles d’attaque.

Vérifier la requête contenant—Type d’injection SQL (SQLKeyWord, SQLSplChar, SQLSplChar, SQLSplChArdKeyword 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 que vous avez apportées dans la section Contrôles de sécurité, puis cliquez sur Enregistrer et fermer pour fermer le volet de vérification de la sécurité.

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

  • Accédez à Application Pare-feu > Profils, mettez en surbrillance le profil cible, puis 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 par injection SQL à 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.

Afficher ou personnaliser les modèles d’injection à l’aide de l’interface graphique

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

Les modèles SQL par défaut sont spécifiés dans le fichier de signatures par défaut. Si vous ne liez aucun objet signature à votre profil, les modèles d’injection par défaut spécifiés dans l’objet signatures par défaut seront utilisés par le profil pour le traitement du contrôle de sécurité par injection de commandes. 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, effectuez une copie de l’objet SSignatures par défaut pour créer un objet Signature défini par l’utilisateur. Apportez des modifications aux modèles d’injection de commandes dans le nouvel objet Signature défini par l’utilisateur et utilisez cet objet signature dans votre profil qui traite le trafic pour lequel vous souhaitez utiliser ces modèles personnalisés.

Pour plus d’informations, voir Signatures.

Pour afficher les schémas d’injection par défaut à l’aide de l’interface graphique :

  1. Accédez à Application Firewall > Signatures, sélectionnez *Signatures par défaut, puis cliquez sur Modifier.

Afficher les schémas d'injection par défaut

  1. Cliquez sur Gérer les modèles CMD/SQL/XSS. Le tableau Gérer les chemins de script SQL/inter-sites affiche les modèles relatifs à l’injection CMD/SQL/XS :

Afficher les schémas d'injection par défaut

  1. Sélectionnez une ligne et cliquez sur Gérer les éléments pour afficher les modèles d’injection 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 de la commande Web App Firewall.

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 d’apprentissage 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 du pare-feu 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 de 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 Firewall > Profils, mettez en surbrillance le profil cible, puis 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

Passez à l’interpréteur de commandes et repérez 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 de message de journal HTML SQL Injection lorsque la demande 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
<!--NeedCopy-->

Exemple de 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
<!--NeedCopy-->

Remarque

Dans le cadre des modifications apportées au streaming dans la version 10.5.e (versions 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 de nombreux 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 prenant en charge le streaming côté demande et la version 11.0 ultérieure, nous consignons 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-dataou 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 la visionneuse Syslog, qui affiche tous les messages de journal, y compris les autres journaux de violation des contrôles 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 la visionneuse Syslog, qui affiche tous les messages de journal, y compris les autres journaux de violation des contrôles 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 la liste déroulante Options 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, adresse IP du client, etc. s’affichent 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 apparaît dans le coin supérieur droit de la case Syslog Viewer 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 de trois le compteur de statistiques pour les violations et les journaux, 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 : Citrix Web App Firewall 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 du 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, les caractères spéciaux, les caractères génériques et les règles de transformation par défaut pour personnaliser l’inspection du contrôle 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 de script SQL/cross-site spécifiés dans l’objet signature lié au profil. Si aucun objet de signature n’est lié au profil, les modèles de script SQL/cross-site présents dans l’objet 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 sont transformés.
    • Lorsque la transformation SQL est activée, les demandes des utilisateurs sont envoyées aux serveurs principaux après la transformation des caractères spéciaux SQL en mode non bloqué. Si l’action de blocage est activée, elle a priorité sur l’action de transformation. Si le type d’injection est spécifié en tant que caractère spécial SQL et que le bloc est activé, la demande est bloquée malgré l’action de transformation.
  • Relaxation et apprentissage à grains fins : affinez la règle de relaxation pour détendre un sous-ensemble d’éléments SQL de l’inspection des contrôles de sécurité, mais détecter 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.