Analyse de sécurité de logiciels système par typage statique



Documents pareils
Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Cours 1 : La compilation

UE C avancé cours 1: introduction et révisions

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Chapitre VI- La validation de la composition.

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Introduction au langage C

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Chapitre 1 : La gestion dynamique de la mémoire

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Claude Delannoy. 3 e édition C++

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Bases de programmation. Cours 5. Structurer les données


SUPPORT DE COURS. Langage C

Cours d initiation à la programmation en C++ Johann Cuenin

Initiation. àl algorithmique et à la programmation. en C

Algorithmique, Structures de données et langage C

UE Programmation Impérative Licence 2ème Année

Conventions d écriture et outils de mise au point

Les structures de données. Rajae El Ouazzani

Programmation système I Les entrées/sorties

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

Programmation en langage C

Cours 1 : Qu est-ce que la programmation?

Rappels Entrées -Sorties

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Compilation (INF 564)

ALGORITHMIQUE ET PROGRAMMATION En C

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Cours d Algorithmique et de Langage C v 3.0

Plan du cours. Historique du langage Nouveautés de Java 7

Classes et Objets en Ocaml.

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Cours de Programmation 2

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Java 1.5 : principales nouveautés

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Les chaînes de caractères

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Introduction à la Programmation Parallèle: MPI

Algorithmique et Programmation, IMA

as Architecture des Systèmes d Information

Notions fondamentales du langage C# Version 1.0

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Principes des langages de programmation INF 321. Eric Goubault

INITIATION A LA PROGRAMMATION

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Contraintes, particularités. 1. Généralités Gestion de la mémoire a. Type des variables et constantes... 2

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Chap III : Les tableaux

Programmation. fonctionnelle, impérative, logique et orientée objet

Programmer en JAVA. par Tama

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Calculabilité Cours 3 : Problèmes non-calculables.

Informatique Générale

Programmation C. Apprendre à développer des programmes simples dans le langage C

Présentation du langage et premières fonctions

Introduction à MATLAB R

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

Contexte et motivations Les techniques envisagées Evolution des processus Conclusion

Exécutif temps réel Pierre-Yves Duval (cppm)

Génie Logiciel avec Ada. 4 février 2013

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Vérification formelle de la plate-forme Java Card

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

modules & compilation

Les structures. Chapitre 3

Le langage C. Introduction, guide de reference

Conception de circuits numériques et architecture des ordinateurs

length : A N add : Z Z Z (n 1, n 2 ) n 1 + n 2

Le Projet BINSEC. Automatiser l analyse de sécurité au niveau binaire. Airbus group, CEA, IRISA, LORIA, Uni. Joseph Fourier. p.

Méthodes de programmation systèmes UE n NSY103. Notes de cours. Nombre d'heures : 55h (~ cours de 3 heures)

Objets et Programmation. origine des langages orientés-objet

Cours 1: Java et les objets

Traduction des Langages : Le Compilateur Micro Java

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Certification de l assemblage de composants dans le développement de logiciels critiques

Programmation impérative

Compléments de documentation Scilab : affichage de texte et formatage de nombres

Gestion de projets logiciels. Xavier Dubuc

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Cours de C. Allocation dynamique. Sébastien Paumier

Introduction à la programmation concurrente

Mesure de performances. [Architecture des ordinateurs, Hennessy & Patterson, 1996]

Génie Logiciel I. Cours VI - Typage statique / dynamique, fonctions virtuelles et classes abstraites, flots d entrées / sorties, et string

Théorie de la Programmation

Le langage C. Séance n 4

Transcription:

Contexte Modélisation Expérimentation Conclusion Analyse de sécurité de logiciels système par typage statique Application au noyau Linux Étienne Millon UPMC/LIP6 Airbus Group Innovations Sous la direction d Emmanuel Chailloux et Sarah Zennou 10 juillet 2014 Analyse de sécurité de logiciels système par typage statique Étienne Millon 1/44

1 Contexte L arnaque du serrurier Isolation entre utilisateur et noyau Penjili & Newspeak 2 Modélisation Safespeak Sémantique d évaluation Système de types 3 Expérimentation Analyseur statique Utilisation sur le noyau Linux 4 Conclusion Analyse de sécurité de logiciels système par typage statique Étienne Millon 2/44

1 Contexte L arnaque du serrurier Isolation entre utilisateur et noyau Penjili & Newspeak 2 Modélisation Safespeak Sémantique d évaluation Système de types 3 Expérimentation Analyseur statique Utilisation sur le noyau Linux 4 Conclusion Analyse de sécurité de logiciels système par typage statique Étienne Millon 3/44

L arnaque du serrurier S + = J appelle un serrurier Je l attends devant chez moi Il ouvre ma porte Je rentre chez moi Analyse de sécurité de logiciels système par typage statique Étienne Millon 4/44

L arnaque du serrurier S + = J appelle un serrurier Je l attends devant chez mon voisin Il ouvre sa porte Je rentre chez mon voisin Analyse de sécurité de logiciels système par typage statique Étienne Millon 4/44

1 Contexte L arnaque du serrurier Isolation entre utilisateur et noyau Penjili & Newspeak 2 Modélisation Safespeak Sémantique d évaluation Système de types 3 Expérimentation Analyseur statique Utilisation sur le noyau Linux 4 Conclusion Analyse de sécurité de logiciels système par typage statique Étienne Millon 5/44

Utilisateur et noyau Programmes utilisateur : navigateur,... Appels système Noyau : pilotes Instructions privilégiées Matériel : disque dur,... Analyse de sécurité de logiciels système par typage statique Étienne Millon 6/44

Mémoire utilisateur et noyau 0 3 Go 4 Go Programmes utilisateur Appels système Noyau Instructions privilégiées Matériel Analyse de sécurité de logiciels système par typage statique Étienne Millon 7/44

Utilisation correcte d un appel système struct timeval tv; struct timeval* ptv = &tv; int z = gettimeofday(ptv, NULL); 0 3 Go 4 Go ptv Analyse de sécurité de logiciels système par typage statique Étienne Millon 8/44

Utilisation détournée d un appel système struct timeval* ptv = 0xc2c12705; int z = gettimeofday(ptv, NULL); 0 3 Go 4 Go ptv Analyse de sécurité de logiciels système par typage statique Étienne Millon 9/44

Problème des pointeurs dans les appels système La copie simple n est pas suffisante : il faut vérifier tous les pointeurs 2 propriétés : Qui contrôle le pointeur? Dans quelle plage se trouve sa valeur? Invariant : les pointeurs contrôlés par l utilisateur pointent dans la mémoire utilisateur Fonctions non sûres : memcpy, strcpy Fonctions sûres : copy_from_user, copy_to_user copy_from_user memcpy memcpy copy_to_user memcpy Analyse de sécurité de logiciels système par typage statique Étienne Millon 10/44

1 Contexte L arnaque du serrurier Isolation entre utilisateur et noyau Penjili & Newspeak 2 Modélisation Safespeak Sémantique d évaluation Système de types 3 Expérimentation Analyseur statique Utilisation sur le noyau Linux 4 Conclusion Analyse de sécurité de logiciels système par typage statique Étienne Millon 11/44

Le projet Penjili Analyse de sécurité de logiciels système par typage statique Étienne Millon 12/44

Le projet Penjili Safespeak ptrtype Analyse par typage Analyse de sécurité de logiciels système par typage statique Étienne Millon 12/44

Le langage intermédiaire Newspeak Un langage adapté à l analyse statique : simple : il contient peu de constructions explicite : les effets de bords sont explicites expressif : tout programme C peut être converti en Newspeak Analyse de sécurité de logiciels système par typage statique Étienne Millon 13/44

Exemple int x; x = 0; while (x < 10) { } x++; int32 x; x =(int32) 0; do { while (1) { choose { --> guard((10 > x_int32)); --> guard(! (10 > x_int32)); goto lbl1; } x =(int32) coerce[-2**31,2**31-1] (x_int32 + 1); } } with lbl1: { } Analyse de sécurité de logiciels système par typage statique Étienne Millon 14/44

1 Contexte L arnaque du serrurier Isolation entre utilisateur et noyau Penjili & Newspeak 2 Modélisation Safespeak Sémantique d évaluation Système de types 3 Expérimentation Analyseur statique Utilisation sur le noyau Linux 4 Conclusion Analyse de sécurité de logiciels système par typage statique Étienne Millon 15/44

Safespeak Newspeak : bon front-end mais bas niveau Safespeak = restriction de C «bien typable» Pas de casts, arithmétique des pointeurs restreinte Différence de modèle mémoire : Newspeak : suite d octets Safespeak : ensemble structuré de valeurs Analyse de sécurité de logiciels système par typage statique Étienne Millon 16/44

Syntaxe Expressions Expressions e ::= c Constante e Opération unaire e e Opération binaire lv Accès mémoire lv e Affectation &lv Pointeur fun(x 1,..., x n ){i} Fonction e(e 1,..., e n ) Appel de fonction {l 1 : e 1 ;... ; l n : e n } Structure [e 1 ;... ; e n ] Tableau Analyse de sécurité de logiciels système par typage statique Étienne Millon 17/44

Syntaxe Instructions Instructions i ::= Pass Instruction vide i; i Séquence e Expression Decl x = e in{i} Déclaration de variable If(e){i}Else{i} Alternative While(e){i} Boucle Return(e) Retour de fonction Analyse de sécurité de logiciels système par typage statique Étienne Millon 18/44

1 Contexte L arnaque du serrurier Isolation entre utilisateur et noyau Penjili & Newspeak 2 Modélisation Safespeak Sémantique d évaluation Système de types 3 Expérimentation Analyseur statique Utilisation sur le noyau Linux 4 Conclusion Analyse de sécurité de logiciels système par typage statique Étienne Millon 19/44

Sémantique d évaluation Système de transitions entre états expression + mémoire e, m e, m expressions valeurs exemple : x, m 1, m si x vaut 1 dans m. Analyse de sécurité de logiciels système par typage statique Étienne Millon 20/44

Structure de la mémoire Locales n 0 n 1 Globales a 2 b 3.14 n 2 { f : [1; 6; 1; 8] x g : 3 y 4 } Cadre de pile z 2 Analyse de sécurité de logiciels système par typage statique Étienne Millon 21/44

Valeurs gauches ex : x.f[2] 3 valeurs gauches (lvalues) chemins ϕ Chemins ϕ ::= (x) Globale (n, x) Locale ϕ.l Accès à un champ ϕ[n] Accès à un élément ϕ v, m v, m[ϕ v] Comment définir m[ϕ] et m[ϕ v]? Analyse de sécurité de logiciels système par typage statique Étienne Millon 22/44

Lentilles Relation entre objet et sous-objet L Lens R,A { get L = L : R A put L : (A R) R get L ( ) = put L (, ) = Analyse de sécurité de logiciels système par typage statique Étienne Millon 23/44

Composition de lentilles get L1 get L1 put L2 get L2 put L1 L 1 L 2 Analyse de sécurité de logiciels système par typage statique Étienne Millon 24/44

Lentilles pour les structures de données I(n) : lentille «n e élément d une liste» put I(2) (5, [4; 8; 15; 16]) = [4; 5; 15; 16] L(k) : lentille «élément associé à k» d une liste d association get L(b) ([(a, 23); (b, 42)]) = 42 T (n) et F (k) : équivalents de I(n) et F (k) sur les valeurs tableaux et structures Analyse de sécurité de logiciels système par typage statique Étienne Millon 25/44

Fonctionnement des lentilles n 0 n 1 n 2 { f : [1; 6; 1; 8] x g : 3 y 4 } a 2 b 3.14 ϕ = L = z 2 Analyse de sécurité de logiciels système par typage statique Étienne Millon 26/44

Fonctionnement des lentilles n 0 n 1 n 2 { f : [1; 6; 1; 8] x g : 3 y 4 } a 2 b 3.14 ϕ = ( L = fst z 2 Analyse de sécurité de logiciels système par typage statique Étienne Millon 26/44

Fonctionnement des lentilles n 0 n 1 n 2 { f : [1; 6; 1; 8] x g : 3 y 4 } a 2 b 3.14 ϕ = (2, L = fst I(2) z 2 Analyse de sécurité de logiciels système par typage statique Étienne Millon 26/44

Fonctionnement des lentilles n 0 n 1 n 2 { f : [1; 6; 1; 8] x g : 3 y 4 z 2 } a 2 b 3.14 ϕ = (2, x) L = fst I(2) L(x) Analyse de sécurité de logiciels système par typage statique Étienne Millon 26/44

Fonctionnement des lentilles n 0 n 1 n 2 { f : [1; 6; 1; 8] x g : 3 y 4 z 2 } a 2 b 3.14 ϕ = (2, x).f L = fst I(2) L(x) F (f) Analyse de sécurité de logiciels système par typage statique Étienne Millon 26/44

Fonctionnement des lentilles n 0 n 1 n 2 { f : [1; 6; 1; 8] x g : 3 y 4 z 2 } a 2 b 3.14 ϕ = (2, x).f[2] L = fst I(2) L(x) F (f) T (2) Analyse de sécurité de logiciels système par typage statique Étienne Millon 26/44

Définition de Φ Φ Path Lens Mem,V al Φ((x)) = snd L(x) Φ((n, x)) = fst I(n) L(x) Φ(ϕ.l) = Φ(ϕ) F (l) Φ(ϕ[n]) = Φ(ϕ) T (n) m[ϕ] def == get Φ(ϕ) (m) m[ϕ v] def == put Φ(ϕ) (v, m) Analyse de sécurité de logiciels système par typage statique Étienne Millon 27/44

1 Contexte L arnaque du serrurier Isolation entre utilisateur et noyau Penjili & Newspeak 2 Modélisation Safespeak Sémantique d évaluation Système de types 3 Expérimentation Analyseur statique Utilisation sur le noyau Linux 4 Conclusion Analyse de sécurité de logiciels système par typage statique Étienne Millon 28/44

Système de types Type t ::= Int Entier Float Flottant Unit Unité t Pointeur noyau t @ Pointeur utilisateur t [ ] Tableau {l 1 : t 1 ;... ; l n : t n } Structure (t 1,..., t n ) t Fonction Analyse de sécurité de logiciels système par typage statique Étienne Millon 29/44

Deux types de pointeurs Pointeurs noyau : t valeur fixée à la compilation ou par le runtime ex : &x, malloc(n) peuvent être déréférencés (*p, memcpy()) Pointeurs utilisateur : t @ valeur provient d un utilisateur non privilégié ex : paramètres d appels systèmes peuvent être copiés uniquement par des fonctions sûres (copy_*_user) Analyse de sécurité de logiciels système par typage statique Étienne Millon 30/44

Règles de typage Γ lv : t Γ &lv : t (Addr) Γ e : t Γ e : t (Lv-Deref) Γ e d : t Γ e s : t @ Γ copy_from_user( e d, e s ) : Int (User-Get) Γ e d : t @ Γ e s : t Γ copy_to_user( e d, e s ) : Int (User-Put) Analyse de sécurité de logiciels système par typage statique Étienne Millon 31/44

Exemple : gettimeofday Comment copier l heure calculée par le noyau à l adresse ptv? Version naïve : memcpy( ptv, time ) ; Γ memcpy( e d, e s ) : Int Version correcte : copy_to_user( ptv, time ) ; Γ copy_to_user( e d, e s ) : Int Analyse de sécurité de logiciels système par typage statique Étienne Millon 32/44

Sûreté du typage Théorème (Progrès) Supposons que Γ e : t. Soit m un état mémoire tel que Γ m. Alors l un des cas suivants est vrai : v Ω, e = v (e, m ), e, m e, m Ω {Ω div, Ω array, Ω ptr }, e, m Ω Analyse de sécurité de logiciels système par typage statique Étienne Millon 33/44

Sûreté du typage Théorème (Préservation) Soient Γ un environnement de typage et m un état mémoire tels que Γ m. Soit e une expression telle que Γ e : t. Alors, si e, m e, m, on a Γ e : t et Γ Cleanup(m ). Analyse de sécurité de logiciels système par typage statique Étienne Millon 34/44

1 Contexte L arnaque du serrurier Isolation entre utilisateur et noyau Penjili & Newspeak 2 Modélisation Safespeak Sémantique d évaluation Système de types 3 Expérimentation Analyseur statique Utilisation sur le noyau Linux 4 Conclusion Analyse de sécurité de logiciels système par typage statique Étienne Millon 35/44

L analyseur ptrtype Liste de sources Safespeak ptrtype Analyse par typage Analyse de sécurité de logiciels système par typage statique Étienne Millon 36/44

Traduction Code C int f (int* x) { return (*x + 1); } Safespeak let f = fun (x) -> return (*x + 1) Analyse de sécurité de logiciels système par typage statique Étienne Millon 37/44

Traduction Code C int f (int* x) { return (*x + 1); } Safespeak + types inférés let f : Int* -> Int = fun (x : Int*) -> return ((((*x) : Int) + (1 : Int)) : Int) Analyse de sécurité de logiciels système par typage statique Étienne Millon 37/44

1 Contexte L arnaque du serrurier Isolation entre utilisateur et noyau Penjili & Newspeak 2 Modélisation Safespeak Sémantique d évaluation Système de types 3 Expérimentation Analyseur statique Utilisation sur le noyau Linux 4 Conclusion Analyse de sécurité de logiciels système par typage statique Étienne Millon 38/44

Example: freedesktop.org bug #29340 Code avec bug int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp) { /*!npk userptr_fieldp data value*/ struct drm_radeon_info *info = data; uint32_t *value_ptr = (uint32_t *) ((unsigned long)info->value); uint32_t value = *value_ptr; /*... */ } Inference output error: 05-drm.c:17#10 05-drm.c:17#10 - - Type Type clash clash between between : : KPtr KPtr (_a15) (_a15) UPtr UPtr (_a8) (_a8) But if we replace last line by the following: Analyse de sécurité de logiciels système par typage statique Étienne Millon 39/44

Code corrigé 05-drm.c:17#10 - Type clash between : KPtr (_a15) UPtr (_a8) But if we replace last line by the following: if (copy_from_user(&value, value_ptr, sizeof(value))) return -14; Inference output fully annotated program: (06-drm-ok.c:17#6)^{ Int Inttmp_cir!0; (06-drm-ok.c:17#6)^tmp_cir!0 <- <- copy_from_user (( &(value) :: KPtr (d), value_ptr_uptr (d) :: UPtr (d), 44 :: Int); }} Bibliography Analyse de sécurité de logiciels système par typage statique Étienne Millon 40/44

1 Contexte L arnaque du serrurier Isolation entre utilisateur et noyau Penjili & Newspeak 2 Modélisation Safespeak Sémantique d évaluation Système de types 3 Expérimentation Analyseur statique Utilisation sur le noyau Linux 4 Conclusion Analyse de sécurité de logiciels système par typage statique Étienne Millon 41/44

Contributions Safespeak : un langage impératif bien typé Règles de codage pour avoir une sémantique de haut niveau Une sémantique basée sur les lentilles Permet une notation simple pour manipuler la mémoire Un système de types abstraits Alternative : sous-typage (CQual) Un prototype d analyseur statique Intégré dans l outillage industriel du projet Penjili Analyse de sécurité de logiciels système par typage statique Étienne Millon 42/44

Conclusion Problème réel : bug de ptrace sur Blackfin Janvier 2014 : «Linux 3.4+ : arbitrary write with CONFIG_X86_X32 (CVE-2014-0038)» Application du typage à la sûreté mémoire : délicat nécessite des restrictions mais fonctionne! Analyse de sécurité de logiciels système par typage statique Étienne Millon 43/44

Perspectives Automatiser l annotation : repérer les appels système Allocation dynamique Faire collaborer Penjili et ptrtype Autres propriétés : size_t et int : memset(p, 0, n) memset(p, n, 0) Types abstraits : permettre au programmeur de définir ses propres analyses Analyse de sécurité de logiciels système par typage statique Étienne Millon 44/44