L'attaque par injection SQL

Les attaques par injection de commandes SQL exploitent les failles de sécurité d’une application qui interagit avec des bases de données. L’attaque SQL consiste à modifier une requête SQL en cours par l’injection d’un morceau de requête non prévu, souvent par le biais d’un formulaire. L’hacker peut ainsi accéder à la base de données, mais aussi modifier le contenu et donc compromettre la sécurité du système. 

Voici une vidéo explicative pour comprendre en 2 minutes cette attaque : 

Le développement de l'attaque par injection SQL nécessite une vigilance accrue

L’injection SQL est devenue un problème courant qui affecte les sites Web exploitant des bases de données. Elle se produit lorsqu’un malfaiteur exécute une requête SQL sur la base de données via les données entrantes du client au serveur. Des commandes SQL sont insérées dans la saisie du plan de données (par exemple, à la place du nom d’utilisateur ou du mot de passe) afin d’exécuter des commandes SQL prédéfinies. Un exploit d’injection SQL réussi peut lire les données sensibles de la base de données, modifier (insérer, mettre à jour ou supprimer) les données de la base de données, exécuter des opérations d’administration de la base de données (par exemple la fermer), récupérer le contenu d’un fichier spécifique, et, dans certains cas, envoyer des commandes au système d’exploitation.

Par exemple, le formulaire Web d’un site Web peut demander le nom de compte d’un utilisateur, puis l’envoyer à la base de données afin d’extraire les informations de compte associées à l’aide de SQL dynamique, comme ceci :

SELECT * FROM users WHERE account = ‘“ + userProvidedAccountNumber +”’;”

Même si cela fonctionne pour les utilisateurs qui saisissent correctement leur numéro de compte, cela laisse un passage aux attaquants. Si, par exemple, quelqu’un décidait de fournir un numéro de compte “‘ or ‘1’ = ‘1’”, cela donnerait une chaîne de requête comme celle-ci :

“SELECT * FROM users WHERE account = ‘’ or ‘1’ = ‘1’;”

Puisque ‘1’ = ‘1’ est toujours évalué comme TRUE, la base de données renvoie les données de tous les utilisateurs au lieu d’un seul.

La vulnérabilité à ce type d’attaque informatique est liée au fait que SQL ne fait aucune distinction réelle entre le plan de contrôle et le plan de données. Pour cette raison, les injections SQL fonctionnent surtout si un site Web utilise SQL dynamique. De plus, les injections SQL sont très courantes avec les applications PHP et ASP en raison de la prévalence des anciennes interfaces fonctionnelles. Les applications J2EE et ASP.NET sont moins sensibles aux injections SQL en raison de la nature des interfaces programmatiques disponibles.

Afin de vous protéger contre les attaques par injection SQL, appliquez le modèle d’autorisation « least0privilege » à vos bases de données. Respectez les procédures stockées (assurez-vous que ces procédures n’incluent pas de SQL dynamique) et les instructions préparées (requêtes paramétrées). Le code exécuté sur la base de données doit être suffisamment fort pour prévenir les attaques par injection. Par ailleurs, validez les données saisies au niveau de l’application à l’aide d’une liste blanche.

Différents types d’injection SQL

injection blind based

Injecte des morceaux qui vont retourner caractère par caractère ce que l’attaquant cherche à extraire de la base de données. Ce type d’injection dépend de la réponse du serveur : soit la requête d’origine revoie le même résultat et indique que le caractère est valide, soit elle ne renvoie pas le même résultat et signifie que le caractère testé n’est pas le bon. 

La méthode error based

Injecte des morceaux qui retournent champ par champ ce que le hacker cherche à extraire de la base de données. Ce type d’injection profite utilise une faiblesse de la base de données et ainsi détourne le message d’erreur qu’elle génère

Injection SQL union based

Injecte des morceaux qui vont retourner un ensemble de données directement extraites de la base de données. Ce type d’injection peut dans les cas les plus extrêmes récupérer des tables entières de base de données en une ou deux requêtes ! Mais, en général, cette méthode retourne entre 10 et 100 lignes de la base de données par requête SQL détournée. 

La méthode Stacked queries

C’est l’attaque la plus dangereuse. En raison d’une erreur de configuration du serveur de base de données, ce type d’injection peut exécuter n’importe quelle requête SQL sur le système ciblé. Non seulement elle récupère des données, mais elle peut aussi des données directement dans la base de données, par injection d’une autre requête SQL.

Exemples d’injection SQL

  • Le site de Guess.com subit en 2002 une attaque d’injection SQL lors de laquelle 200 000 de coordonnées de clients, y compris les numéros de carte de crédit, ont été hackées.
  • 10 597 numéros de sécurité social américains ont été volés en 2008. 
  • Le site de la Royal Navy en Angleterre est paralysé en raison d’une attaque par injection SQL en 2010 
  • En 2013, Yahoo rapporte le vol de données de plus de 1 milliard de comptes

Comment contrer les attaques par injection SQL ?

Suivre certaines règles permet de se prémunir des attaques par injection de commandes SQL : 

Utiliser des procédures stockées à la place du SQL dynamique afin d’éviter l’injection SQL.
Utiliser des comptes utilisateurs SQL à accès limité autant que possible.
Utiliser des requêtes SQL paramétrées : des requêtes à trous sont envoyées au serveur SQL qui les complétera à l’aide des paramètres qui lui sont envoyés.

EVEIL DIGITAL est une entreprise de formation, coaching, et de conseil, spécialisé dans l’accompagnement de toute entreprise en France qui souhaite faire évoluer leur informatique pour mieux se développer.

Adresses et coordonnées

  • Bureau : 22 route de Lyon, 69530 BRIGNAIS

  • Siège : 8 chemin de la mouille, 69530 BRIGNAIS

  • Téléphone standard : 04 81 13 23 35

© 2021 Tous droits réservés