Académique Documents
Professionnel Documents
Culture Documents
Réalisé par :
Encadré par :
Mme. Aoumeur Badra Narimène
Mme. Abderrahim Nassiba
Mr. Issoufou Baoua
Wafa
Abdoul-Salami
”
- Aoumeur Badra Narimène
I
“ ’
”
- Issoufou Baoua Abdoul Salami
II
Remerciments
III
ملخص
في يومنا هذا ،أصبحت تطبيقات الويب مستخدمة بشكل متزايد في جميع المجالات .حيث يستخدم العديد من
الأفراد والمجموعات والمنظمات والحكومات هذه التطبيقات لتبادل المعلومات وتسهيل المهام المتعلقة بأنشطتهم.
من أجل ضمان أمان التطبيقات ضد الهجمات الإ لكترونية ،من الضروري اتخاذ إجراءات حماية مناسبة .ويتعلق هذا
بشكل خاص بالهجمات التي تستهدف طبقة التطبيق ،حيث تستغل الثغرات التي يتسبب فيها المطورون أثناء التصميم،
بالإ ضافة إلى الثغرات المحتملة في التقنيات المستخدمة في عملية النشر.
في إطار مشروع التخرج هذا قمنا باجراء دراسة حول استخدام جدران الحماية للتطبيقات بهدف تعزيز أمان تطبيقات
الويب.
قمنا بتطوير مثال تطبيق بهذا الصدد باستخدام Modsecurityعلى Nginxبالإ ضافة إلى مجموعة القواعد الأساسية
التي اختبرناها على DVWAو تطبيق متجر العصير ،وهي تطبيقات مفتوحة المصدر مليئة بالثغرات.
هدفنا الرئيسي في هذه الدراسة كان تحسين أمان تطبيقات الويب عن طريق حمايتها من مختلف أنواع الهجمات بما
في ذلك LFIو XSSو SQLIوحقن الأوامر ونظام ،DOSوالتي تم توفيرها باستخدام أمن ModSecurityو V3.3.4
. CRS
كلمات مفتاحية :الأمن السيبيراني لتطبيقات الويب ،جدران حماية التطبيقات Nginx, ModSecurity, WAF,
(CRS) CoreRuleSet
IV
Résumé
De nos jours, les applications web sont de plus en plus utilisées dans tous les domaines.
De nombreux individus, groupes, organisations et gouvernements recourent à ces appli-
cations pour échanger des informations et faciliter les tâches liées à leurs activités.
Afin de garantir la sécurité des applications contre les cyberattaques, il est essentiel de
prendre des mesures de protection adéquates. Cela concerne particulièrement les attaques
ciblant la couche d’application, qui exploitent les vulnérabilités introduites par les déve-
loppeurs lors de la conception, ainsi que les failles potentielles des technologies utilisées
lors du déploiement.
Dans le cadre de ce projet de fin d’étude, nous avons mené une étude sur l’utilisation des
pare-feux d’applications dans le but d’améliorer la sécurité des applications web.
Nous avons développé un environnement applicatif à cet effet en utilisant ModSecurity
sur Nginx en tant que proxy inverse, ainsi que le jeu de règles principal (core rule set).
De plus, nous avons effectué des tests sur DVWA (Damn Vulnerable Web Application) et
Juice Shop, qui sont des applications open-source présentant de nombreuses vulnérabili-
tés.
Notre objectif principal lors de cette étude était d’améliorer la sécurité des applications
web en les protégeant contre diverses attaques, telles que les LFI (Inclusion de Fichiers
Locaux), les XSS (Cross-Site Scripting), les SQLi (Injection SQL), les injections de com-
mandes et les attaques par déni de service (DoS). Pour atteindre cet objectif, nous avons
mis en œuvre ModSecurity et utilisé le CRS v3.3.4.
Mots clés : Sécurité des applications web, Pare-feux d’applications (WAF), ModSe-
curity, Nginx, Core Rule Set (CRS).
V
Abstract
These days, web applications are more and more used in all fields. Many individuals,
groups, organizations and governments use these applications to exchange information
and support their business activities.
As part of this final-year project, we conducted a study on the use of application firewalls
to improve the security of web applications.
We developed a practice environment for this purpose, using ModSecurity on Nginx as
a reverse proxy, as well as the core rule set. In addition, we carried out tests on DVWA
(Damn Vulnerable Web Application) and Juice Shop, which are open-source applications
with numerous vulnerabilities.
Our main objective in this study was to improve the security of web applications by pro-
tecting them against various attacks, such as LFI (Local File Inclusion), XSS (Cross-Site
Scripting), SQLi (SQL Injection), command injection and DoS (Denial of Service) attacks.
To achieve this goal, we implemented ModSecurity and used CRS v3.3.4.
VI
Table des matières
Dédicace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . I
Remerciments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . III
IV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ملخص
Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . V
Abstract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . VI
Introduction Générale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Conclusion et perspective . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Annexe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
VII
Table des figures
VIII
Liste des tableaux
IX
Listings
X
Liste des sigles et acronymes
XI
Listings
OS Operating System.
PL Paranoia Level.
SI Système d’information.
VM Virtual Machine.
XII
Introduction Générale
1
Introduction Générale
Contexte
Les applications web, aussi connues sous le nom de “web apps”, sont des programmes
informatiques qui exécutent des tâches différentes selon le besoin, et auxquels les utilisa-
teurs accèdent par l’intermédiaire d’un navigateur web.
Quand nous parlons du développement de ces applications, nous pouvons distinguer 2
types de programmes (ou de scripts), qui dépendent l’un de l’autre, il s’agit de scripts
frontend (coté utilisateur) et de scripts backend (côté serveur) qui fonctionnent en entre-
lacement afin de créer une application interactive, rapide, et dont l’utilisation est assez
simple et claire.
Ces applications sont hébergées sur des serveurs web qui sont utilisés pour stocker les
données (scripts, images, vidéos, articles …) pour ensuite les partager avec les clients sou-
haitant obtenir ces informations. Ils fonctionnent donc en permanence pour répondre aux
demandes des internautes.
La protection des serveurs est essentielle compte tenu de leur rôle crucial. Il est impératif
de les sécuriser contre les cybercriminels et leurs attaques malveillantes, dont l’objectif
principal est de les compromettre afin de perturber leur fonctionnement et la disponibilité
des données, ce qui cause des problèmes importants pour les clients et les propriétaires de
ces applications web, qui sont généralement des entreprises. Parmi ces attaques, on peut
citer le Cross-Site Scripting (XSS) et les Injections SQL (SQLi) qui se produisent lorsque
des parties de code malveillantes sont injectées sur des sites fiables afin d’altérer leur
comportement, soit en exposant des données confidentielles ou en affichant des messages
ou des fenêtres qui peuvent nuire à l’utilisateur.
Plusieurs composants réseau ont été développés et utilisés dans la protection des appli-
cations web, tels que les systèmes de prévention d’intrusion (IPS - Intrusion Prevention
System), les systèmes de détection d’intrusions (IDS - Intrusion Detection Systems), qui
sont surtout utilisés pour la détection des potentielles attaques et d’en informer les ad-
ministrateurs, et les pare-feux (Firewalls) qui ne cessent d’évoluer afin de s’adapter à
l’évolution des cyber-attaques et de lutter efficacement contre celles-ci, tout en évitant
de causer des problèmes tels que le blocage de trafic important en raison d’une mauvaise
configuration, par exemple.
Cette évolution a donné naissance aux pare-feux des applications web ( WAFs - Web
Application Firewalls ) qui interagissent directement sur les données des paquets réseau
au niveau de la septième couche (couche application) du modèle OSI.
Problématique
Avec l’utilisation généralisée des sites web pour offrir des services et interagir avec les
clients, les entreprises optent de plus en plus pour l’hébergement cloud pour des raisons
d’efficacité et d’économie. Cependant, cette pratique soulève des préoccupations quant à
la sécurité des serveurs distants auxquels les entreprises n’ont pas accès physiquement.
En effet, les cyber-attaques sont de plus en plus fréquentes et sophistiquées, ce qui souligne
2
Introduction Générale
l’importance de mettre en place une protection adéquate pour protéger les informations
personnelles et professionnelles des entreprises.
La plupart des fournisseurs de services cloud proposent des solutions de sécurité basées
sur des pare-feux. Cependant, chaque fournisseur propose des solutions spécialisées pour
son architecture et ses services, ce qui peut entraîner des problèmes d’adaptabilité et de
maintenance pour les services hébergés chez d’autres fournisseurs de cloud.
D’où la nécessité d’utiliser des solutions largement accessibles, personnalisables et fiables,
qui peuvent répondre aux besoins de sécurité nécessaires aux applications web.
Contribution
Notre étude propose et démontre la mise en œuvre d’un pare-feu d’application pour
améliorer la sécurité des applications web en utilisant ModSecurity et Nginx comme Proxy
Inverse.
Pour atteindre notre objectif, nous commencerons par configurer des règles ou politiques
de sécurités génériques contre les cyber-attaques. Ensuite, nous testerons ces règles sur des
applications web délibérément vulnérables, telles que DVWA et Juice Shop. En parallèle,
nous mettrons en œuvre un système de gestion des événements et des informations de
sécurité (SIEM) afin d’assurer une gestion efficace des résultats obtenus.
Organisation du travail
Ce travail a été divisé en trois principaux chapitres décrits comme suit :
3
Chapitre 1
4
Chapitre 1. Généralités & concepts clés
1.1 Introduction
Dans ce chapitre, nous allons traiter quelques technologies et concepts généraux né-
cessaires à la compréhension du travail qui va suivre, y compris les cyber-attaques les plus
courantes, le projet OWASP et les mesures de sécurisation des applications webs.
Inclusion de fichiers :
L’inclusion de fichiers est une forme d’exploitation de sécurité dans laquelle un atta-
quant profite d’une vulnérabilité présente dans une application web pour inclure un fichier
du serveur web dans une page web.
L’attaquant peut utiliser cette technique pour exécuter du code ou pour accéder à des
informations sensibles sur le serveur[8].
Il existe deux types d’attaques d’inclusion de fichiers :
1 <?php
2
5
Chapitre 1. Généralités & concepts clés
10
11 ?>
12
Listing 1.1: Exemple d’un code PHP vulnérable aux inclusions de fichiers.
• XSS réfléchie : Un code malveillant est injecté à la fin de l’URL d’un site web,
qui est généralement légitime et de confiance. Lorsque la victime charge ce lien dans
son navigateur web, celui-ci exécute le code injecté dans l’URL. L’attaquant utilise
souvent une forme d’ingénierie sociale pour inciter la victime à cliquer sur le lien.
• XSS persistante (ou stockée) : Cette attaque cible les sites qui permettent aux
utilisateurs de publier du contenu visible par d’autres utilisateurs, comme un forum
de discussions ou un site de médias sociaux. Si le site ne valide pas les entrées géné-
rées par l’utilisateur, un hacker peut injecter du code exécutable par les navigateurs
des autres utilisateurs lors du chargement de la page.
Par exemple, se rendre sur un site de médias sociaux, y publier un code malveillant
qui sera stocké dans la base de données et exécuté lorsqu’une victime interagit avec
ce qui est publié.
1 <?php
2
6 if( array_key_exists (" name", $_GET ) && $_GET [" name "] != NULL){
7 echo '<pre > Coucou '. $_GET [" name "]. ' </pre >';
8 }
9
10 ?>
11
Listing 1.2: Exemple d’un code PHP vulnérable aux attaques XSS réfléchis
6
Chapitre 1. Généralités & concepts clés
1 <?php
2
7 ?>
8
Listing 1.3: Exemple d’un code PHP vulnérable aux attaques SQLi
• La première méthode est l’attaque par inondation, qui consiste à envoyer une impor-
tante quantité de données inutiles au système l’empêchant de les gérer correctement.
Les plus courantes sont les suivantes :
7
Chapitre 1. Généralités & concepts clés
– Flood SYN : Dans cette attaque, l’acteur malveillant envoie une demande de
connexion à un serveur, mais n’achève jamais le handshake. Il continue jusqu’à
ce que tous les ports ouverts soient saturés de demandes et qu’aucun ne soit
disponible pour que les utilisateurs légitimes puissent se connecter.
La différence entre le déni de service distribué (DDoS) et le déni de service (DoS) est le
nombre de connexions utilisées dans l’attaque, en effet, l’attaque DDoS utilise de nom-
breuses sources de trafic d’attaque, par exemple un réseau de zombies, tandis que le déni
de service utilise une seule connexion à travers un programme dédié.
3. A03: L’Injection : Plusieurs formes d’injections ont été détectées dans 94 % des
applications testées. En effet, les 33 CWE répertoriés dans cette catégorie sont les
deuxièmes plus fréquents dans les applications.
4. A04: Conception non sécurisée : c’est une nouvelle catégorie de risque apparue
en 2021, qui met l’accent sur les risques liés aux défauts de conception. Si une
entreprise souhaite vraiment ”passer à gauche”, il faut qu’ils utilisent d’avantage la
modélisation des menaces, les modèles et principes de conception sécurisés et les
architectures de référence.
8
Chapitre 1. Généralités & concepts clés
8. A08 : Défauts d’intégrité des logiciels et des données : c’est une nouvelle
catégorie pour 2021, qui se concentre sur les hypothèses liées aux mises à jour lo-
gicielles, aux données critiques et aux pipelines CI/CD sans en vérifier l’intégrité.
L’un des impacts pondérés les plus élevés des données CVE/CVSS (Common Vul-
nerability and Exposures/Common Vulnerability Scoring System) correspond aux
10 CWE de cette catégorie. La désérialisation non sécurisée de 2017 fait désormais
partie de cette catégorie plus large.
10. A10: Falsification des requêtes du coté serveur : Cette catégorie présente le
scénario dans lequel les données montrent un taux d’incidence relativement faible
avec une couverture de test supérieure à la moyenne, ainsi que des notes supérieures
à la moyenne pour le potentiel d’exploitation et d’impact.
9
Chapitre 1. Généralités & concepts clés
– Définir l’ensemble des privilèges qu’un utilisateur peut avoir sur un fichier,
adéquats (Exemple : un Umask, un Setuid et une Setguid).
– Utiliser les Sticky bits pour interdire à un utilisateur autre que le root ou le
créateur du fichier de supprimer ce dernier.
10
Chapitre 1. Généralités & concepts clés
– Utiliser les ACL (access lists) qui contiennent les listes des utilisateurs qui ont
droit d’accéder à un certain répertoire ou fichier.
• Protection des serveurs web et des BBD :
– Utiliser les ServerTokens et la désactivation des signatures du serveurs afin
d’empêcher la divulgation d’informations sur le serveur .
– Interdire le Directory Browsing en désactivant le module d’auto-Index du ser-
veur afin qu’il affiche du contenue seulement si la recherche correspond à un
fichier spécifique.
– Limiter le temps de connexion ssh au serveur.
– Employer des ports différents que ceux utilisés par défaut pour les services
exposés au réseaux externes.
Sécurisation du code :
Il existe plusieurs directives de codage sécurisé (SCG - Secure Coding Guidelines)[7]
qui diffèrent selon le langage et le service proposé.
Parmi les meilleures pratiques de sécurisation du code, on peut citer les suivantes[24] :
Sécurisation du réseau :
Une application web ne peut pas être complètement sécurisée si le réseau ne l’est pas.
C’est pourquoi il est important d’implémenter des pratiques de sécurisation lors de la
mise en place de l’infrastructure réseau, tout en utilisant des mécanismes qui permettent
d’ajouter une couche de sécurité intégrée au niveau réseau du modèle OSI[17].
Parmi ces mécanismes, nous pouvons citer :
11
Chapitre 1. Généralités & concepts clés
• Les Pare-feux :
qui sont des dispositifs qui contrôlent l’accès à un réseau et peuvent être configurés
pour bloquer ou autoriser le trafic en fonction de règles prédéfinies.
1.5 Conclusion
Après avoir listé les attaques les plus courantes qui ciblent les web apps, telles que les
LFI, RFI, SQLi, XSS et DoS, ainsi que le top10 des cyber-risques et les meilleures pratiques
pour sécuriser les applications web, nous allons présenter dans le chapitre suivant l’un des
moyens les plus répondus pour la sécurisation des web apps : les pare-feux d’application
(WAF).
12
Chapitre 2
13
Chapitre 2. Les WAFs et leur fonctionnement
2.1 Introduction
Ce chapitre ce concentre sur l’étude des mécanismes des pare-feux, en mettant par-
ticulièrement l’accent sur les pare-feux d’applications qui constituent l’élément principal
de notre contribution.
Nous allons donc examiner en détail leurs fonctionnements, leurs modèles de sécurité,
ainsi que leurs méthodes de déploiement.
14
Chapitre 2. Les WAFs et leur fonctionnement
15
Chapitre 2. Les WAFs et leur fonctionnement
en fonction de l’application spécifique utilisée, comme l’illustre la figure 2.3. Ainsi, le pare-
feu d’applications web (Web Application Firewall - WAF) est issu de cette génération.
Un NGFW typique combine l’inspection des paquets avec l’inspection des états (sta-
teful inspection) et comprend également une certaine variété d’inspection approfondie des
paquets (DPI), ainsi que d’autres systèmes de sécurité du réseau, voir figure 2.4, tels qu’un
IDS/IPS, un filtrage des logiciels malveillants et un antivirus.
Contrairement à l’inspection des paquets dans les pare-feux traditionnels, qui se limite
exclusivement à l’en-tête du protocole du paquet, l’inspection approfondie des paquets se
concentre sur les données réelles transportées par le paquet. En plus, un pare-feu DPI suit
la progression d’une session de navigation sur le web et peut remarquer si la charge utile
d’un paquet, lorsqu’elle est assemblée avec d’autres paquets dans une réponse du serveur
HTTP, constitue une réponse légitime au format HTML.
16
Chapitre 2. Les WAFs et leur fonctionnement
• Un WAF peut jouer aussi le rôle d’un proxy inverse, en protégeant le serveur de
l’exposition directe aux clients.
• Le plus important pour le WAF est la rapidité et la facilité avec lesquelles la modi-
fication de la politique peut être mise en œuvre, ce qui permet d’avoir une certaine
17
Chapitre 2. Les WAFs et leur fonctionnement
• Modèle positif :
Un modèle de sécurité positif du WAF implique la définition d’une liste blanche qui
filtre le trafic en fonction d’une liste d’éléments et d’actions autorisés - tout ce qui
ne figure pas sur la liste est bloqué. L’avantage de ce modèle est qu’il peut bloquer
des attaques nouvelles ou inconnues que le développeur n’a pas anticipées.
• Modèle négatif :
Un modèle négatif implique la définition d’une liste noire (ou liste de refus) qui
ne bloque que des éléments spécifiques - tout ce qui ne figure pas sur la liste est
autorisé. Ce modèle est plus facile à mettre en œuvre, mais il ne garantit pas que
toutes les menaces sont prises en compte. Il nécessite également la tenue d’une liste
potentiellement longue de signatures malveillantes. Son niveau de sécurité dépend
du nombre des restrictions mises en œuvre.
18
Chapitre 2. Les WAFs et leur fonctionnement
• Pare-feu matériel :
Un pare-feu matériel est un appareil qui sert de passerelle sécurisée entre les appa-
reils situés à l’intérieur du périmètre d’un réseau et ceux situés à l’extérieur. Étant
donné qu’il s’agit d’appareils autonomes, les pare-feux matériels ne consomment pas
la puissance de traitement ni les autres ressources des appareils hôtes.
Parfois appelés pare-feu de réseau, ces dispositifs sont idéaux pour les moyennes et
grandes entreprises qui souhaitent protéger un grand nombre d’appareils. La confi-
guration et la gestion des pare-feux matériels requièrent davantage de connaissances
que celles des pare-feux hôtes.
• Pare-feu logiciel :
Un pare-feu logiciel, ou pare-feu hôte, s’exécute sur un serveur ou un autre appareil
nécessitant une protection. Les pare-feux logiciels consomment donc une partie des
ressources de l’unité centrale et de la mémoire vive de l’appareil hôte.
Ils offrent aux appareils individuels une protection importante contre les virus et
autres contenus malveillants. Ils peuvent discerner les différents programmes en
cours d’exécution sur l’hôte, tout en filtrant le trafic entrant et sortant. Ils offrent
ainsi un niveau de contrôle très fin, permettant d’autoriser les communications vers/-
depuis un programme et de les empêcher vers/depuis un autre.
19
Chapitre 2. Les WAFs et leur fonctionnement
Grâce à ces fonctionnalités les WAFs fournissent une couche de protection aux applications
web contre les cyber-attaques courantes et sophistiquées et aident les organisations à
maintenir une présence en ligne sécurisée.
ModSecurity :
ModSecurity est un WAF multiplateforme qui peut être déployé pour sécuriser les
applications web et les API. Il est conçu pour intercepter et inspecter le trafic entrant,
filtrer les requêtes indésirables et prévenir différents types d’attaques.
ModSecurity fournit également un langage de règles puissant qui permet aux adminis-
trateurs de définir des règles personnalisées pour filtrer le trafic en fonction d’un large
éventail de critères, y compris l’adresse IP, les en-têtes de requête et le contenu de la
requête.[19]
20
Chapitre 2. Les WAFs et leur fonctionnement
Points forts :
• Il peut détecter et prévenir un large éventail d’attaques sur les applications web.
• Il peut être intégré aux serveurs web les plus courants, tels qu’Apache et Nginx.
• Il peut être personnalisé pour répondre aux exigences de sécurité spécifiques des
différentes applications web.
Points faibles :
• Il peut avoir un impact négatif sur les performances des applications web.
• Il peut générer des faux positifs, ce qui peut entraîner un blocage du trafic légitime.
IronBee :
IronBee fournit une protection complète contre divers types d’attaques basées sur le
web. Il utilise une architecture modulaire qui lui permet d’être facilement étendu avec des
plugins personnalisés, offrant ainsi une flexibilité nécessaire pour répondre aux besoins de
sécurité spécifiques de toute application web.
Points forts :
• Il est conçu pour être hautement évolutif et peut gérer de grands volumes de trafic
web, ce qui le rend adapté aux sites web et aux applications web à fort trafic.
Points faibles :
NAXSI :
NAXSI (Nginx Anti XSS & SQL Injection) est un WAF très répandu. Il s’agit d’un
projet open-source conçu pour le serveur web Nginx.
21
Chapitre 2. Les WAFs et leur fonctionnement
Points forts :
• Il génère des journaux qui peuvent être analysés pour identifier et résoudre les
problèmes de sécurité.
Points faibles :
• Il n’est pas efficace contre les attaques sophistiquées qui ne correspondent pas aux
modèles prédéfinis.
• Il peut générer des faux positifs, ce qui peut entraîner le blocage du trafic légitime.
WebKnight :
C’est un WAF populaire pour le serveur web Microsoft Internet Information Services
(IIS).
Points forts :
• Il présente une légèreté et une faible surcharge de performance, ce qui se traduit par
une absence d’impact notable sur la performance de votre application web.
Points faibles :
• Certains utilisateurs ont signalé des problèmes de compatibilité avec certaines ap-
plications web, qui peuvent nécessiter une configuration manuelle pour être résolus.
22
Chapitre 2. Les WAFs et leur fonctionnement
Shadow Daemon :
C’est un WAF conçu pour être hautement personnalisable et peut être configuré pour
répondre aux besoins de sécurité spécifiques de n’importe quelle application web. Shadow
Daemon utilise une approche multicouche pour filtrer le trafic entrant, y compris la dé-
tection basée sur les signatures, la détection des anomalies et l’analyse du comportement.
Points forts :
• Shadow Daemon est léger et a une faible surcharge de performance, ce qui signifie
qu’il n’a pas d’impact significatif sur la performance de votre application web.
Points faibles :
Le tableau 2.1 résume les différentes caractéristiques et performances des waf men-
tionnés ci-dessus, où :
• Fléxibilité : est la possibilité d’adapter ses règles aux changements sur les réseaux.
23
Chapitre 2. Les WAFs et leur fonctionnement
Tab. 2.1 : Tableau comparatif entre les WAF open source populaires
2.8 Conclusion
Les pare-feux jouent un rôle essentiel dans le renforcement de la sécurité d’un réseau
ou d’un système en général. Parmi ces solutions, les WAF qui sont spécifiquement conçus
pour garantir la sécurité des applications web, répondant ainsi à des besoins cruciaux en
matière de cybersécurité.
Après avoir exploré ces aspects dans ce chapitre, il est temps de passer au chapitre suivant,
où nous aborderons les outils nécessaires la mise en œuvre de notre solution.
24
Chapitre 3
25
Chapitre 3. Implémentation de ModSecurity sur Nginx
3.1 Introduction
Dans ce chapitre, nous allons détailler notre solution de sécurisation des applications
web en utilisant le WAF ModSecurity comme proxy inverse. Le WAF a été déployé en tant
que module sur un serveur Nginx, et nous avons configuré le fichier de règles de sécurité
coreruleset à différents niveaux de paranoïa.
Notre objectif principal était d’améliorer la sécurité des applications volontairement vul-
nérables en bloquant un maximum de cyber-attaques.
ModSecurity :
Après avoir réalisé une étude comparative dans le chapitre précédent 2.7 et consulté
plusieurs articles, nous avons opté pour le WAF ModSecurity. Ces sources soulignent que
ModSecurity présente un ensemble de fonctionnalités supérieur à celui des autres WAFs[1].
Configuration de ModSecurity :
• Variable : spécifie l’argument sur le quel la règle sera appliquée. Il peut s’agir
d’un en-tête de requête HTTP,du corps de cette requête, d’un paramètre d’URL,
ou d’autres éléments.
26
Chapitre 3. Implémentation de ModSecurity sur Nginx
• Actions : Il s’agit des actions qui seront entreprises si la règle est déclenchée. Les
actions les plus courantes sont listées dans le tableau 3.2
• msg :Il s’agit d’un message qui sera enregistré par le WAF pour indiquer que la
règle a été déclenchée.
En résumé, cette règle refusera toute requête HTTP dont le paramètre ”testparam”
contient la chaîne ”test” et enregistrera un message dont le texte est ”Notre règle de
test s’est déclenchée”.
27
Chapitre 3. Implémentation de ModSecurity sur Nginx
4. Génération d’un journal d’audit : Il génère une entrée dans le journal d’audit
pour la demande.
6. Traitement des règles : Si une règle est détectée, Il exécute l’action correspon-
dante, qui peut consister à bloquer la demande, à la modifier ou à consigner l’évé-
nement.
Néanmoins, il faut savoir que certaines étapes peuvent être ignorées ou modifiées en
fonction de la demande à traiter.
• PL1 : Le niveau de sécurité de base qui ne génère pas de fausses alertes positives.
• PL2 : Ces règles doivent être utilisées lorsque des données sensibles des clients sont
impliquées, cependant elles peuvent générer des fausses alertes positives.
28
Chapitre 3. Implémentation de ModSecurity sur Nginx
• PL3 : Sécurité au niveau des banques en ligne qui présentes souvent un grand
nombre de fausses alertes positives. L’ingénieur de sécurité doit donc être capable
de gérer ces fausses alertes en écrivant des exclusions de règles.
• PL4 : Règles très robustes (ou paranoïaques) qui génèrent un grand nombre de
fausses alertes positives.
Applications vulnérables :
Afin de démontrer la capacité de ModSecurity à intercepter et bloquer les cyber-
attaques, nous avons déployé les applications vulnérables suivantes :
DVWA :
Damn Vulnerable Web Application est une application web, conçue avec la pile LAMP
3.5 et qui fait partie de l’OWASP.
Cette application vulnérable est utilisée dans le but d’apprendre et de pratiquer différentes
techniques de sécurité des applications web, notamment l’identification et l’exploitation
de vulnérabilités. De plus, DVWA offre un environnement sécurisé aux professionnels de
la sécurité, aux étudiants et aux développeurs, leur permettant d’acquérir une expérience
pratique dans la recherche et la résolution des failles de sécurité couramment présentes
dans les applications web [26].
Juice Shop :
Juice Shop est une application web intentionnellement vulnérable similaire à DVWA,
développée et maintenue, aussi par l’OWASP.
Cette web app est conçue complètement avec JavaScript ( AngularJS, Express.js ) et SQ-
Lite comme base de données[25]. Elle comporte divers défis sous forme de vulnérabilités
exploitables.
Nginx :
Nginx, un serveur web open-source largement utilisé, est spécialement conçu pour
traiter efficacement les requêtes HTTP et HTTPS.
Sa capacité à évoluer et à agir en tant que loadbalancer [5], nous a incités à l’utiliser
comme proxy inverse lors de la mise en place de notre solution.
La figure 3.1 illustre l’utilisation de Nginx dans notre environnement de tests.
29
Chapitre 3. Implémentation de ModSecurity sur Nginx
SIEM :
Security Information and Event Managment est la gestion et la surveillance des in-
formations de sécurité. Pour assurer cette fonction, nous avons utilisé les programmes
suivants :
Promtail :
Promtail est une application légère de type agent chargée de collecter et de transmettre
les données de journalisation (logs) pour qu’elles soient ingérées par Prometheus, Grafana
ou autre écosystèmes de surveillance et d’alertes.
Nous avons configuré Promtail de manière à extraire le contenu des fichiers error.log
, qui contiennent des enregistrements de demandes provenant de ModSecurity, et à les
envoyer à Loki.
Loki :
Loki est un système d’agrégation et de stockage de journaux (logs) inspiré de Prome-
theus. Son objectif est de fournir une solution efficace pour la collecte, l’exploration et
l’analyse des journaux générés par les applications et les infrastructures[11]. Cependant,
contrairement à Prometheus, Loki n’indexe pas le contenu des journaux, mais attribue
plutôt un ensemble d’étiquettes à chaque flux de journaux.
Grafana :
Grafana est une plateforme open source de visualisation de données et de création de
tableaux de bord. Elle permet de connecter différents systèmes, de collecter des données
et de créer des graphiques et des visualisations interactives[2] à l’aide des requêtes écrites
avec PromQl : Prometheus Query Language. En effet, ce langage permet de récupérer,
30
Chapitre 3. Implémentation de ModSecurity sur Nginx
filtrer, agréger et effectuer des calculs sur des données de séries temporelles[18].
Nous avons configurée ce service de manière à le rendre accessible à partir du port 3000,
en utilisant les identifiants par défaut : addmin / admin . Ensuite, nous avons défini
Loki comme source de données pour ce service
Kali linux :
Kali Linux est une distribution Linux basée sur Debian spécialement conçue pour
les tests d’intrusion qui permettent d’évaluer la sécurité d’un système ou d’un réseau
informatique en simulant des attaques[3]. Kali offre également une large gamme d’outils
qui permettent de réaliser différentes fonctions comme :
• Zap :
Le Zed Attack Proxy de l’OWASP (ZAP) est un outil de test de pénétration intégré
et facile à utiliser. Il est conçu pour être utilisé par des personnes de tous niveaux
d’expériences pour trouver des vulnérabilités dans les applications web [10] .
• Burp Site :
Burp Suite est un outil de test de sécurité des applications web développé par
PortSwigger. Il offre une gamme de fonctionnalités pour aider les professionnels de
la sécurité à identifier les vulnérabilités et à tester la sécurité des applications web[4].
Nous l’avons utiliser comme proxy afin d’intercepter et apercevoir les requêtes et
les réponses envoyées.
• Slowhttptest :
SlowHTTPTest est un outil hautement configurable qui simule des attaques DoS
au niveau de la couche application. Il permet de prolonger les connexions HTTP de
différentes manières [22] en fonction des paramètres de configuration spécifiés lors
du lancement de l’attaque.
• Wfuzz :
Cet outil est spécialement utilisé pour le fuzzing ou l’automatisation des attaques
d’injection. Son principe est de remplacer toutes les occurrences du mot clé ”FUZZ”
par des payloads, qui sont des sources de données spécifiées par l’attaquant sous la
forme de fichiers .txt .
• Weevely :
C’est un web shell PHP conçu pour l’administration des serveurs à distance. Il
génère des fichiers PHP malveillants qui peuvent être téléchargés sur un site web et
exécutés, pour assurer un accès shell à distance.
31
Chapitre 3. Implémentation de ModSecurity sur Nginx
Implémentation :
Au cours de cette étape, nous avons préparé l’environnement des tests en configurant
les applications vulnérables et en mettant en place le WAF ModSecurity, comme l’illustre
la figure 3.2 .
L’implémentation s’est déroulée de la manière suivante :
• Configurer la dernière version : 3.3.4 du CRS comme règles de sécurité sur ModSe-
curity.
• Concevoir un système de SIEM en utilisant promtail et loki pour la lecture des logs,
et grafana pour leurs visualisation en temps réel.
32
Chapitre 3. Implémentation de ModSecurity sur Nginx
Tests :
L’objectif de notre étude est de démontrer la capacité des WAF à améliorer la sécurité
des applications web, notamment face aux attaques de la couche application qui peuvent
compromettre leur bon fonctionnement.
Pour mener nos tests, nous avons procédé à des attaques cybernétiques sur les applica-
tions déployées dans deux scénarios : sans l’utilisation de ModSecurity, et en utilisant
ModSecurity avec les 4 PL (Politiques de Paranoïa) du core rule set, en exploitant les
outils de pentesting mentionnés dans la section précédente 3.2 .
Pour la simulation des attaques, nous avons adopté la topologie suivante :
Nous avons utilisé une machine virtuelle Kali Linux dotée des outils mentionnés pré-
cédemment 3.2 pour simuler le comportement d’un attaquant.
En ce qui concerne les attaques incluses dans nos tests, nous avons évalué les vulnérabi-
lités suivantes : LFI (inclusion de fichiers locaux), SQLi (injection SQL), XSS (cross-site
scripting), DoS (déni de service), les attaques d’injection de commandes et les scans de
vulnérabilités.
Le tableau 3.3 résume les résultats des attaques testées.
33
Chapitre 3. Implémentation de ModSecurity sur Nginx
Après avoir appliqué le quatrième niveau de paranoïa, toutes les tentatives d’accès
aux fichiers sur le serveur ont été bloquées, et une alerte de type ”Inbound Anomaly
Score Exceeded” a été enregistrée dans le journal d’erreurs de nginx. Cette alerte indique
34
Chapitre 3. Implémentation de ModSecurity sur Nginx
35
Chapitre 3. Implémentation de ModSecurity sur Nginx
Scans de vulnérabilités :
Nous avons utilisé zaproxy 3.2 pour lancer un scan de vulnérabilités sur l’application,
en lançant plusieurs requêtes HTTP de type GET et POST dans le but de détecter le
maximum de failles.
Le WAF a pu reconnaître et bloquer la majorité de ses requêtes, selon leurs motifs.
36
Chapitre 3. Implémentation de ModSecurity sur Nginx
La figure 3.12 démontre les résultats du scan, en citant la méthode, l’URL visée et la
réponse du serveur.
37
Chapitre 3. Implémentation de ModSecurity sur Nginx
connexions par seconde sont réglées sur 200, avec un délai d’expiration de connexion de
3 secondes. ModSecurity a réussi à bloquer ces connexions après un court laps de temps,
qui varie de 60 à 65 secondes. Selon la Figure 3.14 qui représente les résultats du test
de l’application au niveau PL=1, le service était disponible pendant les six premières
secondes. À la septième seconde, il y avait un total de 786 connexions, dont 214 ont
été fermées par le WAF. Cette situation a persisté jusqu’à la soixantième seconde, où le
nombre de connexions fermées a considérablement augmenté, et le service est devenu à
nouveau disponible.
3.5 Conclusion
Le CRS v3.3.4 est un ensemble de règles négatives, ce qui le rend potentiellement
vulnérable aux attaques dont les motifs ne sont pas configurés dans sa liste. Cependant,
ModSecurity a réussi à bloquer la grande majorité des attaques dirigées contre les appli-
cations web vulnérables.
Bien qu’il y ait eu quelques attaques qui ont pu contourner le WAF sans être détectées,
il est important de souligner que ModSecurity a détecté et bloqué la grande majorité de
ces attaques. De plus, il a même réussi à stopper une attaque de type DoS, ce qui ajoute
une couche de sécurité significative aux applications web.
38
Conclusion et perspective
39
Conclusion et perspective
Conclusion Générale
Dans le cadre de ce mémoire, nous avons réalisé une étude approfondie sur les Web Ap-
plication Firewalls (WAF), en examinant leur fonctionnement, leur déploiement et leurs
modèles de règles de sécurité. Notre objectif était de démontrer leur capacité à atténuer
les cyberattaques courantes telles que LFI, RFI, XSS, SQLi et DoS.
Les résultats obtenus suite aux tests de sécurité des applications web en utilisant ModSe-
curity sur Nginx en tant que proxy inverse mettent en évidence le rôle essentiel des WAF
pour renforcer la sécurité des applications web.
En effet, nous avons pu ajouter une couche de protection contre les attaques d’inclusion
de fichiers, les attaques XSS , les SQLi, les injections de commandes et les attaques de
type DoS.
Ces mesures ont permis de masquer les vulnérabilités identifiées par l’OWASP (Open Web
Application Security Project). Cependant, il est important de noter que l’utilisation de
l’ensemble de règles CRS v3.3.4 pour la configuration de ModSecurity le rend potentielle-
ment vulnérable aux nouvelles attaques et à celles qui ne sont pas définies dans ses règles.
Malgré cette limitation, nos résultats ont démontré l’efficacité de ModSecurity dans la
détection et la prévention d’un large éventail d’attaques, ce qui a considérablement ren-
forcé la sécurité des applications web. Toutefois, il convient de souligner que les WAF ne
peuvent pas à eux seuls garantir une protection totale contre toutes les cyberattaques.
Pour conclure notre mémoire, nous tenons à mettre en avant l’importance des bonnes
pratiques de sécurisation lors de la conception d’une application web, afin que le WAF
puisse jouer un rôle complémentaire dans le dispositif de sécurité. Chaque entreprise doit
également mettre en place des mécanismes de sécurité adaptés à la taille, au domaine
d’activité et aux besoins spécifiques de ses applications web.
Perspective
Les recherches que nous avons menées dans le cadre de ce projet nous ont permis de
comprendre l’importance de combiner un modèle d’apprentissage avec les règles de sécu-
rité des WAFs.
Cette approche permet d’assurer une évolution constante des règles de sécurité en prenant
en compte les nouvelles attaques, au lieu d’être limitée à des motifs d’attaques spécifiques.
Envisager une étude conceptuelle pour répondre à ce besoin serait une contribution pro-
metteuse visant à améliorer les performances des WAFs.
40
Bibliographie & Webographie
[1] Diogo Sampaio & Jorge Bernardino. Evaluation of Firewall Open Source Software.
WEBIST, 2017.
[2] Dashboard anything. Observe everything.
[3] David De Smet De Willie L. Pritchett. Kali Linux Cookbook. Packt publishing,
2013.
[4] David De SmetSagar Rahalkar De Willie L. Pritchett. A Complete Guide to
Burp Suite : Learn to Detect Application Vulnerabilities. Apress, 2021.
[5] Derek DeJonghe. NGINX Cookbook, 2nd edition. O’Reilly Media, Inc., 2022.
[6] Simon Cooper D. Brent Chapman Elizabeth D. Zwicky. Building Internet Fi-
rewalls. ISBN, 2000.
[7] Tiago Espinha & Ulrike Lechner & Daniel Mendez Fernandez. Awareness of Se-
cure Coding Guidelines in the Industry - A first data analysis. IEEE, 2020.
[8] File Inclusion Attacks. Jan. 2022.
[9] G2 Software Reviews. Jan. 2023.
[10] Getting started with OWASP zap.
[11] Grafana documentation, Loki.
[12] Karen Scarfone & Paul Hoffman. Guidelines on Firewalls and Firewal Policy.
Computer Security Division Information Technology Laboratory National Institute
of Standards et Technology Gaithersburg, MD 20899-8930, 2009.
[13] Thomas A. Johnson. CyberSecurity, Protecting Critical Infrastructures from Cyber
Attack and Cyber Warfare. Taylor & Francis Group, LLC, 2015.
[14] Lablabee’s Hardening lab - level 1. Juin 2020.
[15] Open Web Application Security Project’s official website. Jan. 2023.
[16] OWASP ModSecurity Core Rule Set.
[17] Saad Khan & Simon Parkinson & Yongrui Qin. Fog computing security : a review of
current applications and security solutions. Journal of Cloud Computing : Advances,
Systems et Applications, 2017.
[18] QUERYING PROMETHEUS.
[19] Christian Follini & Ivan Ristic. ModSecurity Handbook, second edition. ISBN, 2017.
41
Bibliographie & Webographie
[20] Rizki Agung Muzaki& Obrina Candra Briliyant & Maulana Andika Hasditama &
Hamzah Ritchi. Improving Security of Web-Based Application Using ModSecurity
and Reverse Proxy in Web Application Firewall. International Workshop on Big
Data et Information Security (IWBIS) IEEE, 2020.
[21] Server Guy Ratings. Avr. 2023.
[22] SlowHTTPTest GitHub repositury.
[23] Top 10 Web Application Security Risks. Jan. 2021.
[24] University of Michigan, Best Practices for Secure Coding. Jan. 2023.
[25] Fernando Román Muñoz & Iván Israel Sabido Cortes & Luis Javier García Villalba.
Enlargement of vulnerable web applications for testing. Springer Science+Business,
New York, 2017.
[26] Gajanan Shinje & Sanjhya S. Waghere. Web Application Vulnerabilities : Ex-
ploitation and Prevention. Proceedings of the Second International Conference on
Research in Intelligent et Computing in Engineering, 2017.
[27] Web Application FIrewall (WAF). Août 2018.
[28] What is WAF | Types, Security & Features Explained. Avr. 2023.
[29] Working with Paranoia Levels. Oct. 2021.
42
Annexe
43
Annexe
Configuration de la DVWA :
Nous avons pu heberger DVWA sur une VM ubuntu sur Azure en utilisant docker
compose et l’image prédéfinie de DVWA afin de faciliter sa mise en oeuvre. L’application
était exposée au port 8081 de la VM.
1 version : "3.8"
2 services :
3 dvwa:
4 container_name : dvwa
5 image: vulnerables /web -dvwa
6 restart : always
7 ports:
8 - 8081:80
9 volumes :
10 - ./ php.ini :/ etc/php /7.0/ apache2 /php.ini
11 -./ config .inc.php :/ var/www/html/ config / config .inc.php
Listing 3.2: Fichier YAML pour DVWA
44
Annexe
Une fois que l’application marche, nous pouvons accéder à la page de configuration
setup.php sur laquelle nous verrons les configurations nécessaires au bon fonctionnement
de la DVWA.
Puis, nous devons créer la base de données en cliquant sur créer / réinitialiser la
base de données ce qui va nous rediriger vers la page de login.php et nous pourrons y
connecter avec admin / password comme identifiants.
45
Annexe
Nous nous retrouverons alors sur la page principale de la DVWA où il existe toutes
les pages sur lesquelles nous pourrons tester les attaques sur la couche application, et
surtout, essayer de les bloquer.
46
Annexe
Comme pour la DVWA, nous avons utilisé l’image docker prédéfinie du juice shop,
afin de l’héberger sur la meme VM.
Nous avons tout simplement lancé un docker container qui était exposé au port 8080 de
la machine.
Nous avons installé et configuré nginx comme service sur notre VM, qui peut être
accéder à travers le port 80, port HTTP par défaut, et qui pointe, selon le besoin, vers
l’application qu’on veut accéder.
Voici à quoi ressembe les fichiers nginx.conf et pfetest.conf qui constituent principalement
la configuration de ce serveur :
47
Annexe
48