14
José M. Fernandez M-3109 340-4711 poste 5433 INF4420: Éléments de Sécurité Informatique Module II : Sécurité OS et des logiciels

INF4420: Éléments de Sécurité Informatique

  • Upload
    taima

  • View
    34

  • Download
    0

Embed Size (px)

DESCRIPTION

INF4420: Éléments de Sécurité Informatique. Module II : Sécurité OS et des logiciels. Module II – Aperçu. Semaine 5 – Sécurité dans les systèmes d'exploitation (SE) Contrôle d'accès dans les SE Authentification dans les SE Semaine 6 – Sécurité dans les SE (suite) Contrôle d'intégrité - PowerPoint PPT Presentation

Citation preview

Page 1: INF4420: Éléments de Sécurité Informatique

José M. Fernandez

M-3109340-4711 poste 5433

INF4420: Éléments de Sécurité Informatique

Module II : Sécurité OS et des logiciels

Page 2: INF4420: Éléments de Sécurité Informatique

INF4420Sécurité Informatique

INF4420Sécurité Informatique

2

Module II – AperçuModule II – Aperçu

Semaine 5 – Sécurité dans les systèmes d'exploitation (SE) Contrôle d'accès dans les SE Authentification dans les SE

Semaine 6 – Sécurité dans les SE (suite) Contrôle d'intégrité Code malicieux Contre-mesures

Semaine 7 – Sécurité du logiciel Failles typiques et vulnérabilités Techniques d'exploitation Contre-mesures

Semaine 8 – période de relâche Semaine 9 – Sécurité des BD et des applications Web Semaine 10 – Contrôle périodique (jusqu'à semaine 7)

Page 3: INF4420: Éléments de Sécurité Informatique

INF4420Sécurité Informatique

INF4420Sécurité Informatique

3

Plan de ce coursPlan de ce cours

Motivation Types de faille de logiciel Impact sur la sécurité

• Vulnérabilités• Exploitations

Vulnérabilités de débordement de tampon Débordement de variables Débordement de pile Contre-mesures

Autres vulnérabilités Fuite d’information Chaîne de formatage Insertion de SQL

Page 4: INF4420: Éléments de Sécurité Informatique

INF4420Sécurité Informatique

INF4420Sécurité Informatique

4

Taxonomie des failles des logicielsTaxonomie des failles des logiciels

Génie logiciel (IEEE) Le programme ne fait pas ce

qu'on lui a demandé de faire

(spécification)• Défaut ou "fault" ou "bug"• Erreur de conception ou

programmation

Le programme fait ce qui a été

spécifié, mais son exécution des

conséquences non prévues

(possiblement néfaste)• Défaillance ou "Failure" ou

"feature"• Erreur de spécification

Sécurité informatique Le programme a un défaut qui a des

conséquences du point de vue de la sécurité

• Défaut de sécurité• Exemple : erreur de programmation dans

un programme de login Le programme fait ce qui est spécifié,

mais le modèle de sécurité est inexistant ou fait défaut

• Défaillance de sécurité• Erreur de spécification du point de vue de

la sécurité• Exemple : introduction de contre-mesures

inadéquate, p.ex. algo de chiffrement trop facile à casser

Le programme est bien conçu et bien construit, mais il a un comportement non prévu qui a des conséquence en terme de sécurité

Dans tous les cas on parle de vulnérabilités du système

Page 5: INF4420: Éléments de Sécurité Informatique

INF4420Sécurité Informatique

INF4420Sécurité Informatique

5

Dissection d'une attaque par exploitationDissection d'une attaque par exploitation

1. Le système ciblé fourni un service avec une interface accessible à l'attaquant Accès physique (usager légitime) Accès via le réseau

2. L'attaquant fait une reconnaissance du système et identifie le logiciel qui fournit le service ("footprinting" ou "fingerprinting") Identification du SE Identification de la version du logiciel Outils automatisés (nmap, xprobe, etc.)

3. L'attaquant détecte une ou plusieurs vulnérabilités dans ce logiciel Analyse du code source "Cramming the input" Liste de vulnérabilités connues (sites "white hat" et "black hat")

4. L'attaquant construit une méthode d'exploitation de ces ou cette vulnérabilité ("exploit") Méthode artisanale ("Fuzzing the input") Outils automatisés d'exploitation (Metasploit, etc.)

5. L'attaquant utilise cette exploitation pour atteindre ses desseins Accès en mode "root" Installation d’un trojan ou backdoor Changement des permissions d'accès

Page 6: INF4420: Éléments de Sécurité Informatique

INF4420Sécurité Informatique

INF4420Sécurité Informatique

6

Attaques de débordement sur les variablesAttaques de débordement sur les variables

Conditions de base Une variable tampon ("buffer")

est accessible à l'usager Le programme ne vérifie pas si les

valeurs entrées dépassent la

mémoire allouée pour la variable

tampon Les variables "cibles" qu'on veut

changer ne sont "pas loin" et

peuvent être changé par

débordement Les variables et paramètres qui

sont changés n'auront pas d'effets

graves sur le fonctionnement du

programme

Variable "cible"

Tampon "accessible"

Variable "victime innocente"

Page 7: INF4420: Éléments de Sécurité Informatique

INF4420Sécurité Informatique

INF4420Sécurité Informatique

7

Révision – À quoi sert la pileRévision – À quoi sert la pile

Pile ou "stack" Utilisé par la machine de

registre pour• Stocker les variables de

l'environnement local• Gérer les appels de fonctions

Direction de remplissage • de la pile : vers le bas• des variables : vers le haut

Variable locale 1

Variable locale 2

pointeur d'environnement

pointeur de retour

arguments d'appel de fonction

Variable locale A

Variable locale B

Rem

plissage de pileR

empl

issa

ge

de v

aria

bles

Env

iron

nem

ent

fonc

tion

app

elée

Env

iron

nem

ent

fonc

tion

ori

gina

le

Page 8: INF4420: Éléments de Sécurité Informatique

INF4420Sécurité Informatique

INF4420Sécurité Informatique

8

Attaque par débordement de la pileAttaque par débordement de la pile

ou "Stack-based Buffer Overflow" Conditions de base

Après le retour de la fonction, les variables locales ne sont pas effacées

Le code machine est inséré dans le tampon et autre variables qui pourraient suivre

La valeur du pointeur de retour est modifié pour pointer vers le code inséré

Lors de l'instruction de retour, la machine de registre lit le pointeur de retour et continue l'exécution à l'endroit indiqué

Variable locale 1

Variable locale 2

pointeur d'environnement

pointeur de retour modifié

Code machine inséré

execve ("/bin/sh")

Tampon accessible

(Variable local B)

Variable locale A

arguments d'appel de fonction

pointeur de retour

Page 9: INF4420: Éléments de Sécurité Informatique

INF4420Sécurité Informatique

INF4420Sécurité Informatique

9

Un example (*)Un example (*)

void sample_function (char *string) {

char buffer[16];

strcpy{buffer,string}

return;

}

Void main () {

char big_buffer[256];

int i;

for (i=0; i<255; i++)

big_buffer[i]='A';

sample_function(big_buffer);

}

(*) Tiré de "Counterhack" de Ed Skoudis, Prentice-Hall

big_buffer (256)

i (2)

pointeur d'environnement

pointeur de retour

*string

Buffer (16)

Env

iron

nem

ent

fonc

tion

app

elée

Env

iron

nem

ent

fonc

tion

mai

nar

gum

ents

d'ap

pel d

e

fon

ctio

n

Page 10: INF4420: Éléments de Sécurité Informatique

INF4420Sécurité Informatique

INF4420Sécurité Informatique

10

Comment trouver des vulnérabilités de débordementsComment trouver des vulnérabilités de débordements

Analyse du code source Fonction vulnérables en C/C+

+• fgets• gets• getws• memcpy• memmove• scanf• sprintf• strcat• strncpy

Array à allocation dynamique Pointeurs

Force brute1. Obtenir le programme

(compilé)

2. Déborder l'input du

programme jusqu'à le faire

crasher ("input cramming") Un nombre variable de 'A' Observer le "coredump" en

cherchant des 'A' Exemple :

EIP = 41414141 (Yeh !!)

ESP = 00F4106C Déduction : distance à la pile

3. Repérer les différents

éléments de la pile

Page 11: INF4420: Éléments de Sécurité Informatique

INF4420Sécurité Informatique

INF4420Sécurité Informatique

11

Difficultés de réalisation d'une exploitationDifficultés de réalisation d'une exploitation

Quel code insérer ? Doit être court (ne) Doit permettre à l'attaquant de gagner accès au système Solution typique : exécuter une fonction du système pour

• partir un "shell"• créer un usager• lancer/arrêter un service

Problème : limiter par les droits d'accès du programme original Où faire pointer le pointeur de retour ?

La distance entre le début du tampon et le pointeur de retour n'est pas nécessairement

Solution : traîneau de NOPs ("NOP sleds") Comment éviter la détection automatique ?

Polymorphisme du code et des traîneaux de NOP

Page 12: INF4420: Éléments de Sécurité Informatique

INF4420Sécurité Informatique

INF4420Sécurité Informatique

12

Contre-mesures contre les débordements de tamponContre-mesures contre les débordements de tampon

VÉRIFIER LE REMPLISSAGE

DES TAMPONS !!!! Éviter l'utilisation de fonctions

vulnérables Faire le remplissage caractère par

caractère • getchar()• condition frontière

DANS TOUS LES LANGAGES !!

Utilisation de IDS Traîneaux de NOP Paquets excessivement longs Chaînes dans les charges payantes

("payloads") typiques, p.ex.

"/bin/sh"

Compilateurs et OS Connu et disponible

• Canaris (StackGuard)• Stocker les pointeurs de retour en

dehors de la pile (StackShield)• Espace mémoire non-executable

Solaris HP UX, Rustine pour Linux Win XP SP2 avec certains

proceseeurs Possible mais pas développé

• Changer la direction de remplissage de la pile ??

• Effacer le contenu de la pile avant le retour de fonction

Outils automatisés analyse syntactique de code source "Vulnerability scanners"

Page 13: INF4420: Éléments de Sécurité Informatique

INF4420Sécurité Informatique

INF4420Sécurité Informatique

13

Attaques par fuite de mémoireAttaques par fuite de mémoire

Conditions de base Une variable "sensible" est allouée en mémoire (e.g. mot de passe) Lorsque le code est terminée l'espace mémoire n'est pas mis à

zéro Lors d'une deuxième invocation ou via un autre programme la

valeur de la variable sensible peut être obtenue en examinant la

mémoire

Exemples d'utilisation Par examen des "page file" résidant sur le disque dur Espace tampon des dispositif de réseau

Prévention Utilisation de destructeurs

Page 14: INF4420: Éléments de Sécurité Informatique

INF4420Sécurité Informatique

INF4420Sécurité Informatique

14

Au delà du débordement de tamponAu delà du débordement de tampon

Format String Vulnerabilities Utilise la fonction printf de C/C++

• printf ("%s", buffer) – bonne utilisation• printf (buffer) - mauvaise utilisation

La directive printf("…%n…", … , &variable)

• permet d'écrire dans la variable le nombre de caractère imprimé On insère dans le tampon accessible à l'utilisateur une

"format string"• buffer = "… code … %n " (addrese stack)…

Contre-mesures Toujours inclure une chaîne de formatage dans les

invocations de printf Éviter d’utiliser printf (plus vraiment nécessaire aujourd’hui)