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 :
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.
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.
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
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.
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.
Suivre certaines règles permet de se prémunir des attaques par injection de commandes SQL :
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