Hola, secuaces:
A pesar de haberse introducido con Windows 2000, no fue hasta la preparación del material de la investigación "Piénsatelo dos veces antes de meterla", que presenté en el Congreso CONPilar en abril de 2018, cuando me di cuenta de la gran información que puede ser almacenada en los ficheros '.etl', (Event Trace Log); de la relevancia que puede tener ese artefacto en un análisis forense. La presentación expuesta versaba sobre el rastro que podemos encontrar, tanto en Sistemas Windows 7 como en Sistemas Windows 10, relativo a los dispositivos USB que han sido conectados a un Sistema, bajo varios supuestos. Desde entonces han sido varios los ficheros '.etl' con los que he jugado. No con todos los que existen, porque nos podemos encontrar muchos ficheros '.etl' dentro de un Sistema Windows, en muchas ubicaciones distintas, (Más de 100).
Poco después, en junio de 2018, leí un artículo muy interesante de Nicole Ibrahim en el Blog de David Cowen, titulado "ETW Event Tracing for Windows and ETL Files", en donde hablaba de este tipo de artefactos y donde, además, presentaba una nueva herramienta desarrollada por G-C Partners para parsear y analizar con mayor facilidad la información que contienen estos ficheros: ETLParser.
Hace unos días, Lorenzo Martínez me preguntó por un tipo de fichero '.etl' con el que yo no había jugado, aún. Concretamente me preguntó si yo había investigado los ficheros que contenía la carpeta 'SleepStudy', porque había visto que ya me había peleado con algunos cuantos ficheros '.etl'. Exactamente, tenía especial interés por el fichero 'UserNotPresentSession.etl', por la ingente cantidad de información que se podría encontrar dentro de ese fichero. Su interés radicaba en saber cuándo son creados exactamente. Teóricamente, el fichero 'UserNotPresentSession.etl' captura datos que están relacionados con la energía cuando el usuario no está presente. Así pues, he decidido realizar una serie de pruebas y escribir este artículo para responder a esta pregunta: ¿Cuándo entiende Windows que el usuario no está presente?
No he sido capaz de encontrar alguna definición fácil de explicar de este tipo de logs. No he visto demasiadas referencias bien detalladas a estos ficheros '.etl' en la documentación de Microsoft, (O no he sido capaz de verlo).
Los ficheros 'Event Trace Log', (Archivos de registro en formato binario), son conocidos como registros de rastreo y almacenan mensajes generados durante las sesiones, al inicio y a la salida de las mismas. Estos mensajes consisten en un registro de seguimiento de eventos. Y este seguimiento de eventos se realiza mediante las sesiones de 'Event Tracing for Windows, (ETW)', que es un instrumento usado principalmente por parte de desarrolladores y administradores de sistemas. Su principal misión es la de análisis de estadísticas, rendimiento y depuración, (Aunque a nosotros nos interesa a nivel forense). Estos ficheros trabajan a nivel de kernel del Sistema y proporcionan información desde distintos orígenes, desde diferentes recursos y fuentes, al igual que los ficheros de eventos del Sistema '.evtx'. De hecho, son registradores automáticos que están relacionados directamente a este tipo de eventos y pueden visualizarse con el propio visor de eventos de Windows, (La mayoría de ellos).
Dentro de este tipo de ficheros se graba mucha, muchísima y muy diversa información con datos muy interesantes. Realizan un seguimiento de eventos para las aplicaciones. Muestran información sobre los controladores que se inician y se detienen, (Piensa que los controladores son aplicaciones). Es decir, nos pueden mostrar información que va desde las aplicaciones que han sido ejecutadas, hasta los dispositivos USB que han sido conectados y hasta una lista de los ficheros y directorios de todo elemento que tenga contacto con el Sistema.
No todos los sistemas contienen todos ficheros '.etl' y no se presentan los mismos ficheros '.etl' en todos los sistemas.
Si los ficheros '.etl' se introdujeron con Windows 2000, no fue hasta Windows 8.1 cuando se introdujo 'SleepStudy', que es una herramienta que usa Windows para implementar un nuevo modelo de energía de espera, (Standby). SleepStudy realiza un seguimiento de la actividad del Sistema y proporciona información general sobre cada sesión, en la que se incluye el tiempo de actividad y el tiempo de inactividad. Este tipo de sesiones comienzan cuando el Sistema entra en el nuevo modo de espera moderno y termina cuando sale de dicho estado.
¿Cómo funciona la función 'SleepStudy'? Esta utilidad funciona en conjunción con la utilidad 'powercfg.exe' y por defecto nos arrojará un informe de tres días, en un formato '.html'. Su uso básico se realiza mediante
Según la documentación de Microsoft se pueden configurar los parámetros para que devuelva información de los últimos 28 días. Pero, por ejemplo, en mi Sistema físico se encuentra información desde la fecha de la instalación hasta la última creación del registro de rastreo.
Realizada esta, espero que breve, introducción a los ficheros '.etl' y a la función de 'SleepStudy', es hora de volver a la pregunta objeto de este artículo: ¿Cuándo se genera exactamente el contenido de la carpeta 'SleepStudy'? ¿Cuándo entiende Windows que el usuario no está presente?
A pesar de haberse introducido con Windows 2000, no fue hasta la preparación del material de la investigación "Piénsatelo dos veces antes de meterla", que presenté en el Congreso CONPilar en abril de 2018, cuando me di cuenta de la gran información que puede ser almacenada en los ficheros '.etl', (Event Trace Log); de la relevancia que puede tener ese artefacto en un análisis forense. La presentación expuesta versaba sobre el rastro que podemos encontrar, tanto en Sistemas Windows 7 como en Sistemas Windows 10, relativo a los dispositivos USB que han sido conectados a un Sistema, bajo varios supuestos. Desde entonces han sido varios los ficheros '.etl' con los que he jugado. No con todos los que existen, porque nos podemos encontrar muchos ficheros '.etl' dentro de un Sistema Windows, en muchas ubicaciones distintas, (Más de 100).
Poco después, en junio de 2018, leí un artículo muy interesante de Nicole Ibrahim en el Blog de David Cowen, titulado "ETW Event Tracing for Windows and ETL Files", en donde hablaba de este tipo de artefactos y donde, además, presentaba una nueva herramienta desarrollada por G-C Partners para parsear y analizar con mayor facilidad la información que contienen estos ficheros: ETLParser.
Hace unos días, Lorenzo Martínez me preguntó por un tipo de fichero '.etl' con el que yo no había jugado, aún. Concretamente me preguntó si yo había investigado los ficheros que contenía la carpeta 'SleepStudy', porque había visto que ya me había peleado con algunos cuantos ficheros '.etl'. Exactamente, tenía especial interés por el fichero 'UserNotPresentSession.etl', por la ingente cantidad de información que se podría encontrar dentro de ese fichero. Su interés radicaba en saber cuándo son creados exactamente. Teóricamente, el fichero 'UserNotPresentSession.etl' captura datos que están relacionados con la energía cuando el usuario no está presente. Así pues, he decidido realizar una serie de pruebas y escribir este artículo para responder a esta pregunta: ¿Cuándo entiende Windows que el usuario no está presente?
No he sido capaz de encontrar alguna definición fácil de explicar de este tipo de logs. No he visto demasiadas referencias bien detalladas a estos ficheros '.etl' en la documentación de Microsoft, (O no he sido capaz de verlo).
Introducción
Los ficheros 'Event Trace Log', (Archivos de registro en formato binario), son conocidos como registros de rastreo y almacenan mensajes generados durante las sesiones, al inicio y a la salida de las mismas. Estos mensajes consisten en un registro de seguimiento de eventos. Y este seguimiento de eventos se realiza mediante las sesiones de 'Event Tracing for Windows, (ETW)', que es un instrumento usado principalmente por parte de desarrolladores y administradores de sistemas. Su principal misión es la de análisis de estadísticas, rendimiento y depuración, (Aunque a nosotros nos interesa a nivel forense). Estos ficheros trabajan a nivel de kernel del Sistema y proporcionan información desde distintos orígenes, desde diferentes recursos y fuentes, al igual que los ficheros de eventos del Sistema '.evtx'. De hecho, son registradores automáticos que están relacionados directamente a este tipo de eventos y pueden visualizarse con el propio visor de eventos de Windows, (La mayoría de ellos).
Dentro de este tipo de ficheros se graba mucha, muchísima y muy diversa información con datos muy interesantes. Realizan un seguimiento de eventos para las aplicaciones. Muestran información sobre los controladores que se inician y se detienen, (Piensa que los controladores son aplicaciones). Es decir, nos pueden mostrar información que va desde las aplicaciones que han sido ejecutadas, hasta los dispositivos USB que han sido conectados y hasta una lista de los ficheros y directorios de todo elemento que tenga contacto con el Sistema.
No todos los sistemas contienen todos ficheros '.etl' y no se presentan los mismos ficheros '.etl' en todos los sistemas.
Si los ficheros '.etl' se introdujeron con Windows 2000, no fue hasta Windows 8.1 cuando se introdujo 'SleepStudy', que es una herramienta que usa Windows para implementar un nuevo modelo de energía de espera, (Standby). SleepStudy realiza un seguimiento de la actividad del Sistema y proporciona información general sobre cada sesión, en la que se incluye el tiempo de actividad y el tiempo de inactividad. Este tipo de sesiones comienzan cuando el Sistema entra en el nuevo modo de espera moderno y termina cuando sale de dicho estado.
¿Cómo funciona la función 'SleepStudy'? Esta utilidad funciona en conjunción con la utilidad 'powercfg.exe' y por defecto nos arrojará un informe de tres días, en un formato '.html'. Su uso básico se realiza mediante
powercfg.exe /SleepStudyLo primero que se observa en el reporte es la información básica del Sistema, seguido de una tabla interactiva donde nos va a mostrar la información de cada uno de los registros que ha grabado. Estos registros nos van a mostrar información relativos al inicio del estado de cada sesión, con el tiempo de duración y el estado que lo ha generado, (Activo, standby, hibernado o apagado), además de otro tipo de información.
Y si seleccionamos una fecha de esta tabla nos llevará a la información detallada de esa sesión donde se pueden ver los procesos en ejecución, en el momento de la generación de ese log, con el nombre del usuario que lo ha invocado.
Esto ya nos indica qué tipo de información vamos a encontrar en ese tipo de ficheros de rastreo.
Realizada esta, espero que breve, introducción a los ficheros '.etl' y a la función de 'SleepStudy', es hora de volver a la pregunta objeto de este artículo: ¿Cuándo se genera exactamente el contenido de la carpeta 'SleepStudy'? ¿Cuándo entiende Windows que el usuario no está presente?
Para realizar una serie de pruebas rápidas con varios supuestos he optado por usar un Sistema Windows 10, versión 10.0.17134.112, virtualizado bajo VirtualBox y recién instalado, y mi propio Sistema Windows 10, versión 10.0.17134.472 para contrastar y verificar resultados. Ambos sistemas presentan una zona horaria local de 'Romance Standard Time'. A menos que se indique lo contrario, el horario reflejado será el local del Sistema.
Voy a exponer las últimas pruebas que he llevado a cabo por orden cronológico, (A mí me servirá para ordenar el material y creo que servirá para una mayor comprensión). Te recomiendo que vayas prestando especial interés en las marcas de tiempo y en los tamaños de los ficheros.
Lo primero que hago es eliminar todo el contenido de las carpetas 'SleepStudy' y ScreenOn', con el sistema apagado. (Por esa razón, la fecha de creación del fichero 'UserNotPresentSession.etl' difiere de la fecha de última instalación del sistema).
Desconecto el equipo y no lo vuelvo a encender hasta las 07.07 horas del día 21 de diciembre de 2018. A las 07.08 horas aparece la pantalla de login en el sistema, pero no lo hago efectivo hasta las 07.10 horas. Aparecen dos ficheros. Un fichero 'UserNotPresentSession.etl' dentro de la carpeta 'SleepStudy' y un fichero 'ScreenOnPowerStudyTraceSession-2018-12-21-07-08-28.etl' dentro de la carpeta 'ScreenOn'. Ambos ficheros han sido creados a las 07.08 horas. Unos minutos antes de hacer el login efectivo en el sistema.
Es decir, que los ficheros 'UserNotPresentSession.etl' y 'ScreenOnPowerStudyTraceSession-YYYY-MM-DD-HH-MM-SS.etl' son creados por el sistema sin necesidad de que haya logueado en él ningún usuario, durante el arranque del equipo.
Conecto el cargador del equipo a las 07.37 horas y se crea el fichero 'ScreenOnPowerStudyTraceSession-2018-12-21-07-37-14.etl' dentro de la carpeta 'ScreenOn'. No hay cambios en la carpeta 'SleepStudy'. Soy un temerario y a las 07.56 horas desconecto la batería del equipo con la finalidad de eliminar ruido innecesario. Vuelve a aparecer dentro de la carpeta 'ScreenOn' otro nuevo fichero 'ScreenOnPowerStudyTraceSession-2018-12-21-07-56-50.etl'. Sigue sin haber cambios en la carpeta 'SleepStudy'.
Es decir, cuando se conecta y se desconecta un cargador a un sistema, éste crea diversos ficheros 'ScreenOnPowerStudyTraceSession-YYYY-MM-DD-HH-MM-SS.etl' para cada uno de los hechos, como la conexión del cargador, la desconexión del cargador, la carga de la batería o la descarga de la batería.
Procedo a dejar el equipo sin interacción por parte del usuario, inactivo, sin apagado de pantalla ni suspensión del sistema, para retomar la actividad a las 08.28 horas y a las 11.54 horas. Aparecen dos nuevos ficheros 'user-not-present-trace-2018-12-21-08-28-45.etl' y 'user-not-present-trace-2018-12-21-11-54-42.etl'. No hay cambios en la carpeta 'ScreenOn'.
Procedo a realizar la misma operación, pero esta vez con algunas aplicaciones levantadas para retomar la actividad a las 13.06 horas. Aparece un nuevo fichero 'user-not-present-trace-2018-21-13-06-14.etl'. Sigue sin haber cambios en la carpeta 'ScreenOn'.
Es decir, que aunque no se establezca apagado de pantalla o suspensión del sistema, si el usuario deja de tener interacción con el sistema durante un tiempo generará un fichero 'user-not-present-trace-YYYY-MM-DD-HH-MM-SS.etl', cuando el usuario retome la actividad.
A esa misma hora, a las 13.06 horas, configuro el sistema que que la pantalla se apague al cabo de una hora y dejo de interactuar con el sistema, con algunas aplicaciones levantadas, para retomar la actividad a las 16.45 horas. Cuando se retoma la actividad del sistema se puede ver que se ha creado un fichero 'ScreenOnPowerStudyTraceSession-2018-12-21-14-06-25.etl' y un fichero 'user-not-present-trace-2018-12-21-16-45-39.etl'.
Es decir, que cuando al sistema se le configura el apagado del monitor, y este se hace efectivo, se crea un fichero 'ScreenOnPowerStudyTraceSession-YYYY-MM-DD-HH-MM-SS.etl', justo en el momento del apagado de la pantalla, y se crea un fichero 'user-not-present-trace-YYYY-MM-DD-HH-MM-SS.etl', justo en el momento en el que el usuario retoma la actividad con el sistema.
A las 17.06 horas procedo a programar la suspensión del sistema a un tiempo de hora. Cuando el equipo se suspende, se mantiene iniciado pero en modo de bajo consumo. Las aplicaciones siguen abiertas para que al activarse el equipo, vuelva de inmediato al estado en que se dejó. Dejo de interactuar con él para que se haga efectivo, retomando la actividad a las 18.52 horas, hora en la que aparece la pantalla de login, pero que no hago efectivo hasta las 18.55 horas. Tras realizar el login y comenzar la interacción con el sistema, se aprecia la creación de un nuevo fichero 'ScreenOnPowerStudyTraceSession-2018-12-21-18-06-25.etl' y un fichero 'user-not-present-trace-2018-12-21-18-52-05.etl'.
Es decir, que cuando se programa la suspensión de un equipo, y se hace efectiva esa suspensión, se genera un nuevo fichero 'ScreenOnPowerStudyTraceSession-YYYY-MM-DD-HH-MM-SS.etl', justo en el momento en que el equipo entra en ese estado de suspensión, y un nuevo fichero 'user-not-present-trace-YYYY-MM-DD-HH-MM-SS.etl', justo en el momento en el que se retoma la actividad con el sistema, aunque no se haga efectivo el login.
Me tiene muy intrigado el cómo se crean los ficheros tras un periodo de inactividad, a pesar de no encontrarse configurado ningún modo de apagado de pantalla o de suspensión del sistema. Con objeto de intentar encontrar un patrón de tiempo, para saber a partir de qué momento el sistema piensa que no hay ningún usuario activo, decidí dejar de interaccionar con el sistema y retomar la actividad con varios tiempos de inactividad.
A las 21.17 horas retomo la actividad del sistema para bloquear el escritorio a las 21.18 horas. Efectúo un login a las 21.40 horas y veo que se ha creado un nuevo fichero 'user-not-present-trace-2018-12-21-21-40-57.etl'. Sin cambios en la carpeta 'ScreenOn'.
Es decir, que cuando se bloquea la sesión del usuario aparece en el momento del siguiente login un nuevo fichero 'user-not-present-trace-YYYY-MM-DD-HH-MM-SS.etl'.
A las 21.48 horas dejo el equipo inactivo, sin apagado de pantalla y sin suspensión, hasta las 07.28 horas del día siguiente, (22 de diciembre de 2018), momento en el que retomo la actividad y me encuentro un único nuevo fichero 'user-not-present-trace-2018-12-22-07-28-28.etl'. Sin cambios en la carpeta 'ScreenOn'.
A las 07.53 horas cierro la sesión del usuario, sin reiniciar el equipo, y efectúo un nuevo login a las 08.00 horas. Pero en este caso no hay nuevos ficheros ni modificaciones en ninguna de las carpetas 'SleepStudy' ni 'ScreenOn'.
Es decir, que en el caso en el que un usuario cierre su sesión y vuelva a realizar un login en ella, no habrá cambios en el sistema.
A las 08.10 horas procedo a reiniciar el equipo, haciendo aparición la pantalla de login a las 08.11 horas. Tras hacer efectivo el login, a las 08.15 horas, me percato de que el fichero 'UserNotPresentSession.etl' ha sido modificado a las 08.11 horas, momento en el que aparece la pantalla del login, y ha eliminado su contenido para volver a su tamaño original de 64 KB. Por otro lado, no tenemos ningún nuevo fichero 'user-not-present-trace-YYYY-MM-DD-HH-MM-SS.etl' y se ha generado un nuevo fichero 'ScreenOnPowerStudyTraceSession-2018-12-22-08-11-16.etl', dentro de la carpeta 'ScreenOn'.
Es decir, que cuando el sistema se reinicia, (O se inicia tras un apagado), el fichero 'UserNotPresentSession.etl' es modificado, borrando su contenido anterior para comenzar a almacenar la información de la nueva sesión y se genera un nuevo fichero 'ScreenOnPowerStudyTraceSession-YYYY-MM-DD-HH-MM-SS.etl', justo durante el arranque del sistema, sin necesidad de que el usuario efectúe un login.
A las 08.23 horas procedo a hibernar el sistema. Cuando el sistema hiberna, se apaga el equipo, pero las aplicaciones siguen abiertas. Cuando se inicie el equipo, volverá al estado en que se dejó. Retomo la actividad del sistema a las 09.02 horas, momento en que arranco y aparece la pantalla de login, que no hago efectivo hasta las 09.05 horas. En ese momento me dirijo a comprobar los posibles cambios y me percato de que se ha generado un nuevo fichero 'ScreenOnPowerStudyTraceSession-2018-12-22-08-23-05.etl' y un fichero 'user-not-present-trace-2018-12-22-09-02-18.etl'.
Es decir, que cuando el sistema hiberna se genera en el mismo momento de la hibernación un nuevo fichero 'ScreenOnPowerStudyTraceSession-YYYY-MM-DD-HH-MM-SS.etl' y cuando se reactiva el sistema, antes de que el usuario haga efectivo el login, se genera otro fichero 'user-not-present-trace-YYYY-MM-DD-HH-MM-SS.etl'.
A las 09.13 horas procedo a desconectar el cable de alimentación del equipo para forzar un apagado repentino. Arranco el equipo a las 09.25 horas. Aparece la pantalla de login a las 09.26 horas, pero no lo hago efectivo hasta las 09.28 horas. Aquí me encuentro con que el fichero 'UserNotPresentSession.etl', nuevamente, ha sido modificado y ha vuelto a su tamaño original de 64 KB. Me encuentro con un nuevo fichero 'abnormal-shutdown-user-not-present-trace-2018-12-22-09-25-40.etl', que contiene exactamente el tamaño del anterior fichero 'UserNotPresentSession.etl'. Me encuentro también con un nuevo fichero 'ScreenOnPowerStudyTraceSession-2018-12-22-09-25-59.etl'.
Es decir, que cuando se produce un apagado repentino del sistema, el fichero 'UserNotPresentSession.etl' original se renombra por otro fichero nuevo 'abnormal-shutdown-user-not-present-trace-YYYY-MM-DD-HH-MM-SS.etl', que contiene en su nombre la fecha del inicio del arranque del equipo, posterior a la desconexión, y mantiene la fecha de modificación que corresponde con la fecha del último arranque del sistema, anterior a la desconexión. El sistema 'crea' otro fichero 'UserNotPresentSession.etl', con la fecha de modificación del arranque del equipo, y con su tamaño por defecto. Y el sistema también crea otro fichero 'abnormal-shutdown-user-not-present-trace-YYYY-MM-DD-HH-MM-SS.etl', con la fecha del arranque del equipo.
Realizo la misma operación, pero esta vez desde el botón del equipo, por si pudiera actuar de forma distinta a la anterior. No enciendo el equipo hasta las 08.27 horas del día siguiente, (23 de diciembre de 2018). Recordemos que la fecha de último encendido del sistema se produjo a las 00.12 horas. Tras realizar un login en el sistema me encuentro con la misma situación anterior. El fichero original 'UserNotPresentSession.etl' se renombra a 'abnormal-shutdown-user-not-present-trace-2018-12-23-08-27-36.etl', que presenta en su fecha de modificación la fecha del último encendido del sistema, anterior al apagado repentino, y en su propio nombre la fecha del encendido, posterior al apagado repentino. Se 'crea' un nuevo fichero 'UserNotPresentSession.etl'. Y se genera un nuevo fichero 'abnormal-shutdown-user-not-present-trace-2018-12-23-08-27-44.etl', que presenta en su nombre la fecha del último encendido, posterior a la desconexión.
La carpeta 'SleepStudy', con sus primeros ficheros 'UserNotPresentSession.etl' y 'ScreenOnPowerStudyTraceSession-YYYY-MM-DD-HH-MM-SS.etl', se crea en la misma fecha en la que se instaló el Sistema en el equipo.
Mis pruebas
Voy a exponer las últimas pruebas que he llevado a cabo por orden cronológico, (A mí me servirá para ordenar el material y creo que servirá para una mayor comprensión). Te recomiendo que vayas prestando especial interés en las marcas de tiempo y en los tamaños de los ficheros.
Lo primero que hago es eliminar todo el contenido de las carpetas 'SleepStudy' y ScreenOn', con el sistema apagado. (Por esa razón, la fecha de creación del fichero 'UserNotPresentSession.etl' difiere de la fecha de última instalación del sistema).
Desconecto el equipo y no lo vuelvo a encender hasta las 07.07 horas del día 21 de diciembre de 2018. A las 07.08 horas aparece la pantalla de login en el sistema, pero no lo hago efectivo hasta las 07.10 horas. Aparecen dos ficheros. Un fichero 'UserNotPresentSession.etl' dentro de la carpeta 'SleepStudy' y un fichero 'ScreenOnPowerStudyTraceSession-2018-12-21-07-08-28.etl' dentro de la carpeta 'ScreenOn'. Ambos ficheros han sido creados a las 07.08 horas. Unos minutos antes de hacer el login efectivo en el sistema.
Es decir, que los ficheros 'UserNotPresentSession.etl' y 'ScreenOnPowerStudyTraceSession-YYYY-MM-DD-HH-MM-SS.etl' son creados por el sistema sin necesidad de que haya logueado en él ningún usuario, durante el arranque del equipo.
Conecto el cargador del equipo a las 07.37 horas y se crea el fichero 'ScreenOnPowerStudyTraceSession-2018-12-21-07-37-14.etl' dentro de la carpeta 'ScreenOn'. No hay cambios en la carpeta 'SleepStudy'. Soy un temerario y a las 07.56 horas desconecto la batería del equipo con la finalidad de eliminar ruido innecesario. Vuelve a aparecer dentro de la carpeta 'ScreenOn' otro nuevo fichero 'ScreenOnPowerStudyTraceSession-2018-12-21-07-56-50.etl'. Sigue sin haber cambios en la carpeta 'SleepStudy'.
Es decir, cuando se conecta y se desconecta un cargador a un sistema, éste crea diversos ficheros 'ScreenOnPowerStudyTraceSession-YYYY-MM-DD-HH-MM-SS.etl' para cada uno de los hechos, como la conexión del cargador, la desconexión del cargador, la carga de la batería o la descarga de la batería.
Procedo a dejar el equipo sin interacción por parte del usuario, inactivo, sin apagado de pantalla ni suspensión del sistema, para retomar la actividad a las 08.28 horas y a las 11.54 horas. Aparecen dos nuevos ficheros 'user-not-present-trace-2018-12-21-08-28-45.etl' y 'user-not-present-trace-2018-12-21-11-54-42.etl'. No hay cambios en la carpeta 'ScreenOn'.
Procedo a realizar la misma operación, pero esta vez con algunas aplicaciones levantadas para retomar la actividad a las 13.06 horas. Aparece un nuevo fichero 'user-not-present-trace-2018-21-13-06-14.etl'. Sigue sin haber cambios en la carpeta 'ScreenOn'.
Es decir, que aunque no se establezca apagado de pantalla o suspensión del sistema, si el usuario deja de tener interacción con el sistema durante un tiempo generará un fichero 'user-not-present-trace-YYYY-MM-DD-HH-MM-SS.etl', cuando el usuario retome la actividad.
A esa misma hora, a las 13.06 horas, configuro el sistema que que la pantalla se apague al cabo de una hora y dejo de interactuar con el sistema, con algunas aplicaciones levantadas, para retomar la actividad a las 16.45 horas. Cuando se retoma la actividad del sistema se puede ver que se ha creado un fichero 'ScreenOnPowerStudyTraceSession-2018-12-21-14-06-25.etl' y un fichero 'user-not-present-trace-2018-12-21-16-45-39.etl'.
Es decir, que cuando al sistema se le configura el apagado del monitor, y este se hace efectivo, se crea un fichero 'ScreenOnPowerStudyTraceSession-YYYY-MM-DD-HH-MM-SS.etl', justo en el momento del apagado de la pantalla, y se crea un fichero 'user-not-present-trace-YYYY-MM-DD-HH-MM-SS.etl', justo en el momento en el que el usuario retoma la actividad con el sistema.
A las 17.06 horas procedo a programar la suspensión del sistema a un tiempo de hora. Cuando el equipo se suspende, se mantiene iniciado pero en modo de bajo consumo. Las aplicaciones siguen abiertas para que al activarse el equipo, vuelva de inmediato al estado en que se dejó. Dejo de interactuar con él para que se haga efectivo, retomando la actividad a las 18.52 horas, hora en la que aparece la pantalla de login, pero que no hago efectivo hasta las 18.55 horas. Tras realizar el login y comenzar la interacción con el sistema, se aprecia la creación de un nuevo fichero 'ScreenOnPowerStudyTraceSession-2018-12-21-18-06-25.etl' y un fichero 'user-not-present-trace-2018-12-21-18-52-05.etl'.
Es decir, que cuando se programa la suspensión de un equipo, y se hace efectiva esa suspensión, se genera un nuevo fichero 'ScreenOnPowerStudyTraceSession-YYYY-MM-DD-HH-MM-SS.etl', justo en el momento en que el equipo entra en ese estado de suspensión, y un nuevo fichero 'user-not-present-trace-YYYY-MM-DD-HH-MM-SS.etl', justo en el momento en el que se retoma la actividad con el sistema, aunque no se haga efectivo el login.
Me tiene muy intrigado el cómo se crean los ficheros tras un periodo de inactividad, a pesar de no encontrarse configurado ningún modo de apagado de pantalla o de suspensión del sistema. Con objeto de intentar encontrar un patrón de tiempo, para saber a partir de qué momento el sistema piensa que no hay ningún usuario activo, decidí dejar de interaccionar con el sistema y retomar la actividad con varios tiempos de inactividad.
A las 21.17 horas retomo la actividad del sistema para bloquear el escritorio a las 21.18 horas. Efectúo un login a las 21.40 horas y veo que se ha creado un nuevo fichero 'user-not-present-trace-2018-12-21-21-40-57.etl'. Sin cambios en la carpeta 'ScreenOn'.
Es decir, que cuando se bloquea la sesión del usuario aparece en el momento del siguiente login un nuevo fichero 'user-not-present-trace-YYYY-MM-DD-HH-MM-SS.etl'.
A las 21.48 horas dejo el equipo inactivo, sin apagado de pantalla y sin suspensión, hasta las 07.28 horas del día siguiente, (22 de diciembre de 2018), momento en el que retomo la actividad y me encuentro un único nuevo fichero 'user-not-present-trace-2018-12-22-07-28-28.etl'. Sin cambios en la carpeta 'ScreenOn'.
A las 07.53 horas cierro la sesión del usuario, sin reiniciar el equipo, y efectúo un nuevo login a las 08.00 horas. Pero en este caso no hay nuevos ficheros ni modificaciones en ninguna de las carpetas 'SleepStudy' ni 'ScreenOn'.
Es decir, que en el caso en el que un usuario cierre su sesión y vuelva a realizar un login en ella, no habrá cambios en el sistema.
A las 08.10 horas procedo a reiniciar el equipo, haciendo aparición la pantalla de login a las 08.11 horas. Tras hacer efectivo el login, a las 08.15 horas, me percato de que el fichero 'UserNotPresentSession.etl' ha sido modificado a las 08.11 horas, momento en el que aparece la pantalla del login, y ha eliminado su contenido para volver a su tamaño original de 64 KB. Por otro lado, no tenemos ningún nuevo fichero 'user-not-present-trace-YYYY-MM-DD-HH-MM-SS.etl' y se ha generado un nuevo fichero 'ScreenOnPowerStudyTraceSession-2018-12-22-08-11-16.etl', dentro de la carpeta 'ScreenOn'.
Es decir, que cuando el sistema se reinicia, (O se inicia tras un apagado), el fichero 'UserNotPresentSession.etl' es modificado, borrando su contenido anterior para comenzar a almacenar la información de la nueva sesión y se genera un nuevo fichero 'ScreenOnPowerStudyTraceSession-YYYY-MM-DD-HH-MM-SS.etl', justo durante el arranque del sistema, sin necesidad de que el usuario efectúe un login.
A las 08.23 horas procedo a hibernar el sistema. Cuando el sistema hiberna, se apaga el equipo, pero las aplicaciones siguen abiertas. Cuando se inicie el equipo, volverá al estado en que se dejó. Retomo la actividad del sistema a las 09.02 horas, momento en que arranco y aparece la pantalla de login, que no hago efectivo hasta las 09.05 horas. En ese momento me dirijo a comprobar los posibles cambios y me percato de que se ha generado un nuevo fichero 'ScreenOnPowerStudyTraceSession-2018-12-22-08-23-05.etl' y un fichero 'user-not-present-trace-2018-12-22-09-02-18.etl'.
Es decir, que cuando el sistema hiberna se genera en el mismo momento de la hibernación un nuevo fichero 'ScreenOnPowerStudyTraceSession-YYYY-MM-DD-HH-MM-SS.etl' y cuando se reactiva el sistema, antes de que el usuario haga efectivo el login, se genera otro fichero 'user-not-present-trace-YYYY-MM-DD-HH-MM-SS.etl'.
A las 09.13 horas procedo a desconectar el cable de alimentación del equipo para forzar un apagado repentino. Arranco el equipo a las 09.25 horas. Aparece la pantalla de login a las 09.26 horas, pero no lo hago efectivo hasta las 09.28 horas. Aquí me encuentro con que el fichero 'UserNotPresentSession.etl', nuevamente, ha sido modificado y ha vuelto a su tamaño original de 64 KB. Me encuentro con un nuevo fichero 'abnormal-shutdown-user-not-present-trace-2018-12-22-09-25-40.etl', que contiene exactamente el tamaño del anterior fichero 'UserNotPresentSession.etl'. Me encuentro también con un nuevo fichero 'ScreenOnPowerStudyTraceSession-2018-12-22-09-25-59.etl'.
Es decir, que cuando se produce un apagado repentino del sistema, el fichero 'UserNotPresentSession.etl' original se renombra por otro fichero nuevo 'abnormal-shutdown-user-not-present-trace-YYYY-MM-DD-HH-MM-SS.etl', que contiene en su nombre la fecha del inicio del arranque del equipo, posterior a la desconexión, y mantiene la fecha de modificación que corresponde con la fecha del último arranque del sistema, anterior a la desconexión. El sistema 'crea' otro fichero 'UserNotPresentSession.etl', con la fecha de modificación del arranque del equipo, y con su tamaño por defecto. Y el sistema también crea otro fichero 'abnormal-shutdown-user-not-present-trace-YYYY-MM-DD-HH-MM-SS.etl', con la fecha del arranque del equipo.
Realizo la misma operación, pero esta vez desde el botón del equipo, por si pudiera actuar de forma distinta a la anterior. No enciendo el equipo hasta las 08.27 horas del día siguiente, (23 de diciembre de 2018). Recordemos que la fecha de último encendido del sistema se produjo a las 00.12 horas. Tras realizar un login en el sistema me encuentro con la misma situación anterior. El fichero original 'UserNotPresentSession.etl' se renombra a 'abnormal-shutdown-user-not-present-trace-2018-12-23-08-27-36.etl', que presenta en su fecha de modificación la fecha del último encendido del sistema, anterior al apagado repentino, y en su propio nombre la fecha del encendido, posterior al apagado repentino. Se 'crea' un nuevo fichero 'UserNotPresentSession.etl'. Y se genera un nuevo fichero 'abnormal-shutdown-user-not-present-trace-2018-12-23-08-27-44.etl', que presenta en su nombre la fecha del último encendido, posterior a la desconexión.
Con esto ya está respondida la pregunta por la que he decidido escribir este artículo: ¿Cuándo entiende Windows que el usuario no está presente?¿Cuándo y cómo se generan los ficheros dentro de las carpetas 'SleepStudy' y 'ScreenOn'?
Pero vamos a dar un paso más...
Comprendiendo, entendiendo e interpretando datos
La carpeta 'SleepStudy', con sus primeros ficheros 'UserNotPresentSession.etl' y 'ScreenOnPowerStudyTraceSession-YYYY-MM-DD-HH-MM-SS.etl', se crea en la misma fecha en la que se instaló el Sistema en el equipo.
El fichero 'UserNotPresentSession.etl' es único y el sistema siempre va a trabajar sobre él, con la fecha de creación como referencia, con un tamaño inicial de 64 KB. Esto quiere decir que este fichero no se elimina con cada apagado y encendido del equipo. Tan sólo se modifica y se actualiza su contenido con cada arranque del sistema para cada sesión, (Que no significa para cada login de usuario). Es decir, el fichero 'UserNotPresentSession.etl' nos va a indicar cuándo se ha instalado el sistema y cuándo se ha arrancado el equipo por última vez, basándonos en sus fechas de creación y de modificación respectivamente.
Los ficheros 'user-not-present-trace-YYYY-MM-DD-HH-MM-SS.etl' varían todos en tamaño, dependiendo de la información que contengan. Se pueden remontar desde la propia instalación del Sistema y siempre van a contener, tanto en sus marcas de tiempo como en su nombre, la fecha en la que el usuario ha retomado la actividad con el Sistema, tras un periodo de inactividad.
Los ficheros 'ScreenOnPowerStudyTraceSession-YYYY-MM-DD-HH-MM-SS.etl', cuando están siendo tratados por el sistema, presentarán siempre un tamaño de 64 KB. Estos ficheros se van actualizando, complementando su información, conforme se van generando nuevos ficheros, unos con otros. Una vez que se ha grabado un registro de rastreo de este tipo para generar otro, pasa a tener un tamaño de 128 KB. Todos los ficheros 'ScreenOnPowerStudyTraceSession-YYYY-MM-DD-HH-MM-SS.etl' que han sido grabados satisfactoriamente presentan un tamaño de 128 KB. Sin embargo, si se produce una desconexión eléctrica del equipo no terminará su proceso de rastreo y seguirá manteniendo su tamaño de 64 KB. Así pues, si nos encontramos un fichero, que no sea el que tiene el sistema en uso, con un tamaño de 64 KB, podemos determinar que se ha producido un apagado repentino del sistema. Si nos fijamos en las fechas de creación y de modificación podemos entender cómo se complementan un fichero con otro, porque la fecha de creación del nuevo fichero coincidirá con la fecha de modificación del otro fichero, que pasa a tener un tamaño de 128 KB. Estos ficheros se generan cada vez que se arranca el sistema, (Sin necesidad de efectuar un login), y cada vez que se apaga la pantalla del equipo, (Sea por programación, por suspensión, por hibernación o por apagado), o cada vez que se conecta y desconecta el cargador, en caso de tratarse de un equipo portátil. Es decir, que el fichero 'ScreenOnPowerStudyTraceSession-YYYY-MM-DD-HH-MM-SS.etl' nos va a indicar en qué momentos ha entrado en sistema en el nuevo modo de espera y en qué momentos se ha arrancado el equipo.
Los ficheros 'abnormal-shutdown-user-not-present-trace-YYYY-MM-DD-HH-MM-SS.etl' no son más que el último fichero 'UserNotPresentSession', que ha sido renombrado tras un apagado repentino. Estos ficheros van a presentar en su propio nombre la fecha del arranque posterior a la desconexión y en su fecha de modificación presentarán la fecha del último arranque anterior a la desconexión.
Los ficheros 'abnormal-shutdown-user-not-present-trace-YYYY-MM-DD-HH-MM-SS.etl' no son más que el último fichero 'UserNotPresentSession', que ha sido renombrado tras un apagado repentino. Estos ficheros van a presentar en su propio nombre la fecha del arranque posterior a la desconexión y en su fecha de modificación presentarán la fecha del último arranque anterior a la desconexión.
Volvamos un momento al reporte generado por la utilidad 'SleepStudy' y vamos a prestar atención a algunos detalles. Porque estos ficheros se alimentan de distintos recursos y fuentes.
El día 21 de diciembre, a las 18.06.25 horas, el equipo entró en suspensión por un periodo de 45.43 minutos. Se retoma la actividad en el sistema a las 18.52.41 horas. Este hecho coincide con la generación de los ficheros 'ScreenOnPowerStudyTraceSession-2018-12-21-18-06-25.etl', momento en que entra en suspensión, y 'user-not-present-trace-2018-12-21-18-52-05.etl', momento en que se retoma la actividad en el sistema. Si seleccionamos la fecha en la que entra el sistema en suspensión nos dirigirá al apartado 'System Power State: Standby'. En ese apartado lo primero que se aprecia es que su información proviene del 'Event Viewer Logger', ubicados en "C:\Windows\System32\winevt". Y podemos encontrar toda la información de la sesión relativa a ese registro de rastreo.
Si nos dirigimos al apartado siguiente, 'System Power State: Active', momento en el que se retoma la actividad en el sistema, lo primero que vemos es que su información proviene de 'SRUM database', ubicada en "C:\Windows\System32\sru". Y de ese apartado obtenemos aplicaciones y servicios que estaban en ejecución en ese momento, con el usuario que los ha provocado.
El fichero 'SRUDB.dat' se puede analizar muy fácilmente con la herramienta 'srum_dump'.
Que almacena, entre otras cosas, todos los ejecutables que han sido abiertos, indicando el perfil de usuario que lo ha abierto.
En lo referente al análisis de estos ficheros, en mi opinión, creo que la mejor manera de hacerlo es con la herramienta 'ETLParser'. Esta herramienta parsea todos los ficheros dentro de un directorio. Pero, si tenemos alguna fecha, algún evento que nos interese, algo, ¿Por qué no extraer los ficheros que nos interesen e introducirlos, uno a uno, en una carpeta independiente?
Su funcionamiento es sencillo, mediante el símbolo del sistema. Y el resultado será un fichero '.csv' y una base de datos '.sqlite'. Ambos ficheros son muy fáciles de tratar. Por ejemplo, yo soy partidario de usar 'Timeline Explorer' para abrir el fichero '.csv' generado. Y de primeras, con pequeñas búsquedas, los datos que se obtienen pueden ser procesos en ejecución en esa sesión de rastreo, con el usuario que los ha provocado.
Incluidos los ejecutables abiertos desde otras unidades externas.
O información relativa a los discos instalados en el sistema.
Así pues, si seguimos con el ejemplo de la suspensión del sistema en donde se retoma la actividad a las 18.52 horas del día 21 de diciembre y procedemos a analizar el fichero 'user-not-present-trace-2018-12-21-18-52-05.etl', encontramos, a modo de ejemplo, nombres de aplicaciones, que presentan su ruta de ejecución; una marca de tiempo que contiene la fecha exacta en la que el equipo entró en suspensión; el nombre del evento, que en este caso indica que empieza la suspensión de las aplicaciones; el proveedor que la información... Se puede encontrar muchísima información, muy útil, (No quiero profundizar demasiado más en ello).
Conclusiones
En mi opinión, conocer cómo funciona la carpeta 'SleepStudy' y su contenido, así como saber en qué momento exacto se generan los diferentes ficheros de rastreo, creo que es algo realmente útil e interesante. Primeramente, podemos relacionar las propias marcas de tiempo de todos esos ficheros que se han ido generando. Si contrastamos la información obtenida con la información que proporciona el propio Registro de Windows, a través de, sobre todo, las fechas de último apagado y de login, podremos entender mucho mejor qué tipo de actividad ha tenido un sistema. ¿Cúando se ha apagó por última vez el Sistema?¿Cuándo se encendió el equipo?¿Cuándo se hizo efectivo el login en el Sistema?¿Cuándo entró en suspensión?¿Cuándo se retomó la actividad?¿Qué había en ejecución durante 'X' tiempo de inactividad?¿Había alguna nueva aplicación abierta al retomar la actividad en el Sistema?¿Se ha conectado una unidad externa durante los diferentes estados de las diferentes sesiones?... Considero que todas estas preguntas pueden ser respondidas con el oportuno estudio de estos ficheros de rastreo. Creo fielmente que el estudio de las marcas de tiempo de estos ficheros '.etl' y el análisis de su contenido nos va a ayudar mucho a comprender la famosa pregunta de: ¿Qué ha pasado?