Comprueba si tu sistema y Dockers están a salvo del Malware de XZ Utils
Esta semana se ha descubierto uno de los Malware Backdoor más dañinos de los últimos tiempos. Ya no solamente por lo que supone, sino sobretodo por el amplio abanico de servidores y servicios que lo llevan incorporado.
¿Qué es XZ Utils (LZMA Utils)?
Empecemos por el principio. XZ Utils es una de las herramientas más utilizadas en la actualidad, la cual permite realizar una compresión de archivos sin pérdida, estando presente en prácticamente todas las distribuciones de Linux. Además también podemos encontrar XZ Utils en sistemas Mac y Windows.
El código malicioso se ha localizado en las versiones 5.6.0 y 5.6.1 de las librerías y parece haber sido diseñado para interferir con la autenticación en sshd a través de systemd.
Debido a esto, los atacantes pueden autenticarse vía SSH y tomar el control absoluto del sistema permitiéndoles por ejemplo lanzar un Shell remoto y con ello la posibilidad de ejecutar código malicioso en la máquina infectada. Todo esto en remoto.
🤯 The level of sophistication of the XZ attack is very impressive! I tried to make sense of the analysis in a single page (which was quite complicated)!
— Thomas Roccia 🤘 (@fr0gger_) March 31, 2024
I hope it helps to make sense of the information out there. Please treat the information "as is" while the analysis… pic.twitter.com/N11klcymeP
El CVE generado, es el CVE-2024-3094.
¿Cómo ha podido pasar?
Pues bien, la historia de todo esto es realmente curiosa.
The xz backdoor was initially caught by a software engineer at Microsoft. He noticed 500ms lag and thought something was suspicious.
— vx-underground (@vxunderground) March 30, 2024
This is the Silver Back Gorilla of nerds. The internet final boss. pic.twitter.com/6IyJQ2tpMm
Resumiendo: El usuario JiaT75, se ganó la confianza de Lasse Collin, creador de XZ Utils durante dos años hasta que consiguió inyectar el código malicioso en la librería. El usuario empezó a participar en el proyecto en abril de 2022.
Ahora, Andres Freund, ingeniero de la compañía Microsoft se ha percatado de que algo pasaba con estas librerías ya que detectó un pico de 500ms de lag (algo inapreciable para la mayoría de nosotros) y empezó a investigar a fondo. A raíz de esto, es cuando se ha descubierto todo el pastel.
¿Cómo compruebo si tengo en mi sistema la versión afectada?
Hay varias formas de comprobar la versión de XZ Utils que tenemos en nuestro sistema. Si puedes conectarte a tu NAS / Servidor en local y con teclado y ratón los pasos a seguir serán los siguientes:
sudo apt-get install binutils
for xz_p in $(type -a xz | awk '{print $NF}' | uniq); do strings "$xz_p" | grep "xz (XZ Utils)" || echo "No match found for $xz_p"; done
En el caso por ejemplo de un NAS Synology que no dispone de puerto HDMI, es imposible comprobarlo de esta manera, por lo que el chequeo se tiene que hacer mediante SSH.
Si, suena ilógico, ejecutar un binario posiblemente infectado para comprobar si está infectado. Pero no hay otra. Mejor pillarlo a tiempo antes de que sea demasiado tarde.
Tendremos que conectarnos al servidor mediante SSH y ejecutar el siguiente comando: xz --version
.
Si nuestro sistema tuviera una de las dos versiones afectadas por el Malware, tenemos dos opciones:
- Hacer un Downgrade a una versión anterior.
- Deshabilitar el acceso mediante SSH de forma inmediata.
¿Cómo compruebo si tengo algún Docker con la versión afectada?
- Para ello tendremos que conectarnos vía SSH a nuestro NAS o servidor.
- Nos vamos a la ruta donde queramos ejecutar el Script, en mi caso lo haré en
/volume1/docker/scripts
. - Ejecutamos el siguiente comando:
nano script.sh
- Dentro del archivo en cuestión pegaremos el siguiente código:
for containerId in $(docker ps -q); do echo $containerId && docker exec -it $containerId sh -c 'xz --version'; done
- Guardamos el archivo y cambiaremos los permisos para poder ejecutarlo correctamente con:
chmod +x script.sh
. - Para finalizar, ejecutamos el script con el siguiente comando:
sudo ./script.sh
Esto nos mostrará un Output de todos los Dockers que tenemos corriendo en nuestro NAS / Server en el cual podremos comprobar primero si utiliza XZ Utils, de lo contrario devolverá "not found", y en caso de que lo incluya, nos mostrará que versión está utilizando.
Tengo un Docker afectado, ¿Qué puedo hacer?
Si descubrimos que alguno de nuestros Dockers contiene una de las dos versiones afectadas, tenemos cuatro opciones:
- Podemos hacer un Downgrade a un versión anterior entrando al terminal del Docker.
- Parar el contenedor y comunicarnos con el Desarrollador del Docker para que haga él un downgrade y lance una actualización de la imagen del contenedor.
- Utilizar otra imagen de Docker que ejecute el mismo servicio y que no tenga en su interior las versiones afectadas de XZ Utils.
- Seguir "sin preocuparse". Una de las ventajas de utilizar Docker es el hecho de que -en principio- en caso de vulnerabilidad, nuestro sistema permanecerá intacto. Aún así, no creo que nos haga gracia saber que tenemos un servicio vulnerado corriendo en nuestro Sistema.