martedì 17 maggio 2022

PowerShell: Impedire l'accesso ai dati crittografati su un volume BitLocker

Il cmdlet Lock-BitLocker impedisce l'accesso a tutti i dati crittografati su un volume che utilizza BitLocker Drive Encryption. Per ripristinare l'accesso si utilizza il cmdlet Unlock-BitLocker.
Il cmdlet richiede di specifcare il volume da bloccare indicando la lettera dell'unità o un'oggetto volume BitLocker. Con Lock-BitLocker non è possibile bloccare un volume che ospita il sistema operativo. Se si tenta di bloccare un volume già bloccato non viene eseguita alcuna operazione.


Sintassi

Lock-BitLocker
    [-MountPoint] <String[]>
    [-ForceDismount]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

Parametri

-Confirm
Chiede conferma prima di eseguire il cmdlet.

-ForceDismount
Specificando tale parametro, il cmdlet tenta di bloccare l'unità anche se è in uso.

-MountPoint
Specifica un array di lettere di unità o di oggetti volume BitLocker. Il cmdlet tenta di bloccare i volumi specificati. 

-WhatIf
Mostra cosa accadrebbe se il cmdlet venisse eseguito. Il cmdlet non viene eseguito.


Esempi

Esempio 1
Lock-BitLocker -MountPoint "E:" -ForceDismount
Questo comando blocca il volume BitLocker specificato con il parametro MountPoint. Il comando utilizza il parametro ForceDismount per bloccare il volume anche se è in uso.

Lock-BitLocker
FIG 1 - Lock-BitLocker





venerdì 13 maggio 2022

PowerShell: Abilitare BitLocker tramite il cmdlet Enable-BitLocker

Il cmdlet Enable-BitLocker permette l'abilitazione di BitLocker Drive Encryption per uno specifico volume.
Per abilitare la crittografia tramite BitLocker, è necessario indicare un volume, l'eventuale metodo di crittografia desiderato e la protezione della chiave. Il volume può essere specificato tramite la lettera dell'unità o specificando un oggetto volume BitLocker. Per quanto riguarda il metodo di crittografia, è possibile scegliere tra gli algoritmi Advanced Encryption Standard (AES) AES-128 o AES-256, oppure utilizzare la crittografia hardware se supportata dall'hardware del disco. BitLocker usa un protettore di chiavi per cifrare la chiave di crittografia del volume. Quando un utente accede a un'unità crittografata con BitLocker, come all'avvio del computer, BitLocker richiede il relativo protettore di chiave che può essere, per esempio, un PIN richiesto all'utente oppure un'unità USB contenente la chiave. BitLocker decifra la chiave di crittografia e la usa per leggere i dati dall'unità. Per la protezione della chiave può essere utilizzato uno dei seguenti metodi o una loro combinazione:
  • Trusted Platform Module (TPM). BitLocker usa il TPM del computer per proteggere la chiave di crittografia. Gli utenti potranno accedere all'unità crittografata finché è collegata alla scheda di sistema che ospita il TPM e l'integrità dell'avvio del sistema è intatta. In generale, le protezioni basate sul TPM possono essere associate solo a un volume del sistema operativo.
  • TPM e numero di identificazione personale (PIN). BitLocker usa una combinazione di TPM e un PIN fornito dall'utente. Un PIN è composto da quattro a venti caratteri (numeri, simboli, lettere, spazi).
  • TPM, PIN e chiave di avvio. BitLocker utilizza una combinazione di TPM, un PIN fornito dall'utente e un input da un dispositivo di memoria USB che contiene una chiave esterna.
  • TPM e chiave d'avvio. BitLocker usa una combinazione di TPM e input da un dispositivo di memoria USB.
  • Chiave d'avvio. BitLocker usa l'input da un dispositivo di memoria USB che contiene la chiave esterna.
  • Password. BitLocker usa una password.
  • Chiave di recupero. BitLocker usa una chiave di recupero memorizzata come file specificato.
  • Password di recupero. BitLocker usa una password di recupero.
  • Account Active Directory Domain Services (AD DS). BitLocker usa l'autenticazione del dominio.

Per aggiungere un nuovo protettore dopo aver abilitato la crittografia del volume è possibile utilizzare il cmdlet Add-BitLockerKeyProtector.

Per un protettore di password o chiave pin si può creare un stringa sicura tramite l'utilizzo del cmdlet ConvertTo-SecureString. Le stringhe sicure possono essere utilizzate all'interno di script mantenendo la riservatezza delle password.

Il cmdlet Enable-BitLocker restituisce un oggetto volume BitLocker. Se viene impostata la password di recupero come protezione della chiave ma non viene esplicitamente specificata, questo cmdlet provvederà a generarne una in maniera casuale di 48 cifre. Il cmdlet memorizza la password come campo RecoveryPassword dell'attributo KeyProtector dell'oggetto volume BitLocker.

Se viene utilizzata la chiave di avvio o la chiave di recupero come parte del protettore di chiavi, è opportuno fornire un percorso in cui memorizzare la chiave. In questo caso il cmdlet memorizzerà il nome del file che contiene la chiave nel campo KeyFileName del campo KeyProtector nell'oggetto volume BitLocker.

Se si usa il cmdlet Enable-BitLocker su un volume crittografato o su un volume con crittografia in corso, esso non compie alcuna azione. Se il cmdlet viene utilizzato su un'unità che ha la crittografia in pausa, riprende la crittografia sul volume.

Per impostazione predefinita, questo cmdlet cripta l'intera unità. Per crittografare solo lo spazio usato nel disco è necessario specificare il parametro UsedSpaceOnly. Questa opzione può ridurre significativamente il tempo di crittografia.

È una pratica comune aggiungere una password di recupero a un volume del sistema operativo utilizzando il cmdlet Add-BitLockerKeyProtector, salvare la password di recupero utilizzando il cmdlet Backup-BitLockerKeyProtector, e infine abilitare BitLocker per l'unità. Questa procedura assicura un'opzione di recupero.



Sintassi

Enable-BitLocker
      [-MountPoint] <String[]>
      [-EncryptionMethod <BitLockerVolumeEncryptionMethodOnEnable>]
      [-HardwareEncryption]
      [-SkipHardwareTest]
      [-UsedSpaceOnly]
      [-PasswordProtector]
      [[-Password] <SecureString>]
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]

Enable-BitLocker
      [-MountPoint] <String[]>
      [-EncryptionMethod <BitLockerVolumeEncryptionMethodOnEnable>]
      [-HardwareEncryption]
      [-SkipHardwareTest]
      [-UsedSpaceOnly]
      [-RecoveryPasswordProtector]
      [[-RecoveryPassword] <String>]
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]

Enable-BitLocker
      [-MountPoint] <String[]>
      [-EncryptionMethod <BitLockerVolumeEncryptionMethodOnEnable>]
      [-HardwareEncryption]
      [-SkipHardwareTest]
      [-UsedSpaceOnly]
      [-StartupKeyProtector]
      [-StartupKeyPath] <String>
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]

Enable-BitLocker
      [-MountPoint] <String[]>
      [-EncryptionMethod <BitLockerVolumeEncryptionMethodOnEnable>]
      [-HardwareEncryption]
      [-SkipHardwareTest]
      [-UsedSpaceOnly]
      [-StartupKeyPath] <String>
      [-TpmAndStartupKeyProtector]
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]

Enable-BitLocker
      [-MountPoint] <String[]>
      [-EncryptionMethod <BitLockerVolumeEncryptionMethodOnEnable>]
      [-HardwareEncryption]
      [-SkipHardwareTest]
      [-UsedSpaceOnly]
      [-StartupKeyPath] <String>
      [-TpmAndPinAndStartupKeyProtector]
      [[-Pin] <SecureString>]
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]

Enable-BitLocker
      [-MountPoint] <String[]>
      [-EncryptionMethod <BitLockerVolumeEncryptionMethodOnEnable>]
      [-HardwareEncryption]
      [-SkipHardwareTest]
      [-UsedSpaceOnly]
      [-AdAccountOrGroupProtector]
      [-Service]
      [-AdAccountOrGroup] <String>
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]

Enable-BitLocker
      [-MountPoint] <String[]>
      [-EncryptionMethod <BitLockerVolumeEncryptionMethodOnEnable>]
      [-HardwareEncryption]
      [-SkipHardwareTest]
      [-UsedSpaceOnly]
      [[-Pin] <SecureString>]
      [-TpmAndPinProtector]
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]

Enable-BitLocker
      [-MountPoint] <String[]>
      [-EncryptionMethod <BitLockerVolumeEncryptionMethodOnEnable>]
      [-HardwareEncryption]
      [-SkipHardwareTest]
      [-UsedSpaceOnly]
      [-TpmProtector]
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]

Enable-BitLocker
      [-MountPoint] <String[]>
      [-EncryptionMethod <BitLockerVolumeEncryptionMethodOnEnable>]
      [-HardwareEncryption]
      [-SkipHardwareTest]
      [-UsedSpaceOnly]
      [-RecoveryKeyProtector]
      [-RecoveryKeyPath] <String>
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]   



Parametri

-AdAccountOrGroup
Specifica un account usando il formato Domain\User. Questo cmdlet aggiunge l'account specificato come key protector per la chiave di crittografia del volume.

-AdAccountOrGroupProtector
Indica che BitLocker usa un account AD DS come protezione per la chiave di crittografia del volume.

-Confirm
Chiede conferma prima di eseguire il cmdlet.

-EncryptionMethod
Permette di specificare un metodo di crittografia da utilizzare. I valori accettabili per questo parametro sono:
  • Aes128
  • Aes256
  • Hardware

-HardwareEncryption
Indica che il volume utilizza la crittografia hardware.

-MountPoint
Specifica un array di lettere di unità o di oggetti volume BitLocker. Questo cmdlet abilita la protezione per i volumi specificati. Per ottenere un oggetto volume BitLocker viene utilizzato il cmdlet Get-BitLockerVolume.

-Password
Specifica un oggetto secure string che contiene una password. La password specificata funge da protezione per la chiave di crittografia del volume.

-PasswordProtector
Indica che BitLocker usa una password come protezione per la chiave di crittografia del volume.

-Pin
Specifica un oggetto stringa sicura che contiene un PIN. BitLocker usa il PIN specificato, con altri dati, come protezione per la chiave di crittografia del volume.

-RecoveryKeyPath
Specifica il percorso di una cartella. Questo parametro aggiunge una chiave di recupero generata casualmente come protezione per la chiave di crittografia del volume e la memorizza nel percorso specificato.

-RecoveryKeyProtector
Indica che BitLocker usa una chiave di recupero come protezione per la chiave di crittografia del volume.

-RecoveryPassword
Specifica una password di recupero. Se tale parametro non viene specificato ma viene incluso il parametro RecoveryPasswordProtector, il cmdlet crea una password casuale. É possibile inserire una password di 48 cifre. La password specificata o creata funge da protezione per la chiave di crittografia del volume.

-RecoveryPasswordProtector
Indica che BitLocker utilizza una password di recupero come protezione per la chiave di crittografia del volume.

-Service
Indica che l'account di sistema di questo computer sblocca il volume cifrato.

-SkipHardwareTest
Indica che BitLocker non esegue un test dell'hardware prima di iniziare la crittografia. BitLocker usa un test dell'hardware come una prova generale per assicurarsi che tutti i protettori di chiavi siano impostati correttamente e che il computer possa partire senza problemi.

-StartupKeyPath
Specifica un percorso per una chiave di avvio. La chiave memorizzata nel percorso specificato funge da protezione per la chiave di crittografia del volume.

-StartupKeyProtector
Indica che BitLocker usa una chiave di avvio come protezione per la chiave di crittografia del volume.

-TpmAndPinAndStartupKeyProtector
Indica che BitLocker usa una combinazione di TPM, un PIN e una chiave di avvio come protezione per la chiave di crittografia del volume.

-TpmAndPinProtector
Indica che BitLocker usa una combinazione di TPM e un PIN come protezione per la chiave di crittografia del volume.

-TpmAndStartupKeyProtector
Indica che BitLocker usa una combinazione di TPM e una chiave di avvio come protezione per la chiave di crittografia del volume

-TpmProtector
Indica che BitLocker usa il TPM come protezione per la chiave di crittografia del volume.

-UsedSpaceOnly
Indica che BitLocker cripta esclusivamente lo spazio utilizzato del volume.

-WhatIf
Mostra cosa accadrebbe se il cmdlet venisse eseguito. Il cmdlet non viene eseguito.


Esempi

Esempio 1
Enable-BitLocker -MountPoint "E:" -EncryptionMethod Aes128 -RecoveryKeyPath "C:\Temp\" -RecoveryKeyProtector
Questo cmdlet abilita la crittografia sul volume E: utilizzando l'algoritmo AES128. Con il parametro -RecoveryKeyPath viene specificato un percorso per una cartella in cui la chiave di recupero generata casualmente sarà memorizzata. Il parametro -RecoveryKeyProtector indica che questi volumi utilizzano una chiave di recupero come protezione della chiave.

Enable-BitLocker
FIG 1 - Enable-BitLocker



Esempio 2
$SecureString = ConvertTo-SecureString "12345" -AsPlainText -Force
Enable-BitLocker -MountPoint "C:" -EncryptionMethod Aes256 -UsedSpaceOnly -Pin $SecureString -TPMandPinProtector
Questo esempio abilita BitLocker per un'unità specificata usando il TPM e un PIN per la protezione della chiave.
Il primo comando usa il cmdlet ConvertTo-SecureString per creare una stringa sicura contenente un PIN e la memorizza nella variabile $SecureString
Il secondo comando abilita la crittografia BitLocker per il volume identificato dalla lettera C:. Viene specificato l'algoritmo Aes256 per la crittografia e il PIN salvato nella variabile $SecureString. Il parametro -UsedSpaceOnly consente di criptare solo i dati dello spazio utilizzato sul disco, invece che l'intero volume, mentre -TPMandPinProtector specifica che il volume utilizza una combinazione di TPM e PIN come protezione della chiave.





giovedì 12 maggio 2022

PowerShell: Visualizzare informazioni sui volumi protetti da BitLocker

BitLocker è una funzionalità di protezione dei dati integrata nei sistemi operativi Microsoft, a partire da Windows Vista Enterprise e successivi, che permette di crittografare interi volumi. Per impostazione di default viene usato l'algoritmo di crittografia AES nella modalità CBC con una chiave di 128 bit. Windows viene fornito con il modulo PowerShell "Bitlocker" che permette la gestione della crittografia dei dischi. Per visualizzare l'elenco completo dei cmdlet che fanno parte di tale modulo, basta eseguire il seguente comando in una finestra PowerShell
Get-Command -Module BitLocker
PowerShell, Modulo BitLocker
FIG 1 - PowerShell, Modulo BitLocker

Per visualizzare le informazioni sui volumi protetti e proteggibili da BitLocker Drive Encryption si ricorre al cmdlet Get-BitLockerVolume

Sintassi

Get-BitLockerVolume
   [[-MountPoint] <String[]>]
   [<CommonParameters>]
   

Parametri

- MountPoint
Permette di specificare la lettera dell'unità (o un array di lettere di unità) da cui ottenere le informazioni sullo stato BitLocker.


Esempi


Esempio 1
Get-BitLockerVolume | Select-Object -Property *
Visualizza le informazioni di tutti i volumi presenti nel sistema. Tra le informazioni visualizzate troviamo:
  • ComputerName: Nome del computer.
  • MountPoint: Lettera di unità.
  • EncryptionMethod: Indica l'algoritmo di crittografia e la dimensione della chiave utilizzati sul volume.
  • AutoUnlockEnabled: Indica se BitLocker utilizza lo sblocco automatico per il volume.
  • MetadataVersion: Restituisce la versione dei metadati FVE del volume.
    0 - Unknown. Il sistema operativo è sconosciuto;
    1 - Vista. Formato Windows Vista, significa che il volume è stato protetto con BitLocker su un computer con Windows Vista.
    2 - Win7. Formato Windows 7, il che significa che il volume è stato protetto con BitLocker su un computer con Windows 7 o il formato dei metadati è stato aggiornato utilizzando il metodo UpgradeVolume.
  • VolumeStatus: Se BitLocker attualmente protegge alcuni, tutti o nessuno dei dati sul volume.
  • ProtectionStatus: Stato delle protezione BitLocker.
  • LockStatus: Stato di blocco.
  • EncryptionPercentage: Percentuale del volume protetto da BitLocker. Se BitLocker utilizza attualmente un protettore di chiavi per crittografare la chiave di crittografia del volume.
  • VolumeType: Dati o sistema operativo.
  • CapacityGB: Dimensione dell'unità.
  • KeyProtector: Tipo di protettore o protettori di chiavi.
Get-BitLockerVolume
FIG 2 - Get-BitLockerVolume

Esempio 2
Get-BitLockerVolume -MountPoint "C:" | Format-List
Visualizza  tutte le informazioni BitLocker relative al volume specificato.

Esempio 3
BitLockerVolume -MountPoint "C:"
Visualizza le informazioni BitLocker principali relative al volume specificato

BitLockerVolume -MountPoint
FIG 3 - BitLockerVolume -MountPoint






mercoledì 11 maggio 2022

Windows 10: Ripristinare l'opzione "Apri con" nel menu contestuale

La funzione "Apri con" all'interno del menu contestuale viene spesso utilizzata per aprire un file con un determinato programma (diverso da quello predefinito) o per impostare una nuova app predefinita per quel tipo di file. La procedura consiste nel cliccare, con il tasto destro del mouse, sul file per poi andare sull'opzione "Apri con" e selezionare uno dei programmi dalla lista oppure cliccare su "Scegli un'altra app" per selezionare manualmente un'app non presente in elenco.
Può capitare che la voce "Apri con" non appaia all'interno del menu contestuale. In questo caso, per ripristinarla, basta intervenire all'interno del registro di sistema:
  • Premere la combinazione di tasti WIN+per aprire la finestra di dialogo Esegui e digitare regedit seguito da invio per avviare l'Editor del Registro di sistema;
  • Posizionarsi su
    HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers\Open With se la chiave non è presente, crearla manualmente
  • Modificare il valore stringa "Predefinito" inserendo nel campo Dati valore la seguente stringa e cliccare su OK
    {09799AFB-AD67-11d1-ABCD-00C04FC30936}
    Ripristinare Apri con nel menu contestuale
    FIG 1 - Ripristinare Apri con nel menu contestuale

L'opzione "Apri con" nel menu contestuale dovrebbe essere disponibile immediatamente. In caso contrario, riavviare il processo explorer.exe o disconnettersi e riconnettersi al sistema.

Per chi non volesse mettere le mani all'interno del registro di sistema, dal seguente link è possibile scaricare il file .reg per ripristinare l'opzione "Apri con" all'interno del menu contestuale.






sabato 30 aprile 2022

PowerShell: Identificazione del dominio connesso

Un modo rapido per determinare il nome del dominio a cui è connesso il sistema è WMI. Dalla finestra PowerShell eseguire:
Get-CimInstance -ClassName Win32_NTDomain

Il comando visualizza il nome del dominio a cui il sistema è connesso, il DNS Forest Name e il nome del Domain Controller. Se il sistema non è connesso ad un dominio, il risultato sarà un oggetto vuoto.
Identificazione del dominio connesso
FIG 1 - Identificazione del dominio connesso






venerdì 29 aprile 2022

PowerShell: Estrarre l'icona da un file eseguibile

Quasi la totalità dei file eseguibili contiene al suo interno un'icona che lo contraddistingue dagli altri file. Tramite PowerShell è possibile estrarre l'icona presente all'interno di un file eseguibile e salvarla in un file con estensione .ico. Per eseguire tale operazione bastano poche righe di codice:

 # Specifica la cartella dove verrà salvato il file .ico  
 $dest = "c:\Temp"  
   
 # Crea la cartella se non presente  
 mkdir $dest -ErrorAction Ignore  
   
 # Carica la classe di .NET Framework: System.Drawing   
 Add-Type -AssemblyName System.Drawing  
   
 # Estrae l'icona di regedit.exe  
 $fileExe = "$env:windir\regedit.exe"  
 $fileIco = "$dest\regedit.ico"  
 [System.Drawing.Icon]::ExtractAssociatedIcon($fileExe).ToBitmap().Save($fileIco)  
   
 # Visualizza in Esplora file la cartella contenente l'icona estratta  
 explorer $dest   

Per estrarre l'icona da un file viene utilizzata la classe .NET Framework System DrawingIl codice sopra riportato è molto semplice e i commenti aiutano a capire il suo funzionamento.





giovedì 28 aprile 2022

PowerShell: Download di file da Internet

Nell'articolo PowerShell: Visualizzare l'intestazione HTTP di un sito web è stato mostrato come, utilizzando il cmdlet Invoke-WebRequest, recuperare le informazioni contenute all'interno dell'intestazione HTTP di un sito web. 
Invoke-WebRequest, oltre a consentire di inviare richieste a servizi web, può essere utilizzato anche per comunicare con sistemi remoti e per il trasferimento di dati. Le istruzioni mostrate di seguito utilizzano il cmdlet Invoke-WebRequest per per scaricare un file da Internet (in questo caso si tratta di un'immagine) in un modo molto semplice:
 $url = 'https://images-assets.nasa.gov/image/iss066e174306/iss066e174306~orig.jpg'  
 $dest= "c:\temp\picture_iss.jpg"  
   
 Invoke-WebRequest -UseBasicParsing -Uri $url -OutFile $dest   
   
 Invoke-Item -Path $dest  

Le prime due righe permettono di specificare il percorso del file da scaricare (variabile $url) e il percorso dove salvarlo (variabile $dest).
Nella riga successiva viene eseguito il cmdlet Invoke-Webrequest a cui vengono passate le variabili $url e $dest inizializzate precedentemente. Il parametro -UseBasicParsing impedisce al cmdlet di usare il vecchio e deprecato modello di oggetto "Internet Explorer" che può causare problemi. Prima di utilizzare il codice sopra riportato è bene ricordare che Invoke-WebRequest potrebbe non funzionare con i vecchi protocolli di rete e TLS.

L'ultima riga non fa altro che aprire l'immagine scaricata con il visualizzatore predefinito.