Microsoft ProcMon: monitor de procesos para Linux

julio 21, 2020 , 0 Comments

Windows y Linux logos, ProcMon

Microsoft ha querido vender que tiene ese amor incierto por Linux, de hecho, han contribuido en el desarrollo del kernel para integrar, por ejemplo, su HyperV. Además, como bien sabes, son miembros de la Linux Foundation, y han comprado la famosa plataforma de código abierto GitHub. A eso hay que agregar que están portando algunos programas como Edge, PowerShell, ProcMon, etc., abrir FAT, también para usar en GNU/Linux o que han integrado un subsistema Linux en su Windows 10…

Pero ojo, no hay que confundir amor con interés, y lo que mueve a Microsoft es puro interés.  A pesar de todos esos gestos que ha hecho no deja de ser una empresa que busca beneficios, y los buscará  siempre. Si eso implica acercarse a Linux lo hará, y si eso implica alejarse también lo hará. No lo dudéis.

Antecedentes

Windows 95 logo

No sé si sabrás que Microsoft ha estado probando algunas de sus funcionalidades míticas de Windows 95 en Windows 10. El último sistema operativo de los de Redmond se ha transformado en una especie de rolling release con el que están haciendo algunos experimentos como estos que pueden gustar más o menos a sus usuarios.

Algunos de los programas de Windows 95 han sido rescatados en la actualidad, ya que ahora están cobrando mayor importancia. Por ejemplo, Image Resizer, que sería muy práctica para las imágenes que se tratan para colgar en redes sociales, etc. En definitiva, pretende traer una serie de sus PowerToys a su sistema moderno con algunas mejoras y adaptaciones a los nuevos tiempos.

Entre las PowerToy Utilities se encuentran:

  • FancyZones
  • Image Resizer
  • Keyboard Manager
  • PowerRename
  • etc.

Pues bien, además de eso, hay algunas otras herramientas de código abierto que Microsoft tiene en GitHub, y algunas de ellas también para GNU/Linux.

ProcMon o Process Monitor

Process Monitor Windows

Otra de las herramientas de las que Microsoft ha liberado su código fuente y la tienes en GitHub es Process Monitor o ProcMon. Una utilidad bastante más moderna para Windows que sirve para monitorizar y mostrar en tiempo real la actividad de un sistema operativo Microsoft Windows, concretamente leer actividad del registro de Windows.

Especialmente interesante para administradores de sistemas, forenses y depuración. Para tareas que pueden ir desde simplemente conocer la actividad del sistema, hasta los intentos fallidos de acceso (lectura/escritura) en claves de registro para detectar problemas, filtrar por claves, procesos, ID, o valores específicos para localizar lo que buscas, saber el uso de bibliotecas dinámicas DLL usadas por aplicaciones de software, detectar errores del FS o sistema de archivos, etc.

Esta utilidad fue el resultado de fusionar dos de las antiguas herramientas que Microsoft usaba con anterioridad y que se llaman:

  • FileMon: fue creada por Mark Russinovich y Bryce Cogswell, dos empleados de NuMega Tecnologies. Ésta se transformó luego en SysInternals y fue comprada por Microsoft en 2006. Su nombre es una contracción de File+Monitor, y como su propio nombre indica se dedica a monitorizar la actividad del sistema de archivos.
  • RegMon: su hermana gemela comparte el mismo origen. En este caso se orientaba al análisis forense haciendo uso de los datos del registro de Windows. Su nombre proviene de la contracción de Registry+Monitor.

Tras su fusión en una sola, ProcMon sería lanzado para Windows 2000 por primera vez y luego para Windows XP SP2, para terminar actualizándose para siguientes versiones. Pero a pesar de ser freeware, no era de código abierto hasta ahora.

ProcMon para Linux

Puedes pensar que para qué te cuento todo esto, y que no tiene nada que ver con Linux a pesar de que haya sido abierta. Pero lo cierto es que no es así, ya que existe una versión de ProcMon también disponible para Linux. Por tanto, si te gusta y quieres probar esta herramienta también en tu distro GNU/Linux, desde ahora podrás.

ProcMon es una nueva adaptación del clásico ProcMon original de Sysinternals. Con ello se pretende dotar a los desarrolladores de una forma eficiente de monitorizar o trazar la actividad de llamadas al sistema (syscalls). Pero claro, en Linux no hay un registro al estilo de Windows, por lo que no se trata de un simple port, por eso se tiene que hacer uso de BCC (BPF Compiler Collection), es decir, un toolkit, o grupo de herramientas, para la manipulación y tracing de programas para el kernel Linux.

Además, Microsoft ha liberado el código en GitHub bajo licencia MIT. Por cierto, un código fuente que está escrito usando lenguaje de programación C++.

Instalar ProcMon

Para comenzar, lo primero será instalar ProcMon en tu distro favorita. Debes saber que tiene una serie de dependencias que tienes que satisfacer previamente. Además, aunque en la página de código se habla solo de Ubuntu, podría funcionar también en otras distros.

Lo primero que hay que hacer es satisfacer las dependencias que básicamente son tres:

  • BCC (BPF Compiler Collection)
  • cmake (para construir el código)
  • libsqlite3-dev (motor para base de datos SQL)

Para ello, puedes ejecutar los siguientes comandos:

sudo apt-get -y install bison build-essential flex git libedit-dev libllvm6.0 llvm-6.0-dev libclang-6.0-dev python zlib1g-dev libelf-dev


git clone --branch tag_v0.10.0 https://github.com/iovisor/bcc.git
mkdir bcc/build
cd bcc/build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr
make
sudo make install

Con eso ya tendríamos las dependencias, los siguiente sería ir a por el propio ProcMon:


git clone https://github.com/Microsoft/Procmon-for-Linux
cd Procmon-for-Linux
mkdir build
cd build
cmake ..
make

Si quieres, también podrías construir el paquete DEB de ProcMon en Ubuntu de una forma sencilla:


cd build
cpack ..

Usar ProcMon

Una vez lo tienes ya instalado, lo siguiente es comenzar a disfrutar de esta herramienta. Su uso es bastante sencillo, ya que no dispone de una inmensa cantidad de opciones. También tienes que tener en cuenta que necesita privilegios, por lo que deberías ejecutarlo siendo root o, mejor, con sudo delante.

La sintaxis de ProcMon para usarlo desde el terminal es:


procmon [opciones]

Donde [opciones] serán algunas de estas:

  • -h o –help: muestra la ayuda del programa.
  • -p o –pids: para indicar los procesos separados por comas que quieres monitorizar. Puedes usar solo uno. Se especificará por su ID, es decir, un número.
  • -e o –events: lista de llamadas al sistema separadas por coma que quieres monitorizar. Puedes usar solo una. Las tendrás que especificar por su nombre.
  • -c o –collect /ruta/fichero: inicia procmon en headless mode. Es decir, sin los rasgos de la interfaz de éste que puedes ver en el GIF anterior. Un modo muy práctico para algunas pruebas o automatizaciones con scripts. La ruta especificará el fichero donde se registrará toda la actividad de la salida del comando para que luego puedas verla.
  • -f o –file /ruta/fichero: ejecuta ProcMon para trazar algún archivo concreto.
  • Sin opciones: entonces inicia ProcMon y mostrará todos los procesos y syscalls en marcha en el sistema.
  • Combinado: se pueden combinar varias opciones sin problema.

Si quieres algunos ejemplos prácticos, puedes observar estos ejemplos de ejecución:


sudo procmon

sudo procmon -p 44

sudo procmon -p 44,800

sudo procmon -c /home/registro.db

sudo procmon -p 4 -e read,write,open

sudo procmon -f /home/usuario/programas/prueba


Some say he’s half man half fish, others say he’s more of a seventy/thirty split. Either way he’s a fishy bastard.