Lo que sabemos sobre la puerta trasera xz Utils que casi infecta al mundo

Lo que sabemos sobre la puerta trasera xz Utils que casi infecta al mundo
Pantalla de advertencia de malware detectado con código binario abstracto concepto digital 3d
Agrandar / Pantalla de advertencia de malware detectado con código binario abstracto concepto digital 3d

imágenes falsas

El viernes, los investigadores revelaron el descubrimiento de una puerta trasera que fue colocada intencionalmente en xz Utils, una utilidad de compresión de datos de código abierto disponible en casi todas las instalaciones de Linux y otros sistemas operativos similares a Unix. La persona o personas detrás de este proyecto probablemente pasaron años en él. Probablemente estaban muy cerca de ver la actualización de puerta trasera fusionada con Debian y Red Hat, las dos distribuciones más grandes de Linux, cuando un desarrollador de software con vista de águila vio algo sospechoso.

“Este podría ser el ataque a la cadena de suministro mejor ejecutado que hemos visto descrito abiertamente, y es un escenario de pesadilla: malicioso, competente, autorizado en una biblioteca ampliamente utilizada”, dijo el ingeniero de software y criptografía Filippo Valsorda. dicho del esfuerzo, que estuvo terriblemente cerca de tener éxito.

Los investigadores han pasado el fin de semana reuniendo pistas. Esto es lo que sabemos hasta ahora.

¿Qué es xz Utils?

xz Utils es casi omnipresente en Linux. Proporciona compresión de datos sin pérdidas en prácticamente todos los sistemas operativos tipo Unix, incluido Linux. xz Utils proporciona funciones críticas para comprimir y descomprimir datos durante todo tipo de operaciones. xz Utils también admite el formato heredado .lzma, lo que hace que este componente sea aún más crucial.

¿Qué pasó?

Andrés Freund, un desarrollador e ingeniero que trabaja en las ofertas PostgreSQL de Microsoft, estuvo recientemente solucionando problemas de rendimiento que un sistema Debian estaba experimentando con SSH, el protocolo más utilizado para iniciar sesión remotamente en dispositivos a través de Internet. Específicamente, los inicios de sesión SSH consumían demasiados ciclos de CPU y generaban errores con valgrind, una utilidad para monitorear la memoria de la computadora.

Gracias a una combinación de pura suerte y la cuidadosa mirada de Freund, finalmente descubrió que los problemas eran el resultado de las actualizaciones que se habían realizado en xz Utils. El viernes, Freund recurrió a la Lista de seguridad de código abierto para revelar que las actualizaciones fueron el resultado de que alguien colocó intencionalmente una puerta trasera en el software de compresión.

¿Qué hace la puerta trasera?

El código malicioso agregado a las versiones 5.6.0 y 5.6.1 de xz Utils modificó la forma en que funciona el software al realizar operaciones relacionadas con la compresión o descompresión de lzma. Cuando estas funciones involucraban SSH, permitían que se ejecutara código malicioso con privilegios de root. Este código permitía a alguien en posesión de una clave de cifrado predeterminada iniciar sesión en el sistema de puerta trasera a través de SSH. A partir de ese momento, esa persona tendría el mismo nivel de control que cualquier administrador autorizado.

¿Cómo surgió esta puerta trasera?

Parecería que esta puerta trasera tardó años en desarrollarse. En 2021, alguien con el nombre de usuario JiaT575 hizo su primer compromiso conocido a un proyecto de código abierto. En retrospectiva, el cambiar al proyecto libarchive es sospechoso, porque reemplazó la función safe_fprint con una variante que durante mucho tiempo se ha reconocido como menos segura. Nadie se dio cuenta en ese momento.

Al año siguiente, JiaT575 envió un parche a la lista de correo de xz Utils y, casi de inmediato, un participante nunca antes visto llamado Jigar Kumar se unió a la discusión y argumentó que Lasse Collin, quien mantenía xz Utils desde hacía mucho tiempo, no había estado actualizando. el software con frecuencia o lo suficientemente rápido. Kumar, con el apoyo de Dennis Ens y varias otras personas que nunca habían estado presentes en la lista, presionó a Collin para que contratara a un desarrollador adicional para mantener el proyecto.

En enero de 2023, JiaT75 hizo su primer compromiso a xz Utilidades. En los meses siguientes, JiaT75, que usaba el nombre de Jia Tan, se involucró cada vez más en los asuntos de xz Utils. Por ejemplo, Tan reemplazó la información de contacto de Collins con la suya propia en oss-fuzz de Microsoft, un proyecto que escanea software de código abierto en busca de signos de malicia. Tan también solicitó que oss-fuzz deshabilitara la función ifunc durante las pruebas, un cambio que le impidió detectar los cambios maliciosos que Tan pronto haría en xz Utils.

En febrero de este año, Tan emitió confirmaciones para las versiones 5.6.0 y 5.6.1 de xz Utils. Las actualizaciones implementaron la puerta trasera. En las semanas siguientes, Tan u otros apelan a los desarrolladores de Ubuntu, Red Hat y Debian para que fusionen las actualizaciones en sus sistemas operativos. Finalmente, una de las dos actualizaciones llegó a las siguientes versiones, de acuerdo a empresa de seguridad Tenable:

¿Puedes decir más sobre lo que hace esta puerta trasera?

En pocas palabras, permite a alguien con la clave privada correcta secuestrar sshd, el archivo ejecutable responsable de realizar conexiones SSH, y desde allí ejecutar comandos maliciosos. La puerta trasera se implementa a través de un cargador de cinco etapas que utiliza una serie de técnicas simples pero inteligentes para ocultarse. También proporciona los medios para entregar nuevas cargas útiles sin que se requieran cambios importantes.

Varias personas que han realizado ingeniería inversa en las actualizaciones tienen mucho más que decir sobre la puerta trasera.

El desarrollador Sam James proporcionó esta descripción general:

Esta puerta trasera tiene varios componentes. A un nivel alto:

  • Las publicaciones ascendentes de los archivos comprimidos de lanzamiento no tienen el mismo código que tiene GitHub. Esto es común en proyectos C, por lo que los consumidores intermedios no necesitan recordar cómo ejecutar autotools y autoconf. La versión de build-to-host.m4 en los archivos tar de lanzamiento difiere enormemente de la versión anterior en GitHub.
  • También hay archivos de prueba diseñados en la carpeta tests/ dentro del repositorio de git. Estos archivos se encuentran en las siguientes confirmaciones:
  • Un script llamado por build-to-host.m4 que descomprime estos datos de prueba maliciosos y los utiliza para modificar el proceso de compilación.
  • IFUNC, un mecanismo en glibc que permite llamadas a funciones indirectas, se utiliza para realizar el enlace/redireccionamiento en tiempo de ejecución de las rutinas de autenticación de OpenSSH. IFUNC es una herramienta que normalmente se usa para cosas legítimas, pero en este caso se explota para esta ruta de ataque.

Normalmente, las publicaciones ascendentes publican tarballs que son diferentes a los generados automáticamente en GitHub. En estos archivos comprimidos modificados, se incluye una versión maliciosa de build-to-host.m4 para ejecutar un script durante el proceso de compilación.

Este script (al menos en las versiones 5.6.0 y 5.6.1) verifica varias condiciones, como la arquitectura de la máquina. Aquí hay un fragmento del script malicioso que build-to-host.m4 descomprime y una explicación de lo que hace:

if ! (echo "$build" | grep -Eq "^x86_64" > /dev/null 2>&1) && (echo "$build" | grep -Eq "linux-gnu$" > /dev/null 2>&1);then
  • Si amd64/x86_64 es el objetivo de la compilación
  • Y si el objetivo usa el nombre linux-gnu (principalmente verifica el uso de glibc)

También verifica la cadena de herramientas que se está utilizando:

if test "x$GCC" != 'xyes' > /dev/null 2>&1;then
exit 0
fi
if test "x$CC" != 'xgcc' > /dev/null 2>&1;then
exit 0
fi
LDv=$LD" -v"
if ! $LDv 2>&1 | grep -qs 'GNU ld' > /dev/null 2>&1;then
exit 0

Y si está intentando crear un paquete Debian o Red Hat:

if test -f "$srcdir/debian/rules" || test "x$RPM_ARCH" = "xx86_64";then

Por lo tanto, este ataque parece estar dirigido a sistemas AMD64 que ejecutan glibc utilizando distribuciones derivadas de Debian o Red Hat. Otros sistemas pueden ser vulnerables en este momento, pero no lo sabemos.

En una entrevista en línea, el desarrollador e ingeniero inverso HD Moore confirmó la sospecha de Sam James de que la puerta trasera apuntaba a distribuciones Debian o Red Hat.

“El ataque fue furtivo porque solo realizó los pasos finales de la puerta trasera si estabas construyendo la biblioteca en amd64 (intel x86 de 64 bits) y estabas construyendo un paquete Debian o RPM (en lugar de usarlo para una instalación local). ,” el escribio.

Parafraseando las observaciones de los investigadores que pasaron colectivamente el fin de semana analizando las actualizaciones de Malicius, continuó:

Al verificar una clave pública SSH, si la clave pública coincide con una determinada función de huella digital, el contenido de la clave se descifra utilizando una clave previamente compartida antes de que se verifique realmente la clave pública. Luego, el contenido descifrado se pasa directamente al sistema.

Si la huella digital no coincide o el contenido descifrado no coincide con un formato determinado, se recurre a la verificación de clave normal y nadie se da cuenta.

La puerta trasera es súper astuta. Utiliza una característica poco conocida de glibc para enlazar una función. Solo se activa cuando la biblioteca xz con puerta trasera se carga mediante un proceso /usr/bin/sshd en una de las distribuciones afectadas. Puede haber muchas otras puertas traseras, pero la que todo el mundo habla usa la función de dirección indirecta para agregar el gancho. La carga útil se codificó en archivos de prueba xz falsos y se ejecuta como un código shell de manera efectiva, cambiando el código de verificación de la clave SSH RSA para que una clave pública mágica (enviada durante la autenticación normal) permita al atacante obtener acceso.

Su gran plan era:

1) hacer una puerta trasera furtiva a los archivos comprimidos de lanzamiento, pero no al código fuente

2) utilizar cuentas sockpuppet para convencer a las distintas distribuciones de Linux de que extraigan la última versión y la empaqueten

3) una vez que esas distribuciones lo enviaron, podrían hacerse cargo de cualquier usuario/sistema de empresa/etc.

Análisis técnicos adicionales están disponibles en arriba Hilo Bluesky de Valsorda, investigador Kevin Beaumont y La revelación del viernes de Freund.

¿Qué más sabemos sobre Jia Tan?

Por el momento, extremadamente poco, especialmente para alguien a quien se le ha confiado la administración de un software tan ubicuo y sensible como xz Utils. Esta personalidad de desarrollador ha tocado docenas de otras piezas de software de código abierto en los últimos años. Por el momento, se desconoce si alguna vez hubo una persona del mundo real detrás de este nombre de usuario o si Jia Tan es un individuo completamente inventado.

Leave a Reply

Your email address will not be published. Required fields are marked *