Suite à notre mise en conformité PCI DSS, je vous propose le guide de durcissement suivant sur le composant Apache hébergé sur un socle Linux. Ce billet permet de durcir votre composant à un niveau acceptable. N’oublions pas que le durcissement dépend énormément de la surface d’attaque que l’on souhaite exposer et surtout de la localisation de celui-ci.
Le durcissement d’Apache pour un Intranet est totalement différent pour un serveur chez un hébergeur qui ne dispose pas de Firewall filtrant en frontal (Hébergeur grand public..). Dans le cas présent, je vous propose un mixe entre un service WEB sur un réseau dans une DMZ protégé par des firewalls. Ce guide n’aborde pas le durcissement de l’application qui s’appuie sur le composant Apache.
Etape N°1 : Ne pas exposer les informations sensibles du composant Apache
On commence par dissimuler les informations de version de notre composant. On édite le fichier :
#vi /etc/apache2/apache2.conf
On créer les paramètres suivants :
Etape N°2 : Filtrer les IP
On peut décider des IP qui devront accéder ou pas à votre composant Apache. Si vous êtes un commerçant de proximité…avoir des accès de Chine, Japon ou encore Australie est ce vraiment utile ? (votre marché est Européen, il est fortement recommandé de blacklister certaines IP « Russie, Chine, Brésil….« ). Attention cette solution est light. Une personne malveillante passera pratiquement toujours par un Proxy…
Pour avoir des composants Apache facile à maintenir je vous conseille fortement de créer un fichier .htaccess à la racine de votre site Web.
vi .htaccess
Exemple 1 : On autorise uniquement le réseau 10.0.100.0/24
Order Deny,Allow Deny from all Allow from 10.0.100.0/24
Exemple 2 : On autorise tout le monde sauf l’IP 100.10.0.124
Order Allow,Deny Allow from all Deny from 100.10.0.124
Une autre solution existe mais qui demande plus d’investissement dans la mise en oeuvre mais fortement recommandé pour les sites à fort trafic.
On créer un fichier de conf dans /etc/apache2/.
#vi apache_blackip.conf
On ajoute le texte suivant:
Le fichier crée active le mod_rewrite, check les hosts non autorisés et compare avec le client en cours sur le composant Apache.
Donc on va créer le fichier hosts.deny
vi /usr/local/conf/extra/hosts.deny
Il faut le remplir à la main au début…
192.168.0.0/24 - 10.0.10.125 - 195.101.10.25 -
Ne pas oublier de mettre un espace et un tiret, j’ai perdu beaucoup de temps sur le sujet et j’ai trouvé la solution sur Google après une bonne heure de recherche. le module RewriteMap est pénible pardon exigeant.
On édite le fichier de conf d’Apache pour prendre en compte ce bannissement sur l’ensemble des sites de du socle.
vi /etc/apache2/apache2.conf
On ajoute la ligne suivante:
Include etc/apache2/apache_blackip.conf
Vous disposez d’un filtrage IP dédié à votre composant Apache…mais soyons réaliste c’est une protection complémentaire à votre Firewall et à vos outils de durcissement de votre socle (Firewall locaux).
Etape N°3 : Restreindre l’accès au site Web
J’ai restreint l’accès au répertoire du site web. Dans mon cas « /monsitewebpcidss » On modifie le fichier suivant:
vi /etc/apache2/sites-available/default
On inclus les lignes suivantes:
Etape N°4 : Ne pas autoriser le parcours des répertoires
Nous continuons nos modifications dans /etc/apache2/sites-available/default. Il nous ajouter la directive suivante :
Options - Indexes
Le fichier doit ressembler maintenant à ceci:
Etape N°5 : Eviter les Includes sauvages
On continue dans notre fichier favori.
On peut aussi pour des raisons techniques autorisés les includes mais sans l’exécution de code.
Options IncludesNOEXEC
Etape N°6 Ne pas autoriser les scripts CGI
Attention de vérifier avec le métier et la DSI que vous n’avez pas un script CGI « Il y a déja des informaticiens préhistorique dans le monde du Web 2.0« .
Options -ExecCGI
Etape N°7 : Ne pas autoriser le téléchargement du fichier .htaccess
Une faille qui marche toujours…Surtout lors des MEP à l’arrache à 03h00 du matin. On inclus les lignes suivantes dans le fichier .htaccess.AccessFileName .httpdoverride <Files ~ "^\.ht"> Order allow,deny Deny from all Satisfy All </Files>
Etape N°8 : On bloque le suivi des liens symbolique du composant Apache
Dans notre fichier de conf /etc/apache2/sites-available/default, on ajoute :
Options -FollowSymLinks
Etape N°9 : Le module Modsecurity
Le module ModSecurity permet de durcir la couche applicative avant le traitement des requêtes HTTP. Il permet de détecter tous les tentatives d’inclusion (Includes), les exploits, l’antispam etc…
Pour mettre en oeuvre ce module, vous devez disposer le paquet libapache2-modsecurity. Il existe pas mal de tuto sur l’installation de celui-ci. Il faudra être vigilant car l’installation du module ne génère pas de fichier de conf par defaut.
Vous trouverez des exemples dans /usr/share/modsecurity-crs/.