Les WAF - un concours canin
Renaud FEIL et Renaud DUBOURGUAIS (Synacktiv) ont fait un retour d'expérience quant à des tests sur des Web Application Firewalls (WAF), et tout particulièrement sur différentes offres "dans le nuage". Le support de la présentation est disponible sur le site de l'OSSIR.
Une telle offre de service logiciel à la demande est relativement classique dans son principe. Ca cible, un composant de sécurité en l'occurrence, fait apparaître des risques précis :
- l'interface de gestion du WAF est, par nature, accessible depuis Internet. Elle offre des fonctionnalités très importantes (redirection vers le serveur final, filtrage, etc.)
- les règles de filtrages sont généralement mutualisées pour tous les clients du service. Elles ne sont alors pas modifiables ou adaptables à un besoin particulier.
- certains WAF fonctionnent via le DNS. Le véritable serveur reste accessible. Si l'agresseur en trouve l'adresse, le WAF est alors court-circuité.
- d'autres WAF reposent sur l'insertion de code dans le service Web à protéger, ce code devant valider les informations transmises par les internautes. Tout problème dans ce code spécifique peut mettre en périle le service protégé.
Plusieurs WAF ont été choisis au hasard parmi les offres existantes, et leur sécurité a été évaluée.
XyberShield
Fonctionnement général
Cet outil fonctionne par insertion de code dans l'application à protéger. L'entreprise indique que XyberShield permet de protéger le service contre les APT, les 0-days, la modification indûe, etc.
XyberShield protège contre les attaques simples, du type de celles d'un débutant, d'un mauvais testeur ou d'un outil de base. Mais son filtrage est facile à contourner, par une simple obfuscation des requêtes.
Le code PHP utilisé (pour protéger une application en PHP) positionne la variable error_reporting à E_ALL. Les erreurs de l'application sont alors affichées à l'utilisateur. Cela signifie que XyberShield peut abaisser le niveau de sécurité du service qu'il protège.
Toutes les informations reçues de l'internaute sont expédiées vers le nuage pour qu'elles soient analysées. La transmission utilise un chiffrement maison, à base de XOR, très facile à casser. Si l'application utilisait https afin de sécuriser les données envoyées par l'internaute, le renvoi vers le nuage est non sécurisé.
Contournement du WAF
L'analyse du code inséré dans l'application (toujours pour du PHP) fait apparaître deux contournements possibles.
- l'interception d'une requête provoque l'appel de deux fonctions spécifiques. L'examen de ces fonctions montre la présence d'une variable interne qui, si elle vaut 1, annule le filtrage du WAF. Cette variable est chiffrée (XOR), mais à l'aide d'une clé connue (présente dans les tutoriaux relatifs à dotNet). Il est donc possible de définir cette variable via une requête GET.
- Le cookie xybershieldstatus est composé de deux parties, P1 et P2. Chacune est un XOR avec la clé évoquée ci-avant. Si P2 est non nul, aucune vérification n'est faite par le WAF.
Interface d'administration
L'interface d'administration se révèle vulnérable à la modification de l'identifiant du client. Cela permet d'accéder aux informations d'un autre client (événements de sécurité, export, etc.)
CloudFlare
CloudFlare est originellement un accélérateur web, auquel des fonctions de filtrage ont été ajoutées. Il fonctionne par redirection DNS. Cependant, il faut déléguer toute la zone concernée à CloudFlare.
Les règles de filtrage ne sont pas modifiables.
Les présentateurs n'ont pas réussi à faire fonctionner ce WAF.
Incapsula
Il s'agit d'une société née de la scission d'Imperva
Incapsula fonctionne par redirection DNS, à l'aide d'un CNAME vers la zone x.incapdns.net. Le filtrage est plus avancé que celui de Xybershield, avec une liste noire bien construite et des mécanismes de notation pouvant amener à un rejet. Toutefois, les en-têtes HTTP ne sont pas contrôlés, et de nombreux éléments sont absents de la liste noire.
Contournement du filtrage
Le contournement du filtrage, notamment des injections SQL, est relativement facile. Une injection SQL sémantiquement équivalente à une injection classique bloquée (UNION SELECT), mais contenant un mot-clé complémentaire (UNION DISTINCT SELECT) ne sera pas bloquée.
Le filtrage XSS ne prend pas en compte de très nombreux mots-clés pourtant importants.
Injection d'en-têtes HTTP
Lors du renvoi des requêtes vers le véritable serveur Web, Incapsula ajoute des en-têtes spécifiques. Si l'internaute a déjà injecté ces en-têtes dans sa requête entrante, les valeurs qu'il a définies seront ajoutées à celles transmises au serveur Web
Le code ajouté à l'application afin de traiter ces en-têtes rencontre diverses difficultés lorsqu'il s'agit de variables multi-valuées.
Ciblage du véritable serveur Web
En cas de requête vers le WAF, mais concernant un port filtré, le message d'erreur obtenu indique le dernier octet de l'adresse du véritable serveur Web. S'il est possible de tenter une recherche exhaustive sur les trois octets précédents, cela pourrait être quelque peu long.
L'utilisation de Google ou de Netcraft permet de déterminer beaucoup plus rapidement l'adresse IP du serveur réel, et de se connecter ensuite dessus sans passer par le WAF.
Interface d'administration
Il est naturel que l'interface d'administration offre des fonctionnalités sensibles, comme l'activation ou la désactivation du filtrage, la définition de l'adresse IP vers laquelle renvoyer les requêtes validées, la gestion des listes blanches, etc. Un accès illégitime à l'interface d'un client est donc un risque majeur.
L'interface d'administration d'Incapsula est affectée :
- de nombreux XSS,
- de vulnérabilités de type Insecure Direct Object Reference (OWASP Top 10 2010-A4,et probablement Top 10 2013-A4). Cela permet de prendre le contrôle d'un compte tiers, avec les conséquences que l'on imagine.
Conclusion des présentateurs
Les WAF en mode SAAS sont encore relativement immatures. Leur facilité de déploiement doit être mise en parallèle avec la sécurité limitée qu'ils offrent. En outre, pour les produits testés par les présentateurs, le niveau de sécurité de ces applications se particulièrement révèle faible.