Open carloscn opened 2 months ago
S32K344启动Secure Boot之后。HSE要生成/存储密钥,对IMAGE进行签名,当Key catalog和SMR以及BOOT_SEQ等位通过刷写被清空之后,还能输入新的固件。换句话说,当攻击者通过JTAG或者OTA方式清空了芯片身上的key catalog和SMR区域等之后刷入自己的固件,HSE将对攻击者的固件进行签名,并存储攻击者的固件密钥,整个芯片视攻击者的固件为可信固件。因此要阻止该事情的发生,启动Secure Debug以及Secure OTA,同Secure Boot形成互补的安全应用闭环。
以下为攻击者可以刷写自己固件的路径:
对于OTA路径,由于Secure Boot可以Cover,本文暂时不去解释。本文主要应对与JTAG路径。对于启动JTAG的设备,需要采取相应地安全措施,防止攻击者通过JTAG路径强刷固件,致使HSE状态重置,防止清空原始Key Catalog,以及阻止清除SMR区域。
参考: https://www.pemicro.com/blog/index.cfm?post_id=216
NXP的S32K3xx设备系列包含一种高级的安全调试机制,通过密钥保护用户应用程序。在启用安全调试功能后,调试器必须经过密码认证或挑战响应认证才能进行调试。
NXP的S32K3xx设备在标准的S32DS调试会话开始时,可能需要用户执行密码认证或挑战响应认证。这些安全调试模式通过要求正确的凭证来认证调试器,从而防止未经授权的调试访问。每次进行破坏性复位或上电复位后,均需重新进行认证。
PEmicro提供了相应的脚本,简化了密码模式下的调试器认证以及在挑战响应模式下将现有密钥注册到NXP智能卡的过程。这些脚本可以从PEmicro支持文件包中下载(位于NXP\S32K3xx文件夹内),运行这些脚本需要Python 3.5或更高版本。
S32K344没有办法关闭JTAG,因此必须使用该方法配置JTAG不能随意访问。
https://community.nxp.com/t5/S32K/Can-I-disable-S32K3-s-JTAG-permanently-by-LifeCycle/m-p/1505254
authenticate_password_mode.py
register_adkp.py
authenticate_challenge_response_mode.py
注意:在运行任何脚本之前,必须将PEmicro接口(例如Multilink或Cyclone)连接到目标的调试头,且S32K3xx设备需上电并重新断电复位。每次进行破坏性复位后,认证状态将丢失,因此需要在每次电源循环后重新运行认证脚本。
使用PEmicro的authenticate_password_mode.py脚本,可以对调试器进行认证,以便在密码模式下与设备进行安全通信。脚本需要以下输入参数:
hardwareid
-hardwareid=10.0.4.17
USB1
password
-password=0123456789ABCDEF0123456789ABCDEF
在调试器通过认证后,开发者可以在S32 Design Studio或任何支持PEmicro插件的第三方IDE中安全地调试设备。设备在硬复位或电源循环后会失去安全调试的访问权限。为防止调试入口时自动执行硬复位,可以指定使用"SECUREDEBUG"设备。此外,在调试或编程具备高级安全性的设备时,需选择启用HSE的FLASH编程算法。安装HSE后,设备初始为CUST_DEL生命周期,允许开放调试访问,直到生命周期升级后才需要安全调试认证。
在调试或编程具备高级安全模式的S32K3xx设备时,必须选择支持HSE固件的FLASH编程算法(如nxp_s32k344_1x32x980k_hse_enabled.arp)。这是因为在设备进入高级安全模式时,部分可用FLASH被分配给HSE固件。然而,安装HSE固件后,设备初始生命周期为CUST_DEL,允许开放调试访问,不需要安全调试器认证。只有当设备生命周期升级后,才会要求进行安全调试认证。
nxp_s32k344_1x32x980k_hse_enabled.arp
在S32DS IDE中创建项目时,PEmicro插件默认使用支持完整设备P和D FLASH范围的编程驱动程序(假设HSE和AB Swap内存模式被禁用)。如果需要切换到支持HSE固件的FLASH编程算法,用户需要打开PEmicro调试配置,从Flash Algorithm Selection下拉框中选择合适的算法,例如nxp_s32k344_1x32x980k_hse_enabled.arp,或者使用“Use Alternative Algorithm”选项手动选择最新PEmicro插件中的HSE启用FLASH算法。
{S32DS Installation:Directory}\eclipse\plugins\com.pemicro.debug.gdbjtag.pne_5.xxxxx\win32\gdi\P&E\supportFiles_ARM\NXP\S32K3xx
PEmicro的FLASH编程驱动程序位于S32DS安装目录的特定路径下,用于支持S32K3xx设备的调试和编程。在进行安全调试时,设备在破坏性复位或电源循环之前将保持可访问状态,之后需要重新进行认证。
1. 引言
S32K344启动Secure Boot之后。HSE要生成/存储密钥,对IMAGE进行签名,当Key catalog和SMR以及BOOT_SEQ等位通过刷写被清空之后,还能输入新的固件。换句话说,当攻击者通过JTAG或者OTA方式清空了芯片身上的key catalog和SMR区域等之后刷入自己的固件,HSE将对攻击者的固件进行签名,并存储攻击者的固件密钥,整个芯片视攻击者的固件为可信固件。因此要阻止该事情的发生,启动Secure Debug以及Secure OTA,同Secure Boot形成互补的安全应用闭环。
以下为攻击者可以刷写自己固件的路径:
对于OTA路径,由于Secure Boot可以Cover,本文暂时不去解释。本文主要应对与JTAG路径。对于启动JTAG的设备,需要采取相应地安全措施,防止攻击者通过JTAG路径强刷固件,致使HSE状态重置,防止清空原始Key Catalog,以及阻止清除SMR区域。
2. 原理
参考: https://www.pemicro.com/blog/index.cfm?post_id=216
NXP的S32K3xx设备系列包含一种高级的安全调试机制,通过密钥保护用户应用程序。在启用安全调试功能后,调试器必须经过密码认证或挑战响应认证才能进行调试。
NXP的S32K3xx设备在标准的S32DS调试会话开始时,可能需要用户执行密码认证或挑战响应认证。这些安全调试模式通过要求正确的凭证来认证调试器,从而防止未经授权的调试访问。每次进行破坏性复位或上电复位后,均需重新进行认证。
2.1 password模式
PEmicro提供了相应的脚本,简化了密码模式下的调试器认证以及在挑战响应模式下将现有密钥注册到NXP智能卡的过程。这些脚本可以从PEmicro支持文件包中下载(位于NXP\S32K3xx文件夹内),运行这些脚本需要Python 3.5或更高版本。
S32K344没有办法关闭JTAG,因此必须使用该方法配置JTAG不能随意访问。
https://community.nxp.com/t5/S32K/Can-I-disable-S32K3-s-JTAG-permanently-by-LifeCycle/m-p/1505254
脚本列表
authenticate_password_mode.py
register_adkp.py
authenticate_challenge_response_mode.py
注意:在运行任何脚本之前,必须将PEmicro接口(例如Multilink或Cyclone)连接到目标的调试头,且S32K3xx设备需上电并重新断电复位。每次进行破坏性复位后,认证状态将丢失,因此需要在每次电源循环后重新运行认证脚本。
密码模式下的调试器认证
使用PEmicro的
authenticate_password_mode.py
脚本,可以对调试器进行认证,以便在密码模式下与设备进行安全通信。脚本需要以下输入参数:hardwareid
:调试硬件的IP地址、名称、序列号或端口名称(例如,-hardwareid=10.0.4.17
用于以太网Cyclone接口,或USB1
用于USB Multilink接口)password
:用于认证设备的16字节十六进制预配置密码(例如,-password=0123456789ABCDEF0123456789ABCDEF
)3. 启动Secure Debug
在调试器通过认证后,开发者可以在S32 Design Studio或任何支持PEmicro插件的第三方IDE中安全地调试设备。设备在硬复位或电源循环后会失去安全调试的访问权限。为防止调试入口时自动执行硬复位,可以指定使用"SECUREDEBUG"设备。此外,在调试或编程具备高级安全性的设备时,需选择启用HSE的FLASH编程算法。安装HSE后,设备初始为CUST_DEL生命周期,允许开放调试访问,直到生命周期升级后才需要安全调试认证。
在调试或编程具备高级安全模式的S32K3xx设备时,必须选择支持HSE固件的FLASH编程算法(如
nxp_s32k344_1x32x980k_hse_enabled.arp
)。这是因为在设备进入高级安全模式时,部分可用FLASH被分配给HSE固件。然而,安装HSE固件后,设备初始生命周期为CUST_DEL,允许开放调试访问,不需要安全调试器认证。只有当设备生命周期升级后,才会要求进行安全调试认证。在S32DS IDE中创建项目时,PEmicro插件默认使用支持完整设备P和D FLASH范围的编程驱动程序(假设HSE和AB Swap内存模式被禁用)。如果需要切换到支持HSE固件的FLASH编程算法,用户需要打开PEmicro调试配置,从Flash Algorithm Selection下拉框中选择合适的算法,例如
nxp_s32k344_1x32x980k_hse_enabled.arp
,或者使用“Use Alternative Algorithm”选项手动选择最新PEmicro插件中的HSE启用FLASH算法。PEmicro的FLASH编程驱动程序位于S32DS安装目录的特定路径下,用于支持S32K3xx设备的调试和编程。在进行安全调试时,设备在破坏性复位或电源循环之前将保持可访问状态,之后需要重新进行认证。