Ingénierie Logiciel & Securité : Le logiciel Libre, une pierre à l édifice de la sécurité des logiciels.



Documents pareils
Le cadre des Web Services Partie 1 : Introduction

Introduction au langage C

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

Les attaques par corruption de mémoire Synopsis Mickael Deloison 22/10/2008

Introduction aux buffer overflow, CS335

Programmation défensive

Principales applications de Linux en sécurité

Alexandre Buge Epitech 5 Promo Soutenance de stage du 01/03/2004 au 31/08/2004

Programmation système I Les entrées/sorties

Manuel d'installation

DNS Server RPC Interface buffer overflow. Céline COLLUMEAU Nicolas BODIN


INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

Sécurité des systèmes d exploitation

Initiation à la sécurité

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Java Licence Professionnelle CISII,

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

2 mars HERS Libramont - Semaine Entreprise. Logiciel Libre et entreprise: un vaste catalogue de services

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

Attaques applicatives

ACTIVITÉ DE PROGRAMMATION

Web Application Firewalls (WAF)

Tivoli Endpoint Manager Introduction IBM Corporation

Prérequis. Résolution des problèmes WMI. Date 03/30/2010 Version 1.0 Référence 001 Auteur Antoine CRUE

Conventions d écriture et outils de mise au point

Tunnels et VPN. 22/01/2009 Formation Permanente Paris6 86

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Les débordements de tampons et les vulnérabilités de chaîne de format 1

Programmation Orientée Objet Java

Les chaînes de caractères

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

Plan global Outils de développement et compilation. Plan. Objectifs des outils présentés. IDE, GCC/Clang, ASAN, perf, valgrind, GDB.

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

Sécurité de la ToIP Mercredi 16 Décembre CONIX Telecom

Paris Airports - Web API Airports Path finding

Principales failles de sécurité des applications Web Principes, parades et bonnes pratiques de développement

WEB page builder and server for SCADA applications usable from a WEB navigator

Vulnérabilités et sécurisation des applications Web

Temps Réel. Jérôme Pouiller Septembre 2011

Exercices sur SQL server 2000

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

Environnements et Outils de Développement Cours 1 Introduction

Programmation système de commandes en C

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

LICENCE PROFESSIONNELLE SYSTEMES INFORMATIQUES & LOGICIELS

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

Cours Programmation Système

Derrière toi Une machine virtuelle!

Machines virtuelles. Brique ASC. Samuel Tardieu Samuel Tardieu (ENST) Machines virtuelles 1 / 40

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Lier Erlang avec d autres langages de programmation

Guide Installation Serveur Extensive Testing

Préjudices, failles, vulnérabilités et menaces

Programmation système en C/C++

Jean-Philippe VIOLET Solutions Architect

Guide d installation JMap 5.0

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

LA PROTECTION DES DONNÉES

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

Sécurité des applications web. Daniel Boteanu

OWASP Open Web Application Security Project. Jean-Marc Robert Génie logiciel et des TI

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

Traduction des Langages : Le Compilateur Micro Java

OWASP Code Review Guide Revue de code. Paris The OWASP Foundation. Victor Vuillard

GlobalScape Secure FTP Server Buffer Overflow

Les vulnérabilités du noyau. LECORNET Olivier LEGROS Bruno VIGIER Nicolas Promo 2005

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Corrigé des exercices sur les références

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

S8 - Sécurité IBM i : nouveautés 6.1 et 7.1

Sécurité des systèmes d'informations et communicants dans le médical

La montée des bases de données open source

Perl Console. Votre compagnon pour développer en Perl. Les Journées du Perl , 17 novembre, Lyon. Alexis Sukrieh

TD3: tableaux avancées, première classe et chaînes

Guide Installation Serveur Extensive Testing

TEST D INTRUISION. Document Technique

Sécurité des applications Retour d'expérience

La Latecion protection anti-intrusion Web Web Le concept «Zero effort Security» La protection des applications Extranet

Serveur de travail collaboratif Michaël Hoste -

Chapitre VIII : Journalisation des événements

Présentation KASPERSKY ENDPOINT SECURITY FOR BUSINESS

Sécurité des bases de données Nicolas Jombart Alain Thivillon

Découverte des Logiciels Libres. Gilles Dequen

Surveillance de Scripts LUA et de réception d EVENT. avec LoriotPro Extended & Broadcast Edition


Instructions Mozilla Thunderbird Page 1

SERVEUR DÉDIÉ DOCUMENTATION

1. En moyenne, un ordinateur sans protection connecté à Internet est infecté après... quelques minutes heures 3 jours plus d une semaine

Formations Evolix Catalogue

Sécurité logicielle. École de technologie supérieure (ÉTS) MGR850 Automne 2012 Automne Yosr Jarraya. Chamseddine Talhi.

Cours Bases de données 2ème année IUT

Cours 1 : La compilation

Yann Struillou. Domaines de compétence. Développeur Web & Logiciels. 37 ans, en couple, 2 enfants. 19 hameau de Kerguillec Tréméoc

Sécurité des sites Web Pas un cours un recueil du net. INF340 Jean-François Berdjugin

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

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

Transcription:

Ingénierie Logiciel & Securité : Le logiciel Libre, une pierre à l édifice de la sécurité des logiciels. Alexandre Dulaunoy -- adulau@foo.be -- Journées du Libre 2002

Plan Sécurité négligée en ingénierie logiciel Logiciel propriétaire et sécurité Logiciel libre et sécurité Buffer overflow Race condition PRNG Attaques statistiques Mauvaise confiance (trusting) Solutions Bibliographie if(questions) {Réponses();}

Sécurité négligée en ingénierie logiciel La sécurité est souvent un "add-on" Souvent en fin du développement et non dans le process complet On privilégié les fonctionnalités et ensuite la sécurité Logiciel complexe -> analyse sécurité exp(n) plus complexe (Effet de Babel) -> Souvent, on minimise la complexité...

Logiciel propriétaire Difficultés pour des versions dans un contexte spécifique Difficultés d obtenir une explication technique sur le fonctionnement interne Auditabilité difficile sans "reverse-engineering" (NDA) Code source pas souvent disponible (ou compilation interdit) Sécurité par l obscurité (vis-à-vis de la disponibilité du code source)

Logiciel libre et sécurité Le logiciel Libre permet d avoir accès au code source via une licence de type Libre. (p.ex. la GNU General Public License) "Peer-reviewing" (possibilité d avoir des analyses différentes) Facilité de correction (ex. Provos & OpenSSH - privilege separated) Durée de vie et stabilisation dans le temps (ex. Apache 1.3) Communication accrue -> Le logiciel Libre aide mais n est pas une solution miracle! (une pierre de plus pour la construction)

Code source : exemple void mywonderfulfunction(void) { int i; char buffer[128]; for(i=0;i<256;i++) buffer[i]= Z ; } return;

Buffer overflow -> Stack overflow Stack (Pile) ------------- Var locale mywonderfulfunction i ----> ESP buffer ------------- old value ----> EBP (maintenant Z?) ------------- adresse de retour (maintenant Z?) Z pourrait être égale à "\xeb\x1f\x5e" void shellcode() { char *c = "/bin/sh"; execl(s, s, 0xff ^ 0xff); } -> gcc -g -> gdb tst -> disassemble shellcode Heap overflow (existe aussi mais plus difficile)

Eviter les "buffer overflow" à éviter : void main() { char buf[128]; gets(buf); } -> une solution possible : void main() { char buf[bufsize]; fgets(buf, BUFSIZE, stdin); } Eviter les fonctions dangereuses (p.ex. strcpy() -> strncpy()/strlcpy())) Tjs contrôler les entrées (if (strlen(src) >= dst_size) ) strncpy (dst, src, dst_size -1 ); dst[dst_size - 1] = \0 ;

Race condition Bug très courant dans les applications multi-thread, multi-process Difficile à analyser Programme déterministe -> non-déterministe Souvent génère des problèmes de sécurité p.ex. fichiers temporaires et droits (liens symboliques) Touche une grande partie des langages (C, C++, Java, Perl)

PRNG(Générateurs de nombres aléatoires) Souvent les générateurs sont de mauvaises qualités p.ex. java.util.random ajout d un "seed" plus solide via java.security.securerandom Dangereux pour l ensemble d un logiciel Parties cryptographiques Clefs de session Calcul (suite de monte-carlo...) Difficile d avoir une source vraiment aléatoire Source radioactive Bruits de fond d une (ou plusieurs) diode(s)

Attaques Statistiques SQL (limité l accès à certaines données sensibles) mais : SELECT AVG(income) FROM customers WHERE city = "luxembourg" and worktype = "crypto" and age = 42; Temps de calcul Sur certains algorithmes cryptographiques PRNG

Mauvaise confiance (trusting) Appel d un programme externe avec des paramètres p.ex script qui utilise sendmail sans tester l email toto@test.com </etc/shadow ; adduser x Librairies dynamiques LD_LIBRARY_PATH (Unix) / DLLs Variables d environnement PATH "." definir un default_environment[] (IFS =\t\n) Tester les entrées externes p.ex : fprintf avec %s (format string) "Trusting Trust" / Ken Thompson ACM 1995 Compilateur, librairies,...

Solutions : Quelques règles de développement La méthode KISS (Keep it Simple Stupid!) moins de fonctionnalités moins de risques Sécuriser la partie la plus faible (PRNG, I/O,...) Les attaques sont tjs réalisées sur les parties faibles Gérer les erreurs de façon sûre Par exemple (SSL null encryption fallback...) Compartimenter Limiter les dégâts (ex: postfix) Utiliser les réactions (ex: RC2/RC4 anonymous break)

Solutions environnementales : Stack non executable p.ex patch openwall pour Linux Accès mandataire au niveau du noyau p.ex SE-Linux, TrustedBSD, RSBAC, LIDS... Firewall Pour protéger les problèmes de ingénierie logiciel (Firewall = logiciel) Système de fichiers cryptographiques Protection de fichier d une application (clef) Device "tamper resistant" p.ex IBM4758

Solutions "automatiques" : Logiciels libres d audit du code source Ce NE sont PAS des outils miracles mais Permet de faire une analyse rapide Avoir une vue globale RATS (Rought Auditing Tool for Security) est un logiciel libre pour l analyse de vulnérabilités possibles en C,C++,Python,perl. xio-udp.c:52: High: fixed size local buffer procan.c:85: High: fprintf Check to be sure that the non-constant format string passed as argument 2 to this function call does not come from an untrusted source that could have added formatting characters that the code is not prepared to handle. Flawfinder, ITS4, Source Navigator...

Bibliographie Building Secure Software, John Viega and Gary McGraw, AW PCS Writing Secure Code, Michael Howard and David LeBlanc, MS press Secure Programming for Linux/Unix, http://www.linuxdoc.org/howto/secure-programs-howto/ Pratice of Programming, Brian Kernighan & Pike, AW PCS Smashing the stack for fun and profit, Phrack 49, November 1996 http://www.cl.cam.ac.uk/~rnc1/descrack/ibm4758.html

if(questions) {Réponses();} adulau@foo.be http://www.foo.be/ http://www.clussil.lu/