«Mi nombre es Sherlock Holmes. Mi profesión consiste en saber lo que otros no saben»

Sherlock Holmes a James Ryder: El Carbunclo Azul

De vez en cuando, en alguna investigación forense, surge la pregunta ¿es posible saber si un cierto dispositivo USB estuvo conectado a un equipo y, qué archivos fueron copiados desde o hacia este dispositivo? Conocer este tipo de información es crítico en casos donde se esté investigando una posible fuga de información confidencial, o la transmisión de cierto malware por medio de este tipo de dispositivo móvil. Para resolver este misterio, este artículo abordará los diferentes lugares en donde podemos buscar información o pistas de la actividad de los dispositivos USB en un sistema Windows.

En dicho sistema se crean diversos identificadores cuando se conecta un dispositivo de tipo USB a un bus serial universal. Algunos de estos artefactos o identificadores son únicos al dispositivo y son consistentes entre las diferentes plataformas Windows y Linux. Lo que hace que dichos identificadores sean importantes, desde el punto de vista forense, es el hecho de que son fácilmente rastreables incluso después de que un sistema haya sido apagado.  Por ello pueden ser utilizados en investigaciones forenses para identificar dispositivos específicos que hayan estado conectados al sistema en cuestión.

Todos los dispositivos de USB cuentan con información del fabricante escrita dentro de ellos. Esta información es utilizada por los sistemas Windows para construir un perfil único que permita identificar individualmente cada dispositivo. Cuando se inserta un dispositivo USB a un sistema Windows, los controladores colectan dicha información (especificaciones del fabricante) y la utilizan para crear un perfil de los identificadores. Estos identificadores terminan en diferentes localidades del sistema y persisten incluso si el equipo es apagado. La habilidad de preservar la información sobre los dispositivos elimina la necesidad de reinstalarlo cada vez que se vuelva a insertar el USB al sistema;  además incrementa la habilidad del sistema Windows de crear perfiles para dispositivos que pertenezcan al mismo fabricante.

Cuando un dispositivo de almacenamiento removible se conecta a un sistema Windows por vez primera, el Plug and Play (PnP) Manager recibe la notificación del evento, y solicita al descriptor del dispositivo la información necesaria para desarrollar un identificador del dispositivo (device classID) e intenta localizar el driver apropiado para este dispositivo. En primer lugar, el PnP Manager reconoce el dispositivo y lo instala, probablemente utilizando el driver genérico USBSTOR.SYS. Después el Windows Mount Manager (MountMgr.sys) será alertado y accederá al dispositivo para obtener su información única de identificación. El “mount manager” crea varias llaves de registro que permitirán administrar y mapear el volumen de almacenamiento así como asignarle una letra de drive (E:, F:, Z:, etc.) con la que podremos acceder a la información que contiene.

De acuerdo a la especificación del USB, los dispositivos pueden almacenar un número de serie en el descriptor del dispositivo. Microsoft requiere que este número de serie sea único.  El número de serie junto con la información del producto y del fabricante es parte de la información que el “mount manager” adquiere en el proceso; gracias a este número de serie único es posible rastrear un mismo dispositivo USB entre diversos equipos computacionales. Esta información, junto con las estampas de tiempo del registro, las listas de archivos MRU (more recent used), los manejadores del “autoplay” y los archivos “.lnk” (como lo veremos más adelante) pueden ser utilizados para construir una línea de tiempo de los eventos con respecto a la actividad del dispositivo USB en un equipo.

Una de las primeras pistas que nos pueden proporcionar información sobre los dispositivos USB que estuvieron conectados a un equipo, es el archivo “setupapi.log”. La búsqueda e instalación del driver correcto para el dispositivo USB se queda registrado en el archivo setupapi.log, localizado en la ruta “C:\Windows”. Dentro de la información de este archivo es posible encontrar el día y hora en que el dispositivo de almacenamiento removible fue conectado por primera vez al sistema, como se muestra en la siguiente figura.

 

Figura 1. Fragmento del archivo setupapi.log que muestra los registros de la instalación de un driver para un dispositivo USB

Los sistemas Windows crean una entrada en el registro dentro de la llave “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR\” utilizando el “classID” del dispositivo (por ejemplo: “Disk&Ven_SanDisk&Prod_U3_Cruzer_Micro&Rev_3.27”). Dentro de esta llave de registro se crea una instancia única que utiliza el número de serie obtenido del descriptor del dispositivo; si el dispositivo no cuenta con un número de serie, se utiliza un identificador generado automáticamente por el sistema, por ejemplo: “0000161511737EFB&0”. Si el segundo caracter del identificador es un “&”; quiere decir que el ID fue generado por el sistema Windows porque el dispositivo USB no contaba con el dato del número de serie dentro de su información descriptiva.

Es de suma importancia hacer notar a mis queridos Watsons que la información descriptiva de los dispositivos USB no se encuentra localizada en el área de memoria (particularmente en el área donde los archivos son escritos y leídos dentro del dispositivo). Si el investigador forense adquiere una imagen (copia bit a bit) del dispositivo USB, la imagen no incluirá la información del descriptor del dispositivo. Necesitamos contar físicamente con el dispositivo USB para poder obtener esta información.

El descriptor del dispositivo se obtiene de forma separada al proceso de adquisición de la imagen, utilizando herramientas como UVCView (http://msdn.microsoft.com/en-us/library/aa906848.aspx). UVCView (USB Video Class descriptor viewer) es parte del Windows Driver Kit (WDK) y permite ver los descriptores de cualquier dispositivo USB que se encuentre conectado al sistema. La herramienta UVCView ya no se encuentra disponible para ser descargada directamente del sitio de Microsoft; sin embargo desde el sitio de “Internet Archive Wayback Machine” es posible obtener una copia: http://www.archive.org/web/web.php

 
Utilizando las siguientes expresiones en la búsqueda:
x86 version:
http://download.microsoft.com/download/e/b/a/eba1050f-a31d-436b-9281-92cdfeae4b45/UVCView.x86.exe
IA64 version:
http://download.microsoft.com/download/e/b/a/eba1050f-a31d-436b-9281-92cdfeae4b45/UVCView.ia64.exe
AMD64 version:
http://download.microsoft.com/download/e/b/a/eba1050f-a31d-436b-9281-92cdfeae4b45/UVCView.x64.exe
 
 
Figura 2.  Información descriptiva de un dispositivo de almacenamiento externo USB
obtenida con ayuda de la herramienta UVCView.

Las siguientes pistas sobre nuestro buen amigo, el dispositivo USB, las encontraremos adentrándonos en el maravilloso mundo del registro de Windows. El investigador forense debe comenzar revisando dos llaves importantes del registro:

1) HKLM/System/Mounted Devices

2) HKLM/System/CurrentControlSet/Enum/USBSTOR.

La primera llave muestra todos los dispositivos removibles montados en forma “\DosDevices\”. Cada DWORD contiene información en forma hexadecimal. Cuando se accede a la DWORD y el contenido tiene la forma “\??\STORAGE#Removable Media#”, esto significa que el dispositivo que estuvo asociado con esta letra fue un dispositivo removible de tipo USB.

 

Figura 3. Contenido de la llave “HKLM/System/Mounted Devices” y DWORD del drive “H:” que estuvo asociado a un dispositivo removible USB.

Del DWORD para el drive “H:” mostrado en la figura anterior, también podemos obtener la información del valor llamado “ParentIDPrefix”, que en este caso corresponde a “7&2fffedd1&0”. Este valor es muy importante ya que nos permitirá relacionar el punto de montaje (drive H:), con el dispositivo USB en específico que estuvo montado por última vez allí.  Me gustaría aclarar a mis queridos Watsons que el valor del “ParentIDPrefix” no es el número de serie del dispositivo (del que estábamos hablando anteriormente) sino que corresponde a un valor diferente del que hablaremos más adelante.

La siguiente llave de registro que tenemos que analizar es: “HKLM/System/CurrentControlSet/enum/USBSTOR”. Esta llave de registro proporciona un listado conveniente de todos los dispositivos de almacenamiento USB que han sido utilizados en el equipo. La estructura de la llave de registro USBSTOR puede ser visualizada de la siguiente forma:

figura-6-los-sherlock-homes

Cada dispositivo USB puede contener más de una instancia de información en el registro. Esto sucede cuando se presenta una diferencia en el parámetro “ParentIDPrefix” del dispositivo. Tratemos de explicar mejor esta parte, recordemos que  el “ParentIDPrefix” correlaciona el punto de montaje con el dispositivo al que fue asignado, de tal forma que si al USB “A” fue asignado inicialmente el drive “F:\”, pero lo removemos e insertamos el USB “B”, al cual el sistema también asigna el drive “F:\”; si insertamos el USB “A” mientras el USB “B” todavía se encuentra montado como “F:\”, entonces al USB “A” se le asignará un nuevo “ParentIDPrefix” y se creara una nueva llave de registro para mantener la información de esta nueva instancia.

De acuerdo con la estructura mencionada anteriormente, cuando la llave USBSTOR sea expandida, existirán varias subllaves en formato “Disk&Ven&Prod” como se muestra en la figura 4.

Figura 4. Contenido de la llave “HKLM/System/CurrentControlSet/enum/USBSTOR” 

Dentro de cada una de estas subllaves se encuentra una carpeta con el número de serie del dispositivo de almacenamiento externo. Como ya lo hemos mencionado, si el dispositivo USB no cuenta con el campo del número de serie dentro de su información descriptiva de fabricación, entonces el administrador de plug and play le asignará un número de serie al dispositivo con el que lo pueda identificar de forma única.  A su vez, dentro de cada subllave de los números de serie, encontraremos varias DWORD con información específica del dispositivo, incluyendo el “ParentIDPrefix”. De esta forma,  si encontramos el DWORD del “ParentIDPrefix” cuyo valor corresponda al que aparece dentro de la llave de “HKLM/System/Mounted Devices” del punto de montaje que estemos investigando, entonces ya conoceremos qué dispositivo USB en específico fue el último que estuvo montado en un cierto drive (H:).

  

Figura 5. Valor del “ParentIDPrefix” del dispositivo USB “U3 Cruzer Micro SanDisk” con número de serie “0000161A5275381E&0”

Continuará…

[email protected]