Generalidades
Lo siguiente describe cómo determinar los tipos más comunes de hackeos en tu sitio y cómo solucionarlos.
Si no te sientes cómodo arreglando tu propio sitio, puedes pedirle al (Servicio Profesional de Eliminación de Malware) de DreamHost una Reparación de tu Sitio Hackeado. Los expertos de DreamHost accederán a tu cuenta y harán las reparaciones necesarias para traer tu sitio de vuelta online rápidamente. Revisa la página Términos de Servicio para más información.
Los tipos de hackeos más comunes
El primer paso para volver a la normalidad es determinar el tipo de hackeo que afectó tu sitio. En general, casi todos los hackeos ocurren a través de tres métodos, clasificados en orden de probabilidad:
- Una vulnerabilidad CGI en el software que has subido a tu sitio web ha sido aprovechada y utilizada para escribir/ejecutar código arbitrario en el servidor.
- Tu contraseña FTP/SSH ha sido comprometida.
- Tienes permisos de directorio de escritura mundial en carpetas accesibles desde la web.
Quizás de manera contraria a la intuición, los hackeos CGI son más comunes que los hackeos de contraseñas FTP/SSH principalmente debido a la gran proliferación de software empaquetado previamente que las personas configuran y luego olvidan actualizar con frecuencia. Sin embargo, los hackeos de FTP/SSH son los más fáciles de verificar. Los ataques a carpetas de escritura mundial son posibles cuando el atacante se encuentra en la misma máquina que tu cuenta. Con permisos de escritura mundial (o=w), cualquier persona con una cuenta en la máquina de alojamiento puede colocar archivos allí.
Para correr los siguientes comandos, primero debes iniciar sesión en tu servidor a través de SSH. Revisa el siguiente artículo para más información:
Buscar hackeos de FTP/SSH
Dado que los ataques recientes de FTP/SSH son más fáciles de detectar, comienza por eliminar esta opción. Inicia sesión en tu usuario a través de SSH y ejecuta los siguientes comandos.
Te muestra tu historial de inicio de sesión del mes actual:
[server]$ last -i | grep username
Muestra tu historial de inicio de sesión del mes anterior:
[server]$ last -if /var/log/wtmp.1 | grep username
Los nombres de usuario impresos por last se truncan después de 8 caracteres, por lo que si tienes un nombre de usuario más largo, también querrás truncar el tuyo en la cadena grep.
La salida se ve como esto:
username pts/4 99.139.XXX.XXX Wed May 28 06:10 - 07:11 (01:00) username pts/5 66.33.XXX.XXX Sun May 25 09:31 - 12:14 (02:42) username ftpd30715 66.33.XXX.XXX Wed May 21 14:16 - 14:16 (00:00) username pts/2 66.33.XXX.XXX Tue May 20 13:22 - 14:18 (00:56) username pts/2 66.33.XXX.XXX Tue May 20 13:06 - 13:22 (00:15)
Puedes simplificar estos datos para imprimir solo direcciones IP y recuentos agregando pipes a unos pocos comandos simples:
[server]$ last -if /var/log/wtmp.1 | grep username | awk '{print $3}' | sort | uniq -c
La salida se ve más como esto:
4 66.33.XXX.XXX 1 99.139.XXX.XXX
Puedes encontrar cualquier método útil para determinar quién ha iniciado sesión en tu usuario de FTP/SSH.
Los registros de wtmp solo se remontan como máximo de 1 a 2 meses, por lo que si el hackeo es más antiguo que eso, DreamHost no tendrá ningún registro de él.
Si has determinado que FTP/SSH es la fuente del hackeo, deberías:
- Cambia tu contraseña. Visita el artículo Cambiar contraseña para obtener más detalles.
- Deja de usar FTP, la cual envía tu contraseña a través de Internet en texto sin formato, y luego cambia a SFTP o SSH. Puedes desactivar FTP para la cuenta en el panel de control en la misma página en la que cambiaste tu contraseña.
- Asegúrate de que haya un escaneo de virus/malware actualizado en cualquier computador en el que hayas usado la contraseña/usuario en cuestión.
Buscar por hackeos de CGI
Revisar tus registros en una fecha específica
Si es posible, comienza por tratar de determinar cuándo ocurrió el ataque. Esto a menudo se puede determinar anotando la fecha de modificación de cualquier archivo que haya sido modificado por el hacker informático. Por lo general, todos compartirán una hora de modificación común. Si se puede determinar ese tiempo, verifica los registros de ese día y hora para ver lo que se solicitó o publicó en tu sitio.
Un examen cuidadoso de tus archivos de registro a menudo revela exactamente cómo fue hackeado tu sitio. Cada solicitud y publicación en tu sitio se registra y el usuario no puede cambiar los archivos de registro, por lo que el registro del ataque se conserva siempre que el hackeo se descubra dentro de los 30 días aproximadamente que se registran en los registros.
Revisar todos tus registros
Si no se puede determinar la hora original, los archivos de registro se pueden escanear en masa, aunque es más difícil descubrir la evidencia de la intrusión. Puedes correr el siguiente comando en tu servidor web después de iniciar sesión a través de SSH:
[server]$ gunzip -c ~/logs/example.com/http/access.log.* | gawk '{a[$7]++}END{for (i in a) {print a[i]"\t"i}}' | sort -n | more
Esto devuelve un informe de todas las solicitudes a su sitio de todos los registros disponibles ordenados en orden ascendente. Dado que la mayoría de las solicitudes deberían (con suerte) ser legítimas, es más fácil comenzar mirando en la parte superior del informe — las solicitudes menos frecuentes — en busca de evidencia del hackeo:
No es raro ver muchas solicitudes que no deberían estar allí, ya que esta es la naturaleza de un sitio web, ya que es de acceso público. Estas solicitudes no indican, en sí mismas, una infracción, pero deben investigarse para ver si la solicitud reveló con éxito una vulnerabilidad.
Buscar por directorios de escritura mundial
Los directorios de escritura mundial permiten la escritura de archivos por cualquier usuario en la máquina, y estos directorios pueden escanearse en masa. Se recomienda que realices este paso siempre que sospeches de una infracción.
Incluso si estás seguro de que no cometiste ningún error de permiso, algunos proveedores de software o desarrolladores de plugins menos conscientes de la seguridad a menudo usan comandos del sistema o funciones de administración de permisos nativas del idioma para crear algunos directorios (generalmente los que se usan para el almacenamiento en caché y archivos temporales, archivos de sesión, etc.) para facilitar la instalación y administración.
Para buscar directorios con permisos de escritura mundial, usa la herramienta de búsqueda de UNIX. Corre este comando a través de SSH en el directorio web de tu dominio.
Este comando busca en todas las carpetas debajo de la carpeta en la que lo corres:
[server]$ find . -type d -perm -o=w
Si no se muestran resultados, entonces ninguna carpeta es de escritura mundial.
Arreglar los directorios de escritura mundial
Puedes realizar cambios masivos en todos los permisos de directorios de escritura mundial con la herramienta de búsqueda de UNIX. Ejecuta este comando a través de SSH:
[server]$ find . -type d -perm -o=w -print -exec chmod 770 {} \;
Cuando corres este comando en tu directorio web, sucede lo siguiente:
- Se encuentran todos los directorios que tienen permisos 777.
- Aquellos directorios con permisos 777 son cambiados a 770.
- Otros directorios no se tocan.
Siempre es mejor enumerar todos los directorios de escritura mundial y luego decidir los permisos adecuados. Algunas carpetas requieren una atención especial.