Iyas
05/05/2008, 13h29
Salam,
L'objectif de ce thread est de vous donner les premiers éléments qui vous permettront de mettre en place un serveur web sécurisé qui sera protégé des attaques de type PHP file injection, SQL injection, file disclosure etc...
Pour info, je ne rentrerai pas dans les détails techniques des installations mais vous donnerai juste le schéma directeur.
La préconisation ici est faite pour un serveur type Standalone. Nous verrons plus tard pour des architectures web du type 3 tiers etc... ;)
Lorsque j'aurais un peu de temps, j'essaierai également de mettre à votre disposition un serveur sécurisé , de la manière décrite ci dessous, accompagnés de codes PHP vulnérables.
L'objectif bien entendu sera ensuite de prendre la main sur le système et de modifier par exemple la page d'accueil.
En attendant je vous propose de lire les recommandations décrites ci dessous. Bien entendu je reste à l'écoute de toutes suggestions, remarques, etc..
-----[ Les accès aux services ]
Aujourd'hui les serveurs qui font de l'hébergement ont besoin d'au moins 3 services:
- Le service HTTP
- Le service FTP
- Le service SQL
Imaginons que le serveur héberge forumdz.com (au hasard :) ). L'utilisateur ici aura donc besoin d'un compte FTP pour déposer les documents WEB, et d'un accès à une base SQL.
La première règle ici sera d'utiliser un mot de passe différent pour l'accès FTP et pour l'accès à la base SQL. Certes pour certains d'entre vous, cela semble être une règle de base mais ce n'est pas le cas pour tout le monde...
Bien entendu chaque mot de passe devrait être composé d'au moins 8 caractères alphas numériques + 1 caractère spécial + 1 lettre majuscule.
Exemple: fJrR!9dc
-----[ Architecture système ]
---[ Service Mysqld ]
L'installation de MYSQL ici peut être faite en utilisant les ports UBUNTU.
Les seules règles MSQL à respecter devront être:
1 - Utilisation de la dernière version disponible du serveur MYSQL 5
2 - Utilisation d'un mot de passe robuste pour l'utilisateur root (8 caractères + 1 caractères spécial + 1 caractères majuscule)
3 - Accessible uniquement via LOCALHOST
Un petit plus serait l'installation de la base dans un environnement chrooté. Cette préconisation ne sera pas forcément obligatoire pour ce service.
---[ Service FTP ]
Je préconise ici l'installation du serveur PURE-FTPD qui est je pense l'un des plus sécurisé disponible sur Internet avec VSFTPD. PURE-FTPD permet également de gérer une base d'utilisateur virtuelle permettant d'éviter l'ajout de comptes systèmes locaux directement dans /etc/passwd.
Il sera également important de supprimer l'accès FTP ANONYME et de forcer le CHROOT pour chaque connexion utilisateur.
---[ Service HTTP (le plus important) ]
Je préconise ici l'installation de la dernière version d'APACHE soit la version 2.2.8 accompagnée de la dernière version de PHP5 soit la version 5.2.5.
Il sera OBLIGATOIRE d'installer ce serveur WEB dans un environnement chrooté.
Enfin, et c'est le plus important, il sera OBLIGATOIRE d'installer le module mod_security version 2.5.3 fonctionnant uniquement avec APACHE 2.2.
C'est en effet grâce à ce module que seront bloquées les attaques du type PHP files injections, SQL injections, files disclosures etc... etc...
Enfin pour une meilleur sécurité, en particulier pour du contenu web statique, les fichiers html et php devront appartenir à un utilisateur qui sera différent de l'utilisateur sous lequel tourne le serveur WEB.
Dans un hébergement mutualisé, il sera nécessaire d'utiliser suPHP, suEXEC, ou apache-mpm-ITK, qui vous permettront d'exécuter du contenu HTML sous un UID/GID pré définis dans les paramètres de chaque VIRTUALHOST
-----[ URLs ]
- Sécuriser apache
http://www.securityfocus.com/infocus/1694
- Apache Mod_Security
http://www.modsecurity.org/
- Derniers fichiers de règles pour modsecurity 2.5.3
http://downloads.prometheus-group.com/delayed/rules/
- Apache mpm-itk
http://mpm-itk.sesse.net/
- Apache suPHP
http://www.suphp.org/Documentation-Module-Installation.en.html
- Apache suEXEC
http://httpd.apache.org/docs/1.3/suexec.html
L'objectif de ce thread est de vous donner les premiers éléments qui vous permettront de mettre en place un serveur web sécurisé qui sera protégé des attaques de type PHP file injection, SQL injection, file disclosure etc...
Pour info, je ne rentrerai pas dans les détails techniques des installations mais vous donnerai juste le schéma directeur.
La préconisation ici est faite pour un serveur type Standalone. Nous verrons plus tard pour des architectures web du type 3 tiers etc... ;)
Lorsque j'aurais un peu de temps, j'essaierai également de mettre à votre disposition un serveur sécurisé , de la manière décrite ci dessous, accompagnés de codes PHP vulnérables.
L'objectif bien entendu sera ensuite de prendre la main sur le système et de modifier par exemple la page d'accueil.
En attendant je vous propose de lire les recommandations décrites ci dessous. Bien entendu je reste à l'écoute de toutes suggestions, remarques, etc..
-----[ Les accès aux services ]
Aujourd'hui les serveurs qui font de l'hébergement ont besoin d'au moins 3 services:
- Le service HTTP
- Le service FTP
- Le service SQL
Imaginons que le serveur héberge forumdz.com (au hasard :) ). L'utilisateur ici aura donc besoin d'un compte FTP pour déposer les documents WEB, et d'un accès à une base SQL.
La première règle ici sera d'utiliser un mot de passe différent pour l'accès FTP et pour l'accès à la base SQL. Certes pour certains d'entre vous, cela semble être une règle de base mais ce n'est pas le cas pour tout le monde...
Bien entendu chaque mot de passe devrait être composé d'au moins 8 caractères alphas numériques + 1 caractère spécial + 1 lettre majuscule.
Exemple: fJrR!9dc
-----[ Architecture système ]
---[ Service Mysqld ]
L'installation de MYSQL ici peut être faite en utilisant les ports UBUNTU.
Les seules règles MSQL à respecter devront être:
1 - Utilisation de la dernière version disponible du serveur MYSQL 5
2 - Utilisation d'un mot de passe robuste pour l'utilisateur root (8 caractères + 1 caractères spécial + 1 caractères majuscule)
3 - Accessible uniquement via LOCALHOST
Un petit plus serait l'installation de la base dans un environnement chrooté. Cette préconisation ne sera pas forcément obligatoire pour ce service.
---[ Service FTP ]
Je préconise ici l'installation du serveur PURE-FTPD qui est je pense l'un des plus sécurisé disponible sur Internet avec VSFTPD. PURE-FTPD permet également de gérer une base d'utilisateur virtuelle permettant d'éviter l'ajout de comptes systèmes locaux directement dans /etc/passwd.
Il sera également important de supprimer l'accès FTP ANONYME et de forcer le CHROOT pour chaque connexion utilisateur.
---[ Service HTTP (le plus important) ]
Je préconise ici l'installation de la dernière version d'APACHE soit la version 2.2.8 accompagnée de la dernière version de PHP5 soit la version 5.2.5.
Il sera OBLIGATOIRE d'installer ce serveur WEB dans un environnement chrooté.
Enfin, et c'est le plus important, il sera OBLIGATOIRE d'installer le module mod_security version 2.5.3 fonctionnant uniquement avec APACHE 2.2.
C'est en effet grâce à ce module que seront bloquées les attaques du type PHP files injections, SQL injections, files disclosures etc... etc...
Enfin pour une meilleur sécurité, en particulier pour du contenu web statique, les fichiers html et php devront appartenir à un utilisateur qui sera différent de l'utilisateur sous lequel tourne le serveur WEB.
Dans un hébergement mutualisé, il sera nécessaire d'utiliser suPHP, suEXEC, ou apache-mpm-ITK, qui vous permettront d'exécuter du contenu HTML sous un UID/GID pré définis dans les paramètres de chaque VIRTUALHOST
-----[ URLs ]
- Sécuriser apache
http://www.securityfocus.com/infocus/1694
- Apache Mod_Security
http://www.modsecurity.org/
- Derniers fichiers de règles pour modsecurity 2.5.3
http://downloads.prometheus-group.com/delayed/rules/
- Apache mpm-itk
http://mpm-itk.sesse.net/
- Apache suPHP
http://www.suphp.org/Documentation-Module-Installation.en.html
- Apache suEXEC
http://httpd.apache.org/docs/1.3/suexec.html