PowerShell USB-tapahtumien havaitsemiseen ja toimintojen suorittamiseen

Viimeisin päivitys: 27/08/2025
Kirjoittaja: Isaac
  • PowerShell mahdollistaa yhteyksien ja katkosten havaitsemisen USB reaaliajassa ja lähettää ne keskuspalvelimelle API:n kautta.
  • Tapahtumakanavien käyttöönotto ja WEF:n käyttö tarjoavat yritystason ja rikostutkinnan kontekstin SIEM:n rinnalla.
  • Tuotantoympäristössä yhdistyvät tehtävien ajoitus, päätepisteiden suojaus ja taustajärjestelmän suojauksen vahvistaminen.

USB-tapahtumien valvonta PowerShellin avulla

Muistikorttien, levyjen ja oheislaitteiden liittäminen USB:n kautta voi avata enemmän ovia kuin miltä näyttää: tietovuodoista tartuntoihin haittaohjelmat kenenkään huomaamatta. USB-laitteiden valvonta ja lokien tallennus joukkueisiin tulo ja lähtö on siksi keskeinen mittari tietoverkkojen jota monet organisaatiot jo pitävät perustasona.

Hyvä uutinen on, että ekosysteemi Windows tarjoaa useita lähestymistapoja kaupallisista työkaluista natiiveihin menetelmiin, kuten PowerShelliin ja Windows Event Forwardingiin (WEF). Hyvin harkitun suunnittelun ansiosta USB-tapahtumat voidaan havaita reaaliajassa, tallentaa, lähettää keskuspalvelimelle ja korreloida. muiden turvamerkkien kanssa, kaikki ilman käyttäjän kitkaa.

Yleiskatsaus ja työkalut USB-laitteiden seurantaan

Säännellyissä yrityksissä (rahoitus, terveydenhuolto jne.) valvonta ja jäljitettävyys ovat välttämättömiä. Tavoitteena on tunnistaa luvattomat laitteet nopeasti, estää tietovuodot ja havaita yritykset levittää haittaohjelmia siirrettäviltä tietovälineiltä.

Jos etsit jotain valmista, on olemassa tiettyjä apuohjelmia. USB-laiteseurantalaite helpottaa jatkuvaa inventointia ja auditointia, tallentaen tunnisteita, laitetyyppiä ja yhteys-/katkaisuaikoja sekä hyödyllisiä raportteja kuvioiden tai uhkien tunnistamiseksi.

On myös kevyitä apuohjelmia. USBDeview (NirSoft) näyttää nykyiset ja aiemmat USB-laitteet; ei lähetä tietoja palvelimelle yksinään, mutta se integroituu hyvin skripteihin, jotka automatisoivat vientiä tai ilmoituksia infrastruktuurissasi.

Laajamittaisissa tilanteissa päätepistepaketit auttavat konsolidoinnissa. Microsoft Endpoint Manager, ManageEngine Endpoint Central tai Ivanti Ne mahdollistavat USB-laitekäytäntöjen ja lokien luomisen yritystasolla, raporttien kanssa tai lähettämisen keskitettyihin tietovarastoihin.

Korrelaatiota ja hälytyksiä varten SIEM, kuten Splunk tai Elastic Stack Se voi käsitellä USB-tapahtumia ja laukaista havaintoja reaaliajassa. Nämä alustat tunnistavat epäilyttävän toiminnan (yhteydet aukioloaikojen ulkopuolella, luvattomat laitteet jne.) ja Ne sopivat täydellisesti PowerShellistä tai WEF:stä dataa syöttävään putkeen..

Ratkaisut USB:n auditointiin

Havaitseminen ja reagointi PowerShellin avulla: USB-tapahtumat ja lähettäminen palvelimelle

Jos haluat joustavuutta, käsikirjoitus PowerShellissä oma on erittäin tehokas. Voit havaita yhteyksiä ja katkoksia reaaliajassa, rikastuttaa metadatalla ja julkaista REST-rajapintaan taustajärjestelmääsi varten.

Listaa ensin tiettynä ajankohtana kytkettynä olevat USB-laitteet. Win32_DiskDrive-luokka, jossa on InterfaceType USB, on hyvä lähtökohta., vaikka on suositeltavaa täydentää sarjanumeroa PnP-tiedoilla, jos ne ovat saatavilla:

# 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

Varaston lisäksi avainasemassa on aika todellinen. PowerShell voi tilata järjestelmätapahtumia reagoidakseen välittömästi laitetta kytkettäessä tai irrotettaessa:

# 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

Jos haluat tallentaa myös yksityiskohtia laitteisto juuri asetetun USB-levyn yhdistää Win32_VolumeChangeEventin Win32_DiskDriven päivitykseen ja ristiviittaukset niteen/julisteen mukaan tarpeen mukaan. Voit myös seurata Win32_DeviceChangeEvent yleisten laitetapahtumien osalta:

# 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

Kertaluonteista vedosta ja välitöntä JSON-toimitusta palvelimellesi varten putki on suora. Seuraava malli kerää nykyiset USB-muistitikut, muuntaa ne JSON-muotoon ja julkaisee ne API:ssa:

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'

Inventaarion ja lisäysten/poistojen lisäksi Windows kirjaa USB:hen liittyvän käyttäjän ajuritoiminnan. Ota käyttöön Microsoft-Windows-DriverFrameworks-UserMode/Operational-kanava ja tarkastelee keskeisiä tapahtumia: yhteyden muodostumista (esim. 2003, 2004, 2006, 2010) ja katkaisua (2102, 2105, 2106) hyödyllisten metatietojen, kuten valmistajan, mallin tai instanssipolkujen, avulla.

  Näin voit avata PPS-tiedostoja Windows 10:ssä.

Reaaliaikainen USB-tunnistus PowerShellin avulla

REST-rajapinta Flaskissa lokien keskittämiseen

Tarvitset yksinkertaisen vastaanottimen datan tallentamiseen ja hyödyntämiseen. Flaskin avulla voit käynnistää /api/usblog-päätepisteen. materiaalin validointi, tallennus ja valmistelu myöhempää analyysia tai SIEM-järjestelmään lähettämistä varten:

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)

Aloitaksesi Asenna Flask pip-komennolla ja tallenna skripti (esim. server.py) ja suorita se. Sieltä PowerShell-skriptisi voi lähettää tapahtumia osoitteeseen http://SERVER_IP:5000/api/usblog lisäämällä X-Api-Token-otsikon, jos olet ottanut sen käyttöön.

Vaikka tässä kirjoitamme tiedostoon yksinkertaisuuden vuoksi, Voit lähettää tietokantaan tai SIEM-järjestelmääntai jopa haarautumaan: SIEM-järjestelmään online-analytiikkaa varten ja datajärveen (Hadoop/HDInsight) pitkäaikaista säilytystä ja suurten tietomäärien rikostutkintaa varten.

REST-rajapinta USB-tapahtumille

Julkaisu: Automaattinen käynnistys, tietoturva, WEF ja analytiikka

Jotta et olisi riippuvainen kenenkään kädestä uudelleenkäynnistyksen jälkeen, automatisoi tavaratila PowerShell-skriptistä Tehtävien ajoituksen tai Käynnistys-kansion avulla ja suojaa käyttöönotto hyvillä tietoturvakäytännöillä.

Automaattinen käynnistys Windowsissa

Tehtävien ajoituksen avulla: Luo tehtävä, jolla on maksimikäyttöoikeudet, ja käynnistä se kirjautumisen tai järjestelmän käynnistyksen yhteydessäToimintona suorita powershell.exe siten, että NoProfile ja ExecutionPolicy Bypass osoittavat .ps1-tiedostoosi.

Jos haluat käyttää kotikansiota: Luo .bat-tiedosto, joka käynnistää komentosarjan, ja sijoita se kansioon %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup.Se on yksinkertainen ja toimii hyvin käyttäjien työasemilla.

Esimerkki .bat-tiedostosta: powershell.exe -NoProfile -ExecutionPolicy Bypass -Tiedosto «C:\path\script.ps1», säätämällä polkua ympäristöösi ja varmistamalla, että skripti on allekirjoitettu tai tulee luotettavasta lähteestä.

Turvallisuussuositukset

Suojaa API:a: Palomuurisuodatus, vaaditaan token tai mTLS ja käytetään nopeusrajoituksiaVältä päätepisteen paljastamista tarvittavan verkon ulkopuolelle ja tallenna yksityiskohtaisesti vain tarvittava määrä henkilötietoja.

  Tulostimien ja porttien löytäminen WMI:n ja perus-SNMP:n avulla

Kovettaa asiakasta: käytä palvelutilejä vähimmäisoikeuksillaKierrä tokenia, validoi TLS tarvittaessa ja hallitse ExecutionPolicy:tä ryhmäkäytäntöobjekteilla, jos sovellettavissa; allekirjoita skripti ja validoi eheys, jos mahdollista.

Suorita säännöllisiä tarkastuksia: tarkista palvelimen ja asiakkaan lokit, vertaa epätavallisia kaavoja ja ristiviittauksia laitehallintakäytäntöihin luvattoman käytön tai väärinkäytösten havaitsemiseksi.

Windows Event Forwarding (WEF) yrityskäyttöön

Kun haluat Windowsissa skaalautuvuutta ja vikasietoisuutta, WEF välittää tapahtumat Windows Event Collector (WEC) -palvelimelle ilman lisäagenttien asentamista. Se on passiivinen lokikirjauksen suhteen: se ei ota käyttöön kanavia tai muutosten tarkastuksia; nämä asetukset on otettava käyttöön ryhmäkäytäntöobjektin kautta.

Tuplatilausmalli: lähtötaso (kaikille laitteille) ja epäilty (osajoukolle hälytyksen jälkeen)Epäiltyjen luettelo kerää enemmän signaaleja rikostutkinnan kontekstissa, ja sitä voidaan päivittää vaikuttamatta muihin luetteloihin.

Suositeltu datan kohde: Lähtötilanne SEM/SIEM tai SQL; epäilty MapReduce/HDInsight/Data Lake -järjestelmään äänenvoimakkuutensa ja alhaisemman signaali-kohinasuhteensa vuoksi. SIEM korreloi ja hälyttää koneen nopeudella; tiedot säilyvät vuosia ja mahdollistavat monimutkaisen analyysin.

Ohjeellinen skaalautuvuus: Jopa 5.000 5.000 tapahtumaa sekunnissa SQL/SEM:ssä; 50.000 XNUMX–XNUMX XNUMX SEM:ssä; sen ylittyessä käytetään datalampeaTavallisilla WEC-palvelimilla käytännön luku on yhteensä noin 3.000 XNUMX tapahtumaa sekunnissa laitteistosta ja levyistä riippuen.

Työnnä vs. vedä: Joustavin on tilaus, jonka aloittaa tilaaja (push). ryhmäkäytäntöobjektin määrittämä. Pull-toiminto edellyttää asiakkaiden esimäärittelyä WEC:ssä ja etätapahtumien lukuoikeuksia (tunnistetietojen lisäämistä tapahtumalokin lukijaryhmään).

Salaus ja todennus: Verkkotunnuksessa Kerberos-salaus oletuksena (NTLM valinnainen)HTTPS:ää käytetään varmennetodennuksen kanssa, kun Kerberos ei ole käytettävissä. Todennus on molemmissa tapauksissa molemminpuolista.

Muoto ja tiheys: Oletusarvoinen ”Rendered Text”; vaihtoehtoinen ”Tapahtumat” (XML-binääri) on kompaktimpiToimitustilat: Normaali, Minimoi kaistanleveys (työntö, erät ~6 tunnin välein), Minimoi viive (työntö, erät ~30 s) tai mukautettu WECUTIL:n kautta DeliveryMaxItems- ja DeliveryMaxLatencyTime-parametreilla.

WEC:n käytännön rajoitukset: EVTX-lokilevy (I/O), samanaikaiset TCP-yhteydet ja lokin koko (pysyvät avaimet lähdettä kohden). Suurille tiedostomuodoille wecutil.exe on parempi vaihtoehto kuin Tapahtumienvalvonta-konsoli.

Ota käyttöön avainkanavat ja koko lokit: DriverFrameworks-käyttäjätila/toiminnallinen (ota käyttöön ja laajenna noin 50 megatavuun), CAPI2/Operatiivinen (100 Mt ja oikeudet tapahtumalokin lukijoille) AppLocker (EXE/DLL ja MSI/Script, ~100 Mt). Käytä ryhmäkäytäntöä wevtutil-komentosarjojen kanssa:

%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

USB- ja laitetoimintaan liittyvät tapahtumat: DriverFrameworks-käyttäjätila: 2003, 2004, 2006, 2010, 2100, 2101, 2105, 2106 ja 2102 (yhteys katkaistu). Laajenna Suojaus ja järjestelmä -kanavassa valvontaa prosessien luonnille (4688), rekisterimuutoksille (4657), RDP-istunnoille (4778/4779), jaetuille resursseille (5140, 5142, 5144), järjestelmän ajalle (4616), käynnistyksille/pysäytyksille (12) ja muille perus- ja epäilyttävistä tilauksista kerätyille tiedoille.

  Scandiskin suorittaminen Windows 10:ssä: Täydellinen opas kiintolevyllesi

Ennalta määritetyt WEF-tilaukset: ”Perustaso” tietoturvatapahtumineen, AppLocker, Sysmon/Operational (jos sovellettavissa), SMBClient/Operational, virheraportointi, TaskScheduler/Operationaljne.; ja ”Epäilyttävä” verkon kanssa (kirjautumistyyppi 3), DNS-asiakas/Operational (3008, suodatusaukot), CAPI2 (11/70/90), PowerShell/Operational (4103-4106), DriverFrameworks-UserMode/Operational (2004) ja muita. Aseta ”lue olemassa olevat tapahtumat” arvoksi true epäiltyjen tapahtumien osalta historian skannaamiseksi.

Edistyneet asetukset: pakota "Tapahtumat"-muoto WECUTIL:n avulla Kapasiteetin kaksinkertaistaminen ja viiveen/eräkoon mukauttaminen:

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

PowerShell-lokitietojen kerääminen ja rikostutkinta

PowerShell versiosta 5.0 lähtien mahdollistaa komentosarjojen lohkoloki (4104) oletuksena, ja sisällön ollessa suuri, se voidaan fragmentoida useisiin tapahtumiin. Tämä mahdollistaa suoritettujen komentosarjojen rekonstruoinnin, mikä on avainasemassa tapahtumiin reagoinnissa.

Rekonstruktioita varten Suodata ScriptBlock-tunnuksen mukaan ja lajittele sekvenssin mukaan alkuperäisen sisällön yhdistämiseksi, vaikka palauttaisit vain osan siitä lokien kierron avulla:

# 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

Kultainen sääntö: Suurentaa lokien kokoa ja ottaa käyttöön kanavat, jotka eivät ole aktiivisia. välttääkseen artefaktien menettämisen rotaation vuoksi. Nykyaikaisissa ympäristöissä kanava- ja EVTX-kokojen kasvattaminen ei yleensä vaikuta merkittävästi suorituskykyyn.

ADAudit Plus ja muut integraatiot

Tiedostopalvelinkeskeistä näkymää varten ADAudit Plus sisältää USB-tallennustilan auditointiraportit tietoja ”tiedoston luku”, ”tiedoston muokattu”, ”kopioi/liitä” ja ”irrotettavan laitteen laajennus”. Se tarjoaa myös haun palvelimen, polun, muutoksen tekijän ja viestin mukaan.

Laajemmissa ekosysteemeissä Microsoft Endpoint Manager, ManageEngine Endpoint Central ja Ivanti asettaa käytäntöjä ja yhdistää irrotettavien laitteiden signaalit, ja SIEM (Splunk/Elastic) kerää tapahtumia ja hälytyksiä sääntöihin ja koneoppimiseen perustuva. Tämä viitekehys kattaa sekä vaatimustenmukaisuuden että varhaisen havaitsemisen.

Tuotannon käynnistys ja turvallisuus

Kaiken edellä mainitun perusteella sinulla on täydellinen reitti: Reaaliaikainen inventaario ja tapahtumat PowerShellin avulla, keskitetty API Flaskin avulla, käynnistyksen automatisointi, kokonaisvaltainen suojaus ja WEF skaalausta vartenJos käytät myös SIEM-järjestelmää ja vahvistat tietoturvan auditointia (lähtötaso + epäilty), saat yksityiskohtaista näkyvyyttä, rikosteknistä kontekstia ja kyvyn reagoida luvattomaan käyttöön tai USB-tartuntayrityksiin.