"UserNotPresent", ¿Cuándo entiende Windows que el usuario no está presente?

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).


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 /SleepStudy
Lo 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.

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?


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.

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.


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?

Esto es todo.

spacer

"UserNotPresent", When does Windows understand that the user is not present?

Hi, minions:

Although it was introduced with Windows 2000, it was not until the preparation of the research material "Think twice before you insert it", that I presented at the CONPilar Congress in April 2018, when I realized the great information that can be stored in the files '.etl', (Event Trace Log); of the relevance that artifact may have in forensic analysis. The exposed presentation was about the trace that we can find, so much in Systems Windows 7 as in Systems Windows 10, relative to the devices USB that have been connected to a System, under several assumptions. Since then I have played with several '.etl' files. Not with all that exist, because we can find many files '.etl' within a Windows System, in many different locations, (Over 100).

Shortly afterwards, in June 2018, I read a very interesting article by Nicole Ibrahim in David Cowen's Blog, entitled "ETW Event Tracing for Windows and ETL Files", where she talked about this type of artifacts and where, in addition, she presented a new tool developed by G-C Partners to parse and analyze more easily the information contained in these files: ETLParser.

A few days ago, Lorenzo Martinez asked me about a type of file '.etl' with which I had not played yet. Specifically he asked me if I had investigated the files contained in the 'SleepStudy' folder, because he had seen that I had already 'fought' with a few '.etl' files. Exactly, he was especially interested in the file 'UserNotPresentSession.etl', because of the huge amount of information that could be found within that file. His interest was in knowing exactly when those files are created. Theoretically, the file 'UserNotPresentSession.etl' captures data that is related to energy when the user is not present. So I decided to run a series of tests and write this article to answer this question: When does Windows understand that the user is not present? 

I haven't been able to find any easy to explain definition of this kind of logs. I haven't seen too many detailed references to these '.etl' files in the Microsoft documentation, (Or I haven't been able to see it).


Introduction


Event Trace Log files, (Log files in binary format), are known as trace logs and store messages generated during sessions, at the start and end of sessions. These messages consist of an event trace log. And this event tracking is done through the 'Event Tracing for Windows, (ETW)' sessions, which is a tool used mainly by developers and system administrators. Its main mission is the analysis of statistics, performance and debugging, (Although we are interested at the forensic level). These files work at the System kernel level and provide information from different sources, from different resources and origins, as well as the System event files '.evtx'. In fact, they are automatic loggers that are directly related to this type of events and can be viewed with Windows' own event viewer, (Most of it). 

Within this type of files is recorded much, a lot and very diverse information with very interesting data. They track events for applications. Displays information about controllers that start and stop, (Think of controllers as applications). That is to say, they can show us information that goes from the applications that have been executed, up to the USB devices that have been connected and up to a list of the files and directories of all element that has contact with the System. 

Not all systems contain all '.etl' files and the same '.etl' files are not present on all systems.

If the files '.etl' were introduced with Windows 2000, it was not until Windows 8.1 that 'SleepStudy' was introduced, which is a tool that uses Windows to implement a new standby power model. SleepStudy tracks System activity and provides general information about each session, including uptime and downtime. This type of session begins when the System enters the new modern standby mode and ends when it leaves that state.

How does the 'SleepStudy' function work? This utility works in conjunction with the 'powercfg.exe' utility and by default will give us a three-day report, in a '.html' format. Its basic use is done through
powercfg.exe /SleepStudy
The first thing that is observed in the report is the basic information of the System, followed by an interactive table where it will show us the information of each of the records it has recorded. These logs will show us information related to the beginning of the state of each session, with the duration time and the state that has generated it, (active, standby, hibernated or shutdown), besides another type of information.


And if we select a date from this table it will take us to the detailed information of that session where the processes in execution can be seen, at the moment of the generation of that log, with the name of the user that has invoked it.


This already tells us what kind of information we are going to find in these kinds of tracking files.

According to Microsoft documentation the parameters can be configured to return information from the last 28 days. But, for example, in my physical System you will find information from the date of installation until the last creation of the trace record.


After this brief introduction to the files '.etl' and the 'SleepStudy' function, it is time to return to the question that is the object of this article: When exactly is the content of the 'SleepStudy' folder generated? When does Windows understand that the user is not present?


To perform a series of quick tests with several assumptions I have chosen to use a Windows 10 System, version 10.0.17134.112, virtualized under VirtualBox and newly installed, and my own Windows 10 System, version 10.0.17134.472 to contrast and verify results. Both systems feature a local 'Romance Standard Time' time zone. Unless otherwise indicated, the reflected time will be the local time of the System. 

My tests

I am going to expose the last tests that I have carried out in chronological order, (It will help me to order the material and I believe that it will serve for a greater understanding). I recommend that you pay special attention to time stamps and file sizes.

The first thing I do is delete all the contents of the 'SleepStudy' and ScreenOn' folders, with the system turned off. (For that reason, the creation date of the 'UserNotPresentSession.etl' file differs from the date of last system installation).


I switch off the computer and do not switch it on again until 07.07 hours on 21 December 2018. At 07.08 hours the login screen appears in the system, but I don't make it effective until 07.10 hours. Two files appear. A file 'UserNotPresentSession.etl' inside the folder 'SleepStudy' and a file 'ScreenOnPowerStudyTraceSession-2018-12-21-07-08-28.etl' inside the folder 'ScreenOn'. Both files were created at 07.08. A few minutes before making the login effective on the system.


That is, the files 'UserNotPresentSession.etl' and 'ScreenOnPowerStudyTraceSession-YYYY-MM-DD-HH-MM-SS.etl' are created by the system without the need for any user to log on to it, during computer boot-up.

I connect the charger of the computer at 07.37 hours and the file 'ScreenOnPowerStudyTraceSession-2018-12-21-07-37-14.etl' is created inside the 'ScreenOn' folder. There are no changes to the 'SleepStudy' folder. I am reckless and at 07.56 hours I disconnect the battery of the computer in order to eliminate unnecessary noise. Another new file 'ScreenOnPowerStudyTraceSession-2018-12-21-07-56-50.etl' appears again in the 'ScreenOn' folder. There are still no changes to the 'SleepStudy' folder.


That is, when a charger is connected and disconnected to a computer system, it creates different 'ScreenOnPowerStudyTraceSession-YYYY-MM-DD-HH-MM-SS.etl' files for each of the events, such as connecting the charger, disconnecting the charger, charging the battery or discharging the battery.

I proceed to leave the computer without user interaction, inactive, without turning off the screen or suspending the system, to resume activity at 08.28 hours and 11.54 hours. Two new files 'user-not-present-trace-2018-12-21-21-08-28-45.etl' and 'user-not-present-trace-2018-12-21-11-54-42.etl' appear. There are no changes to the 'ScreenOn' folder.


I proceed to perform the same operation, but this time with some applications raised to resume activity at 13.06 hours. A new file 'user-not-present-trace-2018-21-13-06-14.etl' appears. There are still no changes in the 'ScreenOn' folder.


That is to say, even if the screen is not turned off or the system suspension is not activated, if the user stops interacting with the system for a while it will generate a file 'user-not-present-trace-YYYY-MM-DD-HH-MM-SS.etl', when the user resumes the activity.

At the same time, at 13.06 hours, I configure the system so that the screen turns off after one hour and I stop interacting with the system, with some applications raised, to resume activity at 16.45 hours. When the system activity is resumed it can be seen that a file 'ScreenOnPowerStudyTraceSession-2018-12-21-14-06-25.etl' and a file 'user-not-present-trace-2018-12-21-16-45-39.etl' have been created.


In other words, when the system is configured to shut down the monitor, and it becomes effective, a 'ScreenOnPowerStudyTraceSession-YYYY-MM-DD-HH-MM-SS.etl' file is created, right at the moment the screen is turned off, and a 'user-not-present-trace-YYYYY-MM-DD-HH-MM-SS.etl' file is created, right at the moment the user resumes activity with the system.

At 17.06 hours I proceed to program the suspension of the system to a time of hour. When the computer is suspended, it remains started but in low power mode. The applications are still open so that when the system is activated, it immediately returns to the state in which it was left. I stop interacting with it so that it becomes effective, resuming the activity at 18.52 hours, the time when the login screen appears, but I do not become effective until 18.55 hours. After logging in and starting the interaction with the system, the creation of a new file 'ScreenOnPowerStudyTraceSession-2018-12-21-18-06-25.etl' and a file 'user-not-present-trace-2018-12-21-18-52-05.etl' is appreciated.


That is to say, when the suspension of a computer is programmed, and this suspension becomes effective, a new file 'ScreenOnPowerStudyTraceSession-YYYY-MM-DD-HH-MM-SS.etl' is generated, right at the moment when the computer enters this suspension state, and a new file 'user-not-present-trace-YYYYYY-MM-DD-HH-MM-SS.etl', right at the moment when the activity with the system is resumed, even though the login is not effective.

I am very intrigued by how files are created after a period of inactivity, even though no screen shutdown or system suspension mode is configured. In order to try to find a time pattern, to know from what moment the system thinks that there is no active user, I decided to stop interacting with the system and resume the activity with several downtime.


At 21.17 hours I resume the activity of the system to block the desk at 21.18 hours. I login at 21.40 and see that a new file 'user-not-present-trace-2018-12-21-21-40-57.etl' has been created. No changes to the 'ScreenOn' folder.


In other words, when the user's session is blocked, a new file 'user-not-present-trace-YYYYY-MM-DD-HH-MM-SS.etl' appears at the time of the next login.

At 21.48 hours I leave the computer inactive, without switching off the screen and without suspension, until 07.28 hours the next day, (22 December 2018), at which time I resume the activity and find myself a single new file 'user-not-present-trace-2018-12-22-22-07-28-28.etl'. No changes to the 'ScreenOn' folder.


At 07.53 hours I close the user's session, without restarting the computer, and make a new login at 08.00 hours. But in this case there are no new files or modifications in any of the folders 'SleepStudy' or 'ScreenOn'.


In other words, if a user exits the session and login again, there will be no changes to the system.

At 08.10 I restart the computer, and the login screen appears at 08.11. After making the login effective, at 08.15 hours, I notice that the file 'UserNotPresentSession.etl' has been modified at 08.11 hours, when the login screen appears, and has removed its content to return to its original size of 64 KB. On the other hand, we have no new file 'user-not-present-trace-YYYYY-MM-DD-HH-MM-SS.etl' and a new file 'ScreenOnPowerStudyTraceSession-2018-12-22-08-11-16.etl' has been generated in the 'ScreenOn' folder.


In other words, when the system restarts, (Or starts after a shutdown), the file 'UserNotPresentSession.etl' is modified, deleting its previous content to start storing the information of the new session and a new file 'ScreenOnPowerStudyTraceSession-YYYYY-MM-DD-HH-MM-SS.etl' is generated, just during system startup, without the user having to log in.

At 0823 hours I proceed to hibernate the system. When the system hibernates, the computer is turned off, but the applications are still open. When the computer starts, it will return to the state in which it was left. I resume the system activity at 09.02 hours, when I start up and the login screen appears, which I don't effective until 09.05 hours. At that moment I go to check the possible changes and I realize that has generated a new file 'ScreenOnPowerStudyTraceSession-2018-12-22-22-08-23-05.etl' and a file 'user-not-present-trace-2018-12-22-09-02-18.etl'.


That is, when the system hibernates a new file 'ScreenOnPowerStudyTraceSession-YYYY-MM-DD-HH-MM-SS.etl' is generated at the same moment of hibernation and when the system is reactivated, before the user makes the login effective, another file 'user-not-present-trace-YYYYYY-MM-DD-HH-MM-SS.etl' is generated.

At 09.13 hours I disconnect the power cable from the computer to force a sudden shutdown. I start the equipment at 09.25 hours. The login screen appears at 09.26 hours, but I don't do it until 09.28 hours. Here I find that the file 'UserNotPresentSession.etl', again, has been modified and has returned to its original size of 64 KB. I find myself with a new file 'abnormal-shutdown-user-not-present-trace-2018-12-22-09-25-40.etl', which contains exactly the size of the previous file 'UserNotPresentSession.etl'. I also find a new file 'ScreenOnPowerStudyTraceSession-2018-12-22-09-25-59.etl'.


That is to say, when a sudden system shutdown occurs, the original 'UserNotPresentSession.etl' file is renamed by another new file 'abnormal-shutdown-user-not-present-trace-YYYY-MM-DD-HH-MM-SS.etl', which contains in its name the date of the start of the computer, after disconnection, and keeps the modification date that corresponds to the date of the last system boot, before disconnection. The system 'creates' another file 'UserNotPresentSession.etl', with the date of the computer boot modification, and with its default size. And the system also creates another file 'abnormal-shutdown-user-not-present-trace-YYYY-MM-DD-HH-MM-SS.etl', with the date of the computer boot.

I carry out the same operation, but this time from the button of the computer, in case it could act differently from the previous one. I do not turn on the equipment until 08.27 hours the following day, (23 December 2018). Remember that the date the system was last switched on was at 00.12 hours. After logging into the system, I find myself in the same situation as before. The original file 'UserNotPresentSession.etl' is renamed to 'abnormal-shutdown-user-not-present-trace-2018-12-23-08-27-36.etl', which presents in its modification date the date of the last system start-up, prior to the sudden shutdown, and in its own name the date of start-up, after the sudden shutdown. A new file 'UserNotPresentSession.etl' is 'created'. And a new file is generated 'abnormal-shutdown-user-not-present-trace-2018-12-23-08-27-44.etl', which presents in its name the date of the last on, after the disconnection.


This has already answered the question I decided to write this article about: When does Windows understand that the user is not present? When and how are the files generated inside the 'SleepStudy' and 'ScreenOn' folders?

But let's go one step further...

Comprehending, understanding and interpreting data


The 'SleepStudy' folder, with its first files 'UserNotPresentSession.etl' and 'ScreenOnPowerStudyTraceSession-YYYYY-MM-DD-HH-MM-SS.etl', is created on the same date that the System was installed on the computer.


The file 'UserNotPresentSession.etl' is unique and the system will always work on it, with the creation date as a reference, with an initial size of 64 KB. This means that this file is not deleted with every shutdown and power-up of the computer. It is only modified and updated with each system boot for each session, (which does not mean for each user login). In other words, the file 'UserNotPresentSession.etl' will tell us when the system was installed and when the computer was last booted, based on its creation and modification dates respectively.


The files 'user-not-present-trace-YYYY-MM-DD-HH-MM-SS.etl' vary in size, depending on the information they contain. They can be traced back from the installation of the System itself and will always contain, both in their time stamps and in their name, the date on which the user has resumed activity with the System, after a period of inactivity.


ScreenOnPowerStudyTraceSession-YYYYY-MM-DD-HH-MM-SS.etl' files, when processed by the system, will always have a size of 64 KB. These files are updated, complementing its information, as new files are generated, one with the other. Once a trace record of this type has been saved to generate another one, it becomes 128 KB in size. All successfully recorded 'ScreenOnPowerStudyTraceSession-YYYY-MM-DD-HH-MM-SS.etl' files are 128KB in size. However, if there is an electrical disconnection of the computer it will not finish its tracking process and will still maintain its size of 64 KB. So, if we find a file, other than the one the system is using, with a size of 64 KB, we can determine that there has been a sudden shutdown of the system. If we look at the creation and modification dates we can understand how one file complements another, because the creation date of the new file will coincide with the modification date of the other file, which has a size of 128 KB. These files are generated every time the system is started (without the need to log in), and every time the computer screen is turned off, (whether by programming, suspension, hibernation or shutdown), or every time the charger is connected and disconnected, in the case of a portable computer. In other words, the file 'ScreenOnPowerStudyTraceSession-YYYYY-MM-DD-HH-MM-SS.etl' will indicate when the system has entered the new standby mode and when the equipment has been started. 


The 'abnormal-shutdown-user-not-present-trace-YYYY-MM-DD-HH-MM-SS.etl' files are nothing more than the last 'UserNotPresentSession' file, which has been renamed after a sudden shutdown. These files will display in its own name the date of the boot after disconnection and in its modified date they will display the date of the last boot before disconnection.


Let's go back for a moment to the report generated by the 'SleepStudy' utility and let's pay attention to some details. Because these files are fed from different resources and sources.


On 21 December, at 18.06.25, the team was suspended for a period of 45.43 minutes. Activity was resumed in the system at 18.52.41 hours. This coincides with the generation of the files 'ScreenOnPowerStudyTraceSession-2018-12-21-18-06-25.etl', when it goes into suspension, and 'user-not-present-trace-2018-12-21-18-52-05.etl', when activity in the system is resumed. If we select the date when the system goes into suspension, it will take us to the 'System Power State: Standby' section. In this section the first thing that is appreciated is that its information comes from the 'Event Viewer Logger', located in "C:\Windows\System32\winevt". And we can find all the session information related to that trace record.


If we go to the next section, 'System Power State: Active', when the activity in the system is resumed, the first thing we see is that its information comes from 'SRUM database', located in "C:\Windows\System32\sru". And from that section we get applications and services that were running at that time, with the user who caused them.


The file 'SRUDB.dat' can be analyzed very easily with the tool 'srum_dump'.


It stores, among other things, all executables that have been opened, indicating the user profile that has opened it.


Regarding the analysis of these files, in my opinion, I think the best way to do it is with the 'ETLParser' tool. This tool can parse all files within a directory. But, if we have some date, some event that interests us, something, why not extract the files that interest us and introduce them, one by one, in a separate folder?


Its operation is simple, by means of the system symbol. And the result will be a file '.csv' and a database '.sqlite'. Both files are very easy to process. For example, I'm in favor of using 'Timeline Explorer' to open the generated '.csv' file. At first, with small searches, the data obtained can be processes running in that tracking session, with the user who caused them. 


Including executables opened from other external units.


Or information about the disks installed in the system.


Thus, if we continue with the example of the suspension of the system in which the activity is resumed at 18.52 hours on December 21 and we proceed to analyze the file 'user-not-present-trace-2018-12-21-18-52-05.etl', we find, by way of example, names of applications that present their execution route; a time stamp that contains the exact date in which the equipment went into suspension; the name of the event, which in this case indicates that the suspension of the applications begins; the provider that the information... You can find a lot of information, very useful, (I do not want to go too deep into it).


Conclusions


In my opinion, knowing how the 'SleepStudy' folder works and its contents, as well as knowing the exact moment when the different tracking files are generated, is something really useful and interesting. Firstly, we can relate the own time stamps of all those files that have been generated. If we contrast the information obtained with the information provided by the Windows Registry itself, through, above all, the last shutdown and login dates, we can understand much better what type of activity a system has had. When was the System last shut down? When was the computer turned on?When was the login effective in the System? When was it suspended? When was the activity resumed? What was running during 'X' inactivity time? Was there any new application open when the activity resumed in the System? Has an external unit been connected during the different states of the different sessions?... I believe that all these questions can be answered with the timely study of these tracking files. I faithfully believe that studying the time stamps of these '.etl' files and analysing its content will help us to understand the famous question: What happened?

That's all.

spacer