Artefactos de Windows · Lección 6 de 9
USB y dispositivos externos
12 min de lectura
Cuando los datos salen de una organización en una unidad USB, el examinador debe responder tres preguntas: qué dispositivo se conectó, cuándo se conectó y qué usuario trabajó con él. Ningún artefacto por sí solo responde las tres. Windows 10 y 11 distribuyen la evidencia entre los subárboles SYSTEM, SOFTWARE y NTUSER.DAT, un registro de instalación en texto plano y varios registros de eventos. Esta lección muestra dónde se encuentra cada valor y cómo vincularlos, hasta llegar al número de serie del volumen en la propia imagen USB. Esa cadena es fundamental para el examen CFX, cuyas preguntas suelen describir una recopilación de triaje de Windows y una imagen E01 de una unidad USB.
Antes de empezar: el conjunto de control
Un subárbol SYSTEM sin conexión no tiene CurrentControlSet. Ese nombre es un enlace que solo existe en un sistema en ejecución. Lea primero SYSTEM\Select\Current. Un valor de 1 significa que ControlSet001 es el conjunto activo. Todas las rutas de SYSTEM de esta lección presuponen ControlSet001. Convierta las horas locales con la configuración de zona horaria que registró en la lección 2.2.
Identificación del dispositivo: USBSTOR y USB
Cada dispositivo de almacenamiento masivo USB que Windows ha configurado obtiene una entrada de dos niveles en SYSTEM\ControlSet001\Enum\USBSTOR:
- Clave de clase de dispositivo:
Disk&Ven_<vendor>&Prod_<product>&Rev_<rev>, por ejemplo,Disk&Ven_SanDisk&Prod_Cruzer_Blade&Rev_1.00. El fabricante y el producto son aquí las cadenas que comunica el dispositivo, no identificadores registrados. - Clave de instancia:
<serial>&<n>, por ejemplo,4C530001230411109384&0. La parte anterior al último&es el número de serie del dispositivo (la cadena USB iSerialNumber). El número final es el número de unidad lógica (LUN), normalmente0, que añade Windows.
El valor FriendlyName de la clave de instancia contiene un nombre legible como SanDisk Cruzer Blade USB Device.
La trampa del número de serie. Si el segundo carácter del identificador de instancia es &, como en 7&2c1f9a3e&0, el dispositivo no comunicó ningún número de serie único. Windows generó el identificador por sí mismo, en parte a partir del puerto al que estaba conectado el dispositivo. No es un número de serie de hardware, no puede vincularse a un dispositivo físico y la misma unidad puede producir un identificador diferente en otro puerto. Indíquelo como un identificador de instancia generado por Windows, nunca como un número de serie.
El mismo dispositivo también aparece en SYSTEM\ControlSet001\Enum\USB\VID_xxxx&PID_yyyy\<serial>. VID y PID son los identificadores de fabricante y producto de 16 bits en hexadecimal, por ejemplo, VID_0781&PID_5567 para una SanDisk Cruzer Blade. Aquí el nombre de instancia es el número de serie sin el sufijo &0, por lo que la cadena del número de serie es lo que vincula las entradas de USB y USBSTOR. Las unidades USB que utilizan el protocolo UASP suelen enumerarse en Enum\SCSI en lugar de Enum\USBSTOR, así que busque en ambos.
Marcas de tiempo del dispositivo en la clave Properties
La clave de instancia contiene las horas más precisas del dispositivo, en Properties\{83da6326-97a6-4088-9453-a1923f573b29}\. Cada subclave es un identificador de propiedad en hexadecimal. Su valor es un FILETIME de 8 bytes, que cuenta intervalos de 100 nanosegundos desde 1601-01-01 UTC.
| Subclave | Propiedad (devpkey.h) | Significado |
|---|---|---|
0064 | DEVPKEY_Device_InstallDate | Última instalación de la instancia del dispositivo; cambia cuando se reinstala o actualiza el controlador |
0065 | DEVPKEY_Device_FirstInstallDate | Primera instalación: la primera vez que se configuró este dispositivo |
0066 | DEVPKEY_Device_LastArrivalDate | Última llegada: la conexión más reciente |
0067 | DEVPKEY_Device_LastRemovalDate | Última retirada: la desconexión más reciente (Windows 8 y posteriores) |
Algunas hojas de referencia publicadas etiquetan 0064 como "primera instalación". El archivo de cabecera devpkey.h del SDK de Windows define la propiedad 100 (0x64) como InstallDate y la 101 (0x65) como FirstInstallDate. En una unidad USB, los dos valores suelen ser iguales, así que compruebe ambos y cite la subclave que utilizó. En un sistema en ejecución, normalmente solo SYSTEM puede leer la clave Properties, por lo que un editor del Registro ejecutado como administrador puede recibir una denegación de acceso. Sin conexión, cualquier analizador de subárboles, como RECmd o Registry Explorer, la lee directamente.
Letra de unidad y volumen: MountedDevices
SYSTEM\MountedDevices asigna nombres a volúmenes mediante dos tipos de valores:
\DosDevices\E:contiene el volumen al que se asignó más recientemente la letra E:.\??\Volume{GUID}contiene una entrada por cada volumen que ha detectado el Administrador de montaje. El GUID del volumen es persistente para ese volumen en este sistema.
Los datos binarios identifican el volumen. Para los medios extraíbles, son una cadena UTF-16LE que contiene la ruta del dispositivo, por ejemplo, _??_USBSTOR#Disk&Ven_SanDisk&Prod_Cruzer_Blade&Rev_1.00#4C530001230411109384&0#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}. El número de serie de esa cadena vincula el GUID del volumen con la instancia de USBSTOR. Para un disco fijo MBR, como muchos discos duros USB, los datos ocupan 12 bytes: la firma de disco de 4 bytes seguida del desplazamiento inicial de la partición en bytes, de 8 bytes. Las particiones GPT almacenan DMIO:ID: seguido del GUID de la partición.
Las letras de unidad se reutilizan. Cada unidad nueva puede convertirse en E:, y \DosDevices\E: solo conserva la última. Una ruta como E:\Plans\budget.xlsx no demuestra a qué dispositivo se hacía referencia. La letra es una evidencia débil hasta que un número de serie del volumen la confirma.
Vinculación del dispositivo con un usuario: MountPoints2
El archivo NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2 de cada usuario contiene una subclave denominada {volume GUID} por cada volumen que apareció en la sesión de ese usuario. Si el GUID coincide con un valor \??\Volume{GUID} de MountedDevices, el dispositivo se montó mientras ese usuario tenía la sesión iniciada. El NTUSER.DAT en el que lo encontró identifica la cuenta. La hora LastWrite de la subclave indica actividad reciente relacionada con el volumen en la sesión de ese usuario. Trátela como evidencia de apoyo, porque otras actividades también pueden actualizar la hora LastWrite de una clave (lección 2.1). MountPoints2 también enumera recursos compartidos de red, como subclaves del tipo ##server#share.
Etiquetas de volumen en el subárbol SOFTWARE
Dos claves de SOFTWARE permiten recuperar una etiqueta de volumen, como "WORK", que el subárbol SYSTEM no registra:
SOFTWARE\Microsoft\Windows Portable Devices\Devices\<device path containing the serial>: el valorFriendlyNamesuele ser la etiqueta del volumen, o la letra de unidad si el volumen no tenía etiqueta.SOFTWARE\Microsoft\Windows Search\VolumeInfoCache\<drive letter>: contiene la etiqueta del último volumen detectado con esa letra. Al igual que MountedDevices, se indexa por letra y se sobrescribe.
No se registran entradas en estas claves para todos los dispositivos, así que utilícelas para corroborar, no como evidencia principal.
setupapi.dev.log: primera instalación
C:\Windows\INF\setupapi.dev.log es un registro de texto de las instalaciones de controladores. La primera vez que se conecta un dispositivo, Windows escribe un bloque como este:
>>> [Device Install (Hardware initiated) - USBSTOR\Disk&Ven_SanDisk&Prod_Cruzer_Blade&Rev_1.00\4C530001230411109384&0]
>>> Section start 2026/03/10 14:22:06.120
La hora de Section start corresponde a la primera instalación, que en la práctica es la primera conexión. Está expresada en hora local del sistema, sin indicador de zona, por lo que debe convertirla a UTC. Las conexiones posteriores del mismo dispositivo no crean nuevos bloques de instalación. Las entradas más antiguas se trasladan a archivos rotados como setupapi.dev.yyyymmdd_hhmmss.log en la misma carpeta.
Registros de eventos
- Microsoft-Windows-Partition/Diagnostic, identificador de evento 1006 (
Microsoft-Windows-Partition%4Diagnostic.evtx, Windows 10 y 11): se registra cuando un disco se conecta o se desconecta. Registra Manufacturer, Model, Revision, SerialNumber y Capacity, el estilo y la tabla de particiones, y copias en bruto del MBR (Mbr) y de hasta cuatro registros de arranque de volumen (Vbr0aVbr3). Los eventos de desconexión muestran una capacidad de 0 y ningún dato de particiones. El evento 1006 vincula el número de serie de hardware con un sistema de archivos, porque el número de serie del volumen puede leerse en los bytes deVbr. El evento se conserva después de que se haya retirado el dispositivo. - Microsoft-Windows-Kernel-PnP/Configuration: los identificadores de evento 400 (dispositivo configurado), 410 (dispositivo iniciado) y 420 (dispositivo eliminado) indican el identificador de instancia del dispositivo, incluido el número de serie, y corroboran las horas de conexión.
- Microsoft-Windows-DriverFrameworks-UserMode/Operational: los identificadores de evento 2003 y 2100 a 2102 registran la conexión y la retirada, pero el canal está deshabilitado de forma predeterminada en Windows 10 y 11. No dé por hecho que estará disponible ni considere significativa su ausencia.
La cadena del número de serie del volumen
Un sistema de archivos escribe un número de serie del volumen (VSN) en su registro de arranque de volumen (VBR) cuando se formatea el volumen. Todos los desplazamientos siguientes son relativos al inicio del volumen, y los valores están en formato little-endian:
| Sistema de archivos | Desplazamiento en el VBR | Tamaño | Se muestra como |
|---|---|---|---|
| NTFS | 0x48 | 8 bytes | Los 4 bytes menos significativos, XXXX-XXXX |
| FAT32 | 0x43 | 4 bytes | XXXX-XXXX |
| exFAT | 0x64 | 4 bytes | XXXX-XXXX |
El mismo número aparece en tres lugares. El primero es el VBR de la imagen USB. El segundo es el VolumeID de LinkInfo de los archivos LNK y las Jump Lists del equipo anfitrión (lección 2.4), junto al tipo de unidad (extraíble) y la ruta original. El tercero es la copia Vbr0 de Partition/Diagnostic 1006. Un cuarto vínculo, el número de serie de USBSTOR, los relaciona con el hardware mediante el campo SerialNumber de ese evento. Si un archivo LNK de C:\Users\ana\... apunta a E:\Plans\budget.xlsx con el VSN 1A2B3C4D, y el VBR de la E01 contiene el mismo VSN, entonces el archivo se abrió desde ese volumen. No se abrió desde otra unidad que también utilizaba la letra E:. Existe una limitación: volver a formatear crea un nuevo VSN, por lo que una coincidencia identifica un formateo concreto del medio, que el número de serie de hardware vincula después con el dispositivo físico.
Ejemplo resuelto: un dispositivo, de principio a fin
La configuración de zona horaria (lección 2.2) muestra E. South America Standard Time con ActiveTimeBias = 180 minutos, por lo que UTC = hora local + 3 horas.
Select\Current= 1. ExisteControlSet001\Enum\USBSTOR\Disk&Ven_SanDisk&Prod_Cruzer_Blade&Rev_1.00\4C530001230411109384&0. El segundo carácter esC, así que el número de serie es real: 4C530001230411109384.Enum\USB\VID_0781&PID_5567\4C530001230411109384lo confirma.MountedDevices: el valor\??\Volume{a9d9c980-1ca5-11f1-a3d2-806e6f6e6963}contiene...#4C530001230411109384&0#..., y\DosDevices\E:contiene los mismos datos.C:\Users\ana\NTUSER.DATcontieneMountPoints2\{a9d9c980-1ca5-11f1-a3d2-806e6f6e6963}, por lo que el volumen se montó en la sesión de ana.- setupapi.dev.log: Section start
2026/03/10 14:22:06.120en hora local. Al sumar 3 horas se obtiene 2026-03-10T17:22:06.120Z.0065contiene los bytes00 A0 2F 6C B2 B0 DC 01, que se decodifican como 2026-03-10T17:22:08Z y corroboran la hora de setupapi con una diferencia de segundos. 0066contiene los bytes80 70 DD BD B9 B3 DC 01. Leídos en little-endian, equivalen a 0x01DCB3B9BDDD7080 = 134.179.699.250.000.000 intervalos de 100 ns. Al dividir por 10.000.000, se obtienen 13.417.969.925 s desde 1601. Al restar 11.644.473.600 s se obtiene la hora Unix 1.773.496.325, que corresponde a 2026-03-14T13:52:05Z (última llegada).- Partition/Diagnostic 1006 a las 2026-03-14T13:52:06Z muestra SerialNumber 4C530001230411109384 y una partición que comienza en LBA 2048. Los bytes 0x43 a 0x46 de
Vbr0son4D 3C 2B 1A. - En la E01, la partición comienza en 2.048 × 512 = 1.048.576 bytes. El VSN de FAT32 en 1.048.576 + 0x43 es
4D 3C 2B 1A, es decir, 0x1A2B3C4D, que se muestra como 1A2B-3C4D.fsstat -o 2048 usb.E01indica el mismo identificador de volumen. - La carpeta Recent de
anacontienebudget.xlsx.lnkcon el tipo de unidad extraíble, el número de serie 1A2B3C4D y la rutaE:\Plans\budget.xlsx.
Respuestas de tipo examen: número de serie 4C530001230411109384 (sin &0); primera conexión 2026-03-10T17:22:06Z.
Tabla de resumen
| Pregunta | Artefacto | Campo |
|---|---|---|
| Número de serie del dispositivo | SYSTEM Enum\USBSTOR\...\<serial>&0 | Nombre de la clave de instancia |
| Identificadores de fabricante y producto | SYSTEM Enum\USB\VID_xxxx&PID_yyyy | Nombre de la clave |
| Primera conexión | setupapi.dev.log; Properties 0065 | Section start (hora local); FILETIME (UTC) |
| Última conexión / retirada | Properties 0066 / 0067 | FILETIME (UTC) |
| Letra de unidad y GUID del volumen | SYSTEM MountedDevices | Datos de \DosDevices\X:, \??\Volume{GUID} |
| Qué usuario | NTUSER.DAT MountPoints2 | Subclave {volume GUID} |
| Etiqueta del volumen | SOFTWARE Windows Portable Devices; VolumeInfoCache | FriendlyName; VolumeLabel |
| Número de serie del volumen | VBR de la imagen USB; LinkInfo de LNK; Partition/Diagnostic 1006 | 0x43 / 0x48 / 0x64; DriveSerialNumber; Vbr0 |
Enfoque del examen: Espere preguntas que soliciten un número de serie USB, que debe ser el número de serie de hardware y no un identificador con & generado por Windows, y la hora de la primera o la última conexión en UTC. La hora de setupapi debe convertirse desde la hora local. Prepárese para mostrar cómo demostrar que un archivo abierto desde una letra de unidad procedía de una imagen USB determinada, haciendo coincidir el VSN del VBR de la imagen con el archivo LNK y el evento 1006.
Puntos clave
- Resuelva primero
SYSTEM\Select\Currenty después leaEnum\USBSTORyEnum\USB. Un identificador de instancia cuyo segundo carácter es&está generado por Windows; no es un número de serie. Properties\{83da6326-...}:0065primera instalación,0066última llegada,0067última retirada, todos como FILETIME en UTC. setupapi.dev.log proporciona la primera instalación en hora local.- MountedDevices vincula el número de serie con un GUID de volumen y una letra. MountPoints2 en NTUSER.DAT vincula ese GUID con un usuario.
- Las letras de unidad se reutilizan, por lo que el número de serie del volumen (NTFS 0x48, FAT32 0x43, exFAT 0x64) es lo que vincula las rutas de LNK con un volumen específico.
- Partition/Diagnostic 1006 registra el número de serie de hardware y una copia del VBR, y establece el vínculo entre el dispositivo y su sistema de archivos. DriverFrameworks-UserMode está desactivado de forma predeterminada.