Siemens IOT2050 Handleiding

Voorwoord

Dit document bevat informatie over het gebruik van Secure Boot-functies voor IOT2050.

Het is bedoeld voor zowel programmeer- als testpersoneel dat het apparaat in bedrijf stelt en het verbindt met andere eenheden (automatiseringssystemen, programmeerapparaten), als voor service- en onderhoudspersoneel dat add-ons installeert of fout-/foutanalyses uitvoert.

Vereisten basiskennis

Kennis van personal computers, besturingssystemen en programmeren is vereist om deze handleiding te begrijpen. Algemene kennis op het gebied van automatiseringstechniek wordt aanbevolen.

Geldigheidsbereik van dit document

Deze handleiding is van toepassing op de IOT2050-apparaten van de apparaatfamilie SIMATIC IOT2000.

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

Conventies

De volgende generieke termen worden in deze documentatie gebruikt:

Generieke term Specifieke naam
Apparaat IOT2050-apparaat

Afbeeldingen

Deze handleiding bevat afbeeldingen van de beschreven apparaten. Het geleverde apparaat kan in sommige details afwijken van de afbeeldingen. Binnen sommige afbeeldingen wordt één apparaat gebruikt om alle apparaten weer te geven.

Beveiligingsinformatie

Siemens levert producten en oplossingen met industriële beveiligingsfuncties die de veilige werking van installaties, systemen, machines en netwerken ondersteunen.

Om installaties, systemen, machines en netwerken te beschermen tegen cyberdreigingen, is het noodzakelijk om een holistisch, state-of-the-art industrieel beveiligingsconcept te implementeren en continu te onderhouden. De producten en oplossingen van Siemens vormen één element van een dergelijk concept.

Klanten zijn verantwoordelijk voor het voorkomen van ongeoorloofde toegang tot hun installaties, systemen, machines en netwerken. Dergelijke systemen, machines en componenten mogen alleen worden verbonden met een bedrijfsnetwerk of het internet als en voor zover een dergelijke verbinding noodzakelijk is en alleen wanneer passende beveiligingsmaatregelen (bijv. firewalls en/of netwerksegmentatie) aanwezig zijn.

Voor aanvullende informatie over industriële beveiligingsmaatregelen die kunnen worden geïmplementeerd, gaat u naar (https://www.siemens.com/industrialsecurity).

De producten en oplossingen van Siemens worden continu doorontwikkeld om ze veiliger te maken. Siemens raadt ten zeerste aan om productupdates toe te passen zodra ze beschikbaar zijn en om de nieuwste productversies te gebruiken. Het gebruik van productversies die niet langer worden ondersteund en het niet toepassen van de nieuwste updates kan de blootstelling van klanten aan cyberdreigingen vergroten.

Om op de hoogte te blijven van productupdates, kunt u zich abonneren op de Siemens Industrial Security RSS Feed via (https://www.siemens.com/cert).

Inleiding

De Secure Boot-functies op IOT2050 zijn ontwikkeld om ervoor te zorgen dat IOT2050 alleen opstart met firmware en software die door Siemens of u worden vertrouwd. Wanneer het apparaat start, controleert de firmware de handtekening van elk stukje opstartsoftware. Als de handtekeningen geldig zijn, start het apparaat op en geeft de firmware de controle aan het besturingssysteem.

De integriteitsbescherming wordt bereikt door de digitale handtekening: de cryptografische sleutel ondertekent eerst de te beschermen binaire code, waarna IOT2050 de binaire code valideert met dezelfde sleutel tijdens het opstarten. Als de validatie wordt doorstaan, betekent dit dat de binaire code intact is en kan worden opgestart. Anders is de binaire code verdacht en kan het apparaat niet worden opgestart.

waarschuwing Opmerking
Secure Boot is alleen voor IOT2050 PG2 en PG2 latere varianten (bijvoorbeeld IOT2050 M.2).

Vertrouwensketen

IOT2050 gebruikt een RSA-sleutelpaar als cryptografische sleutel, wat ook het meest voorkomende cryptografische algoritme is voor digitale handtekeningen in de industrie.

Een RSA-sleutelpaar heeft twee sleutels, een openbare sleutel en een private sleutel. In het scenario van de digitale handtekening ondertekent de private sleutel de binaire code, terwijl het apparaat de binaire code valideert met de openbare sleutel. De private sleutel moet veilig worden bewaard. De openbare sleutel kan daarentegen vrij worden verspreid.

De private sleutel ondertekent de volgende items:

  • Firmware, inclusief U-Boot, TF-A en OPTee
  • De OS-lader EFI Boot Guard
  • De Linux-kernel en alle andere UEFI-binaire bestanden die deel uitmaken van de opstartketen

Om de binaire handtekening te valideren, biedt Siemens een tool om de hash van de openbare sleutel in het one time programming (OTP)-gebied in IOT2050 te programmeren.

Vertrouwensketen: Tijdens het opstarten valideert de eerste bootloader, bijvoorbeeld SEBoot, de u-boot met de hash van de openbare sleutel die is opgeslagen in het OTP-gebied van IOT2050. Vervolgens valideert de u-boot de EFI Boot Guard, die op zijn beurt de Linux-kernel valideert samen met de device tree blobs.

Root of trust: Root of trust verwijst naar de hash van de openbare sleutel die is opgeslagen in het OTP-gebied van het apparaat en de SEBoot.

waarschuwing Opmerking
De SEBoot wordt gevalideerd aan de hand van de hash van de openbare sleutel van Siemens door de ROM-bootloader.

waarschuwing Opmerking
Bewaar de private sleutel veilig

Zodra de private sleutel uitlekt, kan een hacker zijn kwaadaardige u-boot of kernel ondertekenen die Secure Boot niet kan onderscheiden van de juiste, wat het apparaat in gevaar kan brengen.

Siemens biedt drie sleutel-slots in het OTP-gebied. Wanneer de sleutel die in gebruik is, lekt, kunt u overschakelen naar de volgende sleutel in de slots als de sleutel die in gebruik is om de gelekte sleutel ongeldig te maken. Drie slots garanderen dat u twee mogelijkheden hebt om Secure Boot te redden van sleutellekkage.
Inleiding - Vertrouwensketen

Secure Boot-infrastructuur

OTP-gebied

OTP (One Time Programmable)
Siemens opent het uitgebreide OTP-gebied voor u voor het implementeren van Secure Boot. De toegang tot dit OTP-gebied wordt beheerd door de SEBoot. Er zijn drie hoofdgedeelten opgeslagen in de OTP:

  • Hashes van openbare sleutels
  • Secure Boot inschakelbit
  • Veilige versie

Hashes van openbare sleutels
Er zijn drie slots om de hashes van de openbare sleutels op te slaan. U kunt het aantal hashes van de openbare sleutels kiezen dat moet worden geprogrammeerd (één, twee of drie).

Siemens raadt u aan om minstens twee sleutels te gebruiken. In het geval dat één sleutel is gelekt, kunt u een andere sleutel gebruiken.

  1. MPK: de eerste sleutel voor het ondertekenen van aangepaste firmware en afbeeldingen.
  2. SMPK: de tweede sleutel voor het ondertekenen van aangepaste firmware en afbeeldingen. Als de eerste sleutel is gelekt, kan de gebruiker overschakelen naar het gebruik van deze sleutel.
  3. BMPK: de derde sleutel voor het ondertekenen van aangepaste firmware en afbeeldingen. Als de tweede sleutel ook is gelekt, kan de gebruiker overschakelen naar het gebruik van deze sleutel.

Secure Boot inschakelbit
Secure Boot inschakelbit geeft aan of Secure Boot is ingeschakeld of uitgeschakeld. Deze bit is programmeerbaar via dezelfde tool voor sleutelprovisioning. Zodra deze bit is geprogrammeerd, valideert de SEBoot de volgende bootloader ten opzichte van de geprogrammeerde OTP-sleutels.
U kunt ervoor kiezen om deze bit samen met de hashes van de openbare sleutel te programmeren, of afzonderlijk nadat de sleutels zijn geprogrammeerd.

waarschuwing Opmerking
Als Secure Boot op IOT2050 is ingeschakeld, kunt u Secure Boot niet uitschakelen.

De Secure Boot inschakelbit regelt alleen dat de SEBoot de onmiddellijk volgende bootloader verifieert, wat in de meeste gevallen de combinatie is van TF-A, OPTee en u-boot SPL.

U kunt de afbeeldingsvalidatie in SPL nog steeds uitschakelen om de keten van het valideren achteraf te verbreken, zelfs als de Secure Boot inschakelbit is omgedraaid.

Veilige versie
Nadat u Secure Boot op IOT2050 hebt geïmplementeerd, kan de veilige versie Downgrade Attack detecteren en voorkomen.

De veilige versie wordt ook ondertekend door de private sleutel. Zodra een nieuwere firmware met een veilige versie wordt gedetecteerd en gevalideerd, wordt een Non-Volatile (NV)-teller op het apparaat bijgewerkt met het nieuwere versienummer. Wanneer het apparaat wordt aangevallen door een oudere buggy-firmware met een lagere veilige versie, detecteert en weigert SEBoot de downgrade-aanval.

De NV-teller is ook geïmplementeerd in het uitgebreide OTP-gebied. De veilige versie varieert van 0 tot 127, wat betekent dat u maximaal 127 beveiligingsreleases kunt hebben om de beveiligingsfouten op te lossen.

SEBoot

SEBoot is de eerste bootloader direct na de RBL (ROM Boot Loader), bijvoorbeeld de CPU. Het is ondertekend met de root-sleutel van Siemens en wordt gevalideerd door de RBL. Tijdens het opstarten is de belangrijkste taak voor SEBoot het valideren van de latere afbeeldingsversie die is ondertekend met de klantensleutel. SEBoot voorkomt ook de downgrade-aanval door de veilige versie van de afbeelding te vergelijken met de versie die is gedefinieerd in de OTP.

waarschuwing Opmerking
Voor IOT2050 moet de SEBoot de eerste bootloader zijn. Anders weigert het apparaat op te starten.

Voorbeeld voor IOT2050 Secure Boot

Implementatie van het IOT2050 secure boot voorbeeld

Op basis van de meegeleverde infrastructuur kunt u de secure boot voor IOT2050 op verschillende manieren implementeren.

Vereisten

  • linux machine is klaar
  • De meta-iot2050 repository is gekloond
  • Twee opslagmedia, SD-kaart of USB-stick, zijn OK
  • Één build image, deze kan worden opgeslagen op een SD-kaart of USB-stick

Procedures

  1. Genereer de RSA key pairs.
    waarschuwing Opmerking
    Siemens raadt u aan om minstens twee sets sleutels te gebruiken, bijvoorbeeld MPK en 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. Verwijder de bestaande demonstratiesleutelsets in <path-meta-iot2050>/recipes-bsp/secureboot-otp-provisioning/files/keys.
    rm -rf <path-meta-iot2050>/recipes-bsp/secure-boot-otpprovisioning/files/keys/*
    waarschuwing Opmerking
    Bewaar de private keys veilig. Commit uw keys niet naar de git repository.
  3. Kopieer de gegenereerde *.pem en *.crt naar <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. Bouw de ondertekende firmware en OS image:
    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

    waarschuwing Opmerking
    Voordat u de ondertekende images bouwt, moet u ervoor zorgen dat het certificaat voor de ondertekeningsleutel geldig is.
    Vernieuw het certificaat als het is verlopen.
    • De gegenereerde ondertekende firmware bevindt zich in<path-metaiot2050>/build/tmp/deploy/images/iot2050/iot2050-pg2-imageboot.bin
    • De gegenereerde ondertekende OS image bevindt zich in <path-metaiot2050>/build/tmp/deploy/images/iot2050/iot2050-image-swu-example-iot2050debian-iot2050.wic.img.
  5. Plaats een opslagmedium in de build machine en kopieer de gegenereerde iot2050-pg2-imageboot.bin ernaar.
  6. Plaats het opslagmedium in stap 5 in IOT2050 en start IOT2050 op met de boot image die u hebt voorbereid.
  7. Verbind de build machine en IOT2050 met een UART-kabel, open de shell en geef de volgende commando's om de flash te programmeren.
    iot2050-firmware-update -f iot2050-pg2-image-boot.bin
  8. Schakel IOT2050 uit en verwijder de voorbeeld image.
  9. Schakel IOT2050 in en voer "yes" (ja) in om keys naar OTP te programmeren wanneer u het prompt bericht krijgt.
    waarschuwing Opmerking
    Zodra Secure Boot is ingeschakeld, kunt u geen nieuwe key in OTP programmeren, zelfs niet als er een lege slot in OTP bestaat.
    waarschuwing Opmerking
    Zodra secure boot is ingeschakeld, wordt de u-boot console uitgeschakeld om de beveiliging te verbeteren.
  10. Plaats een ander opslagmedium in de build machine en maak het boot medium met de ondertekende OS image met het volgende commando.
    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. Plaats het boot medium met de ondertekende OS image en start IOT2050 op.
    Resultaat: Zowel de firmware image als de OS image zijn ondertekend en gevalideerd door de gegenereerde key set.

Controleer de voorbeeld implementatie

De voorbeeld implementatie is gebaseerd op de firmware en voorbeeld image configuratie die is opgenomen in <path-meta-iot2050>.
Controleer de voorbeeld implementatie

De ondertekende firmware image omvat:

  • SEBoot
  • Ondertekende TF-A
  • Ondertekende OPTee
  • Ondertekende U-Boot
  • OTP programmeringsdata

De ondertekende OS image bevat een ondertekende kernel PE image, die de kernel, device tree blobs, kernel command line parameter en een ramdisk bevat. Het bestandssysteem omvat:

  • De EFI systeempartitie bevat de EFI bootloader EFI Boot Guard
  • Boot partities bevatten de ondertekende kernel PE images
  • Willekeurig bestandssysteem aangekoppeld als /usr
  • Leesbaar/beschrijfbaar bestandssysteem aangekoppeld als /var
  • Leesbaar/beschrijfbaar bestandssysteem aangekoppeld als /home

Bootvolgorde
Alle genoemde image validaties gebruiken dezelfde key set als degene die is geprogrammeerd in het OTP gebied.

  1. Nadat het apparaat is ingeschakeld, valideert de SEBoot de gecombineerde image van TF-A, OPTee en U-Boot SPL.
  2. U-Boot SPL valideert U-Boot correct en vervolgens valideert U-Boot correct de EFI Boot Guard.
  3. EFI Boot Guard valideert de kernel PE image.
    Stap 1 en 2 gebruiken voornamelijk verified boot en X.509 certificaat en stap 3 gebruikt voornamelijk UEFI Secure Boot.

Key sets en keys die worden gebruikt in de voorbeeld implementatie

  • De key sets voor OTP programmering: <path-metaiot2050>/recipes-bsp/secureboot-otp-provisioning/files/keys.
    Deze keys zijn bedoeld om in het OTP gebied te worden geprogrammeerd.
  • De key set voor het ondertekenen en valideren van de U-Boot (zowel U-Boot SPL als U-Boot proper):
    <path-meta-iot2050>/recipes-bsp/u-boot/files/keys
    Dit zijn symbolische links naar de OTP keys.
  • De key set voor het ondertekenen en valideren in de UEFI Secure Boot, d.w.z. EFI Boot Guard en kernel:
    <path-meta-iot2050>/recipes-devtools/secure-bootsecrets/files
    Dit zijn ook symbolische links naar de OTP keys.

In de voorbeeld implementatie wordt eenzelfde key set gebruikt voor het ondertekenen en valideren van alle boot chains. U kunt echter verschillende keys gebruiken voor verschillende valideringsfasen, zolang:

  • De key die wordt gebruikt voor SEBoot om de gecombineerde TFA/OPTee/U-Boot SPL image te valideren, moet identiek zijn aan de OTP key die momenteel in gebruik is.
  • Samen met de image-binary moet de key die wordt gebruikt om de volgende fase image-binary te valideren, worden gevalideerd aan de hand van de key van de vorige fase. En wanneer de huidige fase image binary is gevalideerd en opgestart, begint de validatie voor de volgende fase image-binary aan de hand van de gevalideerde key.

Voorbeeld Kernel

De referentie implementatie heeft zeven partities.
Voorbeeld Kernel

Partitie Functie Redundant ontwerp? Opmerking
EFI Systeempartitie bevat UEFI applicatie, zoals EFI bootloader N Standaard partitie gedefinieerd in de UEFI specificatie
BOOT0/BOOT1 bevat unified kernel PE images Y

ROOTFS0/ROOTS

F1

bevat read-only (dmverity gebaseerde) rootfs die is aangekoppeld op /usr. Y

Met uitzondering van de afzonderlijke aankoppelingen erboven, zijn de andere rootfs read-only.

Tijdens het opstarten wordt de initrd in de unified kernel PE image aangeroepen door de kernel om de juiste read-only roots te vinden en te verifiëren via dm-verity. De juiste digest van de roofts wordt opgeslagen in de initrd en wordt gevalideerd door de UEFI secure boot, samen met de unified kernel PE image.

Var aangekoppeld op /var N Wanneer het secure boot voorbeeld is geïmplementeerd op IOT2050, gaat de dynamische content naar /var en /home.
Home aangekoppeld op /home N

waarschuwing Opmerking
Aangezien /usr is aangekoppeld als read-only en gevalideerd, kan /usr alleen worden bijgewerkt met SWUpdate. Commando's, zoals apt install en upgrade, zijn niet toegestaan.

Secure Boot geavanceerde onderwerpen

Sleutelvoorziening
De voorbeeldimplementatie gebruikt standaard twee sleutelsets. U kunt dit naar wens aanpassen. Als u bijvoorbeeld drie sleutelsets nodig heeft, maakt u de derde sleutel en plaatst u deze in de meta-iot2050 repository.
cd <pad-meta-iot2050>
./kas-container build kas-iot2050-boot-pg2.yml: kas/opt/secureboot.yml: kas/opt/otpcmd/key-provision-3keys.yml

Incidentverwerking: sleutel gelekt
Wanneer de sleutel die in gebruik is, lekt, kunt u als volgt overschakelen naar de volgende sleutelset:

  1. Kopieer of link de nieuwe sleutel naar<pad-meta-iot2050>/recipes-bsp/u-boot/files/keys/custMpk...
  2. Bouw de nieuwe sleutel-ondertekende firmware samen met de sleutel-schakelende otpcmd-data.
    cd <pad-meta-iot2050>
    ./kas-container build kas-iot2050-boot-pg2.yml: kas/opt/secureboot.yml: kas/opt/otpcmd/key-switch.yml

TUI-methode
Wanneer de sleutel die in gebruik is, lekt, kunt u ook overschakelen naar de volgende sleutelset met TUI.
cd <pad-meta-iot2050>
./kas-container menu

  1. Stel Firmware image for PG2 devices (Firmware-image voor PG2-apparaten) in als het Image type (beeldtype)
  2. Vink Secure Boot and OTP provisioning (Veilig opstarten en OTP-provisioning) aan in Image features (beeldkenmerken)
  3. Selecteer OTP provisioning command type (OTP-provisioning opdrachttype)
  4. Controleer uw selectie in generated.config.yaml.

Incidentverwerking: veilige versie
In de voorbeeldimplementatie kunt u de veilige versie als volgt instellen.

  1. Geef de volgende opdracht.
    cd <pad-meta-iot2050>
    ./kas-container menu
  2. Stel de Firmware image for PG2 devices (Firmware-image voor PG2-apparaten) in als het Image type (beeldtype), en stel Secure Boot (Veilig opstarten) in als de Image features (beeldkenmerken).
  3. Stel een hogere waarde in voor Use specific firmware secure version (Specifieke veilige firmwareversie gebruiken) onder Build options (bouwopties).
    U moet een hogere waarde instellen dan de oude waarde wanneer u de veilige versie moet verhogen om een beveiligingsfout te verhelpen. Bijvoorbeeld: als de huidige veilige versie die in gebruik is 3 is, moet u 4 gebruiken als de nieuwe veilige versie.
  4. Navigeer naar Save & Build (Opslaan en bouwen) en druk op Enter (Enter).

waarschuwing Opmerking
Alleen SEBoot controleert de veilige versie om de tispl container-image te valideren. Door de tispl container-image te vervangen, kan een nieuwe Secure Boot-keten worden opgezet voor de rest. Deze Secure Boot-keten kan downgrade-aanvallen voor die rest-images voorkomen.

Veilig beleid van SEBoot
SEBoot definieert drie veilige beleidsregels voor verschillende veilige statussen:

Veilig beleid Status van de geprogrammeerde sleutel Status van de Secure Boot-inschakelingsbit De image valideren tijdens het opstarten? Gedrag wanneer de validatie mislukt
geen Geen sleutel geprogrammeerd Nee
zacht 1 MPK is geprogrammeerd Onaangeroerd Ja Gaat door met opstarten
afgedwongen Zowel MPK als SMPK zijn geprogrammeerd Omgedraaid Ja Stopt met opstarten

1 U kunt het apparaat instellen op een zacht beleid als een laatste controle om te controleren of alles werkt zoals verwacht voordat u Secure Boot inschakelt.

waarschuwing Opmerking
De standaard veilige status van SEBoot is geen.

Waarschuwingssysteem

Deze handleiding bevat mededelingen die u in acht moet nemen om uw persoonlijke veiligheid te waarborgen en schade aan eigendommen te voorkomen. De mededelingen die betrekking hebben op uw persoonlijke veiligheid worden in de handleiding gemarkeerd met een veiligheidswaarschuwingssymbool, mededelingen die alleen betrekking hebben op schade aan eigendommen hebben geen veiligheidswaarschuwingssymbool. Deze onderstaande mededelingen zijn ingedeeld naar de mate van gevaar.


geeft aan dat de dood of ernstig persoonlijk letsel zal optreden als er geen passende voorzorgsmaatregelen worden genomen.


geeft aan dat de dood of ernstig persoonlijk letsel kan optreden als er geen passende voorzorgsmaatregelen worden genomen.


geeft aan dat er licht persoonlijk letsel kan optreden als er geen passende voorzorgsmaatregelen worden genomen.

waarschuwing LET OP:
geeft aan dat er schade aan eigendommen kan optreden als er geen passende voorzorgsmaatregelen worden genomen.

Als er meer dan één mate van gevaar aanwezig is, wordt de waarschuwing gebruikt die de hoogste mate van gevaar vertegenwoordigt. Een waarschuwing voor letsel aan personen met een veiligheidswaarschuwingssymbool kan ook een waarschuwing bevatten met betrekking tot schade aan eigendommen.

Gekwalificeerd personeel
Het product/systeem dat in deze documentatie wordt beschreven, mag alleen worden bediend door personeel dat gekwalificeerd is voor de specifieke taak in overeenstemming met de relevante documentatie, in het bijzonder de waarschuwingen en veiligheidsinstructies. Gekwalificeerd personeel is personeel dat op basis van hun opleiding en ervaring in staat is risico's te identificeren en potentiële gevaren te vermijden bij het werken met deze producten/systemen.

Referenties

Download handleiding

Hier kunt u de volledige pdf-versie van de handleiding downloaden. Deze kan aanvullende veiligheidsinstructies, garantie-informatie, FCC-regels, enz. bevatten.

Download Siemens IOT2050 Handleiding

Beschikbare talen

Inhoudsopgave