Hace ya algunas semanas que estamos observando que determinados sitios
web han sido comprometidos y los
atacantes han dejado una puerta trasera
para seguir ejecutando código en el servidor. Sobre el caso que vamos a
explicar ya existen varios artículos donde destacamos el de
securi.net y el de
spiderlabs los cuales ya estaban hablando de este asunto este mes de Julio.
Resumiendo la técnica, los
atacantes inyectan código en ficheros php
para leer una imagen mediante la función exif_read_data() y ejecutar
código de dentro de la imagen mediante un truco que permite la función
preg_replace(). Este código que se ejecuta inyectado en la imagen,
ofrece la posibilidad de ejecutar código php que venga en una petición
POST en una variable de nombre zz1 cuando se invoque el php afectado.
Para que quede más claro vamos a ver la técnica con un ejemplo sencillo.
Lo primero que hacemos es crear un fichero de nombre index.php que
vamos a colocar en nuestro servidor web junto a la imagen.

Las líneas en rojo serían las que inyectaría el atacante en cualquier
fichero php. Y la imagen backdoor.jpg sería la subida por el atacante.
Como muy bien explican en los artículos si analizamos la imagen, veremos
que en la cabecera tendremos algo como:

Donde el código que se ejecutará realmente después de aplicar la función base64_decode() será:

Como ya hemos dicho antes en el resumen, se ejecutará lo que llegue en
la variable "zz1” en una petición POST. Continuando con nuestro ejemplo,
la petición que lanzaría el atacante para aprovechar el código
inyectado y la imagen con el backdoor, sería algo como:
Este ejemplo sencillo, hará que se ejecute la función “phpinfo();” en el
servidor y nos devuelva la información. Con esto queda demostrado que
podemos ejecutar código php en el servidor.
Una vez visto cómo funciona debemos plantearnos diferentes opciones para
detectar esta amenaza o similares. Para este caso concreto podrían
valernos:
- Las funciones que se utilizan en la imagen son “base64_decode” y
“eval”, así que una posible vía de detección sería detectar estas dos
funciones en ficheros de tipo imagen. Esto puede detectarse tanto en el
tráfico de red como de manera local en el servidor buscando estas dos
funciones en ficheros de tipo imagen.
- Detectar hacia nuestros servidores web peticiones POST a un fichero
php con la variable zz1 fijada. Esto indicará que nuestro servidor web
podría estar comprometido.
- Y por último revisar el código php de nuestras aplicaciones en busca de las funciones exif_read_data() y preg_replace()
Vistas diferentes aproximaciones para detectar esta amenaza, comentaros
que nosotros hemos detectado usuarios que durante una navegación normal,
han descargado imágenes que contenían el backdoor. Este hecho por si
solo no compromete al usuario, aunque debe alertarnos, ya que si
contiene este backdoor podría tener también algún Exploit Pack que puede
intentar atacar a nuestros usuarios. Un ejemplo de la detección que
hemos visto ha sido:
Al detectar esto, se ha procedido a notificarlo a los sitios web para que puedan desinfectar sus servidores de esta amenaza.
Fuente:
SecurityArtWork