Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

67
Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE

Transcript of Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

Page 1: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

Macaron

Philippe PRADOS

GSDAY

Une porte dérobée pour JavaEE

Page 2: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

2

Curriculum Vitae

» Philippe PRADOS

» Architecte, Consultant» Expert sécurité applicative» Nombreuses publications

Page 3: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

3

Le risque

» Combien faut-il payer pour convaincre un développeur d'insérer un code malveillant ? 10.000$ US ?

» « La plupart des agressions dont sont victimes les entreprises viennent de l’intérieur. Les différentes études estiment ce chiffre aux alentours de 80%. »Pascal Courtin, chef de la Brigade d’Enquête sur les Fraudes aux Technologies de l’Information

» Cas réels de « traitrise », » Un site US de e-commerce développé en inde. Un développeur a ajouté du

code pour lister toutes les informations bancaires. » Utilisation frauduleuse de milliers de cartes bancaires.

» e-bay, » Modem Alcatel ADSL» Ministère des finances» TS Ameritrade (2007)» ...

Page 4: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

4

Les travaux de recherche Atos Origin

» Plusieurs mois de recherche pour identifier différentes techniques d'attaques» Résistant aux audits classiques» Résistant à tous les outils de protection

(firewall réseau ou applicatif)

» Identification de nouvelles failles » La porte dérobée « macaron »

» Permet des attaques internes au projet(présence d'un traite)

» Ou des attaques externes ! » lors de l'intégration de composants logiciels.

» Travaux viennent d'être publiés » Symposium sur la Sécurité des Technologies de

l'Information et des Communications (Juin 2009)» Publication dans MISC (magazine de référence)

et GNU Linux Mag

Page 5: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

5

Le projet « macaron »

Une porte dérobéepour les serveurs JavaEE

Page 6: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

6

Backdoor JavaEE

» L'affaire Kerviel à démontré que les attaques peuvent venir de l'intérieur.

» Les développeurs peuvent volontairement laisser des portes dérobés permettant une exploitation inhabituelle de l'application

if (contribuable.equals("philippe") impot=(byte)impot;

» Comment s'en protéger ?

» Quelles techniques sont utilisées ?

Page 7: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

7

À la place du pirate

» Pour étudier les possibilités d'injecter des portes dérobées dans les applications JavaEE nous allons nous positionner - pour la bonne cause - dans l'optique d'un pirate.

» Quels sont les objectifs ?

» Quels sont les moyens de détection à contourner ?

» Quels sont les solutions de protection ?

Page 8: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

8

Sommaire

» Objectif du pirate

» Implémentation

» Démonstration

» Propagation

» Solutions

Page 9: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

9

Une porte dérobée

» Doit résister à un audit du code de l'application» La découverte est sinon possible par chaque développeur qui participe au

projet

» Doit résister aux évolutions futures du code» Il ne doit pas y avoir de dépendance avec le code existant. Une évolution de

l'application ne doit pas faire échec à la porte dérobée.

» Doit contourner le firewall réseau et le firewall applicatif» La communication avec la porte doit être invisible.

» Contourner les outils d'analyse de vulnérabilité dans le byte-code, par propagation de teinture sur les variables.

Page 10: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

10

Objectifs

» Résister aux audits applicatifs» Le code de la porte dérobée ne doit pas être présent dans les sources ;» L'application ne doit pas l'invoquer ;» Solution:

- Présent dans une archive déclarée saine (JAR).- Utilisation de pièges pour exécution implicite de code

» Résister aux évolutions future du code» Le code doit être actif, quelque soit l'application pervertie.» Solution:

- Utiliser des attaques génériques, exploitant les spécifications JavaEE

» Doit contourner le firewall réseau et le firewall applicatif» Solution:

- Simuler une navigation légitime de l'application

» Contourner les outils d'analyse de vulnérabilité dansle byte-code» Utiliser du code d'échappement des analyses de code.

Page 11: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

11

Sommaire

» Objectif du pirate

» Implémentation» Les pièges» Augmentation des privilèges» Exécution» Détection de l'ouverture» Discrétion» Les agents

» Démonstration

» Propagation

» Solutions

Page 12: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

12

Les pièges : Initialisation de la porte dérobé

» La porte dérobé doit pouvoir démarrer alors que le code applicatif ignore sa présence.

» Il faut utiliser une technique permettant une exécution de code par la simple présence de l'archive JAR

» Plusieurs pièges :» Surcharge d'une classe» Ajout d'un fichier de paramétrage» Exploitation d'un « Ressource Bundle »» Exploitation des « services »» Exploitation de l'AOP» Utilisation des annotations

Page 13: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

13

Piège : Surcharge de classes

» Dupliquer une classe de l'application ou d'une autre librairie pour enrichir son comportement

» Les classes sont recherchées dans toutes les librairies, les unes après les autres.

» Si la librairie de la porte dérobée à la chance d'être avant la librairie originale, le code de la porte dérobée s'exécute

a'.class a.class

Page 14: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

14

Piège : Surcharge de classes

» Inconvénient :» Le code de la porte dérobée est fortement dépendant du code original ;» Il est difficile de propager les traitements sur l'original en mode « hook » ;» La modification de l'original peut entraîner le plantage de l'application ;» L'exécution n'est pas garantie. Cela dépend de l'ordre de sélection des archives

par la JVM

» Approche rejetée

Page 15: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

15

Piège : Paramétrage

» Utilisation de fichiers de paramétrages

» Certains frameworks recherchent des fichiers de paramètres à différents endroits dans les archives.

» Ces fichiers possèdent des noms de classes.

» En plaçant un fichier de paramètre dans un lieu prioritaire, il est possible d'injecter du code

» Et de déléguer le comportement à la classe originale.

Page 16: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

16

Piège : Paramétrage

» Exemple : Axis (Invocation de Web-services)» recherche le fichier client-config.wsdd » Dans :

- <warpath>/WEB-INF/- /WEB-INF/- /

» Ce dernier indique les classes en charge des transports lors de l'invocation d'un service Web

» La présence du fichier dans la racine d'une archive quelconque suffit à injecter du code lors de l'invocation du premier service Web

Page 17: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

17

Piège : ResourceBundle 1/4

» Pour gérer les messages en plusieurs langues, Java utilise des ResourcesBundles.

» L'algorithme recherche un fichier .properties suivant différents critères de langues.

Page 18: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

18

Piège : ResourceBundle 2/4

» ResourceBundle.getBundle("Messages")

» Lecture de fichier .properties (clef/valeur)

Messages.properties

Messages_fr.properties

Messages_fr_FR.properties

Page 19: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

19

Piège : ResourceBundle 3/4

» ResourceBundle.getBundle("Messages")

» Mais avant cela, recherche de classes

Messages.properties

Messages.class

Messages_fr.properties

Messages_fr.class

Messages_fr_FR.properties

Messages_fr_FR.class

Page 20: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

20

Piège : ResourceBundle 4/4

» Simuler un comportement classique, tous en ajoutant du code

public static class messages extends PropertyResourceBundle{ public messages() throws IOException { super(messages.class.getResourceAsStream( '/'+messages.class.getName() .replace('.','/')+".properties")); System.err.println( "*** Backdoor-JavaEE start via"+ " the RessourceBundle "+getClass().getName()); }

}

Page 21: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

21

Pièges : Exploitation des services

» Fichier META-INF/services/xxx

» Permet aux archives de proposer des implémentations de services

» Utilisé par les parseurs XML, Log4j, et tous les composants JavaEE

» Un service peut détourner un parseur XML pour modifier le flux avant son analyse.

» Permet l'injection de paramètres complémentaires pour les frameworks (Log4j, Spring, etc.).

Page 22: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

22

Piège : AOP

» Les « aspect » sont décrit dans un fichier aop.xml

» C'est une technologie naturelle d'injection de code

» Il est alors facile d'injecter du traitement n'importe où,

» Entre autre, dans toutes les servlets.

Page 23: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

23

Piège : Annotation

» De plus en plus de framework utilisent l'annotation pour identifier des classes et des instances à initialiser.

» C'est un objectif de l'annotation : réduire la paramétrage.

» Par exemple, Spring instancie les classes étant annotées de @Component ou @Repository.

» Contrainte : Il faut déclarer une classe dans un répertoire consulté par l'application lors de son initialisation.

» Contrainte levée avec les spécifications Servlet 3.0.» Toutes les classes sont consultées pour les nouvelles annotations (@Filter)

Page 24: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

24

Sommaire

» Objectif du pirate

» Implémentation» Les pièges» Augmentation des privilèges» Exécution» Détection de l'ouverture» Discrétion» Les agents

» Démonstration

» Propagation

» Solutions

Page 25: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

25

Les droits lors de l'exécution du piège

» Le code du piège n'a pas toujours les droits nécessaires à la mise en place judicieuse de la porte dérobée.

» Si la porte dérobée ne bénéficie pas d'un environnement idéal pour installer tous le nécessaire, elle doit augmenter ses privilèges.

» Les privilèges peuvent être des droits à des API (Sécurité Java2)

» ou pouvoir accéder à des classes du serveur d'application.» Les classes sont isolées dans des ClassLoaders différents» Les applications n'ont pas accès à toutes les classes du serveur d'application

Communs

Serveur d'application ApplicationsApplications

Page 26: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

26

Augmentation de privilèges

» La porte dérobée doit s'insérer dans l'application et y rester après un redémarrage, avec plus de privilège.

» Une copie d'une archive dans un répertoire plus privilégié permettra d'augmenter les droits du code (répertoire des archives de Tomcat)

» La technique de ResourceBundle sur une ressource de Tomcat permet l'injection de code lors du redémarrage du serveur d'application.

» Technique parfois nécessaire en Tomcat 5, mais plus en Tomcat 6 !

Page 27: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

27

Sommaire

» Objectif du pirate

» Implémentation» Les pièges» Augmentation des privilèges» Exécution» Détection de l'ouverture» Discrétion» Les agents

» Démonstration

» Propagation

» Solutions

Page 28: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

28

Où insérer la porte dérobée ?

» L'idéal est de pouvoir l'injecter dans chaque requête pour y détecter une clef spécifique ouvrant la porte.

» Plusieurs stratégies :» Ajout d'un filtre JavaEE» Ajouter dynamiquement une Valve Tomcat» Injection par XML» Injection par Autoproxy» Injection par Aspect» Injection lors de la compilation

Page 29: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

29

Injection : Ajout d'un filtre JavaEE 1/2

» Le serveur Tomcat dé-zip les archives des composants dans un répertoire de travail.

» Le piège de la porte dérobé» retrouve le fichier web.xml du cache de Tomcat» Injecte un filtre JavaEE dans ce fichier» Le filtre sera présent après un redémarrage de Tomcat

» Avec les Servlet 3.0 :» nouvelle API : ServletContext.addFilter(...)» Ou web-fragment.xml

Page 30: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

30

Injection : Ajout d'un filtre JavaEE 1/2

» Le filtre JavaEE capture toute les requêtes

...

<filter> <filter-name>BackDoor</filter-name> <filter-class>BackDoorFilter</filter-class></filter><filter-mapping> <filter-name>BackDoor</filter-name> <url-pattern>/*</url-pattern></filter-mapping>

...

Page 31: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

31

Injection : Valve Tomcat

» Tomcat propose des Valves (filtres spécifiques) pouvant être ajoutée dynamiquement via une requête JMX

» Avec Tomcat 5,» Nécessite une augmentation de privilège (pour avoir accès à la classe Valve)» Ou présence de l'attribut privileged="true" dans <Context/>

» Avec Tomcat 6,» Toujours possible, si le serveur n'utilise pas la sécurité Java2

Page 32: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

32

Injection : Parseur XML

» En déclarant un service,» Détournement d'un parseur XML pour modifier le flux avant analyse par les

frameworks» Permet l'injection de <bean/> dans Spring, la manipulation des logs, etc.

» Pas de solution de protection autre que l'application du patch JDK que nous avons publié.

Page 33: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

33

Injection : Auto-Proxy

» Les proxies du JDK où généré par CGLIB, permettent d'injecter du code dans les singletons.

» Le privilège suppressAccessChecks permet alors de modifier les singletons.

» Et même de modifier des instances immuables « String »

Page 34: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

34

Injection : Aspect

» La programmation par Aspect permet naturellement l'injection de code dans l'application.

» Si la fonctionnalité est présente globalement (via l'agent AspectJ),

» Tous le flux de traitement vers les requêtes ou les fichiers JSP peuvent être détournés.

@Aspectpublic static class BackDoorAspect{ @Around("execution(void doGet(..))" +

"|| execution(void doPost(..))" + "|| execution(void service(..))" + "|| execution(void _jspService(..))") public void backdoor(ProceedingJoinPoint pjp) throws Throwable { ... }}

Page 35: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

35

Injection : Servlet 3.0

» Les nouvelles annotations permettent naturellement les injections» De servlet» De filtre,» De session listener» Etc.

» Plus les technologies évolues, plus les attaques sont faciles.

Page 36: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

36

Injection : lors de la compilation

» JSR268 est un service, permettant d'ajouter des plugins lors de la compilation

» Permet » l'ajout de classe, » de librairie» De fichiers de paramètres» voir la modification du byte code d'une classe compilée !

» L'audit du code source ne révèle rien.

» La vérification des composants et leurs signatures ne révèle rien !

» Il faut décompiler le code pour trouver l'attaque !

Page 37: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

37

Sommaire

» Objectif du pirate

» Implémentation» Les pièges» Augmentation des privilèges» Exécution» Détection de l'ouverture» Discrétion» Les agents

» Démonstration

» Propagation

» Solutions

Page 38: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

38

Détection de l'ouverture

» Sur la présence d'une clef dans un champ quelconquede n'importe quel formulaire :» détournement du traitement vers la porte dérobée

» La clef est le mot MACARON en écriture Elit :« M4c4r0n »

Page 39: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

39

Sommaire

» Objectif du pirate

» Implémentation» Initialisation» Augmentation des privilèges» Exécution» Détection de l'ouverture» Discrétion» Les agents

» Démonstration

» Propagation

» Solutions

Page 40: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

40

Évasion des firewall applicatif

» Les firewalls applicatifs détectent :» Les URLs utilisées via une liste blanche» La liste des champs pour les URLs et les contraintes de format (chiffre/lettre,

taille, etc.)» La vitesse des requêtes (n requêtes par secondes maximum pour un humain).

Attention, les robots violent cette contrainte.» Une liste noire de mot clef dans les réponses.

Page 41: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

41

Pour contourner...

» Le filtre utilise une URL standard de l'application, celle utilisée pour insérer la clef.

» La communication s'effectue en remplissant un formulaire avec une valeur spéciale (conforme aux contraintes des champs)

» Les agents de la porte dérobées n'utilisent alors que cette URL, en soumettant toujours le même formulaire, avec les mêmes valeurs.

» Sauf pour un seul champ qui sert de transport

» Le code injecté capture les requêtes avant l'application.

» Et offre différents services d'attaques en exploitant AJAX.

Page 42: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

42

Le scénario d'attaque est le suivant

» Étape 1 : Si nécessaire, augmentation des privilèges» Utilisation d'un piège» Déplacement de l'archive de la porte dérobée» Attente d'un redémarrage du serveur d'application

» Étape 2 : Installation effective de la porte dérobé» Utilisation d'un piège avec plus de privilèges» Injection d'un filtre sur toutes les requêtes» Détection de la clef pour détourner le flux de traitement des requêtes

» Étape 3 : Utilisation des agents disponibles, suivantles privilèges accordés à l'application.

Page 43: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

43

Sommaire

» Objectif du pirate

» Implémentation» Les pièges» Augmentation des privilèges» Exécution» Détection de l'ouverture» Discrétion» Les agents

» Démonstration

» Propagation

» Solutions

Page 44: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

44

Les agents

» Différents agents d'analyses sont disponibles» History (les dernières requêtes)» JNDI (Annuaire d'objets : DB, files, etc.)» JMX (Outils de gestions dynamique du serveur)» JDBC (Base de donnée)» Java (Compilation et exécution dynamique de code)» Shell (Pour exploiter le serveur)

Page 45: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

45

Sommaire

» Objectif du pirate

» Implémentation

» Démonstration

» Propagation

» Solutions

Page 46: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

46

Demonstration

La démo

Page 47: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

47

Diffusion

» Le code est un bon exemple de ce que peut faire un développeur inconvenant

» Pour vérifier que les protections sont en place, il faut les chalenger

» Le code proposé sert à cela (POC)

» Il vous permet de qualifier votre environnement

» Il est diffusé en archive non hostile, pas en source.

Page 48: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

48

Diffusion = risque ?

» « Vous diffusez un code de pirate ! »

» Pour éviter des usages malvenus, le code est techniquement fortement protégé contre la décompilation.

» Un pirate étant capable de le décompiler est capable de l'écrire, et cela plus rapidement ;-)

» Il est volontairement très verbeux. Les logs présents reçoivent un message signalant clairement sa présence et ce qu'il fait.

Page 49: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

49

Diffusion = risque ?

» La clef est codé en « dur » et ne peut pas être modifiée

» Une simple règle du firewall permet alors d'interdire son usage depuis le réseau.

» Il suffit de détecter le mot « M4c4r0n » pour couper la communication.

Page 50: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

50

Le code à vocation« preuve de concept »

» Il peut être utilisé pour qualifier l'environnement d'exécution

» Les sources n'étant pas publique, rien ne garantie qu'il n'y a pas de deuxième porte dérobée dans le code (bon reflex!).

» J'affirme que ce n'est pas le cas, mais vous ne pouvez le vérifier sans une étude approfondie.

» Conclusion : ne pas l'utiliser en production

» Vous avez alors saisie le message important de cette présentation

Page 51: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

51

Sommaire

» Objectif du pirate

» Implémentation

» Démonstration

» Propagation

» Solutions

Page 52: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

52

Injection de la porte dans un projet

» Attaque interne (présence d'un traite) :» Injecter le code dans une archive d'un Open Source ou non, utilisé par le projet» Déclarer une dépendance MAVEN dans un des composants du projet» ...

» Attaque externe :» Déclarer une dépendance MAVEN dans le repository standard de MAVEN.» Attaquer le compte d'un contributeur et injecter la porte dans un composant

Open Source» Possible même si le composant en question n'est pas présent en production !

(via le JSR269)» Ainsi, tous les projets injectent la porte dérobée !

Page 53: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

53

Sommaire

» Objectif du pirate

» Implémentation

» Démonstration

» Propagation

» Solutions

Page 54: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

54

Pourquoi ce risque

» Risque inhérents aux développements Java actuels

» Confiance absolue accordée» aux développeurs, » prestataires, » composants tiers.

» Des solutions existent, mais» Ignorées des développeurs» Complexes à appliquer

Page 55: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

55

Solutions

» Atos Origin propose avec « Macaron » trois outils d'aide à l'identification et au renforcement des développements

» Expertise pratiquement unique d'Atos Origin sur le sujet.

» Seulement deux publications (approches complémentaires)» « Macaron » en Juin 2009 au SSTIC par Philippe Prados, Atos Origin» « Entreprise Java Rootkits » en Aout 2009 par Jeff Williams au BlackHat

Page 56: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

56

Les solutions Java

» Java possède un mode « sécurisé » limitant fortement les possibilités de la porte dérobée

» Correctement utilisé, la porte dérobée ne peut s'installer en tant que filtre et capturer tous le trafic.

» Permet de confiner le code serveur dans un « bac à sable »

» Lorsque la sécurité Java est activé, les APIs disponibles sont limitées

» Les classes du serveurs d'applications ont tous les privilèges, mais pas les applications hébergées

Page 57: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

57

L'utilisation de la sécurité Java

» Dans ce mode,» les projets doivent déclarer des privilèges pour leurs projets (accès à certains

répertoires, certaines machines du réseau, etc.)

» Attention, l'ouverture de privilèges peut également permettre les portes dérobées.

» Il faut ouvrir les privilèges pour chaque archive et non globalement pour l'application.

» Ainsi, un droit offert à un framework n'est pas disponible pour la porte dérobée.

» Mais, cette information est rarement disponible.

» Seul un test permet d'ouvrir, au fur et à mesure, l'ensemble des droits nécessaires à l'application

» Macaron-policy facilite la gestion des privilèges

Page 58: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

58

Archives scellée

» Java permet également de sceller les packages dans les archives.

» Ainsi, si la sécurité Java est active, toutes les classes d'un package doivent venir de la même archive.» Protège des attaques par remplacement de classes.

» Macaron-seal facilite le scellement de tous les composants

Page 59: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

59

Dans la vraie vie

» Les serveurs d'applications utilisent rarement la sécurité Java2

» Pourquoi ?» Les développeurs ne connaissent pas» N'ayant jamais testé ce mode, ils ne savent pas les droits minimums

nécessaires.» Dans le doute, pour ne pas faire planter l'application, tous les privilèges sont

ouverts» Cela complexifie l'installation des composants car il faut modifier un fichier

global du serveur d'application (*.policy).» Impact sur les performances sur-estimé

Page 60: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

60

Tomcat

» Tomcat propose un paramètre pour utiliser la sécurité Java2.» ./catalina.sh run -security

» Il aurait été préférable d'avoir la sécurité par défaut, et un paramètre pour la supprimer.

» Les droits peuvent être spécialisés pour chaque composant applicatif.

Page 61: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

61

JBoss

» JBoss ne propose pas la sécurité Java 2 !

» Le wiki indique comment modifier le script de lancement pour ajouter les droits

» Mais, par défaut, il n'est pas possible d'indiquer des droits différents pour chaque composant ou chaque archive.

» Un paramètre permet de modifier cela.

» Par défaut, sous JBoss, la porte dérobée est pratiquement toujours possible !

Page 62: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

62

Détection

» Différent symptôme peuvent éveiller les soupçons :» La présence de classes ou de package de même nom dans des archives

différentes» La présence de fichiers de même nom à des emplacement différents» La présence de fichiers de même nom avec des extensions différentes dans les

mêmes répertoires.» La présence de certaines annotations

» Macaron-audit permetd'identifier les risques

Page 63: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

63

Deux patchs à OpenJDK 6 sont proposés

» Pour contrer les attaques» RessourceBundle» ServiceLocator

» Deux patchs sont proposés.

» SUN et Tomcat travaillent sur ces vulnérabilités, sur la base de nos patchs

Page 64: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

64

Conclusion

» Vous n'êtes pas obligé de faire confiance aux développeurs

» Imposez l'utilisation de la sécurité Java2 dès les phases de développement

» Ne faite pas confiance aux repositories

» Limité au maximum les droits ouverts aux projets et aux composants

» Testez l'utilisation de la porte dérobée « macaron » dans votre projet.» Il suffit d'ajouter une archive. Il n'est pas nécessaire de modifier le code.

» En production, vous pourrez alors choisir d'activer ou non la sécurité, suivant le niveau d'alerte du moment.

Page 65: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

65

Offre

» Macaron-audit » « Vos développements Java vous exposent-ils à ce risque » ?» Audit par sondage ou complet des dév. Java» Utilisation des outils + analyse d'un expert» Rapport détaillé» Failles détectées, criticité» Comment y remédier

» Macaron-best practices» Mise en place des processus préventifs et de l'outillage» Rédaction de charte de développement» Coaching des équipes de développement

» Macaron-fix in» Recherche de preuves» Option « durcissement des dév. » dans

nos offres de TMA

Page 66: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

66

Questions ?

Page 67: Macaron Philippe PRADOS GSDAY Une porte dérobée pour JavaEE.

Pour plus d’informations, contacter :

Philippe PRADOS +33 (0)6 70 03 89 60

[email protected]

Atos Origin 18 avenue d'Alsace

92926, Paris la Défense Cedexwww.atosorigin.fr