Apache2 : un peu de hardening

To the non-french speaker, note that you can translate the articles using the Google Trad widget situated at the bottom of all pages.


Maintenant que notre serveur Apache fonctionne plutôt bien, nous nous devons de le sécuriser. Pour cela plusieurs modifications sur la configuration peuvent être faites.

I/ Désactiver les bannières

La première chose qu’un attaquant cherche dans une phase de découvert, c’est le programme utilisé et sa version. Du coup ça serait plutôt pas mal de cacher toutes ces informations.

En effet, la bannière du service Apache2 est clairement exposée :

6.png

Pour la cacher il faudra modifier le fichier /etc/apache2/conf-enabled/security.conf et modifier ces directives

ServerTokens OS
ServerSignature On

Par celles-ci :

ServerTokens Prod
ServerSignature Off

Et la bannière n’apparaîtra plus :

7.png

II/ Désactiver les Directory Listing

Les Directory Listing sont des faiblesses des configurations qui peuvent être critiques suivant le contenu qu’elles affichent. Imaginez un fichier passwords.txt qui contient les identifiants permettant de se connecter à un site. Si le directory listing est activé alors n’importe qui pourra y accéder :

8.png

Pas cool ahah ! Du coup on va tout faire pour empêcher ce genre de comportements. Et pour cela on va créer une nouvelle directive dans le fichier de configuration générale (apache2.conf) qui s’appliquera à l’ensemble des répertoires du serveur web :

Options -Indexes

L’option -Indexes empêchera tout Directory Listing. A noter qu’il est aussi possible de désactiver le module autoindex :

a2dismod autoindex

Les deux techniques sont équivalentes.

III/Mod_Security

Le module Mod_Security est un module pour Apache qui va agir comme un firewall applicatif (WAF) afin de contrer les potentielles attaques. Pour l’installer il suffira d’entrer ces commandes :

apt install libapache2-modsecurity
systemctl restart apache2

Par défaut il n’y a pas de configuration active. Pour l’activer, il faudra se rendre dans le répertoire /etc/modsecurity et entrer cette commande :

mv modsecurity.conf-recommended modsecurity.conf

Ensuite dans le fichier de configuration  modsecurity.conf il faudra modifier la valeur :

SecRuleEngine DetectionOnly

en

SecRuleEngine On

Puis il va falloir récupérer des règles de filtrage. Actuellement il est recommandé d’utiliser les règles éditées par l’OWASP disponibles sur Github :

git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git

Dans le répertoire owasp-modsecurity/ il faudra renommer le fichier crs-setup.conf.example en crs-setup.conf. Puis modifier le fichier /etc/apache2/mods-enabled/security2.conf et y ajouter cette ligne :

Include /etc/modsecurity/owasp-modsecurity-crs/crs-setup.conf
Include /etc/modsecurity/owasp-modsecurity-crs/rules/*.conf

Attention, nous avons installé les règles dans le répertoire /etc/modsecurity/owasp-modsecurity-crs et non pas dans le répertoire /usr/share/modsecurity-crs/*.load. Il faudra donc bien commenter la ligne :

IncludeOptional /usr/share/modsecurity-crs/*.load

Capture d’écran du 2019-06-10 12-25-54.png

Dernière chose, il faudra ajouter dans le fichier de configuration d’Apache2 (apache2.conf) ces lignes :

SecRuleEngine On

Entre les balises suivantes :

<IfModule security2_module>
</IfModule>

7.png

Puis recharger le configuration du serveur :

systemctl reload apache2

A partir de maintenant « la plupart » (parce qu’il est toujours possible de bypass un WAF) de nos attaques seront bloquées :

7.png

IV/Protection anti dos : mod_evasive

Dernier module que nous verrons dans ce petit guide sur l’hardening Apache : mod_evasive. Ce module va tout simplement limiter l’impact de potentiels attaques par déni de service.

Pour l’installer il suffira d’entrer cette commande :

sudo apt install libapache2-mod-evasive

Il n’y aura plus grand chose à faire, en effet tout est déjà paramétré de base. La seule chose à faire, c’est de s’assurer que le fichier /var/log/mod_evasive existe :

8.png

et que l’utilisateur www-data y a accès en écriture :

touch /var/log/mod_evasive
chown www-data:www-data /var/log/mod_evasive

En effet c’est dans ce fichier que mod_evasive va stocker les adresses IP blacklistées. De plus il peut être intéressant d’ajouter une règle cron hebdomadaire afin de vider ce fichier disons… Toutes les semaines 🙂 !

Enfin ou oubliera pas de recharger la configuration du serveur :

systemctl restart apache2

Avec ça, votre serveur Apache2 devrait être plutôt bien sécurisé 😉 !

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l'aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s