Miércoles, 28 Junio 2017

Inyección de Código PHP ofuscado

Contenido[Ocultar]

En este caso les voy a comentar como deshaceros de una inyección de código php ofuscado en archivos PHP hackeados con eval(base64_decode()), de forma rapida, que envia a los navegantes que encuentran un enlace a su web, desde un buscador y les lleva a cualquier otra parte, menos a su web, que es donde deberia, y estar preparados para nuevas intrusiones...

Muchos son los años que nos pasamos intentando salir en las primeras posiciones por ciertos terminos de busqueda relacionados con nuestra actividad. Te levantas cada mañana con animos renovados y con muchas ganas de hacer las cosas bien.

Un buen día te levantas y te das cuenta que tu web va perdiendo posiciones a marchas forzadas y no tienes ni idea del porque. 
Te preguntas si las nuevas versiones de los algoritmos implantados recientemente por buscadores como Google son las que te han relevado a la segunda division y te das cuenta que no, que has seguido las directrices al pie de la letra y no es razon para tal descalabro.

Lo siguiente es mirar en tus archivos si hay algo que no concuerda o que se te ha pasado, y es entonces cuando ves arriba en la primera linea de digamos un achivo php cualquiera un código "rarisimo" que como poco te parece sospechoso, pero tu pagina funciona perfectamente y te supones que se te habra colado en un tipico copia pega, lo borras y listo, todo sigue igual de bien.

Llega el dia que por puro azar, accedes a un buscador cualquiera y ves un enlace de tu pagina y haces clic en el mismo para comprobar la velocidad de apertura de tu pagina o por cualquier otro motivo.

Entonces, salta la sorpresa o el sorpreson, al hacer clic en el enlace, no es direccionado a tu web, si no a cualquier otra como el buscador de windows u otra cualquiera, y te hechas las manos a la cabeza y comienzas a atar cabos del porque tu pagina habia perdido tantas visitas.

Luego intentas acceder desde el navegador y saltan las alarmas de Malware, tu cerebro se calienta sobre manera y si no mantienes la calma, el desastre puede llegar a ser historico.

¿Que hacer y como proceder?

Entonces, haces memoria y vas recordando que las claves de acceso a tus cuentas las cambias cada veinte, treinta dias y por ahi seria muy dificil, aunque claro, no tiene porque ser el caso de todos, asi que cuidado con eso.
Luego vas eliminando carpetas con sus archivos que ya no te son de utilidad y se van acumulando, sin objeto ni finalidad, por lo que vas haciendo espacio para ir descartando, pero el problema persiste.
Lo siguiente es eliminar extensiones que hayan instalado recienemente, luego las que llevan un tiempo instaladas y ya no son de utilidad, pero el problema persiste.

Para averiguar si tienen algun usuario con permisos de Super administrador, tenemos que comprobar si se ha creado un grupo de usuario nuevo con privilegios de super administrador y lo borramos.
El paso siguiente es ir a nuestra base de datos, y editar la tabla _users por ejemplo desde PhpmyAdmin y en la columna de los emails, en el titulo de la misma email que es el nombre de la columna hacemos clic para que aparezcan de forma ordenada, de tal modo que si hay un usuario sin email o email muy sospechoso, aparecera en primer lugar, asi os evitais el tener que buscar, y proceder a BORRAR ese usuario, ya que es logico que el intruso NO incluya su email.

Una vez limpiada la tabla _users, el siguiente paso es averiguar si el codigo que nos encontramos en ese archivo php del que antes os he hablado, esta repetido en otros archivos. Lo mas seguro es que asi sea.
Un forma rapida y sencilla de darse cuenta es comparando el peso de los archivos habituales, que seguramente sea bastante superior, como por ejemplo el index.php de la raiz de joomla, con un peso superior a los 2k, habitual en joomla 2.5.

¿Que es el código base64?

Vamos a partir desde la creación de dicho código para funciones de Malware detectado por antivirus como el avast y otros.

Eval(base64_decode)

El codificado en base64 que normalmente se extiende a TODOS los archivos PHP que tengas en tu servidor.

Base 64 es un sistema de numeración posicional que usa 64 como base. Es la mayor potencia de dos que puede ser representada usando únicamente los caracteres imprimibles de ASCII. Esto ha propiciado su uso para codificación de correos electrónicos, PGP y otras aplicaciones. Todas las variantes famosas que se conocen con el nombre de Base64 usan el rango de caracteres A-Z, a-z y 0-9 en este orden para los primeros 62 dígitos, pero los símbolos escogidos para los últimos dos dígitos varían considerablemente de unas a otras. Otros métodos de codificación como UUEncode y las últimas versiones de binhex usan un conjunto diferente de 64 caracteres para representar 6 dígitos binarios, pero éstos nunca son llamados Base64. Tambien empleados para practicas de Malware, enviando nuestra web a otras direcciones desde los resultados de busqueda de cualquier buscador. Información completa en la WIKIPEDIA

Para saber que es lo que se esconde dentro de esa linea de codigo, podemos ir a la web Motobit y marcar la opción: "decode the data from a Base64 string (base64 decoding)" y pulsar en el botón "convert the source data".
Obtendremos el codigo que nos esta haciendo la puñeta, redireccionando nuestra web.

¿Como eliminar los archivos php infectados?

Este paso, hasta no hace mucho era muy tedioso y largo de ejecutar y gracias a espacios web de gente como Usher web con su blogger Crear paginas web nos han hecho la vida más fácil . Hoy se han creado scripts php que permiten hacer una copia de los archivos infectados y crear el archivo original, limpio para volver a seguir trabajando con normalidad.

Descargar Archivos limpieza inyección código Base64

Un vez descargados, descomprimimos y subimos por FTP a la raiz de nuestra(s) web(s) los dos archivos.
Lo siguiente es ejecutar el archivo llamado search_and_replace.php, realizara una exploración recursiva de TODOS los directorios y subdirectorios buscando archivos con extensión PHP, HTML o HTM, para una vez terminada, mostrar en nuetra pantalla el listado completo de los archivos revisados marcando los infectados en rojo y los limpios en verde, creando archivos duplicados de los originales con un nombre diferenciado añadiéndole la extensión "_hackedcopy", creando de nuevo el original, limpio del código inyectado.

Para terminar el trabajo de limpieza, ejecutaremos el archivo remove_copies.php que eliminara los duplicados con el código inyectado, dejando nuestro sistema libre de código malcioso y volviendo a apuntar a nuestra web desde cualquier resultado de busqueda, obtenido desde Google o cualquier Motor de busqueda.

Teniendo estos archivos en la raiz de nuestro servidor, si tenemos unos cuantos sub dominios, no es aconsejable ejecutar. Si son demasiados los archivos infectados, se saltara unos cuantos, los cuales impediran el funcionamiento normal de nuestra(s) web(s), por lo que es aconsejable no ejecutar desde la raiz de nuestro hosting, si tenemos mas de tres o cuatro webs en el mismo, si no desde los directorios subiendo los dos archivos. Es un poco mas pesado, pero efectivo.

¿Como averiguar cual es el archivo que nos ha infectado?

Bueno, aqui hay muchas variantes. En la mayoria de los casos, la infección se produce al instalar una extension que nos hemos bajado de alguna web de descargas, que todos conocemos y hemos instalado en nuestro sistema. A parte de ser una practica desaconsejable por las consecuencias finales, al margen de que comparta o no esa activadad, la cual hace ya tiempo que no practico (esto se lo pueden creer o no, no tengo forma de demostrarlo, por lo que cada uno piense lo que quiera), por el respeto al trabajo de terceros que ayudan al crecimiento del CMS Joomla!, sea o no de licencia GPL derivado de la licencia GNU.

Los archivos que se instalan e infectan nuesto sistema suelen tener un nombre disfrazado como por ejemplo style.css.php y se suelen alojar entre archivos con nombres parecidos para no ser detectados facilmente de forma visual.

El cógido en base64 que infecta archivos puede estar delimitado por comillas simples ('), o por comillas dobles. Si ese es vuestro caso, hay que modificar la línea 86 del script de búsqueda y limpieza y poner esta otra expresión regular que usa comillas dobles.

"/eval\(base64_decode\(\"[A-Za-z0-9\=\/\+]+\"\)\);/"

Comenten vuestras experiencias para compartirlas con los demas y asi ayudar entre todos.

 

Consultor y Desarrollador Proyectos Web
redlo
Author: redlo
Sobre mi...
Ayudo en todo lo que puedo....y me dejan.
Otros contenidos de este Redactor

Debe registrarse para poder Comentar