Los atacantes que apuntan a repositorios de paquetes de código abierto como PyPI (Python Package Index) han desarrollado una técnica para ocultar su código malicioso de los escáneres de seguridad, revisiones manuales y otras formas de análisis de seguridad. En un caso, los investigadores encontraron código malicioso oculto en un archivo PYC (código de bytes de Python) que se puede ejecutar directamente, a diferencia de los archivos de código fuente que son interpretados por el motor de ejecución de Python. "Este podría ser el primer ataque a la cadena de suministro que aprovecha el hecho de que los archivos de código de bytes de Python se pueden ejecutar directamente, y se produce en medio de un aumento en los envíos maliciosos al índice de paquetes de Python", dijeron investigadores de la firma de seguridad ReversingLabs. en un informe. "Si es así, esto plantea un nuevo riesgo para la cadena de suministro porque este tipo de ataque puede pasar desapercibido para la mayoría de las herramientas de seguridad, que sólo escanean archivos de código fuente Python".
La gran mayoría de los paquetes que se encuentran en repositorios públicos como npm para JavaScript, PyPI para Python y RubyGems para Ruby consisten en archivos de código fuente abierto empaquetados en archivos. Son fáciles de descomprimir y leer, y es por eso que los escáneres de seguridad de estos repositorios fueron diseñados para manejar este tipo de paquetes. Los atacantes libran una batalla constante con las empresas de seguridad para evadir la detección, y la técnica de evasión más común cuando se trata de código de texto plano es la ofuscación. Esta técnica implica el uso de características del propio lenguaje de programación, como codificación, decodificación o evaluación, para hacer que el código sea ilegible pero funcional. Por ejemplo, la codificación de código malicioso en base64 es una técnica comúnmente utilizada, pero las herramientas de seguridad pueden manejar este tipo de codificación.
Cargas útiles difíciles de detectar...
En el ecosistema PyPI, se sabe que los ciberdelincuentes detrás del malware W4SP Stealer utilizan técnicas como codificación base64, compresión LZMA y minificación (eliminando espacios y comentarios en el código para hacerlo más compacto, pero también más difícil de leer). Para ello, el grupo utiliza herramientas de código abierto de terceros como Pyminifier, Kramer o Hyperion. En una variación de los ataques W4SP, el código malicioso oculto en los archivos se movía más allá de los bordes de la pantalla de forma predeterminada, de modo que alguien que examinara manualmente el archivo de código fuente no lo vería. Sin embargo, los archivos PYC son diferentes porque no son legibles por humanos como los scripts PY de texto sin formato. Los archivos PYC se generan cuando el intérprete de Python importa o ejecuta un script de este tipo. Como este es un código ya interpretado (compilado), el intérprete de Python puede ejecutarlo directamente sin reinterpretar el script original. Esto mejora el rendimiento porque los tiempos de ejecución son más rápidos. El uso más común de estos archivos es distribuir módulos de Python.
En la mayoría de los casos de malware PyPI, el código malicioso ofuscado tiene como objetivo llegar a una URL externa y descargar el malware (generalmente un ladrón), lo que brinda otra oportunidad para que las herramientas de seguridad detecten comportamientos sospechosos. En el último incidente, un paquete llamado fshec2 contiene un archivo PYC malicioso, su carga útil completa puede ocultarse en el archivo y es mucho más difícil de detectar si la herramienta de seguridad no está diseñada para descompilarlo. "La carga de scripts como los descubiertos en el paquete fshec2 contiene una cantidad mínima de código Python y realiza una acción simple: cargar un módulo Python compilado", explican los investigadores de ReversingLabs. “Resulta ser un módulo malicioso.
Inspector, la herramienta predeterminada proporcionada por el equipo de seguridad de PyPI para analizar paquetes de PyPI, actualmente no permite escanear archivos binarios en busca de comportamiento malicioso. El código compilado del archivo .PYC tuvo que ser descompilado para poder analizar su contenido”. El paquete fshec2 encontrado por ReversingLabs mostró un comportamiento adicional que probablemente tenía como objetivo evadir la detección. Normalmente, un módulo se importa desde un script de Python mediante la directiva de importación. Sin embargo, en este caso el módulo PYC malicioso se cargó usando importlib, un paquete que implementa la funcionalidad de importación y solo se usa en casos especiales, como cuando una biblioteca importada se modifica dinámicamente durante la importación. En este caso, el PYC malicioso no ha sido modificado, por lo que no hay ninguna razón técnica para usar importlib, aparte de evitar el uso de la directiva de importación normal, probablemente para escapar de la detección.
...Y enviado como un script de Python
Una vez ejecutada en una máquina, la carga útil maliciosa fshec2 recopila información del sistema, como nombres de usuario, listados de directorios y nombres de host, y luego configura una tarea CRON de Linux o una programada. en Windows para ejecutar comandos recuperados de un servidor remoto. Estos permiten que el malware se actualice automáticamente, y los atacantes pueden proporcionar una nueva versión, así como cargas útiles adicionales en forma de scripts de Python.
Los investigadores de ReversingLabs analizaron el servidor de comando y control y encontraron configuraciones erróneas que les permitieron espiar cierta información. Por ejemplo, descubrieron que a las máquinas víctimas se les asignaba una identificación incremental y podían confirmar que el malware había sido ejecutado por varias víctimas. "La cantidad de estos errores podría llevarnos a concluir que este ataque no fue llevado a cabo por un actor respaldado por el estado o una amenaza persistente avanzada (APT)", dijeron los investigadores. “Aunque mi equipo no recopiló suficiente evidencia para probar esta hipótesis de una forma u otra, la recopilación de nombres de archivos incrementando la identificación del archivo nos permitió determinar que el ataque tuvo éxito en algunos casos. Nuestros investigadores aún no pueden decir quiénes eran los objetivos ni qué eran. Sin embargo, podemos confirmar que los desarrolladores instalaron el paquete PyPI malicioso y que los nombres de sus máquinas, nombres de usuario y listados de directorios se recopilaron en consecuencia. Algunos de los nombres de archivos encontrados en el servidor sugieren que los atacantes implementaron la funcionalidad de registro de teclas en algunas de las máquinas. "Históricamente, npm ha sido el líder desafortunado y PyPI también ha estado compitiendo para ver qué plataforma de código abierto recibe la mayor atención de los autores de malware", dijeron los investigadores. “Sin embargo, durante los últimos seis meses, ReversingLabs y otros han observado un marcado aumento en el volumen de malware publicado en PyPI. De hecho, en mayo, la creación de nuevas cuentas de usuario y proyectos en PyPI se suspendió temporalmente durante unas horas debido a un gran volumen de actividad maliciosa.
Vaya más allá del análisis de código estático
ReversingLabs informó de este último vector de ataque al equipo de seguridad de PyPI, quien eliminó el paquete y dijo que nunca antes habían visto esta técnica de ataque. Esto no excluye la posibilidad de que aparezcan otros paquetes similares en el repositorio. Para abordar estas amenazas modernas a la cadena de suministro de software, las empresas deben ir más allá de las soluciones de análisis de código estático. Deben utilizar herramientas que puedan monitorear sistemas de desarrollo sensibles para detectar la creación de procesos sospechosos, la ejecución de archivos, el acceso a URL no autorizado, los comandos de recopilación de información y el uso de funciones. fácil de abusar, como get_path o importlib.
Otras noticias que te pueden interesar