• Autoinicios y persistencia de servers

  • Soluciona aquí tus preguntas frecuentes. Temas recomendados antes de preguntar.
Soluciona aquí tus preguntas frecuentes. Temas recomendados antes de preguntar.
 #281088  por DSR!
 27 Mar 2011, 19:45
Autoinicios y persistencia de servers


¿Que es Regedit?
El Registro de windows, Registry del sistema o REGEDIT es una base de datos que contiene información de todas las condiciones de configuración de la computadora que está funcionando en una plataforma Windows, incluyendo links de aplicaciones que deban ejecutarse al encender o reiniciar la computadora. Cada vez que encendemos la computadora o la reiniciamos, Windows toma el Registro para su configuración y ejecuta dichas aplicaciones. En cada instalación de software que hacemos, si el software lo necesita acude al Registro para configurar su ejecución automática al iniciar Windows. Los escritores de código malicioso, como virus y troyanos, no se quedan atrás y aprovechan esta facilidad, agregando entradas al Registro para asegurarse de que el código malicioso sea ejecutado en cada inicio de sesión de Windows.
[img]/imagenes/ddkp262g_34892vsdf3_b.jpeg[/img]

¿Que es un autoinicio?
Es un valor grabado en el registro de Windows que le permite saber al sistema que elementos lanzar cuando un usuario ingresa al sistema. Estos comúnmente son usados para llamar a las aplicaciones, servicios y componentes principales de Windows. Cuando un usuario inicia su sesión en el sistema tal vez no lo note, pero mientras lo hace múltiples programas se están ejecutando siendo llamados por el Registro de Windows.
Las entradas de auto-inicio más comunes son las siguientes:
\HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Windows\CurrentVersion
\HKEY_CURRENT_USER\ Software\ Microsoft\ Windows\ CurrentVersion
Estos directorios contienen de 3 a 6 carpetas que son parte de las entradas de auto-inicio del sistema:
"Run"
"RunOnce"
"RunOnce\Setup"
"RunOnceEx"
"RunServices"
"RunServicesOnce"
En cada una de estas carpetas pueden existir links hacia las aplicaciones que se ejecutarán de forma automática inmediatamente después de que Windows ha iniciado. Por lo general son archivos EXE e incluyen la ruta completa en donde se encuentran alojados.

Identificar auto-inicios del sistema
El uso de regedit debe hacerse con extremo cuidado, ya que no sólo permite ver el Registro sino que podemos efectuar cambios en él. Cualquier cambio que se haga en el Registro afectará el funcionamiento de la computadora y ésta puede no iniciar, no reiniciar o que algunas aplicaciones no puedan ejecutarse. Es recomendable que antes de hacer un cambio en el Registro, se haga un respaldo del mismo cuya recuperación permita recuperar la operación de la computadora en caso de problemas. Para ello, es importante tener un sentido de lógica, estar seguro de lo que hemos instalado en nuestra computadora y ser perspicaz. Hay que indagar sobre el porqué de la existencia de estos links en el Registro.
Una forma fácil de listarlos es usando MSCONFIG (Inicio / ejecutar / MSCONFIG)

[img]/imagenes/ddkp262g_35gkw5f9gf_b.jpeg[/img]

Otros archivos que actuan en el inicio
Windows ademas de almacenar los auto-inicios en el registro posee otros archivos que son usados por el sistema para listar los componentes que debe cargar.
Los archivos System.ini y Win.ini también son de configuración y se ejecutan al iniciar Windows. Se localizan en el directorio C:\Windows y los escritores de código malicioso les agregan entradas en las secciones "run=" o "load=", con links a sus programas maliciosos para asegurarse de que se ejecuten de forma automática sus virus o troyanos. Otro archivo donde pueden estar ocultos programas maliciosos pero que ya no es muy utilizado es el autoexec.bat. Se encuentra en C:\ y se ejecuta bajo DOS, antes de iniciar Windows. Por ello no es muy utilizado aunque sigue representando un riesgo, ya que puede contener lineas que hacen referencia a programas maliciosos.
Ademas de esto hay ejecutables que son lanzados por el sistema, estos también pueden ser blanco para auto-inicios pues se pueden modificar o inyectar código en ellos.
En la carpeta Inicio (Inicio >Programas >Inicio) se encuentran links a programas que se ejecutan inmediatamente después de que Windows inició.

Archivos de auto-inicio:
1. c:\explorer.exe
2. c:\autoexec.bat
3. c:\config.sys
6. windir\win.ini - [windows] "load"
7. windir\win.ini - [windows] "run"
8. windir\system.ini - [boot] "shell"
9. windir\system.ini - [boot] "scrnsave.exe"
Rutas del sistema que actuan con autoinicios
1. windir\Start Menu\Programs\Startup\
2. User\Startup\
3. All Users\Startup\
4. windir\system\iosubsys\
5. windir\system\vmm32\
6. windir\Tasks\

Autoinicios avanzados: ROOTKITS
Un rootkit es una herramienta que tiene como finalidad esconderse a sí misma y esconder a otros programas, procesos, archivos, directorios, llaves de registro, y puertos que permiten al intruso mantener el acceso a un sistema para remotamente comandar acciones o extraer información sensible, a menudo con fines maliciosos o destructivos. Dichas herramientas permiten al atacante tener malware persistente y difícil de borrar, ademas de poder ocultar su auto-inicio o usar elementos internos del sistema para iniciarlos.
Los rootkits se pueden clasificar en dos grupos: los que van integrados en el núcleo y los que funcionan a nivel de aplicación. Los que actúan desde el kernel añaden o modifican una parte del código de dicho núcleo para ocultar el backdoor. Normalmente este procedimiento se complementa añadiendo nuevo código al kernel, ya sea mediante un controlador (driver) o un módulo, como los módulos del kernel de Linux o los dispositivos del sistema de Windows. Estos rootkits suelen parchear las llamadas al sistema con versiones que esconden información sobre el intruso. Son los más peligrosos, ya que su detección puede ser muy complicada.

Otras rutas usadas en el Regedit para autoinicios
1. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Curr entVersion\Run\
Todos los valores en esta clave se autoejecutan.

2. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Curr entVersion\RunOnce\
Todos los valores en esta clave se autoejecutan, y luego la referencia de autoinicio se borra.

3. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Curr entVersion\RunServices\
Todos los valores en esta clave se autoejecutan como servicios.

4. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Curr entVersion\RunServicesOnce\
Todos los valores en esta clave se autoejecutan como servicios, y luego la referencia de autoinicio se borra.

5. HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Run\
Todos los valores en esta clave se autoejecutan.

6. HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\RunOnce\
Todos los valores en esta clave se autoejecutan, y luego la referencia de autoinicio se borra.

7. HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\RunOnce\Setup\
Usada por los installers. Muestra un dialogo de progreso de instalación y lanza los elementos uno por uno.

8.HKEY_USERS\.Default\Software\Microsoft\Windows\Cur rentVersion\Run\
Similar a la entrada de HKEY_CURRENT_USER.

9. HKEY_USERS\.Default\Software\Microsoft\Windows\Cur rentVersion\RunOnce\
Similar a la entrada de HKEY_CURRENT_USER.

10.HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon
El valor de "Shell" puede ser cambiado para usarlo como autoinicio. (por defecto es explorer.exe)

11. HKEY_LOCAL_MACHINE\Software\Microsoft\Active Setup\Installed Components\
Todas las subkeys funcionan, el valor "StubPath" en cada subkey enlaza al ejecutable

12. HKEY_LOCAL_MACHINE\System\CurrentControlSet\Servic es\VxD\
Todas las subkeys funcionan, el valor "StaticVXD" en cada subkey enlaza al ejecutable

13. HKEY_CURRENT_USER\Control Panel\Desktop
El valor "SCRNSAVE.EXE" puede ser reemplazado, este se lanzara cuando se active el descansador de pantalla

14. HKEY_LOCAL_MACHINE\System\CurrentControlSet\Contro l\Session Manager
El valor "BootExecute" puede ser reemplazado. Los archivos listado alli son Aplicaciones Nativas que se ejecutan antes de la carga de windows.

15. HKEY_CLASSES_ROOT\vbsfile\shell\open\command\
Se ejecuta cuando un archivo de extension .VBS file (Visual Basic Script) es abierto.

16. HKEY_CLASSES_ROOT\vbefile\shell\open\command\
Se ejecuta cuando un archivo de extension .VBE (Encoded Visual Basic Script) es abierto.

17. HKEY_CLASSES_ROOT\jsfile\shell\open\command\
Se ejecuta cuando un archivo de extension .JS file (Javascript) es abierto.

18. HKEY_CLASSES_ROOT\jsefile\shell\open\command\
Se ejecuta cuando un archivo de extension .JSE file (Encoded Javascript) es abierto.

19. HKEY_CLASSES_ROOT\wshfile\shell\open\command\
Se ejecuta cuando un archivo de extension .WSH file (Windows Scripting Host) es abierto.

20. HKEY_CLASSES_ROOT\wsffile\shell\open\command\
Se ejecuta cuando un archivo de extension .WSF file (Windows Scripting File) es abierto.

21. HKEY_CLASSES_ROOT\exefile\shell\open\command\
Se ejecuta cuando un archivo de extension .EXE file (Executable) es abierto.

22. HKEY_CLASSES_ROOT\comfile\shell\open\command\
Se ejecuta cuando un archivo de extension .COM file (Command) es abierto.

23. HKEY_CLASSES_ROOT\batfile\shell\open\command\
Se ejecuta cuando un archivo de extension .BAT file (Batch Command) es abierto.

24. HKEY_CLASSES_ROOT\scrfile\shell\open\command\
Se ejecuta cuando un archivo de extension .SCR file (Screen Saver) es abierto.

25. HKEY_CLASSES_ROOT\piffile\shell\open\command\
Se ejecuta cuando un archivo de extension .PIF file (Portable Interchange Format) es abierto.

26. HKEY_LOCAL_MACHINE\System\CurrentControlSet\Servic es\
Los servicios alli listados son lanzados antes que el usuario inicie sesion.

27. HKEY_LOCAL_MACHINE\System\CurrentControlSet\Servic es\Winsock2\Parameters\Protocol_Catalog\Catalog_En tries\
Los Layered Service Providers se ejecutan antes que el usuario inicie sesion.

28. HKEY_LOCAL_MACHINE\System\Control\WOW\cmdline
Se ejecutan cuando una aplicacion a 16-bit Windows es abierta

29. HKEY_LOCAL_MACHINE\System\Control\WOW\wowcmdline
Se ejecutan cuando una aplicacion a 16-bit Windows es abierta

30. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
Se ejecutan cuando el usuario inica sesion

31. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Curr entVersion\ShellServiceObjectDelayLoad\
Se ejecutan cuando explorer.exe es cargado.

32. HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\run
Los valores se autoejecutan cuando el usuario inicia sesion.

33. HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\load
Los valores se autoejecutan cuando el usuario inicia sesion.

34. HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Policies\Explorer\run\
Los Subvalues son ejecutados cuando Iexplorer inicia.

35. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Curr entVersion\Policies\Explorer\run\
Los Subvalues son ejecutados cuando Iexplorer inicia.

Inyección en proceso/Libreria
Un archivo puede autoiniciarse si se le inyecta en un proceso del sistema que sea cargado al inicio de sesion o en su transcurso. Esta posibilidad brinda al atacante mantener limpio el registro de Windows y apoderarse de algun proceso o libreria del sistema para lanzar su codigo sin ser detectado tan facilmente.
Al no tener registros en el sistema el archivo comprometido en la inyección seria el lanzador del codigo que comprometeria a todo el sistema, por lo que dar con este tipo de comportamientos persistentes requiere un analisis profundo de los archivos.

Problemas comunes con Autoinicios/Inyecciones
* Si se esta en una maquina sin privilegios de administrador no sera posible escribir valores en el registro en algunas claves como LOCAL_MACHINE pues estas estan limitadas para los usuarios sin privilegios. Ademas de esto en algunos sistemas como Vista se limita aun más la edición del registro de Windows.
* Si se usan autoinicios no persistentes (que se borran o no inician de nuevo despues del primer inicio) como es el caso de Active Setup o RunOnce, si no se vuelve a reestablecer la clave ingresada el malware solo se iniciara una sola vez.
* Si se modifican valores del registro claves como es el caso de CurrentVersion\Winlogon puede haber problemas si no se llama de nuevo al elemento que fue modificado (En este caso, si no se llama de nuevo a Explorer.exe el sistema no cargara el entorno visual=
* Si se usa inyección bajo un proceso o DLL se puede correr el riesgo de colapsar el proceso que se inyecta si el ejecutable o libreria inyectados se inician multiples veces, no se inician o se genere un conflicto al abrirlos (En el caso de inyectar en SVCHOST.EXE o EXPLORER.EXE por ejemplo)
* La detección heuristica y proactiva estan enfocadas a detectar este tipo de cambios en el registro o en los archivos del sistema, por lo que se dificulta aun más añadir persistencia al servidor si dichos llamados del programa no esta debidamente protegidos.

Limpiando posibles autoinicios malignos en el registro
Una de las principales caracteristicas del malware es su persistencia y tiempo de vida despues de reiniciar la maquina. El malware se vale de entradas en el registro de Windows para iniciarse cada vez que el usuario inicie sesion en el equipo. Identificar los elementos de autoinicio y su localización en el registro ayuda para poder llegar a una solucion para desinfectar la maquina. Estas entradas pueden estar en varios secutores como Run, RunOnce, ActiveX entre otros. Herramientas como Autoruns nos permiten tener un informe completo acerca de dichas entradas y generar una solucion rapida eliminandolas.

/imagenes/bb963902.Autoruns(en-us,MSDN.10).jpg

Inyección en procesos (hook)

Un malware que use inyección sobre un proceso primero lanza a memoria un "gancho" por asi decirlo, este busca enganchar el resto del codigo dentro de una aplicación que resida en memoria (que se este ejecutando), por lo que no crea un proceso propio como tal, sino que se engancha a otro.
Por ejemplo, si inyectamos en msnmsgr.exe, nuestro server se iniciara cuando iniciemos dicho proceso y se finalizara cuando el mismo también finalice. Como ventajas esta que no se crea un proceso visible, sino que se usa otro proceso como plataforma de ejecución. Ademas de esto, podemos valernos de los permisos que le otorga el sistema y firewall a un proceso para poder establecer conexión a través del mismo (FWB++).
Todo esto sucede en memoria, pero dependiendo de la programación habrán inyectores que dropeen archivos y otros que lo hagan todo directamente en memoria.

Suponiendo la configuración de un server la siguiente:
1) Autoinicio en CurrentVersion\Run
HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\virii.exe
2) Inyección en proceso: Iexplorer.exe
----------------------------------------
Al iniciar la PC, se ejecuta virii.exe, pero el proceso (virii.exe) no se queda activo en la lista de procesos (desaparece). Lo que queda del proceso reside en memoria (hook) esperando que un proceso especifico (Iexplorer.exe) se ejecute para poder inyectar código en el. La inyección en resumen es pensada para no crear procesos sospechosos y usar los procesos actuales del sistema para lanzar código en ellos.
Cuando Iexplorer.exe se ejecute, va a venir enganchado con el código malévolo.

[img]/imagenes/ddramfil.JPG[/img]

Limpiando posibles autoinicios malignos Rootkits
Ya que los rootkits trabajan de una manera diferente al malware comun, se necesitan herramientas especializadas para detectar los hooks, modificaciones en la tabla de servicios (SSDT) y deteccion de codigos ocultos. Rootkit Unhooker LE (RkU) es una utilidad avanzada de deteccion y eliminación de rootkits, esta permite tener una vision avanzada de las tablas de servicio, stealth code, hooks en drivers, librerias, IAT/EAT, DKOH, IRP, ejecuciones en kernel y demas metodos que usan los rootkits para alojarsen en un sistema. En su modo "reporte" hace un listado completo del analisis de todos estos elementos, filtrando asi los posibles hooks sospechosos o rootkits.

[img]/imagenes/hookrk0.png[/img]