Plusieurs
attaques par injection SQL ont été menées sur Internet depuis le début de
l'année 2008.
Elles ont fait
l'objet de deux dangers potentiels (CERT-IST/DG-2008.003 et CERT-IST/DG-2008.005), d'un "VulnCoord" (VulnCoord-2008.010) et du hub de gestion de crise [Infections web].
Il nous a semblé intéressant de faire également un
point sur ces attaques à travers un article.
Principe d'une attaque par injection SQL
Elles sont
conduites par un utilisateur malveillant contre un site web, qui génère
dynamiquement des requêtes SQL depuis des données saisies par les utilisateurs.
Pour rappeler le
principe de ces attaques, nous prendrons l'exemple très classique d'une page
web d'authentification contenant un formulaire de saisie d'un nom d'utilisateur
et de son mot de passe.
Lorsque
l'utilisateur valide sa saisie, une URL de la forme suivante est envoyée vers
le site web:
https://site-web/dossier?user=nom&password=xxxxx
Le site web
génère alors une requête SQL de la forme suivante pour rechercher l'utilisateur
dans sa base de données:
SELECT * FROM users WHERE user =
'$user' AND motdepasse = '$password'
Maintenant si une
personne malveillante qui connaît un utilisateur 'Martin' saisit la chaîne
suivante comme nom d'utilisateur:
Martin'; //'
La requête
générée est alors la suivante :
SELECT * FROM users WHERE user= 'Martin';
//'' AND motdepasse = '$password'
L'attaquant est
alors authentifié en tant qu'utilisateur "Martin" sans avoir eu à
connaître le mot de passe de ce dernier.
Nota : la
séquence de caractères "//" est un marqueur de commentaire. Dans
notre exemple, elle est utilisée pour contourner le contrôle du mot de passe en
mettant la fin de la
requête SQL en commentaire.
En déclinant
cette attaque sous différentes formes, il est possible de lire et de modifier
illégalement les informations stockées en base de données.
Spécificité
des attaques menées ces derniers mois
L'idée générale
de ces attaques est d'infecter dans un premier temps des sites web pour pouvoir
attaquer ensuite les victimes qui viennent s’y connecter.
Les sites web
attaqués ont les caractéristiques suivantes :
- ils sont construits autour d'une base
de données dans laquelle est stocké un contenu éditorial que le serveur
web utilise pour générer dynamiquement des pages web.
- ils sont développés en environnement
Windows (pages ASP, base de données MS-SQL)
- ils présentent des vulnérabilités de
type SQL injection.
L'injection SQL
est alors utilisée dans la première phase de l'attaque pour injecter des tags HTML
"<script>" (exécution de script JavaScript) ou
"<iframe>" (inclusion de pages web tierces) malveillants dans les
contenus éditoriaux stockés en base de données.
Une fois la base de données ainsi altérée, les pages web générées dynamiquement
contiennent les données <script> ou <iframe> choisies par le
pirate. Elles sont donc capables d'exploiter une vulnérabilité quelconque (de
Windows, Internet Explorer, …) sur les postes des victimes qui tentent de les
visualiser.
C'est la deuxième phase de l'attaque. Elle vise les postes des internautes qui
viennent consulter les sites web infectés.
Les sites web vulnérables ne sont donc pas visés directement, mais ils sont
utilisés comme vecteurs d'attaque contre les victimes qui viennent les
consulter.
Nota : L'injection SQL utilisée dans la première phase de l'attaque exploite
des vulnérabilités dans les applications web et non des vulnérabilités dans les
logiciels utilisés par ces applications (IIS, SQL server, …).
Ces attaques ont
surpris par leur ampleur (des dizaines, voire des centaines, de milliers de
sites web infectés). Leur caractère massif s'explique par deux raisons :
- L'existence d'outils permettant de
les automatiser.
Le SANS a pu récupérer un de ces outils et en faire une analyse.
Cet outil contient un moteur de recherche (paramétrable) utilisant Google et
permettant d'identifier des sites web potentiellement vulnérables. Une
fois les sites web identifiés, cet outil conduit les attaques par
injection SQL permettant d'injecter des tags malveillants (également
paramétrables) dans les pages web.
- Un outil de ce type a été inséré dans
le botnet "Asprox".
Cela lui permet d'infecter des sites web vulnérables afin de se propager
dans un second temps sur les postes des victimes qui visitent ces sites.
Pour plus d'information :