You are on page 1of 5

PREMIER MINISTRE

S.G.D.N
Direction centrale de la scurit des systmes dinformation CERTA

Paris, le 03 janvier 2005 No CERTA-2004-INF-001-001

Affaire suivie par : CERTA

NOTE DINFORMATION DU CERTA

Objet : Scurit des applications Web et vulnrabilit de type "injection de donnes"


Conditions dutilisation de ce document : Dernire version de ce document :

http://www.certa.ssi.gouv.fr/certa/apropos.html http://www.certa.ssi.gouv.fr/site/CERTA-2004-INF-001

Gestion du document
Rfrence Titre Date de la premire version Date de la dernire version Source(s) Pice(s) jointe(s) CERTA-2004-INF-001-001 Scurit des applications Web et vulnrabilit de type "injection de donnes" 13 dcembre 2004 03 janvier 2005 Aucune

TAB . 1 Gestion du document Une gestion de version dtaille se trouve la n de ce document.

Introduction

Linjection de donnes est une technique couramment employe et largement rpandue pour un grand nombre dattaques sur les applications "web" ou les scripts CGI (Common Gateway Interface). Le but est dinsrer des donnes en entre dune fonction, dun programme ou bien dun script an de les dtourner de leur fonction dorigine. Le but de ces attaques peut tre trs vari : excution de code arbitraire distance ; SQL injection ; vol de cookies ; dbordements de mmoire.

An dviter dtre vulnrable ce type dattaque, un certains nombre de prcautions doivent tre prises.

2
2.1

Descriptions des attaques


Lutilisation des mta-caractres

Les mta-caractres sont des caractres spciaux qui, placs en entre dune ligne de commande, ne sont pas interprts comme des donnes. Ces caractres spciques ont un sens diffrent suivant le programme qui les Secrtariat gnral de la dfense nationale DCSSI SDO CERTA 51, bd de La Tour-Maubourg Tl.: 01 71 75 84 50 Web: http://www.certa.ssi.gouv.fr 75700 Paris 07 SP Fax : 01 71 75 84 70 Ml : certa-svp@certa.ssi.gouv.fr

interprtera (shell, CGI, SQL, ...). En voici une liste non-exhaustive : & ~ " # { } ( [ ] ( ) - | _ \ ^ @ \ * / . <>, ; : ! $ Lemploi de ces caractres permet un individu mal intentionn de construire des chanes malicieuses qui seront interpretes par le programme qui les traite. Il est donc important de limiter leur usage et de les ltrer.

2.2

Failles de codage HTML, PHP, ASP

Il est ncessaire deffectuer une inspection attentive du code de certaines pages HTML, des pages dynamiques (PHP ou ASP par exemple) an dchapper aux vulnrabilits de type injection. Certains lments peuvent participer linjection de code ou de scripts malicieux. Il convient de sassurer de lintgrit de ceux-ci lorsquils sont retourns : paramtres et contenus des URLs ; lments des formulaires ; cookies ; requtes vers une base de donnes.

et de manire plus gnrale, tout lment qui provient de lextrieur et qui nest pas parfaitement matris par le dveloppeur. Lune de ces faille les plus connues est le Cross Site Scripting (cf. Bulletin dinformation CERTA2002-INF-001). Cette vulnrabilit est due un dfaut de ltrage des donnes entres par un utilisateur permettant linjection de code HTML, Javascript, ... Plusieurs moyens permettent dchapper ce type de faille : le codage explicite des caractres ; Il est ncessaire de spcier le type dencodage par dfaut ISO-8859-1 an que certains caractres tels < ou > ne soient pas interprts comme des tags par certains navigateurs web. Ils seront alors remplacs respectivement par &lt et &gt. <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> ....

lidentication des caractres spciaux ; ltrage des donnes en entre ; examen des cookies.

2.3

Les attaques de type "SQL injection"

Le langage SQL (Structured Query Language) est un langage utilis pour manipuler les bases de donnes relationnelles. Il permet la manipulation (cration, extraction, modication ou bien suppression) de donnes dune base SQL. La vulnrabilit de type "SQL injection" est une technique permettant dinjecter du code de type SQL dans les champs des formulaires HTML. Ces parties sont ensuite intgres dans les requtes SQL utilises par le serveur WEB ce qui permet de contourner les contrles et davoir accs des informations normalement protges. Prenons lexemple simple dune page HTML de type formulaire permettant deffectuer une requte sur une table possdant cinq champs : un ID, un nom, un prnom, son statut et son salaire. En indiquant la valeur de lID dans le champ correspondant du formulaire, on accde aux informations de la che personnelle dun employ :

<HTML> <HEAD> 2

<TITLE> Test SQL injection <TITLE> </HEAD> <BODY> <FORM METHOD="post" action="requete.php"> <INPUT type="text" name="ID" size=20><BR> <INPUT type="submit" name="envoyer" value="envoyer"> </FORM> </BODY> </HTML>

Les paramtres inscrits dans le formulaire seront traits par la page dynamique requete.php qui inclura dans son code la ligne suivante : <?php ... $id_requete=my_sqlquery("select * from table_employe WHERE id=$ID) ... ?php> La requte SQL est alors prtablie dans la page PHP. Elle permet dexcuter la requte SQL suivante vers le serveur : SELECT * from table_employe WHERE id=xxx. Un utilisateur mal intentionn voulant connatre les informations sur lensemble des salaris sans connatre aucun ID ni mme leur format peut rentrer dans le champ ID du formulaire HTML une chane malicieusement construite : OR 1=1 --. Par ce biais, la requte SQL va tre modie : SELECT * FROM table_employe WHERE id= OR 1=1 --. Lutilisateur aura alors accs la totalit des informations (salaire dun employ sans avoir connaissance de lID). Cette faille rsulte dans le fait que la chane de caractres renseigne dans le champ ID na pas t vrie. En effet, la vrication de la longueur maximale de la chane et de lutilisation de certains mta-caractres permet, entre autres, dempcher lusage de ceux-ci pour la modication de la requte SQL initiale. Pour cette faille, le ltrage des mta-caractres peut se rvler insufsant. Effectivement, une chane de caractres de type : 1 UNION ALL SELECT salaire FROM table_employe WHERE status LIKE directeur ne comporte pas de mta-caractres et permet pourtant davoir accs des informations normalement protges. Il est donc ncessaire de ltrer galement les verbes SQL tels que : SELECT, FROM, WHERE, UNION, INSERT, INTO, DROP. Les exemples dutilisation de cette faille peuvent tre trs varis : lancement de plusieurs requtes sur une base de donnes ; lvation de privilges ; utilisation de code arbitraire distance ; lecture ou modication de cls de la base de registre.

Solution an dliminer ce type de faille

Il est ncessaire de ltrer les donnes dentre dun script, dun shell ou dune fonction an de supprimer tout ce quun utilisateur malicieux aurait put y insrer. Ce ltrage doit tre effectu au niveau du serveur et non du client pour viter que celui-ci ne soit dsactiv (ex: javascript). Pour raliser ce ltrage, certains lments peuvent tre pris en considration : suppression des mta-caractres ; contrle des paramtres passs en argument, de leur valeur, et de leur nom ; limitation de la longueur des donnes ; respect du type de donnes (chaine de caractres, date, caractres numriques).

Rappelons ici quil sagit bien dun ltrage au niveau applicatif, et que les ltrages au niveau rseau (protocole IP) ou transport (protocoles TCP, UDP, ...) ne peuvent pas protger un serveur contre ce type dattaque. De plus, mme si lapplication des correctifs du systme dexploitation et des serveurs est essentielle, elle ne suft pas pour se protger contre linjection de donnes. Le relecture du code est donc une tape essentielle dans le dveloppement des applications Web. Il existe de nombreux logiciels spciques pour le dveloppement de sites dynamiques, mais leur utilisation ncessite galement des prcautions particulires. Les logiciels de dveloppement en PHP (PHP-Nuke, phpBB, ...) fournissent des briques de base pour le dveloppement de sites. Ces briques font rgulirement lobjet de mises jour de scurit quil convient dappliquer. Il existe galement des logiciels propritaires utilisant leurs propres fonctions pour la rcupration des donnes dun formulaire et la cration de requtes vers une base de donnes. Les ltrages des donnes rcupres ne sont pas effectus par dfaut, et il appartient au dveloppeur de les mettre en uvre.

Contournement provisoire

Si un ltrage des donnes au niveau des applications nest pas possible, il convient de protger le serveur HTTP lui-mme, ou de mettre en place un dispositif de scurit extrieur au serveur. Concernant la scurit du serveur HTTP, citons par exemple le module mod_security du serveur Apache ou le service ISA (Internet Security and Acceleration) pour le serveur IIS de Microsoft (cf. section Documentation). Il est galement possible de ltrer des URLs au moyen dun relais inverse (ou reverse-proxy). Grce des expressions rgulires, seules les URLs spciquement autorises ne sont pas rejetes. Il est primordial de restreindre le champ des URLs autorises au strict minimum. Il est galement ncessaire de modier ces rgles au fur et mesure de lvolution des applications sur le serveur Web.

Documentation
Avis de scurit CERTA-2002-AVI-156 du CERTA : http://www.certa.ssi.gouv.fr/site/CERTA-2002-AVI-156/index.html Avis du CERT/CC sur linjection de code malicieux du 03 fvrier 2000 : http://www.cert.org/advisories/CA-2000-02.html Bulletin du CERT/CC sur le dveloppement dapplications Web : http://www.cert.org/tech_tips/malicious_code_mitigation.html Bulletin du CERT/CC sur le ltrage des mta-caractres : http://www.cert.org/tech_tips/cgi_metacharacters.html Note dinformation du CERTA sur le Cross-Site Scripting : http://www.certa.ssi.gouv.fr/site/CERTA-2002-INF-001/index.html Alerte du CERTA sur lexploitation de la vulnrabilit "include PHP" du 09 septembre 2003 : http://www.certa.ssi.gouv.fr/site/CERTA-2003-ALE-003/index.html 4

Site sur la scurit des portails PHP : http://www.phpsecure.info How-To Linux pour une programmation sre : http://tldp.org/HOWTO/Secure-Programs-HOWTO/index.html Un exemple de module Perl pour traiter les scripts CGI : http://stein.cshl.org/WWW/CGI/ Page de documentation du serveur HTTP Apache pour la mise en place de CGI : http://httpd.apache.org/docs-2.0/howto/cgi.html Module mod_security pour le serveur HTTP Apache : http://www.modsecurity.org Page de documentation pour la mise en place dun relais inverse avec le serveur HTTP Apache : http://www.apacheweek.com/features/reverseproxies Site Internet du serveur ISA de Microsoft : http://www.microsoft.com/isaserver

Gestion dtaille du document


13 dcembre 2004 version initiale. 03 janvier 2005 Ajout des liens et du paragraphe sur les relais inverses.

You might also like