BAM/DAM en análisis forense: guía completa de BAM
Qué registra BAM en Windows, dónde están BAM y DAM en la colmena SYSTEM, qué demuestran, qué se les escapa y cómo leerlos en una investigación forense.
TL;DR. BAM (Background Activity Moderator) y su hermano DAM (Desktop Activity Moderator) son controladores de gestión de energía de Windows que, de paso, guardan en la colmena SYSTEM una lista de ejecutables con marca de tiempo por usuario. Para el investigador eso significa una cosa: qué cuenta ejecutó qué programa y cuándo lo hizo por última vez, en Windows 10 1709 y posteriores. Las entradas duran poco (alrededor de una semana), ignoran los soportes extraíbles y las unidades de red, y no incluyen contador ni hash. Úsalo como un indicador preciso y atribuido a un usuario, y luego corrobora.
BAM ya aparece en todas las listas de «evidencias de ejecución», incluido el póster SANS Windows Forensic Analysis. Es pequeño, rápido de analizar y — a diferencia de Prefetch o ShimCache — te dice quién. Esta guía reúne lo que realmente se sabe de BAM, con fuentes, y enlaza con los artículos detallados de la serie.
Qué son BAM y DAM
El Background Activity Moderator es un controlador del kernel (bam.sys) que Windows usa para limitar las aplicaciones que se ejecutan en segundo plano. Apareció con Windows 10 versión 1709 (Fall Creators Update), como documentaron los primeros investigadores (padawan-4n6, 2018) y el artefacto de Velociraptor Windows.Forensics.Bam.
El Desktop Activity Moderator es más antiguo. Microsoft lo describe como un controlador en modo kernel que suspende o limita los procesos de escritorio cuando el equipo entra en espera conectada, y señala que no existe en las ediciones de servidor (Microsoft Learn). En Windows 10 y 11 guarda registros por usuario con el mismo formato que BAM, pero normalmente solo en hardware con Modern Standby. El artículo dedicado a DAM detalla las diferencias.
Ninguno de los dos se diseñó para el análisis forense. Los datos existen para que el moderador recuerde lo que ha visto de cada usuario; las marcas de tiempo son un efecto secundario que tenemos la suerte de poder leer.
Dónde se guardan los datos
Ambos servicios guardan su estado en la colmena SYSTEM (C:\Windows\System32\config\SYSTEM), con una subclave por SID de usuario:
| Versión de Windows | Clave |
|---|---|
| Windows 10 1809 y posteriores, Windows 11 | ControlSet00X\Services\bam\State\UserSettings\<SID> |
| Windows 10 1709 – 1803 | ControlSet00X\Services\bam\UserSettings\<SID> |
| DAM (equipos con Modern Standby) | ControlSet00X\Services\dam\State\UserSettings\<SID> |
El paso de bam\UserSettings a bam\State\UserSettings está documentado en la investigación de kacos2000 sobre BAM: desde la 1809 la clave antigua deja de actualizarse, aunque puede conservar entradas obsoletas. Sin conexión no existe CurrentControlSet: lee Select\Current para saber qué control set estaba activo. Los detalles, los comandos de adquisición y la trampa de los registros de transacciones están en dónde está la clave de registro BAM y cómo recopilarla.
Qué contiene una entrada BAM
Bajo cada clave SID:
- Nombre del valor — el ejecutable, escrito como ruta de dispositivo NT, por ejemplo
\Device\HarddiskVolume3\Windows\System32\cmd.exe, o, en las aplicaciones empaquetadas (Store/MSIX), un nombre de familia de paquete comoMicrosoft.WindowsCalculator_8wekyb3d8bbwe. - Datos del valor — un
REG_BINARYcuyos primeros 8 bytes son un FILETIME en UTC. En las compilaciones que examinó Maxim Suhanov, los datos miden 24 bytes (BAM internals). - Dos valores de control,
VersionySequenceNumber, que no son programas.
La vista byte a byte, con un ejemplo decodificado, está en el artículo sobre el formato de los valores BAM.
Qué significa la marca de tiempo
La ingeniería inversa de bam.sys realizada por Suhanov muestra que el FILETIME se actualiza cuando se crea el proceso y cuando termina (fuente). En una herramienta que vive unos segundos, ambos momentos casi coinciden. En un proceso que estuvo abierto horas, el valor puede estar más cerca de su cierre. La mayoría de las herramientas, incluida la nuestra, llaman a la columna «última ejecución»; léela como «última actividad registrada por BAM para esta ruta y este usuario».
Por qué interesa a los investigadores
| Pregunta | Lo que responde BAM |
|---|---|
| ¿Quién lo ejecutó? | La clave SID bajo la que está el valor. Resuélvela con la ProfileList de la colmena SOFTWARE. |
| ¿Qué se ejecutó? | La ruta completa, volumen incluido, o el nombre de la aplicación empaquetada. |
| ¿Cuándo? | La última actividad registrada, con resolución de 100 ns, en UTC. |
| ¿Se ejecutó recientemente en este equipo? | Las entradas de más de una semana aproximadamente se purgan al arrancar, así que su presencia significa reciente. |
Esa atribución a un usuario es lo que marca la diferencia. Prefetch, ShimCache y Amcache son globales al sistema; BAM vincula un binario con una cuenta. Cuando una cuenta de servicio muestra de repente PsExec64.exe en su carpeta de Descargas, sabes qué credenciales restablecer. La comparación con Prefetch, ShimCache y Amcache y la comparación con UserAssist explican dónde es más fuerte cada artefacto.
BAM tampoco se limita a lo que un usuario abrió con doble clic en el Explorador, que es lo que registra UserAssist. También puede haber claves para cuentas de servicio y cuentas conocidas — S-1-5-18 (LocalSystem), por ejemplo, que nuestro analizador etiqueta como SYSTEM. El artículo sobre la atribución por SID explica cómo interpretar esas cuentas.
Lo que BAM no te dice
Los límites importan tanto como los datos, y el artículo sobre limitaciones y antiforense los trata uno a uno. En resumen, según el análisis de Suhanov:
- Una sola marca de tiempo. Sin primera ejecución, sin contador, sin duración.
- Retención corta. Las entradas de más de siete días se eliminan durante el arranque.
- Los ejecutables borrados desaparecen. Una entrada puede eliminarse al arrancar si su ejecutable ya no existe en la ruta registrada.
- Exclusiones. Los ejecutables en soportes extraíbles o recursos de red no generan entradas; también se han observado programas de consola lanzados desde una sesión de línea de comandos sin entrada.
- Ni hash, ni línea de comandos, ni proceso padre. La identidad y el contexto tienen que salir de Amcache, de los registros de eventos o del EDR.
- Números de volumen, no letras de unidad.
HarddiskVolume3debe asociarse aC:con ayuda de otros artefactos.
Un flujo de trabajo de cinco minutos
- Recopila
SYSTEM,SYSTEM.LOG1,SYSTEM.LOG2ySOFTWAREcon una herramienta de copia en bruto (KAPE, Velociraptor, FTK Imager). Si la colmena está «dirty», reproduce los registros conrla.exede Eric Zimmerman (herramientas EZ). - Analiza — suelta los archivos en el BAM/DAM Parser. Lee todos los control sets, ambos formatos y DAM, pone nombre a los SID a partir de la ProfileList y funciona íntegramente en tu navegador.
- Acota — deja activado «Solo control set activo», filtra por la cuenta que te interesa y ordena por última ejecución.
- Prioriza — trata las señales (carpeta escribible por el usuario, doble extensión, binario del sistema fuera de lugar, herramienta de doble uso) como pistas, no como veredictos.
- Corrobora y exporta — confirma las filas clave con Prefetch, Amcache y los registros de eventos, y exporta a CSV o JSON para tu línea de tiempo.
La versión paso a paso, con el razonamiento de cada filtro, está en cómo analizar BAM y DAM. Un caso ficticio completo con los datos de ejemplo del sitio está en la investigación de un movimiento lateral.
Las versiones de un vistazo
| Versión | BAM | DAM |
|---|---|---|
| Windows 7 / 8.1 / 10 anterior a 1709 | Sin clave BAM | Controlador DAM presente en equipos con espera conectada (Windows 8+), sin registros UserSettings documentados a efectos forenses |
| Windows 10 1709 – 1803 | bam\UserSettings | Solo equipos con Modern Standby |
| Windows 10 1809+ / Windows 11 | bam\State\UserSettings | Solo equipos con Modern Standby |
| Windows Server | Compruébalo en la imagen — ver BAM en las distintas versiones de Windows | Ausente en ediciones de servidor, según Microsoft |
Preguntas frecuentes
¿Qué es BAM en el análisis forense de Windows?
BAM (Background Activity Moderator) es un servicio del kernel de Windows 10 1709+ cuyas claves de registro por usuario, en la colmena SYSTEM, enumeran ejecutables con una marca de tiempo FILETIME. Los investigadores lo usan como evidencia de ejecución reciente atribuida a un usuario.
¿Demuestra BAM que un programa se ejecutó?
Una entrada BAM es un indicio sólido de que el ejecutable se ejecutó con ese SID, porque bam.sys la escribe al crearse y al terminar el proceso. No aporta número de ejecuciones, línea de comandos ni hash, así que corrobórala con Prefetch, Amcache o los registros de eventos.
¿Cuánto duran las entradas de BAM?
Según la ingeniería inversa de Maxim Suhanov, las entradas de más de siete días se eliminan al arrancar, y las entradas cuyo ejecutable ya no existe también pueden eliminarse al arrancar. Adquiere la colmena SYSTEM cuanto antes.
Fuentes y lecturas recomendadas
- Maxim Suhanov, BAM internals — la referencia de ingeniería inversa sobre marcas de tiempo, retención y exclusiones.
- kacos2000/Win10 — Bam — el cambio de ruta en la 1809.
- Microsoft Learn, Desktop Activity Moderator y estructura FILETIME.
- Velociraptor Windows.Forensics.Bam — lógica de recopilación en vivo.
- Póster SANS Windows Forensic Analysis — BAM/DAM dentro de la familia de artefactos de ejecución.