Laser Fault Injection met een beperkt budget: RP2350 Editie

Inleiding

Kort na deze aankondiging, tijdens DEFCON 2024, werd er een interessante uitdaging gelanceerd die gericht was op deze nieuwe functies: de RP2350 Hacking Challenge. Na een periode van werk en de ontwikkeling van een volledig aangepast "Laser Fault Injection Platform", ben ik erin geslaagd deze uitdaging te voltooien en mijn bevindingen in te dienen bij Raspberry Pi.

Dit artikel biedt technische details over dit aangepaste platform, inclusief fabricagebestanden voor those die hun eigen systeem willen bouwen. Daarnaast leg ik uit hoe het injecteren van een enkele door een laser veroorzaakte fout (fault) de Secure Boot-functie van de RP2350 kan omzeilen.

Waarschuwing Het in dit artikel beschreven "Laser Fault Injection Platform" maakt gebruik van een infrarood laserbron met een hoog vermogen. Een dergelijk component kan gevaarlijk zijn; wees voorzichtig als je probeert dit werk te reproduceren.

Hacking Challenge & Beveiligingsfuncties van de RP2350

Doelen van de uitdaging

Het doelwit van deze uitdaging is een Pico 2-board met een RP2350-microcontroller. De configuratie moet gebeuren volgens de instructies in de GitHub-repository van de challenge. Deze instructies zorgen voor het volgende:

  • Het schrijven van "geheime" data in een van de OTP-gebieden (One-Time Programmable) van de RP2350.
  • Het configureren en inschakelen van de Secure Boot-functie, waarbij de chip zoveel mogelijk wordt vergrendeld. Dit omvat het uitschakelen van debug-interfaces (SWD) en het inschakelen van diverse beveiligingsfuncties, zoals glitch-detectoren.
  • Het flashen van een ondertekende firmware die de toegang tot het OTP-gebied waar het geheim is opgeslagen, verder beperkt.

Het doel is om een manier te vinden om de geheime data te herstellen, waarbij potentieel de Secure Boot-functie wordt omzeild.

Beveiligingsfuncties

De Secure Boot-functie wordt afgedwongen door code in de Boot ROM van de RP2350. Deze code is op verschillende manieren geharden, waarbij verder is gegaan dan softwarematige methoden; de Boot ROM maakt gebruik van hardware-specifieke functies.

Deze functies zijn primair gerelateerd aan een innovatief component genaamd de "Redundancy Co-Processor" (RCP). Volgens het RP2350-datasheet wordt de RCP in de bootrom gebruikt om hardware-ondersteunde mitigatie te bieden tegen fault injection en return-oriented programming (ROP) aanvallen. Dit omvat:

  • Het genereren en valideren van stack canary-waarden op basis van een random seed per boot.
  • Het bevestigen dat bepaalde punten in het programma in de juiste volgorde worden uitgevoerd zonder stappen over te slaan.
  • Het valideren van booleans die zijn opgeslagen als een van twee geldige bitpatronen in een 32-bit woord.
  • Het valideren van 32-bit integers die redundant zijn opgeslagen in twee woorden met een XOR-parity mask.
  • Het stopzetten van de processor bij het bereiken van een softwarematig gedetecteerde panic-conditie.

Elke core's RCP heeft een 64-bit seed-waarde. De RCP gebruikt deze waarde om stack canary-waarden te genereren en om korte pseudorandom vertragingen toe te voegen aan RCP-instructies.

Daarnaast is de RP2350 in staat om fault injection-pogingen te detecteren met behulp van glitch-detectoren. Deze configureerbare circuits reageren op voltage- of elektromagnetische fault-injection-pogingen en resetten het systeem. Voor deze uitdaging zijn deze detectoren ingesteld op hun maximale gevoeligheidsniveau.

Overzicht van het artikel

Waarom kiezen voor Laser Fault Injection (LFI)

Gezien het feit dat de Boot ROM van de RP2350 al was geaudit vóór de start van de uitdaging, heb ik niet geprobeerd om logische bugs te vinden, maar direct gekeken naar een hardware-aanval, zoals fault injection.

Online reacties suggereerden echter dat het glitch-detectiesysteem in de RP2350 vrij efficiënt was in het mitigeren van eenvoudige voltage fault injection-aanvallen. Daarom besloot ik de uitdaging aan te gaan met laser fault injection, in de veronderstelling dat het focussen van een laserstraal buiten de glitch-detectorcircuits het mogelijk zou maken om fouten te injecteren zonder deze te triggeren.

Hoewel ik ervaring had met "klassieke" voltage fault injection, wist ik niets van laser fault injections. Deze uitdaging werd dan ook gebruikt als kans om een volledig aangepast en goedkoop laser fault injection-platform te bouwen.

Opmerking: Hoewel LFI traditioneel als duur bekend staat, zijn er onlangs goedkopere platforms verschenen, zoals "Laser Fault Injection for The Masses" (die laser-graveerhardware hergebruikt) en de "RayV-Lite" van NetSPI.

Voorbereiding van het sample

Het principe van LFI is relatief eenvoudig: een gefocuste laserstraal wordt gericht op de silicon die van het doelcomponent. Transistoren zijn gevoelig voor foto-elektrische effecten, wat betekent dat het uitgezonden licht voldoende kan zijn om tijdelijke fouten of defecten op te wekken. Wanneer dit precies getimed wordt, kunnen deze fouten worden gebruikt om beveiligingsfuncties te omzeilen.

Een groot nadeel ten opzichte van voltage- of clock-glitching is dat de silicon die blootgelegd moet worden, terwijl het circuit daarna nog steeds normaal moet kunnen functioneren.

Ik heb ervoor gekozen de die vanaf de achterzijde (backside) bloot te leggen om twee redenen:

  1. Toegang tot de achterzijde kan worden bereikt met goedkope mechanische hulpmiddelen. De bovenkant blootleggen zou chemicaliën vereisen, zoals geconcentreerd salpeterzuur.
  2. Op basis van online afbeeldingen lijkt de bovenkant van de die volledig bedekt te zijn met een metaallaag, wat fault injection zou bemoeilijken.

Blootleggen van de Die (Die Exposure)

De doel-RP2350 wordt eerst van het Pico 2-board gesoldeerd met een hot air reflow station. Vervolgens is een goedkoop graveerinstrument (Dremel-achtig) gebruikt om voorzichtig materiaal rond de ground pad te verwijderen. Nadat voldoende materiaal is verwijderd, kan de metalen ground pad worden verwijderd, waarna een laag zilverkleurige (warmtegeleidende?) pasta verschijnt. Door deze pasta weg te krabben, wordt de achterzijde van de die zichtbaar.

Main Carrier Board

Het voorbereide sample wordt gesoldeerd op een aangepaste PCB, ontworpen om te integreren met het Laser Fault Injection Platform. Deze board heeft een gat in het midden waardoor de achterzijde van de RP2350-die zichtbaar is. De board bevat verder enkel een kleine LDO om de core van stroom te voorzien; stroom- en controlesignalen worden via een FFC-connector doorgeleid.

I/O Board

De Main Carrier Board verbindt via een FFC-kabel met de I/O Board. De I/O Board verdeelt de verschillende controlesignalen via:

  • Een USB-connector.
  • Pin-headers die verbonden zijn met een FPGA-board (gebruikt voor de aanvalslogica).
  • Testpunten voor SWD-debugging.

Daarnaast zijn er twee QSPI-flashes op de board gemonteerd. De FPGA kan bepalen welke flash "actief" is (verbonden met de ~CS-lijn van de RP2350). Dit betekent dat de actieve flash gewisseld kan worden tussen elke aanvraag van de RP2350 aan het externe geheugen, wat essentieel is voor de aanval.

Herstel van de Ground-verbinding

Een probleem bij het verwijderen van de ground pad is dat de enige ground-verbinding van het IC wordt vernietigd. De RP2350 heeft een PGND-pin voor de interne DC/DC-converter, maar deze lijkt geen lage-impedantie interne verbinding met ground te hebben.

Om dit op te lossen, zijn kleine stukjes blootgelegd koper (of goud) en gaten waar bond-wires liepen, geïdentificeerd. Door geleidende epoxy (MG CHEMICALS 9410) aan te brengen tussen deze metalen punten en koperen pads op de Carrier Board, kon een voldoende ground-verbinding worden hersteld. De epoxy is uitgehard met een hot air station op 150°C gedurende ongeveer 10 minuten.

Beperkingen: Dit proces is risicovol en niet 100% succesvol. Bovendien is de herstelde verbinding niet perfect, waardoor de RP2350 niet op hoge kloksnelheden kan draaien zonder instabiliteit. Voor de Boot ROM is dit echter geen probleem, aangezien deze conservatief is geconfigureerd.

Laser Fault Injection Platform

Platform Overzicht

Het platform is verdeeld in twee subsystemen:

  1. Positioning Stage: Gebruikt om de die van de RP2350 zeer precies te verschuiven voor observatie en laser-focussering.
  2. Optisch Subsystem: Gebruikt voor het visualiseren van de die en het focussen van krachtige laserpulsen.

Positioning Stage

De positionering is gebaseerd op de OpenFlexure Delta Stage. Met eenvoudige 3D-geprinte onderdelen en betaalbare stappenmotoren is hoge precisie mogelijk. De basis is verhoogd om ruimte te maken voor het optische subsystem en er zijn threaded inserts toegevoegd voor de elektronica.

Optisch Subsystem

Vanwege de achterzijde-aanval moet infrarood licht worden gebruikt, omdat silicium bijna volledig opaak is voor zichtbaar licht. Er wordt gebruikgemaakt van een golflengte van 1064nm.

Componenten:

  • Laser Driver Board: Stuurt de laserdiode aan voor korte, krachtige pulsen.
  • Objective Lens: Een microscoop-objectief (infinity-corrected) voor eenvoudigere focussering.
  • Oblique Illumination System: Een 1064nm LED voor imaging. De LED wordt alleen gebruikt voor uitlijning en uitgeschakeld tijdens de aanval om interferentie met analoge circuits te voorkomen.
  • Imaging Camera: Een Raspberry Pi Camera v2 "NoIR" (zonder IR-filter).
  • Laser Diode: Een 1064nm laserdiode (3W rated).
  • Collimating Lens: Om de output van de laserdiode te collimeren.
  • Beam Splitter: Reflecteert 90% van het laserlicht naar het doel en laat 10% van het imaging-licht door naar de camera.
  • Tube Lens: Voor de uiteindelijke beeldvorming op de sensor.

Laser Driving

LFI vereist korte, krachtige lichtpulsen. Hiervoor is een aangepaste Laser Driver Board ontworpen.

Architectuur van de Driver Board:

  • USB-to-I2C bridge voor configuratie via een computer.
  • Digitale potentiometer om de hoogspanning (tot 75V) van de voeding in te stellen.
  • Pulse Generator Circuit om de pulsen te creëren.
  • Pin-header voor triggers vanaf de FPGA.
  • SMA-connector om de stroompulsen te monitoren via een oscilloscoop.

Pulse Generation Principe: Een condensator (C) wordt opgeladen via de hoogspanningsvoeding. Wanneer de schakelaar (SW, een GaN FET) sluit, ontstaat er een stroompuls door de laserdiode. De waarden die succesvol waren voor de RP2350 zijn: $R=1.4\Omega$, $L=33\text{nH}$, $C=60\text{nF}$.

Sourcing van de Laserdiode: Het vinden van een geschikte 1064nm diode was lastig. Na diverse pogingen met laag-vermogen diodes, zijn er via Alibaba diodes aangeschaft met een rating van 3W. Hoewel deze in de praktijk ver boven hun maximale stroomrating worden gebruikt tijdens de korte pulsen, bleven ze verrassend genoeg intact.

Resultaten van de Fault Injection

Identificatie van Gevoelige Gebieden

Met behulp van dummy-firmware is de die gescand om te zien waar laserpulsen de ARM-core konden verstoren zonder de glitch-detectoren te triggeren. Er zijn specifieke gebieden gevonden waar de executie-flow beïnvloed kan worden. Afhankelijk van waar de code vandaan komt (SRAM, Flash of ROM), kunnen verschillende locaties op de die het meest effectief zijn.

Omzeilen van de Secure Boot-functie

Beperkingen:

  • Er kan slechts één fault tegelijk worden geïnjecteerd (door de oplaadtijd van de condensatoren).
  • De puls moet getriggerd worden op een observeerbaar extern event (bijv. QSPI-activiteit).
  • Random vertragingen door de RCP kunnen de timing bemoeilijken.

Analyse van de Boot ROM: De broncode van de Boot ROM is publiekelijk beschikbaar, maar voor de aanval is de ARM-assembly in Ghidra gebruikt.

Het High-Level Idee: De functie svarmcritramtrashverifyblock vormt de kern van Secure Boot. Het proces is:

  1. Data wordt uit de Flash gekopieerd naar het RAM (svarmcritmemcopybywords).
  2. Een SHA-256 hash wordt berekend over de data in het RAM (sbsha256update_32).
  3. De signatuur wordt gevalideerd via ECDSA.

Het idee is om een fault te injecteren na de kopie naar RAM, maar voor de hash-berekening. Als de hash-berekening wordt gedwongen om data te gebruiken die niet uit het RAM komt, maar direct van de Flash (die beheerst wordt door de aanvaller), kan de signatuurvalidatie slagen, ongeacht welke data er daadwerkelijk in het RAM staat.

Fault Injection Scenario's:

  1. Scenario #1 - Instruction "Skip": Als de instructie movs r1, r4 (die de bron-pointer instelt voor de hash-functie) wordt overgeslagen of gemuteerd, kan de hash-functie data lezen van een onverwacht adres in de Flash.
  2. Scenario #2 - Register Value Corruption: Tijdens tests werd waargenomen dat fouten vaak resulteerden in data die vanaf offset 0 van de Flash werd gelezen.
  3. Scenario #3 - Instruction Mutation: Een fault bij de pop {r4, pc} instructie zou kunnen voorkomen dat R4 wordt hersteld, waardoor R4 een waarde bevat die door de aanvaller is gecontroleerd (de laatste gekopieerde word uit de Flash).

Het Aanvalsproces

Software Architectuur

  • FPGA: Monitort de QSPI-bus in real-time om de laserpuls te synchroniseren. De FPGA regelt ook het aan- en uitschakelen van de stroom naar de RP2350 en het wisselen tussen de twee QSPI-flashes.
  • Laser Driver Board: Wordt via USB geconfigureerd voor de juiste spanning.
  • Positioning Stage: Wordt aangestuurd door een Raspberry Pi via een web-API om de die te scannen.

Synchronisatie en Timing

De laatste QSPI-read van de geheugenkopie is het triggerpunt. Hoewel er een RCP-instructie is die een random vertraging introduceert (tot 127 klokcycli), is het aantal pogingen per seconde (ca. 20) voldoende om uiteindelijk een succesvolle hit te scoren.

Organisatie van het Flash-geheugen

  • Flash 1: Bevat een kopie van de geldige, ondertekende firmware, maar met een kleine shellcode in de reset-handler die springt naar een willekeurig adres (XIP_BASE + 0x10000). Het laatste woord van de data is ingesteld op een specifiek offset (0x7000).
  • Flash 2: Bevat drie kopieën van de ongewijzigde firmware op offsets 0x0, de grootte van de data, en 0x7000. Dit zorgt ervoor dat ongeacht het scenario (#1, #2 of #3), de hash-berekening een geldige hash produceert. Op offset 0x10000 staat de uiteindelijke willekeurige firmware.

De Attack Loop

  1. Selecteer Flash 1.
  2. Zet de RP2350 aan.
  3. Monitor QSPI-reads tot de geheugenkopie voltooid is.
  4. Wissel naar Flash 2.
  5. Wacht een korte vertraging en pulseer de laser.
  6. Monitor QSPI-reads om te controleren of de bypass is geslaagd.
  7. Bij falen: zet de RP2350 uit en begin opnieuw.

Resultaten en Mogelijke Verbeteringen

Het injecteren van fouten die data van de QSPI-bus trekken is relatief eenvoudig, maar het succespercentage was laag door:

  • Te sterke faults die registers (zoals de grootte-parameter) corrupt maakten.
  • Drift in de positioning stage door temperatuurveranderingen.

Na 16 uur finetuning van de laserparameters en positie, werd de eerste bypass behaald. Daarna duurde het gemiddeld 20 minuten voor een nieuwe succesvolle bypass. Dit stelt de aanvaller in staat om willekeurige firmware uit te voeren en geheimen uit het OTP-gebied van de RP2350 te lezen.

Mogelijke verbeteringen:

  • Finetuning van de pulsduur via aanpasbare componenten op de driver board.
  • Een kleinere laser-spot size voor meer controle en reproduceerbaarheid.
  • FPGA-emulatie van de QSPI-flash in plaats van twee fysieke chips.

Conclusie en Openbaarmaking

Laser fault injection kan met een beperkt budget worden uitgevoerd. Hoewel het systeem niet optimaal presteert, is het mogelijk om fouten in de RP2350 te injecteren zonder de glitch-detectoren te triggeren. Door een specifiek, minder goed beschermd deel van de Boot ROM te targeten en een compatibele payload via de QSPI-bus aan te bieden, kan Secure Boot worden verslagen.

Na de eerste succesvolle bypass is contact opgenomen met Raspberry Pi. Zij hebben bevestigd dat de "break-in" geldig was en dat toekomstige versies van de Boot ROM van de RP2350 meer hardening zullen bevatten in het betreffende deel van de code.

Bibliografie

  1. Andrew 'bunnie' Huang. Infra-red, in-situ (iris) inspection of silicon. 2023.
  2. Jemellie Galang, et al. A green laser pointer hazard. 2010.
  3. Samuel McDermott, et al. Multi-modal microscopy imaging with the openflexure delta stage. Opt. Express, 2022.
  4. Antonios Stylogiannis, et al. Continuous wave laser diodes enable fast optoacoustic imaging. Photoacoustics, 2018.