Installer l’agent open-appsec sur une Debian 12 avec un nginx non conteneurisé.

Dans cet article, nous allons voir comment installer l'agent open-appsec pour la mise en œuvre du WAF sur un serveur Debian 12 avec un nginx préexistant qui n'est pas dockerisé (pour des raisons historiques). Mais avant toutes choses, on va d'abord voir ce que c'est qu'open-app-sec, ensuite, on passera à la mise en place du docker avec l'agent et son raccordement avec nginx.

Open-appsec kesako et pourquoi

Open-appsec est un WAF, pour Web Application Firewall, un outil qui va permettre de filtrer toutes les requêtes reçues par vos applications web et dans certains cas bloquer celles qui semblent malveillantes. Par exemple, des requêtes avec des injections SQL ou encore du XSS.

Pourquoi open-appsec ? Tout simplement, car le projet open-source ModSecurity est en fin de course, ce qui est fort dommage d'ailleurs. Ensuite, Open-appsec est portée par la société Check Point Software qui n'a plus besoin de faire ça renommé dans le milieu de la cybersécurité.

La solution s'intègre très facilement avec les technologies modernes telles que nginx, Kubernetes, Kong, CrowdSec, etc.

Pour déployer la solution, vous avez deux options, la première en full local, c'est-à-dire que vos agents déployés ne seront pas connectés au cloud d'open-app-sec pour être managé. La seconde, vous l'aurez deviné, est un déploiement avec une gestion via une application SaaS qui permettra de gérer votre flotte d'agent, les règles et aussi de manager les règles actives ou non sur ces derniers. Nous allons voir dans cet article comment installer en "localy" comme l'appel la documentation officiels notre agent, autrement dit sans le connecter au SaaS dans un premier temps. Par la suite, vous aurez tout le loisir de pouvoir le connecter ultérieurement.

Installer l’agent avec Docker

Pour installer l'agent open-appsec via docker le plus simple et de vous référer à la documentation officielle qui se trouve ici : https://docs.openappsec.io/getting-started/start-with-docker/install-with-docker-locally-managed et ne vous posera pas le moindre souci sur Debian 12, contrairement à la partie "attachment" que l'on verra juste après.

⚠️ Attention à ne pas faire les étape 5 et 6 de la documentation ci-dessus !

Petit détail avant de vous lancer dans l'installation à l'étape 3 on va vous demander le chemin vers trois dossiers optionnels, mais nécessaire si vous voulez de la persistance de données. Ce n'est pas très explicite à mon sens donc je me permets de le mentionner, vous devez juste créer 3 dossiers vides et faire référence en chemin absolue vers ces derniers.

Ce qui pourrait donner par exemple ceci comme commande pour lancer le container de l'agent :

docker run --name=open-appsec-agent \
--ipc=host \
-v=/var/www/openappsec/persistent-agent-file/config:/etc/cp/conf \
-v=/var/www/openappsec/persistent-agent-file/data-files:/etc/cp/data \
-v=/var/www/openappsec/persistent-agent-file/logs:/var/log/nano_agent \
-v=/var/www/openappsec/persistent-agent-file/local-conf-file:/ext/appsec \
-e user_email=fake@kanjian.fr \
-it -d ghcr.io/openappsec/agent:latest /cp-nano-agent --standalone

Une fois votre conteneur docker opérationnel, nous allons pouvoir passer au rattachement à nginx.

Installation de l’attachment open-app-sec dans nginx

Avant de commencer, une précision s'impose. En effet, pour fonctionner, l'agent open-appsec doit être rattaché à nginx ou autre serveur web. Il va se mettre entre les requêtes entrantes et l'agent open-appsec pour lui permettre de faire son travail avant de laisser passer ou non les requêtes vers le serveur web.

Si vous êtes sur une ancienne version de Debian vous n'aurez pas besoin de mon article, si vous êtes comme moi en Debian 12, il va vous falloir réaliser une compilation du module nginx... Car pour l'instant, début 2024, il n'est pas disponible pour le moment ! De plus la documentation sur gitHub ici : https://github.com/openappsec/attachment ne vous propose qu'une marche à suivre pour créer votre container depuis une image alpine...

Donc pour compiler notre extension sur Debian 12 on va devoir installer les éléments suivants :

apt update
apt install cmake libpcre2-dev libssl-dev zlib1g-dev libxml2-dev libxslt1-dev libgd-dev geoip-bin libgeoip-dev libperl-dev build-essential

Une fois tout cela installé, on va pouvoir cloner et lancer la compilation de notre module/extension nginx via les commandes suivantes :

Qui vont stocker votre version nginx dans un fichier temporaire, cloner le dépôt git de l'attachment open-appsec, télécharger les sources de votre version de nginx et lancer la compilation du module via les commandes make.

 nginx -V &> /tmp/nginx.ver
 git clone https://github.com/openappsec/attachment.git
 cd attachment
 ./attachments/nginx/ngx_module/nginx_version_configuration.sh --conf /tmp/nginx.ver build_out
 cmake -DCMAKE_INSTALL_PREFIX=build_out .
 make install
 make package 

Tout devrait s'être déroulé comme un charme ! Il ne reste qu'une dernière étape qui est l'installation du module et pour se faire pas besoin de lancer des copier-coller dans tous les sens. Nous allons utiliser le script présent dans votre dossier "build_out" qui a été créé suite aux commandes ci-dessus.

Il vous suffit de vous placer dans votre dossier "build_out" et de lancer le script suivant :

./install-cp-nano-nginx-attachment.sh --install --hybrid_mode

On va donc demander l'installation du module dans nginx directement, vous aurez peut-être des avertissements selon vos vhosts nginx en cas de deprecated notamment. Attention à bien respecter le dernier argument : "hybrid_mode", car c'est lui qui indique à open-appsec que nginx n'est pas dockerisé, mais que l'agent l'est.

Un petit redémarrage de nginx ne fera pas de mal à l'issue de l'installation et vos applications sont dorénavant protégées par open-appsec.

Si vous avez bien suivi la documentation de l'agent et que vous avez mis en place le fichier "local_policy.yaml", vous avez surement configuré votre WAF en mode bloquant, pour tester rien de plus simple dans un formulaire saisissez la chaîne suivante : "OR 1=1" et vous devriez avoir une erreur 403 indiquant que le WAF à bloquer la requête, pour jouer avec les paramètres de réponse du WAF et personnaliser les retours jeter un oeil ici : https://docs.openappsec.io/getting-started/start-with-linux/local-policy-file-advanced#custom-response

Conclusion

Cela ne vous aura pris que 5 à 10 minutes pour installer un WAF performant sur votre serveur, reste le plus dur et le plus compliqué l'ajustement des règles surtout si vous n'êtes pas relié en SaaS. En effet, pour l'instant, il est compliqué pour moi en l'état d'avoir le WAF en bloquant sur des applications autorisant des éditeurs WYSIWYG, car les requêtes se font généralement bloquées pour tentatives de XSS voir de SQL Injection, Remote Code Execution et Path Traversal rien que ça !

De prochain article sur la bonne configuration pour pallier cela sont à venir !

Leave a Reply

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *