Définition d’injection SQL

Les 5 types les plus dangereux

Injection SQL

Pour protéger vos données personnelles contre les pirates, vous devez les renseigner uniquement sur des formulaires cryptés sur des sites de confiance. Mais si les propriétaires de ces sites n’ont pas mis en place de mesures de protection de leur base de données, vos informations personnelles peuvent toujours être à risque. Une injection SQL est constituée de quelques lignes de code seulement et tout site réputé peut être compromis par des pirates. Vos données peuvent facilement tomber dans de mauvaises mains.

Sommaire: Une injection SQL consiste en l’insertion d’un code malveillant dans des sites et applications web dans le but de compromettre le site ciblé et recueillit les données de l’utilisateur. Comme son nom l’indique, une injection SQL attaque les bases de données SQL (Structured Query Language), la colonne vertébrale d’un site web. Continuez votre lecture pour en savoir plus sur les cinq principaux types d’attaques par injection SQL.

SQL Injection

Qu’est-ce qu’une injection SQL ?

Une injection SQL est l’intégration d’un code malveillant dans des applications web dans le but d’attaquer des sites web et/ou collecter les données des utilisateurs. Les pirates lancent des attaques par injection SQL pour des raisons diverses, mais peuvent aussi, en sus d’enfreindre la sécurité des données, envoyer de fausses informations dans la base de données de l’application, en supprimer des informations importantes ou empêcher l’accès aux propriétaires et créateurs de l’application. Ils doivent alors trouver et exploiter une faille dans la sécurité du logiciel de l’application ciblée.

Abréviation de « Structured Query Language », SQL est un langage spécialement conçu pour saisir des données et modifier le contenu de bases de données. Les sites et applications web utilisent ces bases de données pour stocker toutes leurs données et fournir leurs services aux utilisateurs. SQL joue un rôle primordial dans ce processus, en permettant aux utilisateurs de localiser un contenu spécifique au sein de la base de données. Par exemple, si vous recherchez un produit en particulier sur un magasin en ligne, votre recherche basée sur le terme et vos préférences (taille, poids, etc…) sera transmise sous le format SQL.

Comme son nom l’indique, les attaques par injection SQL ciblent ces bases de données SQL. Le pirate à l’origine de l’attaque utilise un manque de filtres de validation de saisie au niveau des caractères d’échappement (par exemple la barre oblique inversée) pour injecter son propre code dans le système. En fonction de leurs objectifs, les pirates peuvent écrire le code de manière à ce qu’à chaque saisie de recherche d’un utilisateur, ils puissent avoir accès à ses identifiants ou détruire une partie de la base de données. Les injections SQL peuvent même être utilisées pour distribuer des maliciels à travers des sites web infectés.

Bien que facilement évitables, les attaques par injection SQL sont une menace majeure qui affecte de nombreuses sociétés réputées et médias ainsi que les utilisateurs. Les experts estiment que plus de la moitié des attaques en ligne sont aujourd’hui réalisées par des techniques d’injection SQL. La plupart cible les blogs sur WordPress et sites de e-commerce. Selon des statistiques de 2014, une attaque coûte environ 200,000$ aux entreprises.

Quels sont les types d’injection SQL ?

Les attaques par injection SQL sont classées en cinq types en dépendamment de leur technique.

  1. Injection SQL Union

Une injection SQL Union est un type d’attaque par injection SQL in band qui utilise l’operateur UNION SQL pour extraire aisément les informations requises de la base de données ciblée. L’opérateur UNION permet à l’utilisateur de retirer des données simultanément sur de multiples tableaux constitués du même nombre de colonnes et types de données identiques. Les pirates peuvent colleter les informations dont ils ont besoin en injectant une commande SELECT, mais pour que l’attaque réussisse ils doivent connaitre le nom exact du tableau, le nombre de colonnes et le type des données.

  1. Injection SQL error-based

Un autre type d’attaque par injection SQL in-band est l’injection SQL error-based. Cette technique permet aux pirates de pondérer les messages d’erreur retournés par les serveurs pour obtenir des informations sur la structure du serveur ciblé. Les pirates saisissent volontairement des demandes invalides pour déclencher des messages d’erreur. Ces messages contiennent cependant souvent soit le résultat complet de la demande, soit des informations sur la manière d’améliorer la demande pour obtenir les résultats désirés, qui peuvent aider les pirates à mener à bien leur attaque.

  1. Injection SQL blind time-based

Une injection SQL temporisée est une technique qui repose sur l’envoi d’une demande SQL à une base de données pour évaluer les résultats d’une demande. La demande en question force la base de données à patienter avant de retourner un résultat, qui sera soit TRUE soit FALSE. En fonction du temps de réponse et de la réponse elle-même, un pirate peut voir si sa charge active a bien été transmise. L’inconvénient principal de ce type d’injection SQL est le temps qu’elle prend à réaliser car le pirate doit énumérer la base de données caractère par caractère.

  1. Injection SQL blind boolean-based

Un injection SQL blind boolean-based est une technique d’injection inférentielle très similaire à l’injection SQL blind time-based par laquelle les pirates envoient une commande SQL à la fois pour tenter d’énumérer la base de données. En fonction de la réponse qu’ils reçoivent, ils vérifient si leur charge utile a été envoyée correctement. Mais plutôt que de temporiser leurs commandes, ils combinent des expressions TRUE et FALSE. Comme avec les injections SQL time-based, ces attaques peuvent être très lentes en particulier lorsqu’un pirate cible une large base de données.

  1. Injection SQL out-of-band

L’injection SQL out-of-band est une technique utilisée par les pirates pour générer des commandes DNS et/ou HTTP destinées à leur envoyer directement des données. Elle est parfois utilisée comme alternative aux attaques par injection SQL blind time-based, généralement lorsque le serveur est lent à répondre ou lorsqu’il est impossible de collecter des données par le canal utilisé pour lancer l’attaque. Leur réussite dépendant des fonctions susceptibles d’être activées par l’administrateur du serveur, les attaques par injection SQL out-of-band sont très rares.

Exemples d’attaques par injection SQL

Au cours des vingt dernières années, de nombreuses attaques par injection SQL ont visé de gros sites web, sociétés et réseaux sociaux. Plusieurs d’entre-elles ont abouti à d’importantes fuites de données. Nous vous présentons ici certains exemples les plus remarquables :

  • En 2008, deux pirates russes ont utilisé des techniques d’injection SQL pour attaquer Heartland Payment Systems, un important fournisseur de solutions de traitement de paiements de l’époque. Considérée à l’époque comme la plus importante violation de données de cartes de crédit, cette attaque avait permis aux pirates d’obtenir les détails de plus de 150 millions de cartes de crédit et coûté plus de 300 millions de dollars aux sociétés victimes. Les deux pirates auteurs de l’attaque ont été condamnés à une peine combinée de 16 ans et plus en 2018.
  • En 2016, un groupe de pirates profite de failles dans vBulletin, un logiciel populaire de messagerie en ligne pour attaquer 11 plateformes de messagerie de jeu, la plupart en russe. Au cours de cette attaque, les pirates ont réussi à voler les identifiants de plus de 27 millions de comptes.
  • Toujours en 2016, des pirates utilisent des méthodes d’injection SQL pour lancer une cyberattaque contre la banque nationale du Qatar et volent plus de 1,4Go de données qu’ils rendent immédiatement publiques. Ces données contenaient les détails des comptes de milliers de clients, notamment des membres de la famille royale qatari, agents du renseignement, leaders religieux et plusieurs citoyens britanniques, français et américains marqués comme étant des espions dans la base de données de la banque.

Comment éviter les attaques par injection SQL

L’entretien adéquat d’un site web permet de facilement éviter les attaques par injection SQL. Un tel entretien comprend la surveillance permanente des commandes SQL de toutes les applications reliées à la base de données, une mise à jour régulière des bases de données et correctifs ainsi que l’achat d’un logiciel de cybersécurité fiable pour protéger la base de données.

Ces attaques ciblant les sites web utilisant un SQL dynamique, vous devez prendre les mesures nécessaires pour minimiser l’action de l’utilisateur dans la construction de vos commandes. Lorsque cela est possible, offrez aux utilisateurs des commandes prêtes ainsi qu’une liste d’options parmi lesquelles choisir plutôt que la possibilité de saisir leur propre commande. Il est aussi important d’utiliser la validation de saisie pour éviter les problèmes liés aux caractères d’échappement. N’oubliez pas non plus d’activer le filtrage des données sur le contexte. Autorisez par exemple uniquement des chiffres pour les numéros de téléphone.

Dans quelques rares cas, les pirates peuvent aussi utiliser des attaques par injection SQL pour compromettre des sites fiables avec des maliciels. Dès que vous visitez un site infecté, le maliciel se télécharge sans votre consentement. Une fois installé, les pirates peuvent accéder à votre historique de navigation, informations personnelles et même vos frappes de clavier. Pour éviter une telle situation, assurez-vous d’utiliser le meilleur logiciel antivirus qui protègera vos données contre les virus, les maliciels et autres menaces potentilles.

Sources (en anglais)