Foro de elhacker.net

Seguridad Informática => Análisis y Diseño de Malware => Mensaje iniciado por: lBoreal en 6 Abril 2020, 05:15 am



Título: Métodos de persistencia
Publicado por: lBoreal en 6 Abril 2020, 05:15 am
Buenas, alguna documentación sobre métodos o mecanismos de persistencia para malware? Logré desarrollar un módulo FUD pero cuando agrego la línea para editar el registro de Startup me lo detecta.

Tiene documentación? Algún mecanismo que pueda estudiar o algo similar?

agradezco la data!

Saludos


Título: Re: Métodos de persistencia
Publicado por: kub0x en 6 Abril 2020, 13:38 pm
Una idea es agregarte a la carpeta de Start Programs. Otra es hacer dll hijacking en directorios de aplicaciones muy utilizadas por el usuario y que te permitan escritura sin permisos de admin. Otra es infectar binarios legítimos para arrancar desde ahí (coges el binario lo vuelcas en memoria, mezclas con tu binario, dejas los iconos/recursos como estaban y listo).

Saludos.


Título: Re: Métodos de persistencia
Publicado por: lBoreal en 6 Abril 2020, 18:31 pm
Bien, tengo una pregunta por método mencionado:

1. Lo de startup suena muy fácil, es más fácil de detectar cierto? Imagino que deben haber miles de malwares desarrollados por noobs como yo que agreguen un registro en /Run o usen schtasks.exe (Tareas programadas).

2.
Citar
Otra es infectar binarios legítimos para arrancar desde ahí (coges el binario lo vuelcas en memoria, mezclas con tu binario, dejas los iconos/recursos como estaban y listo).

Esto lo hago con OllyDbg? Agarro mi binario, abro el otro binario y le meto el mío? Imagino que luego tengo que cambiar de alguna forma el Entry Point para que salte a la posición de memoria donde está mi programa.

3. Voy a buscar por mi cuenta, si tenes alguna documentación de dllhijacking estaría agradecido.


Título: Re: Métodos de persistencia
Publicado por: kub0x en 6 Abril 2020, 20:15 pm
Sobre la segunda opción, has de escribir el binario original como recurso embebido Después, al ejecutar el binario infectado, tendrás que cargar el binario original mediante un loader PE (runPE). Hay tropecientos en internet. Es decir binario_infectado > realizas X acciones maliciosas > cargas la imagen PE original en runtime > se ejecuta el binario original.

3. Voy a buscar por mi cuenta, si tenes alguna documentación de dllhijacking estaría agradecido.

Esta técnica es conocida por el problema del árbol de dependencias. No es algo que yo haya estudiado a fondo pero si practicado. El problema es el siguiente, el OS Windows tiene una whitelist de las DLLs conocidas, por lo tanto si incluyo por ejemplo USER32.DLL en la carpeta del binario no va a llamar a esa DLL sino la que está en system32. En cambio, si la DLL no esta whitelisteada en el registro (regedit, clave KnownDLLs creo recordar) entonces TODO DEPENDE de como se haya programado la aplicación.

Si el binario tiene LoadLibrary("xxx.dll") y esa DLL está en otro directorio por ejemplo system32 si insterto una dll que se llame xxx.dll en el directorio del binario primero cargará la del WorkingDirectory, es decir la maliciosa. En cambio si hace LoadLibrary("C:\\Windows\\System32\\xxx.dll") va directamente al directorio system32 y escoge la .dll original.

Espero se entienda. Saludos.


Título: Re: Métodos de persistencia
Publicado por: lBoreal en 7 Abril 2020, 05:09 am
Sobre la segunda opción, has de escribir el binario original como recurso embebido Después, al ejecutar el binario infectado, tendrás que cargar el binario original mediante un loader PE (runPE). Hay tropecientos en internet. Es decir binario_infectado > realizas X acciones maliciosas > cargas la imagen PE original en runtime > se ejecuta el binario original.

Esta técnica es conocida por el problema del árbol de dependencias. No es algo que yo haya estudiado a fondo pero si practicado. El problema es el siguiente, el OS Windows tiene una whitelist de las DLLs conocidas, por lo tanto si incluyo por ejemplo USER32.DLL en la carpeta del binario no va a llamar a esa DLL sino la que está en system32. En cambio, si la DLL no esta whitelisteada en el registro (regedit, clave KnownDLLs creo recordar) entonces TODO DEPENDE de como se haya programado la aplicación.

Si el binario tiene LoadLibrary("xxx.dll") y esa DLL está en otro directorio por ejemplo system32 si insterto una dll que se llame xxx.dll en el directorio del binario primero cargará la del WorkingDirectory, es decir la maliciosa. En cambio si hace LoadLibrary("C:\\Windows\\System32\\xxx.dll") va directamente al directorio system32 y escoge la .dll original.

Espero se entienda. Saludos.

Se entendió perfectamente y me iluminaste un poco más.

Muchas gracias!