AVR-Blitz vor dem Lesen durch ISP schützen?

15

Ich versuche, den gesamten Blitz vor dem Lesen durch den Internetdienstanbieter zu schützen. Es hat einen Bootloader, der in der Lage ist, den Anwendungsabschnitt selbst zu programmieren.

Festlegen des Sperrbytes auf:

LB1/LB2 Der Benutzer kann den Bootloader nicht zum Hochladen neuer Firmware verwenden.

BLB12/BLB11und BLB01&BLB02wird nicht verhindern, Flash durch ISP lesen, wenn ich mich nicht irre.

Gibt es also keine Möglichkeit, die Firmware des Benutzers mit einem benutzerdefinierten Bootloader zu aktualisieren und gleichzeitig den Flash-Speicher vor dem Lesen zu schützen?

Pablo
quelle

Antworten:

18

Sie haben keinen Chip angegeben. Die folgenden Informationen beziehen sich hauptsächlich auf 8-Bit-Atmega-Geräte, sind jedoch allgemeine Informationen. Weitere Informationen finden Sie im Abschnitt 'Speicherprogrammierung' für das Datenblatt Ihres jeweiligen Chips!

Davon abgesehen, und wie Sie bereits sagten, enthalten alle AVR-Geräte zwei Sperrbits mit den Namen LB1 und LB2. Durch Programmieren dieser (auf 0, niedrig) werden die in Flash- und EEPROM-Speicher geschriebenen Inhalte gemäß der folgenden Tabelle geschützt. Die Schutzstufe ist in drei Modi unterteilt, wobei Modus 1 keinen Schutz und Modus 3 maximalen Schutz bietet. Es ist möglich, durch einfaches Umprogrammieren der Sperrbits in einen höheren Schutzmodus zu wechseln.

Der AVR erlaubt das Ändern von "High" -Bits auf "Low", aber nicht umgekehrt. Es ist nicht möglich, ein "low" -Sperrbit in ein "high" zu ändern, daher ist eine Verringerung des Schutzniveaus nicht möglich. Um die Sperrbits zu löschen, ist ein vollständiges Löschen des Chips erforderlich, wodurch der Flash-Speicher gelöscht wird.

AVR-Sperrbittabelle

Diese 2 Sperrbits alleine (LB1 und LB2) verhindern, dass 99,9% der Leute Ihre Firmware stehlen! Wahrscheinlich mehr als 99,9%. Es wäre fast immer einfacher, Ihren Code rückzuentwickeln.

Gibt es also keine Möglichkeit, die Firmware des Benutzers mit einem benutzerdefinierten Bootloader zu aktualisieren und gleichzeitig den Flash-Speicher vor dem Lesen zu schützen?

Nach meinem besten Wissen (ich könnte mich irren, aber ich glaube, ich hätte vorher Probleme damit gehabt) können Sie auf Geräten mit den Bootloader-Schutzsicherungen (BLB12 und BLB11) Ihren benutzerdefinierten Bootloader- Bereich sperren , SPI deaktivieren und sein von 97-98% der Menschen geschützt.

Wenn jedoch keines der Sperrbits programmiert ist, sind keine Speichersperrfunktionen aktiviert !!! Die ISP-Deaktivierung reicht nur aus, um 70% der Personen zu blockieren.

Für einige zusätzliche Informationen befinden sich die Sperrbits und Sicherungen weder im normalen Flash- oder EEPROM-Bereich, noch sind sie über die Software zugänglich, mit Ausnahme der Sperrbits für den Bootloader in Geräten mit Selbstprogrammierungsfunktion. Tabelle 2 in dieser App-Notiz hilft Ihnen zu identifizieren, was Sie für Ihr bestimmtes Gerät tun können!

Die AVR-Produkte von Atmel sind keine Hochsicherheitsgeräte (sofern nicht ausdrücklich anders angegeben!) Und werden daher auch nicht mit einer Code-Sicherheitsgarantie geliefert. Wie alle nicht sicheren Geräte (und leider auch einige andere) sind sie häufigen Angriffen ausgesetzt!


Bearbeiten

Ich werde den Header der HV-Programmierschnittstelle einbinden. Aber kann jemand HV-Programmierer verwenden, um Flash zu lesen? Ich weiß, HV-Programmierer können Chip löschen, auch wenn ISP / Jtag deaktiviert sind.

Ich denke nicht, dass Sie den HV-Programmierer in Ihr Board-Design einbeziehen sollten, es sei denn, dies wird unbedingt benötigt, und Sie wissen, dass es bei nichts zu Problemen kommt. HV-Programmierer (12-Volt-Signale) sind nur als Sicherheitsmaßnahme für die Programmierung gesperrter (meistens fehlergesperrter) Chips verfügbar. Theoretisch soll dies nur dazu dienen, das Gerät so zu programmieren, dass es nichts liest. Und ich habe noch nie von einem Exploit gehört, der das Lesen erlaubt.

Für ein Upgrade des Bootloaders (gelegentlich) werde ich den Header der HV-Programmierschnittstelle an Bord bringen. Aber kann jemand HV-Programmierer verwenden, um Flash zu lesen? Ich weiß, HV-Programmierer können Chip löschen, auch wenn ISP / Jtag deaktiviert sind.

Ich denke , es kann ein Weg sein , um den gesperrten Flash via Bootloader zu aktualisieren, (etwas mit einem internen Schreib - Flag und / oder ISR zu tun , vielleicht ???) Aber ich werde meine Notizen suchen muß und vielleicht ist es zu testen. Ich werde das ~ 20 Stunden lang nicht tun können; Ich empfehle daher dringend, eine neue Frage zu stellen, die sich nur auf diese und den von Ihnen erwähnten Prozessor bezieht. Das ist eine sehr gute Frage !

Garrett Fogerlie
quelle
+1 für den letzten Kommentar, wenn alles andere fehlschlägt, kann ein Kerl den Chip einfach entlöten und uns einen AVR-Debugger / -Programmierer zum Zurücksetzen der Sperrbits schicken, und Ihre Sicherheit ist dahin.
helloworld922
@ Garrett Fogerlie: Ich bin mir nicht sicher, was Sie zu der Annahme veranlasst hat, dass ich versuche, den Code zu stehlen. Bitte lassen Sie es mich wissen, und ich werde meine Frage korrigieren, damit andere nicht auf die gleiche Weise denken. Ich versuche, meinen eigenen Code, meinen eigenen Bootloader, minimal zu schützen. Wie auch immer, paar weitere Fragen dazu. Chip ist ATMega328, dachte, die Familie wird gemeinsame Lock-Bit-Nutzung haben. Sie haben erklärt, LB1und LB2, was ich auch in meiner Frage als einschränkende Option beschrieben habe, Bootloader für Upgrade-Zwecke zu verwenden. Das ist also keine Option. Was BLB12und BLB11- das ist , was ich nicht verstehe. (Fortsetzung
Pablo
Das Setzen dieser Bits verhindert NICHT, dass jemand den Flash (Anwendung + Bootloader) von außen liest. Aus dem Datenblatt geht hervor, dass diese Bits nur LPM / SPM-Befehle blockieren, der serielle Programmierer sie jedoch nicht verwendet. Was das Deaktivieren der seriellen Programmierung und von jtag angeht, ist dies eine weitere große Frage für mich. Um den Bootloader (gelegentlich) zu aktualisieren, werde ich den Header der HV-Programmierschnittstelle einbinden. Aber kann jemand HV-Programmierer verwenden, um Flash zu lesen? Ich weiß, HV-Programmierer können Chip löschen, auch wenn ISP / Jtag deaktiviert sind.
Pablo
@pablo, sorry, ich meinte keine Beleidigung. Als ich Ihre Frage zum ersten Mal sah, kam ich nicht auf die Idee eines Diebstahls. und ich schrieb schrieb eine Antwort, die sich etwas auf das Abrufen von gesperrtem Code konzentrierte. Ich war jedoch auf der Arbeit und hatte vor dem Absenden dieser Antwort eine Pause von ca. 2 Stunden. Als ich dann zurückkam, bemerkte ich, dass es immer noch keine Antwort gab und war ein bisschen überrascht. Als ich dann Ihre Frage noch einmal las, dachte ich, dass „Diebstahl“ der Grund gewesen sein könnte. Gar nicht deine Schuld, ich habe jetzt den Disclaimer entfernt. Das Prozessormodell wurde aufgrund der in dieser Tabelle aufgeführten Unterschiede benötigt und weil es 8/16/32-
Bit-AVRs
1
ъGarrett Fogerlie: Ich wollte den HV-Programmierer nicht an Bord bringen, nur den Header :) Aber ich habe herausgefunden, dass dies nicht erforderlich ist, da die Sperrbits funktionierten und nur für den Fall, dass ich den ISP-Header verwenden kann, um den Chip zu löschen und den gesamten Flash auf dem Gerät neu zu schreiben. Um die Antwort auf meine ursprüngliche Frage zusammenzufassen: Die Einstellung LB1 und LB2 hindert jeden daran, den gesamten Flash-Bereich zu lesen, UND hindert mich gleichzeitig nicht daran, den Programmspeicher über den Bootloader zu schreiben.
Pablo
3

Sie können die Sperrbits auf einigen ATMega-Geräten verwenden und dennoch Ihren Code mit dem Bootloader aktualisieren.

Ich habe LB1 und LB2 auf einem ATMega 328 programmiert. Dann den Bootloader aufgerufen, das Hauptprogramm aktualisiert - alles hat perfekt funktioniert.

Der ISP kann weder Flash / EEPROM / Sicherungen lesen noch schreiben, aber der Bootloader kann weiterhin den Anwendungsabschnitt schreiben.

Ein Chip Erase mit dem ISP löscht die Sperrbits (LB1 und LB2), löscht aber auch den gesamten Flash / EEPROM, sodass Sie Ihren Code schützen können (Sie müssen jedoch sicherstellen, dass Ihr Bootloader nicht gehackt werden kann).

Gandalf
quelle
3
Wie verbessert sich dies gegenüber der aktuell akzeptierten Antwort?
Ignacio Vazquez-Abrams
Beachten Sie, dass das Sperren des Rücklesens, solange Sie einen Standard-Bootloader im Arduino-Stil haben, nahezu sinnlos ist, da der Bootloader selbst über eine Rücklesefunktion verfügt, es sei denn, Sie verwenden den erweiterten 328P-Modus, der das LPM des Bootloaders für den Anwendungsspeicher deaktiviert. Andernfalls müssten Sie den Bootloader modifizieren, um dies zu entfernen, und müssen dafür aufkommen, dass Sie die Programmierung nicht mehr überprüfen können. (Sie könnten möglicherweise einen anderen Überprüfungsmechanismus erstellen, aber es wäre nicht standardgemäß, wenn Sie auch avrdude ändern / ersetzen müssten)
Chris Stratton