Qu’est-ce qu’une injection SQL ?
Une attaque par injection SQL, parfois abrégée SQLi, est une action malveillante par laquelle un hacker utilise ou “injecte” un morceau de code SQL dans une requête, afin de manipuler une base de données et d’accéder à des informations sensibles. Ces informations peuvent compter des listes d’utilisateurs, des coordonnées ou encore des données confidentielles liées à une entreprise.
L’attaque par injection SQL est un type de cyberattaque parmi les plus anciens et les plus répandus sur Internet. Ce type d’attaque a été signalé dès les années 1990, et est malheureusement toujours d’actualité. La plupart des sites web et applications utilisant des bases de données SQL, les attaques par injection SQL peuvent avoir un impact sur un grand nombre d’organisations.
Comment fonctionne une attaque par injection SQL ?
Pour mieux comprendre le fonctionnement d’une injection SQL, intéressons-nous d’abord à la définition du langage SQL.
L’abréviation SQL signifie Structured Query Language, soit langage de requête structuré. Il est utilisé pour accéder, modifier ou supprimer des données stockées au sein d’une base de données en ligne.
Concrètement, une requête SQL est envoyée à une base de données pour exécuter une fonction particulière. Par exemple, un utilisateur saisit ses informations d’identification dans un formulaire de connexion. Ces données sont vérifiées par comparaison avec une base de données : si elles correspondent, l’accès est autorisé.
Il existe malheureusement une faille dans ce système, à savoir l’impossibilité de bloquer la saisie d’informations supplémentaires dans les formulaires. Les pirates utilisent cette faille SQL pour envoyer leurs propres requêtes SQL vers les bases de données ciblées et obtenir des informations. La base de données interprète ces commandes “injectées’” comme des requêtes légitimes, et envoie des résultats en retour.
Par ailleurs, des outils sont apparus dans les communautés de développeurs pour détecter et exploiter les failles SQL, permettant aux pirates de lancer des attaques SQLi en seulement quelques clics.
Quel est l’impact d’une attaque par injection SQL ?
Étant donné que la majorité des sites web reposent sur des bases de données SQL, et les attaques SQLi étant relativement faciles à mettre en œuvre, ces attaques peuvent être lourdes de conséquences. Voici les types de dégâts qu’une injection SQL peut provoquer :
- Exposition de données sensibles ;
- Modification ou suppression de données ;
- Vol de données personnelles et usurpation d’identité ;
- Compromission de la confidentialité des utilisateurs ;
- Accès non autorisé au système ;
- Obtention des droits administrateur sur le serveur.
Outre le coût financier qui peut s’avérer très important, les attaques par injection SQL se traduisent également par une perte de confiance des utilisateurs et une atteinte à la réputation de l’entreprise. En effet, si les utilisateurs de votre site web voient leurs noms, adresses e-mail et informations de carte de crédit exposés suite à une attaque SQLi, il y a fort à parier qu’ils se détournent de votre organisation.
Les différents types d’injection SQL
Injection SQL intrabande
Il s’agit du type d’attaque par injection SQL le plus répandu. Il consiste pour le pirate à utiliser le même canal pour lancer l’attaque et recueillir les résultats. Ce type d’attaque compte deux sous-variantes :
- Injection SQL basée sur les erreurs: le cybercriminel exécute une commande SQL qui génère un message d’erreur de la part du serveur. Ce message d’erreur peut alors lui fournir des informations précieuses concernant l’infrastructure de la base de données visée.
- Injection SQL basée sur l’opérateur UNION: dans ce cas, le hacker utilise l’opérateur SQL UNION pour fusionner un ensemble d’instructions au sein d’une seule requête HTTP, afin d’extraire des informations de la base de données.
Injection SQL inférentielle
L’injection SQL inférentielle, également appelée injection SQL aveugle (blind SQL injection), l’attaquant envoie des charges actives de données au serveur et observe la réponse pour obtenir des informations sur la structure de la base de données. Dans ce type d’attaque, la base de données ne transfère pas directement de données au cybercriminel, d’où le terme “aveugle”.
Là encore, deux sous-ensembles d’attaques peuvent être cités :
- Injection SQL booléenne: l’utilisateur malveillant envoie une requête SQL à la base de données, qui répond par un résultat vrai ou faux.
- Injection SQL basée sur le temps (time-based) : le cyberattaquant envoie une requête SQL à la base de données et force celle-ci à attendre un laps de temps déterminé avant d’envoyer la réponse. En fonction du nombre de secondes écoulées, l’attaquant peut déterminer si le résultat est vrai ou faux.
Injection SQL hors bande
Les injections SQL hors bande sont moins fréquentes, car plus complexes à réaliser. Elles ont lieu lorsque l’attaquant n’est pas en mesure d’utiliser le même canal pour lancer l’attaque et recueillir les résultats, ou lorsque le serveur ciblé est trop lent ou trop instable pour utiliser l’une des deux autres méthodes.
Exemples d’attaques par injection SQL
Voici quelques exemples d’attaques SQLi notables survenues durant la dernière décennie.
- En 2013, le moteur de recherche Yahoo a été victime d’une attaque SQLi et constaté le vol de données de plus d’un milliard de comptes d’utilisateurs.
- En 2014, des cybercriminels ont perpétré une attaque par injection SQL sur le site de Tesla et ont obtenu un accès administrateur au système, ce qui leur a permis de récolter des données d’utilisateurs.
- En 2018, une vulnérabilité a été détectée sur le site web de Cisco Prime. Suite à une injection SQL réussie, les attaquants pouvaient accéder aux systèmes sur lesquels le gestionnaire de licences était déployé. Cette vulnérabilité a depuis été corrigée par l’organisation.
- En 2019, une attaque par injection SQL a été détectée sur le jeu en ligne Fortnite, qui permettait aux hackers d’obtenir l’accès aux comptes des joueurs.
Comment se protéger des attaques par injection SQL
Il peut être difficile de contrer une attaque par injection SQL, étant donné que même une attaque réussie peut ne présenter aucun effet visible. Néanmoins, certaines mesures peuvent être mises en place pour prévenir les injections SQL sur votre site web.
- Apprenez à reconnaître les signes qui peuvent indiquer une attaque SQLi : un nombre très important de requêtes dans un court laps de temps, l’apparition de messages d’erreur inhabituels et de fenêtres pop-up, ou des liens menant vers des sites web suspects peuvent être autant d’indices que votre base de données a été compromise.
- Formez vos équipes: l’information est la première barrière pour vous prémunir contre les attaques par injection SQL. Il est important que tous les utilisateurs et responsables de votre site web soient sensibilisés aux risques liés à ces attaques.
- Contrôlez les accès: n’accordez que les privilèges d’accès strictement nécessaires selon le rôle des utilisateurs, et utilisez les listes d’autorisations comme principe de base pour filtrer les saisies des internautes.
- Utilisez des mots de passe sécurisés: il est essentiel d’utiliser des mots de passe forts et uniques pour chaque service afin d’empêcher les accès non autorisés.
- Maintenez vos logiciels à jour: veillez à installer les mises à jour et correctifs de sécurité dès qu’ils sont disponibles pour réduire le risque de failles SQL dans votre environnement de développement.
- Utilisez un pare-feu: un pare-feu d’applications web (WAF) est utile pour empêcher les attaques par injection SQL, en filtrant automatiquement les requêtes malveillantes via une liste de signatures fréquemment mise à jour.
- Munissez-vous d’un VPN: un VPN garantit le chiffrement des données qui transitent entre votre appareil et le serveur web, renforçant la sécurité et la confidentialité en ligne.
Protégez-vous contre les menaces en ligne avec NordVPN.