En este artículo se hablará de comandos en Linux, por lo tanto, es necesario un poco de experiencia para llevar a cabo los procesos aquí mencionados.
Primero que nada, necesitaremos acceso a tu hosting por SSH.
Segundo, hacer un Backup de todo lo que este en el aire, aunque este infectado no importa, incluyendo las bases de datos
Revisa tu Log de acceso
Una manera de encontrar virus en tu sitio es buscando en el log de acceso entradas sospechosas generadas cuando el hacker usa codigos para modificar archivos.
Aqui hay un buen ejemplo, un log de un servidor Apache, del Backdoor que el hacker esta usando para editar el archivo .htaccess
xxx.xxx.xxx.xxx – – [dd/mm/yyyy:hh:mm:ss -0700] «GET /path/footer.inc.php?act=edit&file=/home/account/public_html/.htaccess HTTP/1.1» 200 4795 «http://website/path/footer.inc.php?act=filemanager» «Mozilla/5.0…»
footer.inc.php es el inocente archivo que contiene el backdoor.
El ejemplo de arriba muestra algunas cosas obvias que buscar mas profundamente en tu Log:
- htaccess — A menos que escribas articulos sobre htaccess y la palabra esta en tu busqueda con Url Amigables, no hay rason para que htaccess aparezca en tu Log de acceso.
- act=edit action=edit del ejemplo de arriba, una posible variación.
- filemanager — Otra palabra que probablemente no deberia aparecer en tu log. Si usas editores como CKEditor o TinyMCE, que no producen lineas asi en tu log cuando los usas, o por lo menos que llamen archivos correspondientes a esos editores no uno externo como footer.inc.php.
- Variables GET y/o Post sospechosas — variables que no utilizas en tu sitio o lineas muy largas de caracteres aparentemente aleatorios (ej. base64 strings codificados).
Luego, verifica tus archivos index.php, index.html, .htaccess. Porque generalmente los script maliciosos se alojan en estos archivos porque saben que los vas a abrir. Si usas un CMS como Joomla te recomiendo revisar tu archivo framework.php y también revisar la lista de usuarios registrados, puede que encuentres algunos malintencionados.
Si usas wordpress puedes revisar las siguientes rutas, si encuentras alguno de estos archivos descargalo y revisa que es lo que contiene, muchas veces los archivos originales del sistema son modificados, por lo tanto encontrar alguno de estos archivos no significa que sea un virus:
.htaccess
/cgi/ <- busca por archivos .js – este directorio deberia estar vacio
/wp-admin/css/colors/ocean/sql.php
/wp-content/uploads/title.php
/wp-includes/default-filters.php
/wp-content/themes/[nombre de la plantilla]/footer.php
/wp-content/themes/[ nombre de la plantilla]/header.php
Para encontrar todos los archivos con un nombre especifico puedes usar el comando find de Linux
Find [ruta] [expresión de la búsqueda] [acción]
Ejemplo
Find public_html/ -iname “archivo.php” -ls
Con este comando buscara en la carpeta public_html todo lo que tenga por nombre “archivo.php” no importa si tiene mayúsculas o minúsculas te los va a listar en la consola.
Búsquedas a través del tiempo
Find /var/logs -mmin -30 -type f
En la carpeta /var/logs va a buscar todos los archivos que fueron modificados hace menos de 30 minutos
Y si quieres las carpetas que tuvieron alguna modificación usa -type d. Usar o no usar -type puede dar resultados muy diferentes así que inclúyelo.
Find ofrece varias opciones de búsqueda por tiempo, pero las principales son: -amin, -atime, -cmin, -ctime, -mmin y -mtime. “min” es para periodos en minutos y “time” para periodos de 24 horas.
Los que empiezan con “a” (access) indica el tiempo que fue accedido (leído) por última vez un archivo. Los que empiezan con “c” (change) indica el tiempo que cambio por última vez el estatus del archivo, por ejemplo, sus permisos. Los que empiezan con “m” (modify) indica el tiempo en que fue modificado (escrito) por última vez el archivo
Para buscar permisos específicos puedes usar
Find /usr/ -perm 0777 -ls
Te listara todos los archivos con permisos 777 que es muy raro así que cuidado.
Cuando encuentres algo sospechoso o que te sea de utilidad para perseguir otros archivos malintencionados (si, probablemente hay más de uno) puedes utilizar el comando grep
Grep [argumentos] [palabra] [archivo]
Un ejemplo
Grep -lri “malulo.php” etc/*
-l listar archivos con coincidencias
-r recursivo
-i no distinguir entre mayúsculas o minúsculas
Cuando queremos buscar en todos los archivos de una carpeta debemos añadir * como en el ejemplo, el cual buscara en todos los archivos de etc/. Esto puede tomar unos minutos, así que no te asustes.
Podemos usar el comando grep para buscar comandos que usualmente son utilizados por los códigos maliciosos como, por ejemplo
- passthru
- shell_exec
- system
- phpinfo
- base64_decode
- edoced_46esab
- chmod
- mkdir
- fopen
- fclose
- readfile
Puede darse el caso de que se listen muchos archivos, pero el comando grep te listara tambien los archivos del sistema que contengan esos comandos, por lo tanto no todos los archivos que te aparezcan en la lista son maliciosos, si ves alguno sospechoso, como por ejemplo, alguno que se llame index350.php descargalo y revisalo, los hackers codifican sus códigos para que no sea tan fácil encontrarlos como, por ejemplo
$w = ‘base’.(128/2).’_de’.’code’
Con grep nunca vas a encontrar eso. Pero podrías identificar algún virus usando grep de todas maneras, muchas veces no están codificados los archivos maliciosos.
Otro recurso que tenemos a nuestra disposición es https://validator.w3.org/ Que simplemente verifica nuestra página web por errores de sintaxis, pero existe la posibilidad de que el código infectado tenga algún defecto, porque no está en el lugar correcto, por ejemplo, o entre codificación y decodificación falto un carácter, etc.
La búsqueda de archivos infectados puede llevar varias horas, incluso días, así que ¡no te des por vencido! Y cuando encuentres aquel archivo que tanto odias, no lo borres, descárgalo y revísalo cuidadosamente en busca de más información, tal vez te lleve a alguno de sus amigos.
Los hackers se valen de muchos medios para entrar a nuestras páginas algunos métodos son:
SQL injection
Son cuando el atacante usa un formulario de una web o parámetros pasados por URL para obtener acceso a tu base de datos o manipularla, cuando usas consultas MySQL comunes puede resultar fácil insertar código a esas consultas para cambiar tablas, obtener información o borrar datos, puedes solucionar esto verificando tus consultas antes de ejecutarlas
Consideremos esta consulta
"SELECT * FROM table WHERE column = '" + parameter + "';"
Si el atacante modificara el parametro usado por un ‘ or ‘1’=’1 esto causaría que la consulta se viera así:
"SELECT * FROM table WHERE column = '' OR '1'='1';"
Como ‘1’ es siempre igual a ‘1’ permitirá al atacante añadir sentencias adicionales a la consulta y también serán ejecutadas
XSS
Cross site scripting es cuando el atacante intenta pasar por javascript u otro lenguaje por un formulario web para lograr ejecutar códigos maliciosos a los visitantes de tu página. Cuando crees un formulario asegúrate siempre de revisar los datos que están siendo enviados
Mensajes de error
Se cuidadoso con cuanta información das en tus mensajes de error. Por ejemplo, si tienes un formulario de login en tu sitio se cuidadoso con el leguaje que utilizas para comunicar los errores. Deberías usar mensajes genéricos como “usuario o contraseña incorrecta” no especificar cual, porque si el atacante sabrá que ya acertó con un campo y podrá concentrarse en el siguiente
Iframes ocultos y archivos infectados
El “iframe” se esconde en el código de tus páginas, y lo que hace es llamar a otra página de forma invisible (es decir, ni vos ni quien visite tu web lo notan), buscando posicionar mejor esa página escondida o bien infectar con virus o código malicioso a los visitantes.
Lo más común es que lo agreguen al código de tu página index (index.html, index.php, etc.). También ocurre, con virus como Gumblar cn, que suban un archivo y lo ubiquen en una carpeta donde sea difícil detectarlo (Gumblar cn, por ejemplo, sube un archivo llamado “image.php” dentro de la carpeta “images”).
Que hacer para evitar reinfecciones?
- Borra todos los usuarios registrados que no son personas reales, no importa cuanta seguridad tengas o captchas siempre existe la posibilidad
- Elimina el cache, o archivos temporales que pueden quedar de instalaciones anteriores o archivos en desuso, eso da a los hackers más posibilidades de encontrar una vulnerabilidad
- Cambia tus contraseñas, nunca sabes.
- Analiza el pc administrador de las paginas en busca de malware
- Si encuentras archivos infectados reemplázalos por los originales, o elimínales en caso de que no sean parte de tu sistema.
- Haz respaldos.
- Ten cuidado con los Plugins desactualizados
- Luego de estar seguro que tu sitio está limpio, asegúrate de hacer un respaldo.