¿como detectar nuevos procesos en ejecucion?

Iniciado por theghost_te, 19 Diciembre 2010, 16:41 PM

0 Miembros y 1 Visitante están viendo este tema.

theghost_te

se podrá de alguna manera hacer que nuestro prog. se entere cada vez que un nuevo proceso se ejecute?

Littlehorse

Depende de lo que estés haciendo. Antes que edites el post me pareció leer que estabas haciendo un rootkit, por lo tanto un hook en NtCreateSection es una de las mejores formas de proceder en este caso.



An expert is a man who has made all the mistakes which can be made, in a very narrow field.

theghost_te

si, eso estoy haciendo, gracias, estoy buscando acerca de esa api y encuentro muy poca info, si tuvieras un enlace de su explicacion y uso, no importa en ingles te lo agradeceria. seguire buscando.
salu2

Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

theghost_te

thanks eternal idol ahora me pongo a trabajar.

Littlehorse

EI, me parece que es como decís siempre, es un rootkit y no tiene que estar bien hecho en términos de buenas practicas. Es decir lo del callback me parece que suma para la estabilidad porque seria la forma correcta de hacer, por ejemplo, un monitor de procesos, pero en un rootkit que quiera evitar que los procesos se ejecuten es igual de efectivo ese método?

Al principio no me di cuenta cuando leí por primera vez lo de usar PsSetCreateProcessNotifyRoutine pero después me puse a pensar que si quiere hacer esto sera mas que nada para evitar que por ejemplo, alguien ejecute un antivirus. Entonces, como haces para denegar la apertura del proceso desde ese callback? no se me ocurre la verdad una forma que funcione siempre.

Entonces vi que PsSetCreateProcessNotifyRoutineEx puede usarse directamente para denegar la creación de determinado proceso al asignarle un error a CreationStatus de PS_CREATE_NOTIFY_INFO.

CitarCreationStatus

The NTSTATUS value to return for the process-creation operation. Drivers can change this value to an error code to prevent the process from being created.

el tema es que esta existe de Vista en adelante nada mas.
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

Eternal Idol

Es probable pero no lo especifico  :silbar: Igual se puede hacer, calcula que tenes acceso a la memoria del proceso y una forma relativamente sencilla es sobreescribir el entry point.

PD. Ademas de estar disponible desde Vista SP1 en adelante no cualquier binario puede usar PsSetCreateProcessNotifyRoutineEx, tenes que usar /integritycheck al generarlo y tiene que estar firmado.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Littlehorse

Si es verdad, a lo mejor quiere monitorear para llevar un registro de los procesos y nada mas.

La dificultad mas que nada la veía por el lado de que el proceso no esta totalmente creado al momento de la llamada, entonces por eso me pareció que era mas fácil con el hook ya que podes distinguir muy fácilmente entre una operación que no interesa y el proceso que realmente queres denegar, y en el caso de hacerlo, es igual de sencillo.
Igual la parte negativa del hook es que hay que hacer bastante trabajo extra para evitar que carguen otro driver indeseado y encima mantener el sistema lo mas estable posible, pero bueno, eso es otro tema.

Otro problema mas lo del integrity check, sobre todo en x64.




An expert is a man who has made all the mistakes which can be made, in a very narrow field.

Karman

#8
en cuanto a hooks tb tenes NtCreateThread o NtOpenFile que pueden ser usados con el mismo fin, pero fuera de eso, con el tema de las notificaciones con PsSetLoadImageNotifyRoutine y PsSetCreateThreadNotifyRoutine también se pueden hacer cosas interesantes, pero (dada la fima digital de drivers de x64) dentro del modo usuario creo que con los hooks cbt (creación de ventanas etc.) se pueden bloquear algunas cosas, yo para cosas simples con CreateToolhelp32Snapshot y buscando el ejecutable he logrado corromperlos antes que terminen de cargarse... (obviamente que hay un consumo extra de procesador, pero... es en modo usuario)

S2