Qu’est-ce que l’injection SQL, exactement ?
L’injection SQL est une cyberattaque qui trompe une base de données et la force à autoriser l’accès au pirate. L’injection SQL force une base de données non sécurisée à exécuter des commandes non sûres en insérant du code malveillant dans son code SQL (Structured Query Language), le langage le plus utilisé dans les opérations de gestion des bases de données.
Bien que l’injection SQL (ou SQLi) existe depuis des dizaines d’années, c’est une menace persistante qui représente actuellement encore les deux tiers des attaques d’applications web. OWASP, un grand organisme à but non lucratif actif dans me monde de la sécurité web, place les attaques par injection tout en haut de sa liste de risques sécurité liés aux applications web.
La vulnérabilité face aux injections SQL découle souvent d’erreurs dans l’écriture de l’API (Application Programming Interface). Les développeurs d’applications web ont parfois du mal à repérer leurs propres erreurs avant que quelqu’un d’autre les détecte, ce qui explique pourquoi les nouveaux produits sont souvent une cible facile pour les attaques zero-day par injection SQL.
Et lorsqu’ils ne récupèrent pas vos données pour les utiliser, les pirates chevronnés se tournent vers des courtiers en données pour les leur revendre. Potentiellement lucratif et assez simple à mener si on dispose des compétences et de l’expérience nécessaires, le piratage SQL est une importante source de revenus pour de nombreux groupes de pirates.
Qu’est-ce que le SQL ?
Le SQL (Structured Query Language ou en français langage de requête structurée) est un langage de programmation standard utilisé dans la gestion des bases de données. Pour la communication avec les bases de données ou l’interrogation de données, le SQL est le langage le plus couramment utilisé pour accéder à vos données.
La base de données est un peu l’entrepôt de l’application web. Les bases de données contiennent des tables, qui sont un peu comme des boîtes contenant les données, par exemple des informations sur les clients, les articles à vendre ou encore des informations d’identification. Lorsque vous entrez des informations dans une application web, le SQL permet à la base de données de traiter votre requête et de vous retourner les informations demandées.
La syntaxe intuitive du SQL, basée sur l’anglais, en a fait le langage de choix de nombreux programmeurs d’API pour la gestion des bases de données. Si la base de données est l’entrepôt de l’application web, l’API en est sa vitrine. C’est avec elle que vous êtes en contact lorsque vous consultez un site web et que vous envoyez des demandes via des champs (par exemple pour rechercher un élément).
Le langage SQL se trouve juste derrière cette vitrine, et il prend note de vos demandes et les traduit en un code compréhensible pour la base de données. Malheureusement, la capacité du SQL à interpréter les demandes des utilisateurs en fait aussi une proie facile pour le piratage.
Au cas où vous vous seriez posé la question, on peut prononcer en anglais « sequel » ou bien simplement « S-Q-L ». Consultez notre cours accéléré sur les autres termes de la cybersécurité si vous n’êtes pas certain de bien les connaître.
Comment se déroulent les attaques par injection SQL ?
Les pirates lancent les attaques par injection SQL via un champ de saisie de l’API web, par exemple le portail de connexion, un formulaire ou une barre de recherche. En modifiant les données saisies à l’aide d’un petit fragment de code appelé exploit, le cybercriminel peut faire croire à une base de données non sécurisée que ces données représentent une commande.
Les sites web dont les champs de saisie ne sont pas sécurisés sont vulnérables face aux attaques SQLi.
Le fait de répéter les injections SQL donne une bonne idée au pirate du niveau de vulnérabilité du logiciel. Voici un exemple d’attaque par injection SQL :
-
Vous essayez d’accéder à vos données utilisateur sur un site web, donc vous entrez votre nom d’utilisateur : AVGRocks17.
-
SQL transforme ce que vous tapez en une chaîne intelligible pour la base de données. SQL transforme par exemple ce que vous avez saisi en : « Trouve l’utilisateur AVGRocks17 et donne-moi ses données. » Vous avez simplement tapé « AVGRocks17 », mais SQL traduit cette demande en code qui indique à la base de données ce qu’elle doit faire. Voici à quoi pourrait ressembler ce code :
SELECT * FROM users WHERE userID = AVGRocks17;
L’astérisque indique « toutes les données », ce qui peut par exemple inclure votre vrai nom et votre mot de passe.
Au lieu de filtrer sur un utilisateur donné, l’injection SQL de la commande OR 1=1 dans la barre de recherche, le portail de connexion ou tout autre champ de saisie force le SQL à demander à la base de données toutes les informations sur TOUS les utilisateurs. Comment ? Voici ce que reçoit la base de données :
SELECT * FROM users WHERE userID = AVGRocks17 OR 1=1;
La base de données interprète ceci comme une commande qui doit rechercher les données de tous les utilisateurs et les transmettre si l’identifiant correspond à AVGRocks17 ou si 1 est égal à 1, ce qui est bien entendu toujours le cas.
Les injections SQL sont capables de modifier, d’insérer et de supprimer des éléments dans une base de données ou bien de poser les bases d’une attaque par déni de service. Les pirates peuvent aussi installer des portes dérobées qui leur donnent un accès permanent au serveur.
Les commandes d’injection SQL les plus courantes permettent aux pirates d’altérer, de voler ou de détruire des données, d’usurper ou de voler des identités ou encore de modifier les autorisations de la base de données. Dans certains cas extrêmes, l’injection SQL peut donner au pirate le contrôle total sur la base de données.
Comment se fait-il que les attaques par injection SQL fonctionnent si facilement ? En fait, cela ne devrait pas être le cas. Les vulnérabilités d’injection SQL résultent souvent d’erreurs de programmation commises par le développeur web. Les entreprises font souvent appel à des développeurs n’ayant que peu d’expérience ou de savoir-faire, et la sécurité prend aussi plus de temps à programmer. Les délais souvent serrés font que de nombreuses entreprises négligent la sécurité.
Il ne s’agit cependant pas seulement d’erreurs humaines. Comme la logique est assez simple, il est facile d’automatiser les attaques SQLi. Et même le meilleur des programmeurs ne fait pas le poids face à une armée de robots.
Exemples d’injection SQL en situation réelle
En 2008, la société de traitement de paiements Heartland Payment Systems a été piratée via une injection SQL et a perdu plus de 130 millions de dollars. Les pirates ont réussi à s’emparer de 130 millions de numéros de cartes de crédit, dans le cadre de l’un des plus grands vols de données de cartes de crédit de toute l’histoire.
En 2014, un groupe de pirates a mis la main sur plus de 1,2 milliard de combinaisons d’identifiants et de mots de passe provenant de plus de 420 000 sites web. Le groupe de pirates russes a utilisé des injections SQL pour faire en sorte que la base de données révèle son contenu et l’envoie.
Au Royaume-Uni, la société de télécommunications TalkTalk a été vivement critiquée en 2015 en raison d’un faible niveau de sécurité web qui a mis en danger les informations personnelles de centaines de milliers de ses clients. Même si les risques de sécurité liés au SQL étaient bien connus à cette époque, cette entreprise n’a rien pu faire face à cette attaque.
Les injections SQL touchent aussi les joueurs, avec le piratage des forums d’Epic Games en 2016 et la fuite de 800 000 comptes utilisateur. Les injections SQL visaient le logiciel de gestion de forums vBulletin, qui est connu pour présenter des vulnérabilités face aux exploits SQL. En général, les attaques par injection SQL se répandent à grande vitesse dans le secteur du jeu.
Personne n’est à l’abri des attaques SQLi, qu’il s’agisse d’une multinationale, d’un simple site web ou de l’internaute moyen. La simplicité des attaques SQL garantit pratiquement que les attaques par injection SQL vont rester un vecteur d’attaque très répandu.
Le meilleur moyen de protéger vos données est d’utiliser un logiciel de sécurité en temps réel qui vous protège des attaques par hameçonnage (phishing) et protège votre réseau des intrusions. AVG Antivirus Gratuit vous protège des vulnérabilités, du phishing et des fuites de mots de passe, ainsi que de nombreux autres malwares.
Types d’injections SQL
Les trois grands types d’injections SQL sont l’injection SQL « in-band », l’injection SQL « out-of-band » et l’injection SQL « blind ». Les injections SQL sont classées selon différentes catégories en fonction de leur fréquence, de leur mode d’attaque et des dégâts potentiels.
Qu’est-ce que l’injection SQL in-band ?
L’injection SQL in-band est le type d’injection SQL le plus simple. Dans ce type d’attaque, les pirates peuvent lancer l’attaque et récupérer les résultats sur un seul et même serveur. Les injections SQL in-band sont souvent utilisées, simplement parce qu’elles sont simples à exécuter.
Qu’est-ce que l’injection SQL out-of-band ?
Les attaques par injection SQL out-of-band cherchent à extraire le contenu de la base de données vers un autre serveur et nécessitent que la base de données soit capable de produire des requêtes DNS ou HTTP. Les attaques par injection SQL out-of-band sont moins fréquentes, mais elles sont aussi plus dangereuses.
Qu’est-ce que l’injection SQL inferential (ou blind) ?
L’injection SQL de type inferential (ou blind) envoie des énoncés vrais ou faux à la base de données pour essayer de déterminer sa structure. En examinant les réponses, le pirate peut essayer de repérer les vulnérabilités possibles de la base de données.
Comment repérer les vulnérabilités d’injection SQL
Le meilleur moyen de repérer les vulnérabilités d’injection SQL dans votre base de données est de la tester. Voici une présentation des outils de test d’injection SQL les plus connus.
-
sqlmap est un testeur d’intrusion open source qui peut analyser un système pour y rechercher les vulnérabilités de sécurité. sqlmap est capable de récupérer tout le contenu d’une base de données, mais cela ne veut pas pour autant dire que les pirates peuvent l’utiliser aussi.
-
suIP.biz est un outil d’analyse en ligne qui s’appuie sur sqlmap et qui peut tester les plus grands systèmes de gestion de bases de données comme MySQL, Oracle ou Microsoft SQL Server pour détecter les vulnérabilités.
-
Hacker Target recherche les vulnérabilités liées aux injections de type blind et celles basées sur les erreurs dans les requêtes HTTP GET (un certain type d’URL). Il s’appuie lui aussi sur sqlmap.
-
Vega recherche les injections SQL, ainsi qu’un autre type d’attaque similaire, les injections XSS (injections de scripts inter-sites). Open source et convivial, Vega fonctionne sous Linux, macOS et Windows.
Comment éviter les attaques par injection SQL
Les développeurs web peuvent éviter les attaques par injection SQL en adoptant de bonnes pratiques de programmation. Mais vous pouvez aussi agir pour protéger vos données sensibles des attaques SQLi.
-
Vérifiez si un site web est sûr avant d’entrer des informations et suivez les actualités sur la sécurité pour pouvoir changer de mot de passe si l’un des sites que vous utilisez a été victime d’une fuite de données. AVG BreachGuard peut vous aider à éviter que vos données soient prises dans une fuite de données.
-
Utilisez des mots de passe forts et uniques, avec au moins 12 caractères et stockez-les de manière sécurisée par le biais d’un gestionnaire de mots de passe de qualité.
-
Vérifiez si vos comptes ont fait l’objet d’une fuite suite à une attaque SQLi ou un autre type d’attaque avec Avast Hack Check. Si c’est le cas, changez votre mot de passe immédiatement.
Les développeurs web et les entrepreneurs peuvent recourir aux conseils qui suivent pour assurer la sécurité de leurs bases de données face aux attaques SQLi.
Requêtes avec paramètres et nettoyage des entrées
La prévention des attaques SQLi commence par le nettoyage des entrées, en nettoyant le code de l’application en définissant des paramètres afin de faire la distinction entre les données saisies (les informations légitimes) et les commandes (les données envoyées par les pirates). Le nettoyage des entrées est un problème si répandu qu’un dessin publié par xkcd sur les injections SQL est même devenu viral.
Pare-feu d’application web
Un pare-feu d’application web est une barrière qui filtre les programmes malveillants et le trafic malveillant entre l’application web et Internet. Les pare-feu d’application web peuvent être configurés de façon à offrir une protection contre différents types d’injections SQL et autres menaces.
Préférez les listes blanches aux listes noires
La mise en place de listes blanches empêche les utilisateurs d’entrer des caractères sources de problèmes comme le signe égal, les points-virgules et les guillemets. Comme les listes blanches approuvent certains caractères uniquement, elles sont plus restrictives et ont plus d’impact. Les pirates ont bien évidemment trouvé des solutions ingénieuses pour les contourner, mais ces listes blanches réduisent considérablement leur marge de manœuvre.
Chiffrement des données
Le chiffrement des données verrouille vos données et les protège jusqu’à ce qu’elles vous parviennent. En chiffrant les données contenues dans la base de données, les pirates ne peuvent pas accéder aux données s’ils ne sont pas capables de les déverrouiller.
Utilisez un logiciel de sécurité à jour
Peu importe le niveau de vigilance dont vous faites preuve, il est compliqué de bloquer les millions de pirates qui cherchent à s’introduire dans votre système. Les logiciels de sécurité modernes destinés aux entreprises peuvent automatiquement corriger les vulnérabilités pour mieux vous protéger des nouvelles menaces d’injection SQL.
Protégez-vous des menaces et des vulnérabilités avec AVG Antivirus
Il n’y a pas grand-chose à faire si votre site web favori est touché par une injection SQL, mais ce n’est pas pour autant que vous devez négliger la sécurité de vos propres appareils.
Les logiciels de sécurité brevetés d’AVG sont à l’affût des menaces 24 h/24, 7 j/7. Analysez rapidement votre appareil pour corriger les failles de sécurité ou les vulnérabilités liées au Wi-Fi. Protégez vos e-mails des regards indiscrets et bloquez les téléchargements malveillants, les liens non sécurisés et les tentatives de phishing.
Protégez-vous intégralement des menaces, que ce soit en sécurisant votre réseau, en désinstallant les logiciels obsolètes ou en éliminant les programmes malveillants. Essayez AVG Antivirus Gratuit dès aujourd’hui.