Cómo mapear dispositivos USB con PowerShell paso a paso

Última actualización: noviembre 27, 2025
Autor: Isaac
  • El mapeo de dispositivos USB es clave para detectar fugas de datos, malware y redes ocultas entre equipos.
  • PowerShell permite inventariar USB local y remotamente, consultando WMI y el Registro de Windows.
  • Los datos pueden centralizarse en un servidor mediante una API REST sencilla creada con Python y Flask.
  • Automatizar los scripts y aplicar buenas prácticas de seguridad hace viable el control de USB a escala corporativa.

Mapear dispositivos USB con PowerShell

En muchos departamentos de sistemas, seguridad y auditoría se ha convertido en algo básico saber qué dispositivos USB se conectan a cada equipo, cuándo lo hacen y desde dónde. No se trata solo de curiosidad técnica: un simple pendrive puede convertirse en la puerta de entrada de malware o en el medio perfecto para sacar información sensible de una red que, en teoría, está completamente segmentada y protegida.

Cuando hablamos de mapear y registrar USB, no basta con mirar el Administrador de dispositivos de vez en cuando. Lo interesante es poder inventariar todos los USB a nivel corporativo, detectar dispositivos no autorizados, vigilar equipos aislados y, si es posible, enviar toda esa información a un servidor central o a una plataforma de monitorización como un SIEM. Aquí es donde entra en juego PowerShell, junto con otras herramientas y servicios que nos facilitan la vida.

Por qué es tan importante mapear dispositivos USB en la red

En entornos regulados como banca, sanidad, industria o administración pública, las normativas de seguridad exigen control estricto sobre soportes extraíbles: quién los usa, en qué equipos y con qué finalidad. No tener visibilidad sobre esto es dejar un agujero enorme en la política de seguridad de la organización.

No es solo una cuestión normativa; desde el punto de vista técnico y operativo, el uso descontrolado de memorias USB puede romper por completo la segmentación de red. Puedes tener VLANs aisladas, firewalls, routers bien configurados y aún así que un pendrive haga de “puente” entre una red crítica y la red ofimática porque un técnico lo va usando en varios entornos.

La historia reciente está llena de ejemplos donde un USB aparentemente inocente ha acabado en incidente grave. Stuxnet se propagó en una red considerada aislada gracias precisamente al uso de dispositivos extraíbles, y herramientas como Brutal Kangaroo se diseñaron específicamente para aprovechar esa vía de entrada en sistemas sin conexión directa a Internet.

En este contexto tiene todo el sentido del mundo invertir algo de tiempo en montar un sistema que permita rastrear de forma automatizada los dispositivos USB que se conectan en la organización, construyendo una especie de mapa de relaciones entre equipos y dispositivos que ayude a entender por dónde se podrían mover ataques o fugas de datos.

Ese mapa de conexiones USB, cuando se alimenta con logs de muchos equipos, permite llegar a generar “hidden networks” o redes ocultas: grafos donde se ve claramente qué pendrive ha pasado por qué máquinas, en qué momentos y con qué frecuencia, algo muy útil en respuesta a incidentes forenses y en análisis de riesgo.

Herramientas de gestión y monitorización de dispositivos USB

get-disk

Antes de lanzarnos a programar scripts, conviene tener claro que ya existen soluciones específicas para gestionar dispositivos USB a nivel empresarial. Muchas empresas combinan este tipo de software con scripts personalizados para cubrir necesidades muy concretas.

  ¿Cómo puedo ver los logs?

Herramientas dedicadas: USB Device Tracker y similares

Las soluciones tipo USB Device Tracker están pensadas justo para lo que nos ocupa: monitorizar quién conecta qué USB en qué equipo, guardando registros muy completos y fáciles de explotar. Suelen registrar el identificador del dispositivo, la hora de conexión y desconexión y el tipo de hardware (almacenamiento, webcam, lector de tarjetas, etc.).

En despliegues grandes, este tipo de herramienta es ideal para tener reportes periódicos del uso de USB, detectar patrones anómalos (por ejemplo, un mismo pendrive que aparece en muchos equipos distintos) y generar alarmas si se conectan dispositivos no permitidos en estaciones críticas.

USBDeview de NirSoft como apoyo a scripts

Otro enfoque, más ligero, pasa por utilizar utilidades como USBDeview de NirSoft, que muestra todos los dispositivos USB conectados y también los que estuvieron conectados en el pasado. No envía datos por sí misma a un servidor, pero se integra muy bien con scripts.

La gran ventaja de USBDeview es que permite auditar rápidamente los dispositivos USB vistos por una máquina concreta: memorias, discos externos, impresoras, cámaras, etc. Combinándolo con PowerShell podemos automatizar exportaciones, trabajar con CSV y alimentar un inventario centralizado sin necesidad de instalar suites muy pesadas.

Soluciones globales: Endpoint Management y DLP

En muchas organizaciones ya existen plataformas de gestión de puesto de trabajo tipo Microsoft Endpoint Manager, ManageEngine Endpoint Central o Ivanti, que incluyen módulos para vigilar el uso de puertos USB. Estas herramientas permiten definir políticas de uso de dispositivos extraíbles, bloquearlos por completo, permitir solo modelos concretos o registrar toda la actividad asociada.

Lo interesante de estos sistemas de endpoint management es que centralizan la información y la integran con el resto de la gestión: inventario de hardware, parches, antivirus y control de aplicaciones. Además, suelen ofrecer informes ampliados y dashboards que facilitan el trabajo a los equipos de seguridad y cumplimiento.

Uso de plataformas SIEM para correlacionar eventos USB

Otra pata fundamental del mapa de USB en una red moderna es el uso de un SIEM (Security Information and Event Management) como Splunk o Elastic Stack. Estos sistemas permiten recolectar eventos desde muchas fuentes distintas, entre ellas logs de Windows relacionados con controladores USB y servicios de almacenamiento.

Una vez configurada la ingesta de eventos, el SIEM puede correlacionar accesos USB sospechosos con otros incidentes, como intentos de ejecución de malware, escaneos internos o autenticaciones extrañas. Además, es posible generar alertas en tiempo real cuando aparece un dispositivo no autorizado o cuando un mismo hardware se conecta de forma repetida a equipos críticos en horarios raros.

Soluciones de seguridad con USB y PowerShell

Mapear dispositivos USB con PowerShell a nivel local

Cuando por políticas internas no se puede usar software de terceros, o simplemente se quiere tener más control, PowerShell se convierte en la opción más flexible. Con unos cuantos cmdlets podemos listar, filtrar y enviar información de dispositivos USB tanto de forma local como remota.

Enumerar dispositivos de almacenamiento USB en Windows

PowerShell permite consultar la capa de WMI (Windows Management Instrumentation) para obtener datos sobre los discos conectados a la máquina. Una forma habitual de detectar unidades USB es consultar la clase Win32_DiskDrive y filtrar por el tipo de interfaz:

  ¿Cuál es el país que nos lleva más horas?

Get-WmiObject Win32_DiskDrive | Where-Object { $_.InterfaceType -eq "USB" } Comando WMI para listar discos USB

Con este comando podemos ver qué discos USB están conectados en ese momento, obteniendo campos como el DeviceID, el modelo y otros atributos. A partir de ahí, se pueden enriquecer los datos con la clase Win32_PhysicalMedia para recuperar el número de serie físico, que resulta esencial para identificar un dispositivo concreto a lo largo del tiempo.

Un ejemplo típico consiste en crear un objeto personalizado con estos valores y, después, convertirlo a JSON para su envío a un servidor vía HTTP usando Invoke-RestMethod. Algo así permite que cada equipo envíe periódicamente su “foto” de los USB conectados a un endpoint central.

Compatibilidad con diferentes versiones de Windows

La enorme mayoría de scripts de inventario USB por PowerShell funcionan sin cambios o con ajustes mínimos en Windows 7, Windows 10, Windows Server 2012 R2, 2016 y 2019. PowerShell y WMI se mantienen bastante consistentes en estas versiones, aunque conviene probar en laboratorio para asegurarse de que no hay diferencias en nombres de propiedades o permisos necesarios.

Es buena práctica ejecutar los scripts con privilegios elevados cuando se accede a WMI y al registro, especialmente si después se quiere programar la ejecución al inicio del sistema o al inicio de sesión de cualquier usuario. De esta forma evitamos fallos silenciosos por falta de permisos.

Acceso al historial de dispositivos desde el Registro

Además de ver los dispositivos USB conectados ahora mismo, es muy útil poder consultar los que se han conectado alguna vez. Windows guarda esta información en el Registro, en la rama:

SYSTEM\CurrentControlSet\Enum\USBSTOR Clave del Registro con el historial USB

Dentro de esa ruta se organizan las claves por identificador de dispositivo y por instancias concretas, almacenando datos como el nombre amigable (FriendlyName) o el ContainerID. Mediante PowerShell se pueden recorrer estas claves, construir objetos con la información y usarlos para reconstruir el “historial USB” del equipo.

Esto es clave para análisis forense: aunque el pendrive ya no esté conectado, el sistema mantiene un rastro que permite saber qué dispositivos de almacenamiento pasaron por la máquina. Si damos un paso más y lo combinamos con ejecución remota, podremos obtener el mismo tipo de rastro en todo un dominio.

Consulta remota y descubrimiento de “Hidden Networks” con PowerShell

Uno de los usos más interesantes de PowerShell en este contexto es aprovechar WinRM (Windows Remote Management) para lanzar comandos remotamente en los equipos del dominio. Así, no hace falta ir máquina por máquina: se puede preguntar a todos los equipos qué USB han visto y centralizar la respuesta.

Hidden networks con dispositivos USB

Invoke-Command -ComputerName equipo1 {
Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR\*\*\'
}
Ejemplo de ejecución remota con Invoke-Command

A partir de esta idea se puede montar un script más elaborado que recorra automáticamente una lista de equipos, conecte al Registro remoto, recupere FriendlyName, ContainerID y otros datos relevantes y construya un dataset con todos los USB vistos en la red. Ese dataset puede enriquecerse con información adicional como IP o nombre de equipo.

Con este tipo de scripts se pueden generar estructuras que luego son muy fáciles de visualizar en herramientas de grafos como Gephi, donde cada equipo es un nodo y cada USB es una arista que conecta varios nodos si se ha insertado en más de una máquina. El resultado son las llamadas Hidden Networks: redes lógicas creadas solo por el movimiento de dispositivos USB.

  Ajustar el tiempo de retardo para los programas de inicio en Windows 10/8/7

Visualizar estas Hidden Networks da pistas muy valiosas: se puede ver, por ejemplo, que un mismo pendrive salta con frecuencia entre redes supuestamente aisladas o que un dispositivo concreto ha pasado por varios servidores críticos. Todo eso, bien documentado, ayuda a reforzar políticas, justificar restricciones y responder con rapidez cuando se detecta un comportamiento anómalo.

Enviar información de USB a un servidor central con PowerShell y REST

Una vez que tenemos claro cómo enumerar y consultar el historial de USB (local y remoto), el siguiente paso lógico es centralizar toda esa información en un servidor. Para ello, una estrategia sencilla y muy práctica es usar una API REST básica que reciba datos en JSON.

Patrón típico del script de envío en PowerShell

El planteamiento habitual es: el script de PowerShell local detecta los discos USB conectados con WMI, extrae propiedades como DeviceID, modelo y número de serie, monta objetos personalizados (PSCustomObject), los convierte a JSON con ConvertTo-Json y los envía con Invoke-RestMethod a una URL del servidor central.

Este patrón se puede adaptar fácilmente a las necesidades de cada organización: se pueden añadir más campos (usuario conectado, nombre de dominio, versión de sistema operativo, etc.), incorporar comprobaciones de errores en las llamadas HTTP y almacenar logs locales de respaldo por si el servidor no está disponible en algún momento.

La clave está en que todos los equipos envíen datos en un formato uniforme, de manera que en el servidor se puedan procesar, guardar y explotar sin demasiadas complicaciones. Esto abre la puerta a informes personalizados, integración con un SIEM y creación de dashboards propios.

Implementar una API REST sencilla con Python y Flask

Para recibir y guardar estos JSON enviados desde PowerShell no hace falta montar un gran servicio: con Python y Flask se puede tener una API REST básica operativa en muy poco tiempo, perfecta para entornos de laboratorio o para despliegues internos controlados.

La estructura típica incluye un endpoint como /api/usblog que acepta peticiones POST con cuerpo JSON, valida que lleguen datos y los escribe en un archivo de log o los manda a una base de datos. Con unas pocas líneas de código podemos dejar resuelto el flujo de recepción.

El procedimiento de despliegue es muy directo: se instala Flask mediante pip, se guarda el script de la API (por ejemplo, como server.py), se ejecuta con Python y se deja escuchando en una IP y puerto concretos. A partir de ahí, los scripts de PowerShell pueden apuntar su Invoke-RestMethod a esa URL y comenzar a enviar registros.

En entornos productivos será recomendable ir más allá: añadir autenticación, cifrado mediante HTTPS, control de acceso por IP y gestión de errores más robusta, así como persistencia en una base de datos en lugar de ficheros planos. Pero para entender el flujo básico y probar el concepto, este enfoque mínimo funciona muy bien.

herramientas gratuitas para comprobar y reparar sectores defectuosos
Artículo relacionado:
Herramientas gratuitas para comprobar y reparar sectores defectuosos