Injection SQL : Comment ça marche et comment l’éviter

Lukas Grigas
Rédacteur en cybersécurité
sql injection
  • Les pirates peuvent-ils prendre le contrôle d’un site Web tout entier avec seulement quelques lignes de code ? Une injection SQL peut permettre à une personne de saccager votre base de données et de voler tout ce qui s’y trouve, des identifiants de connexion d’administration aux numéros des cartes bancaires des clients.

Si votre site ou votre application présente quelques faiblesses dans sa programmation, un pirate peut extraire toutes sortes d’informations qui n’étaient absolument pas destinées à être divulguées.

Qu’est-ce qu’une attaque par injection SQL et comment l’éviter ?

Qu’est-ce que le SQL ?

Le SQL est un langage de codage utilisé principalement pour extraire des informations de bases de données en ligne. Il est facile à utiliser, car il est intuitif et utilise des mots anglais de base pour les commandes.

Imaginons par exemple qu’un client fasse des achats en ligne et tape le mot « chaussures » dans la barre de recherche d’une boutique. Lorsque la recherche est lancée, un processus simple se met en place en arrière-plan.

Le site Web utilisera un système de gestion de base de données (SGBD) qui, à son tour, utilisera une forme de SQL. Lorsque le client recherche « chaussures », une chaîne de code est créée dans ce langage. C'est la requête SQL.

Cette requête contiendra certaines spécifications, telles que l’endroit où chercher et ce qu’il faut extraire. En voici un exemple :

SELECT name, description FROM products WHERE category = “shoes”

Lorsque cette requête parvient à la base de données, le système SGBD lit la requête SQL et sait qu’il doit chercher dans la table « produits ». Il peut alors récupérer les noms et les descriptions des articles de la catégorie « chaussures » et renvoyer ces données au client. S’il trouve dix objets, il enverra dix noms et descriptions.

Il s’agit d’une opération simple. C'est là que les ennuis commencent.

Qu’est-ce que l’injection SQL ?

Pour réaliser une injection, un pirate tentera de glisser un codage supplémentaire dans la chaîne SQL. C’est ce qui s’appelle l’injection.

Cela ne fonctionne pas toujours, bien sûr. Le SGBD du site lit certains caractères comme des commandes de codage (SELECT, par exemple) et d’autres comme des mots et des caractères normaux (« chaussures » dans ce scénario).

Si un site a été programmé correctement, la recherche d’une commande de codage n’entraînera pas d’injection. Le système lira en revanche la commande comme un ensemble de caractères qu’il ne reconnaît pas et renverra un message du type « aucun élément trouvé ».

Cependant, si le système n’a pas été sécurisé, il lira les caractères injectés comme une véritable commande SQL. C’est là que les choses peuvent mal tourner.

Plutôt que d’utiliser le mot clé « chaussures », le pirate peut rechercher des commandes SQL spécifiques. Lorsque la chaîne est formée et envoyée à la base de données, le SGBD lit le mot clé recherché comme une commande et l’exécute en conséquence.

Les dégâts

En utilisant une technique appelée injection SQL aveugle, un pirate peut rapidement découvrir exactement quel SGBD est utilisé en arrière-plan. Il pourra alors commencer à utiliser le langage SQL approprié.

S’il recherche les bons termes de codage, il peut obliger le SGBD à renvoyer une liste complète de toutes les tables de données qu’il contient. Fort de ces informations, il peut accéder à chaque tableau et en extraire les informations souhaitées. S’il trouve une table « utilisateur », il peut causer de sérieux dommages.

UNION est une commande de codage qui permet d’ajouter une requête supplémentaire à la requête principale. Les résultats de cette sous-requête s’afficheront sous les résultats de la requête principale.

Un pirate pourrait écrire quelque chose comme ceci dans la barre de recherche :

“shoes” UNION (SELECT username, password FROM users);--

En arrière-plan, une chaîne SQL serait générée et pourrait ressembler à ceci :

SELECT name, description FROM products WHERE category = "shoes" UNION (SELECT username, password FROM users);--

Désormais, en plus de récupérer les résultats pour le mot clé « chaussures », le pirate pourra également consulter tous les noms d’utilisateur et mots de passe de la table « Utilisateurs ».

Les mots de passe seront probablement hachés, mais il ne faudra pas longtemps à un pirate pour les déchiffrer. S’il parvient à déterminer quels noms d’utilisateur appartiennent aux administrateurs, il peut utiliser un logiciel de force brute pour s’introduire rapidement dans le compte concerné et obtenir un accès administrateur à l’ensemble de l’application.

Les types d’injections SQL

Pour vous aider à renforcer vos défenses, nous penchons-nous sur les différents types d’attaques par injection SQL pour mieux comprendre l’environnement de cette cybermenace.

1. Injection SQL classique

L’injection SQL classique, également connue sous le nom d’injection SQL in-band, est la forme la plus répandue de cette cyberattaque. En glissant un code SQL malveillant dans les champs de saisie de l’utilisateur, les pirates obtiennent un accès non autorisé pour manipuler, supprimer ou même exécuter des commandes administratives sur la base de données concernée. Il est essentiel d’être conscient de cette menace courante et de prendre des mesures pour la prévenir.

2. Injection SQL à l’aveugle

Les attaques par injection SQL à l’aveugle, comme leur nom l’indique, obligent les attaquants à travailler à l’aveugle, sans avoir le luxe d’accéder directement à la sortie de la base de données. Dans la plupart des cas, les attaquants qui se livrent à une attaque SQL à l’aveugle s’appuient sur une série de requêtes vraies et fausses pour recueillir des informations. Ce mode de fonctionnement permet aux pirates de déduire le schéma et le contenu de la base de données, pièce par pièce.

3. Injection SQL error-based (basée sur les erreurs)

Les injections SQL error-based exploitent les messages d’erreur de la base de données pour révéler des données sensibles. Les auteurs de ces attaques soumettent intentionnellement des requêtes SQL mal formées, ce qui amène la base de données à générer des messages d’erreur contenant des informations précieuses. En analysant de près ces messages, les cyberescrocs peuvent en apprendre davantage sur le fonctionnement interne du système et identifier ses points faibles potentiels.

4. Injection SQL temporisée

Les injections SQL temporisées, ou time-based, sont un type plus spécifique d'attaque par injection SQL à l’aveugle. Les attaquants qui se livrent à des attaques SQL temporisées se concentrent sur le temps de réponse de la base de données pour en déduire des informations. En soumettant des requêtes SQL qui entraînent des retards dans la réponse, ils peuvent découvrir des détails spécifiques sur la base de données en se basant sur le temps nécessaire pour recevoir une réponse.

5. Injection SQL out-of-band

Les attaques par injection SQL out-of-band utilisent un canal de communication distinct pour envoyer et recevoir des données, plutôt que le canal direct entre l’application et la base de données. Cette méthode d’attaque moins courante, mais très efficace, permet aux attaquants de contourner certaines mesures de sécurité, telles que les pare-feu et les systèmes de détection d’intrusion, afin d’atteindre leurs objectifs malveillants.

Symptômes d’une attaque par injection SQL

La gestion d’une attaque par injection SQL peut s’avérer difficile, car les signes d’une intrusion ne sont pas toujours évidents. Cependant, il existe souvent quelques signaux d’alarme qui indiquent que quelque chose ne va pas. Il s’agit notamment des symptômes suivants :

  • Des fenêtres pop-up et des messages d’erreur inhabituels.

  • Des publicités qui vous redirigent vers des sites Web suspects et potentiellement malveillants.

  • La réception de très nombreuses requêtes en très peu de temps (par exemple, recevoir un grand nombre d’e-mails à partir de votre formulaire de contact).

Quels sont les risques liés à une injection SQL ?

Les attaques par injection SQL constituent des menaces pour la sécurité de l’organisation concernée. Une fois que les cyberescrocs ont réussi à exploiter une faille d’injection SQL, ils peuvent :

  • Ajouter, supprimer ou modifier le contenu de la base de données.

  • Écrire de nouveaux fichiers dans la base de données.

  • Lire le code source du serveur de base de données.

De telles possibilités d’accès peuvent même conduire à une prise de contrôle complète des bases de données et du serveur Web, ce qui, comme vous pouvez l’imaginer, peut s’avérer désastreux.

Comment prévenir une injection SQL

Une injection SQL réussie peut entraîner des problèmes gravissimes. Un pirate peut voler des mots de passe et des données de paiement, divulguer des données d’utilisateur en ligne et supprimer des données essentielles. Un événement comme celui-ci peut détruire de manière irréversible la confiance des consommateurs. Comment l’éviter ?

  • Validation des entrées

    Si vous intégrez un processus de validation des entrées dans le codage du backend de votre site, la menace peut être réduite considérablement. Vous pouvez par exemple créer une liste de caractères acceptés et programmer le SGBD pour qu’il reconnaisse un mot clé qui ne figure pas dans la liste. Si un pirate « recherche » une commande de codage, votre système la compare à la liste des autorisations. S’il n’obtient pas de correspondance, il n’exécute pas le code.

  • Requêtes préparées

    La création de requêtes préparées est probablement la meilleure stratégie. Un site vulnérable crée une nouvelle chaîne SQL à chaque fois que le pirate effectue une recherche, ce qui n’est pas le cas avec une requête préparée. Lorsque vous programmez le backend de votre site, créez vos modèles SQL à l’avance, avec un point d’interrogation à la place du mot clé. Le SGBD peut être programmé pour lire ce point d’interrogation comme n’importe quelle donnée contenue dans la barre de recherche, mais la requête elle-même est préparée à l’avance. Cela réduit considérablement le risque qu’une commande SQL malveillante atteigne la base de données.

  • Séparation des données

    Plus vos données sont séparées, moins un pirate informatique peut s’en emparer en une seule attaque. Dans l’exemple de la boutique en ligne dont nous avons parlé plus haut, le problème de la faiblesse du langage SQL est aggravé par le fait que les données des utilisateurs sont conservées dans la même base de données que les listes de produits de base. La séparation des différents types d’informations dans des bases de données et des serveurs distincts limite l’ampleur des dégâts produits par une attaque SQL.

  • Utilisation des dernières technologies

    Assurez-vous d’utiliser la dernière version des outils de développement pour vous assurer une sécurité maximale. Les anciennes technologies de développement web peuvent manquer de protection SQL ou présenter des vulnérabilités potentielles que des acteurs malveillants peuvent exploiter. Veillez à mettre à jour les composants logiciels que vous êtes susceptible d’utiliser pour le développement, car les mises à jour sont conçues pour corriger les bugs et les problèmes de sécurité potentiels.

Meilleurs outils de détection des injections SQL (SQLi)

Il existe de nombreux outils de détection des injections SQL, et il peut être difficile de trouver le meilleur. Comme pour toute technologie, certains outils brillent plus que d’autres. Quels sont donc les éléments qui permettent aux meilleurs d’entre eux de se démarquer ? Voyons ensemble quelques-uns des meilleurs outils d’injection SQL et ce qui les différencie les uns des autres.

  • SQLMap : Un outil de test de pénétration open source utilisé pour détecter les vulnérabilités d’injection SQL dans les applications Web. Il est largement utilisé par les professionnels de la sécurité, car il est très personnalisable et prend en charge différents systèmes de gestion de base de données, notamment Microsoft SQL Server et Oracle.

  • Injection jSQL : Un autre outil open source très utilisé, conçu pour tester les applications Web. Cet outil contribue à améliorer la cybersécurité en permettant aux professionnels de l’informatique et aux pirates éthiques de simuler des attaques, d’identifier les vulnérabilités et de comprendre l’impact potentiel de ces vulnérabilités.

  • Imperva : La société Imperva propose un outil appelé Imperva SQL Injection Protection qui aide les entreprises à protéger leurs bases de données contre les attaques par injection SQL. Il assure une surveillance en temps réel et bloque les activités malveillantes tout en fournissant des informations et des rapports détaillés sur les tentatives d’attaques, ce qui aide les entreprises à comprendre et à traiter rapidement les risques liés à SQL.

  • AppSpider : AppSpider est un outil robuste de test de la sécurité des applications Web qui permet de détecter les injections SQL. Grâce à son interface intuitive, AppSpider permet aux utilisateurs de gérer et de surveiller efficacement les vulnérabilités, en proposant des rapports détaillés et des recommandations de remédiation.

  • Acunetix : Un autre outil populaire d’injection SQL qui aide les organisations à auditer leurs applications Web et à identifier les vulnérabilités d’injection SQL. Ses capacités d’analyse complètes (partiellement assistées par l’apprentissage automatique) et son interface conviviale en font une solution essentielle pour une sécurité Web solide.

Ajout de couches de sécurité supplémentaires à votre entreprise

L’injection SQL est sans conteste une menace informatique majeure, mais elle n’est qu’une pièce d’un puzzle de cybersécurité bien plus vaste. Et si les outils d’injection SQL sont excellents pour identifier et corriger les vulnérabilités SQL, ils ne s’attaquent qu’à ce problème spécifique.

Qu’en est-il des autres problèmes, tels que les mots de passe faibles ou les problèmes de gestion de l’accès des utilisateurs ? Les outils d’injection SQL ne les prennent pas en charge. Pour une stratégie de sécurité efficace, il faut soit des outils différents pour chaque problème, soit un outil capable de s’attaquer à plusieurs menaces à la fois.

C’est là que NordPass entre en jeu. Bien qu’il soit largement reconnu comme un gestionnaire de mots de passe chiffrés de bout en bout, NordPass ne se contente pas de veiller à ce que vos employés utilisent des identifiants de connexion forts et sécurisés. Il permet à votre organisation de gérer l’accès aux ressources sensibles et de vérifier si des données de l’entreprise ont été exposées lors d’une violation de données.

NordPass propose des fonctionnalités conçues pour relever divers défis en matière de cybersécurité, mais plutôt que de nous croire sur parole, faites-en l’expérience vous-même. Commencez une période d’essai gratuite de 14 jours et découvrez comment NordPass parvient à renforcer la sécurité de votre organisation.

S’abonner aux actualités de NordPass

Recevez les dernières actualités et astuces de NordPass directement dans votre boîte de réception.