Forum: Mikrocontroller und Digitale Elektronik STM32 Leseschutz gecracked (readout protection)


von H. R. (hacker_r)


Lesenswert?

Hi
Weiss jemand ob ST Stellung genommen hat zu diesem Problem?
Das ist ja eigentlich schon Tödlich, weil jeder die Firmware auslesen 
kann Es ist noch nicht mal klar ob nur STMF1 oder alle STM32 betroffen 
sind!
https://www.aisec.fraunhofer.de/en/FirmwareProtection.html

von Horst (Gast)


Lesenswert?

H. R. schrieb:
> Es ist noch nicht mal klar ob nur STMF1

Wo findest Du den?
In den Papers ist nur vom F0, speziell STM32F051R8T6, die Rede.

von H. R. (hacker_r)


Lesenswert?

> Wo findest Du den?
> In den Papers ist nur vom F0, speziell STM32F051R8T6, die Rede.
Schreibfehler, meinte F0.
Interessant, dieser Artikel über den Hack ist vor 7 Monaten 
veröffentlicht worden, und es gibt immer noch kein Statement von ST!

von Markus M. (adrock)


Lesenswert?

Der erste Angriff lässt sich mit RDP Level 2 wohl vermeiden.

Der zweite Angriff ist mit dem Offenlegen des DIEs verbunden, auch schon 
etwas aufwändiger (aber natürlich mit entsprechender Energie machbar).

Der dritte (noninvasive) Angriff dürfte wohl der interessanteste sein, 
und betrifft nach meinem Verständnis auch RDP level 2? Das ist schon 
krass...

von Christopher J. (christopher_j23)


Lesenswert?

Sehr interessantes Paper. RDP level 1 kann man sich ja beim F0 schon 
fast schenken. Würde mich mal interessieren, ob von der dritten Attacke 
auch Cortex-M0 von anderen Herstellern betroffen sind und wenn ja, 
welche Revisionen. SWD ist ja schließlich ein Teil des Kerns und die 
Frage wäre ob die Race-Condition nur von STs Flashanbindung ausgeht oder 
ob das von ARM quasi per IP an alle geliefert wurde.

Markus M. schrieb:
> Der dritte (noninvasive) Angriff dürfte wohl der interessanteste sein,
> und betrifft nach meinem Verständnis auch RDP level 2? Das ist schon
> krass...

Ne, man braucht für den dritten Angriff SWD-Zugriff, funktioniert also 
nur mit RDP level 1. Gegen RDP level 2 hilft laut Paper nur der invasive 
Eingriff.

von Gerd E. (robberknight)


Lesenswert?

Die Option-Bytes für den RDP level werden ja ziemlich am Anfang nach dem 
release des Low Power-Resets ausgelesen.

Was man da jetzt mal probieren könnte, wäre einen Powerglitching zu 
machen, also dem µC erst genug Spannung geben so daß er startet und dann 
mit genau kontrolliertem Timing kurz die Spannung reduzieren. Wenn man 
das richtige Timing raus hat, kann es sein daß er wegen der zu niedrigen 
Spannung das Bit falsch ausliest, aber noch nicht wieder in den 
Low-Power-Reset geht.

Die STM32...8-er ICs dürften dafür am empfänglichsten sein, denn dort 
kommt man direkt an die 1,8V-Versorgung des Cores ran. Bei den anderen 
ist ja intern zwischen Vcc und dem Core immer noch ein LDO-Regler 
vorgeschaltet.

von Franz (Gast)


Lesenswert?

Was ist ein RDP Level? Und wieso hat ein STM32 einen?

von Kuno (Gast)


Lesenswert?

Franz schrieb:
> Was ist ein RDP Level?
www.st.com/resource/en/application_note/dm00075930.pdf
Hier ist unter Punkt 1.1 eine Tabelle, welche die RDP-Level erläutert.
> Und wieso hat ein STM32 einen?
Gegenfrage:
Wieso sollte er keinen Schutz gegen auslesen haben?

von Franz (Gast)


Lesenswert?

>www.st.com/resource/en/application_note/dm00075930.pdf
Ah, jetzt wird's klarer
In der Wikipedia firmiert RDP unter Remote DeskTop
https://en.wikipedia.org/wiki/Network_Level_Authentication
Bei ST unter Global Read Out Protection (RDP).

Jeder nutzt die Abkürzung, wie's ihm passt.

von Alex W. (Gast)


Lesenswert?

Lo,

der Firmware-Extraktor basiert auf dem selben Boardtyp :-D

von A.. P. (arnonym)


Lesenswert?

Franz schrieb:
> Was ist ein RDP Level? Und wieso hat ein STM32 einen?

Wieso fragst du, warum etwas existiert, wenn du nicht weißt, was es ist?

von Christopher J. (christopher_j23)


Lesenswert?

Gerd E. schrieb:
> Was man da jetzt mal probieren könnte, wäre einen Powerglitching zu
> machen, also dem µC erst genug Spannung geben so daß er startet und dann
> mit genau kontrolliertem Timing kurz die Spannung reduzieren.

Ich denke gegen Powerglitching sollte die Brownout-Protection helfen, 
schließlich ist die genau dafür da und Spannung lässt sich eben auch 
relativ gut durch externe Komponenten (außerhalb des Cores) 
kontrollieren. Grundsätzlich finde ich die Idee aber gar nicht schlecht. 
Clock Glitching fällt leider (oder zum Glück ;)) auch heraus, weil die 
Cortex-M grundsätzlich mit internem Takt starten.

von Gerd E. (robberknight)


Lesenswert?

Christopher J. schrieb:
> Ich denke gegen Powerglitching sollte die Brownout-Protection helfen,

soweit die Theorie aus dem Datenblatt. Aber wie man an dem verlinkten 
Paper sieht, hat die zumindest an anderen Stellen auch ihre Grenzen...

> schließlich ist die genau dafür da und Spannung lässt sich eben auch
> relativ gut durch externe Komponenten (außerhalb des Cores)
> kontrollieren.

Komparatoren etc. haben aber auch eine Reaktionszeit. Und dicke 
Kondensatoren zum Stützen für längere Zeit sind auf Silizium nicht 
realistisch.

> Clock Glitching fällt leider (oder zum Glück ;)) auch heraus, weil die
> Cortex-M grundsätzlich mit internem Takt starten.

klar.

von Johannes O. (jojo_2)


Lesenswert?

Hallo zusammen, ich bin einer der Autoren des obigen Papers. Ich kann 
gerne ein paar Fragen zum Thema beantworten!


H. R. schrieb:
> Weiss jemand ob ST Stellung genommen hat zu diesem Problem?
In den öffentlich verfügbaren Erratas habe ich bisher nichts dergleichen 
gesehen. Auch ansonsten ist mir persönlich dazu nichts bekannt.


Horst schrieb:
> H. R. schrieb:
>> Es ist noch nicht mal klar ob nur STMF1
>
> Wo findest Du den?
> In den Papers ist nur vom F0, speziell STM32F051R8T6, die Rede.

Ja, es handelt sich nur um den STM32F0, wir haben ein paar Controller 
dieser Serie getestet und diese waren anfällig dafür. Auf den STM32F1 
kann der Angriff nicht angewendet werden.


Markus M. schrieb:
> Der erste Angriff lässt sich mit RDP Level 2 wohl vermeiden.
Ja!

> Der zweite Angriff ist mit dem Offenlegen des DIEs verbunden, auch schon
> etwas aufwändiger (aber natürlich mit entsprechender Energie machbar).
Chips lassen sich im technischen Umfeld relativ einfach öffnen, wenn die 
entsprechenden Chemikalien vorhanden sind. Ansonsten gibt es für so 
etwas auch Dienstleister.

> Der dritte (noninvasive) Angriff dürfte wohl der interessanteste sein,
> und betrifft nach meinem Verständnis auch RDP level 2? Das ist schon
> krass...
Die Schwachstelle lässt sich erst mal nur im RDP Level 1 ausnutzen, in 
RDP Level 2 ist die SWD-Schnittstelle deaktiviert. Da man aber nur ein 
einziges Bit der RDP-Bytes im Flash kippen muss, erreicht man durchaus 
einen Fallback von Level 2 auf Level 1. (=Kombination des zweiten und 
dritten Angriffs).


Gerd E. schrieb:
> Was man da jetzt mal probieren könnte, wäre einen Powerglitching zu
> machen [...]
Nur zu! Mir hat dazu leider bisher die Zeit gefehlt, mich genauer damit 
zu beschäftigen. Würde mich aber nicht wundern, wenn sie beispielsweise 
die Settings mehrmals auslesen und vergleichen. Dann könnte es mit einem 
einzelnen Glitch schwierig sein. Ich hatte mir mal überlegt, während des 
Hochstartens des Chips die Stromaufnahme zu beobachten (Oszi + kleiner 
Shunt + ggf. Verstärker). Damit könnte man abschätzen ob der Glitch 
intern einen Effekt ausgelöst hat. Es ist leider sehr schwierig Feedback 
aus dem Chip zu bekommen...

von Gerd E. (robberknight)


Lesenswert?

Johannes O. schrieb:
>> Was man da jetzt mal probieren könnte, wäre einen Powerglitching zu
>> machen [...]
> Nur zu! Mir hat dazu leider bisher die Zeit gefehlt, mich genauer damit
> zu beschäftigen. Würde mich aber nicht wundern, wenn sie beispielsweise
> die Settings mehrmals auslesen und vergleichen. Dann könnte es mit einem
> einzelnen Glitch schwierig sein.

Das würde aber voraussetzen, daß die sich dieser Gefahr bewusst sind und 
sie versuchen, kostenneutrale Gegenmaßnahmen umzusetzen. Da bin ich mir 
nicht sicher ob dieses Bewusstsein tatsächlich da ist. Denn dann hätten 
sie es vermutlich mit der Redundanz der Option-Flags auch anders gelöst 
so daß man den RDP 2 nicht nur mit einem einzelnen gekippten Bit wieder 
loswird.

Gibt es eigentlich in RDP 1 einen Weg die CPU-Register zu verändern ohne 
daß das Flash gelockt wird? Dann könnte man vielleicht in den 
integrierten Bootloader springen an eine Stelle nach dessen Prüfung des 
RDP levels...

von Philipp Klaus K. (pkk)


Lesenswert?

H. R. schrieb:
> Interessant, dieser Artikel über den Hack ist vor 7 Monaten
> veröffentlicht worden, und es gibt immer noch kein Statement von ST!

Laut Post vom 9. Januar

https://community.st.com/thread/46432-hacking-readout-protection-on-stm32

Arbeitet ST an einem Statement.

Philipp

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Gerd E. schrieb:
> Was man da jetzt mal probieren könnte, wäre einen Powerglitching zu
> machen, also dem µC erst genug Spannung geben so daß er startet und dann
> mit genau kontrolliertem Timing kurz die Spannung reduzieren. Wenn man
> das richtige Timing raus hat, kann es sein daß er wegen der zu niedrigen
> Spannung das Bit falsch ausliest, aber noch nicht wieder in den
> Low-Power-Reset geht.

Der Thread ist zwar schon älter, aber genau das haben die 
wallet.fail-Leute zum Hacken der Hardware-Wallet Trezor ausgenutzt.

Sie haben RDP2 auf RDP1 gedowngradet und konnten so im Update-Prozess 
der Wallet den privaten Schlüssel auslesen, weil der im RAM gebackupt 
wurde.

https://youtu.be/Y1OBIGslgGM?t=2397

Die haben dann auch hübsche Platinen für ihren PoC gebaut, damit man nur 
noch den STM32 in einen Test-Sockel einlegen muss und der private 
Schlüssel wird vollautomatisch extrahiert.

: Bearbeitet durch User
von mIstA (Gast)


Lesenswert?

Philipp Klaus K. schrieb:
> Laut Post vom 9. Januar
>
> Arbeitet ST an einem Statement.

Weiß  vielleicht einer der anwesenden Forumskollegen, ob diese Arbeit 
- nach mittlerweile beinahe einem Jahr - erfolgreich beendet wurde?

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

@Mampf F:
Am Ende haben die Jungs doch aber "nur"* den RAM auslesen können wenn 
ich das richtig gesehen habe?
An den Key kamen die dann ran, weil er während eines FW Updates in den 
RAM geschrieben wurde <insert facepalm here>.
Hätten vom Trezor die letzte Flashpage für statische Daten genutzt so 
wärs doch immernoch sicher gewesen?

*auch das ist eine großartige Leistung

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Mw E. schrieb:
> @Mampf F:
> Am Ende haben die Jungs doch aber "nur"* den RAM auslesen können wenn
> ich das richtig gesehen habe?

Ja genau - immerhin konnten sie den Debugger nutzen, der mit RDP2 
vollständig deaktiviert ist.

> An den Key kamen die dann ran, weil er während eines FW Updates in den
> RAM geschrieben wurde <insert facepalm here>.
> Hätten vom Trezor die letzte Flashpage für statische Daten genutzt so
> wärs doch immernoch sicher gewesen?

Stimmt, den Flash konnten sie ja immer noch nicht auslesen. Vlt ändern 
sie das ja mal.

> *auch das ist eine großartige Leistung

Absolut!

Letztens hatte ich mich noch mit jemandem über die RDP-Level unterhalten 
und wäre der Meinung gewesen, dass das sicher genug ist. So kann man 
sich täuschen.

Seltsam, dass man da so wenig Informationen findet - das Geschrei hätte 
eigentlich groß sein müssen.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Der Glitchangriff funzt ja nur wenn man sich auf die Configbytes 
verlässt und dann gabs auch "nur" ein Downgrade auf RDP1, der Debugger 
durfte daher ja in den RAM gucken.
Aber es lässt sich der RDP Level nochmal in Software setzen bevor diese 
was wichtiges tut.
Sollte man vllt unbedingt tun wenn man ein Trezor baut ;)

Das Problem ist die Codierung der Optionbytes:
0xAA: Level 0, no protection
0xCC: Level 2, chip protection (debug and boot from RAM features 
disabled)
Others: Level 1, read protection of memories (debug features limited)

Wenn "Others" -> Level 2 wäre, dann wär alles gut.
Sobald auch nur ein Bit flippt ist RDP L1 aktiv.

Also STM32 immer so proggen als wär man nur im RDP L1 :/

von Gerd E. (robberknight)


Lesenswert?

Mampf F. schrieb:
> Seltsam, dass man da so wenig Informationen findet - das Geschrei hätte
> eigentlich groß sein müssen.

Ich denke jeder, der sich ein bischen tiefer mit dem Thema beschäftigt, 
weiß, daß man reguläre µCs mit überschaubarem Aufwand auslesen kann. Was 
ich so gehört hab, gibt es in China einige Hinterhof-Adressen, die sowas 
regelmäßig als Dienstleistung anbieten.

Vermutlich tüfteln die für die gängigen Controllertypen eine Weile, und 
finden dann Glitching- oder ähnliche Angriffe.

Die andere Variante ist mit Elektronenmikroskop und Ionenstrahl 
anzugreifen, so ähnlich wie z.B. hier beschrieben:
http://siliconexposed.blogspot.com/2014/03/getting-my-feet-wet-with-invasive_31.html

Spezielle Security-Mikrocontroller sollen Schutzmaßnahmen gegen diese 
Angriffe haben. Die konkret verwendeten Schutzmaßnahmen werden 
allerdings eigentlich so gut wie immer geheim gehalten. Viele von diesen 
Security-Mikrocontrollern sind auch nicht frei erhältlich oder 
öffentlich dokumentiert. Das erschwert natürlich auch die 
Security-Forschung an ihnen.

von Philipp Klaus K. (pkk)


Lesenswert?

mIstA schrieb:
> Philipp Klaus K. schrieb:
>> Laut Post vom 9. Januar
>>
>> Arbeitet ST an einem Statement.
>
> Weiß  vielleicht einer der anwesenden Forumskollegen, ob diese Arbeit
> - nach mittlerweile beinahe einem Jahr - erfolgreich beendet wurde?

Es gab Forumsposts von einem ST-Mitarbeiter (MANI Christophe_O) im 
damaligen ST-Forum. Seither wurde die Forumssoftware gewechselt,der 
Thread wurde ins neue Forum portiert, aber dass MANI Christophe_O für ST 
arbeitet(e) ist nun nicht mehr ohne weiteres erkennbar (in der neuen 
Software steht nur "(Community Member)" wie bei den gewöhnlichen Postern 
hinter dem Namen, wo in der alten Software das blaue ST-Symbol war (auch 
wenn manche andere ST-Mitarbeiter nun ein "(ST Employee)" haben):

https://community.st.com/s/question/0D50X00009Xke7aSAB/readout-protection-cracked-on-stm32

Philipp

von Thomas Lausen (Gast)


Lesenswert?

Offenbar hat der STM32F1 auch eine Lücke, siehe 
Beitrag "STM32F1: Sicherheit der Firmware Protection"

ThoLausen

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.