PowerShell per detectar esdeveniments USB i executar accions

Darrera actualització: 27/08/2025
Autor: Isaac
  • PowerShell permet detectar connexions i desconnexions USB en temps real i enviar-les a un servidor central mitjançant una API.
  • Habilitar canals d'esdeveniments i fer servir WEF aporta escala corporativa i context forense juntament amb SIEM.
  • La posada en producció combina programador de tasques, seguretat de l'endpoint i enduriment del backend.

Monitoritzar esdeveniments USB amb PowerShell

La connexió de memòries, discos i perifèrics per USB pot obrir més portes de les que sembla: des de fuites de dades a infeccions per codi maliciós sense que ningú se n'assabenti. Monitoritzar i registrar els dispositius USB que entren i surten dels equips és, per tant, una mesura clau de ciberseguretat que moltes organitzacions ja consideren bàsica.

La bona notícia és que l'ecosistema Windows ofereix diversos enfocaments, des d'eines comercials fins a mètodes nadius com ara PowerShell i Windows Event Forwarding (WEF). Amb un disseny ben pensat es pot detectar a temps real, registrar, enviar a un servidor central i correlacionar esdeveniments USB amb altres senyals de seguretat, tot sense fricció per a l'usuari.

Panorama i eines per rastrejar dispositius USB

A empreses regulades (finances, salut…) s'exigeix ​​control i traçabilitat. L'objectiu és identificar ràpidament dispositius no autoritzats , prevenir exfiltracions i detectar intents d'introduir codi maliciós des de suports extraïbles.

Si busques alguna cosa llesta per utilitzar, hi ha utilitats específiques. USB Device Tracker facilita inventari i auditoria contínua , guardant identificadors, tipus de dispositiu i els moments de connexió/desconnexió, a més de reports útils per identificar patrons o amenaces.

També hi ha utilitats lleugeres. USBDeview (NirSoft) mostra dispositius USB presents i passats ; no envia dades a un servidor per si mateix, però s'integra bé amb scripts per automatitzar exportacions o notificacions a la teva infraestructura.

A escenaris a gran escala, les suites d'endpoint ajuden a consolidar. Microsoft Endpoint Manager, ManageEngine Endpoint Central o Ivanti permeten polítiques i registres de dispositius USB a nivell corporatiu, amb reports o enviament a repositoris centralitzats.

Per correlació i alertes, un SIEM com Splunk o Elastic Stack pot ingerir esdeveniments USB i disparar deteccions a temps real. Aquestes plataformes identifiquen comportaments sospitosos (connexions fora d'horari, dispositius no permesos, etc.) i encaixen de meravella amb un pipeline que alimenti dades des de PowerShell o WEF.

Solucions per auditar USB

Detecció i resposta amb PowerShell: esdeveniments USB i enviament a servidor

Si prefereixes flexibilitat, un script propi a PowerShell és molt potent. Pots detectar connexions i desconnexions en temps real, enriquir amb metadades i publicar en una API REST pel teu backend.

Primer, llistar dispositius USB connectats en un moment donat. La classe Win32_DiskDrive amb InterfaceType USB és un bon punt de partida , encara que convé complementar amb dades PnP per al número de sèrie quan estigui disponible:

# Enumerar almacenamiento USB actual
$usb = Get-CimInstance Win32_DiskDrive | Where-Object { $_.InterfaceType -eq 'USB' }
$enriquecido = foreach ($d in $usb) {
  $serial = (Get-CimInstance Win32_PhysicalMedia | Where-Object { $_.Tag -eq $d.DeviceID }).SerialNumber
  [PSCustomObject]@{
    DeviceID   = $d.DeviceID
    Model      = $d.Model
    Interface  = $d.InterfaceType
    Serial     = ($serial -replace '\s+', '').Trim()
  }
}
$enriquecido | Format-Table -AutoSize

A més a més de l'inventari, la clau és el temps real. PowerShell es pot subscriure a esdeveniments del sistema per reaccionar a l'instant quan es connecti o retiri un dispositiu:

# Monitorizar llegada y retirada de volúmenes (EventType 2=arrive, 3=remove)
Unregister-Event -SourceIdentifier USBMonitor -ErrorAction SilentlyContinue
$null = Register-WmiEvent -Class Win32_VolumeChangeEvent -Action {
  $e = $Event.SourceEventArgs.NewEvent
  $tipo = if ($e.EventType -eq 2) { 'Insert' } elseif ($e.EventType -eq 3) { 'Remove' } else { 'Other' }
  $payload = [PSCustomObject]@{
    Hostname = $env:COMPUTERNAME
    TimeUtc  = (Get-Date).ToUniversalTime().ToString('o')
    Action   = $tipo
    Drive    = $e.DriveName
  }
  try {
    $json = $payload | ConvertTo-Json -Depth 5
    Invoke-RestMethod -Uri 'http://SERVIDOR_CENTRAL/api/usblog' -Method Post -Body $json -ContentType 'application/json'
  } catch {
    Write-Warning ("Error enviando evento USB: {0}" -f $_.Exception.Message)
  }
} -SourceIdentifier USBMonitor

Si a més a més vols capturar detalls del maquinari del disc USB recentment inserit, combina Win32_VolumeChangeEvent amb un refresc de Win32_DiskDrive i creua per volum/lletra muntada segons correspongui. També pots monitoritzar Win32_DeviceChangeEvent per a esdeveniments genèrics de dispositiu:

# Alternativa: evento genérico de dispositivo
Unregister-Event -SourceIdentifier USBGeneric -ErrorAction SilentlyContinue
$null = Register-WmiEvent -Class Win32_DeviceChangeEvent -Action {
  $e = $Event.SourceEventArgs.NewEvent
  $payload = [PSCustomObject]@{
    Hostname = $env:COMPUTERNAME
    TimeUtc  = (Get-Date).ToUniversalTime().ToString('o')
    EventType= $e.EventType  # 2 insert, 3 remove
  }
  try {
    Invoke-RestMethod -Uri 'http://SERVIDOR_CENTRAL/api/usblog' -Method Post -Body ($payload|ConvertTo-Json) -ContentType 'application/json'
  } catch {}
} -SourceIdentifier USBGeneric

Per a un bolcat puntual i enviament immediat a JSON al teu servidor, la canonada és directa. El patró següent recull discos USB actuals, els transforma a JSON i els publica en una API:

Get-CimInstance Win32_DiskDrive | Where-Object { $_.InterfaceType -eq 'USB' } |
  ForEach-Object {
    $serial = (Get-CimInstance Win32_PhysicalMedia | Where-Object { $_.Tag -eq $_.DeviceID }).SerialNumber
    [PSCustomObject]@{ DeviceID = $_.DeviceID; Model = $_.Model; Serial = ($serial -replace '\s+', '').Trim() }
  } |
  ConvertTo-Json |
  Invoke-RestMethod -Uri 'http://SERVIDOR_CENTRAL/api/usblog' -Method Post -ContentType 'application/json'

Més enllà de l'inventari i les insercions/retirs, Windows registra activitat de controladors d'usuari vinculada a USB. Habilita el canal Microsoft-Windows-DriverFrameworks-UserMode/Operational i revisa esdeveniments clau: connexió (p. ex., 2003, 2004, 2006, 2010) i desconnexió (2102, 2105, 2106), amb metadades útils com a fabricant, model o rutes.

  Learn how to Repair Bluetooth Not Working in Home windows 10

Detecció en temps real d'USB amb PowerShell

API REST a Flask per centralitzar els registres

Necessites un receptor senzill per emmagatzemar i explotar les dades. Amb Flask pots aixecar un endpoint /api/usblog que validi, guardi i deixi llest el material per a posteriors anàlisis o enviament al SIEM:

from flask import Flask, request, jsonify
from datetime import datetime

app = Flask(__name__)
API_TOKEN = 'cambia-este-token-seguro'

@app.route('/api/usblog', methods=['POST'])
def log_usb():
    if request.headers.get('X-Api-Token') != API_TOKEN:
        return jsonify({'error': 'Unauthorized'}), 401
    data = request.get_json(silent=True)
    if not data:
        return jsonify({'error': 'No payload'}), 400
    line = f"{datetime.utcnow().isoformat()}Z\t{data}\n"
    with open('usb_log.txt', 'a', encoding='utf-8') as f:
        f.write(line)
    return jsonify({'status': 'ok'}), 200

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

Per posar-lo en marxa, instal·la Flask amb pip, desa l'script (per exemple, server.py) i executa'l. A partir d'aquí, el vostre script a PowerShell pot enviar esdeveniments a http://IP_SERVIDOR:5000/api/usblog afegint una capçalera X-Api-Token si ho heu activat.

Encara que aquí escrivim en un fitxer per simplificar, pots enviar a una base de dades o al teu SIEM , o fins i tot bifurcar: a SIEM per a analítica online ia un llac de dades (Hadoop/HDInsight) per a retenció perllongada i anàlisi forense de gran volum.

API REST per a esdeveniments USB

Posada en producció: arrencada automàtica, seguretat, WEF i analítica

Perquè no depengui de la mà de ningú després d'un reinici, automatitzeu l' arrencada de l'script de PowerShell amb el Programador de tasques o la carpeta Inici, i blindeu el desplegament amb bones pràctiques de seguretat.

Arrencada automàtica a Windows

Amb el Programador de tasques: crea una tasca amb privilegis màxims i desencadenador en iniciar sessió o en iniciar el sistema . Com a acció, executa powershell.exe amb NoProfile i ExecutionPolicy Bypass apuntant al teu .ps1.

Si preferiu la carpeta Inici: creeu un .bat que llanci l'script i col·loqueu-lo a %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup . És senzill i funciona bé en llocs dusuari.

Exemple de .bat: powershell.exe -NoProfile -ExecutionPolicy Bypass -File C:\ruta\script.ps1 , ajustant la ruta al teu entorn i assegurant que l'script estigui signat o provingui d'origen fiable.

Recomanacions de seguretat

Protegeix l'API: filtra per tallafocs, exigeix ​​token o mTLS i aplica límits de taxa . Evita exposar l'endpoint més enllà de la xarxa necessària i enregistra amb detall el mínim de dades personals imprescindible.

  Repair: Webcam is Being Used By One other Software Error in Home windows 10

Endureix el client: utilitza comptes de servei amb privilegis mínims , trenca el token, valida TLS on apliqui i controla l'ExecutionPolicy amb GPO si escau; si pots, signa l'script i valida integritat.

Fes auditories periòdiques: revisa els registres del servidor i del client , compara patrons inusuals i creua amb polítiques de control de dispositius per detectar desviaments o accessos no autoritzats.

Windows Event Forwarding (WEF) per a cobertura corporativa

Quan voleu escala i resiliència a Windows, WEF reenvia esdeveniments a un servidor Windows Event Collector (WEC) sense instal·lar agents addicionals. És passiu respecte al logging: no habilita canals ni canvia auditories; aquestes configuracions s'han d'aplicar via GPO.

Model de doble subscripció: línia base (per a tots els equips) i sospitosa (per a un subconjunt després d'una alerta) . La de sospitosos recull més senyals per a context forense i es pot actualitzar sense tocar la resta.

Destinació de dades recomanada: línia base a SEM/SIEM o SQL; sospitosa a MapReduce/HDInsight/Data Lake per volum i menor relació senyal/soroll. El SIEM correlaciona i alerta “a velocitat de màquina”; el llac reté anys i permet anàlisis complexes.

Escalabilitat orientativa: fins a 5.000 esdeveniments/sa SQL/SEM; 5.000-50.000 a SEM; per sobre, llac de dades . A servidors WEC estàndard, la xifra pràctica ronda 3.000 esdeveniments/s en total segons maquinari i discos.

Push vs Pull: el més flexible és subscripció iniciada per lorigen (push) configurada per GPO. Pull exigeix ​​predefinir clients a WEC i permisos remots de lectura d'esdeveniments (afegir la credencial al grup Lectors de registre d'esdeveniments).

Xifratge i autenticació: en domini, Kerberos xifra per defecte (NTLM opcional) ; HTTPS es fa servir amb autenticació per certificats quan no hi ha Kerberos. L'autenticació és mútua en tots dos casos.

Format i freqüència: per defecte “Rendered Text”; alternatiu “Events” (binari XML) més compacte . Maneres de lliurament: Normal, Minimitzar amplada de banda (push, lots cada ~6h), Minimitzar latència (push, lots ~30s) o personalitzat mitjançant WECUTIL amb DeliveryMaxItems i DeliveryMaxLatencyTime.

Límits pràctics de WEC: disc de registre EVTX (E/S), connexions TCP simultànies i mida del registre (claus persistents per cada origen). Amb grans volums, wecutil.exe és preferible a la consola del visualitzador d'esdeveniments.

Habilitar canals clau i dimensionar logs : DriverFrameworks-UserMode/Operational (habilitar i ampliar a ~50 MB), CAPI2/Operational (100 MB i permisos per a Lectors de registre d'esdeveniments), AppLocker (EXE/DLL i MSI/Script, ~100 MB). Fes servir GPO amb wevtutil per scriptar:

%SystemRoot%\System32\wevtutil.exe sl Microsoft-Windows-DriverFrameworks-UserMode/Operational /e:true
%SystemRoot%\System32\wevtutil.exe sl "Microsoft-Windows-DriverFrameworks-UserMode/Operational" /ms:52432896
%SystemRoot%\System32\wevtutil.exe sl Microsoft-Windows-CAPI2/Operational /e:true
%SystemRoot%\System32\wevtutil.exe sl Microsoft-Windows-CAPI2/Operational /ms:102432768
%SystemRoot%\System32\wevtutil.exe sl Microsoft-Windows-CAPI2/Operational /ca:"O:BAG:SYD:(A;;0x7;;;BA)(A;;0x2;;;AU)(A;;0x1;;;S-1-5-32-573)"
%SystemRoot%\System32\wevtutil.exe sl "Microsoft-Windows-AppLocker/EXE and DLL" /ms:102432768

Esdeveniments rellevants per a USB i activitat de dispositiu: DriverFrameworks-UserMode: 2003, 2004, 2006, 2010, 2100, 2101, 2105, 2106 i 2102 (desconnexió) . Al canal de Seguretat i Sistema, amplia auditoria per a creació de processos (4688), canvis de registre (4657), sessions RDP (4778/4779), recursos compartits (5140, 5142, 5144), temps del sistema (4616), inicis/tancs en línia (12/13/1074) sospitosa.

  Windows Classic Remastered: el concepte nostàlgic que conquereix els usuaris

Subscripcions WEF predefinides: “línia base” amb esdeveniments de seguretat, AppLocker, Sysmon/Operational (si s'aplica), SMBClient/Operational, Error Reporting, TaskScheduler/Operational , etc.; i “sospitosa” amb xarxa (logon tipus 3), DNS Client/Operational (3008, filtrant buits), CAPI2 (11/70/90), PowerShell/Operational (4103-4106) , DriverFrameworks-UserMode/Operational (2004) i més. Ajusta “llegir esdeveniments existents” a true a la de sospitosos per escombrar històric.

Opcions avançades: forçar format “Events” amb WECUTIL per doblegar capacitat i personalitzar latència/mida de lot:

wecutil ss "NombreSuscripcion" /cf:Events
wecutil ss "NombreSuscripcion" /cm:Custom
wecutil ss "NombreSuscripcion" /dmi:1
wecutil ss "NombreSuscripcion" /dmlt:10

Registre de PowerShell i anàlisi forense

PowerShell des de la v5.0 activa el registre de blocs de script (4104) per defecte , amb fragmentació en múltiples esdeveniments quan el contingut és gran. Això permet reconstruir scripts executats, clau en resposta a incidents.

Per a reconstruccions, filtra per ScriptBlock ID i ordena per seqüència per concatenar el contingut original, encara que només recuperes part per rotació de logs:

# Extraer eventos 4104 con un ScriptBlockID concreto
$evts = Get-WinEvent -FilterHashtable @{ Path='C:\Ruta\Microsoft-Windows-PowerShell%4Operational.evtx'; ProviderName='Microsoft-Windows-PowerShell'; Id=4104 } |
        Where-Object { $_.Message -like '*51baf005-40a5-4878-ab90-5ecc51cab9af*' }
$sorted = $evts | Sort-Object { $_.Properties[0].Value }
$sorted | Select-Object TimeCreated, ActivityId, Id, Message
# Unir el contenido del script si tuvieras todos los segmentos
# ($sorted | ForEach-Object { $_.Properties[2].Value }) -join '' | Out-File script_reconstruido.ps1 -Encoding UTF8

Regla d'or: augmenta mides de logs i habilita canals que no vénen actius per evitar perdre artefactes per rotació. En entorns moderns, incrementar canals i mides de EVTX no sol impactar rendiment de manera apreciable.

ADAudit Plus i altres integracions

Per a una visió centrada en servidors de fitxers, ADAudit Plus inclou reports d'USB Storage Auditing amb detalls de “file read”, “file modified”, “copy/paste” i “removable device plug-in”. També ofereix cerca per servidor, ruta, autor del canvi i missatge.

En ecosistemes més amplis, Microsoft Endpoint Manager, ManageEngine Endpoint Central i Ivanti fixen polítiques i consoliden senyals de dispositius extraïbles, i un SIEM (Splunk/Elastic) recol·lecta esdeveniments i alerta segons regles i machine learning. Aquest encaix cobreix tant el compliment com la detecció primerenca.

Posada en producció i seguretat

Amb tot això, tens una ruta completa: inventari i esdeveniments en temps real amb PowerShell, API central amb Flask, automatització a l'arrencada, seguretat d'extrem a extrem i WEF per escalar . Si a més alimentes un SIEM i reforces auditoria de seguretat (línia base + sospitosa), obtindràs visibilitat granular, context forense i capacitat de reacció davant d'accessos no autoritzats o intents d'infecció per USB.

Isaac

Isaac

Redactor apassionat del món dels bytes i la tecnologia en general. M'encanta compartir els meus coneixements a través de l'escriptura, i això és el que faré en aquest bloc, mostrar tot el més interessant sobre gadgets, programari, maquinari, tendències tecnològiques, i més. El meu objectiu és ajudar-te a navegar pel món digital de forma senzilla i entretinguda.