防止AVR闪存通过ISP读取?


15

我正在尝试保护整个闪存免于通过ISP读取。它具有引导程序,能够自编程应用程序部分。

将锁定字节设置为:

LB1/LB2 不会让用户使用引导加载程序上传新固件。

BLB12/BLB11BLB01&BLB02如果我没有记错的话,也不会阻止通过ISP读取闪存。

因此,有没有办法让用户通过自定义引导加载程序更新固件并保护闪存不被同时读取?

Answers:


18

您没有指定芯片,以下内容主要适用于8位atmega设备,但这是一般信息。阅读特定芯片数据手册的“存储器编程”部分,以获得更多特定信息!

话虽如此,正如您所说,所有AVR设备都包含两个名为LB1和LB2的锁定位。将它们编程(设置为0,低)将根据下表为写入闪存和EEPROM存储器的内容增加保护。保护级别分为三种模式,其中模式1不提供保护,模式3提供最大的保护。只需重新编程锁定位,便可以进入更高的保护模式。

AVR允许将“高”位更改为“低”,但不能相反。无法将“低”锁定位更改为“高”,因此无法降低保护级别。要清除锁定位,需要完整的芯片擦除,以擦除闪存。

AVR锁定位表

单独使用这两个锁定位(LB1和LB2)时,将防止99.9%的人窃取您的固件!可能超过99.9%。对代码进行反向工程几乎总是比较容易的。

因此,有没有办法让用户通过自定义引导加载程序更新固件并保护闪存不被同时读取?

据我所知(我可能会误会,但我想以前会遇到这个问题)在具有引导加载程序保护保险丝(BLB12和BLB11)的设备上,您可以锁定自定义引导加载程序部分,禁用SPI并可以保护97-98%的人免受伤害。

但是,如果没有编程任何锁定位,则不会启用任何存储器锁定功能!!!ISP禁用仅足以阻止70%的人。

有关某些其他信息,除了具有自编程功能的设备中与引导加载程序相关的锁定位之外,锁定位和保险丝不在正常的闪存或EEPROM空间中,也无法从软件访问。此应用笔记中的表2将帮助您确定可以为特定设备执行的操作!

Atmel的AVR产品线不是高安全性设备(除非明确指出!),因此,它们绝对不附带任何代码安全保证,也不应该!像所有非安全设备(甚至可悲的是一些安全设备一样),它们也容易受到常见攻击!


编辑

我将在板上放置HV编程接口头。但是有人可以使用HV编程器读取闪存吗?我知道即使禁用ISP / Jtag,HV程序员也可以擦除芯片。

我认为除非绝对需要,否则您不应该在板子设计中包括HV编程器,并且您知道它不会引起任何问题。HV编程器(12伏信号)仅作为对已锁定(大多数情况下为错误锁定)芯片进行编程的安全措施。从理论上讲,这意味着对设备进行编程而不读取任何内容。而且我从未听说过允许阅读的漏洞。

为了升级引导加载程序(偶尔),我将在板上放置HV编程接口标头。但是有人可以使用HV编程器读取闪存吗?我知道即使禁用ISP / Jtag,HV程序员也可以擦除芯片。

我认为可能有一种方法可以通过引导加载程序来更新锁定的闪存,(这可能与内部写标志和/或ISR有关?),但是我必须搜索我的注释并可能必须对其进行测试。我将无法完成约20个小时的操作;因此,我强烈建议针对您提到的处理器,针对此问题提出一个新问题这是一个很好的问题


对于最后的评论+1,如果其他所有失败,则只需将芯片拆焊并将其粘在AVR调试器/编程器上,以重置锁定位,您的安全性就荡然无存了。
helloworld922

@Garrett Fogerlie:不确定是什么导致您认为我正在尝试窃取代码,请让我知道,我将更正我的问题,以便其他人不会以同样的方式思考。我试图对我自己的代码,我自己的引导程序提供最小的保护。无论如何,对此还有更多问题。芯片是ATMega328,以为该家族将具有通用的锁定位用法。您已经解释了LB1LB2,在问题中我也将其描述为使用引导加载程序进行升级的限制选项。所以这不是一个选择。至于BLB12BLB11-这就是我不明白。(待续)
Pablo

设置这些位不会阻止任何人从外部读取闪存(application + bootloader)。从数据表看来,那些位只会阻塞LPM / SPM命令,但串行编程器并未使用它。至于禁用串行编程和jtag,这对我来说是另一个大问题。为了升级引导加载程序(偶尔),我将在板上放置HV编程接口标头。但是有人可以使用HV编程器读取闪存吗?我知道即使禁用ISP / Jtag,HV编程器也可以擦除芯片。
Pablo

@pablo,对不起,我的意思不是犯罪。当我第一次看到您的问题时,盗窃的念头并没有出现在我身上。我写了一个答案,该答案有些侧重于检索锁定的代码。但是,我在工作,在提交答案之前,我需要暂停约2个小时。然后,当我回来时,我发现仍然没有答案并且感到有些惊讶,然后在重新阅读您的问题时,我认为“盗窃”可能就是原因。完全不是您的错,我现在删除了免责声明。由于该表中列出的差异以及有
8/16/32

1
rrGarrett Fogerlie:我并不是要把HV编程器放到板上,而只是标头:)但是我发现这不是必需的,因为锁定位起作用了,以防万一我可以使用ISP标头来擦除芯片并重写设备上的整个闪存。因此,总结我的原始问题的答案-设置LB1和LB2将阻止任何人读取整个闪存区域,同时也不会阻止我通过引导加载程序写入程序存储器。
Pablo

3

您可以在某些ATMega设备上使用锁定位,并且仍然使用引导加载程序更新代码。

我在ATMega 328上对LB1和LB2进行了编程。然后调用了引导加载程序,更新了主程序-一切运行正常。

ISP既不能读取也不能写入任何闪存/ eeprom /保险丝,但引导加载程序仍可以写入应用程序部分。

使用ISP进行芯片擦除会清除锁定位(LB1和LB2),但也会擦除整个闪存/ eeprom,因此可以保护您的代码(但是必须确保引导加载程序不会被黑客入侵)


3
如何改善目前接受的答案?
伊格纳西奥·巴斯克斯

请注意,只要您具有标准的Arduino风格的引导加载程序,就可以锁定锁定回读,因为引导加载程序本身具有回读功能,除非您使用仅用于引导程序LPM禁用应用程序内存的高级328P模式。否则,您将需要修改引导加载程序以删除该引导加载程序,其代价是不再能够验证编程。(您可能会创建其他验证机制,但这将是非标准的,要求您还修改/替换avrdude)
克里斯·斯特拉顿
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.