Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: theghost_te en 19 Diciembre 2010, 16:41 pm



Título: ¿como detectar nuevos procesos en ejecucion?
Publicado por: theghost_te en 19 Diciembre 2010, 16:41 pm
se podrá de alguna manera hacer que nuestro prog. se entere cada vez que un nuevo proceso se ejecute?


Título: Re: ¿como detectar nuevos procesos en ejecucion?
Publicado por: Littlehorse en 19 Diciembre 2010, 21:05 pm
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.





Título: Re: ¿como detectar nuevos procesos en ejecucion?
Publicado por: theghost_te en 19 Diciembre 2010, 23:47 pm
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


Título: Re: ¿como detectar nuevos procesos en ejecucion?
Publicado por: Eternal Idol en 20 Diciembre 2010, 01:17 am
Primer resultado de Google:
http://undocumented.ntinternals.net/UserMode/Undocumented%20Functions/NT%20Objects/Section/NtCreateSection.html

Segundo:
http://msdn.microsoft.com/en-us/library/ff556473%28VS.85%29.aspx

Y cuarto ya que estamos:
http://www.codeproject.com/KB/system/soviet_protector.aspx

Aunque si estamos en modo Kernel lo ideal es usar callbacks como por ejemplo PsSetCreateProcessNotifyRoutine.


Título: Re: ¿como detectar nuevos procesos en ejecucion?
Publicado por: theghost_te en 20 Diciembre 2010, 01:24 am
thanks eternal idol ahora me pongo a trabajar.


Título: Re: ¿como detectar nuevos procesos en ejecucion?
Publicado por: Littlehorse en 20 Diciembre 2010, 09:08 am
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.

Citar
CreationStatus

 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.


Título: Re: ¿como detectar nuevos procesos en ejecucion?
Publicado por: Eternal Idol en 20 Diciembre 2010, 09:43 am
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.


Título: Re: ¿como detectar nuevos procesos en ejecucion?
Publicado por: Littlehorse en 21 Diciembre 2010, 02:55 am
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.






Título: Re: ¿como detectar nuevos procesos en ejecucion?
Publicado por: Karman en 23 Diciembre 2010, 05:18 am
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