Définition Injection SQL
L’injection SQL est une cyberattaque destinée à s’introduire dans une base de données. Les pirates exploitent une faille de sécurité pour injecter des requêtes malveillantes. Nombreux sont les sites web à disposer d’une base de données clients SQL, comportant des informations confidentielles. Ce sont donc des cibles intéressantes pour les hackers, désireux de revendre ces données. Connaître le fonctionnement d’une injection SQL vous aide à vous prémunir de ces attaques.
Injection SQL : une faille de sécurité très exploitée
L’injection SQL, aussi appelée faille SQLi, est une cyberattaque très répandue. Si l’attaquant sait exploiter cette vulnérabilité dans une base de données, il peut alors avoir accès à une multitude d’informations. L’accès à de nombreuses données est perçu, pour tout hacker, comme un véritable jackpot.
Le SQL : langage des bases de données relationnelles
Le SQL (Structured Query Language) est un langage de programmation le plus courant utilisé dans les bases de données relationnelles. Elles comportent de nombreuses informations et attributs, concernant notamment des données clients, produits, transactions ou messages. Le langage SQL intervient pour modifier, supprimer ou simplement accéder à une base de données. La grande majorité des sites web, des applications et des entreprises disposent de ces bases de données. C’est pourquoi les injections SQL sont les plus courantes.
Attaque par injection SQL : envoi d’une requête malveillante
L’attaquant exploite une faille de sécurité laissée par un développeur dans le code source accédant à la base de données. Par cette porte d’entrée, il envoie une requête SQL malveillante pour accéder aux informations. Il peut alors modifier, récolter ou supprimer les données présentes. Si l’attaque par injection SQL reste très répandue, des solutions ont été mises en place pour diminuer ces cybermenaces.
L’impact d’une injection SQL sur les entreprises et les utilisateurs
L’injection SQL vise à exploiter ou voler des données personnelles d’utilisateurs d’une application web. Les conséquences pour une entreprise et pour les utilisateurs peuvent être dramatiques. L’exposition des informations sensibles mène à l’usurpation d’identité, aux tentatives d’hameçonnage ou encore à l’accès aux données bancaires.
Pour les entreprises, l’intrusion a plusieurs impacts. Le pirate, une fois introduit dans votre système, peut effacer des informations clés et nuire au bon fonctionnement de vos activités. Il peut aussi usurper l’identité de vrais clients et utiliser leurs coordonnées bancaires pour réaliser des achats.
Une fois dans votre système, le hacker peut faire ce qu’il souhaite et nuire profondément à une organisation. Il peut, par exemple, rendre votre système totalement inaccessible. Dans ce cas, une demande de rançon est établie. L’entreprise, malgré le versement d’argent, ne dispose d’aucune garantie de retrouver son infrastructure intacte.
Par ailleurs, une mauvaise gestion des données implique des sanctions financières. Le RGPD impose la mise en place de mesures de sécurité pour assurer la protection de la vie privée. L’entreprise peut également perdre la confiance de ses utilisateurs et voir son activité baisser sensiblement.
Comment fonctionne une attaque par injection SQL
Une requête SQL est une demande envoyée à la base de données pour réaliser une action. Par exemple, cela peut-être tout simplement l’accès à un compte client. Vous entrez votre identifiant et votre mot de passe dans le formulaire pour demander l’accès à votre compte.
L’injection SQL survient lorsque l’attaquant ajoute des caractères, comme un tiret ou des guillemets directement dans le formulaire. Avec MySQL, il s’agit notamment de commentaires avec « – » et « # ». L’attaquant génère une fausse requête SQL pour contourner l’identification et ajouter des instructions SQL à la requête légitime. Si la requête est comprise, même avec des instructions différentes de l’accès habituel, alors l’attaquant est autorisé à interagir avec la base de données.
Le succès des attaques par injections SQL repose sur le fait que les formulaires web possèdent des vulnérabilités sur la saisie d’informations supplémentaires. Il existe également des centaines de logiciels open source dont le code est libre d’accès. Les pirates peuvent créer des robots chargés d’envoyer des requêtes spécifiques pour les logiciels les plus connus à la recherche d’une version vulnérable.
Quels sont les différents types d’attaques par injection SQL ?
Les attaques par injection SQL diffèrent en fonction des attentes des cybercriminels. Ces différentes requêtes appellent différentes réponses.
L’injection SQL en bande : attaque par erreur et attaque basée sur l’union
L’injection SQL en bande est certainement l’attaque la plus simple à mettre en place. Sa facilité d’application est d’autant plus intéressante qu’elle offre au pirate de nombreuses informations.
Une attaque par erreur repose sur une requête malveillante intentionnelle. Le pirate cherche à générer une erreur. Ainsi, après avoir saisi de faux caractères dans un formulaire, la base de données peut renvoyer un message d’erreur comportant des informations. L’attaquant doit donc manipuler les requêtes afin d’obtenir des éléments d’information sur les failles de la BDD.
L’attaque basée sur l’union repose sur l’opérateur Union. Il s’agit ici d’atteindre le contenu d’autres tables que celles prévues à l’origine. Par exemple, le pirate peut accéder à la liste d’achats alors qu’il se trouve en phase de connexion.
L’injection SQL aveugle : attaque booléenne et attaque temporelle
L’injection SQL aveugle consiste à tester de différentes façons les vulnérabilités de la base de données afin d’arriver à entrer dans le système. Ici, aucune réponse ni aucun message d’erreur ne s’affichent. Le pirate doit donc étudier la réaction de l’application pour obtenir des informations sur ses différents tests.
L’attaque booléenne consiste à réaliser des tests et à voir comment réagit la base de données. L’attaquant utilise des entrées comme « … et 1=1 » ou « … et 1=2 » pour évaluer le comportement de différentes parties du code et de la base de données. En fonction de la réaction du chargement de la page, le pirate peut, petit à petit, obtenir des informations sur la base de données.
L’attaque temporelle s’utilise quant à elle pour savoir si une application web dispose d’une vulnérabilité de type SQLi. Elle exploite la fonction temporelle de la base de données, comme SLEEP ou WAITFOR. Si l’attaque réussit, l’exécution de la page sera plus longue. C’est un signe révélateur qui informe le pirate que des injections SQL sont possibles sur l’application.
L’injection SQL hors bande
Avec ce type d’attaque, le pirate cherche à copier les données sur l’un de ses serveurs. Il envoie une requête sur les fonctions Load_File et Into Outfile dans MySQL afin de générer l’import des informations demandées sur une adresse définie. Combinée à d’autres attaques, cette injection sert à prendre le contrôle du serveur web.
Ces attaques par injection SQL hors bande sont devenues rares puisque les éditeurs de bases de données ont sécurisé ces fonctions. Cependant, une ancienne base de données non mise à jour peut être la cible de cette attaque.
Comment identifier une attaque d’injection SQL ?
Une attaque par injection SQL est appréciée par les hackers parce qu’elle peut facilement passer inaperçue. Si les gestionnaires de base de données ne sont pas attentifs, ou ne disposent pas d’outils de cybersurveillance, ces intrusions sont efficaces et discrètes. Cependant, un regard d’expert peut alerter d’une activité inhabituelle.
Vous pouvez par exemple constater :
- des erreurs inhabituelles sur des requêtes à la syntaxe incorrecte ;
- des requêtes en nombre important sur un court laps de temps ;
- la présence de caractères spéciaux dans les entrées « utilisateur » ;
- des données manquantes sur l’application web, etc.
Quelles mesures peut-on prendre pour se protéger contre l’injection SQL ?
Les injections SQL peuvent être évitées, à condition de prendre quelques mesures. La première consiste notamment à utiliser des requêtes préparées lors de la phase de développement du logiciel. Elles servent à sécuriser les requêtes SQL des données reçues ainsi qu’à améliorer la performance et rendre le code plus lisible. La sensibilisation des développeurs à cette menace se révèle utile pour les aider à sécuriser leur code.
Vous devez également envisager une gestion des privilèges utilisateurs de manière plus approfondie. Des permissions attribuées à chaque type d’utilisateurs limitent l’exposition des données. Certaines parties de la base de données ne sont alors accessibles qu’à ceux qui en ont les droits.
Comme pour toutes menaces cybercriminelles sur vos systèmes, pensez à réaliser les mises à jour de vos logiciels de gestion de bases de données et programmes tiers. Vous pouvez également opérer un nettoyage complet des entrées utilisateurs afin d’éliminer la présence de tout caractère susceptible de faciliter une injection SQL.
Analysez régulièrement vos applications web afin de vérifier la présence des vulnérabilités et de les corriger. Optez également pour un WAF (pare-feu d’application web) destiné à filtrer toutes les attaques par injection. Ce pare-feu, à mettre régulièrement à jour, reconnaît les signatures récentes des différentes attaques.
Les attaques par injections SQL peuvent s’éviter en mettant en place des mesures et des outils spécifiques à la gestion d’une base de données. Des contrôles de sécurité réguliers vous apportent une meilleure visibilité sur les vulnérabilités de vos applications web. Vous pouvez alors les corriger avant qu’elles ne soient exploitées par les pirates informatiques. Une bonne protection de vos données utilisateurs est, qui plus est, rendue obligatoire par la réglementation RGPD.