Akamai dots background

Didacticiel sur les injections SQL

Ce didacticiel sur les attaques par injection SQL fournit une brève introduction à l'une des menaces les plus courantes pour la sécurité Web des entreprises et organisations publiques. Ce didacticiel couvre quatre thèmes :

  • le contexte des attaques par injection SQL ;
  • les objectifs des attaques par injection SQL ;
  • le principe d'une attaque par injection SQL ;
  • les moyens de défense contre les attaques par injection SQL.

Didacticiel sur les attaques par injection SQL — Thème 1 : Le contexte des attaques par injection SQL

Les applications Web les plus modernes sont fondées sur une structure et un flot logique identiques : un client Web (généralement un navigateur) communique avec une application Web hébergée sur un serveur Web, puis l'application communique avec une ou plusieurs bases de données du back-end. Les bases de données stockent plusieurs informations utiles à l'application, notamment la combinaison nom d'utilisateur/mot de passe et les données du compte de l'utilisateur. Les utilisateurs finaux accèdent à ces informations et les modifient par le biais de saisies dans les formulaires de la page Web (formulaires de connexion ou de recherche, par exemple). Selon la saisie de l'utilisateur, l'application Web envoie des commandes aux bases de données, généralement en langage SQL (Structured Query Language), le langage de commande dans lequel la plupart des bases de données relationnelles sont rédigées. La base de données répond, puis l'application Web répond à son tour à l'utilisateur.

Didacticiel sur les attaques par injection SQL — Thème 2 : Les objectifs des attaques par injection SQL

Lors d'une attaque par injection SQL, un pirate informatique connaissant bien la syntaxe SQL envoie de fausses saisies dans les formulaires de page Web avec l'objectif d'accéder plus directement et le plus loin possible dans la base de données du back-end, plus loin que ne le prévoit l'application Web. Le plus souvent, ces attaques visent à récupérer des informations importantes comme les combinaisons de nom d'utilisateur/mot de passe, des informations financières ou d'entreprise confidentielles. Dans certains cas, une attaque par injection SQL peut également avoir pour but de modifier des données (un compte de résultats, par exemple) ou de supprimer insidieusement certaines données. Les attaques par injection SQL peuvent donc causer de graves failles dans la cybersécurité.

Didacticiel sur les attaques par injection SQL — Thème 3 : Le principe d'une attaque par injection SQL

Lors d'une attaque par injection SQL, un pirate informatique saisit des caractères et termes SQL spécifiques dans un champ de saisie de formulaire Web pour tromper l'application et envoyer des commandes autres que celles prévues à la base de données. Pour donner un exemple illustré (inspiré d'un exemple du site Web de l'OWASP [Open Web Application Security Project]), imaginez que le code d'une application soit rédigé de manière à tenter d'exécuter la commande suivante sur la base de données :

---------------

SELECT * FROM accounts

WHERE owner =

AND accountname = ;

---------------

Cette commande vise à récupérer les informations de compte d'un tableau « accounts » (comptes) mais uniquement dans le cas où le nom du propriétaire (« owner ») et le nom du compte (« account name ») se trouvent tous les deux sur la même ligne du tableau. Le nom du propriétaire et le nom du compte à consulter doivent être fournis par l'utilisateur final, via un formulaire de page Web.

Un pirate peut saisir dans ce formulaire un nom de propriétaire et un nom de compte factices : « ‘name' OR ‘x'='x' ». Si l'application n'est pas suffisamment équipée pour se défendre contre les attaques par injection, les apostrophes de la ligne de commande et le terme « OR » créeront une commande SQL modifiée qui sera acheminée jusqu'à la base de données :

---------------

SELECT * FROM accounts

WHERE owner = ‘smith'

AND accountname = ‘name' OR ‘x' = ‘x';

---------------

La clause « WHERE », habituellement restrictive, est maintenant satisfaite à chaque fiche du tableau « accounts » : bien que la combinaison nom de propriétaire/nom de compte « smith/name » puisse être introuvable, la seconde partie de la clause (après « OR », soit « 'x'='x' ») est toujours vraie. Ainsi, chaque fiche du tableau peut être adressée à l'application et remise à l'utilisateur final.

Didacticiel sur les attaques par injection SQL — Thème 4 : Les moyens de défense contre les attaques par injection SQL

Le présent didacticiel a brièvement résumé les objectifs et le principe technique des attaques par injection SQL. Pour les propriétaires d'applications Web, la question est à présent de savoir comment bloquer de telles attaques. En ce domaine, il existe deux approches globales :

  • Porter un soin particulier à la rédaction du code de l'application. Plusieurs bonnes pratiques en matière de programmation permettent de considérablement réduire la vulnérabilité d'une application Web aux attaques par injection SQL. On peut par exemple utiliser des requêtes paramétrisées ou des procédures enregistrées. Il est également possible d'utiliser des listes noires ou blanches de caractères à filtrer et d'assainir ainsi la saisie de l'utilisateur dans les formulaires Web. Cependant, une programmation, même de qualité, ne suffit généralement pas à assurer la sécurité des services Web et à protéger les données. En effet, la plupart des applications Web sont rédigées par différents programmateurs sur une période de temps assez longue. De même, il peut s'avérer très coûteux de modifier des applications Web comportant des failles de sécurité.
  • Installer un pare-feu d'application Web (WAF) en amont de l'application Web pour inspecter et filtrer le trafic HTTP entrant. Un WAF constitue une défense efficace contre les attaques par injection SQL, mais les WAF sur site traditionnels ont tendance à former des goulets d'étranglement.

La solution de sécurité Web dans le Cloud d'Akamai incorpore un WAF au réseau de diffusion de contenu Web international d'Akamai. Cette solution est une défense en amont largement distribuée contre les attaques par injection SQL, vos applications Web ne souffrent donc pas de pertes de performances. Elle vous protège également contre les tactiques de plus en plus populaires d'attaques simultanées : une attaque par déni de service contre un bien Web doublée d'une attaque par injection SQL.

En savoir plus sur les solutions de sécurité dans le Cloud très évolutives d'Akamai.