Sécurité OS et logiciels Flashcards
Donnez quelques types de vulnérabilités du système
- Défaut (bug, programme ne fait pas ce qu’on lui demande de faire)
- Défaillance (fait ce qu’il à été spécifié, mais conséquence non prévues)
- Défaut de sécurité ( programme à un défaut qui à des conséquences du point de vue de la sécurité)
- Défaillance de sécurité ( programme fait ce qu’il est spécifié mais modèe de sécurité inexistant ou fait défaut)
- le programme est bien construit, mais il a un comportment non prévu qui a des conséquence en terme de sécurité (mal conçu)
Quel est la dichotomie d’une attaque par exploitation?
1) Le système ciblé fourni un service avec une interface accessible à l’attaquant. (accès physique, via le réseau)
2) l’attaquant fait une reconnaissance du système et identifie le logiciel qui fournit le service (footprinting ou fingerprinting, identification du se, identification de la version du logiciel, outils automatisé (nmap, xprobe, etc))
3) L’attaquant détecte une ou plusieurs vulnérabilités dans ce logiciel (analyse du code source, “cramming the input”, liste de vulnérabilités connues (sites “white hat” et “black hat”)
4) L’attaquant construit une méthode d’exploitation de ces ou cette vulnérabilité (exploit, méthode artisanale “Fuzzing the input”, outils automatisé d’exploitation (Metasploit, etc)
5) L’attaquant utilise cette exploitation pour atteindre ses desseins(accès en mode root, installation d’un trojan ou backdoor, changement des permissions d’accès)
Qu’est qu’une attaque de débordement sur les variables ( buffer overflow)?
Une variable “buffer” est accessible à l’usager, le programme ne vérifie pas si les valeurs entrées dépassent la mémoire allouée pour la variable tampon, les variables cibles qu’on veut changer ne sont “pas loin” et peuvent être changé par débordement, les variables et paramètres qui sont changés n’auront pas d’effets graves sur le fonctionnement du programme
où sont stocker les variables local?
la pile (stack)
Qu’est-ce qu’une attaque par débordement de la pile ( stack-based buffer overflow)
- Après le retour de la fonction, les variables locales ne sont pas éffacées.
- le code machine est inséré dans le tampon est autre variables qui pourraient suivre
- la valeur du pointeur de retour est modifié pour pointer vers le code inséré
- lors de l’instruction de retour, la machine de registre lit le pointeur de retourn et continue l’exécution à l’endroit indiqué
Quels sont les fonctions vulnérables en c/c++?
- fgets
- gets
- getws
- memcpy
- memmove
- scanf
- sprintf
- strcat
- strcpy
- array à allocation dynamique
- pointeurs
Cmment trouver les vulnérabilités de débordements?
Force brute:
- obtenir programme compilé puis déborder l’input du programme jusqu’à le faire crasher (“input cramming”)(nombre variable de A, observer le coredump en cherchant des A, capable de get la distance à la pile)
puis récupérer les différents éléments de la piles
Quel code insérer pour réaliser une exploitation?
- Doit être court
- Doit permettre à l’attaquant de gagner accès au système
- Solution typique : exécuter une fonction du système pour partir un shell, créer un usager et lancer/arrêter un service.
Par contre, limité par les droits d’accès du programme original
Où faire pointer le pointeur de retour du code d’exploitation?
- La distance entre le début du tampon et le pointeur de retour n’est pas nécessairement connue
- solution utiliser traineaux de NOPs (“NOP sleds”)
Qu’est-ce qu’un NOP sled?
une séquence d’instruction NOP ( no-operation) pour “slider” l’instruction du CPU à sa fin.
Comment éviter la détection automatique de code?
Polymorphisme du code et traîneaux de NOP
qu’est-ce qu’est le return oriented programming (ROP)
(attaque avancés)
- Rechercher des gadgets tel que des petits bouts de code dans le processus suivi d’une instruction de retour
- En enchaînant ces derniers, on créé notre “payload” malveillant et l’on peut effectuer une attaque sans insérer du coder à exécuter
Quels sont les contre-mesure contre les débordements de tampon?
- vérifier le remplissage des tampons(éviter utilisation de fonctions vulnérables, faire remplissage cractère par caractère (getchar(), condition frontière) dans tous les langages
- Utilisations des ids (traineaux de NOP, paquets excessivement longs, chaines dans la charges payantes (payloads) typiques tel que “/bin/sh”
- Compilateurs et OS ( connu et disponible: stocker les pointeurs de retour en dehors de la pile, espace mémoire non exécutable(ROM),
possible, pas développé : changer la direction de remplissage de la pile, effacer le contenue de la pile dans le retour de fonction) - Outils automatisé : analyse syntactique de code source, “vulnerability scanners”
Quels sont les contre mesures contre le débordements de tampon de Windows?
DEP: Data execution Prevention, marque le stack comme non exécutable, contournmenent avec attaques ROP
ASLR : Adress Space layout Randomization, Modifie de façon aléatoire les adresses de librairies et fonctions, ASLR et DEP doivent être combinés afin d’obtenir une protection adéquate
Qu’est-ce qu’une attaque par fuit de mémoire (memory leak)?
- Une variable sensible est allouée en mémoire ( ex. mot de passe)
- Lorsque le code est terminée, l’espace mémoire n’est pas mis à zéro
- Lors d’une deuxième invocation ou via un autre programme, la valeur de la variable sensible peut être obtenue en examinant la mémoire