Skip to content

SCCM RecentlyUsedApps: evidencia de ejecución en WMI

Leer CCM_RecentlyUsedApps del repositorio WMI: qué programas ejecutó cada usuario, cuándo y cuántas veces, incluidas copias antiguas de OBJECTS.DATA.

Publicado el 5 min de lectura

En resumen. En los equipos con el cliente de Configuration Manager (SCCM / ConfigMgr), el repositorio WMI contiene CCM_RecentlyUsedApps: un registro por ejecutable y usuario, con la ruta completa, la información de versión del archivo, el último usuario, LastUsedTime y un LaunchCount. Es una evidencia de ejecución que sobrevive al borrado del binario, está en el mismo OBJECTS.DATA que ya recopila para la persistencia WMI, y las copias antiguas de cada registro se pueden recuperar del espacio liberado.

De dónde salen estos datos

El componente de medición de software (software metering) del cliente de ConfigMgr observa los inicios de programas y guarda un resumen en WMI, en el espacio de nombres root\ccm\SoftwareMeteringAgent, clase CCM_RecentlyUsedApps. Configuration Manager lo usa para sus informes de uso de software; para un investigador es un registro por usuario de lo que se ejecutó. Sin cliente de ConfigMgr no hay datos, así que compruébelo primero:

Get-Service CcmExec -ErrorAction SilentlyContinue
Get-CimInstance -Namespace root/ccm/SoftwareMeteringAgent -ClassName CCM_RecentlyUsedApps |
  Sort-Object LastUsedTime -Descending |
  Select-Object LastUsedTime, LastUserName, FolderPath, ExplorerFileName, LaunchCount, CompanyName

Esta consulta solo muestra los registros activos, a través del propio WMI. Para la investigación, recopile toda la carpeta Repository: no hace falta nada más para SCCM, la clase está en los mismos archivos.

Los campos que importan

PropiedadQué indica
FolderPath, ExplorerFileNameDesde dónde se ejecutó el ejecutable y su nombre en disco
LastUserNameLa cuenta que lo inició (un registro por usuario)
LastUsedTimeEl inicio más reciente de ese archivo por ese usuario
LaunchCountLos inicios que ha contado el cliente
CompanyName, ProductName, FileDescription, FileVersion, ProductVersion, OriginalFileNameLa información de versión del archivo
FileSize, FilePropertiesHash, SoftwarePropertiesHashEl tamaño y los hashes propios del cliente sobre las propiedades del archivo y del producto
msiDisplayName, msiPublisher, msiVersion, ProductCodeEl producto MSI instalado al que pertenece el archivo, si lo hay

OriginalFileName y los campos de versión proceden del propio archivo: una herramienta renombrada conserva ahí su nombre original, y una herramienta sin información de versión destaca junto al software firmado de los fabricantes.

Cómo leer bien LastUsedTime

LastUsedTime es una cadena CIM DATETIME: aaaammddHHMMSS.mmmmmm, luego un signo y tres dígitos de desfase respecto a UTC, en minutos. 20260914100914.000000+000 equivale a las 10:09:14 UTC. Un valor terminado en +120 estaría escrito dos horas por delante de UTC, así que su hora UTC es dos horas antes. Convierta con el desfase que trae el valor en lugar de suponer una zona, y guarde la cadena original en sus notas.

Dos límites a tener en cuenta:

  • Es el último inicio de ese usuario, no el primero ni cada uno de ellos. El primer inicio suele fecharse mejor con Prefetch o Amcache.
  • LaunchCount es acumulativo desde que el cliente empezó a seguir el archivo. Un recuento de 1 es una sola ejecución; un recuento de 2 con un LastUsedTime reciente implica al menos una ejecución anterior.

Copias antiguas en OBJECTS.DATA

Cada actualización reescribe el registro. Igual que con las suscripciones WMI eliminadas, la versión anterior no se borra: queda en una página sin mapear o en el slack de una página hasta que WMI reutiliza el espacio. El carving de la cabecera de registro (el hash del nombre de la clase) recupera esas copias con su propio LastUsedTime y su propio LaunchCount. Una copia liberada con un recuento de 1 y una hora anterior, junto a una copia activa con un recuento de 2, también fecha la primera ejecución.

Es el mismo enfoque del CCM_RUA_Finder.py de David Pany (WMI_Forensics); python-cim lee los registros activos a través del índice.

Qué buscar

  • Carpetas escribibles por usuarios: C:\Users\Public\, AppData, Downloads, C:\ProgramData\, C:\Windows\Temp\. El software instalado por un administrador reside en Program Files o Windows.
  • Sin información de versión (CompanyName vacío) para un ejecutable fuera de las carpetas habituales.
  • LaunchCount = 1 en una herramienta: la preparación, la exfiltración o la limpieza a menudo se ejecutan una sola vez.
  • Entradas poco comunes: el único programa visto en su carpeta, o visto en un solo equipo del parque.
  • Cronología: últimos inicios dentro de la ventana del incidente, o cerca de la creación de una suscripción WMI en el mismo equipo.

Ninguno de estos indicios es una prueba por sí solo. Identifique el archivo (hash desde el disco o las copias de seguridad, fabricante, instalador) antes de concluir.

Un ejemplo comentado

El repositorio de ejemplo de la herramienta (equipo ficticio FIN-WKS-07) contiene m64.exe en C:\ProgramData\Intel\, iniciado por FIN\svc_backup a las 10:09 UTC con un recuento de 2 y sin información de versión, y rclone.exe en C:\Users\Public\, iniciado una vez a las 10:47. Una copia liberada del registro de m64.exe muestra un primer inicio a las 10:02 con un recuento de 1. En las suscripciones WMI del mismo repositorio, un consumidor cuya hora de cabecera de registro es 10:31 ejecuta ese mismo m64.exe unos minutos después de cada arranque. Abra la herramienta, cargue el ejemplo y pase a Evidencia de ejecución (SCCM) para seguirlo con el rango de tiempo.

Artículos relacionados

Por qué los filtros, consumidores y enlaces WMI eliminados sobreviven en OBJECTS.DATA, índice frente a carving, y python-cim frente a PyWMIPersistenceFinder.
Cómo almacena objetos el repositorio CIM de WMI: páginas de OBJECTS.DATA, claves de INDEX.BTR, los tres archivos MAPPING, clases, instancias y hashes.
Checklist paso a paso para la persistencia WMI: consultas en vivo, el repositorio, eventos 5860 y 5861, Sysmon 19-21, evidencias de ejecución y limpieza segura.