• No results found

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)

N/A
N/A
Protected

Academic year: 2021

Share "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)"

Copied!
40
0
0

Loading.... (view fulltext now)

Full text

(1)

Rrabids

: un syst`

eme de d´

etection d’intrusions

comportemental destin´

e aux applications Web

´

ecrites en Ruby on Rails.

Romaric Ludinard

, Lo¨ıc Le Hennaf, ´

Eric Totel

Sup´

elec

(2)

2/40

1

en´

eralit´

es

2

Contexte

3

Construction du mod`

ele

(3)

Projet Dali

Design and Assessment of application Level Intrusion detection systems

Conception et ´

evaluation d’IDS au niveau applicatif.

Partenaires :

Kereval

: PME rennaise sp´

ecialis´

ee dans le test applicatif.

el´

ecom-Bretagne

.

(4)

4/40

Par signature :

Mod´

elise le comportement

interdit de l’entit´

e

Utilise une base de

connaissance des attaques

connues

Ne permet pas de

ecouvrir de nouvelles

attaques

Comportementale :

Mod´

elise le comportement

normal de l’entit´

e

Repose sur la capacit´

e `

a cr´

eer

un mod`

ele de r´

ef´

erence complet

et pr´

ecis

Permet de d´

etecter de nouvelles

attaques sans intervention sur

l’IDS ni mise `

a jour

(5)

IDS applicatif

Type d’erreurs d´

etectables

Erreur dans le flot d’ex´

ecution :

Les instructions, appels de fonction, retour de fonction ne

s’ex´

ecutent pas dans l’ordre correct.

emoigne d’attaques tr`

es connues et tr`

es r´

epandues telles que

les d´

epassement de buffer (

buffer overflow

), d´

etournement vers

les librairies (

return to lib C

,

return-oriented programming

).

ej`

a largement ´

etudi´

e.

Erreur dans les donn´

ees :

Certaines variables prennent des valeurs incorrectes vis `

a vis de

la sp´

ecification du logiciel (pas de son impl´

ementation

´

(6)

6/40

Dans ces travaux nous nous int´

eressons `

a :

etection comportementale ;

au niveau applicatif ;

par d´

etection d’attaques contre les donn´

ees.

Pour cela :

Construction des invariants du code `

a v´

erifier.

La violation d’un invariant peut ˆ

etre le t´

emoignage de

l’exploitation d’une vuln´

erabilit´

e de l’application par un

attaquant.

(7)

Ruby

Langage interpr´

et´

e d´

evelopp´

e depuis 1993 par Yukihiro

Matsumoto.

Langage orient´

e-objet.

Typage dynamique.

Gestion automatique de la m´

emoire (garbage-collector).

Support de la r´

eflexivit´

e.

Mais :

(8)

8/40

Ruby on Rails

Framework destin´

e `

a la cr´

eation d’applications Web.

Utilisation du mod`

ele MVC (Mod`

ele-Vue-Contrˆ

oleur).

Prototypage rapide d’applications Web.

Largement utilis´

e, par exemple par Twitter pour l’interface

graphique de leur site Web.

(9)

Mod`

ele MVC

Mod`

ele : Le mod`

ele d´

efini les donn´

ees de l’application et les

ethodes d’acc`

es. Tout les traitements sont effectu´

es dans

cette couche.

Vue : La vue prend les informations en provenance du mod`

ele

et les pr´

esente `

a l’utilisateur.

Controlleur : Le contrˆ

oleur r´

epond aux ´

ev´

enements de

l’utilisateur et commande les actions sur le mod`

ele. Cela peut

entrainer une mise `

a jour de la vue.

(10)

10/40

Application d´

evelopp´

ee par Kereval.

evelopp´

ee en Ruby en utilisant le framework Ruby On Rails

(RoR) destin´

e aux applications Web.

Il s’agit d’une application de commerce en ligne.

Application trois-tiers :

Serveur Web.

Interpr´

eteur Ruby embarqu´

e.

(11)
(12)

12/40 class UsersController signup login logout class ProductsController show filter class ReviewsController index new create find_product router http://myHost.com:3000/users/login controller action Model View invokes interacts

instantiate users controller and calls login action

1

2

3 4

(13)

Failles dans l’application Insecure

Cette application pr´

esente certaines des failles commun´

ement

rencontr´

ees dans ce type d’applications :

Injection SQL.

Modification des param`

etres des requˆ

etes.

Manipulation de cookie.

(14)
(15)

Exemple d’attaque

Injection SQL

Saisie des informations

xxxx ’OR’ ’1’=’1’

pour les champs

login

et

password

.

La requˆ

ete ´

emise vers la base de donn´

ees 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.

(16)

16/40

G´en´eralit´es Contexte Construction du mod`ele R´esultats

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 ? # w h o l e 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 ] = U s e r . a u t h e n t i c a t e ( p a r a m s [ : u s e r ] [ : l o g i n ] , p a r a m s [ : u s e r ] [ : p a s s w o r d ] ) f l a s h [ : n o t i c e ] = ’ You h a v e b e e n 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 ’ e l s e 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 ’ end e l s e f l a s h . now [ : e r r o r ] = ’ L o g i n f a i l e d ’ end end

params[ :user][ :login] == ”admin”

params[ :user][ :password] == ”secret”

(17)

G´en´eralit´es Contexte Construction du mod`ele R´esultats

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 ? # w h o l e 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 ] = U s e r . a u t h e n t i c a t e ( p a r a m s [ : u s e r ] [ : l o g i n ] , p a r a m s [ : u s e r ] [ : p a s s w o r d ] ) f l a s h [ : n o t i c e ] = ’ You h a v e b e e n 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 ’ e l s e 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 ’ end e l s e f l a s h . now [ : e r r o r ] = ’ L o g i n f a i l e d ’ end end

params[ :user][ :login] == ”admin”

params[ :user][ :password] == ”secret”

session[ :user][ :login] == ”admin”

(18)

18/40 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 ? # w h o l e 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 ] = U s e r . a u t h e n t i c a t e ( p a r a m s [ : u s e r ] [ : l o g i n ] , p a r a m s [ : u s e r ] [ : p a s s w o r d ] ) f l a s h [ : n o t i c e ] = ’ You h a v e b e e n 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 ’ e l s e 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 ’ end e l s e f l a s h . now [ : e r r o r ] = ’ L o g i n f a i l e d ’ end end

params[ :user][ :login] == ”admin”

params[ :user][ :password] == ”secret”

session[ :user][ :login] == ”admin”

(19)

G´en´eralit´es Contexte Construction du mod`ele R´esultats

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 ? # w h o l e 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 ] = U s e r . a u t h e n t i c a t e ( p a r a m s [ : u s e r ] [ : l o g i n ] , p a r a m s [ : u s e r ] [ : p a s s w o r d ] ) f l a s h [ : n o t i c e ] = ’ You h a v e b e e n 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 ’ e l s e 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 ’ end e l s e f l a s h . now [ : e r r o r ] = ’ L o g i n f a i l e d ’ end end

params[ :user][ :login] == ”xxxx ’OR’ ’1’=’1’”

params[ :user][ :password] == ”xxxx ’OR’ ’1’=’1’”

(20)

20/40

G´en´eralit´es Contexte Construction du mod`ele R´esultats

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 ? # w h o l e 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 ] = U s e r . a u t h e n t i c a t e ( p a r a m s [ : u s e r ] [ : l o g i n ] , p a r a m s [ : u s e r ] [ : p a s s w o r d ] ) f l a s h [ : n o t i c e ] = ’ You h a v e b e e n 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 ’ e l s e 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 ’ end e l s e f l a s h . now [ : e r r o r ] = ’ L o g i n f a i l e d ’ end end

params[ :user][ :login] == ”xxxx ’OR’ ’1’=’1’”

params[ :user][ :password] == ”xxxx ’OR’ ’1’=’1’”

session[ :user][ :login] == ”admin”

(21)

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 ? # w h o l e 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 ] = U s e r . a u t h e n t i c a t e ( p a r a m s [ : u s e r ] [ : l o g i n ] , p a r a m s [ : u s e r ] [ : p a s s w o r d ] ) f l a s h [ : n o t i c e ] = ’ You h a v e b e e n 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 ’ e l s e 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 ’ end e l s e f l a s h . now [ : e r r o r ] = ’ L o g i n f a i l e d ’ end end

params[ :user][ :login] == ”xxxx ’OR’ ’1’=’1’”

params[ :user][ :password] == ”xxxx ’OR’ ’1’=’1’”

session[ :user][ :login] == ”admin”

(22)

22/40 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 ? # w h o l e 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 ] = U s e r . a u t h e n t i c a t e ( p a r a m s [ : u s e r ] [ : l o g i n ] , p a r a m s [ : u s e r ] [ : p a s s w o r d ] ) f l a s h [ : n o t i c e ] = ’ You h a v e b e e n 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 ’ e l s e 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 ’ end e l s e f l a s h . now [ : e r r o r ] = ’ L o g i n f a i l e d ’ end end

(23)

Construction des invariants

Utilisation d’un outil externe appel´

e Daikon.

evelopp´

e au MIT par l’´

equipe Program Analysis Group

http ://groups.csail.mit.edu/pag/.

Outil issu du monde du test logiciel.

Destin´

e `

a v´

erifier la conformit´

e d’un logiciel vis-`

a-vis de sa

sp´

ecification.

(24)

24/40

Permet le calcul d’invariants potentiels.

Algorithme

Generate and check

`

A partir d’une trace contenant par exemple le contenu de

variables `

a certains instants de l’ex´

ecution, des invariants

potentiels sont d´

eriv´

es.

Ils sont invalid´

es au fur et `

a mesure du traitement des traces.

Au final ne sont conserv´

es que les invariants vrais pour toutes

les traces

(25)

eduction du nombre d’invariants

Afin de diminuer le nombre d’invariants (potentiels), on ne

s’int´

eresse qu’aux variables qui d´

ependent des entr´

ees

utilisateur.

Ces variables sont les seules dont les valeurs peuvent ˆ

etre

influenc´

ees par l’utilisateur.

Afin de traquer ces variables, on se base sur la notion de

taint

checking

.

Propagation d’une marque appos´

ee sur les entr´

ees via le flot

de donn´

ees.

(26)

26/40

´

Etats de l’application

Plugin RoR ind´

ependant de l’application consid´

er´

ee

Pr´

eempte l’ex´

ecution de l’application `

a chaque instruction

Inspecte toutes les variables de l’application

(27)

Apprentissage automatique

Code `

a ex´

ecuter

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

(28)

28/40

Code `

a ex´

ecuter

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

end

Ex´

ecution r´

eelle

d e f f u n c g e t T a i n t e d V a r s ( ) S a v e T a i n t e d V a r s ( ) i n s t r 1 g e t T a i n t e d V a r s ( ) S a v e T a i n t e d V a r s ( ) i n s t r 2 g e t T a i n t e d V a r s ( ) S a v e T a i n t e d V a r s ( ) i n s t r 3 g e t T a i n t e d V a r s ( ) S a v e T a i n t e d V a r s ( ) C r e a t e T r a c e F i l e ( ) end

(29)

Apprentissage automatique

Parcours automatique de l’application

ecessit´

e de parcourir l’application

Permet de couvrir l’ensemble des cas

normaux

(30)

30/40

G´en´eralit´es Contexte Construction du mod`ele R´esultats

Traces g´

en´

er´

ees

v a r i a b l e 17 1 @ p a r a m s [ ” u s e r ” ] [ ” l o g i n ” ] v a r−k i n d v a r i a b l e dec−t y p e S t r i n g r e p−t y p e j a v a . l a n g . S t r i n g e n c l o s i n g−v a r 17 1 @ p a r a m s [ ” 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 ” ] v a r−k i n d v a r i a b l e dec−t y p e S t r i n g r e p−t y p e j a v a . l a n g . 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 @ p a r a m s [ ” 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

(31)

Traces g´

en´

er´

ees

v a r i a b l e 17 1 @ p a r a m s [ ” u s e r ” ] [ ” l o g i n ” ] v a r−k i n d v a r i a b l e dec−t y p e S t r i n g r e p−t y p e j a v a . l a n g . S t r i n g e n c l o s i n g−v a r 17 1 @ p a r a m s [ ” 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 ” ] v a r−k i n d v a r i a b l e dec−t y p e S t r i n g r e p−t y p e j a v a . l a n g . 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 @ p a r a m s [ ” 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

(32)

32/40

Traces

Invariants

Weaver

Application

code

Instrumented

code

Daikon

'SHI HI

(33)

Code du contrˆ

oleur sensible `

a 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 ? # w h o l e 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 ] = U s e r . a u t h e n t i c a t e ( p a r a m s [ : u s e r ] [ : l o g i n ] , p a r a m s [ : u s e r ] [ : p a s s w o r d ] ) f l a s h [ : n o t i c e ] = ’ You h a v e b e e n 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 ’ e l s e 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 ’ end e l s e f l a s h . now [ : e r r o r ] = ’ L o g i n f a i l e d ’ end end

(34)

34/40

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 ? ( ’ @ p a r a m s [ ” u s e r ” ] [ ” l o g i n ” ] ’ ) #A u t o G e n e r a t e d I D S A s s e r t s . s t o r e ( ’ 17 1 @ p a r a m s [ ” u s e r ” ] [ ” l o g i n ” ] ’ , @ p a r a m s [ ” u s e r ” ] [ ” l o g i n ” ] ) end # w h o l e 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 ] = U s e r . a u t h e n t i c a t e ( p a r a m s [ : u s e r ] [ : l o g i n ] , p a r a m s [ : u s e r ] [ : p a s s w o r d ] ) 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 ” ] ’ ) #A u t o G e n e r a t e d 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 @ p a r a m s [ ” 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 ] ’ ) end f l a s h [ : n o t i c e ] = ’ You h a v e b e e n 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 ’ e l s e 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 ’ end e l s e f l a s h . now [ : e r r o r ] = ’ L o g i n f a i l e d ’ end end end

(35)

Code instrument´

e 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 ? ( ’ @ p a r a m s [ ” u s e r ” ] [ ” l o g i n ” ] ’ ) #A u t o G e n e r a t e d I D S A s s e r t s . s t o r e ( ’ 17 1 @ p a r a m s [ ” u s e r ” ] [ ” l o g i n ” ] ’ , @ p a r a m s [ ” u s e r ” ] [ ” l o g i n ” ] ) end # w h o l e 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 ] = U s e r . a u t h e n t i c a t e ( p a r a m s [ : u s e r ] [ : l o g i n ] , p a r a m s [ : u s e r ] [ : p a s s w o r d ] ) 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 ” ] ’ ) #A u t o G e n e r a t e d 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 @ p a r a m s [ ” 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 ] ’ ) end f l a s h [ : n o t i c e ] = ’ You h a v e b e e n 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 ’ e l s e 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 ’ end e l s e

(36)

36/40

erification 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 ? ( ’ @ p a r a m s [ ” u s e r ” ] [ ” l o g i n ” ] ’ ) #A u t o G e n e r a t e d I D S A s s e r t s . s t o r e ( ’ 17 1 @ p a r a m s [ ” u s e r ” ] [ ” l o g i n ” ] ’ , @ p a r a m s [ ” u s e r ” ] [ ” l o g i n ” ] ) end # w h o l e 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 ] = U s e r . a u t h e n t i c a t e ( p a r a m s [ : u s e r ] [ : l o g i n ] , p a r a m s [ : u s e r ] [ : p a s s w o r d ] ) 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 ” ] ’ ) #A u t o G e n e r a t e d 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 @ p a r a m s [ ” 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 ] ’ ) end f l a s h [ : n o t i c e ] = ’ You h a v e b e e n 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 ’ e l s e 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 ’ end e l s e f l a s h . now [ : e r r o r ] = ’ L o g i n f a i l e d ’ end end end

(37)

Code instrument´

e 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 ? ( ’ @ p a r a m s [ ” u s e r ” ] [ ” l o g i n ” ] ’ ) #A u t o G e n e r a t e d I D S A s s e r t s . s t o r e ( ’ 17 1 @ p a r a m s [ ” u s e r ” ] [ ” l o g i n ” ] ’ , @ p a r a m s [ ” u s e r ” ] [ ” l o g i n ” ] ) end # w h o l e 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 ] = U s e r . a u t h e n t i c a t e ( p a r a m s [ : u s e r ] [ : l o g i n ] , p a r a m s [ : u s e r ] [ : p a s s w o r d ] ) 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 ” ] ’ ) #A u t o G e n e r a t e d 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 @ p a r a m s [ ” 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 ] ’ ) end f l a s h [ : n o t i c e ] = ’ You h a v e b e e n 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 ’ e l s e 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 ’ end e l s e

(38)

38/40

Fichier Nombre de lignes initial Nombre de lignes du code instrument´e 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´

ecution :

Avant instrumentation : 16

.

5

ms

.

Apr`

es instrumentation : 125

ms

.

(39)

Conclusion

esultats encourageants `

a l’´

evaluation.

Encore des am´

eliorations `

a apporter au niveau de

l’apprentissage (diminution du taux de faux positifs).

Optimisation de l’impl´

ementation ´

eventuelle afin de diminuer

le surcoˆ

ut `

a l’ex´

ecution.

(40)

40/40

Rrabids

: un syst`

eme de d´

etection d’intrusions

comportemental destin´

e aux applications Web

´

ecrites en Ruby on Rails.

Romaric Ludinard

, Lo¨ıc Le Hennaf, ´

Eric Totel

Sup´

elec

References

Related documents

Based on data from the Irish Community Innovation Survey 2006-08, the results suggest that Irish-owned firms which engage in external networks with public knowledge sources,

Against this background, the Grandy House Group worked diligently to expand its new home sales business in line with its theme of “further strengthening the Group’s core business

Hypothesis 2 proposes that closely related concepts compete for attention and thus the prevalence of an old concept should be negatively associated with the number of articles each

Article 42(2) provides that for the purposes of the criminal justice process, telecommunication service providers can record information sent and/or received, and can

For security-critical systems, this approach allows one to consider security requirements from early on in the development process, within the development context, and in a

China will be the largest producer in the Global Footwear Manufacturing Industry and manufactured approximately 7 billion pairs of shoes or an estimated 58% of total world

Conclusions can be drawn for this study: that the use of CAD technology in learning architectural design process helps students in producing creative products, the CAD software

Contractors that perform a construction contract with taxable labor services are required to remit sales tax at the 6.5% state rate on jobs billed on or after July 1, 2015 unless