Depuración y DLL-Injection

1

Hola, Actualmente estoy leyendo Gray Hat Python para aprender sobre la depuración y varias técnicas interesantes para el análisis binario.

Hasta ahora he aprendido una cantidad asombrosa de cosas (solo lea sobre DLL-Injection). Dos preguntas sin embargo:

Cuando se ejecutan dos procesos con el mismo usuario (no administrativo):

  1. Puede procesar A simplemente hacer kernel32.OpenProcess, kernel32.WriteMemory en el proceso B o solo es posible para un proceso A que se ejecuta con mayores privilegios como B (es decir, mi depurador se ejecuta como administrador).

  2. ¿Por qué permitirías algo como kernel32.CreateRemoteThread ?

pregunta er4z0r 28.01.2013 - 18:22
fuente

3 respuestas

1

De la documentación de MSDN para OpenProcess

  

dwDesiredAccess [in]

The access to the process object. This access right is checked against 
the security descriptor for the process. This parameter can be
one or more of the process access rights.

If the caller has enabled the SeDebugPrivilege privilege, the 
requested access is granted regardless of the contents of the security
descriptor.

Y luego, si observa el acceso al proceso documentación de derechos verá que uno de los derechos de acceso que puede solicitar es PROCESS_VM_WRITE , que se necesita para llamar a WriteProcessMemory .

Nuevamente en la documentación de MSDN para CreateRemoteThread

  

Un uso común de esta función es inyectar un hilo en un proceso   que se está depurando para emitir un descanso. Sin embargo, este uso no es   Recomendado, porque el hilo extra es confuso para la persona.   depurando la aplicación y hay varios efectos secundarios al uso   esta técnica:

It converts single-threaded applications into multithreaded applications.
It changes the timing and memory layout of the process.
It results in a call to the entry point of each DLL in the process.
     

Otro uso común de esta función es inyectar un hilo en un   proceso para consultar montón u otra información de proceso. Esto puede causar la   mismos efectos secundarios mencionados en el párrafo anterior. También el   La aplicación puede bloquearse si el hilo intenta obtener la propiedad de   bloqueos que otro hilo está utilizando.

Aunque la documentación lo recomiende. La mayoría de las veces he visto CreateRemoteThread utilizado en depuradores u otros tipos de aplicaciones de creación de perfiles / api.

    
respondido por el jcopenha 28.01.2013 - 21:09
fuente
1

La llamada a OpenProcess requiere que el proceso actual se ejecute en el contexto de un usuario que tiene una entrada en la ACL del segundo proceso. Por lo tanto, si inicia dos procesos en el mismo contexto de usuario, ambos pueden abrir identificadores entre sí con permisos suficientes para leer y escribir en la memoria. Sin embargo, si el proceso que llama a OpenProcess se está ejecutando en el contexto de un usuario administrativo, ese proceso puede concederse a sí mismo SeDebugPrivilege , lo que omite todas las ACL de proceso, de modo que puede acceder a todos los procesos para cualquier usuario en el sistema. Una advertencia de esto es que CreateRemoteThread no funcionará a menos que el proceso de destino se ejecute en la misma sesión que el proceso de llamada.

En cuanto a la razón detrás de esto, la función CreateRemoteThread se usó originalmente para propósitos de depuración y se ha mantenido por razones heredadas. Desde entonces ha sido utilizado en una variedad de operaciones diferentes:

  • Una forma fácil de integrar funcionalidad personalizada en un producto de terceros. Una gran cantidad de software de juegos, como xfire, hace esto. Muestran su propia interfaz de usuario sobre un juego inyectando una DLL y conectando las llamadas actuales de DirectX y OpenGL.
  • Algunos mecanismos RPC bastante rudos utilizan subprocesos inyectados para invocar funciones en un proceso de terceros.
  • Los sistemas antimalware a menudo inyectan una DLL en los procesos en ejecución para evitar el impacto en el rendimiento de funciones como ReadProcessMemory , ya que en su lugar solo pueden usar lecturas de memoria directas.
  • Varias bibliotecas anti-copia (DRM) usan CreateRemoteThread para inyectarse en un objetivo para enlazar las API que podrían usarse para leer la memoria de un proceso protegido.

Entonces, si bien puede constituir un problema de seguridad menor en algunos casos, es poco probable que la API desaparezca debido a su versatilidad.

    
respondido por el Polynomial 29.01.2013 - 11:31
fuente
0

Depende del sistema operativo, pero en la mayoría de los sistemas operativos, el sistema operativo debe mantener dos procesos separados en espacios de direcciones de memoria separados cuando se ejecuta de forma independiente en el modo de usuario en la mayoría de los sistemas operativos. Eso no significa necesariamente que puede que no existan ataques que puedan sortear esta limitación, pero sería un ataque mucho más avanzado en ese momento. También puede haber varias API para permitir el acceso a otros espacios de direcciones de proceso en función de lo permitido por el sistema operativo, pero esto es todo específico del sistema operativo (y potencialmente de la configuración).

    
respondido por el AJ Henderson 28.01.2013 - 20:17
fuente

Lea otras preguntas en las etiquetas