xdxdxd123

Untitled

May 22nd, 2017
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.44 KB | None | 0 0
  1. PREMIER MINISTRE
  2. S . G . D . N
  3. Direction centrale de la sécurité
  4. des systèmes d’information
  5. CERTA
  6. Affaire suivie par :
  7. CERTA
  8. Paris, le 03 janvier 2005
  9. N o CERTA-2004-INF-001-001
  10. NOTE D’INFORMATION DU CERTA
  11. Objet : Sécurité des applications Web et vulnérabilité de type "injection de données"
  12. Conditions d’utilisation de ce document : http://www.certa.ssi.gouv.fr/certa/apropos.html
  13. Dernière version de ce document : http://www.certa.ssi.gouv.fr/site/CERTA-2004-INF-001
  14. Gestion du document
  15. Référence CERTA-2004-INF-001-001
  16. Titre Sécurité des applications Web et
  17. vulnérabilité de type "injection de données"
  18. Date de la première version 13 décembre 2004
  19. Date de la dernière version 03 janvier 2005
  20. Source(s)
  21. Pièce(s) jointe(s) Aucune
  22. T AB . 1 – Gestion du document
  23. Une gestion de version détaillée se trouve à la fin de ce document.
  24. 1 Introduction
  25. L’injection de données est une technique couramment employée et largement répandue pour un grand nombre
  26. d’attaques sur les applications "web" ou les scripts CGI (Common Gateway Interface). Le but est d’insérer des
  27. données en entrée d’une fonction, d’un programme ou bien d’un script afin de les détourner de leur fonction
  28. d’origine.
  29. Le but de ces attaques peut être très varié:
  30. – exécution de code arbitraire à distance;
  31. – SQL injection;
  32. – vol de cookies;
  33. – débordements de mémoire.
  34. Afin d’éviter d’être vulnérable à ce type d’attaque, un certains nombre de précautions doivent être prises.
  35. 2 Descriptions des attaques
  36. 2.1 L’utilisation des méta-caractères
  37. Les méta-caractères sont des caractères spéciaux qui, placés en entrée d’une ligne de commande, ne sont pas
  38. interprétés comme des données. Ces caractères spécifiques ont un sens différent suivant le programme qui les
  39. Secrétariat général de la défense nationale – DCSSI – SDO – CERTA
  40. 51, bd de La Tour-Maubourg Tél.: 01 71 75 84 50 Web: http://www.certa.ssi.gouv.fr
  41. 75700 Paris 07 SP Fax: 01 71 75 84 70 Mél : certa-svp@certa.ssi.gouv.fr
  42. interprétera (shell, CGI, SQL, ...).
  43. En voici une liste non-exhaustive:
  44. & ~ " # ’ { } ( [ ] ( ) - | ‘ _ \ ^ @ \ * / . <>,;:! $
  45. L’emploi de ces caractères permet à un individu mal intentionné de construire des chaînes malicieuses qui
  46. seront interpretées par le programme qui les traite. Il est donc important de limiter leur usage et de les filtrer.
  47. 2.2 Failles de codage HTML, PHP, ASP
  48. Il est nécessaire d’effectuer une inspection attentive du code de certaines pages HTML, des pages dynamiques
  49. (PHP ou ASP par exemple) afin d’échapper aux vulnérabilités de type injection.
  50. Certains éléments peuvent participer à l’injection de code ou de scripts malicieux. Il convient de s’assurer de
  51. l’intégrité de ceux-ci lorsqu’ils sont retournés:
  52. – paramètres et contenus des URLs;
  53. – éléments des formulaires;
  54. – cookies;
  55. – requêtes vers une base de données.
  56. et de manière plus générale, tout élément qui provient de l’extérieur et qui n’est pas parfaitement maîtrisé par
  57. le développeur.
  58. L’une de ces faille les plus connues est le Cross Site Scripting (cf. Bulletin d’information CERTA-
  59. 2002-INF-001). Cette vulnérabilité est due à un défaut de filtrage des données entrées par un utilisateur permettant
  60. l’injection de code HTML, Javascript, ...
  61. Plusieurs moyens permettent d’échapper à ce type de faille:
  62. – le codage explicite des caractères;
  63. Il est nécessaire de spécifier le type d’encodage par défaut ISO-8859-1 afin que certains caractères tels ’<’
  64. ou ’ >’ ne soient pas interprétés comme des tags par certains navigateurs web. Ils seront alors remplacés
  65. respectivement par ’&lt’ et ’&gt’.
  66. <HTML>
  67. <HEAD>
  68. <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  69. ....
  70. – l’identification des caractères spéciaux;
  71. – filtrage des données en entrée;
  72. – examen des cookies.
  73. 2.3 Les attaques de type "SQL injection"
  74. Le langage SQL (Structured Query Language) est un langage utilisé pour manipuler les bases de données re-
  75. lationnelles. Il permet la manipulation (création, extraction, modification ou bien suppression) de données d’une
  76. base SQL.
  77. La vulnérabilité de type "SQL injection" est une technique permettant d’injecter du code de type SQL dans les
  78. champs des formulaires HTML. Ces parties sont ensuite intégrées dans les requêtes SQL utilisées par le serveur
  79. WEB ce qui permet de contourner les contrôles et d’avoir accès à des informations normalement protégées.
  80. Prenons l’exemple simple d’une page HTML de type formulaire permettant d’effectuer une requête sur une
  81. table possédant cinq champs: un ID, un nom, un prénom, son statut et son salaire. En indiquant la valeur de l’ID
  82. dans le champ correspondant du formulaire, on accède aux informations de la fiche personnelle d’un employé:
  83. <HTML>
  84. <HEAD>
  85. 2
  86. <TITLE> Test SQL injection <TITLE>
  87. </HEAD>
  88. <BODY>
  89. <FORM METHOD="post" action="requete.php">
  90. <INPUT type="text" name="ID" size=20><BR>
  91. <INPUT type="submit" name="envoyer" value="envoyer">
  92. </FORM>
  93. </BODY>
  94. </HTML>
  95. Les paramètres inscrits dans le formulaire seront traités par la page dynamique requete.php qui inclura dans
  96. son code la ligne suivante:
  97. <?php
  98. ...
  99. $id_requete=my_sqlquery("select * from table_employe WHERE id=’$ID’)
  100. ...
  101. ?php>
  102. La requête SQL est alors préétablie dans la page PHP. Elle permet d’exécuter la requête SQL suivante vers le
  103. serveur:
  104. SELECT * from table_employe WHERE id=xxx.
  105. Un utilisateur mal intentionné voulant connaître les informations sur l’ensemble des salariés sans connaître
  106. aucun ID ni même leur format peut rentrer dans le champ ID du formulaire HTML une chaîne malicieusement
  107. construite: ’ OR 1=1 --.
  108. Par ce biais, la requête SQL va être modifiée:
  109. SELECT * FROM table_employe WHERE id=’’ OR 1=1 --.
  110. L’utilisateur aura alors accès à la totalité des informations (salaire d’un employé sans avoir connaissance de
  111. l’ID).
  112. Cette faille résulte dans le fait que la chaîne de caractères renseignée dans le champ ID n’a pas été vérifiée.
  113. En effet, la vérification de la longueur maximale de la chaîne et de l’utilisation de certains méta-caractères permet,
  114. entre autres, d’empêcher l’usage de ceux-ci pour la modification de la requête SQL initiale.
  115. Pour cette faille, le filtrage des méta-caractères peut se révéler insuffisant. Effectivement, une chaîne de carac-
  116. tères de type:
  117. 1 UNION ALL SELECT salaire FROM table_employe WHERE status LIKE directeur
  118. necomportepasdeméta-caractèresetpermetpourtantd’avoiraccèsàdesinformationsnormalementprotégées.
  119. Il est donc nécessaire de filtrer également les verbes SQL tels que:
  120. SELECT, FROM, WHERE, UNION, INSERT, INTO, DROP.
  121. Les exemples d’utilisation de cette faille peuvent être très variés:
  122. – lancement de plusieurs requêtes sur une base de données;
  123. – élévation de privilèges;
  124. – utilisation de code arbitraire à distance;
  125. – lecture ou modification de clés de la base de registre.
  126. 3
  127. 3 Solution afin d’éliminer ce type de faille
  128. Il est nécessaire de filtrer les données d’entrée d’un script, d’un shell ou d’une fonction afin de supprimer tout
  129. ce qu’un utilisateur malicieux aurait put y insérer. Ce filtrage doit être effectué au niveau du serveur et non du
  130. client pour éviter que celui-ci ne soit désactivé (ex: javascript).
  131. Pour réaliser ce filtrage, certains éléments peuvent être pris en considération:
  132. – suppression des méta-caractères;
  133. – contrôle des paramètres passés en argument, de leur valeur, et de leur nom;
  134. – limitation de la longueur des données;
  135. – respect du type de données (chaine de caractères, date, caractères numériques).
  136. Rappelons ici qu’il s’agit bien d’un filtrage au niveau applicatif, et que les filtrages au niveau réseau (protocole
  137. IP) ou transport (protocoles TCP, UDP, ...) ne peuvent pas protéger un serveur contre ce type d’attaque.
  138. De plus, même si l’application des correctifs du système d’exploitation et des serveurs est essentielle, elle ne
  139. suffit pas pour se protéger contre l’injection de données.
  140. Le relecture du code est donc une étape essentielle dans le développement des applications Web.
  141. Il existe de nombreux logiciels spécifiques pour le développement de sites dynamiques, mais leur utilisation
  142. nécessite également des précautions particulières.
  143. Les logiciels de développement en PHP (PHP-Nuke, phpBB, ...) fournissent des briques de base pour le déve-
  144. loppement de sites. Ces briques font régulièrement l’objet de mises à jour de sécurité qu’il convient d’appliquer.
  145. Il existe également des logiciels propriétaires utilisant leurs propres fonctions pour la récupération des données
  146. d’un formulaire et la création de requêtes vers une base de données. Les filtrages des données récupérées ne sont
  147. pas effectués par défaut, et il appartient au développeur de les mettre en œuvre.
  148. 4 Contournement provisoire
  149. Si un filtrage des données au niveau des applications n’est pas possible, il convient de protéger le serveur HTTP
  150. lui-même, ou de mettre en place un dispositif de sécurité extérieur au serveur.
  151. Concernant la sécurité du serveur HTTP, citons par exemple le module mod_security du serveur Apache ou le
  152. service ISA (Internet Security and Acceleration) pour le serveur IIS de Microsoft (cf. section Documentation).
  153. Il est également possible de filtrer des URLs au moyen d’un relais inverse (ou reverse-proxy). Grâce à des
  154. expressions régulières, seules les URLs spécifiquement autorisées ne sont pas rejetées.
  155. Il est primordial de restreindre le champ des URLs autorisées au strict minimum. Il est également nécessaire
  156. de modifier ces règles au fur et à mesure de l’évolution des applications sur le serveur Web.
  157. 5 Documentation
  158. – Avis de sécurité CERTA-2002-AVI-156 du CERTA:
  159. http://www.certa.ssi.gouv.fr/site/CERTA-2002-AVI-156/index.html
  160. – Avis du CERT/CC sur l’injection de code malicieux du 03 février 2000 :
  161. http://www.cert.org/advisories/CA-2000-02.html
  162. – Bulletin du CERT/CC sur le développement d’applications Web :
  163. http://www.cert.org/tech_tips/malicious_code_mitigation.html
  164. – Bulletin du CERT/CC sur le filtrage des méta-caractères :
  165. http://www.cert.org/tech_tips/cgi_metacharacters.html
  166. – Note d’information du CERTA sur le Cross-Site Scripting :
  167. http://www.certa.ssi.gouv.fr/site/CERTA-2002-INF-001/index.html
  168. – Alerte du CERTA sur l’exploitation de la vulnérabilité "include PHP" du 09 septembre 2003 :
  169. http://www.certa.ssi.gouv.fr/site/CERTA-2003-ALE-003/index.html
  170. 4
  171. – Site sur la sécurité des portails PHP :
  172. http://www.phpsecure.info
  173. – How-To Linux pour une programmation sûre :
  174. http://tldp.org/HOWTO/Secure-Programs-HOWTO/index.html
  175. – Un exemple de module Perl pour traiter les scripts CGI :
  176. http://stein.cshl.org/WWW/CGI/
  177. – Page de documentation du serveur HTTP Apache pour la mise en place de CGI :
  178. http://httpd.apache.org/docs-2.0/howto/cgi.html
  179. – Module mod_security pour le serveur HTTP Apache :
  180. http://www.modsecurity.org
  181. – Page de documentation pour la mise en place d’un relais inverse avec le serveur HTTP Apache :
  182. http://www.apacheweek.com/features/reverseproxies
  183. – Site Internet du serveur ISA de Microsoft :
  184. http://www.microsoft.com/isaserver
  185. Gestion détaillée du document
  186. 13 décembre 2004 version initiale.
  187. 03 janvier 2005 Ajout des liens et du paragraphe sur les relais inverses.
  188. 5
Add Comment
Please, Sign In to add comment