Une attaque par injection SQL (SQLi) est l’un des problèmes les plus menaçants pour l’« ,intégrité des données et la confidentialité aujourd’hui : elle permet à des attaquants d’accéder à des données sécurisées sans y être autorisés. Dans cet article, nous expliquons ce qu’est une injection SQL et comment fonctionnent ces attaques, avec des exemples et leurs différents types.
Qu’est-ce qu’une injection SQL ?
L’injection ou insertion SQL est une technique d’attaque malveillante qui exploite les vulnérabilités des applications reposant sur SQL. Avec une injection SQLi, les pirates injectent du code arbitraire dans des requêtes SQL, ce qui leur permet d’ajouter, de modifier et de supprimer directement des enregistrements stockés dans une base de données. Les attaques par injection SQLi peuvent toucher toute application web ou tout site web utilisant une base de données SQL, notamment MySQL, SQL Server, Oracle et d’autres.
Les pirates injectent du code arbitraire dans des requêtes SQL, ce qui leur permet d’ajouter, de modifier et de supprimer directement des enregistrements stockés dans une base de données.
Les premières discussions publiques sur les injections SQLi ont été lancées en 1998 par Jeff Forristal. Forristal a déclaré dans une interview consacrée aux injections SQLi : « Je peux complètement changer le fonctionnement de SQL. » En 2017, l’Open Web Application Security Project (OWASP) a classé l’injection parmi les menaces les plus répandues contre les applications web vulnérables.
Les pirates peuvent utiliser des attaques SQLi pour accéder sans autorisation à des données sensibles, telles que des informations personnelles, des données d’entreprise, des données clients ou des secrets commerciaux. Les attaques SQLi permettent d’exécuter des instructions SQL malveillantes capables de contrôler le serveur de base de données situé derrière une application web.
Les attaquants peuvent exploiter les vulnérabilités SQL pour contourner la sécurité des applications et passer outre l’autorisation et l’authentification d’une application web afin de récupérer les données de l’ensemble de la base de données.
En savoir plus : Les meilleurs outils de surveillance et de performance de SQL Server en 2022
Comment fonctionne une attaque par injection SQL ?
SQL (Structured Query Language) est un langage de programmation standardisé conçu pour gérer les données stockées dans des bases de données relationnelles. Une attaque SQLi consiste à injecter ou insérer une requête SQL au moyen de données d’entrée. Les commandes SQL sont injectées dans une entrée du plan de données qui attaque l’exécution de commandes SQL prédéfinies.
Une attaque SQLi consiste à injecter ou insérer une requête SQL au moyen de données d’entrée.
Pour mener une attaque SQLi, les attaquants repèrent une entrée vulnérable sur un site ou une application web. Ils exploitent ensuite cette vulnérabilité en utilisant une saisie utilisateur prenant la forme d’une requête SQL. L’attaquant exécute une commande SQL spécialement conçue comme intrusion informatique. Le code permet d’obtenir une réponse qui donne une idée précise de la structure de la base de données et autorise un accès complet à celle-ci.
Les attaques menées au moyen de SQLi peuvent varier selon le type de moteur de base de données, mais toutes les attaques SQLi reposent sur des instructions SQL dynamiques. Les injections SQLi et leurs variantes peuvent être difficiles à cerner.
Voici quelques variantes courantes de SQLi :
- SQLi fondée sur les données saisies par l’utilisateur
- SQLi fondée sur les cookies
- SQLi fondée sur les en-têtes HTTP
- SQLi de deuxième ordre
En savoir plus sur eSecurity Planet : Comment prévenir les attaques par injection SQL en 2021
Exemples d’attaques par injection SQL
Les attaques SQLi comptent parmi les techniques d’attaque les plus courantes, et les exemples ne manquent donc pas. Voici quelques tentatives célèbres utilisant SQLi.
- En 2002, Jeremiah Jacks a découvert que Guess.com était exposé à une attaque SQLi, permettant à l’attaquant de concevoir une URL spécialement élaborée pour extraire chaque nom, numéro de carte bancaire et date d’expiration de la base de données de plus de 200 000 clients.
- En 2007, le site web de Microsoft UK a été défiguré par un cybercriminel utilisant SQLi.
- En 2010, pendant les élections générales suédoises, une attaque SQLi a été tentée en écrivant des commandes SQL à la main dans le cadre d’un vote par inscription.
- En 2015, une attaque SQLi a tenté de dérober les données des clients sur les serveurs de l’opérateur britannique de télécommunications TalkTalk. L’attaquant a exploité la vulnérabilité d’un ancien portail web.
- En 2021, un attaquant a dérobé 70 gigaoctets de données sur le site d’extrême droite Gab au moyen d’une attaque SQLi. Le directeur technique de Gab, Fosco Marotto, avait introduit la vulnérabilité dans la base de code de Gab.
En savoir plus sur CIO Insight : Les principales menaces de cybersécurité pour les entreprises
Types d’injections SQL
Les SQLi peuvent être classées selon les méthodes utilisées pour accéder aux données du backend et selon leur potentiel de nuisance. Les injections SQL sont généralement réparties en trois grandes catégories :
- SQLi en bande (classique)
- SQLi inférentielle (à l’aveugle)
- SQLi hors bande
SQLi en bande (classique)
La SQLi en bande (classique) est l’un des types d’attaques SQLi les plus courants. L’attaquant utilise le même canal de communication pour lancer ses attaques et en recueillir les résultats. La SQLi en bande comporte deux sous-variantes.
- SQLi fondée sur les erreurs : Cette technique s’appuie sur les messages d’erreur générés par le serveur de base de données pour recueillir des informations sur la structure de la base de données.
- SQLi fondée sur UNION : Cette technique exploite l’opérateur SQL UNION pour combiner les résultats d’instructions SELECT et obtenir une réponse HTTP unique. L’attaquant peut ensuite exploiter les données contenues dans la réponse.
SQLi inférentielle (à l’aveugle)
La SQLi inférentielle (à l’aveugle) repose sur les réponses et les comportements du serveur ; son exécution est donc généralement plus lente, mais elle peut être plus dommageable. Un attaquant peut envoyer des charges utiles au serveur et observer ses réponses et son comportement afin de reconstituer la structure de la base de données. La SQLi inférentielle comporte deux sous-variantes.
- SQLi fondée sur les booléens : L’attaquant envoie à la base de données une requête SQL qui force l’application à renvoyer un résultat. Selon ce résultat, les informations contenues dans la réponse HTTP seront modifiées ou non.
- SQLi fondée sur le temps : Cette technique repose sur l’envoi d’une requête SQL qui force la base de données à attendre une durée déterminée, exprimée en secondes, avant de répondre. Le temps de réponse indiquera si le résultat de la requête est TRUE ou FALSE.
SQLi hors bande
C’est le type d’attaque SQLi le moins courant. La technique SQLi hors bande s’appuie sur le serveur de base de données pour effectuer des requêtes DNS ou HTTP et transmettre des données à un attaquant. Cette attaque se produit lorsqu’un attaquant ne peut pas utiliser le même canal pour lancer l’attaque et en recueillir les résultats. La SQLi hors bande constitue une solution de remplacement aux techniques inférentielles fondées sur le temps, en particulier lorsque les réponses d’un serveur sont instables.
La SQLi hors bande constitue une solution de remplacement aux techniques inférentielles fondées sur le temps, en particulier lorsque les réponses d’un serveur sont instables.
Chaque entreprise doit s’attacher à protéger ses informations précieuses contre les attaques SQLi. De nombreux outils de détection automatique sont disponibles pour tester ces vulnérabilités. Une approche en couches intégrant des stratégies centrées sur les données peut constituer la défense optimale contre les attaques SQLi : les données se concentrent sur leur propre protection, ainsi que sur celle des applications et du réseau.
À lire ensuite : Bonnes pratiques pour optimiser les performances SQL