Les pare-feu d’application Web (WAF) sont une couche critique de la sécurité Web moderne, fournissant la première ligne de défense d’un site Web contre les vulnérabilités. Les WAF peuvent être utilisés pour se défendre et notifier les tentatives d’exploitation, ce qui permet des atténuations plus rapidement que les organisations ne peuvent corriger les logiciels vulnérables. Cette fonctionnalité doit être implémentée de manière sensible aux performances pour un CDN global, en fournissant des temps de réponse de l’ordre de millisecondes. Lorsque nous avons introduit un moteur WAF dans la pile Verizon Digital Media services, maintenant Edgio, il y a trois ans, nous avons choisi le moteur ModSecurity Rules Engine, qui nous a semblé être de premier ordre pour les cas d’utilisation WAF individuels. En outre, la prise en charge par ModSecurity du Core Rule Set (CRS) OWASP, du langage de règles puissant et de l’accès API au flux de trafic HTTP en temps réel offrait une flexibilité significative.
Entrez waflz
Cependant, à mesure que le nombre de clients utilisant le WAF augmentait, nous avons connu des goulots d’étranglement en termes de performances et de ressources. Le jeu de règles dense de ModSecurity propagé sur chaque instance client a augmenté l’utilisation de la mémoire et du processeur sur notre réseau, augmentant ainsi les coûts opérationnels. Le test et le déploiement de nouvelles règles étaient également difficiles car le langage des règles était souvent lourd et difficile à écrire et à analyser. Ces problèmes, ainsi que la complexité du développement avec la bibliothèque ModSecurity existante, ont conduit au développement de waflz, un moteur WAF open-source publié sous la licence Apache 2,0.
Pour Edgio, waflz est une amélioration significative de ModSecurity parce que:
- Il consomme moins de mémoire.
- Offre de meilleures performances.
- Est piloté par API.
Waflz prend en charge un sous-ensemble de fonctionnalités ModSecurity, les jeux de règles OWASP Core 2. x et 3. x, et plusieurs jeux de règles tiers.
Conception de waflz
Waflz est conçu dès le départ pour offrir de hautes performances et une multilocation. Si nécessaire, la conception perdait la performance au détriment de la flexibilité. Finalement, waflz prend en charge un sous-ensemble restreint de fonctionnalités ModSecurity. Par exemple, pour des raisons de sécurité et de performances, certaines directives ModSecurity comme SecRemoteRules et inspectFile ont été jugées inadaptées pour une exécution en périphérie.
Le moteur peut être configuré avec des règles au format ModSecurity ou JSON. L’ensemble du produit WAF a été conçu pour être « API-first ». À cette fin, waflz fournit un support JSON de première classe comme entrées et sorties. Waflz utilise les tampons du protocole Google en interne pour représenter à la fois la configuration (y compris les règles) et les formats d’alerte. Le choix des tampons de protocole permet l’interopérabilité avec les entrées et sorties JSON et l’ajout de schémas strictement typés pour les deux.
Certains des principaux défis d’ingénierie dans un CDN sont la gestion de la concurrence et de la multilocation élevées qui découlent du service de milliers de clients : chacun de nos serveurs périphériques mondiaux doit être en mesure de traiter une demande pour n’importe lequel de nos clients aussi rapidement que possible. En outre, les applications de serveur périphérique doivent fournir des correctifs et des traitements en temps réel pour toute configuration client.
Le fait de charger de nombreux jeux de règles WAF dans la mémoire du processus de serveur d’applications HTTP en cours d’exécution à la périphérie de tous nos clients représentait un défi d’évolutivité. Waflz résout ce problème en créant les jeux de règles WAF une seule fois en mémoire et en partageant les références en lecture seule entre les configurations client et les personnalisations de règles. En outre, plusieurs optimisations potentielles des performances ont été identifiées, ce qui a amélioré les délais de traitement des demandes, notamment les gains d’espace et de temps pour certaines structures de données internes critiques.
Waflz dispose également de fonctionnalités intégrées qui facilitent la validation du comportement du moteur et le test des règles ModSecurity uniques, éliminant ainsi le besoin d’un harnais de test autonome complexe.
Conclusion
Waflz fait partie de notre pile technologique CDN et peut fonctionner à grande échelle tout en permettant des tests et une personnalisation granulaires efficaces des règles. Malgré les défis pour les applications CDN, ModSecurity et la nouvelle libmodsecurity sont des bibliothèques fantastiques et flexibles idéales pour de nombreux cas d’utilisation. En effet, en développant waflz, nous avons contribué à nouveau au développement de ModSecurity. Le nouveau moteur WAF fonctionne en production dans le monde entier depuis plus d’un an, prenant en charge et protégeant simultanément des milliers de configurations client différentes sans perte de performances.
Visitez github pour voir plus d’exemples de fonctionnalités waflz.