¿Necesito ajustar los privilegios del token para poder llamar con éxito a CreateRemoteThread?

Estoy desarrollando una instalación de depuración para mi aplicación que me ayude a diagnosticar puntos muertos. La aplicación se ejecuta en las máquinas de mi cliente, por lo que espero una amplia gama de sistemas operativos, políticas de seguridad, etc.

La técnica que estoy usando es implementar una función en la aplicación de destino que genera seguimientos de pila para todos los subprocesos, junto con otra información de diagnóstico. Esto se escribe entonces en un archivo asignado en memoria. También estoy creando una aplicación de utilidad que se utiliza para desencadenar la creación del informe de diagnóstico y luego leerlo desde el archivo asignado en la memoria.

Debido a que se espera que la aplicación de destino esté muerta, el programa de utilidad no puede enviarle un mensaje para activar la recopilación de diagnósticos. En cambio estoy usandoCreateRemoteThread de modo que pueda estar seguro de obtener un hilo en vivo para hacer el trabajo.

Tenga en cuenta que esto es diferente de los métodos de inyección de DLL que normalmente se utilizanLoadLibrary como el hilo proc paraCreateRemoteThread. Mi proceso de subproceso es un punto de entrada en la aplicación de destino. Por lo tanto, no necesito llamarWriteProcessMemory.

He implementado esto y en mis entornos de prueba funciona bien. Según la documentación deCreateRemoteThread, Necesito un proceso de manejo con los siguientes derechos de acceso:

PROCESS_CREATE_THREAD, PROCESS_QUERY_INFORMATION, PROCESS_VM_OPERATION, PROCESS_VM_WRITEyPROCESS_VM_READ

Así, pasé esas banderas al llamarOpenProcess.

Ahora, por fin, a mi pregunta: ¿qué privilegios necesito que tenga mi token para que se realice la llamada?OpenProcess ¿para triunfar?

En mi entorno de prueba (Windows 7, UAC habilitado, usuario administrador), no he encontrado ningún problema con solo un token predeterminado. He visto varios ejemplos de código que adquiere elSE_DEBUG_NAME privilegio antes de llamarOpenProcess. Mi conjetura es que se necesita paraWriteProcessMemory Cuando hago inyección de DLL y que no necesito ese privilegio. ¿Hay escenarios en los que necesitaría ajustar los privilegios de mi token?

¡No sé exactamente nada sobre la seguridad de Windows, así que realmente apreciaría las palabras sabias de cualquiera que lo haga!

Respuestas a la pregunta(1)

Su respuesta a la pregunta