Habilitación del arranque seguro, BitLocker y Device Guard en Windows 10 IoT Core

Windows 10 IoT Core incluye ofertas de características de seguridad como el arranque seguro ueFI, el cifrado de dispositivos BitLocker y Device Guard. Esto ayudará a los creadores de dispositivos a crear dispositivos Windows IoT totalmente bloqueados que son resistentes a muchos tipos diferentes de ataques. Juntas, estas características proporcionan la protección óptima que garantiza que una plataforma se inicie de forma definida, al tiempo que bloquea archivos binarios desconocidos y protege los datos de usuario mediante el uso del cifrado de dispositivos.

Orden de arranque

Es necesario comprender el orden de arranque en un dispositivo Windows 10 IoT Core antes de poder profundizar en los componentes individuales que proporcionan una plataforma segura para el dispositivo IoT.

Hay tres áreas principales que se producen desde el momento en que se enciende un dispositivo IoT, hasta la carga y ejecución del kernel del sistema operativo de la aplicación instalada.

  • Arranque seguro de la plataforma
  • Arranque seguro de Unified Extensible Firmware Interface (UEFI)
  • Integridad de código de Windows

Orden de arranque

Puede encontrar información adicional sobre el proceso de arranque de Windows 10 aquí.

Bloqueo de dispositivos IoT

Para bloquear un dispositivo Windows IoT, se deben tener en cuenta las consideraciones siguientes.

Arranque seguro de la plataforma

Cuando el dispositivo se enciende por primera vez, el primer paso del proceso de arranque general es cargar y ejecutar cargadores de arranque de firmware, que inicializan el hardware en las devies y proporcionan funcionalidad de parpadeo de emergencia. A continuación, se carga el entorno de UEFI y se entrega el control.

Estos cargadores de arranque de firmware son específicos de SoC, por lo que deberá trabajar con el fabricante del dispositivo adecuado para que estos cargadores de arranque se creen en el dispositivo.

Arranque seguro de la UEFI

El arranque seguro de UEFI es el primer punto de cumplimiento de directivas y se encuentra en UEFI. Restringe el sistema para permitir solo la ejecución de archivos binarios firmados por una autoridad especificada, como controladores de firmware, ROMs de opción, controladores UEFI o aplicaciones, y cargadores de arranque UEFI. Esta característica evita que se ejecute código desconocido en la plataforma y pueda debilitar su seguridad. El arranque seguro reduce el riesgo de ataques de malware previo al arranque en el dispositivo, como rootkits.

Como OEM, debe almacenar las bases de datos de arranque seguro ueFI en el dispositivo IoT en tiempo de fabricación. Estas bases de datos incluyen la base de datos signature (db), la base de datos de firma revocada (dbx) y la base de datos clave de inscripción de claves (KEK). Estas bases de datos se almacenan en la RAM no volátil del firmware (NV-RAM) del dispositivo.

  • Base de datos de firma (db): Aquí se enumeran los firmantes o los hash de imagen de los cargadores de sistema operativo, las aplicaciones UEFI y los controladores UEFI que se pueden cargar en el dispositivo.

  • Base de datos de firmas revocada (dbx): Se enumeran los firmantes o los hashes de imagen de los cargadores de sistema operativo, las aplicaciones UEFI y los controladores UEFI que ya no son de confianza y no se pueden cargar en el dispositivo.

  • Base de datos de clave de inscripción de claves (KEK): Contiene una lista de claves de firma que se pueden usar para actualizar las bases de datos de firma y revocadas.

Una vez creadas y agregadas estas bases de datos al dispositivo, el OEM bloquea la edición del firmware y genera una clave de firma de plataforma (PK). Esta clave se puede usar para firmar actualizaciones en la KEK o para deshabilitar el arranque seguro de UEFI.

Estos son los pasos que lleva a cabo el arranque seguro de UEFI:

  1. Una vez encendido el dispositivo, las bases de datos de firma se comprueban con la clave de firma de la plataforma (PK).
  2. Si el firmware no es de confianza, el firmware uefi inicia la recuperación específica del OEM para restaurar el firmware de confianza.
  3. Si no se puede cargar el Administrador de arranque de Windows, el firmware intentará arrancar una copia de seguridad del Administrador de arranque de Windows. Si también se produce un error, el firmware de UEFI inicia la corrección específica del OEM.
  4. El Administrador de arranque de Windows se ejecuta y comprueba la firma digital del kernel de Windows. Si es de confianza, el Administrador de arranque de Windows pasa el control al kernel de Windows.

Encontrará más detalles sobre el arranque seguro, junto con la guía de creación y administración de claves, aquí.

Integridad de código de Windows

La integridad de código de Windows (WCI) mejora la seguridad del sistema operativo validando la integridad de un controlador o aplicación cada vez que se carga en la memoria. CI contiene dos componentes principales: integridad de código en modo kernel (KMCI) y integridad de código en modo de usuario (UMCI).

La integridad de código configurable (CCI) es una característica de Windows 10 que permite a los creadores de dispositivos bloquear un dispositivo y permitir que se ejecute y ejecute código firmado y de confianza. Para ello, los generadores de dispositivos pueden crear una directiva de integridad de código en un dispositivo "dorado" (versión final de hardware y software) y, a continuación, proteger y aplicar esta directiva en todos los dispositivos de la planta de fábrica.

Para más información sobre la implementación de directivas de integridad de código, auditoría y cumplimiento, consulte la documentación más reciente de Technet aquí.

Estos son los pasos que realiza la integridad de código de Windows:

  1. El kernel de Windows comprobará todos los demás componentes en la base de datos de firma antes de cargarlo. Esto incluye controladores, archivos de inicio y ELAM (antimalware de inicio temprano).
  2. El kernel de Windows cargará los componentes de confianza en el proceso de inicio y prohibirá la carga de los componentes que no son de confianza.
  3. Windows 10 IoT Core se carga el sistema operativo, junto con las aplicaciones instaladas.

Cifrado de dispositivos BitLocker

Windows 10 IoT Core también implementa una versión ligera del cifrado de dispositivos BitLocker, lo que protege los dispositivos IoT frente a ataques sin conexión. Esta funcionalidad tiene una fuerte dependencia de la presencia de un TPM en la plataforma, incluido el protocolo previo al sistema operativo necesario en UEFI que lleva a cabo las medidas necesarias. Estas medidas previas al sistema operativo garantizan que el sistema operativo tenga más adelante un registro definitivo de cómo se inició el sistema operativo; sin embargo, no aplica ninguna restricción de ejecución.

Sugerencia

La funcionalidad de BitLocker en Windows 10 IoT Core permite el cifrado automático del volumen del sistema operativo basado en NTFS mientras enlaza todos los volúmenes de datos NTFS disponibles a él. Para ello, es necesario asegurarse de que el GUID del volumen EFIESP está establecido en C12A7328-F81F-11D2-BA4B-00A0C93EC93B.

Device Guard en Windows IoT Core

La mayoría de los dispositivos IoT se crean como dispositivos de función fija. Esto implica que los generadores de dispositivos saben exactamente qué firmware, sistema operativo, controladores y aplicaciones deben ejecutarse en un dispositivo determinado. A su vez, esta información se puede usar para bloquear completamente un dispositivo IoT al permitir la ejecución de código conocido y de confianza. Device Guard en Windows 10 IoT Core puede ayudar a proteger los dispositivos IoT asegurándose de que el código ejecutable desconocido o que no es de confianza no se puede ejecutar en dispositivos bloqueados.

Seguridad inmediata en IoT Core

Para facilitar la habilitación sencilla de las características de seguridad clave en dispositivos IoT Core, Microsoft proporciona un paquete de seguridad llave en mano que permite a los creadores de dispositivos compilar dispositivos IoT totalmente bloqueados. Este paquete le ayudará con:

  • Aprovisionamiento de claves de arranque seguro y habilitación de la característica en plataformas de IoT compatibles
  • Configuración y configuración del cifrado de dispositivos mediante BitLocker
  • Iniciar el bloqueo del dispositivo para permitir solo la ejecución de aplicaciones y controladores firmados

Los pasos siguientes llevarán a través del proceso para crear una imagen de bloqueo mediante el paquete de seguridad llave en mano.

Creación de una imagen de bloqueo

Prerrequisitos

  • Un equipo que ejecuta Windows 10 Enterprise (otras versiones de Windows no son compatibles con los scripts proporcionados)
  • SDK de Windows 10: necesario para la generación de certificados
  • Windows 10 ADK: necesario para la generación cab
  • Plataforma de referencia: se requerirá hardware de lanzamiento con firmware de envío, sistema operativo, controladores y aplicaciones para el bloqueo final.

Dispositivos IoT de desarrollo

Windows 10 IoT Core funciona con varios silicios que se utilizan en cientos de dispositivos. De los dispositivos de desarrollo de IoT sugeridos, los siguientes proporcionan funcionalidad de TPM de firmware de fábrica, junto con las funcionalidades de arranque seguro, arranque medido, BitLocker y Device Guard:

  • Qualcomm DragonBoard 410c

    Para habilitar el arranque seguro, puede ser necesario aprovisionar RPMB. Una vez que el eMMC se ha parpadeado con Windows 10 IoT Core (según las instrucciones aquí, presione [Power] + [Vol+] + [Vol-] simultáneamente en el dispositivo al encender y seleccione "Aprovisionar RPMB" en el menú BDS. Tenga en cuenta que se trata de un paso irreversible.

  • Intel MinnowBoardMax

    Para MinnowBoard Max de Intel, la versión de firmware debe ser 0.82 o posterior (obtenga el firmware más reciente). Para habilitar las funcionalidades de TPM, apague la placa con una pantalla de teclado & conectada y presione F2 para entrar en la configuración de UEFI. Vaya a Administrador de dispositivos -> Configuración del sistema -> Configuración de seguridad -> PTT y establézcalo en <Habilitar>. Presione F10 para guardar los cambios y continuar con un reinicio de la plataforma.

Nota

Raspberry Pi 2 ni 3 no admite TPM y, por tanto, no podemos configurar escenarios de bloqueo.

Generar paquetes de bloqueo

Siga las instrucciones de los dos vínculos siguientes:

Probar paquetes de bloqueo

Puede probar los paquetes de seguridad generados aquí <YOUR_IOT_ADD_ON_WORKSPACE>\Build<ARCH><OEM_NAME>. Security.* .cab> instalándolos manualmente en un dispositivo desbloqueado mediante los pasos siguientes.

  1. Flashe el dispositivo con la imagen desbloqueada (imagen usada para el examen en el paso anterior).

  2. Conexión al dispositivo (mediante SSH o mediante PowerShell)

  3. Copie los siguientes archivos .cab en el dispositivo en un directorio, por ejemplo, c:\OemInstall

    • OEM.Custom.Cmd.cab
    • OEM.Security.BitLocker.cab
    • OEM.Security.SecureBoot.cab
    • OEM.Security.DeviceGuard.cab
  4. Iniciar el almacenamiento provisional de los paquetes generados mediante la emisión de los siguientes comandos

    applyupdate -stage c:\OemInstall\OEM.Custom.Cmd.cab
    

    Si usa una imagen personalizada, tendrá que omitir este archivo y editar manualmente con el c:\windows\system32\oemcustomization.cmd contenido disponible en Output\OEMCustomization\OEMCustomization.cmd el archivo.

    applyupdate -stage c:\OemInstall\OEM.Security.BitLocker.cab
    applyupdate -stage c:\OemInstall\OEM.Security.SecureBoot.cab
    applyupdate -stage c:\OemInstall\OEM.Security.DeviceGuard.cab
    
    
  5. Por último, confirme los paquetes a través de

    applyupdate -commit
    
  6. El dispositivo se reiniciará en el sistema operativo de actualización (mostrando engranajes) para instalar los paquetes y se reiniciará de nuevo en el sistema operativo principal. Una vez que el dispositivo vuelva a iniciarse en MainOS, se habilitará el arranque seguro y se debe activar SIPolicy.

  7. Reinicie el dispositivo de nuevo para activar el cifrado de BitLocker.

  8. Prueba de las características de seguridad

    • SecureBoot: pruebe bcdedit /debug on , obtendrá un error que indica que el valor está protegido por la directiva de arranque seguro.
    • BitLocker: ejecute start /wait sectask.exe -waitencryptcomplete:1, si ERRORLEVEL es -2147023436 (ERROR_TIMEOUT), el cifrado no se ha completado. Al ejecutar sectask.exe desde un archivo .cmd, omita .start /wait
    • DeviceGuard: ejecute cualquier binario sin firmar o un binario firmado con certificado no en la lista SIPolicy y confirme que no se puede ejecutar.

Generar imagen de bloqueo

Después de validar que los paquetes de bloqueo funcionan según la configuración definida anteriormente, puede incluir estos paquetes en la imagen siguiendo los pasos indicados a continuación. Lea la guía de fabricación de IoT para obtener instrucciones de creación de imágenes personalizadas.

  1. En el directorio del área de trabajo, actualice los siguientes archivos desde el directorio de salida generado anterior.

    • SecureBoot : Copy ..\Output\SecureBoot\*.bin ..\Workspace\Common\Packages\Security.SecureBoot
      • SetVariable_db.bin
      • SetVariable_kek.bin
      • SetVariable_pk.bin
    • Bitlocker: Copy ..\Output\Bitlocker\*.* ..\Workspace\Common\Packages\Security.Bitlocker
      • DETask.xml
      • Security.Bitlocker.wm.xml
      • setup.bitlocker.cmd
    • DeviceGuard: Copy ..\Output\DeviceGuard\*.* ..\Workspace\Common\Packages\Security.DeviceGuard
      • SIPolicyOn.p7b
      • SIPolicyOff.p7b
  2. Agregue RetailOEMInput.xml y TestOEMInput.xml en el directorio ProductName con el identificador de característica del paquete de bloqueo.

    • <Feature>SEC_BITLOCKER</Feature>
    • <Feature>SEC_SECUREBOOT</Feature>
    • <Feature>SEC_DEVICEGUARD</Feature>
  3. Volver a generar la imagen

    • buildpkg all (esto genera nuevos paquetes de bloqueo en función de los archivos de directiva anteriores)
    • buildimage ProductName test(or)retail (esto genera un nuevo flash.ffu)
  4. Flashe el dispositivo con este nuevo Flash.ffu y valide las características de seguridad.

Consulte SecureSample como ejemplo de una configuración de la placa de dragón de bloqueo.

Desarrollo con codeSigning Enforcement habilitado

Una vez que se generan los paquetes y se activa el bloqueo, los archivos binarios introducidos en la imagen durante el desarrollo deberán firmarse correctamente. Asegúrese de que los archivos binarios en modo de usuario están firmados con la clave *.\Keys\ **-UMCI.pfx. En el caso de la firma en modo kernel, como para controladores, deberá especificar sus propias claves de firma y asegurarse de que también se incluyen en siPolicy anterior.

Desbloqueo de unidades cifradas

Durante el desarrollo y las pruebas, al intentar leer contenido de un dispositivo cifrado sin conexión (por ejemplo, tarjeta SD para MinnowBoardMax o eMMC de DragonBoard a través del modo de almacenamiento masivo USB), se puede usar "diskpart" para asignar una letra de unidad al volumen MainOS y data (supongamos que v: para MainOS y w: para Datos). Los volúmenes aparecerán bloqueados y deberán desbloquearse manualmente. Esto se puede hacer en cualquier máquina que tenga instalado el certificado OEM-DRA.pfx (incluido en el ejemplo DeviceLockDown). Instale pfX y, a continuación, ejecute los siguientes comandos desde un símbolo del sistema de CMD administrativo:

  • manage-bde -unlock v: -cert -cf OEM-DRA.cer
  • manage-bde -unlock w: -cert -cf OEM-DRA.cer

Si es necesario acceder con frecuencia al contenido sin conexión, se puede configurar el bloqueo automático de BitLocker para los volúmenes después del desbloqueo inicial mediante los siguientes comandos:

  • manage-bde -autounlock v: -enable
  • manage-bde -autounlock w: -enable

Deshabilitación de BitLocker

Si surge una necesidad de deshabilitar temporalmente BitLocker, inicie una sesión remota de PowerShell con el dispositivo IoT y ejecute el siguiente comando: sectask.exe -disable.

Nota

El cifrado del dispositivo se volverá a habilitar en el arranque posterior del dispositivo a menos que la tarea de cifrado programada esté deshabilitada.