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

Ich versuche, den gesamten Flash vor dem Lesen durch ISP zu schützen. Es verfügt über einen Bootloader, der den Anwendungsbereich selbst programmieren kann.

Sperrbyte setzen auf:

LB1/LB2erlaubt dem Benutzer nicht, den Bootloader zum Hochladen neuer Firmware zu verwenden.

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

Es gibt also keine Möglichkeit, den Benutzer die Firmware über einen benutzerdefinierten Bootloader aktualisieren zu lassen und gleichzeitig den Flash vor dem Lesen zu schützen?

Antworten (2)

Sie haben keinen Chip angegeben, das Folgende ist hauptsächlich auf die 8-Bit-Atmega-Geräte ausgerichtet, aber es sind allgemeine Informationen. Lesen Sie den Abschnitt „Speicherprogrammierung“ für das Datenblatt Ihres spezifischen Chips, um genauere Informationen zu erhalten!

Abgesehen davon, und wie Sie sagten, enthalten alle AVR-Geräte zwei Lock-Bits mit den Namen LB1 und LB2. Durch Programmieren dieser (auf 0, niedrig) wird der Inhalt, der in Flash- und EEPROM-Speicher geschrieben wird, gemäß der folgenden Tabelle geschützt. Das Schutzniveau ist in drei Modi unterteilt, wobei Modus 1 keinen Schutz bietet und Modus 3 maximalen Schutz bietet. Es ist möglich, in einen höheren Schutzmodus zu wechseln, indem einfach die Lock-Bits neu programmiert werden.

Der AVR erlaubt das Ändern von "High"-Bits auf "Low", aber nicht umgekehrt. Es ist nicht möglich, ein "niedriges" Lock-Bit in ein "hohes" zu ändern, daher ist eine Verringerung des Schutzniveaus nicht möglich. Um die Lock-Bits zu löschen, ist ein vollständiger Chip Erase erforderlich, der den Flash-Speicher löscht.

AVR-Sperrbittabelle

Allein diese 2 Lock-Bits (LB1 und LB2) werden, wenn sie niedrig sind, 99,9 % der Leute daran hindern, Ihre Firmware zu stehlen! Wahrscheinlich mehr als 99,9%. Es wäre fast immer einfacher, Ihren Code zurückzuentwickeln.

Es gibt also keine Möglichkeit, den Benutzer die Firmware über einen benutzerdefinierten Bootloader aktualisieren zu lassen und gleichzeitig den Flash 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 Bootloader-Schutzsicherungen (BLB12 und BLB11) Ihren benutzerdefinierten Bootloader - Bereich sperren, SPI deaktivieren und sein geschützt vor 97-98% der Menschen.

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 Lock-Bits und Fuses weder im normalen Flash- oder EEPROM-Bereich, noch sind sie von der Software aus zugänglich, mit Ausnahme der Lock-Bits, die sich auf den Bootloader in Geräten mit der Selbstprogrammierungsfunktion beziehen. Tabelle 2 in diesem App-Hinweis hilft Ihnen dabei, herauszufinden, was Sie für Ihr spezielles Gerät tun können!

Atmels AVR-Linie sind keine Hochsicherheitsgeräte (sofern nicht ausdrücklich darauf hingewiesen!) und als solche kommen sie absolut nicht mit einer Code-Sicherheitsgarantie, noch sollten sie! Wie alle nicht sicheren Geräte (und leider sogar einige sichere) sind sie anfällig für häufige Angriffe!


Bearbeiten

Ich werde den Header der HV-Programmierschnittstelle an Bord setzen. Aber kann jemand einen HV-Programmierer verwenden, um Flash zu LESEN? Ich weiß, dass ein HV-Programmierer das Löschen von Chips durchführen kann, selbst wenn ISP/Jtag deaktiviert sind.

Ich denke nicht, dass Sie den HV-Programmierer in Ihr Board-Design aufnehmen sollten, es sei denn, dies ist unbedingt erforderlich, und Sie wissen sicher, dass er mit nichts Probleme verursacht. HV-Programmierer (12-Volt-Signale) sind nur als Sicherheitsmaßnahme zum Programmieren gesperrter (meistens fehlergesperrter) Chips verfügbar. Theoretisch ist dies nur dazu gedacht, das Gerät zu programmieren, nichts zu lesen. Und ich habe noch nie von einem Exploit gehört, der das Lesen ermöglichen würde.

Zum Aktualisieren des Bootloaders (gelegentlich) werde ich den Header der HV-Programmierschnittstelle an Bord setzen. Aber kann jemand einen HV-Programmierer verwenden, um Flash zu LESEN? Ich weiß, dass ein HV-Programmierer das Löschen von Chips durchführen kann, selbst wenn ISP/Jtag deaktiviert sind.

Ich denke, es gibt eine Möglichkeit, den gesperrten Flash über den Bootloader zu aktualisieren (was vielleicht mit einem internen Schreibflag und / oder ISR zu tun hat???) Aber ich muss meine Notizen durchsuchen und es vielleicht testen. Ich werde dies nicht für ~ 20 Stunden tun können; Daher empfehle ich dringend, eine neue Frage zu stellen , die sich nur darauf und für den von Ihnen erwähnten Prozessor konzentriert. Das ist eine sehr gute Frage !

+1 für den letzten Kommentar, wenn alles andere fehlschlägt, kann jeder den Chip einfach entlöten und uns einen AVR-Debugger / Programmierer stecken, um die Sperrbits zurückzusetzen, und Ihre Sicherheit ist weg.
@ 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 genauso denken. Ich versuche, meinen eigenen Code, meinen eigenen Bootloader, minimal zu schützen. Wie auch immer, noch ein paar Fragen dazu. Chip ist ATMega328, dachte, die Familie wird eine gemeinsame Verwendung von Sperrbits haben. Sie haben LB1und erklärt LB2, was ich auch in meiner Frage als einschränkende Option zur Verwendung des Bootloaders für Upgrade-Zwecke beschrieben habe. Es ist also keine Option. Was BLB12und BLB11angeht - das verstehe ich nicht. (Fortsetzung folgt)
Das Setzen dieser Bits hindert niemanden daran, den Flash (Anwendung + Bootloader) von außen zu lesen. Aus dem Datenblatt geht hervor, dass diese Bits nur LPM/SPM-Befehle blockieren, aber der serielle Programmierer verwendet sie nicht. Das Deaktivieren der seriellen Programmierung und des jtag ist eine weitere große Frage für mich. Zum Aktualisieren des Bootloaders (gelegentlich) werde ich den Header der HV-Programmierschnittstelle an Bord setzen. Aber kann jemand einen HV-Programmierer verwenden, um Flash zu LESEN? Ich weiß, dass ein HV-Programmierer das Löschen von Chips durchführen kann, selbst wenn ISP/Jtag deaktiviert sind.
@pablo, Entschuldigung, ich wollte dich nicht beleidigen. Als ich Ihre Frage zum ersten Mal sah, kam mir die Diebstahlsidee nicht in den Sinn; und ich habe eine Antwort geschrieben, die sich etwas auf das Abrufen von gesperrtem Code konzentrierte. Ich war jedoch bei der Arbeit und bevor ich diese Antwort abschickte, hatte ich eine Pause von ~ 2 Stunden. Als ich dann zurückkam, bemerkte ich, dass es immer noch keine Antwort gab, und war etwas überrascht, als ich Ihre Frage erneut las, dachte ich, dass "Diebstahl" der Grund gewesen sein könnte. Überhaupt nicht deine Schuld, ich habe jetzt den Haftungsausschluss entfernt. Das Prozessormodell wurde wegen der in dieser Tabelle aufgeführten Unterschiede benötigt und weil es 8/16/32-Bit-AVRs gibt ...
@Pablo in Bezug auf Ihre Fragen, siehe meine Bearbeitung am Ende meines Beitrags.
@Pablo aus irgendeinem Grund hatte meine Bearbeitung unten nicht gepostet! Ich habe es nochmal hinzugefügt, sorry.
ъGarrett Fogerlie: Ich wollte keinen HV-Programmierer an Bord einbauen, nur Header :) Aber ich habe herausgefunden, dass es nicht notwendig ist, weil Lock-Bits funktionierten und ich nur für den Fall, dass ich den ISP-Header verwenden kann, um Chips zu löschen und den gesamten Flash auf dem Gerät neu zu schreiben. Um die Antwort auf meine ursprüngliche Frage zusammenzufassen: Durch das Einstellen von LB1 und LB2 wird niemand daran gehindert, den gesamten Flash-Bereich zu lesen, UND gleichzeitig wird mich nicht daran gehindert, Programmspeicher über den Bootloader zu schreiben.
@Pablo Wenn die HV-Pinbelegung auf der Platine vorhanden ist, kann dies zu Problemen mit anderen Komponenten auf der Platine führen, z. B. einem Spannungsregler usw. Wird Ihre zusammengefasste Frage jetzt beantwortet? Das kann ich anhand deiner Aussage nicht beurteilen. Wenn nicht, empfehle ich wirklich, eine detaillierte neue Frage zu stellen und hier einen Link für mich zu hinterlassen, oder diese als beantwortet aufzuheben und Ihre Frage zu aktualisieren, um Ihre eigentliche Frage klarer zu machen. Außerdem +1 Ich wusste nicht, dass ich das nicht getan hatte, sorry.

Sie können die Sperrbits auf einigen ATMega-Geräten verwenden und trotzdem 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 / Fuses lesen noch schreiben, aber der Bootloader kann immer noch 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 (jedoch müssen Sie sicherstellen, dass Ihr Bootloader nicht gehackt werden kann).

Wie verbessert sich dies gegenüber der derzeit akzeptierten Antwort?
Beachten Sie, dass das Sperren des Rücklesens nahezu sinnlos wäre, solange Sie einen standardmäßigen Bootloader im Arduino-Stil haben, da der Bootloader selbst über eine Rücklesefunktion verfügt, es sei denn, Sie verwenden den erweiterten Nur-328P-Modus, der den Bootloader-LPM für den Anwendungsspeicher deaktiviert. Andernfalls müssten Sie den Bootloader ändern, um dies zu entfernen, auf Kosten der Programmierung, die nicht mehr überprüft werden kann. (Sie könnten möglicherweise einen anderen Überprüfungsmechanismus erstellen, aber es wäre nicht standardmäßig, dass Sie auch avrdude ändern/ersetzen müssten.)