15 votos

¿Proteger la flash del AVR de la lectura a través del ISP?

Estoy tratando de proteger todo el flash de la lectura a través de ISP. Tiene bootloader, capaz de auto programar la sección de aplicaciones.

Fijando el byte de bloqueo en:

LB1/LB2 no permitirá al usuario utilizar el bootloader para cargar un nuevo firmware.

BLB12/BLB11 y BLB01&BLB02 no impedirá la lectura de flash a través de ISP, si no me equivoco.

¿Así que no hay forma de permitir al usuario actualizar el firmware por medio del bootloader personalizado y proteger la flash de la lectura al mismo tiempo?

18voto

user9730 Puntos 11

No has especificado un chip, lo siguiente está orientado principalmente a los dispositivos atmega de 8 bits, pero es información general. Lee la sección 'Programación de la memoria' de la hoja de datos de tu chip específico para obtener información más específica.

Dicho esto, y como has dicho, todos los dispositivos AVR contienen dos bits de bloqueo llamados LB1 y LB2. La programación de estos (a 0, bajo) añadirá protección a los contenidos escritos en las memorias Flash y EEPROM de acuerdo con la siguiente tabla. El nivel de protección se divide en tres modos, donde el modo 1 no ofrece ninguna protección y el modo 3 ofrece la máxima protección. Es posible pasar a un modo de protección superior simplemente reprogramando los bits de bloqueo.

El AVR permite cambiar los bits "altos" a "bajos", pero no al revés. No es posible cambiar un bit de bloqueo "bajo" a "alto", por lo que no es posible bajar el nivel de protección. Para borrar los bits de bloqueo, es necesario realizar un Chip Erase completo, que borre la memoria Flash.

AVR lock bit table

Sólo estos dos bits de bloqueo (LB1 y LB2), cuando estén bajos, evitarán que el 99,9% de las personas roben su firmware. Probablemente más del 99,9%. Casi siempre sería más fácil hacer ingeniería inversa de su código.

¿Entonces no hay manera de permitir al usuario actualizar el firmware por medio del bootloader personalizado y proteger la flash de la lectura al mismo tiempo?

Hasta donde yo sé (podría estar equivocado pero creo que ya habría tenido problemas con esto), en los dispositivos que tienen los fusibles de protección del bootloader (BLB12 y BLB11), se puede bloquear su gestor de arranque personalizado sección, desactivar el SPI y estar protegido del 97-98% de las personas.

Sin embargo, cuando ninguno de los bits de bloqueo está programado, ¡¡¡no hay funciones de bloqueo de memoria habilitadas!!! La desactivación del ISP sólo es suficiente para bloquear al 70% de las personas.

Para una información extra, los bits de bloqueo y los fusibles no se encuentran en el espacio normal de la flash o la EEPROM, ni son accesibles desde el software, excepto los bits de bloqueo relacionados con el cargador de arranque en los dispositivos con la función de autoprogramación. Tabla 2 en esta nota de la aplicación le ayudará a identificar lo que puede hacer para su dispositivo en particular.

La línea de AVRs de Atmel no son dispositivos de alta seguridad (a menos que se indique explícitamente) y como tal no vienen con ninguna garantía de seguridad de código, ¡ni deberían! Como todos los dispositivos no seguros (y tristemente incluso algunos seguros), son propensos a ataques comunes.


Editar

Pondré la cabecera de la interfaz de programación HV a bordo. Pero, ¿puede alguien usar el programador HV para LEER la flash? Sé que el programador HV puede hacer que el chip borrar incluso ISP / Jtag se desactivan.

No creo que debas incluir el programador HV en el diseño de tu placa a no ser que sea absolutamente necesario y sepas con seguridad que no va a causar problemas con nada. Los programadores HV (señales de 12 voltios,) están disponibles sólo como medida de seguridad para programar chips bloqueados (bloqueados por error, principalmente). En teoría esto es sólo se supone que es para programar el dispositivo, no para leer nada. Y nunca he oído hablar de un exploit que permita la lectura.

Para actualizar el cargador de arranque (ocasionalmente) pondré la interfaz de programación HV de programación HV en la placa. Pero, ¿puede alguien usar el programador HV para LEER flash? Sé que el programador HV puede hacer que el chip se borre incluso si ISP/Jtag están deshabilitado.

Creo que hay puede ser una manera de actualizar la flash bloqueada a través de bootloader, (algo que ver con una bandera de escritura interna y / o ISR tal vez??) Pero voy a tener que buscar en mis notas y tal vez tener que probarlo. No podré hacerlo hasta dentro de unas 20 horas; por lo que recomiendo encarecidamente hacer una nueva pregunta centrado sólo en esto y para el procesador que has mencionado. Es una muy buena pregunta ¡!

0 votos

+1 para el último comentario, si todo lo demás falla cualquier tipo puede simplemente desoldar el chip y pegarlo a un depurador/programador AVR para restablecer los bits de bloqueo y su seguridad se ha ido.

0 votos

@Garrett Fogerlie: no estoy seguro de lo que te lleva a pensar que estoy tratando de robar el código, plz hágamelo saber y voy a corregir mi pregunta para que otros no piensen lo mismo. Estoy tratando de dar un mínimo de protección de mi propio código, mi propio gestor de arranque. De todos modos, un par de preguntas más sobre esto. El chip es ATMega328, pensé que la familia tendría un uso común de bits de bloqueo. Has explicado LB1 y LB2 , que también he descrito en mi pregunta como una opción que limita el uso del bootloader para la actualización. Así que no es una opción. En cuanto a BLB12 y BLB11 - eso es lo que no entiendo. (continuará)

0 votos

La configuración de esos bits NO impedirá que nadie pueda leer la flash (aplicación+cargador de arranque) desde el exterior. De la hoja de datos parece que esos bits sólo bloquearán los comandos LPM/SPM, pero el programador en serie no lo utiliza. En cuanto a la desactivación de la programación en serie y jtag, esta es otra gran pregunta para mí. Para actualizar el gestor de arranque (ocasionalmente) pondré el cabezal de la interfaz de programación HV a bordo. Pero, ¿puede alguien utilizar el programador HV para leer la flash? Sé que el programador HV puede hacer que el chip se borre incluso si ISP/Jtag están deshabilitados.

3voto

ssdecontrol Puntos 215

Puedes utilizar los bits de bloqueo en algunos dispositivos ATMega y seguir actualizando tu código con el bootloader.

Programé LB1 y LB2 en un ATMega 328. Luego invoqué el bootloader, actualicé el programa principal - todo funcionó perfectamente.

El ISP no puede leer ni escribir ninguna flash / eeprom / fusibles, pero el gestor de arranque todavía puede escribir la sección de aplicación.

Un borrado de chip con el ISP borrará los bits de bloqueo (LB1 y LB2), pero también borra toda la flash / eeprom, por lo que puedes proteger tu código (sin embargo tienes que asegurarte de que tu bootloader no puede ser hackeado)

3 votos

¿Cómo mejora esto la respuesta actualmente aceptada?

0 votos

Ten en cuenta que mientras tengas residente un gestor de arranque estándar tipo Arduino, bloquear la lectura sería casi inútil, ya que el propio gestor de arranque tiene capacidad de lectura, a no ser que utilices el modo avanzado sólo para el 328P que desactiva el LPM del gestor de arranque a la memoria de la aplicación. De lo contrario, tendrías que modificar el cargador de arranque para eliminarlo, a costa de no poder verificar la programación. (Podrías crear un mecanismo de verificación diferente, pero no sería estándar y tendrías que modificar/reemplazar avrdude)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X