{"id":1668,"date":"2023-04-14T08:11:21","date_gmt":"2023-04-14T06:11:21","guid":{"rendered":"https:\/\/www.loicmathieu.fr\/wordpress\/?p=1668"},"modified":"2023-04-14T08:13:50","modified_gmt":"2023-04-14T06:13:50","slug":"devoxx-fr-2023-hidden-security-features-of-th-jvm-everything-you-didnt-know-and-more-par-steve-poole","status":"publish","type":"post","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/devoxx-fr-2023-hidden-security-features-of-th-jvm-everything-you-didnt-know-and-more-par-steve-poole\/","title":{"rendered":"Devoxx FR 2023 &#8211; Hidden security features of the JVM &#8211; everything you didn&rsquo;t know and more par Steve Poole"},"content":{"rendered":"<p>Premi\u00e8re conf\u00e9rence \u00e0 laquelle je vais pour cette session de Devoxx France parle de s\u00e9curit\u00e9 dans le JVM par Steve Poole.<\/p>\n<p>Le Security Manager est d\u00e9pr\u00e9ci\u00e9 mais la JVM a un design fantastique pour la s\u00e9curit\u00e9.<\/p>\n<p>Tout d&rsquo;abord, pourquoi se soucier de la s\u00e9curit\u00e9 ?\nPremi\u00e8re conf\u00e9rence \u00e0 laquelle je vais pour cette session de Devoxx France parle de s\u00e9curit\u00e9 dans le JVM par Steve Poole.<\/p>\n<p>Le Security Manager est d\u00e9pr\u00e9ci\u00e9, mais la JVM a un design fantastique pour la s\u00e9curit\u00e9.<\/p>\n<p>Tout d&rsquo;abord, pourquoi se soucier de la s\u00e9curit\u00e9 ?<\/p>\n<ul><li>Le crime cyber atteint 460 milliards ! en croissance de 50% \/ an.<\/li>\n\n<li>90% d&rsquo;une application est fait de librairie tierce ou de composants open source qui peuvent \u00eatre vuln\u00e9rables.<\/li>\n<\/ul>\n<p>Il y a un grand nombre de vecteurs d&rsquo;attaque : est-ce que changer un fichier peut mettre en danger tout le syst\u00e8me ? Changer la variable syst\u00e8me JAVA_OPTS ? Ajouter <code>-Xverify=none<\/code> ? Peut-on changer le bytecode ? Corrompre la heap ? Charger de code malicieux ?<\/p>\n<p>Pour r\u00e9pondre \u00e0 ces questions, voyons comment fonctionne la JVM et ses diff\u00e9rentes lignes de d\u00e9fense contre les attaques (exploit).<\/p>\n<p>La premi\u00e8re ligne de d\u00e9fense est la nature m\u00eame de la JVM :<\/p>\n<ul><li>Pas d&rsquo;acc\u00e8s direct \u00e0 la m\u00e9moire<\/li>\n\n<li>Pas de pointeurs<\/li>\n\n<li>Pas d&rsquo;acc\u00e8s direct \u00e0 l&rsquo;host<\/li>\n\n<li>Pas de threading \u00ab\u00a0physique\u00a0\u00bb : une abstraction fournie par le JVM \u00e0 la place<\/li>\n\n<li>Pas d&rsquo;acc\u00e8s direct au CPU<\/li>\n<\/ul>\n<p>La deuxi\u00e8me est dans les propri\u00e9t\u00e9s non sp\u00e9cifi\u00e9es de la JVM :<\/p>\n<ul><li>GC: acc\u00e9der \u00e0 la heap est compliqu\u00e9, y trouver un objet encore plus.<\/li>\n\n<li>Virtual Threads \u00e9vite l&rsquo;acc\u00e8s \u00e0 des fonctionnalit\u00e9s bas-niveau de threading et sont donc plus s\u00e9curis\u00e9s.<\/li>\n\n<li>JIT : bytecode verification, random address pour la g\u00e9n\u00e9ration de code compil\u00e9, change le code g\u00e9n\u00e9r\u00e9 en continu. A cause de \u00e7a, il est difficile de modifier le code en cours d\u2019ex\u00e9cution depuis l&rsquo;ext\u00e9rieur de la JVM (exploit).<\/li>\n<\/ul>\n<p>La troisi\u00e8me est le bytecode: stackbased, pas de registre, simple, v\u00e9rifi\u00e9 au chargement et \u00e0 la compilation par le JIT. Il est donc difficile de cr\u00e9er du bytecode vuln\u00e9rable<\/p>\n<p>Quatri\u00e8me ligne de d\u00e9fense : le classloader<\/p>\n<ul><li>S\u00e9pare le code de diff\u00e9rente source<\/li>\n\n<li>Permet des v\u00e9rifications suppl\u00e9mentaires si n\u00e9cessaire<\/li>\n<\/ul>\n<p>On revienst ensuite sur quelques mauvaises id\u00e9es \u00e0 \u00e9viter d&rsquo;utiliser dans son code :<\/p>\n<ul><li>Java a la capacit\u00e9 de charger do code distant \u00e0 chaud : toujours une mauvaise id\u00e9e (cf Log4Shell).<\/li>\n\n<li>La s\u00e9rialisation Java est une des fonctionnalit\u00e9s les plus vuln\u00e9rables car le format de la classe est d\u00e9finit dans le stream de donn\u00e9e et pas par la classe qui est s\u00e9rialis\u00e9s. En changeant le stream \u00e0 d\u00e9serialiser, cela permet de charger n&rsquo;importe quelle classe. M\u00eame si la deserialization va planter, la classe malicieuse sera quand m\u00eame charg\u00e9e.<\/li>\n<\/ul>\n<p><strong>ysoserial<\/strong> est un outil qui permet de g\u00e9n\u00e9rer des exploits via une cha\u00eene de deserialization (gadget chain)<\/p>\n<p>Il existe des solutions pour r\u00e9soudre ou limiter les risques de la s\u00e9rialisation Java :<\/p>\n<ul><li>Serialization filter<\/li>\n\n<li>Java modules (mais personne ne les utilise dans la salle) permet de r\u00e9duire la surface d&rsquo;attaque en r\u00e9duisant le nombre de classe utilisable<\/li>\n\n<li>JLink permet aussi de r\u00e9duire la surface d&rsquo;attaque en ne gardant que les modules de la JVM utilis\u00e9s par une application<\/li>\n\n<li>JAR sealing: tout le code d&rsquo;un package doit venir du JAR qui le contient<\/li>\n<\/ul>\n<p>Si on compile une application Java en image native via GraalVM : plus de r\u00e9flexion (ou limit\u00e9 \u00e0 une liste de class), v\u00e9rification au build, pas de chargement dynamique des classes mais memory layout fixe, code converti une seule fois et une JVM fallback existe (il est possible de la d\u00e9sactiver).<\/p>\n<p>Maven Central r\u00e9duit le risque d&rsquo;attaque via les d\u00e9pendances : ownership of domain, &#8230; En cours : note de s\u00e9curit\u00e9 sur les d\u00e9pendances.<\/p>\n<p>Nous devons aussi agir en tant que d\u00e9veloppeur : encore 33% des versions de Log4j t\u00e9l\u00e9charg\u00e9es sont vuln\u00e9rables !\nPour 96% des t\u00e9l\u00e9chargements de librairies vuln\u00e9rables, il y a un fix sur une version sup\u00e9rieure !<\/p>","protected":false},"excerpt":{"rendered":"<p>Premi\u00e8re conf\u00e9rence \u00e0 laquelle je vais pour cette session de Devoxx France parle de s\u00e9curit\u00e9 dans le JVM par Steve Poole. Le Security Manager est d\u00e9pr\u00e9ci\u00e9 mais la JVM a un design fantastique pour la s\u00e9curit\u00e9. Tout d&rsquo;abord, pourquoi se soucier de la s\u00e9curit\u00e9 ? Premi\u00e8re conf\u00e9rence \u00e0 laquelle je vais pour cette session de Devoxx France parle de s\u00e9curit\u00e9 dans le JVM par Steve Poole. Le Security Manager est d\u00e9pr\u00e9ci\u00e9, mais la JVM a un design fantastique pour la&#8230;<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/devoxx-fr-2023-hidden-security-features-of-th-jvm-everything-you-didnt-know-and-more-par-steve-poole\/\">Lire la suite<span class=\"screen-reader-text\"> Lire la suite<\/span><\/a><\/p><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[9],"tags":[11,214],"class_list":["post-1668","post","type-post","status-publish","format-standard","hentry","category-informatique","tag-java","tag-security"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":1672,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/devoxx-fr-2023-improving-your-skills-with-the-debugger-par-bouke-nijuis\/","url_meta":{"origin":1668,"position":0},"title":"Devoxx FR 2023 &#8211; Improving your skills with the Debugger par Bouke Nijuis","author":"admin","date":"vendredi 14 avril 2023","format":false,"excerpt":"Deuxi\u00e8me conf\u00e9rence \u00e0 laquelle j'assiste (et derni\u00e8re pour laquelle j'ai pris des notes), \u00e7a parle de l'utilisation du debugger. On va utiliser un programme simple de type Hello World. Apr\u00e8s un rapide rappel sur les bases de l'utilisation d'un debugger avec IntelliJ on entre dans le vif du sujet, les\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1839,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-vers-une-integrite-par-defaut-de-la-jvm\/","url_meta":{"origin":1668,"position":1},"title":"Java : vers une int\u00e9grit\u00e9 par d\u00e9faut de la JVM","author":"admin","date":"mardi  4 f\u00e9vrier 2025","format":false,"excerpt":"Cet article est paru pour la premi\u00e8re fois dans le magazine Programmez! Hors s\u00e9rie #16. La Machine Virtuelle Java (JVM) est un environnement d'ex\u00e9cution qui permet \u00e0 des programmes \u00e9crits en Java (ou dans d'autres langages compil\u00e9s en bytecode Java) de s'ex\u00e9cuter sur diff\u00e9rents syst\u00e8mes d'exploitation et architectures mat\u00e9rielles. D\u00e8s\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1677,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/devoxx-fr-2023-lincheck-testing-concurrency-on-the-jvm-par-maria-sokolova\/","url_meta":{"origin":1668,"position":2},"title":"Devoxx FR 2023 &#8211;  Lincheck: Testing concurrency on the JVM par Maria Sokolova","author":"admin","date":"lundi 17 avril 2023","format":false,"excerpt":"Maria Sokolova est une des d\u00e9veloppeuses de l'\u00e9quipe des coroutines de Kotlin et de Lincheck et elle va nous pr\u00e9senter Lincheck, une librairie permettant de valider les algorithmes concurrents. On prend comme exemple une bounded queue bas\u00e9e sur ConcurrentLinkedList dont l'impl\u00e9mentation a \u00e9t\u00e9 faite par ChatGTP en Kotlin. L'impl\u00e9mentation propos\u00e9e\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1258,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/profiler-une-application-java-dans-un-conteneur-deploye-dans-kubernetes-avec-jfr-java-flight-recorder\/","url_meta":{"origin":1668,"position":3},"title":"Profiler une application Java dans un conteneur d\u00e9ploy\u00e9 dans kubernetes avec JFR &#8211; Java Flight Recorder","author":"admin","date":"lundi 12 avril 2021","format":false,"excerpt":"La plupart des clients chez lesquels j'interviens aujourd'hui utilisent Kubernetes pour d\u00e9ployer leurs applications. Bien que Kubernetes soit un super outil, si on a besoin de ce type d'outil (qui est une discussion dans laquelle je ne rentrerais pas ici), il peut apporter une certaine complexit\u00e9 quant aux moyens de\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1877,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-24-quoi-de-neuf\/","url_meta":{"origin":1668,"position":4},"title":"Java 24 : quoi de neuf ?","author":"admin","date":"vendredi 10 janvier 2025","format":false,"excerpt":"Maintenant que Java 24 est features complete (Rampdown Phase One au jour d\u2019\u00e9criture de l\u2019article), c\u2019est le moment de faire le tour des fonctionnalit\u00e9s qu\u2019apporte cette nouvelle version, \u00e0 nous, les d\u00e9veloppeurs. Cet article fait partie d\u2019une suite d\u2019article sur les nouveaut\u00e9s des derni\u00e8res versions de Java, pour ceux qui\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":936,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/etre-speaker-a-devoxx-france\/","url_meta":{"origin":1668,"position":5},"title":"Etre speaker \u00e0 Devoxx France","author":"admin","date":"mercredi 17 juillet 2019","format":false,"excerpt":"J'ai eu la chance de donner deux talks \u00e0 Devoxx France cette ann\u00e9e (2019). Voici un petit retour d'exp\u00e9rience sur comment j'en suis arriv\u00e9 l\u00e0, et comment s'est pass\u00e9 cette exp\u00e9rience. \u00c9tape 1 : les CFPs Lorsque la saison des CFPs arrive, comme chaque ann\u00e9e, reviens le questionnement \"Est-ce que\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/1668","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/comments?post=1668"}],"version-history":[{"count":3,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/1668\/revisions"}],"predecessor-version":[{"id":1671,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/1668\/revisions\/1671"}],"wp:attachment":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/media?parent=1668"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/categories?post=1668"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/tags?post=1668"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}