16 julio 2013

Monitorizar ficheros y carpetas en Windows y Linux

En muchas ocasiones resulta interesante tener la capacidad de poder monitorizar ciertas carpetas de cara a saber la actividad que se produce en ellas en un momento determinado.

Bien sea porque estamos ejecutando un programa del que no tenemos su código fuente y queremos saber 'que toca' (ejemplo típico cuando analizas malware), o bien porque simplemente queremos saber en tiempo real cuando un fichero es accedido, creado o alterado.

Después de buscar soluciones, encontré una que permite hacerlo de forma multiplataforma (windows / linux), su nombre: fsmonitor

fsmonitor es en realidad una librería en Python y una suerte de ejemplos que la acompañan.

En Linux, se basa en inotify para monitorizar, y en Windows emplea ReadDirectoryChangesW

Viene con dos ejemplos / utilidades que permiten hacer exactamente lo que dice el título del post: monitorizar ficheros y carpetas

El primer ejemplo es en modo gráfico:


Como podemos ver, estamos monitorizando la papelera en un sistema Windows mientras hacemos un 'vaciar papelera'. Cabe señalar que fsmonitor, en Windows, detecta como modificación un acceso al fichero, es decir, la alerta se genera con la misma descripción tanto ante un acceso (ver contenido) como si se altera, en Linux si discrimina entre una cosa u otra.

Veamos un ejemplo por línea de comandos en Linux:

# python dirwatch.py /tmp

create /tmp holamundo
attrib /tmp holamundo
modify /tmp holamundo
access /tmp holamundo

Bonus: Cómo hacer que Windows actualice la fecha de acceso a ficheros

Durante las pruebas con fsmonitor, descubrí que algunos sistemas Windows no actualizan la fecha de acceso a los ficheros, en principio pensé que era un fallo de fsmonitor, luego descubrí que simplemente ese campo no se actualizaba. Se supone que es una forma de optimizar el rendimiento

El efecto final es que fsmonitor era incapaz de alertar cuando un fichero era accedido

Indagando, encontré una solución: emplear el comando fsutil para hacer que Windows guarde esa información.

(desde un cmd.exe) Primero ejecutamos:

fsutil behavior query disablelastaccess

Si obtenemos:

disablelastaccess = 1

Significa que tenemos deshabilitada esa opción. Debemos activarla ejecutando:

fsutil behavior set disablelastaccess 0

Y luego re-iniciando Windows

6 comments :

OpenBox77 dijo...

Muy bueno para detectar rootkits y similares.

XlueK dijo...

Hola,
Excelente post.



Hay un herramienta de software libre llamada OSSEC la cual, entre muchas cosas, permite hacer FIM (File Integrity Monitoring), que es lo mismo que comentas, con agentes para casi todos los sitemas operativos conocidos y tiene un modo agentless a través de SSH.


Saludos,

Alejandro Ramos dijo...

En este mismo blog, ya se ha hablado sobre OSSEC: http://www.securitybydefault.com/2012/11/ossec-introduccion.html

Alex dijo...

Precisamente hace poco estuve ojeando inotify y echándole un vistazo al código fuente, Escribí un pequeño artículo sobre cómo ejecutar programas al detectar que un fichero se ha modificado: http://wp.me/p2kdv9-ri


Saludos!, me encanta SbD

Pirri dijo...

Gracias, nunca viene mal conocer herramientas adicionales, aunque yo para estas cosas con el procmon de SysInternals voy que chuto.

FEDE dijo...

HOLA,
ESTUPENDA HERRAMIENTA FSMONITOR. TE IMPORTARÍA DESCRIBIR LOS PASOS DE CÓMO INSTALARLA EN WINDOWS Y HACERLA FUNCIONAR? NO ENCUENTRO INSTALADOR ALGUNO...