INGI 2591 : Détection d’intrusion

20
INGI 2591 : Détection d’intrusion David Dal Zot (INFO23) Benjamin Gigot (INFO23) Xavier Lerot (INFO23) Benjamin Tillier (INFO23) RACE CONDITION

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

Transcript of INGI 2591 : Détection d’intrusion

Page 1: INGI 2591 : Détection d’intrusion

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

Page 2: INGI 2591 : Détection d’intrusion

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

Page 3: INGI 2591 : Détection d’intrusion

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

Page 4: INGI 2591 : Détection d’intrusion

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

Page 5: INGI 2591 : Détection d’intrusion

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

Page 6: INGI 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.

Page 7: INGI 2591 : Détection d’intrusion

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

Page 8: INGI 2591 : Détection d’intrusion

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.

Page 9: INGI 2591 : Détection d’intrusion

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.

Page 10: INGI 2591 : Détection d’intrusion

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.

Page 11: INGI 2591 : Détection d’intrusion

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

Page 12: INGI 2591 : Détection d’intrusion

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

Page 13: INGI 2591 : Détection d’intrusion

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

Page 14: INGI 2591 : Détection d’intrusion

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

Page 15: INGI 2591 : Détection d’intrusion

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

Page 16: INGI 2591 : Détection d’intrusion

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"

Page 17: INGI 2591 : Détection d’intrusion

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.

Page 18: INGI 2591 : Détection d’intrusion

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.

Page 19: INGI 2591 : Détection d’intrusion

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

Page 20: INGI 2591 : Détection d’intrusion

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.