L’injection SQL, c’est une forme de cyberattaque classique, connue depuis les débuts d’Internet et redoutable pour les bases de données qui en sont victimes. Comment fonctionne-t-elle et pourquoi est-elle encore si répandue ?
© Pexels
L’injection SQL : une forme d’attaque en ligne
L’injection SQL est une cyberattaque qui consiste à utiliser le langage SQL (Structured Query Langage) et à y placer un code malveillant afin de manipuler une base de données et d’accéder aux informations qu’elle comporte.
Dans son format classique, la requête en langage SQL permet d’envoyer une demande à une base de données. En pratique, elle prend majoritairement la forme d’une requête d’accès via les interfaces de connexion ou les formulaires d’accès sur les sites Internet. Théoriquement, cette demande d’information ne doit aboutir qu’à l’accessibilité d’une partie spécifique de la base de données, à condition que les informations entrées, comme le nom d’utilisateur et le mot de passe, concordent avec le protocole sécuritaire de l’application.
Ce langage standardisé permet en réalité de gérer les bases de données relationnelles et d’effectuer des opérations directement sur les informations qu’elles contiennent. Crée dans les années 1970, c’est le langage informatique utilisé par les administrateurs des bases de données, les développeurs qui écrivent des scripts d’intégration, les analystes de données qui configurent et exécutent des requêtes analytiques et les pirates informatiques qui pénètrent par ce biais dans les systèmes de stockage des entreprises. Cela en fait le langage informatique le plus répandu dans l’ingénierie web, il est appris, maîtrisé et développé par les data scientists, les analystes en business Intelligence ou encore les ingénieurs Cloud.
Du côté des cyber-criminels, l’injection SQL consiste donc à forcer une base de données peu sécurisée à exécuter des commandes non-sûres. Pour y parvenir, la méthode consiste à injecter du code malveillant directement dans la structure SQL de la base. Le pirate a alors accès à l’intégralité du contenu conservé et peut en faire ce qu’il désire.
L’injection de commandes SQL : une attaque classique
L’injection SQL sous sa forme malveillante est connue depuis les années 1990. C’est une forme de cyberattaque très simple et répandue, qui cause pourtant des dommages colossaux aux victimes.
En pratique, une attaque est lancée via le champ de saisie de l’API web (c’est ce qu’on appelle l’injection SQL). Les données saisies sont modifiées avec un fragment infime de code qui est appelé exploit et qui offre au criminel de faire croire à la base de donnée vulnérable que les entrées représentent une commande.
En répétant l’injection SQL, le pirate peut obtenir une estimation très fiable du niveau de sécurité du logiciel (ou de la plateforme). Il peut alors entrer un nom d’utilisateur et faire dévier le langage de base. Par exemple, le SQL sain traduit les entrées en une requête à la base de données : Username signifie vulgairement « donne accès aux informations concernant l’utilisateur Username». Le pirate va alors forcer la base de données à lui communiquer toutes les informations à propos de tous les utilisateurs en donnant à la base de données la commande Username OR 1=1. En choisissant des noms d’utilisateurs classiques (1 étant toujours égal à 1), le cybercriminel finira, tôt ou tard, par obtenir l’accès.
Une fois tous les accès obtenus, une attaque par injection SQL permettra de modifier, supprimer ou d’insérer des éléments dans la base de données. Elle peut également offrir une excellente occasion de générer une attaque par déni de service et donc de mettre en place un système de cyber-rançon, par exemple.
En somme, les cyberpirates utilisent trois types d’injection SQL :
- L’injection SQL in-band, la méthode la plus simple et qui permet de récupérer les résultats sur un seul serveur.
- L’injection SQL out-of-band, qui offre d’extraire le contenu de la base de données.
- L’injection SQL Inferential (ou blind) qui envoie des énoncés vrais ou faux pour déterminer la structure de la base de données. Le pirate analyse alors les réponses, qui lui permettent de repérer les vulnérabilités.
Le problème des intrusions par injection SQL persiste et s’accroît, ce qui semble paradoxal au regard de la simplicité de la méthode d’attaque. Plus de la moitié des entreprises françaises doivent lutter contre les injections SQL. Nombreuses sont celles qui considèrent que les mesures qu’elles parviennent à prendre pour s’en protéger sont en réalité insuffisantes.
En parallèle, le nombre de sites web et de serveurs qui utilisent les bases de données dans leur fonctionnement est en hausse exponentielle. On commence d’ailleurs à voir des programmes d’injection SQL automatisés et malveillants pulluler auprès des développeurs open-source. En effet, la base de données SQL est devenue la source de fonctionnement de la majorité des applications web, ce qui est une explication au succès de cette méthode d’attaque. Les bases de données contiennent des tables (des boîtes contenant des données comme des informations sur les clients, les articles à vendre et leurs prix, etc.). Lorsque ces éléments informatifs sont entrés dans une application web, le SQL est le langage qui offre à la base de données de comprendre quelle est la requête entrée et de donner à l’utilisateur les informations dont il a besoin. C’est donc un langage de choix pour la programmation API, (la plateforme de contact entre l’utilisateur qui effectue une requête et la base de données).
Les systèmes de sécurisation de ces plateformes sont généralement très faibles ou inappropriés. Si l’on reprend l’exemple du formulaire de connexion, ces applications n’ont généralement pas de moyens pour stopper la saisie des informations supplémentaires. Les pirates informatiques exploitent cette faille structurelle en utilisant les boîtes de saisie du formulaire et à terme d’accéder aux informations conservées.
Risques constants de l’injection SQL : que faire ?
Les attaques par injection SQL consistent encore en les 2/3 des cyberattaques envers les entreprises. Bien souvent, cette vulnérabilité découle d’erreurs dans l’écriture même de l’API (Application Programming Interface). Par exemple, un développeur qui éprouve des difficultés à repérer ses erreurs offre une cible face aux attaques zero-day par injection SQL. Il s’agit de tentatives réussies de trouver et d’exploiter les failles et les vulnérabilités inconnues des créateurs d’un logiciel.
Les conséquences de ces attaques sont coûteuses financièrement et pour la renommée de l’entreprise. Par exemple, en 2008 Heartland Payment Systems a subi une attaque par injection SQL et perdu près de 130 millions de dollars, ce qui en fait le plus grand vol de données de cartes de crédit de l’histoire. Les forums d’Epic Games ont également été piratés de la sorte en 2015. Ce faible niveau de sécurité web a mis en danger les informations personnelles de centaines de milliers de clients.
Pour se protéger des attaques par injection SQL, les entreprises doivent bien évidemment renforcer leur niveau de cybersécurité, mais également confier la création de leurs applications numériques à des développeurs expérimentés et faisant preuve d’un haut niveau technique (rappelons que les failles se créent à la conception de l’API, ce qui provient généralement de l’embauche de développeurs peu expérimentés ou peu formés).
L’ESGI propose à ce titre un enseignement de très haut niveau académique et technique en ingénierie du web. En cycle Mastère, les élèves peuvent choisir une spécialisation et apprendre à lutter contre les attaques par injection SQL.
L’injection SQL est une attaque connue depuis les années 1990. Pourtant, elle continue de sévir dans le milieu professionnel et les entreprises attendent de voir une nouvelle génération de développeurs capables de les en prémunir efficacement.