# Web application firewall

Un Web Application Firewall (WAF) est un type de pare-feu qui protège le serveur d'applications Web dans le backend contre diverses attaques. Le WAF garantit que la sécurité du serveur Web n'est pas compromise en examinant les paquets de requête HTTP / HTTPS et les modèles de trafic Web.

## Définition

Un Web Application Firewall (WAF) est un type de pare-feu qui vérifie les données des paquets afin de protéger la couche application du modèle OSI$^,$$^,$. Dans l'architecture globale du système (serveur web), un WAF est placé avant l'application Web qui doit être protégée. Chaque demande envoyée est d'abord examinée par le WAF avant qu'elle n'atteigne l'application Web. Si cette demande est conforme à l'ensemble de règles du pare-feu, ce dernier peut alors transmettre la demande à l'application. D'une manière générale, un WAF peut être défini comme une politique de sécurité mise en place entre une application web et l'utilisateur final.
Les fonctionnalités qu'il apporte peuvent être implémentées en logiciel ou en matériel. En software, cela se résume souvent à une application installée sur un système d'exploitation tandis qu'en hardware, ces fonctionnalités sont intégrées dans une solution d'appliance. La principale tâche d'un WAF est donc de protéger les programmes web sans les modifier.

## Les caractéristiques du WAF

Habituellement, le choix d'un WAF devrait être utilisé pour les caractéristiques attendues, les performances et les environnements.
Liste des caractéristiques du WAF :
* Prendre en charge les normes connues des principales menaces et de gérer les menaces telles que OWASP Top 10 et PCI DSS
* Vérifier l'entrée et la sortie des applications Web en fonction de la définition des règles de sécurité et la mise en œuvre des opérations appropriées telles que bloquer, autoriser, alerter et consigner les enregistrements, conformément à la pratique acceptée
* Arrêter et révéler des informations importantes (prévention des fuites de données)
* Possibilité de vérifier l'application web de sortie et de réponse à travers la définition des politiques et règles de sécurité et l'implémentation appropriée comme bloquer, autoriser, alerter, masquer
** Mise en œuvre de politiques de sécurité à travers des modèles positifs ou négatifs. Dans le modèle positif (liste blanche) en définissant des opérations acceptables, un comportement autorisé, une plage valide d'entrée de données acceptable spécifiée et uniquement cette opération est autorisée et toute autre opération diagnostiquée comme illégale, elle empêchera les actions de se produire. Dans le modèle négatif (liste noire), une liste de tous les actes non autorisés est spécifiée et toutes les opérations avant de comparer l'implémentation avec cette liste et seulement si les opérations ne correspondent pas, il sera possible de l'implémenter
* Vérifier le contenu des pages Web telles que HTML, HTML dynamique, CSS ainsi que des pages Web de protocoles de transfert tels que HTTP, HTTPS, TLS;
* Vérifier tout protocole ou quelle construction de données utilise pour transférer des données vers une application Web ou recevoir des données de celle-ci
* Prévenir les attaques et les accès non autorisés
* Prendre en charge la terminaison SSL / TLS ou la prise en charge de la possibilité de localisation dans une route de trafic chiffré de manière à pouvoir déchiffrer le trafic avant de le recevoir dans le programme d'application Web. Le trafic chiffré n'est pris en compte par WAF que si l'opération de terminaison SSL est effectuée avant d'atteindre le trafic vers l'application Web
* Empêcher ou détecter la falsification de jetons de session, par exemple en chiffrant des cookies de session, des champs de formulaire masqués ou en utilisant d'autres méthodes pouvant être utilisées par ceux qui suivent la session
* Possibilité de recevoir de nouvelles mises à jour et de demander une signature dynamique et une manuelle
* Avoir la possibilité d'échouer ouvert (par exemple, dans le cas de WAF désactivé en raison d'un problème matériel, vérifier que tout le trafic entrant et sortant autorisé à être transféré sans passer le WAF) ou les supports échouent fermer (en cas de panne WAF due à un problème matériel, tout trafic d'entrée et de sortie, n'est pas autorisé à être transféré à partir du WAF);
* Prendre en charge du certificat client SSL et de l'authentification du client proxy via un certificat si l'application Web utilise le certificat SSL Client pour identifier les utilisateurs. En cas de non-prise en charge de cette fonctionnalité par WAF, l'application web située à l'arrière de WAF sera difficile. De nombreux WAF modernes ont la possibilité d'utiliser LDAP ou d'autres services similaires.

## Les menaces liées aux applications web

Les serveurs Web sont la source d'information et l'endroit où les informations sont stockées. Ces serveurs Web fournissent au client, sur demande, des données telles que des pages Web, des images, des vidéos et d'autres types de données. En raison du rôle important joué par un serveur, il fait l'objet d'attaques malveillantes perpétrées par des parties et/ou des entités hostiles. Les objectifs habituels de ces attaques vont de la perturbation de la fonction et de la disponibilité du serveur Web à l'accès non autorisé au contenu Web hébergé.

### Injection SQL

L'injection SQL est l'une des vulnérabilités les plus dévastatrices qui affecte les systèmes de gestion de bases de données car elle peut conduire à l'exposition de toutes les informations sensibles stockées dans la base de données d'une application. Toutes les requêtes SQL peuvent être utilisées efficacement pour exploiter la logique d'application Web pour accéder à la base de données. L'injection SQL est la plupart du temps le résultat de validations d'entrées insuffisantes. Ce type d'attaque est généralement injectée via des zones de texte qui transmettent des données à l'application Web via des requêtes Web ou parfois en utilisant des URL.

#### Tautologie ou Injection d'évaluation vraie

L'attaque de tautologie est souvent utilisée en raison de sa simplicité. Le but de l'attaque basée sur la tautologie est principalement de contourner la certification, d'extraire les données ou de découvrir une vulnérabilité peut être injecté.
Exemple :
Si le code ne contrôle pas la valeur $1 saisie, un utilisateur mal intentionné peut passer comme valeur ' OR 1=1 ;-- qui cause l'exécution du code suivant :
Dans la requête ci-dessus, 1 = 1 sera toujours vrai. Si l'application ne valide pas la saisie de l'utilisateur correctement, tous les enregistrements de la base de données seront récupérées par cette requête.

#### Requêtes illégales ou logiquement incorrectes

Dans ce type d'attaque, l'attaquant injecte des déclarations dans le but de provoquer une erreur de syntaxe ou une erreur logique. Ces erreurs peuvent révéler des informations précieuses sur le type et la structure du backend de la base de données de l'application web. Et aidera l'attaquant à identifier les paramètres injectables. Les erreurs de syntaxe peuvent être utilisées pour déduire les types de données de certaines colonnes ou extraire des données. Les erreurs logiques disent souvent à l'attaquant le nom des tables et colonnes dans la base de données.
Exemple :

#### Requêtes Piggy-Backed

Dans ce type d'attaques, l'attaquant ajoute une requête supplémentaire à la requête originale.
Exemple :

#### Requête UNION

Cette attaque utilise l'opérateur de l'union qui est effectué permet lier deux ou plusieurs requêtes.
Exemple :

#### Alternation de l'encodage

Dans cette technique, les attaquants modifient la requête d'injection en utilisant codage alternatif. Cette attaque modifie le texte injecté sans changer le but de la commande méchante. La méthode la plus utilisée de codage de la chaîne d'attaque sont hexadécimaux, ASCII et Unicode Encodage de caractère.
Exemple :

### Cross-site scripting (XSS)

Dans les attaques XSS, l'attaquant tente d'injecter un script côté client sur le serveur distant. XSS attaque généralement le code HTML de la page Web en cours de chargement. ActiveX, JavaScript peut être affecté par cette attaque. XSS peut révéler des informations sur les cookies. Les scripts peuvent être hébergés quelque part par l'attaquant. L'attaquant fournit un lien vers les utilisateurs qui semble authentique, mais a un code de script malveillant. Une fois que l'utilisateur atteint le script de liaison exécuté sur la machine du client, l'attaquant peut obtenir des informations vitales$^,$$^,$.

#### XSS non persistant

Dans ce type d'attaque, le script d'attaque est conservé ailleurs que sur le serveur de base de données de l'application Web. Ces scripts malveillants sont mis à la disposition des utilisateurs de telle sorte que l'utilisateur semble légitime. Une fois ce script touché, le pirate peut accéder aux informations de l'utilisateur$^,$.

#### XSS persistant

Comme son nom l'indique, une attaque XSS persistante stocke le script ambigu sur des périphériques secondaires d'application Web, tels qu'une base de données d'application Web à trois niveaux. Ce type d'attaque est possible lorsque l'application web permet à l'utilisateur de stocker des informations telles que des commentaires, des sections de blog, etc. qui sont également visibles par les autres utilisateurs. Le détournement de session peut être effectué en utilisant XSS persistant.

## La protection des WAFs face aux menaces liées aux applications web

Les WAFs constituent un mécanisme indispensable conçu pour empêcher certains types d'attaques, tels que l'injection SQL ou le script XSS. Une fois déployé, un WAF examine chaque demande soumise à un système cible pour décider si elle est légitime ou malveillante. Le WAF prend une décision en effectuant un contrôle d'accès en temps réel en se basant sur les informations telles que les URL, les paramètres envoyés ainsi que l'historique de session de l'utilisateur et en vérifiant si la valeur correspond ou non à un modèle d'attaque, en utilisant typiquement un ensemble de règles (par exemple, des expressions régulières)$^,$.
Le WAF peut utiliser soit une liste blanche (un modèle de sécurité positif) ou soit une liste noire (un modèle de sécurité négatif) pour prendre ces décisions. Dans le modèle de sécurité positif, le contrôle d'accès est basé sur des comportements positifs connus. Ces comportements peuvent être construits manuellement par l'administrateur ou bien produit automatiquement en observant un trafic réseau légitime. Le modèle de sécurité négatif permet quant à lui de rejeter les requêtes reflétant un trafic dangereux.
Le WAF est donc une méthode pour se protéger de ces genres d'attaques.

### Protection contre les SQLi (Injections SQL)

Les WAFs protègent la base de données de l'application en inspectant le trafic HTTP et en appliquant un ensemble de règles de sécurité. Le langage utilisé pour exprimer les règles de sécurité peut explicitement décrire une signature d'une attaque par injection SQL, ou implicitement décrire la façon de détecter ces attaques. Il peut également exprimer une valeur de score d'anomalie qui augmente chaque fois qu'un motif malveillant apparaît dans une requête HTTP. Si la valeur de l'anomalie atteint un seuil prédéfini, la demande sera rejetée.

## Les limites

Le WAF peut protéger contre les attaques assez générales, mais il ne peut pas prémunir contre les requêtes entrantes ciblant un bug spécifique dans l’implémentation de l'application web. Il faut bien connaître les services fournis par l'application web que le WAF doit protéger afin de configurer le pare-feu au mieux. Des technologies telles que AJAX (pour créer des pages dynamiques) requièrent d'adapter le WAF en conséquence car par défaut, ils peuvent être bloqués par le WAF.