Décrire l’attaque par injection SQL

Effectué

L’injection SQL est l’une des vulnérabilités de sécurité des applications web les plus dangereuses et les plus courantes. Cette technique d’attaque permet d’exécuter des instructions SQL malveillantes qui contrôlent un serveur de base de données derrière une application web. Comprendre le fonctionnement de l’injection SQL est essentiel pour la création d’applications sécurisées.

Qu’est-ce que l’injection SQL ?

Définition: L’injection SQL se produit lorsqu’un attaquant insère du code SQL malveillant dans des requêtes d’application. Au lieu de traiter l’entrée utilisateur en tant que données, l’application l’exécute par erreur en tant que code, ce qui permet aux attaquants de manipuler les opérations de base de données.

Fonctionnement : Les applications web construisent souvent des requêtes SQL en combinant sql statique avec une entrée fournie par l’utilisateur. Lorsque les applications ne valident pas ou ne nettoient pas correctement cette entrée, les attaquants peuvent injecter des commandes SQL supplémentaires que la base de données s’exécute en même temps que la requête prévue.

Exemple simple : Considérez un formulaire de connexion qui vérifie les informations d’identification avec cette requête :

SELECT * FROM users WHERE username = 'inputUsername' AND password = 'inputPassword'

Un attaquant peut entrer admin' -- en tant que nom d’utilisateur. Cela transforme la requête en :

SELECT * FROM users WHERE username = 'admin' --' AND password = 'inputPassword'

Les -- caractères démarrent un commentaire SQL, supprimant efficacement la vérification du mot de passe. L’attaquant obtient l’accès sans connaître le mot de passe.

Ce que les attaquants peuvent accomplir

Les vulnérabilités d’injection SQL permettent aux attaquants de contourner les mesures de sécurité des applications et d’effectuer des actions non autorisées :

Contourner l’authentification et l’autorisation : Les attaquants peuvent contourner les mécanismes de connexion pour accéder aux comptes sans informations d’identification valides. Ils peuvent élever des privilèges pour obtenir un accès administratif même avec des comptes à faible privilège.

Récupérer l’intégralité du contenu de la base de données : Une fois qu’ils ont injecté des données SQL malveillantes, les attaquants peuvent extraire toutes les données de la base de données, notamment les informations client, les données personnelles, les secrets commerciaux, la propriété intellectuelle et les informations commerciales confidentielles. Elles ne sont pas limitées aux données que l’application affiche normalement.

Modifiez ou supprimez des enregistrements de base de données : Les attaquants peuvent utiliser l’injection SQL pour insérer, mettre à jour ou supprimer des enregistrements. Ils peuvent ajouter de nouveaux comptes administratifs, modifier les prix dans les systèmes de commerce électronique ou supprimer les journaux d’audit pour couvrir leurs pistes.

Exécutez les commandes du système d’exploitation : Dans certaines configurations, les attaquants peuvent exécuter des commandes sur le système d’exploitation sous-jacent via des fonctionnalités de base de données. Cela peut entraîner une compromission complète du serveur.

Effectuez un déni de service : Les attaquants peuvent créer des requêtes qui consomment des ressources excessives, ce qui rend l’application indisponible aux utilisateurs légitimes.

Impact généralisé

Affecte n’importe quelle application SQL : Les vulnérabilités d’injection SQL peuvent affecter n’importe quel site web ou application web qui utilise des bases de données SQL, notamment :

  • Applications MySQL.
  • Systèmes de base de données Oracle.
  • Applications SQL Server de Microsoft.
  • Bases de données PostgreSQL.
  • Implémentations SQLite.
  • Tous les autres systèmes de base de données SQL.

La vulnérabilité existe dans le code de l’application, et non dans le logiciel de base de données lui-même. Même lorsque vous utilisez des systèmes de base de données sécurisés, up-to-date, un code d’application médiocre crée des vulnérabilités.

Données sensibles à risque : Les criminels exploitent l’injection SQL pour obtenir un accès non autorisé aux informations sensibles :

  • Informations client : Noms, adresses, détails de paiement, historique des achats.
  • Données personnelles: Numéros de sécurité sociale, dates de naissance, dossiers médicaux, informations financières.
  • Données métiers : Secrets commerciaux, algorithmes propriétaires, plans stratégiques, accords partenaires.
  • Propriété intellectuelle: Données de recherche, contenu non publié, code source.
  • Informations d’identification d’authentification : Mots de passe, clés API, jetons, certificats.

Prévalence et signification

Parmi les vulnérabilités les plus dangereuses : Les attaques par injection SQL sont parmi les vulnérabilités les plus anciennes, les plus courantes et les plus dangereuses des applications web. Malgré des décennies de sensibilisation et de défenses disponibles, l’injection SQL reste un vecteur d’attaque courant.

Reconnaissance OWASP : L’organisation OWASP (Open Web Application Security Project) répertorie les attaques par injection en évidence dans leur document OWASP Top 10, qui identifie les risques de sécurité les plus critiques pour les applications web. La présence continue dans cette liste illustre la pertinence continue de l’injection SQL en tant que menace.

Pourquoi elle persiste :

  • Applications héritées : De nombreuses applications plus anciennes ont été créées avant que l’injection SQL ait été bien comprise et n’ont pas été mises à jour avec des défenses appropriées.
  • Lacunes en matière de sensibilisation aux développeurs : Tous les développeurs ne reçoivent pas une formation de sécurité adéquate, ce qui entraîne le code vulnérable même dans les nouvelles applications.
  • Complexité des applications modernes : Les bases de code volumineuses avec de nombreuses requêtes de base de données fournissent de nombreux points d’injection potentiels.
  • Pressions temporelles : Les délais de développement entraînent parfois des raccourcis dans les pratiques de sécurité.

La prévention est essentielle

Comprendre les attaques par injection SQL est la première étape de la prévention. Les organisations doivent :

  • Former des développeurs sur des pratiques de codage sécurisées.
  • Utilisez des requêtes paramétrables et des instructions préparées.
  • Validez et désinfectez toutes les entrées utilisateur.
  • Appliquez le principe du privilège minimum aux comptes de base de données.
  • Effectuez des tests de sécurité réguliers, notamment l’analyse automatisée des vulnérabilités.
  • Effectuez des révisions de code avec le focus de sécurité.
  • Surveillez les applications pour l’activité suspecte de base de données.

Ressources supplémentaires

L’équipe du Centre de sécurité Azure fournit des playbooks d’automatisation des flux de travail que vous pouvez explorer pour découvrir comment les vulnérabilités sont exploitées pour déclencher différents types d’attaques, notamment les attaques par virus, les attaques DDoS et les scénarios d’exfiltration de données. Ces playbooks illustrent des modèles d’attaque réels et aident les équipes de sécurité à préparer les défenses appropriées.