Injection sql
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 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.[1]
L’injection SQL est une technique permettant d’injecter des éléments, notamment du code de type SQL (Structured Query Language, langage utilisé pour manipuler les bases de données), dans les champs des formulaires web ou dans les liens des pages afin de les envoyer au serveur web. De cette façon, les attaquants outrepassent les contrôles de sécurité et parviennent à afficher ou à modifier des éléments présents dans une base de données, par exemple des mots de passe ou des coordonnées bancaires. L’injection SQL permet ainsi l’accès à toutes les données personnelles (par exemple, des identités ou coordonnées d’utilisateurs ou d’employés) ou non personnelles (les articles présents, les prix de ces derniers, etc.), contenues dans une base de données SQL.[2]
Les attaques SQL sont relativement simple à mettre en oeuvre et peuvent avoir de lourdes concéquences. (exposition des données sensibles, vol de données personnelles et usurpation d'identité, 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.
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]
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.