Dispositivos USB¶
O que é o histórico de USB¶
O Windows registra todos os dispositivos que instala. Para armazenamento USB, outros dispositivos USB e dispositivos
portáteis (telefones, câmeras, reprodutores de mídia), o hive SYSTEM mantém uma chave por dispositivo com seu nome,
número de série e os horários em que o Windows o instalou, o viu chegar pela última vez e o viu ser removido pela última vez.
MountedDevices registra os GUIDs de volume e as letras de unidade atribuídos a seus volumes. O hive
SOFTWARE mantém os nomes que o Explorer deu a dispositivos portáteis e volumes, e o registro do ReadyBoost
dos números de série de volumes. O NTUSER.DAT de cada usuário registra os volumes que esse usuário tinha
montado.
parse-registry usb os une em um registro por dispositivo e volume: qual dispositivo era, quando
foi instalado e conectado, qual letra de unidade e qual volume ele tinha, e quais usuários tinham esse
volume montado.
Melhor conclusão: um dispositivo com este fabricante, produto e número de série foi conectado a este sistema, pela primeira e pela última vez nestes horários; seu volume tinha esta letra de unidade; estes usuários o tinham montado. Os registros do Registro não mostram quais arquivos foram copiados.
Localização¶
C:\Windows\System32\config\SYSTEM
ControlSet00N\Enum\USBSTOR\<Disk&Ven_…&Prod_…&Rev_…>\<serial>&<LUN>
ControlSet00N\Enum\USB\<VID_xxxx&PID_yyyy>\<serial>
ControlSet00N\Enum\SWD\WPDBUSENUM\<device path>
Properties\{83da6326-97a6-4088-9453-a1923f573b29}\0064 … 0067
MountedDevices
C:\Windows\System32\config\SOFTWARE
Microsoft\Windows Portable Devices\Devices
Microsoft\Windows NT\CurrentVersion\EMDMgmt
C:\Users\<user>\NTUSER.DAT
Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2
| Propriedade do dispositivo | Campo | Significado (devpkey.h) |
|---|---|---|
0064 |
DriverLastInstalledUTC |
DEVPKEY_Device_InstallDate: quando seu driver foi instalado pela última vez |
0065 |
DeviceFirstInstallUTC |
DEVPKEY_Device_FirstInstallDate: quando o dispositivo foi instalado pela primeira vez |
0066 |
LastArrivalUTC |
DEVPKEY_Device_LastArrivalDate: quando foi conectado pela última vez (Windows 8 e posteriores) |
0067 |
LastRemovalUTC |
DEVPKEY_Device_LastRemovalDate: quando foi removido pela última vez (Windows 8 e posteriores) |
O Windows 8 e posteriores mantêm cada horário como o valor padrão da chave 0064 … 0067. O Windows 7
o mantém em 00000064\00000000\Data. O Juntei lê ambos.
Muitas referências de DFIR rotulam 0064 como a primeira instalação e 0065 como a instalação. O Juntei segue
as definições de devpkey.h da Microsoft acima, e nomeia as colunas de acordo com o que cada horário registra.
Forneça a -f ou -d o hive SYSTEM. O hive SOFTWARE do sistema e os hives NTUSER.DAT de seus usuários
são encontrados ao lado dele, como uma coleta os mantém (Windows\System32\config\SOFTWARE,
Users\<user>\NTUSER.DAT), ou no mesmo diretório e um nível abaixo quando os hives foram
exportados juntos. Colete todos eles com seus logs de transação.
Como os registros são unidos¶
- Dispositivos: um registro por chave de dispositivo:
usbstor,usbewpdbusenum(DeviceClass). Um dispositivo de armazenamento USB obtém seus IDs de fabricante e de produto do dispositivo USB com o mesmo container ID (ou, na falta dele, o mesmo número de série). - Volumes: os volumes de um dispositivo de armazenamento USB são os valores
\??\Volume{GUID}deMountedDevicescujos dados são um caminho que nomeia o dispositivo. Um dispositivo com dois volumes tem dois registros. Suas letras de unidade são os valores\DosDevices\X:com os mesmos dados. - Nomes e números de série: os nomes de volume vêm de
Windows Portable Devicese dos dispositivos portáteis que nomeiam o mesmo dispositivo. Os rótulos e números de série de volume vêm de chavesEMDMgmtque o nomeiam. - Usuários: os usuários cujo
MountPoints2tem o GUID do volume, com o horário da última gravação dessa chave. - Volumes sem chave de dispositivo (
volume): um volume deMountedDevicesque nenhuma chave de dispositivo nomeia (o de um disco interno, ou o de um dispositivo removido cuja chaveEnumnão existe mais), uma letra de unidade com a qual nenhum valor de GUID de volume compartilha dados, e um volume que somente oMountPoints2dos usuários tem. - Dispositivos que somente o
SOFTWAREnomeia (portable_device,readyboost).
SourceKeys lista todas as chaves e valores a partir dos quais um registro foi unido, com seu hive.
Cuidados para o analista¶
- As letras de unidade são reutilizadas.
MountedDevicesmantém o último dispositivo que recebeu cada letra. Uma letra é mostrada apenas no dispositivo cujos dados ainda são os dessa letra. - Os números de série podem ser inventados. Quando o segundo caractere de uma instância é
&, o Windows o inventou porque o dispositivo não informa número de série;Serialfica vazio nesse caso. Essa instância pode ser diferente em outro computador. - As instâncias de armazenamento USB terminam com a unidade lógica (
&0).Seriala omite;Instancea mantém. - Os horários variam conforme a versão do Windows. O Windows 7 tem apenas os horários de instalação.
LastArrivalUTCeLastRemovalUTCsão apenas a última conexão, não todas as conexões. Os logs de eventos (Microsoft-Windows-Partition/Diagnostic1006, Kernel-PnP,DriverFrameworks-UserMode) e osetupapi.dev.logfornecem mais. - Conjuntos de controle: por padrão, é lido o conjunto de controle que o Windows usou por último.
--all-control-setslê todos os conjuntos de controle; um mais antigo ainda pode listar um dispositivo que o atual não tem mais. - O horário da última gravação de uma chave não é um horário de conexão. O Windows regrava as chaves de dispositivos por muitos motivos.
- Dispositivos removidos deixam vestígios. Um registro de volume com fabricante e produto, mas sem chave de dispositivo,
é um dispositivo cuja chave
Enumfoi removida (por uma desinstalação ou por ferramentas de limpeza) e cujo volume oMountedDevicesainda tem. - Os números de série do ReadyBoost são o número de série do volume (
VolumeSerials, como odiro exibe), que arquivos LNK e Jump Lists também registram.
Analisar com o Juntei¶
Usage: juntei parse-registry usb <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find SYSTEM hives (with their SOFTWARE and NTUSER.DAT hives)
-f, --file <FILE> Parse one SYSTEM hive (with its SOFTWARE and NTUSER.DAT hives)
--log1/--log2 Supply the SYSTEM hive's transaction logs explicitly
--no-logs Do not replay logs
Filtering:
--all-control-sets Read every control set
Output:
-o, --output <FILE> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-registry usb -d evidence/ -o usb.csv
juntei parse-registry usb -f C/Windows/System32/config/SYSTEM -t jsonl \
| jq 'select(.DeviceClass == "usbstor") | {Vendor, Product, Serial, LastArrival, DriveLetters, Users}'
O resumo lista os dispositivos de armazenamento USB que chegaram por último (os mais recentes primeiro), com suas letras de unidade, e quantos volumes pertencem a dispositivos de armazenamento USB sem chave de dispositivo.
Campos de saída¶
| Campo | Interpretação |
|---|---|
Host |
O nome do computador, a partir do SYSTEM. |
DeviceClass |
usbstor, usb, wpdbusenum ou, sem chave de dispositivo, volume, portable_device ou readyboost. |
ControlSet |
O conjunto de controle da chave do dispositivo. |
Vendor, Product, Revision |
Armazenamento USB: a partir do nome do dispositivo (Disk&Ven_…&Prod_…&Rev_…), também para um dispositivo que uma chave de volume ou do SOFTWARE nomeia. |
Vid, PID |
Os IDs USB de fabricante e de produto. |
Serial, Instance |
O número de série e o nome da chave de instância conforme gravado. |
FriendlyName, DeviceDesc, Service, ContainerID |
Os valores da chave do dispositivo, conforme gravados (DeviceDesc costuma ser @<inf>,%…%;<text>). O FriendlyName de um dispositivo portátil geralmente é o rótulo ou a unidade de seu volume. |
DeviceFirstInstallUTC, DriverLastInstalledUTC, LastArrivalUTC, LastRemovalUTC |
Os horários das propriedades do dispositivo (veja acima). |
DriveLetters |
As letras de unidade cujos dados em MountedDevices são os do volume. |
VolumeGUID, VolumeData |
O GUID do volume e onde seus dados em MountedDevices dizem que ele está: um caminho de dispositivo, uma assinatura de disco MBR e o deslocamento da partição, ou uma partição GPT. |
VolumeNames, VolumeSerials |
Nomes que o Explorer deu ao dispositivo ou a seu volume, rótulos do ReadyBoost e números de série de volume (1234-ABCD). |
User |
Os usuários cujo MountPoints2 tem o volume, com a última gravação dessa chave (JSON: User, MountPoints2LastWritten, SourcePath). |
FoundIn, SourceKeys |
Onde foi encontrado (Enum, MountedDevices, Windows Portable Devices, EMDMgmt, MountPoints2) e todas as chaves e valores a partir dos quais foi unido. |
KeyPath, KeyLastWrittenUTC |
A chave de instância do dispositivo e sua última gravação. |
SourcePath, SoftwarePath |
O hive SYSTEM e o hive SOFTWARE, quando ele forneceu algo. |
TransactionLogStatus, LogsApplied |
Contexto de recuperação do Registro dos hives a partir dos quais o registro foi unido. |
Problems |
Chaves que não puderam ser lidas e propriedades de dispositivo que não são FILETIMEs (com seus bytes). |
Estratégia de investigação¶
- Ordene os dispositivos de armazenamento USB por
LastArrivalUTC(ou, na falta dele,DriverLastInstalledUTC) e separe os leitores e hubs do próprio computador. - Anote o fabricante, o produto, o número de série, o GUID do volume, a letra de unidade e o número de série do volume
de cada dispositivo, e procure-os em arquivos LNK, Jump Lists, ShellBags e no
$MFT(caminhos nessa letra de unidade ou nesse volume). - Verifique
Userpara saber quem tinha o volume montado, e quando (a última gravação da chaveMountPoints2). - Procure registros
volumeque nomeiem um dispositivo de armazenamento USB: dispositivos cujas chaves foram removidas. - Correlacione com os logs de eventos para todas as conexões, não apenas a última.
- Use
parse-registry read --recover-deletedpara chaves de dispositivos excluídas.
Mais detalhes¶
- Microsoft: Propriedades de dispositivos (devpkey.h)
- Microsoft: Suporte a solicitações do gerenciador de montagem
devpkey.h(como nos cabeçalhos do Wine): os números das propriedades de dispositivos- libyal winreg-kb: USB storage, Mounted devices e Mount points
- ys-registry-parser
As junções de usuários usam a identidade de origem de cada hive, de modo que hives exportados com o mesmo nome de perfil permanecem separados. SourceKeys mantém os caminhos dos hives de usuário que contribuíram. A descoberta de usuários associados ignora links simbólicos, de forma consistente com a descoberta recursiva de hives. A correlação de VID/PID exige um container ID utilizável correspondente; sem ele, a correspondência por número de série deve produzir IDs inequívocos. Candidatos conflitantes permanecem desconhecidos, com um problema registrado.