Upload
joey
View
20
Download
0
Embed Size (px)
DESCRIPTION
INGI 2591 : Détection d’intrusion. RACE CONDITION. David Dal Zot (INFO23) Benjamin Gigot (INFO23) Xavier Lerot (INFO23) Benjamin Tillier (INFO23). INGI 2591 : Détection d’intrusion. Détection de l’attaque Stratégie 1 : Détection sur le réseau : Surveillance des - PowerPoint PPT Presentation
Citation preview
INGI 2591 : Détection d’intrusionINGI 2591 : Détection d’intrusion
David Dal Zot (INFO23)
Benjamin Gigot (INFO23)
Xavier Lerot (INFO23)
Benjamin Tillier (INFO23)
RACE CONDITION
INGI 2591 : Détection d’intrusionINGI 2591 : Détection d’intrusion
Détection de l’attaque
• Stratégie 1 : Détection sur le réseau : Surveillance des mails voyageant sur le réseau
• Stratégie 2 : Détection Locale : Détection d’un comportement suspect du système
Conclusion
Détection de l’attaque
• Stratégie 1 : Détection sur le réseau : Surveillance des mails voyageant sur le réseau
• Stratégie 2 : Détection Locale : Détection d’un comportement suspect du système
Conclusion
INGI 2591 : Détection d’intrusionINGI 2591 : Détection d’intrusion
Première idée
User 5000 tried to run dev 770 ino 146479 in place of dev 770 ino 240935!(Filename of set-id script was ./cbnqiugzadfbli
, uid 5000 gid 5000.)
Sincerely,Perl
Première idée
User 5000 tried to run dev 770 ino 146479 in place of dev 770 ino 240935!(Filename of set-id script was ./cbnqiugzadfbli
, uid 5000 gid 5000.)
Sincerely,Perl
INGI 2591 : Détection d’intrusionINGI 2591 : Détection d’intrusion
Caractéristiques de l’attaque (1)
SUIDPERL• Possède les droits suid root• Détecte le changement de fichier• Envoie un mail au root comportant le nom du fichier fautif
PASSWD• Possède les droits suid root• N’importe quel programme suid root peut convient
Script Perl• Simple script perl
Caractéristiques de l’attaque (1)
SUIDPERL• Possède les droits suid root• Détecte le changement de fichier• Envoie un mail au root comportant le nom du fichier fautif
PASSWD• Possède les droits suid root• N’importe quel programme suid root peut convient
Script Perl• Simple script perl
Caractéristiques de l’attaque (2)
/bin/mail• Parse le mail exécute les commandes précédées par ~!• Envoie le mail
Bighole et Sush• Nous permettent de lancer un terminal root• Doivent obtenir les droits root
Caractéristiques de l’attaque (2)
/bin/mail• Parse le mail exécute les commandes précédées par ~!• Envoie le mail
Bighole et Sush• Nous permettent de lancer un terminal root• Doivent obtenir les droits root
INGI 2591 : Détection d’intrusionINGI 2591 : Détection d’intrusion
INGI 2591 : Détection d’intrusionINGI 2591 : Détection d’intrusion
Surveillance de la correspondance de SUIDPERL
Nous essayerons donc d’intercepter les mails passant sur le réseauavec l’aide de Snort (qui se base sur la détection de chaînes decaractères bien précises) afin de détecter une éventuelle attaque.
Surveillance de la correspondance de SUIDPERL
Nous essayerons donc d’intercepter les mails passant sur le réseauavec l’aide de Snort (qui se base sur la détection de chaînes decaractères bien précises) afin de détecter une éventuelle attaque.
INGI 2591 : Détection d’intrusionINGI 2591 : Détection d’intrusion
Reconnaissance du mail envoyé par SUIDPERL
User 5000 tried to run dev 770 ino 14479 in place of dev 770 ino 24935!(Filename of set-id script was ./cbnqiugzadfbli
, uid 5000 gid 5000.)
Sincerely,Perl
Reconnaissance du mail envoyé par SUIDPERL
User 5000 tried to run dev 770 ino 14479 in place of dev 770 ino 24935!(Filename of set-id script was ./cbnqiugzadfbli
, uid 5000 gid 5000.)
Sincerely,Perl
INGI 2591 : Détection d’intrusionINGI 2591 : Détection d’intrusion
Reconnaissance du mail envoyé par SUIDPERL (1)
En-tete du mail
Détection de l’expéditeur de du destinataire : difficilement faisablecar peut varier d’un système à l’autre.
Reconnaissance du mail envoyé par SUIDPERL (1)
En-tete du mail
Détection de l’expéditeur de du destinataire : difficilement faisablecar peut varier d’un système à l’autre.
INGI 2591 : Détection d’intrusionINGI 2591 : Détection d’intrusion
Reconnaissance du mail envoyé par SUIDPERL (2)
Corps du mailUser 5000 tried to run dev 770 ino 14479 in place of dev 770 ino 20935!(Filename of set-id script was ./cbnqiugzadfbli
, uid 5000 gid 5000.)
Sincerely,Perl
1. Toutes les chaînes de caractères en gras doivent se trouver dans le mail,2. Dans le bon ordre,3. Excepté un certain nombre d’entiers, et le nom du fichier, le mail ne contient rien d’autre.
Reconnaissance du mail envoyé par SUIDPERL (2)
Corps du mailUser 5000 tried to run dev 770 ino 14479 in place of dev 770 ino 20935!(Filename of set-id script was ./cbnqiugzadfbli
, uid 5000 gid 5000.)
Sincerely,Perl
1. Toutes les chaînes de caractères en gras doivent se trouver dans le mail,2. Dans le bon ordre,3. Excepté un certain nombre d’entiers, et le nom du fichier, le mail ne contient rien d’autre.
INGI 2591 : Détection d’intrusionINGI 2591 : Détection d’intrusion
Probabilité de fausses alertes
Le bon sens nous pousse à croire que les critères ci-dessus sontsuffisamment précis pour identifier de manière pratiquemment infaillible un mail qui nous intéresse.
Probabilité de fausses alertes
Le bon sens nous pousse à croire que les critères ci-dessus sontsuffisamment précis pour identifier de manière pratiquemment infaillible un mail qui nous intéresse.
INGI 2591 : Détection RéseauINGI 2591 : Détection Réseau
Mise en œuvre de la détection
Critère {1} : l ’en-tête du mail :
- règles de réécritures : root --> [email protected]
- varie d’un système à l’autre
Mise en œuvre de la détection
Critère {1} : l ’en-tête du mail :
- règles de réécritures : root --> [email protected]
- varie d’un système à l’autre
INGI 2591 : Détection RéseauINGI 2591 : Détection Réseau
Mise en œuvre de la détection
Critère {2} à {4} :
Corps du mailUser 5000 tried to run dev 770 ino 14479 in place of dev 770 ino 20935!(Filename of set-id script was ./cbnqiugzadfbli
, uid 5000 gid 5000.)
Sincerely,Perl
Mise en œuvre de la détection
Critère {2} à {4} :
Corps du mailUser 5000 tried to run dev 770 ino 14479 in place of dev 770 ino 20935!(Filename of set-id script was ./cbnqiugzadfbli
, uid 5000 gid 5000.)
Sincerely,Perl
INGI 2591 : Détection RéseauINGI 2591 : Détection Réseau
Mise en œuvre de la détection
Critère {2} à {4} :
dans snort :
alert tcp any any <> $HOME_NET any (msg: "RC DETECT-SUIDPERL "; content:"User"; content:"tried to run" ; content:"ino";content:"in place of dev"; content:"ino" ; content:" !" ; content:"(Filename of set-id script was ./" ;content: "uid" ; content: "gid" ;content: ".)" ;content: "Sincerly,";content "Perl" ;)
Mise en œuvre de la détection
Critère {2} à {4} :
dans snort :
alert tcp any any <> $HOME_NET any (msg: "RC DETECT-SUIDPERL "; content:"User"; content:"tried to run" ; content:"ino";content:"in place of dev"; content:"ino" ; content:" !" ; content:"(Filename of set-id script was ./" ;content: "uid" ; content: "gid" ;content: ".)" ;content: "Sincerly,";content "Perl" ;)
INGI 2591 : Détection RéseauINGI 2591 : Détection Réseau
Mise en œuvre de la détection
Critère {2} : OK
Critère {3} : Respecté car mise en série des contents = AND dans le bon ordre
Critère {4} : Non respecté (ne pas accepter de chaînes contenant d ’autres chaînes que la sus-citée) car méthode lourde et pas « temps-réel ».
Mise en œuvre de la détection
Critère {2} : OK
Critère {3} : Respecté car mise en série des contents = AND dans le bon ordre
Critère {4} : Non respecté (ne pas accepter de chaînes contenant d ’autres chaînes que la sus-citée) car méthode lourde et pas « temps-réel ».
INGI 2591 : Détection RéseauINGI 2591 : Détection Réseau
Analyse
- Détection de l ’attaque : OK ( critères {2} et {3} )
- Non respect de {4} implique fausses alarmes (rares)
- Non détection si mail ne passe pas sur le reseau
Analyse
- Détection de l ’attaque : OK ( critères {2} et {3} )
- Non respect de {4} implique fausses alarmes (rares)
- Non détection si mail ne passe pas sur le reseau
Comportement caractéristique de notre attaque
Boucle principale :
( ln -f -s $SUIDBIN "$FILENAME"; usleep $RANDOM; nice -n +20 $SUIDPERL ./"$FILENAME" <./flare & ) &>/dev/null &
( usleep $RANDOM; ln -f -s /dev/stdin "$FILENAME" ) &>/dev/null &
Lancement en parallèle de 2 types de processus (composés eux-mêmes de 2 ou 3 processus séquenciels) :
Comportement caractéristique de notre attaque
Boucle principale :
( ln -f -s $SUIDBIN "$FILENAME"; usleep $RANDOM; nice -n +20 $SUIDPERL ./"$FILENAME" <./flare & ) &>/dev/null &
( usleep $RANDOM; ln -f -s /dev/stdin "$FILENAME" ) &>/dev/null &
Lancement en parallèle de 2 types de processus (composés eux-mêmes de 2 ou 3 processus séquenciels) :
INGI 2591 : Détection localeINGI 2591 : Détection locale
ln -f -s /bin/passwd "lien"
suidperl "lien"
usleepusleep
ln -f -s scriptperl "lien"
INGI 2591 : Détection localeINGI 2591 : Détection locale
Stratégie de détection
On essayera donc de détecter un grand nombre de processus ln etsuidperl ayant lieux dans un court laps de temps.
Généralité de notre méthode
Les attaques de type Race Condition on souvent la caractéristiquecommune d’appeler une grande quantité de processus ln.Notre système de détection sera donc en mesure de détecter cesattaques.
Notre système ne détectera cependant pas les appels systèmeslink.
Stratégie de détection
On essayera donc de détecter un grand nombre de processus ln etsuidperl ayant lieux dans un court laps de temps.
Généralité de notre méthode
Les attaques de type Race Condition on souvent la caractéristiquecommune d’appeler une grande quantité de processus ln.Notre système de détection sera donc en mesure de détecter cesattaques.
Notre système ne détectera cependant pas les appels systèmeslink.
INGI 2591 : Détection localeINGI 2591 : Détection locale
Détection des processus en cours sur le système
Première tentative avec ps, mais la durée de ln est trop courtedonc difficilement détectable.De plus il faut en permanence aller détecter ‘regarder’ lesprocessus en cours Occupe beaucoup de ressources.
Seconde tentative (et solution choisie) avec l’accounting :• Service offert par unix• A chaque fois qu’un processus se termine, une entrée est ajoutée au fichier de comptabilité spécifié.
Cette solution permet un processus de détection plus léger et quine rate aucun processus.
Mais elle ne permet pas de connaître les arguments et ne détecteles processus que lorsqu’ils sont terminés.
Détection des processus en cours sur le système
Première tentative avec ps, mais la durée de ln est trop courtedonc difficilement détectable.De plus il faut en permanence aller détecter ‘regarder’ lesprocessus en cours Occupe beaucoup de ressources.
Seconde tentative (et solution choisie) avec l’accounting :• Service offert par unix• A chaque fois qu’un processus se termine, une entrée est ajoutée au fichier de comptabilité spécifié.
Cette solution permet un processus de détection plus léger et quine rate aucun processus.
Mais elle ne permet pas de connaître les arguments et ne détecteles processus que lorsqu’ils sont terminés.
INGI 2591 : Détection localeINGI 2591 : Détection locale
Algorithme du programme de détection
Création du fichier de comptabilité acct.log;Appel de la fonction acct avec l’argument acct.log;Ouverture de acct.log en lecture;
do true -> s’endort pour une seconde; Lecture dans acct.log du nombre de ln (nbln) et SUIDPERL (nbSP) qui se sont terminés durant la dernière seconde; if (nbln > LN_MAX) -> if (nbSP > SP_MAX) -> Print(ALERTE : DETECTION ATTAQUE SUIDPERL); (nbSP <= SP_MAX) -> Print(ALERTE : DETECTION ATTAQUE RACE CONDITION); fi fiod
Algorithme du programme de détection
Création du fichier de comptabilité acct.log;Appel de la fonction acct avec l’argument acct.log;Ouverture de acct.log en lecture;
do true -> s’endort pour une seconde; Lecture dans acct.log du nombre de ln (nbln) et SUIDPERL (nbSP) qui se sont terminés durant la dernière seconde; if (nbln > LN_MAX) -> if (nbSP > SP_MAX) -> Print(ALERTE : DETECTION ATTAQUE SUIDPERL); (nbSP <= SP_MAX) -> Print(ALERTE : DETECTION ATTAQUE RACE CONDITION); fi fiod
INGI 2591 : Détection localeINGI 2591 : Détection locale
Ajustement de la sensibilité
Cela se fait au moyen de constantes LN_MAX et SP_MAX.
Au plus la valeur sera grande au plus on risque de rater uneattaque, au plus la valeur sera petite au plus on risque de détecterune fausse attaque.
Il convient donc de trouver un juste milieu.
Typiquement
Le nombre de proc. ln varie entre 120 et 3000 (600 en moyenne).Pour suidperl cela varie entre 60 et 1500 (300 en moyenne).
On atteint en général 50 ln par seconde (en salle) et la moitié desuidperl. Nous avons fixé LN_MAX à 30 et SP_MAX à 15.
Ajustement de la sensibilité
Cela se fait au moyen de constantes LN_MAX et SP_MAX.
Au plus la valeur sera grande au plus on risque de rater uneattaque, au plus la valeur sera petite au plus on risque de détecterune fausse attaque.
Il convient donc de trouver un juste milieu.
Typiquement
Le nombre de proc. ln varie entre 120 et 3000 (600 en moyenne).Pour suidperl cela varie entre 60 et 1500 (300 en moyenne).
On atteint en général 50 ln par seconde (en salle) et la moitié desuidperl. Nous avons fixé LN_MAX à 30 et SP_MAX à 15.