Site Overlay

Attaque par injection SQL

SQL Injection Attack arif akyuz
politiques de cybersécurité pour les entreprises

L’injection SQL est une technique d’attaque utilisée pour attaquer les applications basées sur des bases de données ; où l’attaquant utilise les fonctionnalités du langage SQL pour ajouter de nouvelles instructions SQL au champ approprié de l’écran de l’application standard. (Par exemple, un attaquant pourrait transférer le contenu de la base de données vers lui-même).SQL Injection exploite une vulnérabilité dans les logiciels des applications, par exemple, les instructions SQL sont incorporées dans la partie où l’application attend des informations d’entrée utilisateur, si le contenu des données entrantes n’est pas filtré dans l’application ou est filtré de manière incorrecte, l’application semblera s’exécuter sans aucune erreur avec le code incorporé dans celle-ci. Bien que l’injection SQL soit connue comme un type d’attaque principalement utilisé pour les sites Web, elle peut être effectuée dans toutes les applications basées sur une base de données SQL.

Les attaques par injection SQL permettent aux attaquants de se connecter avec les informations de l’un des utilisateurs du système, d’interférer avec les données existantes, d’annuler ou de modifier certaines opérations, de divulguer toutes les données de la base de données, de détruire toutes les données de la base de données, de devenir administrateur système sur le serveur de base de données.

Une étude de 2012 a révélé qu’une application Web reçoit en moyenne 4 attaques par mois, les détaillants recevant deux fois plus d’attaques que les autres industries.

Filtrage incorrect des caractères d’échappement

Ce type de SQL se produit lorsque les données de l’utilisateur ne sont pas filtrées par des invites d’échappement de l’utilisateur, ajoutant de nouvelles instructions SQL à l’application. Les instructions SQL insérées amènent l’utilisateur final à manipuler la base de données comme il le souhaite.

Gestion incorrecte des types

Ce type de SQLI se produit lorsque la vérification de type du champ entré par l’utilisateur n’est pas effectuée correctement. Lorsqu’une valeur numérique est utilisée dans une instruction SQL, l’entrée de l’utilisateur doit également être une valeur numérique. Lorsque cette vérification n’est pas effectuée, une vulnérabilité de sécurité se produit.

Injection SQL aveugle

L’injection SQL aveugle est utilisée lorsqu’une application Web est exposée à un SQLI, mais que les résultats ne sont pas visibles par l’attaquant. La page vulnérable ne peut pas divulguer de données, mais peut afficher des données modifiées en raison de l’expression logique incorporée dans l’instruction SQL.

Réponses conditionnelles

Force la base de données à évaluer une expression logique dans une application ordinaire.

Injection SQL de second ordre

L’injection SQL secondaire se produit lorsque des valeurs contenant du code malveillant ne sont pas exécutées dès leur envoi, mais sont conservées pendant un certain temps. L’application peut encoder correctement l’instruction SQL et la stocker en tant qu’instruction SQL actuelle. Ensuite, dans une autre partie de l’application, qui n’est pas cochée par rapport à l’injection SQL, l’instruction SQL stockée est exécutée. Pour effectuer cette attaque, l’attaquant doit disposer de plus d’informations sur la façon dont les valeurs envoyées sont ensuite utilisées. Les analyseurs automatiques de sécurité des applications Web ne peuvent pas facilement détecter ce type d’injection SQL. Par conséquent, il convient de vérifier manuellement que les logiciels malveillants se trouvent dans la partie pratique du code.

Précautions contre les attaques

L’injection SQL est une attaque bien connue et peut être facilement évitée avec des mesures simples. À la suite d’une attaque par injection SQL apparente sur Talktalk en 2015, la BBC a déclaré que la découverte de vulnérabilités d’injection SQL par une si grande entreprise avait surpris les experts en sécurité.

Expressions paramétrées

La plupart des plates-formes de développement d’applications utilisent des expressions paramétriques comme paramètres au lieu de données de l’utilisateur. (Également appelé espace réservé ou variable de liaison.) Un espace réservé stocke uniquement le type de données donné. L’injection SQL n’est donc traitée que comme une valeur de paramètre intéressante (et éventuellement invalide).

Dans la plupart des cas, l’instruction SQL est spécifique et chaque paramètre est stocké en tant que scalaire et non en tant que table. Les données de l’utilisateur sont affectées à ce paramètre.

Application au niveau du codage

L’utilisation de bibliothèques de mappage objet-relationnel élimine le besoin d’écrire du code SQL. La bibliothèque ORM active génère des instructions SQL paramétriques à partir de code orienté objet.

Échapper

En SQL, il est nécessaire d’éviter les caractères qui ont des significations particulières. Le SGBD SQL explique quels caractères ont une signification particulière et fournit une liste noire complète. Par exemple, le guillemet unique(') dans chaque paramètre est remplacé par deux guillemets simples pour créer un littéral de chaîne SQL valide. (''mysqli_real_escape_string(); C’est une méthode courante pour éviter les paramètres utilisant la fonction.

$mysqli = new mysqli('hostname', 'db_username', 'db_password', 'db_name'); $query = sprintf(« SELECT * FROM 'Users' WHERE UserName='%s'AND Password='%s'" », $mysqli->real_escape_string($username), $mysqli->real_escape_string($password)); $mysqli->require($query);

Cette fonction précède les caractères suivants par une barre oblique inverse (). x00, n, r, , ', « x1a.   Il est utilisé pour assurer la sécurité des données avant d’envoyer une requête à MySQL.

PHP a de nombreuses fonctions pour de nombreux types de bases de données, par exemple la fonction pg_escape_string() pour PostgreSQL. La fonction addslashes (string $str) utilisée pour insérer une barre oblique est utilisée pour échapper des caractères. Renvoie une chaîne avec une barre oblique inverse () précédée des caractères à interroger dans la base de données. Ces caractères sont des guillemets simples ('), des guillemets doubles (« ), des barres obliques inverses () et nul (octets NULL).

La création d’une couche transparente pour assurer la sécurité de l’entrée peut réduire la tendance à l’erreur, mais ne l’élimine pas complètement.

Contrôle de modèle

Les paramètres Integer, float, boolean, string peuvent être vérifiés si leurs valeurs sont valides pour le type spécifié. Les chaînes peuvent également devoir être vérifiées par rapport à d’autres modèles. (date, UUID, alphanumérique uniquement, etc.)

Autorisations de base de données

La restriction des autorisations de connexion accordées par les applications Web à la base de données peut contribuer à réduire l’efficacité des attaques par injection SQL qui exploitent les vulnérabilités des applications Web.

Par exemple, dans Microsoft SQL Server, une connexion à une base de données peut restreindre l’accès à certaines tables système, limitant ainsi les logiciels malveillants qui tentent d’injecter du JavaScript dans toutes les colonnes de texte de la base de données.

refuser la sélection sur sys.sysobjects à webdatabaselogon ; refuser la sélection sur sys.objects à webdatabaselogon; refuser la sélection sur sys.tables à webdatabaselogon; refuser la sélection sur sys.views vers webdatabaselogon; refuser la sélection sur sys.packages à webdatabaselogon;

Bibliographie

[K1], [K2]