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

Documents pareils