Injection sql

De Design wiki
Aller à la navigation Aller à la recherche
Illustration

Définition

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 (Structured Query Language, langage utilisé pour manipuler les bases de données) les champs des formulaires web ou dans les liens des pages afin de les envoyer au serveur web (une requête), afin de manipuler une base de données. De cette façon, les attaquants outrepassent les contrôles de sécurité et parviennent à accéder à des informations sensibles[1], et ainsi à afficher ou à modifier des éléments présents dans une base de données, par exemple des mots de passe, des coordonnées bancaires, des listes d’utilisateurs, 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.[2]

Cas d'utilisations et impacts

Une injection SQL peut avoir un impact énorme, surtout si les privilèges sur le serveur et sur la base de données sont trop permissifs.

Tout d’abord, un attaquant peut récupérer des informations sensibles, comme les identifiants et mots de passe des utilisateurs ou les informations relatives aux cartes bancaires. En effet, les injections SQL sont à l’origine de nombreuses compromissions de mots de passe et de données de sites et d’applications web.

Un autre cas d’utilisation de l’injection SQL consiste à détourner la logique prévue de l’application web. L’exemple le plus courant est le contournement d’une page d’authentification. Les attaquants peuvent également être en mesure de lire et d’écrire des fichiers directement sur le serveur, ce qui peut conduire à placer des backdoors (portes dérobées) sur le serveur, puis à prendre le contrôle de l’application.[3]

Les attaques SQL sont relativement simple à mettre en oeuvre et peuvent avoir de lourdes concéquences, 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.[2]

Types d'injections

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 les contrer ?

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.[2]

Ressources