Injection SQL : comment s'en protéger ?

novembre 9, 2022

Une injection SQL est une technique d’injection de code utilisée par les cybercriminels pour accéder à votre base de données back-end et en modifier les informations. Comme il s’agit d’une technique de piratage courante, il est primordial de protéger votre entreprise contre ce risque. D’après l’OWASP (Open Web Application Security Project), les attaques par injection, qui incluent les injections SQL, représentaient le troisième risque de sécurité le plus grave pesant sur les applications web en 2021. Sur l’ensemble des applications testées, 274 000 occurrences d’injection ont été détectées.

Pour vous protéger des attaques par injection SQL, vous devez comprendre comment elles se produisent afin de pouvoir appliquer de bonnes pratiques, tester les vulnérabilités et envisager l’achat d’un logiciel capable d’empêcher activement ces attaques.

Quel est l’impact d’une attaque par injection SQL réussie ?

Les attaques par injection SQL peuvent avoir des répercussions négatives majeures sur une entreprise. Les entreprises ont accès à des données professionnelles sensibles ainsi qu’à des informations clients privées, autant d’informations confidentielles souvent ciblées par les attaques par injection SQL. Lorsqu’un utilisateur malveillant parvient à mener à bien une attaque par injection SQL, les conséquences pour l’entreprise peuvent prendre différentes formes :

  • Exposition des données sensibles de l’entreprise. L’injection SQL permet aux cyberadversaires de récupérer et de modifier des données, ce qui risque d’exposer des données d’entreprise sensibles stockées sur le serveur SQL.
  • Compromission de la vie privée des utilisateurs. En fonction des données stockées sur le serveur SQL, une attaque peut exposer les données personnelles des utilisateurs, telles que des numéros de cartes de crédit.
  • Obtention par les cyberpirates d’un accès administrateur à votre système. Lorsque l’utilisateur d’une base de données dispose de privilèges administrateur, les cyberadversaires peuvent obtenir un accès au système en utilisant un code malveillant. Pour vous protéger contre ce type de vulnérabilité, vous devez créer des comptes d’utilisateur de base de données avec le moins de privilèges possible.
  • Obtention par les cyberpirates d’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, vos cyberadversaires pourraient obtenir un accès à votre système, même sans connaître les identifiants des utilisateurs. Dotés d’un tel accès général à votre système, les cyberattaquants peuvent causer des dommages supplémentaires en accédant et en manipulant des informations sensibles.
  • Compromission de l’intégrité de vos données. En pratiquant l’injection SQL, les cyberadversaires peuvent modifier ou supprimer des informations au sein de votre système.

Dans la mesure où les conséquences d’une attaque par injection SQL peuvent être graves, il est important que les entreprises prennent des mesures de prévention et limitent les vulnérabilités avant qu’une attaque survienne. Pour ce faire, elles doivent comprendre comment une attaque par injection SQL se produit afin de savoir contre quoi lutter.

2024 CrowdStrike Global Threat Report: résumé

Le Global Threat Report 2024 de CrowdStrike s’appuie sur les observations des experts de l’équipe CrowdStrike spécialisée dans la lutte contre les cyberadversaires. Il passe en revue les thèmes, tendances et événements marquants du paysage des cybermenaces.

Télécharger

Comment se déroule une attaque par injection SQL ?

Le SQL (Structured Query Language) est un langage de programmation conçu pour les données stockées dans un système de gestion des flux de données relationnelles. Les requêtes SQL exécutent des commandes visant notamment à récupérer et à mettre à jour des données, ainsi qu’à supprimer des registres. Pour exécuter ces commandes malveillantes, le cyberattaquant peut insérer du code malveillant dans des chaînes envoyées au serveur SQL à des fins d’exécution. Les utilisateurs malveillants peuvent lancer une attaque de plusieurs manières, mais les champs de saisie à texte libre des formulaires constituent des vulnérabilités courantes des applications web ou des pages web.

Une bonne compréhension des cybermenaces permettra aux entreprises de mieux se préparer aux attaques et de corriger les vulnérabilités. Passons en revue les différents types d’attaques par injection SQL, qui relèvent de trois catégories : l’injection SQL intrabande (in-band SQL injection), l’injection SQL inférentielle (inferential SQL injection) et l’injection SQL hors bande (out-of-band SQL injection).

Injection SQL intrabande

L’injection SQL intrabande est l’attaque la plus répandue. Elle consiste, pour l’utilisateur malveillant, à utiliser un seul et même canal de communication pour lancer l’attaque et recueillir les résultats. Les techniques suivantes figurent parmi les types les plus courants d’attaques par injection SQL intrabande :

  • Injection SQL basée sur les erreurs. Dans ce type d’attaque, le cyberattaquant collecte des informations sur la structure de la base de données en exécutant une commande SQL qui génère un message d’erreur de la part du serveur de la base de données. Si les messages d’erreur sont utiles au moment de la création d’une application web ou d’une page web, ils peuvent en revanche se transformer en vulnérabilité par la suite dans le sens où ils exposent des informations sur la base de données. Pour prévenir cette vulnérabilité, vous pouvez désactiver les messages d’erreur dès lors que l’application web ou la page web a été mise en ligne.
  • Injection SQL basée sur l’opérateur UNION. Dans ce cas-ci, le cyberattaquant utilise l’opérateur SQL UNION pour combiner plusieurs instructions données et renvoyer une réponse HTTP unique. Cette méthode lui permet d’extraire des informations de la base de données. Elle constitue le type d’injection SQL le plus répandu et sa neutralisation requiert davantage de mesures de sécurité que l’injection SQL basée sur les erreurs.

Injection SQL inférentielle

Dans le cas de l’injection SQL inférentielle, également appelée injection SQL aveugle, la base de données du site web ne transfère pas de données à l’attaquant comme dans le cadre de l’injection SQL intrabande. Ici, l’utilisateur malveillant obtient des informations sur la structure du serveur en envoyant des charges actives de données et en observant la réponse. Les attaques par injection SQL inférentielle sont moins fréquentes que celles par injection SQL intrabande, car leur exécution est plus longue. Il existe deux types d’attaques par injection SQL inférentielle, basées sur les techniques suivantes :

  • Injection booléenne. Le cyberattaquant envoie une requête SQL à la base de données et observe le résultat. Il peut déterminer si le résultat est vrai ou faux selon que les informations de la réponse HTTP ont été modifiées ou non.
  • Injection basée sur le temps. Le cyberattaquant envoie une requête SQL à la base de données et force cette dernière à attendre un nombre déterminé de secondes avant de renvoyer la réponse. Il peut déterminer si le résultat est vrai ou faux en fonction du nombre de secondes qui s’est écoulé avant l’envoi de la réponse. Par exemple, un cyberpirate peut utiliser une requête SQL exigeant une temporisation de la réponse si la première lettre du nom de la base de données est « A ». De cette façon, si la réponse arrive avec un retard, le cyberattaquant saura que la requête est vraie.

Injection SQL hors bande

L’injection SQL hors bande est l’attaque la moins répandue. Elle consiste, pour l’utilisateur malveillant, à utiliser des canaux de communication différents pour lancer l’attaque et recueillir les résultats. Cette méthode est utilisée lorsque le serveur est trop lent ou instable pour utiliser l’injection SQL inférentielle ou l’injection SQL intrabande.

Comment protéger votre base de données contre l’injection SQL ?

Les attaques par injection SQL représentent un risque de cybersécurité largement répandu, mais il existe des solutions pour protéger votre base de données. En appliquant des mesures de sécurité générales et en respectant les bonnes pratiques, les entreprises peuvent renforcer leur protection contre ce type d’attaque.

Mesures de sécurité pour protéger votre base de données contre l’injection SQL

Lors du développement de votre site web ou de votre application web, vous pouvez intégrer des mesures de sécurité qui limitent votre exposition aux attaques par injection SQL. Par exemple, les mesures de sécurité suivantes sont la manière la plus efficace de prévenir les attaques par injection SQL :

  • Utilisation d’instructions préparées et de requêtes paramétrées. Lorsqu’un développeur utilise des requêtes paramétrées, il doit définir l’intégralité du code SQL, puis passer chaque paramètre. Il est donc impossible pour un attaquant de modifier l’objet de la requête ultérieurement.
  • Utilisation de procédures stockées. Lorsqu’un développeur utilise une procédure stockée, il définit des instructions SQL à l’aide des paramètres stockés dans la base de données et appelés depuis l’application. Cette technique, qui constitue une alternative à l’utilisation d’instructions préparées, est tout aussi efficace contre les attaques par injection SQL.
  • Utilisation de la validation des saisies dans la liste d’autorisation. Dans certains cas, les développeurs peuvent définir une valeur attendue, comme le nom autorisé d’un tableau ou d’une colonne. Cette validation permet d’empêcher l’ajout d’une saisie utilisateur non approuvée à une requête.
  • Application de l’échappement aux saisies utilisateur avant leur intégration à une requête. Cette technique consiste à appliquer l’échappement de caractères aux saisies utilisateur afin que celles-ci ne soient pas confondues avec le code SQL du développeur. Les autres méthodes décrites ici sont préférables à celle-ci dans la mesure où elles offrent une meilleure protection. Cependant, les entreprises recourent parfois à cette technique lorsqu’elles modernisent le code d’ancienne génération si la validation des saisies utilisateur s’avère trop onéreuse.

En plus d’intégrer des mesures de sécurité lors du développement et de la modernisation d’un site web ou d’une application web, vous pouvez utiliser un logiciel pour surveiller activement les menaces de sécurité. Des outils tels que les logiciels de détection et d’intervention managées et de Threat Hunting managé peuvent vous aider à mettre en place des mesures de prévention efficaces. Ces outils peuvent également vous aider à bloquer les menaces en cas d’attaque.

Bonnes pratiques et pièges à éviter pour protéger votre base de données contre l’injection SQL

Outre les mesures de sécurité présentées ci-dessus, les développeurs et les administrateurs peuvent appliquer les bonnes pratiques suivantes pour limiter l’impact et la fréquence des cyberattaques :

  • Installer les versions des logiciels et les correctifs de sécurité les plus récents dès leur publication
  • Octroyer les privilèges minimums requis aux comptes qui se connectent à la base de données SQL
  • Ne pas utiliser de comptes de base de données partagés pour différents sites web et applications web
  • Utiliser la validation pour tous les types de saisies utilisateur, y compris les menus déroulants
  • Configurer une procédure de signalement des erreurs plutôt que d’envoyer des messages d’erreur au navigateur web client
  • De manière générale, les entreprises doivent éviter d’utiliser des comptes partagés afin d’empêcher les cyberattaquants d’obtenir des accès supplémentaires en cas de compromission d’un compte. Elles doivent également éviter d’envoyer des messages d’erreur depuis la base de données au navigateur web client, car ces informations peuvent permettre aux cyberattaquants de comprendre certains détails techniques de la base de données.

Comment identifier les vulnérabilités à l’injection SQL ?

Il est essentiel que vous identifiiez les vulnérabilités à l’injection SQL de vos applications et sites web afin de pouvoir résoudre tout problème éventuel. Les attaques par injection SQL sont l’une des cyberattaques les plus courantes et peuvent avoir de graves conséquences pour les entreprises. Celles-ci doivent dès lors effectuer régulièrement des tests afin d’identifier les vulnérabilités de leur environnement à l’injection SQL.

Idéalement, les entreprises devraient réaliser des tests lors de toute mise à jour du code d’une application ou d’un site web. Cela leur permettrait en outre d’identifier les problèmes susceptibles d’avoir été introduits lors d’autres modifications du code. Pour tester les vulnérabilités à l’injection SQL, les entreprises peuvent utiliser des techniques d’injection SQL manuelles ou un logiciel d’analyse de la sécurité web pour automatiser le processus.

Test manuel

Lorsque vous procédez à un test manuel des vulnérabilités à l’injection SQL, vous tentez en fait d’utiliser manuellement l’injection SQL dans un champ de saisie utilisateur pour voir si la validation des saisies fonctionne. Cette méthode peut s’avérer chronophage en fonction du nombre de champs à tester. En outre, tester tous les éléments de votre site ou application web peut également se révéler compliqué. Des vulnérabilités peuvent dès lors échapper à votre vigilance lors de ce test.

Analyse automatique

L’analyse automatique afin de détecter les vulnérabilités à l’injection SQL fait appel à un logiciel d’analyse de la sécurité web pour identifier et résoudre les problèmes. Cette technique est plus rapide et plus complète que le test manuel. Dès lors qu’une vulnérabilité est détectée, le logiciel renvoie les résultats, y compris des informations sur l’URL et le paramètre concerné. En automatisant ce processus de test à l’aide d’un outil logiciel, vous gagnez du temps à chaque mise à jour du logiciel.

Comment CrowdStrike vous protège-t-il des autres menaces ?

L’injection SQL étant une technique de piratage courante aux conséquences potentiellement graves, il est important de protéger votre entreprise contre ce type de menace. En appliquant les bonnes pratiques et en testant régulièrement votre environnement à la recherche des vulnérabilités, vous limitez le risque d’être victime d’une attaque par injection SQL. Il est toutefois conseillé d’investir dans une solution de cybersécurité complète telle que la plateforme CrowdStrike Falcon®. Les solutions de cybersécurité peuvent vous aider à renforcer votre niveau de sécurité contre les attaques par injection SQL et de nombreux autres risques de cybersécurité.

La plateforme Falcon est hautement modulaire et extensible, ce qui vous permet de choisir la protection dont vous avez besoin. Son architecture cloud vous permet de protéger votre entreprise sans impact sur la vitesse et les performances. La plateforme CrowdStrike peut vous aider à sécuriser les ressources les plus critiques de votre entreprise, à savoir les endpoints, les workloads cloud, les identités et les données. Pour découvrir comment CrowdStrike peut vous aider à protéger votre entreprise contre une attaque par injection SQL, lisez notre article au sujet de la neutralisation d’une campagne d’injection SQL par les équipes de Threat Hunting et de cyberveille de CrowdStrike.