HSC
Cabinet de consultants en sécurité informatique depuis 1989 - Spécialisé sur Unix, Windows, TCP/IP et Internet
Mode texte : accès au contenu de la page
Hervé Schauer Consultants
Vous êtes ici : Accueil > Ressources > Brèves > Wrappeur universel de CGI
Accéder au : Site HSC des formations
Télécharger le catalogue des formations
Recherche :  
English version
   Services   
o Domaines de compétences
o Conseil & Expertise
o Prestations ISO 27001
o Audit & Évaluation
o Tests d'intrusion
o Tests de vulnérabilités (TSAR)
o Analyse Forensique
o Certification ARJEL
o Formations
o E-learning
   Conférences   
o Agenda
o Interventions passées
o Tutoriels
   Ressources   
o Index thématique
o Brèves
o Présentations
o Cours
o Articles
o Outils (téléchargement)
o Veille en vulnérabilité
   Société   
o Hervé Schauer
o Equipe
o Offres d'emploi
o Références
o Historique
o Partenariats
o Associations
   Presse et
 communication
 
 
o Newsletter HSC
o Bulletin juridique HSC
o Revue de presse
o Communiqués de presse
o Publications
   Contacts   
o Coordonnées
o Requêtes particulières
o Accès à nos locaux
o Hôtels proches de nos locaux
|>|Wrappeur universel de CGI  

par Nicolas Jombart (05/08/2001)



Wrappeur de CGI universel

Un serveur web peut être vulnérable de deux principales manières : les
attaques sur le logiciel serveur lui-même, (vulnérabilité de l'application,
du traitement des requêtes, des modules, etc.) et les attaques sur les CGI
écrits spécifiquement.
Pour se protéger, il s'agira dans le premier cas de surveiller et de mettre à 
jour lorsqu'une faille est connue, le deuxième cas s'avère parfois plus 
difficile à appréhender, surtout lorsqu'on a pas accès au code-source, ou qu'il 
est trop complexe ou impossible pour des raisons de droits à modifier.

Les scripts CGI, et de manière générale tous les programmes, doivent
considérer les informations arrivant de l'extérieur comme non-sûres et les 
vérifier (type de données, taille, ...) avant de les traiter. 
Dans notre cas, cet extérieur est l'internet via les paramètres passés 
(dans un fonctionnement normal) par un navigateur.

Le wrappeur proposé ici permet de filtrer tous les paramètres au moyens de
plusieurs éléments, qui sont renseignés dans un fichier de configuration,
paramètre par paramètre :
. La taille minimum des valeurs du paramètre
. La taille maximum
. Une expression régulière visant à vérifier le type de données

Le wrappeur est donc à appeler par l'utilisateur à la place du véritable
CGI. (i.e. il remplace le script réel au niveau de l'URL)
Il vérifiera les paramètres, et s'occupera de lancer la véritable
application, avec les paramètres ainsi vérifiés. En cas d'erreur dans la
vérification, une page d'erreur est renvoyée, facilement personnalisable.

L'utilisation d'une expression régulière permettra par exemple d'empêcher de
placer des caractères comme "%" ou "|" dans un nom de personne, deux
caractères fréquemment utilisés dans les attaques contres les CGI,
notamment ceux écrits en perl.

Un étoile précédent un paramètre signifie que celui-ci est requis, et 
causera une erreur s'il n'est pas présent ou qu'il ne convient pas à
l'expression régulière. Les autres paramètres qui enfreignent la règle
imposée par l'expression régulière sont simplement retirés et ne seront pas 
passés au script réel. 
Si un paramètre est omis dans la configuration et qu'il est renseigné dans
la requête traitée, il n'est également pas passé au script réel. Ceci peut
prévenir de remplir arbitrairement des variables.
Pour des renseignements plus complets, voir la documentation de cgi-wrapper.

Exemple de fichier de configuration pour ht://dig, le très connu moteur de
recherche :
(Référez-vous à la documentation d'htdig pour les valeurs des paramètres)

----------
# CGI wrapper script
# parameter:regexp:min_length:man_length

# nom du script réel à appeler
_script_:htsearch:0:0

# paramètres
# config : seulement "fr" ou "en" dans notre cas
config:^(fr|en)$:0:0

# mot à rechercher : seulement des lettres, des chiffres, et
# quelques caractères autorisés : - _ + \ / [ ] @ ~ et les espaces
*words:^([a-zA-Z0-9\-_\+\\\/\[\]@~ ]+)$:1:200

# méthode de recherche : seulement "and" "or" et "boolean"
# la taille 0 signifie illimité car l'expression régulière est
# suffisamment restrictive
method:^(and|or|boolean)$:0:0

# format des résultats : long ou short
format:(long|short)$:0:0

# méthode de tri : mot-clefs utilisés par htdig
sort:(score|time|title|revscore|revtime|revtitle)$:0:0

# nombre de liens trouvés par page : seulement des chiffres
matchesperpage:^([0-9]+)$:1:100

# numéro de page : seulement des chiffres
page:^([0-9]+)$:1:20

# restrict, exclude et keywords : comme le paramètre words
restrict:^([a-zA-Z0-9\-_\+\\\/\[\]@~ ]+)$:1:100
exclude:^([a-zA-Z0-9\-_\+\\\/\[\]@~ ]+)$:1:100
keywords:^([a-zA-Z0-9\-_\+\\\/\[\]@~ ]+)$:1:200
----------

Le script est téléchargeable à l'adresse suivante :
clic.

--Nicolas Jombart <Nicolas.Jombart@hsc.fr>

$Id: cgi-wrapper.tip,v 1.8 2003/11/10 19:53:23 jombart Exp $



Dernière modification le 12 novembre 2003 à 13:55:00 CET - webmaster@hsc.fr
Mentions légales - Informations sur ce serveur - © 1989-2013 Hervé Schauer Consultants