Forum: Mikrocontroller und Digitale Elektronik Programm sichern


von Andy (Gast)


Lesenswert?

Hallo zusammen,

hätte eine Frage wegen Programmsicherung.

Wenn ich die Lockbits z.B. Mega8 setze ist der Controller ja gegen 
auslesen abgesichert,
wenn ich aber nun ein update anbieten möchte und demjenigen die HEX 
zukommen lasse hat er ja das Programm.

Gibt es die Möglichkeit eine Hex ins Flash aufzuspielen das dann ein 
Passwort das im Eprom hinterlegt ist vergleicht ohne dass man das Eprom 
auslesen kann.

Weil wenn man den Chip neu programmiert sind ja alle Locks wieder weg 
somit könnte man das Eprom wieder auslesen.

Ich hoffe ihr versteht meine Frage.

Gruß

Andy

von da1l6 (Gast)


Lesenswert?

Hallo


Was du meinst ist ein Bootloader der eine verschlüsselte Firmware 
entgegen nimmt, entschlüsselt und dann flasht.
Ob es was bringt ist eine andere sache, denn wenn dein Programm wirklich 
was Wert ist, wird sich jemand finden der es trotz Lockbits ausließt 
oder auslesen lässt.
Es gibt Firmen die das anbieten, auch hier im Forum schon gesehen.

da1l6

von Andy (Gast)


Lesenswert?

So wie ich es bisher gesehen habe lässt es sich nicht auslesen wenn die 
lockbits gesetzt sind.

von Guest (Gast)


Lesenswert?

Du willst einen Kopierschutz bauen?
Du möchtest in deinem Programm eine Abfrage machen, welche im EEPROM 
einen Schlüssel ausliest, ohne den das Programm nicht laufen würde?

Du lieferst ja mit der HEX das Programm. Was hindert mich daran, die HEX 
nun soweit zu analysieren, dass ich selbst den gesuchten Schlüssel ins 
EEPROM schreiben kann, oder was hindert mich daran, dein Programm so zu 
verändern, dass die Abfrage nicht mehr benötigt wird?

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Guest schrieb:
> Du möchtest in deinem Programm eine Abfrage machen, welche im EEPROM
> einen Schlüssel ausliest, ohne den das Programm nicht laufen würde?

Soweit ich das verstanden habe, soll die HEX Datei bereits verschlüsselt 
sein. Der bereits im (gegen Auslesen gesicherten) Controller befindliche 
Bootloader entschlüsselt mit den im EEPROM befindlichen Daten 
(Schlüssel) die HEX Datei und brennt das Ergebnis ins FLASH.

> Du lieferst ja mit der HEX das Programm. Was hindert mich daran, die HEX
> nun soweit zu analysieren, dass ich selbst den gesuchten Schlüssel ins
> EEPROM schreiben kann, oder was hindert mich daran, dein Programm so zu
> verändern, dass die Abfrage nicht mehr benötigt wird?

Dich hindert die Tatsache, dass du eine verschlüsselte HEX hast.

Ein weiterer Vorteil wäre, dass man Updates pro Controller verkaufen 
könnte, indem man jedem Controller einen eigenen Schlüssel verpasst.

von cppler (Gast)


Lesenswert?

Es ist möglich mit einem asymmetrischen Verfahren das zu realisieren, 
also wie bei PGP einen private und public key erzeugen.
Den private key wie schon erwähnt als Sicherung in einen verschlüsselten 
Bootloader/Firmware packen und dann mit dem public key die neue Firmware 
ausstatten und dort den neuen private key einbauen.
Da der aktuelle private key in der verschlüsselten Firmware ist gibt es 
kaum eine Möglichkeit den zu kompromittieren.
Natürlich jedesmal in der neuen Firmware neue Schlüssel verwenden.

von Daniel (Gast)


Lesenswert?

Asymmetrische Kryptographie allein ist hier vollkommen fehl am Platze da 
sie wesentlich längere Schlüssellängen verwendet und damit auch höhere 
Anforderungen an die Plattform in Bezug auf RAM und Rechenleistung 
stellt. Deswegen wird asymmetrische Kryptographie auch in der Regel nur 
verwendet um symmetrische Schlüssel zu verschlüsseln und anschließend 
sicher auszutauschen. Und warum sollte ein neuer private Schlüssel in 
das Firmware-Update eingebaut werden? Wenn überhaupt muss der private 
Schlüssel vom Controller selber generiert und intern gespeichert werden, 
ansonsten ist er nicht mehr privat.

Sofern man also eine gewisse Sicherheit braucht und den genannten Atmega 
nutzen muss empfiehlt sich Folgendes:

1. Controller mit einem Bootloader versehen welcher Firmware-Updates 
über externe Schnittstellen (z.B. UART) entgegennehmen und entschlüsseln 
kann
2. Controller mit einem individuellen symmetrischen Schlüssel versehen 
welcher im EEPROM persistent hinterlegt wird und dem Bootloader 
zugänglich ist
3. Firmware-Updates für jeden Controller mit dem jeweiligen Schlüssel 
verschlüsseln
4. Dem Kunden ein Tool zur Verfügung stellen welches Firmware-Updates 
zum Controller (d.h. an den Bootloader) übermittelt
5. Lockbits nach Anforderung setzen

Das bietet allerdings nur eine sehr grundlegende Absicherung, da gerade 
günstige Controller keinerlei Sicherheitsmaßnahmen wie tamper detection 
oder tamper resistance bieten. Zudem können, je nach verwendeten 
Kryptoalgorithmen und Implementierungen Seitenkanalangriffe durchgeführt 
werden mit welchen sich kryptographische Schlüssel ermitteln lassen. Ob 
solche Angriffe eine Gefahr sind hängt davon ab, welchen Nutzen ein 
Angreifer von einem Erfolg hat.

von Martin B. (martin_b35)


Lesenswert?

Hier im Forum gibt auch nen Kryptoloader:
Beitrag "AVR-Bootloader mit Verschlüsselung"

von Peter D. (peda)


Lesenswert?

Andy schrieb:
> wenn ich aber nun ein update anbieten möchte und demjenigen die HEX
> zukommen lasse hat er ja das Programm.

Nö, ein Hex ist kein Programm. Man kann es disassemblieren, aber das 
macht es nicht verständlicher. Alle Namen und Kommentare sind weg.
Ob sich das jemand antut, hängt von der Schöpfungshöhe ab, die muß dann 
schon sehr hoch sein.

Er kann natürlich mit dem Hex das ganze Gerät nachbauen, wenn er auch 
den Schaltplan dazu hat.


Beschreib dochmal Deine super duper Erfindung. Dann kann man besser 
einschätzen, ob überhaupt ein Schutz notwendig ist und welcher.

von Sven (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Nö, ein Hex ist kein Programm. Man kann es disassemblieren, aber das
> macht es nicht verständlicher. Alle Namen und Kommentare sind weg.

Das ist doch gerade der Sinn des Disassemblierens? Dadurch erhalte ich 
aus dem erstmal unverständlichen Hexcode Assembler und kann damit ggf. 
schonmal auf gewisse Funktionalität schließen. Disassembler wie IDA Pro 
liefern hier bereits automatisiert erstaunlich gute Ergebnisse.

Peter Dannegger schrieb:
> Ob sich das jemand antut, hängt von der Schöpfungshöhe ab, die muß dann
> schon sehr hoch sein.

Entweder von der Schöpfungshöhe oder vom Wert der gespeicherten Daten 
(z.B. kryptographische Schlüssel), das ist richtig.

von Karl H. (kbuchegg)


Lesenswert?

Sven schrieb:
> Peter Dannegger schrieb:
>> Nö, ein Hex ist kein Programm. Man kann es disassemblieren, aber das
>> macht es nicht verständlicher. Alle Namen und Kommentare sind weg.
>
> Das ist doch gerade der Sinn des Disassemblierens? Dadurch erhalte ich
> aus dem erstmal unverständlichen Hexcode Assembler und kann damit ggf.
> schonmal auf gewisse Funktionalität schließen.

Hast du das schon mal gemacht? Mit einem AVR-Hex?
Dann probiers mal. Und dann: viel Spass bei der Analyse.

von Sven (Gast)


Lesenswert?

Es mag hier ja viele Poser geben, aber ja, habe ich. Und 
selbstverständlich ist es nicht gerade trivial, das wollte ich auch gar 
nicht sagen. Aber mit ein wenig Erfahrung kann man doch schon recht viel 
über ein Programm herausfinden. Wenn man weiß, dass SPDR auf RAM-Adresse 
0x002F gemappt ist, dann braucht man beispielsweise den disassemblierten 
Code nur auf Schreib-/Lesezugriffe auf diese Adresse zu durchsuchen um 
zu wissen, dass eine Datenübertragung über SPI stattfindet- Anschließend 
kann man sich weiter nach oben hangeln und prüfen, welche Daten 
übermittelt werden. Und dann sieht man vielleicht, dass zunächst per SPI 
ein externes EEPROM gelesen wird und die empfangenen Daten in eine 
Entschlüsselung fließen. Weitere Untersuchungen zeigen dann, dass die 
Daten dort als Schlüssel verwendet werden. Und schon hat man alle Infos 
um den Schlüssel aus dem EEPROM zu extrahieren und selbst zu verwenden.

Das nur als Beispiel, es kommt natürlich auf das jeweilige Ziel an.

von Uwe (Gast)


Lesenswert?

Wer für den Schlüssel ein externes EEPROM nimmt sollte sich eh nen 
anderen Beruf wählen.

von Sven (Gast)


Lesenswert?

Das ist richtig, aber die Kreativität von Entwicklern treibt zuweilen 
recht bunte Blüten ;)

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.