INGI 2591 : Détection d’intrusion RACE CONDITION
INGI 2591 : Détection d’intrusion I.RACE CONDITION : Définition et description II.RACE CONDITION et systèmes de fichiers III.Description d’une attaque typique IV.Commentaire et solution V.Application d’une attaque : setuidperl I.RACE CONDITION : Définition et description II.RACE CONDITION et systèmes de fichiers III.Description d’une attaque typique IV.Commentaire et solution V.Application d’une attaque : setuidperl
I. RACE CONDITION : Définition et description Définition GENERALE : Une RC apparaît lorsque deux ou plusieurs opérations se produisent de manière indéfinie (McKusick et al. 1996) Définition GENERALE : Une RC apparaît lorsque deux ou plusieurs opérations se produisent de manière indéfinie (McKusick et al. 1996) CONCEPT : Systèmes multitask DANGER si : 2 programmes accèdent même donnée en même temps. CONCEPT : Systèmes multitask DANGER si : 2 programmes accèdent même donnée en même temps.
I. RACE CONDITION : Définition et description SOIENT 2 PROCESS A et B PROCESS A PROCESS B time READ FILE IN MEMORY MODIFY FILE IN MEMORY READ FILE IN MEMORY MODIFY FILE IN MEMORY WRITE FILE ON DISK CRITICAL SECTION CONCLUSION : TRAVAIL DE B EST PERDU
I. RACE CONDITION : Définition et description CELA PEUT CONDUIRE A UN ETAT INCOHERENT DU SYSTEME : B a effectué une opération sur une donnée inconsistente. CELA PEUT CONDUIRE A UN ETAT INCOHERENT DU SYSTEME : B a effectué une opération sur une donnée inconsistente. PROCESS A Read (X):X=2; X = X + 2;X=4; Write (X);X=4; PROCESS B Read (X):X=2 X = X + 6;X=8 Write (X); X=8 FINALEMENT, X=4 au lieu de 12
II. RACE CONDITION : RC et système de fichiers De manière + SPECIFIQUE : FILE SYSTEMS L’attaquant essaie de changer l’état du système de fichier entre 2 opérations sur ce SF, opérations faisant partie d’un même programme. De manière + SPECIFIQUE : FILE SYSTEMS L’attaquant essaie de changer l’état du système de fichier entre 2 opérations sur ce SF, opérations faisant partie d’un même programme. Exemple typique de RACE CONDITION avec ps
III. Description d’une attaque typique : ps Commande ps : affiche des infos sur les process actifs PS ATTAQUANT 1. CREATE /tmp/tmpfile 2. EXEC SYS CALL : root CHOWN() ON /tmp/tmpfile 1. SLOW DOWN SYSTEM TO INCREASE CS CRITICAL SECTION 2. FIND TEMP FILE and ERASE 3. CREATE /tmp/tmpfile
III. Description d’une attaque typique : ps FINALEMENT L’ATTAQUANT POSSEDE UN FICHIER (CAR DS REPERTOIRE WORLD WRITABLE) QUI, QUAND IL S’EXECUTE, LE FAIT AVEC LES DROITS DE ROOT METTRE DS CE FICHIER UN SHELL, QUI S’EXECUTERA DONC EN ROOT … L’ATTAQUANT POSSEDE UN FICHIER (CAR DS REPERTOIRE WORLD WRITABLE) QUI, QUAND IL S’EXECUTE, LE FAIT AVEC LES DROITS DE ROOT METTRE DS CE FICHIER UN SHELL, QUI S’EXECUTERA DONC EN ROOT …
IV. Commentaires et solutions COMMENTAIRES 1.COMMENT EST-CE QUE ATTAQUEUR A PU EFFACER /tmp/tmpfile ? LE REPERTOIRE TMP POSSEDE DES PERMISSIONS « WORLD WRITABLE » POUR TOUT FICHIER CONTENU DEDANS. 1.COMMENT EST-CE QUE ATTAQUEUR A PU EFFACER /tmp/tmpfile ? LE REPERTOIRE TMP POSSEDE DES PERMISSIONS « WORLD WRITABLE » POUR TOUT FICHIER CONTENU DEDANS.
IV. Commentaires et solution SOLUTION 2. COMMENT EVITER CE GENRE DE PROBLEME ? UTILISER FCHOWN() AU LIEU DE CHOWN() FCHOWN() AGIT AU NIVEAU DU FDESCRIPTEUR ALORS QUE CHOWN() AGIT AU NIVEAU DU NOM DU FICHIER 2. COMMENT EVITER CE GENRE DE PROBLEME ? UTILISER FCHOWN() AU LIEU DE CHOWN() FCHOWN() AGIT AU NIVEAU DU FDESCRIPTEUR ALORS QUE CHOWN() AGIT AU NIVEAU DU NOM DU FICHIER ON PEUT CHANGER LE NOM D’UN FICHIER MAIS ON NE PEUT PAS CHANGER SON FD ON PEUT CHANGER LE NOM D’UN FICHIER MAIS ON NE PEUT PAS CHANGER SON FD
V. Application d’une attaque : suidperl (1) suidperl passwd (root, suid)
V. Application d’une attaque : suidperl (2) suidperl passwd (root, suid) sush.c -> sush bighole.c -> bighole
V. Application d’une attaque : suidperl (3) suidperl passwd (root, suid) sush.c -> sush bighole.c -> bighole script perl
V. Application d’une attaque : suidperl (4) suidperl passwd (root, suid) sush.c -> sush bighole.c -> bighole script perl foo <- ~!bighole <-
V. Application d’une attaque : suidperl (5) suidperl passwd (root, suid) sush.c -> sush bighole.c -> bighole script perl foo <- ~!bighole <-
V. Application d’une attaque : suidperl (6) suidperl passwd (root, suid) sush.c -> sush bighole.c -> bighole script perl foo <- ~!bighole <-
V. Application d’une attaque : suidperl (7) suidperl passwd (root, suid) sush.c -> sush bighole.c -> bighole script perl foo <- ~!bighole <- User 500 tried to run dev 769 ino in place of dev 769 ino 17568! (Filename of set-id script was foo ~!bighole, uid 500 gid 500.) /bin/mail
V. Application d’une attaque : suidperl (7) suidperl passwd (root, suid) sush.c -> sush bighole.c -> bighole script perl foo <- ~!bighole <- User 500 tried to run dev 769 ino in place of dev 769 ino 17568! (Filename of set-id script was foo ~!bighole, uid 500 gid 500.) /bin/mail