Manual de Siemens IOT2050

Imagen del IOT2050

Prólogo

Este documento contiene información para utilizar las funciones de Arranque Seguro para IOT2050.

Está destinado tanto al personal de programación y pruebas que pone en marcha el dispositivo y lo conecta con otras unidades (sistemas de automatización, dispositivos de programación), como al personal de servicio y mantenimiento que instala complementos o realiza análisis de fallos/errores.

Requisitos de conocimientos básicos

Para comprender este manual, es necesario tener conocimientos de ordenadores personales, sistemas operativos y programación. Se recomiendan conocimientos generales en el campo de la ingeniería de control de automatización.

Ámbito de validez de este documento

Este manual se aplica a los dispositivos IOT2050 de la familia de dispositivos SIMATIC IOT2000.

  • 6ES7647-0BA00-1YA2 (FS04)
  • 6ES7647-0BA01-1YA2
  • 6ES7647-0BB00-1YA2

Convenciones

En esta documentación se utilizan los siguientes términos genéricos:

Término genérico Nombre específico
Dispositivo Dispositivo IOT2050

Figuras

Este manual contiene figuras de los dispositivos descritos. El dispositivo suministrado puede diferir en algunos detalles de las figuras. Dentro de algunas de las figuras, se utiliza un dispositivo para representar todos los dispositivos.

Información de seguridad

Siemens ofrece productos y soluciones con funciones de seguridad industrial que respaldan el funcionamiento seguro de plantas, sistemas, máquinas y redes.

Para proteger las plantas, los sistemas, las máquinas y las redes contra las ciberamenazas, es necesario implementar – y mantener continuamente – un concepto holístico y de última generación de seguridad industrial. Los productos y soluciones de Siemens constituyen un elemento de dicho concepto.

Los clientes son responsables de evitar el acceso no autorizado a sus plantas, sistemas, máquinas y redes. Dichos sistemas, máquinas y componentes solo deben conectarse a una red empresarial o a Internet si dicha conexión es necesaria y solo cuando se hayan implementado las medidas de seguridad adecuadas (por ejemplo, firewalls y/o segmentación de red).

Para obtener información adicional sobre las medidas de seguridad industrial que se pueden implementar, visite (https://www.siemens.com/industrialsecurity).

Los productos y soluciones de Siemens se someten a un desarrollo continuo para que sean más seguros. Siemens recomienda encarecidamente que las actualizaciones de los productos se apliquen tan pronto como estén disponibles y que se utilicen las últimas versiones de los productos. El uso de versiones de productos que ya no son compatibles y la no aplicación de las últimas actualizaciones pueden aumentar la exposición de los clientes a las ciberamenazas.

Para mantenerse informado sobre las actualizaciones de los productos, suscríbase a la fuente RSS de seguridad industrial de Siemens y visite (https://www.siemens.com/cert).

Introducción

Las funciones de Arranque Seguro en IOT2050 están desarrolladas para ayudar a garantizar que IOT2050 se inicie utilizando solo firmware y software en los que confíe Siemens o usted. Cuando el dispositivo se inicia, el firmware comprueba la firma de cada pieza de software de arranque. Si las firmas son válidas, el dispositivo se inicia y el firmware cede el control al sistema operativo.

La protección de la integridad se logra mediante la firma digital: la clave criptográfica firma primero el binario bajo protección, luego IOT2050 valida el binario con la misma clave durante la etapa de arranque. Si la validación se aprueba, significa que el binario está intacto y se puede arrancar. De lo contrario, el binario es sospechoso y el dispositivo no se puede arrancar.

advertencia Nota
El Arranque Seguro es solo para IOT2050 PG2 y las variantes posteriores de PG2 (por ejemplo, IOT2050 M.2).

Cadena de confianza

IOT2050 utiliza el par de claves RSA como clave criptográfica, que también es el algoritmo criptográfico más común para la firma digital en la industria.

Un par de claves RSA tiene dos claves, una clave pública y una clave privada. En el escenario de firma digital, la clave privada firma el binario, mientras que el dispositivo valida el binario con la clave pública. La clave privada debe mantenerse segura. Por el contrario, la clave pública se puede distribuir libremente.

La clave privada firma los siguientes elementos:

  • Firmware, incluyendo U-Boot, TF-A y OPTee
  • El cargador del sistema operativo EFI Boot Guard
  • El kernel de Linux, y cualquier otro binario UEFI que forme parte de la cadena de arranque

Para validar la firma binaria, Siemens proporciona una herramienta para programar el hash de clave pública en el área de programación única (OTP) en IOT2050.

Cadena de confianza: Durante el arranque, el primer gestor de arranque, por ejemplo, SEBoot, valida el u-boot con el hash de clave pública almacenado en el área OTP de IOT2050. Luego, el u-boot valida el EFI Boot Guard que, a su vez, valida el kernel de Linux junto con los blobs del árbol de dispositivos.

Raíz de confianza: La raíz de confianza se refiere al hash de clave pública almacenado en el área OTP del dispositivo y al SEBoot.

advertencia Nota
El ROM bootloader valida el SEBoot con el hash de clave pública de Siemens.

advertencia Nota
Mantenga la clave privada segura

Una vez que la clave privada se filtre, el hacker podría firmar su u-boot o kernel malicioso que el Arranque Seguro no podría distinguir de los apropiados, lo que podría poner el dispositivo en peligro.

Siemens proporciona tres ranuras de clave en el área OTP. Cuando la clave en uso se filtra, puede cambiar a la siguiente clave en las ranuras como la clave en uso para invalidar la clave filtrada. Tres ranuras garantizan que tenga dos oportunidades para guardar el Arranque Seguro de la fuga de claves.
Introducción - Cadena de confianza

Infraestructura de Arranque Seguro

Área OTP

OTP (Programable una vez)
Siemens le abre el área OTP extendida para implementar el Arranque Seguro. El acceso a esta área OTP es gestionado por el SEBoot. Hay tres partes principales almacenadas en el OTP:

  • Hashes de clave pública
  • Bit de habilitación de Arranque Seguro
  • Versión segura

Hashes de clave pública
Hay tres ranuras para almacenar los hashes de clave pública. Puede elegir el número de hashes de clave pública que se programarán (uno, dos o tres).

Siemens le recomienda que utilice al menos dos claves. En caso de que se filtre una clave, puede utilizar otra clave.

  1. MPK: la primera clave para firmar el firmware y la imagen personalizados.
  2. SMPK: la segunda clave para firmar el firmware y la imagen personalizados. Si la primera clave se filtra, el usuario puede cambiar para utilizar esta clave.
  3. BMPK: la tercera clave para firmar el firmware y la imagen personalizados. Si la segunda clave también se filtra, el usuario puede cambiar para utilizar esta clave.

Bit de habilitación de Arranque Seguro
El bit de habilitación de Arranque Seguro indica si el Arranque Seguro está habilitado o deshabilitado. Este bit es programable a través de la misma herramienta para el aprovisionamiento de claves. Una vez que este bit está programado, el SEBoot validará el gestor de arranque de la siguiente etapa con las claves OTP programadas.
Puede elegir programar este bit junto con los hashes de clave pública, o por separado después de que las claves estén programadas.

advertencia Nota
Si el Arranque Seguro en IOT2050 está habilitado, no puede deshabilitar el Arranque Seguro.

El bit de habilitación de Arranque Seguro solo controla el SEBoot para verificar el gestor de arranque inmediatamente siguiente, que es la combinación de TF-A, OPTee y u-boot SPL en la mayoría de los casos.

Aún puede deshabilitar la validación de la imagen en SPL para romper la cadena de validación posterior, incluso si se voltea el bit de habilitación de Arranque Seguro.

Versión segura
Después de implementar el Arranque Seguro en IOT2050, la versión segura puede detectar y prevenir el Ataque de Downgrade.

La versión segura también está firmada por la clave privada. Una vez que se detecta y valida un firmware de versión segura más reciente, se actualiza un contador no volátil (NV) en el dispositivo con el número de versión más reciente. Cuando el dispositivo es atacado por un firmware con errores más antiguo que tiene una versión segura más baja, SEBoot detectará y rechazará el ataque de downgrade.

El contador NV también se implementa en el área OTP extendida. La versión segura varía de 0 a 127, lo que significa que puede tener hasta 127 versiones de seguridad para corregir los errores de seguridad.

SEBoot

SEBoot es el gestor de arranque de la primera etapa justo después del RBL (ROM Boot Loader), por ejemplo, la CPU. Está firmado con la clave raíz de Siemens y es validado por el RBL. Durante el arranque, la tarea principal de SEBoot es validar la imagen de la etapa posterior que está firmada con la clave del cliente. SEBoot también previene el ataque de downgrade comparando la versión segura de la imagen y la definida en el OTP.

advertencia Nota
Para IOT2050, el SEBoot debe ser el gestor de arranque de la primera etapa. De lo contrario, el dispositivo se niega a arrancar.

Ejemplo para el arranque seguro de IOT2050

Implementación del ejemplo de arranque seguro de IOT2050

Según la infraestructura proporcionada, puede implementar el arranque seguro para IOT2050 de varias maneras.

Requisitos

  • La máquina Linux está lista
  • El repositorio meta-iot2050 está clonado
  • Dos medios de almacenamiento, ya sea una tarjeta SD o una memoria USB, están bien
  • Una imagen de compilación, se puede almacenar en una tarjeta SD o una memoria USB

Procedimientos

  1. Genere los pares de claves RSA.
    advertencia Nota
    Siemens recomienda utilizar al menos dos conjuntos de claves, por ejemplo, MPK y SMPK.
    openssl req -x509 -newkey rsa: 4096 -keyout custMpk.pem -nodes outform pem -out custMpk.crt -sha256 -days 3650
    openssl req -x509 -newkey rsa: 4096 -keyout custSmpk.pem -nodes outform pem -out custSmpk.crt -sha256 -days 3650
    # only if you want to have the third key
    # openssl req -x509 -newkey rsa: 4096 -keyout custBmpk.pem -nodes outform pem -out custBmpk.crt -sha256 -days 3650
  2. Elimine los conjuntos de claves de demostración existentes en <path-meta-iot2050>/recipes-bsp/secureboot-otp-provisioning/files/keys.
    rm -rf <path-meta-iot2050>/recipes-bsp/secure-boot-otpprovisioning/files/keys/*
    advertencia Nota
    Mantenga las claves privadas de forma segura. No comprometa sus claves en el repositorio de Git.
  3. Copie los *.pem y *.crt generados en <path-meta-iot2050>/recipes-bsp/secure-boot-otpprovisioning/files/keys
    cp *.pem <path-meta-iot2050>/recipes-bsp/secure-boot-otpprovisioning/files/keys/
    cp *.crt <path-meta-iot2050>/recipes-bsp/secure-boot-otpprovisioning/files/keys/
  4. Cree el firmware firmado y la imagen del SO:
    cd <path-meta-iot2050>
    ./kas-container build kas-iot2050-boot-pg2.yml: kas/opt/secureboot.yml: kas/opt/otpcmd/key-provision.yml
    ./kas-container build kas-iot2050-swupdate.yml: kas/opt/secureboot.yml

    advertencia Nota
    Antes de crear las imágenes firmadas, asegúrese de que el certificado de la clave de firma esté dentro del plazo de validez.
    Renueve el certificado si ha caducado.
    • El firmware firmado generado se encuentra en <path-metaiot2050>/build/tmp/deploy/images/iot2050/iot2050-pg2-imageboot.bin
    • La imagen del SO firmada generada se encuentra en <path-metaiot2050>/build/tmp/deploy/images/iot2050/iot2050-image-swu-example-iot2050debian-iot2050.wic.img.
  5. Inserte un medio de almacenamiento en la máquina de compilación y copie el iot2050-pg2-imageboot.bin generado en él.
  6. Inserte el medio de almacenamiento en el paso 5 en IOT2050 y arranque IOT2050 con la imagen de arranque que preparó.
  7. Conecte la máquina de compilación e IOT2050 con un cable UART, introduzca el shell y ejecute los siguientes comandos para programar el flash.
    iot2050-firmware-update -f iot2050-pg2-image-boot.bin
  8. Apague IOT2050 y retire la imagen de ejemplo.
  9. Encienda IOT2050 e introduzca "yes" (sí) para programar las claves en OTP cuando reciba el mensaje de solicitud.
    advertencia Nota
    Una vez que el arranque seguro está habilitado, no puede programar una nueva clave en OTP, incluso si existe una ranura vacía en OTP.
    advertencia Nota
    Una vez que el arranque seguro está habilitado, para mejorar la seguridad, la consola U-Boot está deshabilitada.
  10. Inserte otro medio de almacenamiento en la máquina de compilación y cree el medio de arranque con la imagen del SO firmada con el siguiente comando.
    dd if=<path-meta-iot2050>/build/tmp/deploy/images/iot2050/iot2050image-swu-example-iot2050-debian-iot2050.wic.img \ of=/dev/<device-name> bs=100M oflag=direct status=progress
  11. Inserte el medio de arranque con la imagen del SO firmada y arranque IOT2050.
    Resultado: Tanto la imagen del firmware como la imagen del SO están firmadas y validadas por el conjunto de claves generado.

Compruebe la implementación del ejemplo

La implementación del ejemplo se basa en la configuración del firmware y la imagen de ejemplo proporcionada en <path-meta-iot2050>.
Compruebe la implementación del ejemplo

La imagen del firmware firmado incluye:

  • SEBoot
  • TF-A firmado
  • OPTee firmado
  • U-Boot firmado
  • Datos de programación OTP

La imagen del SO firmada contiene una imagen PE del kernel firmada, que contiene el kernel, los blobs del árbol de dispositivos, el parámetro de la línea de comandos del kernel y un disco RAM. El sistema de archivos incluye:

  • La partición del sistema EFI contiene el gestor de arranque EFI EFI Boot Guard
  • Las particiones de arranque contienen las imágenes PE del kernel firmadas
  • El sistema de archivos montado aleatoriamente como /usr
  • Sistema de archivos legible/grabable montado como /var
  • Sistema de archivos legible/grabable montado como /home

Secuencia de arranque
Todas las validaciones de imágenes mencionadas utilizan el mismo conjunto de claves que el programado en el área OTP.

  1. Después de encender el dispositivo, el SEBoot valida la imagen combinada de TF-A, OPTee y U-Boot SPL.
  2. U-Boot SPL valida U-Boot correctamente, y luego U-Boot valida EFI Boot Guard correctamente.
  3. EFI Boot Guard valida la imagen PE del kernel.
    Los pasos 1 y 2 utilizan principalmente el arranque verificado y el certificado X.509, y el paso 3 utiliza principalmente UEFI Secure Boot.

Conjuntos de claves y claves utilizadas en la implementación del ejemplo

  • Los conjuntos de claves para la programación OTP: <path-metaiot2050>/recipes-bsp/secureboot-otp-provisioning/files/keys.
    Estas claves están destinadas a programarse en el área OTP.
  • El conjunto de claves para firmar y validar U-Boot (tanto U-Boot SPL como U-Boot correctamente):
    <path-meta-iot2050>/recipes-bsp/u-boot/files/keys
    Estos son enlaces simbólicos a las claves OTP.
  • El conjunto de claves para firmar y validar en UEFI Secure Boot, es decir, EFI Boot Guard y el kernel:
    <path-meta-iot2050>/recipes-devtools/secure-bootsecrets/files
    Estos también son enlaces simbólicos a las claves OTP.

En la implementación del ejemplo, se utiliza el mismo conjunto de claves para firmar y validar todas las cadenas de arranque. Sin embargo, puede utilizar diferentes claves para diferentes etapas de validación, siempre y cuando:

  • La clave utilizada para que SEBoot valide la imagen combinada de TFA/OPTee/U-Boot SPL debe ser idéntica a la clave OTP actualmente en uso.
  • Junto con el binario de la imagen, la clave utilizada para validar el binario de la imagen de la siguiente etapa debe validarse con la clave de la etapa anterior. Y cuando se valida e inicia el binario de la imagen de la etapa actual, comienza la validación del binario de la imagen de la siguiente etapa con la clave validada.

Kernel de ejemplo

La implementación de referencia tiene siete particiones.
Kernel de ejemplo

Partición Función ¿Diseño redundante? Observación
Partición del sistema EFI contiene la aplicación UEFI, como el gestor de arranque EFI N Partición estándar definida en la especificación UEFI
BOOT0/BOOT1 contiene imágenes PE del kernel unificadas S

ROOTFS0/ROOTS

F1

contiene el rootfs de solo lectura (basado en dmverity) que se monta en /usr. S

A excepción de esos montajes separados en la parte superior, los otros rootfs son de solo lectura.

Durante el arranque, el initrd en la imagen PE del kernel unificada es invocado por el kernel para encontrar y verificar las raíces de solo lectura correctas a través de dm-verity. El resumen correcto de los roofts se almacena en el initrd y son validados por el arranque seguro UEFI, junto con la imagen PE del kernel unificada.

Var montado en /var N Cuando se implementa el ejemplo de arranque seguro en IOT2050, el contenido dinámico va a /var y /home.
Home montado en /home N

advertencia Nota
Dado que /usr se monta como de solo lectura y se valida, /usr solo se puede actualizar con SWUpdate. No se permiten comandos como apt install y upgrade.

Temas avanzados sobre el arranque seguro

Aprovisionamiento de claves
La implementación de ejemplo utiliza dos conjuntos de claves de forma predeterminada. Puede ajustarlo según sus necesidades. Por ejemplo, si necesita tres conjuntos de claves, cree la tercera clave y colóquela en el repositorio meta-iot2050.
cd <path-meta-iot2050>
./kas-container build kas-iot2050-boot-pg2.yml: kas/opt/secureboot.yml: kas/opt/otpcmd/key-provision-3keys.yml

Procesamiento de incidentes: clave filtrada
Cuando la clave en uso se filtra, puede cambiar al siguiente conjunto de claves de la siguiente manera:

  1. Copie o enlace la nueva clave a<path-meta-iot2050>/recipes-bsp/u-boot/files/keys/custMpk...
  2. Cree el nuevo firmware firmado con la clave junto con los datos otpcmd de cambio de clave.
    cd <path-meta-iot2050>
    ./kas-container build kas-iot2050-boot-pg2.yml: kas/opt/secureboot.yml: kas/opt/otpcmd/key-switch.yml

Vía TUI
Cuando la clave en uso se filtra, también puede cambiar al siguiente conjunto de claves con TUI.
cd <path-meta-iot2050>
./kas-container menu

  1. Establezca Firmware image for PG2 devices (Imagen de firmware para dispositivos PG2) como el Image type (Tipo de imagen)
  2. Marque Secure Boot and OTP provisioning (Arranque seguro y aprovisionamiento OTP) en Image features (Características de la imagen)
  3. Seleccione OTP provisioning command type (Tipo de comando de aprovisionamiento OTP)
  4. Compruebe su selección en generated.config.yaml.

Procesamiento de incidentes: versión segura
En la implementación de ejemplo, puede establecer la versión segura de la siguiente manera.

  1. Ejecute el siguiente comando.
    cd <path-meta-iot2050>
    ./kas-container menu
  2. Establezca Firmware image for PG2 devices (Imagen de firmware para dispositivos PG2) como mage type (Tipo de imagen), y establezca Secure Boot (Arranque seguro) como Image features (Características de la imagen).
  3. Establezca un valor más alto para Use specific firmware secure version (Usar versión segura de firmware específica) en Build options (Opciones de compilación).
    Debe establecer un valor más alto que el valor anterior cuando necesite aumentar la versión segura para corregir un error de seguridad. Por ejemplo: si la versión segura actual en uso es 3, debe usar 4 como la nueva versión segura.
  4. Vaya a Save & Build (Guardar y compilar) y pulse Enter (Intro).

advertencia Nota
Solo SEBoot comprueba la versión segura para validar la imagen del contenedor tispl. Al reemplazar la imagen del contenedor tispl, se podría establecer una nueva cadena de arranque seguro para el resto. Esta cadena de arranque seguro puede evitar ataques de degradación para el resto de las imágenes.

Política de seguridad de SEBoot
SEBoot define tres políticas de seguridad para diferentes estados de seguridad:

Política de seguridad Estado de la clave programada Estado del bit de habilitación de arranque seguro ¿Validar la imagen durante el arranque? Comportamiento cuando falla la validación
ninguna No hay clave programada No
suave 1 MPK está programado Intacto Continúa arrancando
obligatoria Tanto MPK como SMPK están programados Invertido Se detiene para arrancar

1 Puede establecer el dispositivo en una política suave como puerta final para comprobar si todo funciona como se espera antes de habilitar el arranque seguro.

advertencia Nota
El estado de seguridad predeterminado de SEBoot es ninguno.

Sistema de avisos de advertencia

Este manual contiene avisos que debe observar para garantizar su seguridad personal, así como para evitar daños a la propiedad. Los avisos que se refieren a su seguridad personal se resaltan en el manual con un símbolo de alerta de seguridad, los avisos que se refieren únicamente a daños a la propiedad no tienen un símbolo de alerta de seguridad. Estos avisos que se muestran a continuación se clasifican según el grado de peligro.


indica que la muerte o lesiones personales graves se producirán si no se toman las precauciones adecuadas.


indica que la muerte o lesiones personales graves pueden producirse si no se toman las precauciones adecuadas.


indica que pueden producirse lesiones personales leves si no se toman las precauciones adecuadas.

advertencia AVISO:
indica que pueden producirse daños materiales si no se toman las precauciones adecuadas.

Si hay presente más de un grado de peligro, se utilizará el aviso de advertencia que represente el grado de peligro más alto. Un aviso que advierta sobre lesiones a personas con un símbolo de alerta de seguridad también puede incluir una advertencia relacionada con daños a la propiedad.

Personal cualificado
El producto/sistema descrito en esta documentación solo puede ser operado por personal cualificado para la tarea específica de acuerdo con la documentación relevante, en particular sus avisos de advertencia e instrucciones de seguridad. El personal cualificado es aquel que, en función de su formación y experiencia, es capaz de identificar los riesgos y evitar los peligros potenciales al trabajar con estos productos/sistemas.

Referencias

Descargar el manual

Aquí puede descargar la versión PDF completa del manual. Puede contener instrucciones de seguridad adicionales, información de garantía, reglas de la FCC, etc.

Descargar Manual de Siemens IOT2050

Idiomas disponibles

Tabla de contenido