elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Análisis del vídeo del hackeo al Sindicato de los Mossos de Esquadra


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Análisis y Diseño de Malware (Moderador: fary)
| | |-+  Detectar inyecciones en procesos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 Ir Abajo Respuesta Imprimir
Autor Tema: Detectar inyecciones en procesos  (Leído 7,754 veces)
Hendrix
In The Kernel Land
Colaborador
***
Desconectado Desconectado

Mensajes: 2.275



Ver Perfil WWW
Re: Detectar inyecciones en procesos
« Respuesta #10 en: 26 Abril 2010, 01:08 »

Te refieres a algo parecido a esto: https://foro.elhacker.net/seguridad/hook_detector_by_hendrix-t221586.0.html;msg1071968 ???

Lo que yo hice fue muy sencillo (lo hice con una Dll, pero se puede hacer perfectamente sin Dll).

Lo que hace es lo siguiente:

- Crea una lista de la IAT con las API's que usa dicho proceso
- Por cada API, lee de memoria virtual los primeros opcodes y los compara con los de algún salto (aunque se podría comparar los primeros X bytes de la API con los primeros X bytes reales de la misma API, si no coinciden hay Hook).
- Si hay hook, sobrescribe la memoria con los bytes reales de la API.

Para extraer los bytes reales de la API, la cargas con LoadLibrary, luego lees la memoria del proceso con ReadProcessMemory y lo reparas con WriteProcessMemory. Yo unicamente trabajé con estas API's (y las de lectura de ficheros y estructuras para leer la IAT).

Ale, te dejo la tarea de documentarte a ti, ya te e dado la idea principal, ahora te toca a ti picar código  ;)

Un Saludo  :)
En línea

"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián
biribau

Desconectado Desconectado

Mensajes: 181


Ver Perfil
Re: Detectar inyecciones en procesos
« Respuesta #11 en: 26 Abril 2010, 02:08 »

No sé porqué no caí en la cuenta hasta ahora, será que la noche me confunde y la madrugada me ilumina
Pero puedes hacerlo en python!!(no lo voy a negar, odio vb)
Sólo busca pydbg, es un debugger programático con el que jugué hace algún tiempo, y hasta posteé algo por aquí(e incluso te podría echar una mano)
Con todo lo que tiene python, hasta dissasemblers y pe-loaders puedes hacer cosas wapas con mucho menos esfuerzo(y menos esfuerzo = más tiempo para hacer más cosas), y no hay mejor excusa para aprender python.
Yo llegué a hacer*(una pijada pero bueno) un nuevo tipo de breakpoints no detectables por métodos antidebug, nada más simple que en vez de int3 colocaba
Código:
xor eax,eax
mov[eax], eax
y saltaba una excepcion de acceso invalido, hombre me costó un poco porque generaba una serie de problemas, pero eso que tu quieres se podría hacer mucho más fácil, ya te digo que yo para hacer eso tuve que entender el codigo fuente del pydbg yte puedo decir que está super claro, es la manera de saber como funciona un debugger en windows.
Concluyo: tírate a python(en el mejor sentido de la expresion xD)
python+pydbg+pefile+pdisasm(este no existe pero hay varios) = 50l3r  FTW!!!

P.D.: lo cierto es que la iluuminación me vino con la frase de hendrix "lee de la memoria virtual", y se me encendió esa bombillita, misterios del subconsciente
P.P.D.: *Perdón por el momento off-topic-batallita
P.P.P.D.: Es curioso también, que habiendo manejado esa herramienta sólo la haya utilizado para cosas... ejem... poco éticas, o que directamente sólo me beneficiaban a mí(como debugueo de mis programas), nunca pensé en una buena utilización de ella, como esta, pero es que se ajusta perfectamente
En línea

skapunky
Electronik Engineer &
CoAdmin
***
Desconectado Desconectado

Mensajes: 3.669


www.killtrojan.net


Ver Perfil WWW
Re: Detectar inyecciones en procesos
« Respuesta #12 en: 26 Abril 2010, 13:38 »

Citar
- Por cada API, lee de memoria virtual los primeros opcodes y los compara con los de algún salto (aunque se podría comparar los primeros X bytes de la API con los primeros X bytes reales de la misma API, si no coinciden hay Hook).

Eso es a lo que me referia, en mi caso leia los primeros 6 bytes.

El problema es que este método no es valido siempre ya que los rootkits también utilizan otras formas para inyectarse.
En línea

Killtrojan Syslog v1.44: ENTRAR
Hendrix
In The Kernel Land
Colaborador
***
Desconectado Desconectado

Mensajes: 2.275



Ver Perfil WWW
Re: Detectar inyecciones en procesos
« Respuesta #13 en: 26 Abril 2010, 13:53 »

Citar
- Por cada API, lee de memoria virtual los primeros opcodes y los compara con los de algún salto (aunque se podría comparar los primeros X bytes de la API con los primeros X bytes reales de la misma API, si no coinciden hay Hook).

Eso es a lo que me referia, en mi caso leia los primeros 6 bytes.

El problema es que este método no es valido siempre ya que los rootkits también utilizan otras formas para inyectarse.

En caso del API Hooking a nivel de usuario, con realizar un checksum de toda el espacio de memoria de la API sabrás si se ha modificado o no la API en cuestión (Puedes ver cuantos bytes ocupa la API debuggeandola, por ejemplo).

Un Saludo  :)
En línea

"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián
biribau

Desconectado Desconectado

Mensajes: 181


Ver Perfil
Re: Detectar inyecciones en procesos
« Respuesta #14 en: 26 Abril 2010, 15:31 »

Citar
- Por cada API, lee de memoria virtual los primeros opcodes y los compara con los de algún salto (aunque se podría comparar los primeros X bytes de la API con los primeros X bytes reales de la misma API, si no coinciden hay Hook).

Eso es a lo que me referia, en mi caso leia los primeros 6 bytes.

El problema es que este método no es valido siempre ya que los rootkits también utilizan otras formas para inyectarse.

En caso del API Hooking a nivel de usuario, con realizar un checksum de toda el espacio de memoria de la API sabrás si se ha modificado o no la API en cuestión (Puedes ver cuantos bytes ocupa la API debuggeandola, por ejemplo).

Un Saludo  :)
Y el checksum tiene que estar en una base de datos/fichero y sería una para cada version de SO(porque puede que al cargarla tu tambien este hookeada), en este caso tambien valdría buscar los bytes por un salto.
Y quizás haya tambien alguna manera de desinfectarse on-the-fly? en el mismo proceso es facil, pero desde otro proceso no se, bueno siempre se podría hookear y bypasear ReadProcessMemory, que para eso es un rootkit. Coneso tu desde tu proceso no verias ningun hook
En línea

Hendrix
In The Kernel Land
Colaborador
***
Desconectado Desconectado

Mensajes: 2.275



Ver Perfil WWW
Re: Detectar inyecciones en procesos
« Respuesta #15 en: 26 Abril 2010, 15:49 »

Y el checksum tiene que estar en una base de datos/fichero y sería una para cada version de SO(porque puede que al cargarla tu tambien este hookeada), en este caso tambien valdría buscar los bytes por un salto.
Y quizás haya tambien alguna manera de desinfectarse on-the-fly? en el mismo proceso es facil, pero desde otro proceso no se, bueno siempre se podría hookear y bypasear ReadProcessMemory, que para eso es un rootkit. Coneso tu desde tu proceso no verias ningun hook

Mi cito a mi mismo:

Citar
En caso del API Hooking a nivel de usuario

Evidentemente si ya metemos modo Kernel de por medio el metodo de detección ya se complica más.

Para lo del chechsum no hace falta una BD. con la dirección de inicio y el tamaño de la API ya nos vale. Lo que tendríamos que hacer sería cargar la Dll en donde se encuentra la API y, dentro de un buffer, guardar el contenido de la API y luego la comparamos. Si existen cambios, la podemos sobrescribir en la posición del proceso (Como si hicieramos un Copiar&Pegar de la API sobre la del proceso).


Todo eso, evidentemente, en modo usuario. Para detectar hooks desde un driver, aquí tienes un artículo que escribí en el blog oficial de elhacker.net (aquí).

Un Saludo  :)
En línea

"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián
biribau

Desconectado Desconectado

Mensajes: 181


Ver Perfil
Re: Detectar inyecciones en procesos
« Respuesta #16 en: 26 Abril 2010, 15:55 »

 :-[ yo me refería también en modo usuario
En línea

Hendrix
In The Kernel Land
Colaborador
***
Desconectado Desconectado

Mensajes: 2.275



Ver Perfil WWW
Re: Detectar inyecciones en procesos
« Respuesta #17 en: 26 Abril 2010, 15:59 »

:-[ yo me refería también en modo usuario

Pues en modo usuario, a no ser que el "Rootkit" inyecte código en tu proceso, y cargando siempre la Dll original, siempre vas a obtener la "copia" de la API correcta y lo vas a poder reparar  ;)
En línea

"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián
biribau

Desconectado Desconectado

Mensajes: 181


Ver Perfil
Re: Detectar inyecciones en procesos
« Respuesta #18 en: 26 Abril 2010, 16:08 »

a ver, igual estoy un poco espeso  ;D, pero si en cada proceso hookeas loadlibrary puedes parchear las apis en tiempo de carga, luego hookeas toda la historia de crear procesos para poder hookear loadlibrary en cada proceso nuevo que se cree.
Con esto todos los procesos del sistema tienen hookeada loadlibrary, cada libreria que se llame kernel32 pongamos, le parcheamos el hook a la funcion que queramos, luego ven la misma libreria todos, y en todos esta el hook!, luego necesitarías el checksum a priori, porque sino el checksum de la api parcheada es el mismo que el checksum de la misma api en otro proceso porque tambien se parcheo.
Esto se puede hacer todo en user mode
En línea

bizco


Desconectado Desconectado

Mensajes: 698


Ver Perfil
Re: Detectar inyecciones en procesos
« Respuesta #19 en: 26 Abril 2010, 16:32 »

Pues se lee en disco y problema solucionado.
En línea

Páginas: 1 [2] 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿como detectar nuevos procesos en ejecucion?
Programación C/C++
theghost_te 8 3,275 Último mensaje 23 Diciembre 2010, 05:18
por Karman
Detectar nuevos procesos?
Programación C/C++
APOKLIPTICO 2 632 Último mensaje 23 Noviembre 2012, 16:00
por APOKLIPTICO
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines