miércoles, 22 de octubre de 2008

Herramientas para el listado de procesos

Ahora que ya conocemos un poco más el funcionamiento interno de los procesos en Windows y como guía durante un análisis en caliente de un sistema, acotaremos los datos más importantes a obtener para cada uno de ellos.

  • PID, o identificador unívoco para el proceso y que maneja el kernel de Windows.

  • Ruta absoluta así como el nombre del fichero ejecutable cuya ejecución ha derivado en un proceso.

  • Comando exacto, incluyendo los flags en el caso de haberlos, empleado para lanzar el ejecutable y, por ende, el proceso asociado.

  • Tiempo que lleva el proceso ejecutándose, lo que nos ayudará a determinar si coincide con el arranque del sistema.

  • Contexto de seguridad, o lo que es lo mismo, cuenta de usuario bajo la que se ejecuta el proceso.

  • Los módulos y/o DLLs cargadas por el proceso, así como los manejadores (o handles) pertenecientes al mismo (ficheros, claves del registro, etc).

  • Contenido de la memoria del sistema asignada al proceso.
La mayoría de los datos anteriores podrán obtenerse utilizando herramientas nativas de Windows como son el Administrador de tareas o el comando tasklist. Sin embargo otras de las características mencionadas solo podrán conocerse con herramientas de terceros, además de que no siempre podremos fiarnos de los ejecutables de que dispongamos en un sistema "supuestamente" comprometido.

A continuación indicaré algunas de las herramientas más utilizadas, así como una breve descripción de sus características.

tlist.exe
Se trata de un pequeño binario (apenas 50 KB) disponible con la instalación de las MS Debugging Tools y que se ejecuta desde la línea de comandos.

Permite mostrar el arbol de procesos en ejecución (-t), información detallada indicando su PID o una expresión regular que identifique su nombre, comando empleado para lanzarlo, etc. Sin duda un programa muy a tener en cuenta.

pslist
Perteneciente al utilísimo pack de herramientas de sysinternals, las pstools, como característica más destacable incluye la posibilidad de obtener la información referente a un sistema remoto. Como el binario anterior tambien se trataría de un programa para la línea de comandos

Su comportamiento predeterminado muestra información relativa al uso de CPU y valores asociados. Si deseamos obtener información más orientada al consumo de memoria deberemos indicar la opción -m. Otra característica muy útil es que permite indicar un tiempo de refresco en segundos (-r n) para la información mostrada por pantalla.

pulist.exe
Programa de línea de comandos disponible con el kit de herramientas de Windows 2000. Es la más simple de las mencionadas hasta el momento y al igual que pslist también puede lanzarse contra un sistema remoto. Muestra el nombre del proceso, su PID y la cuenta de usuario bajo la que se ejecuta.

cmdline
Herramienta de línea de comandos que muestra las opciones y parámetros utilizados para lanzar un proceso determinado, así como la ruta absoluta y el nombre del fichero de imagen.

Si se indica el PID (-pid:) muestra los datos del proceso en cuestión, mostrando la información para todos si no se le pasa ningún parámetro.

handle
Comando que permite mostrar la lista de manejadores (handles) abiertos por los diferentes procesos del sistema, permitiendo el cierre del manejador especificado (-c ).

La información para cada manejador es más completa si se indica el parámetro -a, reporta información contable con el parámetro -c o el usuario al que pertenece con -u.

listdlls
Comando que permite listar las librerías o DLLs utilizadas por los diferentes procesos incluyendo sus números de versión así como la ruta absoluta, nombre del ejecutable y el comando utilizado para lanzarlo.

Pueden acotarse los datos volcados si se indica el proceso en cuestión, tanto indicando su PID como su nombre (completo o parcial). Otra cualidad interesante es la mostrar los procesos que han cargado una dll concreta.

pmdump
Permite volcar el contenido de la memoria asociada a un proceso en concreto el cual se indica mediante su PID.

Process Explorer
He dejado para el final la que considero más completa de todas las anteriores dado que incluye en una sola la mayoría de las funcionalidades mencionadas hasta el momento. Como única pega su interfaz en modo gráfico, lo que dificulta mucho su utilización dentro de un script automatizado.

5 comentarios:

hsec dijo...

El ProcesExplorer no puede utilizarse para análisis forenses en caliente, ya que si en PC esta infectado con algun rootkit que implemente DKOM (Direct Kernel Object Manipulation) esta herramienta no va a servir, ya que no soporta protección contra DKOM. Hace unas semanas hice un listador de procesos que implementaba esta función, aunque la estética es malísima ya que solo lo programaba como PoC. Si quieres una herramienta interesante sobre listados de procesos, te recomiendo el Rootkit Unhooker, ya que soporta DKOM a muy bajo nivel (con este muy bajo nivel me refiero a que puede seguir detectando procesos incluso cunado se modifica la tabla de handles).

Un Saludo.

neofito dijo...

Hola hsec

Prometo echarle un ojo a tu herramienta, tiene muy buena pinta. Por otra parte, y respecto al tema de dkom esa era la intencion, demostrar en sucesivos mensajes las carencias de estas herramientas mediante ejemplos practicos (de hecho he leido tu documento respecto a la programacion de drivers y me esta resultando de mucha utilidad para un poc de dkom).

Yo tambien he generado una herramienta para el listado de procesos, muy cutre y simple, pero que espero poder ir mejorando conforme vaya aprendiendo. Puedes echarle un vistazo si quieres.

Saludos y muchas gracias por el feedback!

neofito dijo...

Por cierto, si no la conocias no tiene desperdicio: ProcL, ni sus funcionalidades ni la documentacion que la acompaña.

A ver si tengo tiempo y puedo ahondar un poco en su funcionamiento.

hsec dijo...

Vaya, no conocía esta herramienta, gracias por pasar el link :D

Intentare reprogramar mi herramienta para detectar procesos escondidos en el Kernel, concretamente creo que utilizare estos metodos: EPROCESS structure scanning, spCidTable scanning, HandleTableList scanning. Si condigo terminarla (muchas veces los proyectos los dejo a medias por querer probar otras cosas xD) te lo haré saber.

Un Saludo :D

hsec dijo...

Ya veo que en tu herramienta utilizas el mismo método que el que utiliza el Blacklight (fuerza bruta sobre pid's) :D Aunque para programar herramientas de seguridad de este tipo tienes que programar sobre kernel si o si, ya que desde modo usuario te pueden filtrar lo que te retorne la API.

Por cierto, si tienes alguna duda sobre el documento de drivers solo dímelo. El documento esta algo limitado, pero es la única manera para no tener que escribir 200 paginas, que podría llegar a aburrir :D

Un Saludo

Hendrix