Securiser apache
| Fiche express | |
|---|---|
| Domaine | Durcissement Apache + PHP (hors TLS) |
| Fichier de conf | /etc/apache2/apache2.conf (ou httpd.conf)
|
| Voir aussi | Securiser apache 2 · Modsecurity · Php-fpm |
Cette page couvre le durcissement général d'un serveur Apache et de PHP : masquage de version, permissions de répertoire, contrôle d'accès, désactivation de fonctions dangereuses. Pour le durcissement spécifique du chiffrement TLS/SSL (choix des suites de chiffrement, protocoles, forward secrecy), voir Securiser apache 2.
Masquer les informations de version
Par défaut, Apache annonce sa version et le système d'exploitation dans les en-têtes HTTP et les pages d'erreur — une information utile à un attaquant pour cibler des vulnérabilités connues d'une version précise.
# apache2.conf / httpd.conf
ServerSignature Off
ServerTokens Prod
TraceEnable Off
Côté PHP, désactiver de même la bannière X-Powered-By :
; php.ini
expose_php = Off
TraceEnable Off désactive la méthode HTTP TRACE, utilisée dans
certaines attaques de type Cross-Site Tracing (XST). En complément, sur les versions d'Apache
antérieures à 1.3.34 / 2.0.55 (qui ne connaissent pas TraceEnable), le blocage
peut se faire via mod_rewrite :
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]
Exécuter Apache avec un utilisateur dédié
Vérifier que le serveur tourne avec un utilisateur système non privilégié dédié
(www-data sur Debian/Ubuntu, apache sur RHEL/CentOS), jamais en root :
User www-data
Group www-data
Contrôle d'accès aux répertoires
Empêcher le listing d'un répertoire ne contenant pas d'index :
<Directory /var/www/monsite>
Options -Indexes
Require all granted
</Directory>
(la source utilisait la syntaxe Order Allow,Deny / Allow from all,
propre à Apache 2.2 — obsolète et supprimée en Apache 2.4+, remplacée par
Require all granted, utilisée ci-dessus.)
Empêcher la lecture des fichiers .htaccess par les clients :
AccessFileName .htaccess
<FilesMatch "^\.ht">
Require all denied
</FilesMatch>
Bloquer une IP précise :
<Directory /var/www/monsite>
Require all granted
Require not ip 192.0.2.5
</Directory>
Désactiver l'exécution de scripts CGI dans un répertoire :
Options -ExecCGI
Penser aussi à désactiver les modules Apache non utilisés (voir Modules apache) — chaque module chargé est une surface d'attaque potentielle.
Chrooter Apache (mod_security)
Il est possible d'isoler le process Apache dans un chroot via le module ModSecurity (voir Modsecurity) :
SecChrootDir /chroot/apache
(à vérifier selon la version de ModSecurity — cette directive a été retirée des versions récentes du module, le chroot applicatif étant aujourd'hui plutôt délégué à des mécanismes au niveau OS/conteneur.)
Bloquer les scanners de vulnérabilités
Règle générique de blocage des requêtes contenant une URL absolue dans la chaîne de requête (signature fréquente de scanners automatisés et de tentatives de RFI) :
RewriteEngine On
RewriteCond %{QUERY_STRING} ^(.*)http(\:|%3A)(.*)$
RewriteRule .* - [F]
Durcissement PHP
; php.ini
expose_php = Off
display_errors = Off
log_errors = On
error_log = /var/log/httpd/php_scripts_error.log
file_uploads = Off ; à activer seulement si le site en a réellement besoin
allow_url_fopen = Off
allow_url_include = Off
; Contrôle des ressources (protection DoS applicative)
max_execution_time = 30
max_input_time = 30
memory_limit = 40M
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
cgi.force_redirect = On
; Limiter l'accès au système de fichiers
open_basedir = "/var/www/html/"
; Chemins de session
session.save_path = "/var/lib/php/session"
upload_tmp_dir = "/var/lib/php/session"
(directives retirées du code source par rapport à la version originale : sql.safe_mode
et magic_quotes_gpc — supprimées de PHP depuis PHP 5.4/PHP 7, leur présence dans un
php.ini moderne n'a aucun effet.)
Audit de code PHP
Outils d'analyse statique pour repérer des vulnérabilités dans du code PHP existant (état à vérifier — plusieurs de ces outils n'ont plus été maintenus depuis) :
- RIPS — analyse statique orientée vulnérabilités PHP
- RATS (Rough Auditing Tool for Security)
Voir aussi
- Securiser apache 2 — durcissement du chiffrement TLS/SSL
- Modsecurity — pare-feu applicatif, y compris le chroot évoqué ci-dessus
- Modules apache — désactivation des modules inutiles
- Php-fpm — isolation par pool utilisateur, alternative à mod_php