Breve explicación del funcionamiento de los comandos de encriptación en Windows, así como su puesta en ejecución a través de PowerShell Scripting con el único fin de simplificar estas tareas.
Antes de empezar a crear nuestro script en PowerShell, con el que realizaremos tareas de encriptación, primero debemos conocer una serie de términos y tecnologías que nos ayudarán a entender el funcionamiento de los procesos que vamos a utilizar.
¿Qué es Bitlocker?
Bitlocker
es una característica de Windows, que nos permite cifrar discos, con el objetivo de proteger sus datos. Si utilizamos BitLocker, este proporciona la máxima protección cuando se usa junto con un módulo de plataforma segura llamado TPM.
¿Qué es un TPM?
Un TPM
es un componente de hardware instalado en muchos dispositivos y funciona con BitLocker, para ayudar a proteger los datos de usuario y garantizar que un equipo no se ha alterado mientras el sistema está sin conexión.
El comando Get-Tpm
nos permite obtener información sobre el TPM. Otros comandos relacionados son:
- Clear-Tpm que resetea el TPM a su estado original.
- Initialize-Tpm es un proceso de preparación del TPM.
- Unblock-Tpm permite restablecer un bloqueo del TPM.
También podemos consultar esta información con la herramienta Información del Sistema o ejecutando Win+R -> msinfo32. Una vez en la herramienta buscamos la opción Secure Boot State, TPM o arranque seguro. Sino nuestro firmware no es compatible nos mostrará «No compatible«.
El cmdlet Get-BitLockerVolume
El cmdlet Get-BitLockerVolume
de PowerShell nos permite obtener toda la información necesaria sobre los volúmenes de Windows, así comoy conocer el tipo de protección de cada uno de ellos.
1 2 3 4 5 6 7 8 9 |
> Get-BitLockerVolume VolumeType Mount CapacityGB VolumeStatus Encryption KeyProtector AutoUnlock Protection Point Percentage Enabled Status ---------- ----- ---------- ------------ ---------- ------------ ---------- ---------- Data D: 232,88 FullyDecrypted 0 {} Off Data E: 232,88 FullyDecrypted 0 {} Off Data Z: 1.863,02 FullyDecrypted 0 {} Off OperatingSystem C: 223,01 FullyDecrypted 0 {} Off |
Veamos a continuación una breve explicación de la información que se muestra en cada una de las columnas:
- VolumeType corresponde al tipo de volumen, que podrá ser un Sistema Operativo o simplemente datos.
- Mount Point es el punto de montaje, que corresponde a una letra de unidad.
- CapacityGB indica la capacidad del volumen en GB (Gigabytes).
- VolumeStatus nos especifica si BitLocker está protegiendo los datos del volumen.
- Encryption Percentage corresponde al porcentaje del volumen protegido por Bitlocker.
- KeyProtector será el tipo de protector o protectores de claves.
- AutoUnlock Enabled nos indica si BitLocker usa el desbloqueo automático para el volumen.
- Protection Status nos dirá si BitLocker utiliza actualmente un protector de clave, para cifrar la clave de cifrado del volumen.
El comando manage-bde
El comando manage-bde
nos permite activar o desactivar BitLocker y nos proporciona opciones para poder especificar mecanismos de desbloqueo, métodos de recuperación de actualizaciones y opciones para desbloquear unidades de datos protegidas con BitLocker.
Entre las opciones más destacadas y que utilizaremos en nuestro script podemos destacar:
- manage-bde -protectors que nos permite administrar los métodos de protección usados para la clave de cifrado de BitLocker.
El comando repair-bde
El comando repair-bde
que utilizaremos en nuestro script, intenta reconstruir partes críticas de una unidad gravemente dañada y recuperar datos recuperables si la unidad se cifró mediante BitLocker y si tiene una contraseña de recuperación válida o una clave de recuperación para el descifrado.
PowerShell Scripting para Encriptación, desactivación y reparación de volúmenes
Una vez conocemos los conceptos podemos comenzar con nuestro script de encriptación, desencriptación y reparación de volúmenes. Recuerda que puedes modificar, reconstruir o adaptar el script a tu gusto, con el objetivo de mejorar sus funcionalidades.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) { Start-Process PowerShell -Verb RunAs "-NoProfile -ExecutionPolicy Bypass -Command `"cd '$pwd'; & '$PSCommandPath';`""; exit; } function Show-Menu { # Get hostname (ejem: DPL3451) $computer = (Get-WmiObject Win32_OperatingSystem).PSComputerName Clear-Host Write-Host "================ $computer =======================================" Write-Host "1: Iniciar la encriptación de un volumen." Write-Host "2: Descifrar y desactivar la protección Bitlocker de un volumen." Write-Host "3: Estado de encriptación de volúmenes." Write-Host "4: Reparación de volúmenes encriptados." Write-Host "5: Bloquear una Unidad encriptada (Se desbloqueará con la clave)." Write-Host "6: Información del TPM." Write-Host "Q: Salir." Write-Host "==================================================================" } function Encriptar { $computer = (Get-WmiObject Win32_OperatingSystem).PSComputerName $selection_disk = Read-Host "¿Qué unidad quieres encriptar?" Write-Output("Disco seleccionado: $selection_disk") if ( Get-BitLockerVolume -MountPoint "${selection_disk}:" | Where ProtectionStatus -cLike On ) { Write-Output("La unidad $selection_disk ya ha sido encriptada. ") } else { Write-Output("---------------------------------------------------------------") Write-Output("Host: $computer") Write-Output("---------------------------------------------------------------") Read-Host -Prompt "Pulsa cualquier tecla para activar BitLocker en unidad: $selection_disk" # generate keys Write-Output("Activando Cifrado BitLocker en unidad: ${selection_disk}") manage-bde -protectors -add "${selection_disk}:" -RecoveryPassword # wait to bitlocker sleep -Seconds 10 # start proccess Write-Output("Inicializando proceso de cifrado de disco, espera ...") manage-bde -on "${selection_disk}:" # Write Object info into file Write-Output("Guardando claves de encriptación ...") $file = "$computer - Clave de recuperación de BitLocker.txt" manage-bde -protectors "${selection_disk}:" -get | Out-File -FilePath .\$file -Encoding UTF8 } } do { $computer = (Get-WmiObject Win32_OperatingSystem).PSComputerName Show-Menu $selection = Read-Host "Que deseas hacer" switch ($selection) { '1' { if ( Get-Tpm | Where TpmEnabled -Clike "False" ) { Write-Output("TPM no está activado.") } else { Encriptar } } '2'{ $volume = Read-Host "Introduce el nombre del volumen" manage-bde.exe -off "${volume}:" } '3' { Get-BitLockerVolume | Format-Table } '4' { $volume = Read-Host "Introduce el nombre del volumen que quieres recuperar" $image = Read-Host "Introduce el volumen donde se guardará la imagen de recuperación" $key = Read-Host "Introduce la clave de recuperación del disco" repair-bde "${volume}:" "${image}:" -rp $key -lf .\log.txt } '5' { $volume = Read-Host "Introduce la clave el nombre del volumen que quieres recuperar:" manage-bde.exe -lock "${volume}:" } '6' { Get-Tpm } } pause } until ($selection -eq 'q') |