Les attaques par injection SQL constituent l'une des plus anciennes vulnérabilités des applications Web : elles sont évoquées depuis la fin des années 1990, mais elles restent d'actualité. Cette explication décrit en quoi ce type d'attaques consiste, comment elles fonctionnent et comment les éviter.
Une injection SQL, parfois abrégée en SQLi, est un type de vulnérabilité dans lequel un pirate utilise un morceau de code SQL (« Structured Query Language », langage de requête structuré) pour manipuler une base de données et accéder à des informations potentiellement importantes. C'est l'un des types d'attaques les plus répandus et menaçants, car il peut potentiellement être utilisé pour nuire à n'importe quelle application Web ou n'importe quel site Web qui utilise une base de données SQL (soit la plupart).
Pour mieux comprendre ce qu'est l'injection SQL, il est important de savoir ce qu'est le langage de requête structuré (SQL). SQL est un langage de requête utilisé en programmation pour accéder, modifier et supprimer des données stockées dans des bases de données relationnelles. Étant donné que la grande majorité des sites et des applications Web reposent sur des bases de données SQL, une attaque par injection SQL peut avoir de graves conséquences sur les organisations.
Une requête SQL est une demande envoyée à une base de données pour un certain type d'activités ou de fonctions telles qu'une requête de données ou l'exécution d'un code SQL. C'est par exemple le cas lorsque les informations de connexion sont envoyées via un formulaire Web pour permettre à un utilisateur d'accéder à un site. Généralement, ce type de formulaire Web est conçu pour accepter seulement des types de données spécifiques, tels que le nom et/ou le mot de passe. Lorsque ces informations sont ajoutées, elles sont vérifiées par rapport à une base de données et, si elles correspondent, l'utilisateur est autorisé à entrer. Dans le cas contraire, l'accès est refusé.
Des problèmes potentiels peuvent survenir, car la plupart des formulaires Web ne disposent d'aucun moyen pour arrêter la saisie d'informations supplémentaires sur les formulaires. Les pirates peuvent exploiter cette faille et utiliser les boîtes de saisie du formulaire pour envoyer leurs propres demandes vers la base de données. Cela pourrait potentiellement leur permettre d'effectuer plusieurs types d'activités malveillantes, allant du vol de données sensibles à la manipulation d'informations de la base de données à leurs propres fins.
En raison de la prévalence des sites Web et des serveurs qui utilisent des bases de données, les vulnérabilités par injection SQL constituent l'un des types de cyberattaques les plus anciens et les plus répandus. Plusieurs développements au sein de la communauté des pirates ont augmenté le risque de ce type d'attaque, notamment l'apparition d'outils permettant de détecter et d'exploiter l'injection SQL. Disponibles gratuitement auprès de développeurs open-source, ces outils permettent aux cybercriminels de lancer automatiquement des attaques en seulement quelques minutes. Ils peuvent ainsi accéder à l'ensemble des tableaux ou des colonnes de la base de données d'un simple clic, avec un seul processus d'attaque.
Une attaque par injection SQL réussie peut ne présenter aucun effet. Cependant, il peut y avoir des signes extérieurs, dont voici une liste non exhaustive :
Selon la manière dont elles accèdent aux données du back-end et l'ampleur des dommages potentiels qu'elles causent, les injections SQL peuvent être réparties en trois catégories :
SQLi intrabande :
Ce type d'attaque SQLi est simple pour les pirates puisqu'ils utilisent le même canal de communication pour perpétrer des attaques et obtenir des résultats. Ce type d'attaque SQLi comporte deux sous-variantes :
SQLi inférentielle (également connue sous le nom de Blind SQL injection [injection SQL aveugle]) :
Ce type de SQLi consiste pour les pirates à utiliser des modèles de réponse et de comportement du serveur après l’envoi de données utiles pour en apprendre davantage sur sa structure. Les données ne sont pas transférées de la base de données du site Web au pirate, qui ne voit donc aucune information sur l'attaque intrabande (d'où le terme « SQLi aveugle »). L'injection SQL inférentielle peut être classée en deux sous-types :
SQLi hors bande :
Ce type d'attaque SQL se déroule selon deux scénarios :
Une attaque par injection SQL réussie peut avoir de graves conséquences sur une entreprise. En effet, une attaque par injection SQL peut :
Le coût d'une attaque par injection SQL n'est pas seulement financier : il peut également s'agir d'une perte de confiance des clients et d'une atteinte à la réputation, en cas de vol d'informations personnelles telles que les noms, adresses, numéros de téléphone et informations de cartes bancaires. Une fois que la confiance des clients est brisée, elle peut être très difficile à rétablir.
Au fil des ans, de nombreuses organisations ont été victimes de SQLi. Parmi les exemples les plus connus, citons :
Fortnite, 2019
Fortnite est un jeu en ligne qui compte plus de 350 millions d'utilisateurs. En 2019, une vulnérabilité par injection SQL a été détectée, susceptible de permettre aux pirates d'accéder aux comptes des utilisateurs. La vulnérabilité a fait l'objet d'un correctif.
Cisco, 2018
Une vulnérabilité par injection SQL a été détectée dans le gestionnaire de licences Cisco Prime en 2018. La vulnérabilité permettait aux pirates d'obtenir un accès shell aux systèmes sur lesquels le gestionnaire de licences était déployé. Cisco a depuis lors corrigé la vulnérabilité.
Tesla, 2014
En 2014, des chercheurs en sécurité informatique ont annoncé qu'ils étaient en mesure de s’introduire sur le site Web de Tesla à l'aide d'une injection SQL, obtenant des privilèges d'administration et volant les données des utilisateurs.
Les questions les plus courantes sur SQLi sont les suivantes :
Une attaque par injection SQL utilise un code SQL malveillant pour la manipulation de la base de données backend afin d'accéder à des informations privées. Ces informations peuvent inclure des données sensibles de l'entreprise, des listes d'utilisateurs ou des coordonnées des clients. SQL est l'abréviation de « structured query language » (langage de requête structuré) et l'injection SQL est parfois abrégée en SQLi.
Les attaques par injection SQL permettent aux pirates d'usurper des identités, de modifier des données existantes, de divulguer des données sur le système, de détruire des données ou de les rendre indisponibles d'une autre manière, et de devenir administrateurs du serveur de la base de données. Les attaques par injection SQL peuvent causer de graves dommages aux entreprises, notamment la perte de confiance des clients en cas de violation des données confidentielles des utilisateurs.
Étant donné qu’elles sont relativement faciles à mettre en œuvre et que la récompense potentielle est grande, les attaques par injection SQL sont relativement fréquentes. Les statistiques varient, mais d’après des estimations, les attaques par injection SQL représentent la majorité des attaques contre les applications logicielles. Selon l'Open Web Application Security Project, les attaques par injection, qui comprennent les injections SQL, représentaient le troisième risque le plus grave pour la sécurité des applications Web en 2021.
Pour les entreprises soucieuses de la prévention des injections SQL, les principes clés pour les aider à protéger les sites et les applications Web sont les suivants :
Formation du personnel : Sensibilisez l'équipe responsable de votre application Web aux risques liés aux attaques SQLi et fournissez à tous les utilisateurs la formation nécessaire en fonction de leurs missions.
Contrôlez les saisies des utilisateurs : Toute saisie utilisateur utilisée dans une requête SQL présente un risque. Traitez les saisies des utilisateurs authentifiés et/ou internes de la même manière que les données publiques jusqu'à ce qu'elles soient vérifiées. Accordez aux comptes qui se connectent à la base de données SQL uniquement les privilèges minimaux nécessaires. Utilisez les listes blanches comme pratique standard au lieu des listes noires pour vérifier et filtrer les saisies des utilisateurs.
Utilisez les dernières versions : Il est important d'utiliser la dernière version de l'environnement de développement pour optimiser la protection, car les anciennes versions peuvent ne pas disposer des fonctions de sécurité à jour. Veillez à installer les dernières versions de logiciels et correctifs de sécurité lorsqu'ils sont disponibles.
Analysez en permanence les applications Web :
Utilisez des outils complets de gestion des performances des applications. Faire une analyse régulière des applications Web afin d'identifier et de corriger les vulnérabilités potentielles avant qu'elles ne causent de graves dommages.
Utilisez un pare-feu : Un pare-feu d'application web (WAF) est souvent utilisé pour filtrer les attaques SQLi, ainsi que d'autres menaces en ligne. Un WAF s'appuie sur une liste importante et fréquemment mise à jour de signatures qui lui permettent de filtrer les requêtes SQL malveillantes. En général, la liste contient des signatures visant à lutter contre des vecteurs d'attaque spécifiques et est régulièrement corrigée en fonction des vulnérabilités nouvellement détectées.
Produits associés :
Pour en savoir plus :