How To Prevent A Hacker From Attacking A Website With A Password Protected Code In Ruby On Rails (Rora) (Rorora.Com) (Ruby On Rails) ( Ruby On Ruby) (Roura)

Similar documents
Audit de sécurité avec Backtrack 5

Introduction Les failles les plus courantes Les injections SQL. Failles Web. Maxime Arthaud. net7. Jeudi 03 avril 2014.

The Need For Speed. leads to PostgreSQL. Dimitri Fontaine 28 Mars 2013

Introduction. GEAL Bibliothèque Java pour écrire des algorithmes évolutionnaires. Objectifs. Simplicité Evolution et coévolution Parallélisme

Thursday, February 7, DOM via PHP

«Object-Oriented Multi-Methods in Cecil» Craig Chambers (Cours IFT6310, H08)

N1 Grid Service Provisioning System 5.0 User s Guide for the Linux Plug-In

Setting up a monitoring and remote control tool

Note concernant votre accord de souscription au service «Trusted Certificate Service» (TCS)

Office of the Auditor General / Bureau du vérificateur général FOLLOW-UP TO THE 2007 AUDIT OF THE DISPOSAL OF PAVEMENT LINE MARKER EQUIPMENT 2009

COLLABORATIVE LCA. Rachel Arnould and Thomas Albisser. Hop-Cube, France

ESMA REGISTERS OJ/26/06/2012-PROC/2012/004. Questions/ Answers

Archived Content. Contenu archivé

TP : Configuration de routeurs CISCO

Archived Content. Contenu archivé

BILL C-665 PROJET DE LOI C-665 C-665 C-665 HOUSE OF COMMONS OF CANADA CHAMBRE DES COMMUNES DU CANADA

Archived Content. Contenu archivé

Langages Orientés Objet Java

Sun StorEdge A5000 Installation Guide

Dental Insurance Claims Identification of Atypical Claims Activity

Archived Content. Contenu archivé

Upgrading the Solaris PC NetLink Software

Introduction au BIM. ESEB Seyssinet-Pariset Economie de la construction contact@eseb.fr

Sun Enterprise Optional Power Sequencer Installation Guide

Office of the Auditor General / Bureau du vérificateur général FOLLOW-UP TO THE 2010 AUDIT OF COMPRESSED WORK WEEK AGREEMENTS 2012 SUIVI DE LA

Introduction ToIP/Asterisk Quelques applications Trixbox/FOP Autres distributions Conclusion. Asterisk et la ToIP. Projet tuteuré

Sun Management Center Change Manager Release Notes

Sun Cluster 2.2 7/00 Data Services Update: Apache Web Server

Sun StorEdge RAID Manager Release Notes

Durée 4 jours. Pré-requis

Sun StorEdge Availability Suite Software Point-in-Time Copy Software Maximizing Backup Performance

Archived Content. Contenu archivé

Archived Content. Contenu archivé

Measuring Policing Complexity: A Research Based Agenda

Optimizing Solaris Resources Through Load Balancing

Memory Eye SSTIC Yoann Guillot. Sogeti / ESEC R&D yoann.guillot(at)sogeti.com

Sun Management Center 3.6 Version 5 Add-On Software Release Notes

Service Level Definitions and Interactions

Exploring the iplanet Directory Server NIS Extensions

Stockage distribué sous Linux

Reconstruction d un modèle géométrique à partir d un maillage 3D issu d un scanner surfacique

Les Broadcast Receivers...

Solaris 9 9/05 Installation Roadmap

Scrubbing Disks Using the Solaris Operating Environment Format Program

Applying this template to your existing presentation

Solaris 10 Documentation README

Machine de Soufflage defibre

Sun N1 Service Provisioning System User s Guide for Linux Plug-In 2.0

Inspection des engins de transport

Licence Informatique Année Exceptions

Comparing JavaServer Pages Technology and Microsoft Active Server Pages

Memo bconsole. Memo bconsole

CFT ICT review Questions/Answers

Performance Modeling of TCP/IP in a Wide-Area Network

SIXTH FRAMEWORK PROGRAMME PRIORITY [6

Sun GlassFish Enterprise Manager SNMP Monitoring 1.0 Installation and Quick Start Guide

LAN-Free Backups Using the Sun StorEdge Instant Image 3.0 Software

AgroMarketDay. Research Application Summary pp: Abstract

Solaris Bandwidth Manager

Java Dynamic Management Architecture for Intelligent Networks

Archived Content. Contenu archivé

A new table for prevention of hypoglycaemia during physical activity in type 1 diabetic patient...

Personnalisez votre intérieur avec les revêtements imprimés ALYOS design

site et appel d'offres

Sun StorEdge N8400 Filer Release Notes

NUNAVUT HOUSING CORPORATION - BOARD MEMBER RECRUITMENT

Évariste Galois and Solvable Permutation Groups

Competitive Intelligence en quelques mots

SUN SEEBEYOND ebam STUDIO RELEASE NOTES. Release 5.1.2

Méthodes ensemblistes pour une localisation robuste de robots sous-marins

Windows et Office XP, pack en 2 volumes : Microsoft Office 2003 KillerTips; Décrasser Windows X

:: WIRELESS MOBILE MOUSE

Etudes de cas en OCL avec l outil USE 2

Sun TM SNMP Management Agent Release Notes, Version 1.6

BUSINESS PROCESS OPTIMIZATION. OPTIMIZATION DES PROCESSUS D ENTERPRISE Comment d aborder la qualité en améliorant le processus

Millier Dickinson Blais

Sun Management Center 3.6 Version 4 Add-On Software Release Notes


Archived Content. Contenu archivé

Technical Service Bulletin

Vincent Rullier Technology specialist Microsoft Suisse Romande

Sun Management Center 3.0 Platform Update 4 Release Notes for Sun Fire 15K/12K Systems

LLP ES-LEONARDO-LMP.

Sun StorEdge T3 Dual Storage Array - Part 1

System Requirements Orion

Enterprise Risk Management & Board members. GUBERNA Alumni Event June 19 th 2014 Prepared by Gaëtan LEFEVRE

RAPPORT FINANCIER ANNUEL PORTANT SUR LES COMPTES 2014

JumpStart : NIS and sysidcfg

Calcul parallèle avec R

ATP Co C pyr y ight 2013 B l B ue C o C at S y S s y tems I nc. All R i R ghts R e R serve v d. 1

MapReduce Détails Optimisation de la phase Reduce avec le Combiner

Web - Travaux Pratiques 1

Sun Enterprise 420R Server Product Notes

Reducing the Backup Window With Sun StorEdge Instant Image Software

Oracle Advanced Support Gateway Installation Guide

ACP-EU Cooperation Programme in Science and Technology (S&T II) / Programme de Coopération ACP-UE pour la Science et la Technologie

Veritas Storage Foundation 5.0 Software for SPARC

Sun Integrated Lights Out Manager Supplement for the Sun Fire X4450 Server

How To Start A Glassfish V3 Application Server Quick Start (Windows) On A Microsoft Server (Windows 7)

Getting StartedWith Sun Java System Application Server 9.1 Update 2

Transcription:

Rrabids: un système de détection d intrusions comportemental destiné aux applications Web écrites en Ruby on Rails. Supélec Vredi 10 juin 2011

Plan de la présentation 1 Généralités 2 Contexte 3 Construction du modèle 4 Résultats 2/40

Projet Dali Design and Assessment of application Level Intrusion detection systems Conception et évaluation d IDS au niveau applicatif. Partenaires : Kereval : PME rennaise spécialisée dans le test applicatif. Télécom-Bretagne. Supélec. Laas-Cnrs. 3/40

Détection d intrusions Par signature : Modélise le comportement interdit de l entité Utilise une base de connaissance des attaques connues Ne permet pas de découvrir de nouvelles attaques Comportementale : Modélise le comportement normal de l entité Repose sur la capacité à créer un modèle de référence complet et précis Permet de détecter de nouvelles attaques sans intervention sur l IDS ni mise à jour 4/40

IDS applicatif Type d erreurs détectables Erreur dans le flot d exécution : Les instructions, appels de fonction, retour de fonction ne s exécutent pas dans l ordre correct. Témoigne d attaques très connues et très répandues telles que les dépassement de buffer (buffer overflow), détournement vers les librairies (return to lib C, return-oriented programming). Déjà largement étudié. Erreur dans les données : Certaines variables prennent des valeurs incorrectes vis à vis de la spécification du logiciel (pas de son implémentation évidemment). Classe d attaque aussi dangereuse que les précédentes. Par exemple débordement d entiers (integer overflow). Beaucoup moins étudié. 5/40

En résumé Dans ces travaux nous nous intéressons à : Détection comportementale ; au niveau applicatif ; par détection d attaques contre les données. Pour cela : Construction des invariants du code à vérifier. La violation d un invariant peut être le témoignage de l exploitation d une vulnérabilité de l application par un attaquant. 6/40

Ruby Mais : Langage interprété développé depuis 1993 par Yukihiro Matsumoto. Langage orienté-objet. Typage dynamique. Gestion automatique de la mémoire (garbage-collector). Support de la réflexivité. Langage sans spécification ni grammaire. L implémentation originale sert de référence de facto. 7/40

Ruby on Rails Framework destiné à la création d applications Web. Utilisation du modèle MVC (Modèle-Vue-Contrôleur). Prototypage rapide d applications Web. Largement utilisé, par exemple par Twitter pour l interface graphique de leur site Web. 8/40

Modèle MVC Modèle : Le modèle défini les données de l application et les méthodes d accès. Tout les traitements sont effectués dans cette couche. Vue : La vue pr les informations en provenance du modèle et les présente à l utilisateur. Controlleur : Le contrôleur répond aux événements de l utilisateur et commande les actions sur le modèle. Cela peut entrainer une mise à jour de la vue. 9/40

Application Insecure Application développée par Kereval. Développée en Ruby en utilisant le framework Ruby On Rails (RoR) destiné aux applications Web. Il s agit d une application de commerce en ligne. Application trois-tiers : Serveur Web. Interpréteur Ruby embarqué. Base de données (MySQL). 10/40

Application Insecure 11/40

Application Insecure http://myhost.com:3000/users/login 1 controller action router 2 instantiate users controller and calls login action class UsersController signup login logout class ReviewsController index new create find_product class ProductsController show filter 4 invokes interacts 3 View Model database 12/40

Failles dans l application Insecure Cette application présente certaines des failles communément rencontrées dans ce type d applications : Injection SQL. Modification des paramètres des requêtes. Manipulation de cookie. Cross-site scripting. 13/40

Application Insecure 14/40

Exemple d attaque Injection SQL Saisie des informations xxxx OR 1 = 1 pour les champs login et password. La requête émise vers la base de données est select * from table user where login=xxxx OR 1 = 1 and password = xxxx OR 1 = 1 Permet de se connecter en tant qu administrateur du site de vente sans en connaître le mot de passe. 15/40

Authentification sur l application c l a s s U s e r s C o n t r o l l e r < A p p l i c a t i o n C o n t r o l l e r d e f l o g i n i f r e q u e s t. p o s t? # whole u s e r i s s t o r e d i n t h e s e s s i o n i f s e s s i o n [ : u s e r ] = User. a u t h e n t i c a t e ( params [ : u s e r ] [ : l o g i n ], params [ : u s e r ] [ : password ] ) f l a s h [ : n o t i c e ] = You have been s u c c e s s f u l l y l o g g e d i n. i f s e s s i o n [ : u s e r ]. admin r e d i r e c t t o : c o n t r o l l e r => / admin /home, : a c t i o n => i n d e x r e d i r e c t t o : c o n t r o l l e r => / u s e r /home, : a c t i o n => i n d e x f l a s h. now [ : e r r o r ] = Login f a i l e d params[ :user][ :login] == admin params[ :user][ :password] == secret 16/40

Authentification sur l application c l a s s U s e r s C o n t r o l l e r < A p p l i c a t i o n C o n t r o l l e r d e f l o g i n i f r e q u e s t. p o s t? # whole u s e r i s s t o r e d i n t h e s e s s i o n i f s e s s i o n [ : u s e r ] = User. a u t h e n t i c a t e ( params [ : u s e r ] [ : l o g i n ], params [ : u s e r ] [ : password ] ) f l a s h [ : n o t i c e ] = You have been s u c c e s s f u l l y l o g g e d i n. i f s e s s i o n [ : u s e r ]. admin r e d i r e c t t o : c o n t r o l l e r => / admin /home, : a c t i o n => i n d e x r e d i r e c t t o : c o n t r o l l e r => / u s e r /home, : a c t i o n => i n d e x f l a s h. now [ : e r r o r ] = Login f a i l e d params[ :user][ :login] == admin params[ :user][ :password] == secret session[ :user][ :login] == admin 17/40

Authentification sur l application c l a s s U s e r s C o n t r o l l e r < A p p l i c a t i o n C o n t r o l l e r d e f l o g i n i f r e q u e s t. p o s t? # whole u s e r i s s t o r e d i n t h e s e s s i o n i f s e s s i o n [ : u s e r ] = User. a u t h e n t i c a t e ( params [ : u s e r ] [ : l o g i n ], params [ : u s e r ] [ : password ] ) f l a s h [ : n o t i c e ] = You have been s u c c e s s f u l l y l o g g e d i n. i f s e s s i o n [ : u s e r ]. admin r e d i r e c t t o : c o n t r o l l e r => / admin /home, : a c t i o n => i n d e x r e d i r e c t t o : c o n t r o l l e r => / u s e r /home, : a c t i o n => i n d e x f l a s h. now [ : e r r o r ] = Login f a i l e d params[ :user][ :login] == admin params[ :user][ :password] == secret session[ :user][ :login] == admin params[ :user][ :login] == session[ :user][ :login] 18/40

Impact de l attaque au niveau de l application c l a s s U s e r s C o n t r o l l e r < A p p l i c a t i o n C o n t r o l l e r d e f l o g i n i f r e q u e s t. p o s t? # whole u s e r i s s t o r e d i n t h e s e s s i o n i f s e s s i o n [ : u s e r ] = User. a u t h e n t i c a t e ( params [ : u s e r ] [ : l o g i n ], params [ : u s e r ] [ : password ] ) f l a s h [ : n o t i c e ] = You have been s u c c e s s f u l l y l o g g e d i n. i f s e s s i o n [ : u s e r ]. admin r e d i r e c t t o : c o n t r o l l e r => / admin /home, : a c t i o n => i n d e x r e d i r e c t t o : c o n t r o l l e r => / u s e r /home, : a c t i o n => i n d e x f l a s h. now [ : e r r o r ] = Login f a i l e d params[ :user][ :login] == xxxx OR 1 = 1 params[ :user][ :password] == xxxx OR 1 = 1 19/40

Impact de l attaque au niveau de l application c l a s s U s e r s C o n t r o l l e r < A p p l i c a t i o n C o n t r o l l e r d e f l o g i n i f r e q u e s t. p o s t? # whole u s e r i s s t o r e d i n t h e s e s s i o n i f s e s s i o n [ : u s e r ] = User. a u t h e n t i c a t e ( params [ : u s e r ] [ : l o g i n ], params [ : u s e r ] [ : password ] ) f l a s h [ : n o t i c e ] = You have been s u c c e s s f u l l y l o g g e d i n. i f s e s s i o n [ : u s e r ]. admin r e d i r e c t t o : c o n t r o l l e r => / admin /home, : a c t i o n => i n d e x r e d i r e c t t o : c o n t r o l l e r => / u s e r /home, : a c t i o n => i n d e x f l a s h. now [ : e r r o r ] = Login f a i l e d params[ :user][ :login] == xxxx OR 1 = 1 params[ :user][ :password] == xxxx OR 1 = 1 session[ :user][ :login] == admin 20/40

Impact de l attaque au niveau de l application c l a s s U s e r s C o n t r o l l e r < A p p l i c a t i o n C o n t r o l l e r d e f l o g i n i f r e q u e s t. p o s t? # whole u s e r i s s t o r e d i n t h e s e s s i o n i f s e s s i o n [ : u s e r ] = User. a u t h e n t i c a t e ( params [ : u s e r ] [ : l o g i n ], params [ : u s e r ] [ : password ] ) f l a s h [ : n o t i c e ] = You have been s u c c e s s f u l l y l o g g e d i n. i f s e s s i o n [ : u s e r ]. admin r e d i r e c t t o : c o n t r o l l e r => / admin /home, : a c t i o n => i n d e x r e d i r e c t t o : c o n t r o l l e r => / u s e r /home, : a c t i o n => i n d e x f l a s h. now [ : e r r o r ] = Login f a i l e d params[ :user][ :login] == xxxx OR 1 = 1 params[ :user][ :password] == xxxx OR 1 = 1 session[ :user][ :login] == admin params[ :user][ :login]!= session[ :user][ :login] 21/40

Détection possible c l a s s U s e r s C o n t r o l l e r < A p p l i c a t i o n C o n t r o l l e r d e f l o g i n i f r e q u e s t. p o s t? # whole u s e r i s s t o r e d i n t h e s e s s i o n i f s e s s i o n [ : u s e r ] = User. a u t h e n t i c a t e ( params [ : u s e r ] [ : l o g i n ], params [ : u s e r ] [ : password ] ) f l a s h [ : n o t i c e ] = You have been s u c c e s s f u l l y l o g g e d i n. i f s e s s i o n [ : u s e r ]. admin r e d i r e c t t o : c o n t r o l l e r => / admin /home, : a c t i o n => i n d e x r e d i r e c t t o : c o n t r o l l e r => / u s e r /home, : a c t i o n => i n d e x f l a s h. now [ : e r r o r ] = Login f a i l e d params[ :user][ :login] == session[ :user][ :login] 22/40

Construction des invariants Utilisation d un outil externe appelé Daikon. Développé au MIT par l équipe Program Analysis Group http ://groups.csail.mit.edu/pag/. Outil issu du monde du test logiciel. Destiné à vérifier la conformité d un logiciel vis-à-vis de sa spécification. 23/40

Daikon Permet le calcul d invariants potentiels. Algorithme Generate and check À partir d une trace contenant par exemple le contenu de variables à certains instants de l exécution, des invariants potentiels sont dérivés. Ils sont invalidés au fur et à mesure du traitement des traces. Au final ne sont conservés que les invariants vrais pour toutes les traces 24/40

Réduction du nombre d invariants Afin de diminuer le nombre d invariants (potentiels), on ne s intéresse qu aux variables qui dépent des entrées utilisateur. Ces variables sont les seules dont les valeurs peuvent être influencées par l utilisateur. Afin de traquer ces variables, on se base sur la notion de taint checking. Propagation d une marque apposée sur les entrées via le flot de données. Partiellement supportée par l interpréteur Ruby. 25/40

Apprentissage automatique États de l application Plugin RoR indépant de l application considérée Préempte l exécution de l application à chaque instruction Inspecte toutes les variables de l application Conserve l état des variables dépant des entrées utilisateurs 26/40

Apprentissage automatique Code à exécuter d e f a c t i o n i n s t r 1 i n s t r 2 i n s t r 3 27/40

Apprentissage automatique Code à exécuter d e f a c t i o n i n s t r 1 i n s t r 2 i n s t r 3 Exécution réelle d e f f u n c gettaintedvars ( ) SaveTaintedVars ( ) i n s t r 1 gettaintedvars ( ) SaveTaintedVars ( ) i n s t r 2 gettaintedvars ( ) SaveTaintedVars ( ) i n s t r 3 gettaintedvars ( ) SaveTaintedVars ( ) C r e a t e T r a c e F i l e ( ) 28/40

Apprentissage automatique Parcours automatique de l application Nécessité de parcourir l application Permet de couvrir l ensemble des cas normaux Utilisation d outils de test fonctionnels : Selenium 29/40

Traces générées v a r i a b l e 17 1 @ params [ u s e r ] [ l o g i n ] var k i n d v a r i a b l e dec t y p e S t r i n g rep type java. lang. S t r i n g e n c l o s i n g v a r 17 1 @ params [ u s e r ] c o m p a r a b i l i t y 0 v a r i a b l e 19 2 @ s e s s i o n [ u s e r ]. @ a t t r i b u t e s [ l o g i n ] var k i n d v a r i a b l e dec t y p e S t r i n g rep type java. lang. S t r i n g e n c l o s i n g v a r 19 2 @ s e s s i o n [ u s e r ]. @ a t t r i b u t e s c o m p a r a b i l i t y 0... 17 1 @ params [ u s e r ] [ l o g i n ] e v e t t e 1 19 2 @ s e s s i o n [ u s e r ] @ a t t r i b u t e s [ l o g i n ] e v e t t e 1 30/40

Traces générées v a r i a b l e 17 1 @ params [ u s e r ] [ l o g i n ] var k i n d v a r i a b l e dec t y p e S t r i n g rep type java. lang. S t r i n g e n c l o s i n g v a r 17 1 @ params [ u s e r ] c o m p a r a b i l i t y 0 v a r i a b l e 19 2 @ s e s s i o n [ u s e r ]. @ a t t r i b u t e s [ l o g i n ] var k i n d v a r i a b l e dec t y p e S t r i n g rep type java. lang. S t r i n g e n c l o s i n g v a r 19 2 @ s e s s i o n [ u s e r ]. @ a t t r i b u t e s c o m p a r a b i l i t y 0... 17 1 @ params [ u s e r ] [ l o g i n ] e v e t t e 1 19 2 @ s e s s i o n [ u s e r ] @ a t t r i b u t e s [ l o g i n ] e v e t t e 1 17 1 @ params [ u s e r ] [ name ] == 19 2 @ s e s s i o n [ u s e r ]. @ a t t r i b u t e s [ name ] 31/40

Tissage Traces Daikon Invariants Application code Weaver Instrumented code 32/40

Code du contrôleur sensible à une attaque par injection SQL c l a s s U s e r s C o n t r o l l e r < A p p l i c a t i o n C o n t r o l l e r d e f l o g i n i f r e q u e s t. p o s t? # whole u s e r i s s t o r e d i n t h e s e s s i o n i f s e s s i o n [ : u s e r ] = User. a u t h e n t i c a t e ( params [ : u s e r ] [ : l o g i n ], params [ : u s e r ] [ : password ] ) f l a s h [ : n o t i c e ] = You have been s u c c e s s f u l l y l o g g e d i n. i f s e s s i o n [ : u s e r ]. admin r e d i r e c t t o : c o n t r o l l e r => / admin /home, : a c t i o n => i n d e x r e d i r e c t t o : c o n t r o l l e r => / u s e r /home, : a c t i o n => i n d e x f l a s h. now [ : e r r o r ] = Login f a i l e d 33/40

Code instrumenté automatiquement 17 1 @ params[user][name] d e f l o g i n i f r e q u e s t. p o s t? i f i s D e f i n e d?( @ params [ u s e r ] [ l o g i n ] ) #AutoGenerated I D S A s s e r t s. s t o r e ( 17 1 @ params [ u s e r ] [ l o g i n ], @ params [ u s e r ] [ l o g i n ] ) # whole u s e r i s s t o r e d i n t h e s e s s i o n i f s e s s i o n [ : u s e r ] = User. a u t h e n t i c a t e ( params [ : u s e r ] [ : l o g i n ], params [ : u s e r ] [ : password ] ) i f i s D e f i n e d?( @ s e s s i o n [ : u s e r ] [ l o g i n ] ) #AutoGenerated I D S A s s e r t s. s t o r e ( 19 2 @ s e s s i o n [ : u s e r ] [ : l o g i n ], @ s e s s i o n [ : u s e r ] [ : l o g i n ] ) a s s e r t E q u a l V a r ( 17 1 @ params [ u s e r ] [ l o g i n ], 19 2 @ s e s s i o n [ : u s e r ] [ : l o g i n ] ) f l a s h [ : n o t i c e ] = You have been s u c c e s s f u l l y l o g g e d i n. i f s e s s i o n [ : u s e r ]. admin r e d i r e c t t o : c o n t r o l l e r => / admin /home, : a c t i o n => i n d e x r e d i r e c t t o : c o n t r o l l e r => / u s e r /home, : a c t i o n => i n d e x f l a s h. now [ : e r r o r ] = L ogin f a i l e d 34/40

Code instrumenté automatiquement 19 2 @ session[user].@attributes[name] d e f l o g i n i f r e q u e s t. p o s t? i f i s D e f i n e d?( @ params [ u s e r ] [ l o g i n ] ) #AutoGenerated I D S A s s e r t s. s t o r e ( 17 1 @ params [ u s e r ] [ l o g i n ], @ params [ u s e r ] [ l o g i n ] ) # whole u s e r i s s t o r e d i n t h e s e s s i o n i f s e s s i o n [ : u s e r ] = User. a u t h e n t i c a t e ( params [ : u s e r ] [ : l o g i n ], params [ : u s e r ] [ : password ] ) i f i s D e f i n e d?( @ s e s s i o n [ : u s e r ] [ l o g i n ] ) #AutoGenerated I D S A s s e r t s. s t o r e ( 19 2 @ s e s s i o n [ : u s e r ] [ : l o g i n ], @ s e s s i o n [ : u s e r ] [ : l o g i n ] ) a s s e r t E q u a l V a r ( 17 1 @ params [ u s e r ] [ l o g i n ], 19 2 @ s e s s i o n [ : u s e r ] [ : l o g i n ] ) f l a s h [ : n o t i c e ] = You have been s u c c e s s f u l l y l o g g e d i n. i f s e s s i o n [ : u s e r ]. admin r e d i r e c t t o : c o n t r o l l e r => / admin /home, : a c t i o n => i n d e x r e d i r e c t t o : c o n t r o l l e r => / u s e r /home, : a c t i o n => i n d e x f l a s h. now [ : e r r o r ] = L ogin f a i l e d 35/40

Code instrumenté automatiquement Vérification de l assertion d e f l o g i n i f r e q u e s t. p o s t? i f i s D e f i n e d?( @ params [ u s e r ] [ l o g i n ] ) #AutoGenerated I D S A s s e r t s. s t o r e ( 17 1 @ params [ u s e r ] [ l o g i n ], @ params [ u s e r ] [ l o g i n ] ) # whole u s e r i s s t o r e d i n t h e s e s s i o n i f s e s s i o n [ : u s e r ] = User. a u t h e n t i c a t e ( params [ : u s e r ] [ : l o g i n ], params [ : u s e r ] [ : password ] ) i f i s D e f i n e d?( @ s e s s i o n [ : u s e r ] [ l o g i n ] ) #AutoGenerated I D S A s s e r t s. s t o r e ( 19 2 @ s e s s i o n [ : u s e r ] [ : l o g i n ], @ s e s s i o n [ : u s e r ] [ : l o g i n ] ) a s s e r t E q u a l V a r ( 17 1 @ params [ u s e r ] [ l o g i n ], 19 2 @ s e s s i o n [ : u s e r ] [ : l o g i n ] ) f l a s h [ : n o t i c e ] = You have been s u c c e s s f u l l y l o g g e d i n. i f s e s s i o n [ : u s e r ]. admin r e d i r e c t t o : c o n t r o l l e r => / admin /home, : a c t i o n => i n d e x r e d i r e c t t o : c o n t r o l l e r => / u s e r /home, : a c t i o n => i n d e x f l a s h. now [ : e r r o r ] = L ogin f a i l e d 36/40

Code instrumenté automatiquement 17 1 @ params[user][name] == 19 2 @ session[user].@attributes[name] d e f l o g i n i f r e q u e s t. p o s t? i f i s D e f i n e d?( @ params [ u s e r ] [ l o g i n ] ) #AutoGenerated I D S A s s e r t s. s t o r e ( 17 1 @ params [ u s e r ] [ l o g i n ], @ params [ u s e r ] [ l o g i n ] ) # whole u s e r i s s t o r e d i n t h e s e s s i o n i f s e s s i o n [ : u s e r ] = User. a u t h e n t i c a t e ( params [ : u s e r ] [ : l o g i n ], params [ : u s e r ] [ : password ] ) i f i s D e f i n e d?( @ s e s s i o n [ : u s e r ] [ l o g i n ] ) #AutoGenerated I D S A s s e r t s. s t o r e ( 19 2 @ s e s s i o n [ : u s e r ] [ : l o g i n ], @ s e s s i o n [ : u s e r ] [ : l o g i n ] ) a s s e r t E q u a l V a r ( 17 1 @ params [ u s e r ] [ l o g i n ], 19 2 @ s e s s i o n [ : u s e r ] [ : l o g i n ] ) f l a s h [ : n o t i c e ] = You have been s u c c e s s f u l l y l o g g e d i n. i f s e s s i o n [ : u s e r ]. admin r e d i r e c t t o : c o n t r o l l e r => / admin /home, : a c t i o n => i n d e x r e d i r e c t t o : c o n t r o l l e r => / u s e r /home, : a c t i o n => i n d e x f l a s h. now [ : e r r o r ] = L ogin f a i l e d 37/40

Résultats obtenus sur l ensemble du code Fichier Nombre de lignes initial Nombre de lignes du code instrumenté application controller.rb 20 20 home controller.rb 11 537 products controller.rb 26 1503 reviews controller.rb 37 1547 users controller.rb 51 1681 Temps moyen d exécution : Avant instrumentation : 16.5ms. Après instrumentation : 125ms. 38/40

Conclusion Résultats encourageants à l évaluation. Encore des améliorations à apporter au niveau de l apprentissage (diminution du taux de faux positifs). Optimisation de l implémentation éventuelle afin de diminuer le surcoût à l exécution. 39/40

Rrabids: un système de détection d intrusions comportemental destiné aux applications Web écrites en Ruby on Rails. Supélec Vredi 10 juin 2011 40/40