180 likes | 305 Views
INGI 2591 : Détection d’intrusion. RACE CONDITION. INGI 2591 : Détection d’intrusion. RACE CONDITION : Définition et description RACE CONDITION et systèmes de fichiers Description d’une attaque typique Commentaire et solution Application d’une attaque : setuidperl.
E N D
INGI 2591 : Détection d’intrusion RACE CONDITION
INGI 2591 : Détection d’intrusion • RACE CONDITION : Définition et description • RACE CONDITION et systèmes de fichiers • Description d’une attaque typique • Commentaire et solution • 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) • 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 READ FILE IN MEMORY MODIFY FILE IN MEMORY time CRITICAL SECTION READ FILE IN MEMORY MODIFY FILE IN MEMORY WRITE FILE ON DISK WRITE FILE ON DISK 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. 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. 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 CRITICAL SECTION 1. SLOW DOWN SYSTEM TO INCREASE CS 2. FIND TEMP FILE and ERASE 3. CREATE /tmp/tmpfile 2. EXEC SYS CALL : root CHOWN() ON /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 …
IV. Commentaires et solutions COMMENTAIRES • 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 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) script perl sush.c -> sush bighole.c -> bighole
V. Application d’une attaque : suidperl (4) foo <- ~!bighole <- suidperl passwd (root, suid) script perl sush.c -> sush bighole.c -> bighole
V. Application d’une attaque : suidperl (5) foo <- ~!bighole <- suidperl passwd (root, suid) script perl sush.c -> sush bighole.c -> bighole
V. Application d’une attaque : suidperl (6) foo <- ~!bighole <- suidperl passwd (root, suid) script perl sush.c -> sush bighole.c -> bighole
V. Application d’une attaque : suidperl (7) foo <- ~!bighole <- suidperl passwd (root, suid) script perl User 500 tried to run dev 769 ino 35654 in place of dev 769 ino 17568! (Filename of set-id script was foo ~!bighole , uid 500 gid 500.) sush.c -> sush bighole.c -> bighole /bin/mail
V. Application d’une attaque : suidperl (7) foo <- ~!bighole <- suidperl passwd (root, suid) script perl User 500 tried to run dev 769 ino 35654 in place of dev 769 ino 17568! (Filename of set-id script was foo ~!bighole , uid 500 gid 500.) sush.c -> sush bighole.c -> bighole /bin/mail