Search
Close this search box.

PyTorch: kit de herramientas de aprendizaje automático desarrollado desde Navidad hasta Año Nuevo

PyTorch es uno de los conjuntos de herramientas de aprendizaje automático más populares y ampliamente utilizados que existen.

(No vamos a centrarnos en su ubicación en la tabla de clasificación de inteligencia artificial; como ocurre con muchas herramientas de código abierto ampliamente utilizadas en un campo competitivo, la respuesta parece depender de a quién le pregunte y qué conjunto de herramientas utilice). ellos mismos.)

Originalmente desarrollado y lanzado como un proyecto de código abierto por Facebook, ahora Meta, el software fue entregado a la Fundación Linux a fines de 2022, que ahora lo ejecuta bajo la égida de la Fundación PyTorch.

Desafortunadamente, el proyecto se vio comprometido por medio de un ataque a la cadena de suministro durante la temporada navideña a fines de 2022, entre el día de Navidad [2022-12-25] y el día anterior a la víspera de Año Nuevo [2022-12-30].

Los atacantes crearon malévolamente un paquete de Python llamado torchtritonPyPI, el popular repositorio de Python Package Index.

El nombre torchtritonse eligió para que coincidiera con el nombre de un paquete en el propio sistema PyTorch, lo que lleva a una situación peligrosa explicada por el equipo de PyTorch (nuestro énfasis) de la siguiente manera:

[Un] paquete de dependencia malicioso ( torchtriton) […] se cargó en el repositorio de código del Índice de paquetes de Python (PyPI) con el mismo nombre de paquete que el que enviamos en el índice de paquetes nocturnos de PyTorch. Dado que el índice PyPI tiene prioridad, este paquete malicioso se estaba instalando en lugar de la versión de nuestro repositorio oficial . Este diseño permite que alguien registre un paquete con el mismo nombre que uno que existe en un índice de terceros e pipinstalará su versión de manera predeterminada.

El programa pip, por cierto, solía ser conocido como pyinstall, y aparentemente es una broma recursiva que es la abreviatura de pip installs packages. A pesar de su nombre original, no es para instalar Python en sí mismo: es la forma estándar para que los usuarios de Python administren bibliotecas de software y aplicaciones escritas en Python, como PyTorch y muchas otras herramientas populares.

Pwned por un truco de la cadena de suministro

Cualquier persona lo suficientemente desafortunada como para instalar la versión pwned de PyTorch durante el período de peligro, casi con certeza terminó con un malware de robo de datos implantado en su computadora.

Según el breve pero útil análisis del malware realizado por PyTorch , los atacantes robaron algunos, la mayoría o la totalidad de los siguientes datos significativos de los sistemas infectados:

  • Información del sistema, incluido el nombre de host, el nombre de usuario, los usuarios conocidos en el sistema y el contenido de todas las variables de entorno del sistema. Las variables de entorno son una forma de proporcionar datos de entrada solo de memoria a los que los programas pueden acceder cuando se inician, y a menudo incluyen datos que no se deben guardar en el disco, como claves criptográficas y tokens de autenticación que dan acceso a servicios basados en la nube. La lista de usuarios conocidos se extrae de /etc/passwd, que, afortunadamente, en realidad no contiene contraseñas ni hash de contraseñas.
  • Su configuración local de Git. Esto es robado de $HOME/.gitconfig, y generalmente contiene información útil sobre la configuración personal de cualquier persona que use el popular sistema de administración de código fuente Git.
  • Tus claves SSH. Estos son robados del directorio $HOME/.ssh. Las claves SSH suelen incluir las claves privadas utilizadas para conectarse de forma segura a través de SSH (shell seguro) o mediante SCP (copia segura) a otros servidores en sus propias redes o en la nube. Muchos desarrolladores mantienen al menos algunas de sus claves privadas sin cifrar, de modo que los scripts y las herramientas de software que utilizan puedan conectarse automáticamente a sistemas remotos sin detenerse para solicitar una contraseña o una clave de seguridad de hardware cada vez.
  • Los primeros 1000 otros archivos en su directorio de inicio tienen menos de 100 kilobytes de tamaño. La descripción del malware PyTorch no dice cómo se calcula la «primera lista de 1000 archivos». El contenido y orden de las listas de archivos depende de si la lista está ordenada alfabéticamente; si los subdirectorios se visitan antes, durante o después de procesar los archivos en cualquier directorio; si se incluyen archivos ocultos; y si se usa alguna aleatoriedad en el código que recorre los directorios. Probablemente debería asumir que cualquier archivo por debajo del umbral de tamaño podría ser el que termine siendo robado.

En este punto, mencionaremos las buenas noticias: solo aquellos que obtuvieron la llamada versión «nocturna» o experimental del software estaban en riesgo . (El nombre «nightly» proviene del hecho de que es la versión más reciente, que generalmente se crea automáticamente al final de cada día laboral).

La mayoría de los usuarios de PyTorch probablemente se adherirán a la llamada versión «estable», que no se vio afectada por este ataque .

Además, según el informe de PyTorch, parece que el archivo ejecutable del malware Triton se dirigió específicamente a entornos Linux de 64 bits .

Por lo tanto, asumimos que este programa malicioso solo se ejecutaría en computadoras con Windows si se instalara el Subsistema de Windows para Linux (WSL).

No olvide, sin embargo, que las personas con más probabilidades de instalar «nightlies» regulares incluyen desarrolladores de PyTorch en sí o de aplicaciones que lo usan, tal vez incluidos sus propios desarrolladores internos, que pueden tener acceso basado en clave privada a compilación corporativa. , servidores de prueba y producción.

Robo de datos DNS

Curiosamente, el malware Triton no extrae sus datos (el término de la jerga militarista que a la industria de la ciberseguridad le gusta usar en lugar de robar o copiar ilegalmente ) mediante HTTP, HTTPS, SSH o cualquier otro protocolo de alto nivel.

En cambio, comprime, codifica y codifica en texto los datos que quiere robar en una secuencia de lo que parecen «nombres de servidor» que pertenecen a un nombre de dominio controlado por los delincuentes.

Al realizar una secuencia de búsquedas de DNS que contienen datos cuidadosamente construidos que podrían ser una serie de nombres de servidores legales, pero no lo son, los delincuentes pueden escabullirse de los datos robados sin depender de los protocolos tradicionales que generalmente se usan para cargar archivos y otros datos.

Este es el mismo tipo de truco que utilizaron los piratas informáticos de Log4Shell a fines de 2021, quienes filtraron claves de cifrado al realizar búsquedas de DNS para «servidores» con «nombres» que resultaron ser el valor de su clave de acceso secreta de AWS, saqueada de una variable de entorno en memoria.

Entonces, lo que parecía una búsqueda DNS inocente, aunque sin sentido, para un «servidor» S3CR3TPA55W0RD.DODGY.EXAMPLEfiltraría silenciosamente su clave de acceso bajo la apariencia de una búsqueda simple que dirigía al servidor DNS oficial enumerado para el DODGY.EXAMPLE dominio.

Si los delincuentes son dueños del dominio DODGY.EXAMPLE, pueden decirle al mundo a qué servidor DNS conectarse cuando realizan esas búsquedas.

Más importante aún, incluso las redes que filtran estrictamente las conexiones de red basadas en TCP mediante HTTP, SSH y otros protocolos de intercambio de datos de alto nivel…

…a veces no filtra en absoluto las conexiones de red basadas en UDP que se utilizan para las búsquedas de DNS.

El único inconveniente para los delincuentes es que las solicitudes de DNS tienen un tamaño bastante limitado.

Los nombres de servidores individuales están limitados a 64 caracteres alfanuméricos cada uno, y muchas redes limitan los paquetes DNS individuales, incluidas todas las solicitudes adjuntas, encabezados y metadatos, a solo 512 bytes cada uno.

Suponemos que es por eso que el malware en este caso comenzó persiguiendo sus claves privadas y luego se restringió a un máximo de 1000 archivos, cada uno de menos de 100 000 bytes.

De esa forma, los delincuentes roban una gran cantidad de datos privados, en particular, incluidas las claves de acceso al servidor, sin generar una cantidad inmanejable de búsquedas de DNS.

Es posible que se detecte una cantidad inusualmente grande de búsquedas de DNS por razones operativas de rutina, incluso en ausencia de un escrutinio aplicado específicamente con fines de seguridad cibernética.

Cómo funciona el malware

La descompilación del ejecutable compilado tritonmuestra que comprime, ofusca y codifica en texto los datos que roba para convertirlos en un formato que se puede incrustar directamente en las búsquedas de DNS.

Tenga en cuenta que dijimos anteriormente que sus datos robados simplemente se ofuscan arriba, en lugar de cifrarse , porque el proceso es más o menos el siguiente:

  • Comprimir los datos usando el deflate()algoritmo. Deflate se define en RFC 1951 y se usa comúnmente en software que incluye gzip y PKZIP, así como para ahorrar ancho de banda en descargas HTTP.
  • Cifre los datos con AES-256-GCM, pero con una clave codificada y un vector de inicialización. Describimos este proceso simplemente como ofuscación , no como un cifrado adecuado , dado que cualquier persona con una copia de las solicitudes de DNS filtradas puede descifrarlas fácilmente extrayendo el material de la clave «secreta» del ejecutable del malware.
  • Codifique los datos en caracteres alfanuméricos mediante la codificación Base62. Este proceso es similar a la codificación Base64 o URL64, pero solo usa A-Za-z0-9, sin que aparezcan caracteres de puntuación en la salida codificada. Esto evita el problema de que solo se permite un símbolo de puntuación, el guión o guión, en los componentes del nombre DNS.
  • Divida los datos en fragmentos del tamaño de DNS y agregue el nombre de dominio h4ck.cfda cada solicitud. No encontrará esa cadena de nombre de dominio en el archivo ejecutable. En cambio, aparece como &z-%`-(*si cada carácter se XOR con 0x4E para descifrarlo cuando se ejecuta el programa.
-- El sufijo de dominio se descifra como se muestra aquí:

sufijo = [[&z-%`-(*]] -- cómo se almacena en el ejecutable

for i = 1,suffix:len() do -- para cada carácter en sufijo:  
   entrada local = sufijo: sub(i,i) -- obtener el carácter codificado actual  
   local enc = string.byte(inp) -- convertir a número ASCII  
   local dec = enc ~ 0x4E -- XOR con 0x4E
   local out = string.char(dec) -- convertir de nuevo a carácter
   print(inp,enc,'XOR(0x4E)->',dec,out) -- muestra lo que tenemos
fin

--Producción:

& 38 XOR(0x4E)-> 104 horas
z 122 XOR(0x4E)-> 52 4
- 45 XOR(0x4E)-> 99 c
% 37 XOR(0x4E)-> 107k
` 96 XOR(0x4E)-> 46 .
- 45 XOR(0x4E)-> 99 c
( 40 XOR(0x4E)-> 102 f
* 42 XOR(0x4E)-> 100 días

Suponiendo que los delincuentes detrás del malware sean propietarios del dominio h4ck.cfd(que se registró el 21 de diciembre de 2022, presumiblemente para su uso en este ataque), también pueden especificar qué servidor DNS usar para responder consultas para este dominio y, por lo tanto, para recopile todos los datos robados solo a través de búsquedas de DNS.

Por supuesto, su esquema de exfiltración solo de ofuscación significa, en teoría, que los datos robados también están abiertos a la vigilancia, recopilación y decodificación por parte de casi cualquier persona en su ruta de red, lo que aumenta en gran medida el riesgo de que sus claves privadas caigan en manos de múltiples actores de amenazas.

¿Qué hacer?

PyTorch ya tomó medidas para cerrar este ataque, por lo que si aún no ha sido atacado, es casi seguro que no lo será ahora, porque el torchtritonpaquete malicioso en PyPI ha sido reemplazado por un paquete vacío deliberadamente «falso» de el mismo nombre.

Esto significa que cualquier persona, o cualquier software, que intentara instalar torchtritondesde PyPI después de 2022-12-30T08:38:06Z, ya sea por accidente o por diseño, no recibiría el malware.

El paquete PyPI falso después de la intervención de PyTorch.

PyTorch ha publicado una lista útil de IoC, o indicadores de compromiso , que puede buscar en su red.

Recuerde, como mencionamos anteriormente, que incluso si casi todos sus usuarios se adhieren a la versión «estable», que no se vio afectada por este ataque, es posible que tenga desarrolladores o entusiastas que experimenten con «nightlies», incluso si usan la versión estable. liberar también.

Según PyTorch:

  • El malware se instala con el nombre de archivo tritonDe forma predeterminada, esperaría encontrarlo en el subdirectorio del triton/runtimedirectorio de paquetes de su sitio de Python. Sin embargo, dado que los nombres de archivo por sí solos son indicadores débiles de malware, trate la presencia de este archivo como evidencia de peligro; no trate su ausencia como un claro.
  • El malware en este ataque en particular tiene la suma SHA256 2385b29489cd9e35f92c072780f903ae2e517ed422eae67246ae50a5cc738a0eUna vez más, el malware podría volver a compilarse fácilmente para producir una suma de comprobación diferente, por lo que la ausencia de este archivo no es un signo de salud definitivo, pero puede tratar su presencia como un signo de infección.
  • Las búsquedas de DNS utilizadas para robar datos terminaron con el nombre de dominio H4CK.CFDSi tiene registros de red que registran búsquedas de DNS por nombre, puede buscar esta cadena de texto como evidencia de que se filtraron datos secretos.
  • Aparentemente, las respuestas DNS maliciosas se dirigieron a un servidor DNS llamado WHEEZY.IOPor el momento, no podemos encontrar ningún número de IP asociado con ese servicio, y PyTorch no ha proporcionado ningún dato de IP que vincule el tráfico de DNS con este malware, por lo que no estamos seguros de qué utilidad tiene esta información para la búsqueda de amenazas. en este momento [2023-01-01T21:05:00Z].

Afortunadamente, suponemos que la mayoría de los usuarios de PyTorch no se habrán visto afectados por esto, ya sea porque no usan compilaciones nocturnas, o porque no trabajaron durante el período de vacaciones, o por ambas cosas.

Pero si usted es un entusiasta de PyTorch que juega con las compilaciones nocturnas y ha estado trabajando durante las vacaciones, incluso si no puede encontrar ninguna evidencia clara de que estuvo comprometido…

…sin embargo, es posible que desee considerar generar nuevos pares de claves SSH como medida de precaución y actualizar las claves públicas que ha cargado en los diversos servidores a los que accede a través de SSH.

Si sospecha que se vio comprometido, por supuesto, no posponga las actualizaciones de la clave SSH; si aún no las ha hecho, ¡hágalas ahora mismo!

Fuente:Sophos Security News

Te puede interesar...