TL;DR:
Fue una 2014-oct-15 vulnerabilidad altamente crítica del núcleo de drupal que reparé demasiado tarde y en el momento me perdí la gravedad del problema y no realicé las comprobaciones adecuadas para evaluar si el servidor no se había comprometido. El hack se propagó desde los archivos de temas copiados de la copia de seguridad del servidor fuera de servicio en lugar de descargarse recientemente de la sección de temas del sitio de Drupal. Llegué a esta conclusión revisando las bases de datos, el servidor web y los registros del sistema, comparando las bases de datos y las copias de seguridad de drupal, leyendo el núcleo de drupal y los boletines de asesoramiento de seguridad de extensiones, y analizando el RAT gracias a los consejos proporcionados por texacre.
Está bien, me avergüenza admitirlo, pero ahora parece claro lo que sucedió.
Como suele suceder con esto, no fue un exploit de 0 días sino una actualización crítica que se aplicó demasiado tarde:
Estaba ejecutando otro servidor Drupal que estaba usando para probar mis proyectos en libertad hasta el pasado diciembre.
Lo mantenía actualizado con controles diarios cada vez que ingresaba, pero en noviembre estaba demasiado ocupado en el trabajo y me perdí una actualización muy importante: enlace
Solo 7 horas después del anuncio, el equipo de Drupal advirtió a los usuarios que ya existían vulnerabilidades de escalamiento de privilegios que permitían controlar cualquier servidor sin parches que ejecutara Drupal 7 o 8.
De alguna manera, esta advertencia no me llegó, y 11 días después vi el mensaje típico "hay una actualización disponible", y se actualizó sin siquiera leer de qué se trataba la actualización. Dado que ya fui pirateado, probablemente no sea una coincidencia que no se me haya mostrado una gran señal de advertencia que me diga qué tan importante fue esta actualización (o tal vez el servicio de actualización no sea un mecanismo lo suficientemente bueno para decirle qué hacer cuando estamos actualizando un sistema que podría haber sido comprometido ...)
De todos modos, ni siquiera lo pensé más, ya que un par de semanas más tarde decidí actualizar mi plan de EC2, hice una copia de seguridad de esta instancia y la desactivé para reemplazarla por una nueva.
Ahora avancé rápidamente hasta hace dos meses cuando configuré este nuevo servidor:
Comencé de nuevo (el nuevo núcleo de Drupal y todo), pero solté los archivos de tema del anterior, en lugar de molestarme en descargar el tema de nuevo. La primera auditoría de rutina que realicé en este servidor desistió de las pistas para descubrir el código RAT que me llevó a publicar esta pregunta en primer lugar.
Y esa es la historia sobre cómo configuré y ejecuté durante dos meses un servidor Drupal pirateado para el placer de algunos spammers (de los registros parece ser el principal objetivo del ataque, aunque no se enviaron correos electrónicos no deseados porque La política de grupo de seguridad de AWS que siempre configuré para las instancias que ejecuté lo impedía).
Entonces, sea un recordatorio para todos los que deben encontrar y suscribirse al boletín de avisos de seguridad de su CMS / framework / distro o cualquier otra tecnología que estén usando en un servidor, especialmente una de acceso público.
(Por cierto, lo que soy, aunque como hay más de otros 30 canales RSS, me perdí totalmente este aviso hasta que fue demasiado tarde)
Así que supongo que las lecciones para mí aquí son:
- No es suficiente iniciar sesión y buscar actualizaciones: el CMS debe estar configurado para enviarle un correo electrónico a su cuenta principal cuando haya una crítica (configuré una cuenta secundaria para eso y no configuré una filtre para reenviar automáticamente esos mensajes a mi cuenta principal, que habría tomado 5 minutos adicionales y me habría salvado de todos estos problemas)
- Para estar más organizado con mi fuente RSS y expeditivo en mis actualizaciones.
- Para verificar siempre las intrusiones después de anunciar vulnerabilidades críticas
- Para asumir siempre que el sistema está comprometido si las vulnerabilidades están en libertad antes de parchear
- Fresco significa nuevo: ¡no sueltes los archivos de temas de la copia de seguridad de la instancia anterior y llámalos de nuevo!