Ignorer le contenu principal

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.

Injection SQL – signification et définition

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).

Comment fonctionnent les attaques par injection SQL ?

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.

Manifestations d'une attaque SQLi

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 :

  • La réception d’un nombre excessif de requêtes dans un court laps de temps. Par exemple, vous pourriez constater de nombreux e-mails provenant du formulaire de contact de votre page Web.
  • Des annonces redirigeant vers des sites Web suspects.
  • Des fenêtres contextuelles et des messages d'erreur peu ordinaires. 

Types d'injection SQL

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 basée sur des erreurs : La base de données produit un message d'erreur en réponse aux actions du pirate. Le pirate recueille ensuite des informations sur l'infrastructure de la base de données à partir des données générées par ces messages d'erreur.
  • SQLi basée sur l'Union : Le pirate utilise l'opérateur SQL UNION pour obtenir les données souhaitées en fusionnant plusieurs instructions de sélection dans une seule réponse HTTP.

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 basée sur le temps : Les pirates envoient une requête SQL à la base de données, faisant attendre la base de données pendant quelques secondes avant de répondre par vrai ou faux à la requête.
  • SQLi booléenne : Les pirates envoient une requête SQL à la base de données, laissant l'application répondre en générant un résultat vrai ou faux.

SQLi hors bande : 

Ce type d'attaque SQL se déroule selon deux scénarios :

  • Lorsque les pirates ne sont pas en mesure d'utiliser le même canal pour perpétrer l'attaque et recueillir des informations ; ou,
  • lorsqu'un serveur est trop lent ou trop instable pour effectuer ces actions.

Interior of a server room. SQL injection attacks are one of the oldest web application vulnerabilities

Impact des attaques par injection SQL

Une attaque par injection SQL réussie peut avoir de graves conséquences sur une entreprise. En effet, une attaque par injection SQL peut :

  • Exposer des données sensibles : Les pirates peuvent récupérer des données, ce qui risque d'exposer les données sensibles stockées sur le serveur SQL.
  • Compromettre l'intégrité des données : Les pirates peuvent modifier ou supprimer les informations de votre système.
  • Compromettre la vie privée des utilisateurs : En fonction des données stockées sur le serveur SQL, une attaque peut exposer les informations sensibles des utilisateurs, telles que les adresses, les numéros de téléphone et les détails des cartes bancaires.
  • Donner à un pirate un accès en tant qu’administrateur à votre système : si un utilisateur de la base de données dispose de privilèges d'administrateur, un pirate peut accéder au système à l'aide d'un code malveillant.
  • Donner à un pirate un accès général à votre système : Si vous utilisez des commandes SQL faibles pour vérifier les noms d'utilisateur et les mots de passe, un pirate pourrait accéder à votre système sans connaître les informations d'identification d'un utilisateur. À partir de là, un pirate peut faire des ravages en accédant à des informations sensibles et en les manipulant.

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.

Exemples d'injection SQL

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.

FAQ sur les attaques par injection SQL

Les questions les plus courantes sur SQLi sont les suivantes :

Qu'est-ce qu'une attaque par injection SQL ?

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.

Quels sont les effets d'une injection SQL ?

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.

Les attaques par injection SQL sont-elles fréquentes ?

É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.

Comment éviter les attaques par injection SQL ?

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 :

Qu'est-ce qu'une injection SQL ? Définition et explication

L'injection SQL permet aux pirates d'obtenir un accès non autorisé à des bases de données et de causer des préjudices aux entreprises. Découvrez le fonctionnement d'une injection SQL.
Kaspersky Logo