Sécurisation en local
Transcription
Sécurisation en local
Attaques locales (internes) Sécurisation en local • Indépendamment de la présence d’un réseau – Espionnage quand même possible – Émission électromagnétiques • Norme tempest – Dispositifs sans fil • Clavier/souris • Risques principaux – Vol – Destruction – Falsification Si l’accès physique est possible • En pratique, plus grand chose à faire – Vol de composants, pose de dispositifs – Verrouillage physique pour ralentir le vol – Verrous logiques (mot de passe BIOS, ...) • Déni de service – Si accès physique -> destruction possible • Importance du chiffrement des données } Des données Déni de service local • Basé sur l’épuisement des ressources limitées • Ressources physiques – La mémoire vive – Le CPU – ... • Ressources logiques – Espace dans la table des processus – Nombre de fichiers ouverts – .... • Peu utilisé car peu discret (par définition!) Qui peut libérer la clé ? Chiffrement du disque Chiffrement du disque (2) • Préserve les données en cas d’accès physique • Nombreuses solutions disponible – En standard dans tous les OS récents – Drivecrypt, truecrypt, ... • Points importants – Où se trouve la clé ? (support physique) – Comment est-elle stockée ? (chiffrée ?) – Que se passe-t-il en cas de crash ? – Comment faire des backups ? • Incrémentaux pas possible Chiffrement du disque (3) • Quelles pistes pour l’attaquant ? – Deviner la clé -> pas possible – Voler la clé est la seule solution • Attaquer le support physique – La clé doit être chiffrée – Et sur un support différent (clé USB,...) • La récupérer « logiquement » – Elle réside forcément en mémoire • Amener le système à l’écrire sur le disque – Dans une zone mémoire non swappable • Ou alors le swap est chiffré Méthodes de connexion • Utilisation de comptes génériques • Passage aux frontières – Portable peut être confisqué et fouillé – Recommandation : portable vide de données, tout en accès distant • Chiffrement à deux niveaux – Dépend de comment la session est ouverte – Permet de cacher des informations • Stéganographie : cacher des informations dans d’autres – Ne doivent jamais être activées • Ou avec des droits restreints (restricted shell) • Et sans traces entre les sessions! • Compromission de l’authentification – Étape cruciale où un utilisateur est identifié comme tel – Son identité conditionne son rôle et donc ses droits sur le système Authentification : les trois dimensions Pour authentifier un utilisateur, on utilise : 1. Ce qu’il est – Utilise une caractéristique physique – Processus biométrique 2. Ce qu’il possède – Un objet qui généralement conditionne les droits 3. Ce qu’il sait – Un secret partagé entre le système d’authentification et l’utilisateur Possession de l’objet et secret - Étude des sociologues sur partagé un site nucléaire US : en 3 semaines quelqu’un pouvait • Objets court-circuiter les 3 niveaux en demandant à un – Difficile à voler (petit) garde - les admins renater – Utilisation non directe (code) avaient des cartes à puce pour se loger sur les – Clé USB, carte à puce, ... routeurs • Secret partagé – Facile à mémoriser – Difficile à deviner – Typiquement un mot de passe • Un bon système d’authentification doit avoir les trois – En pratique, la faille vient de l’humain Processus biométrique • Utilisation d’une caractéristique physique – Empreintes digitales, pupille, ADN, etc. • Attaques possibles – Usurpation (normalement impossible!) • Les empreintes digitales – Vol de la « caractéristique » • Le processus ne doit pas fonctionner • Méthodes communes – Empreintes digitales, pupille, voix, réseau veineux, ... Intrusion par fausse authentification • Souvent par vol des mots de passe – Trop compliqués : écrit – Trop simple : facile à deviner • Compromis difficile à trouver • Si changés trop souvent -> vont être notés • Concertation importante Gain de privilèges • Consiste en changer – Son identité – Son rôle • En pratique – Passer root/administrateur • Majeure partie des attaques locales – Les failles exploitables sont très nombreuses • Entrer dans le système est difficile, y gagner des privilèges est facile Défauts de configuration (2) • Détournement de la délégation de privilèges – Permet de donner plus de privilèges pour une action donnée – Bit setuid, sudo sous Unix • Exemples – Prof sur AIX – Workman sur les distributions Linux • « Principe du moindre privilège » Défaut de configuration • Vol d’authentification – Fichiers des authentifications accessible • Parfois en clair! – Si chiffrés, moulinette de tests automatiques • Mots de passe faibles – C’est une constante • Comment restreindre leur impact – Limiter les essais – S’assurer qu’ils ne sont pas lisibles par tous Défaillance de programmes • Erreurs de programmation – Dans un programme – Dans la manière dont plusieurs collaborent • Beaucoup d’attaques – Très variées – Classification difficile • En construire une est un domaine de recherche – Exemples les plus représentatifs présentés dans la suite Attaques par lien symbolique • Amener un programme à modifier un fichier sans qu’il s’en rende compte – Souvent par le biais d’un lien symbolique – Le programme a généralement plus de privilèges que l’utilisateur • Exemple – La chaine de compilation Gcc – Comment un attaquant va pouvoir insérer son code dans tous les programmes compilés • Protection : empêcher l’utilisation des fichiers temporaires Conditions de concurrence (2) • L’attaquant peut modifier ce qu’il veut dans le fichier /etc/shadow • Erreur de débutant : copier/coller de code 1. Conditions de concurrence • Exploiter une condition temporaire – Amener le système dans un état non prévu par le programmeur • Exemple : passwd sous Linux1 1. open("/etc/nshadow", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 8 2.[...] 3.2 chown("/etc/nshadow", 0, 0) =0 4.3 chmod("/etc/nshadow", 0600) =0 5.[...] 6.4 rename("/etc/nshadow", "/etc/shadow") = 0 Plantage contrôlé de programmes • Deux conditions d’apparition – Exploitation de manipulations incorrectes de la mémoire – Les paramètres passés par l’utilisateur ne sont pas assez contrôlés • Deux exemples principaux – Débordement de buffers (stack ou heap overflow) – Attaque sur chaîne de format Débordement de pile Void f(char *s) Étapes d’exploitation des débordements Pile d’exécution À l’entrée dans f { Char str[10]; Strcpy(str,s); } Void g() F(argv[1]); 4Variacarac20 ble str tères caractéres adresseg @retour Code injecté } 1. Les rechercher • Lecture du code • Analyse semi-automatique • Tentatives « au hasard » 2.Les exploiter • Construire l’entrée pour exploiter l’erreur • Trouver l’adresse précise à mettre dans la pile • Développer un code En plus : possibilité d’envoyer du code avec le paramètre! Buffer overflow avec injection de code Protection contre les débordements ? • Programmer « bug free » – Il existe des outils d’analyse automatique – Ne jamais utiliser directement les entrées des utilisateurs – On trouve aussi ces bugs dans les systèmes! • Protéger les zones mémoire – Empêcher l’injection de code – DEP sous Vista, w^x sous OpenBSD/Linux – Complique la vie de l’attaquant (utilise des bibliothèques) • Rendre l’emplacement des bibliothèques dynamique – Minimise le risque de corruption – Complique l’exploitation • Large base existante • Un papier de référence : how to smash the stack for fun and profit Attaque par chaîne de format • Même approche – Modifier des zones mémoire du programme en utilisant une erreur • Erreur moins connue – printf(“%s”,s) -> printf(s); • Presque pareil mais s va être évaluée par le printf... – s=”%d” -> affiche une valeur de la pile Attaque par chaîne de format (2) • Oui mais comment modifier ? • Utilisation du %n – Stocke le nombre de caractères affichés depuis le début de la chaine – int i; printf(“toto%n”,&i); => i=4 • En injectant la bonne chaîne avec les bonnes adresses il est possible de modifier (presque) n’importe quelle case mémoire Logiciels Malveillants • Virus – Programme se reproduisant en recopiant son code dans des programmes hôtes (exécutable Tchernobyl) • Cheval de Troie – Programme exécutant un tâche nuisible en se dissimulant dans un programme semblant inoffensif (Ex : economiseur d’écran). • Ver – Programme se reproduisant et se propageant par réseaux (internet) : (ex I love you, Morris). • Backdoors – Programme permettant d’augmenter ses privileges par une manipulation secrète (ex: login) Attaque par valeur de retour • Appel noyau : wait(int *statloc) – Dans le noyau, l’accès à la mémoire peut ne pas être restreinte (sur des systèmes embarqués par exemple) • Un bon choix des fils lancés et des paramètres de statloc : réecriture du noyau, accès à la mémoire... Conclusion sur les défaillances de programmes • Nombreuses et potentiellement dangereuses – Peut résulter de la combinaison de plusieurs! • Champ de recherche ouvert • Protection – Principe du moindre privilège – Cloisonnement des applications – Ne jamais faire confiance à ce qui est donné par l’«utilisateur» (au sens large) – Toujours tester les entrées (proxy éventuel) La faille de la semaine • Oldies but goldies • Faille RPC-DCOM dans Windows – Date de juillet 2003 – Dans la couche réseau de Windows • Buffer overflow – Permet l’injection de code exécuté avec les droits administrateur – Exploité, l’origine du ver blaster (toujours actif!) – « électro-choc » pour tous les utilisateurs de windows Spécial bonus : la seconde faille de la semaine • Faille RPC dans Windows – Date de octobre 2008 – Dans la couche réseau de Windows (jusqu’au 7) • Buffer overflow ? – Permet l’injection de code exécuté avec les droits administrateur – Exploité, au moins un ver s’en sert (Exploit.Win32.MS08-067.g) – Corrigé par un patch sorti hors du créneau habituel