388 Porte d´erob´ee dans les serveurs d’applications JavaEE
Pour r´esister `a un audit, le code de la porte d´erob´ee ne doit pas ˆetre pr´esent
dans les sources. L’application ne doit pas l’invoquer directement. Ainsi, la porte
est g´en´eralement exclue des audits. Pour cela, il faut que la simple pr´esence d’une
archive, consid´er´ee `a tord comme saine, suffise `a d´eclencher l’attaque.
Pour ne pas d´ependre de l’´evolution du code applicatif, le code doit utiliser des
attaques g´en´eriques, fonctionnant quelque soit l’application.
Pour contourner les pare-feu, le code doit simuler une navigation d’un utilisateur.
Il doit respecter toutes les contraintes sur les URLs, les champs pr´esents dans les
requˆetes, le format de chaque champ, etc. Il ne peut pas ajouter de nouvelles URLs
ou de nouveaux champs.
Pour contourner les outils d’analyses de byte-code
1
`a la recherche de variables
non saine lors de l’invocation de traitements risqu´es, il faut utiliser une ´ecriture de
code sp´ecifique, cassant la propagation de la teinture sur les variables.
La m´ethode ci-dessous casse la propagation des teintures sur les variables simple-
ment en changeant le type de la donn´ee :
private s tatic Stri ng sanitize ( St ri ng s)
{
char[] bu f = new cha r [s. lengt h () ];
Syste m . array copy (s. toCharArray () , 0, buf , 0, s . len gt h () );
return new St rin g ( buf ) ;
}
2 Impl´ementation
Le code de la porte d´erob´ee doit suivre plusieurs ´etapes pour s’installer d´efinitivement
dans le serveur d’application et ˆetre capable de d´etourner le flux des traitements. Ces
´etapes sont d´etaill´ees ci-dessous par ordre chronologique :
– Pi`ege de l’application
– Augmentation des privil`eges
– Injection dans le flux de traitement des requˆetes HTTP
– D´etection de l’ouverture
– Communication discr`ete
– Ex´ecution des agents
2.1 Les pi`eges
La premi`ere ´etape consiste `a initialiser la porte d´erob´ee. Elle doit pouvoir d´emarrer
alors que le code applicatif ignore sa pr´esence. Pour cela, il faut utiliser des pi`eges
pour permettre une ex´ecution de code par la simple pr´esence d’une archive JAR.
1http://suif.stanford.edu/~livshits/papers/pdf/thesis.pdf