0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Encrypted Boot image泄漏讨论

LI1323882 来源:MCU频道 作者:MCU频道 2022-10-26 10:08 次阅读

写在前面

在《安全启动模式下的数据保存问题》中,小编介绍了在HAB boot和XIP encrypted boot下,读写外部Nor Flash数据的特点以及image的数据特征状态,比如使能XIP encrypted boot后,Nor Flash内的bootable image是密文状态,那是否意味着只要在使能XIP encrypted boot后,被加密的bootable image就可以随意下发给OEM进行量产烧录,同时在量产后,客户可随意访问加密的bootable image而无需担心application image泄漏呢?

是否泄漏呢?

为了测试是否有泄漏的风险,在MIMXRT1060-EVK上进行如下步骤测试:

MCUXpresso Secure Provisioning工具选择XIP encrypted模式,生成并烧录Blink LED的bootable image;

86da1b70-544d-11ed-a3b6-dac502259ad0.png图1

通过NXP-MCUBootUtility查看烧录后的image,对比右边框中的明文image会发现密文image显得很是杂乱,即使被查看也应该不会泄漏明文image;

870f0a4c-544d-11ed-a3b6-dac502259ad0.png图2

接着换另一种方式查看密文image,即通过pyocd命令读取,具体如下所示,打开9_21_readback.bin与右边框中的明文image比较,发现居然一致,换句话说,明文image被泄漏了;

87b10630-544d-11ed-a3b6-dac502259ad0.png图3 87bf88f4-544d-11ed-a3b6-dac502259ad0.png图4

通过上述测试结果表明,使用后一种方式读取查看密文image居然能得到明文image,直接让XIP encrypted boot破防了,这是怎么回事呢?

原因解释

小编在《安全启动模式下的数据保存问题》中提到,存储在Serial Nor flash中的加密代码和数据在送到CPU执行之前,需要经过BEE或者OTFAD解密,这是 Encypted XIP boot模式实现的基础,Jlink在连接目标MCU时,会把对应的flash驱动算法加载在内部RAM中运行,如果此时MCU已经正常启动运行application image的话,则表示BEE或者OTFAD模块也已完成好配置了,那么flash驱动在读Nor Flash内的密文时,数据会被自动解密。

88717cb2-544d-11ed-a3b6-dac502259ad0.png图 5

应对策略

既然我们已经了解泄漏的原因,就要阻断外部工具加载flashloader或者flash驱动算法到内部RAM运行,所以除了禁止Debug port外,我们还需要禁止Serial Download方式,预防不怀好意者利用Serial Downloader方式,使得ROM code加载专门的flashloader到RAM中运行,通过配置BEE或OTFAD模块来读取image明文(如下代码所示)。

status=SLN_AUTH_check_context(SLN_CRYPTO_CTX_1);

configPRINTF(("Contextcheckstatus%d
",status));
//DEBUG_LOG_DELAY_MS(1000);//Optionaldelay,enablefordebuggingtoensurelogisprintedbeforeacrash

if(SLN_AUTH_NO_CONTEXT==status)
{
configPRINTF(("Ensuringcontext...
"));
//DEBUG_LOG_DELAY_MS(1000);//Optionaldelay,enablefordebuggingtoensurelogisprintedbeforeacrash

//Loadcryptocontextsandmakesuretheyarevalid(ourowncontextshouldbegoodtogettothispoint!)
status=bl_nor_encrypt_ensure_context();

if(kStatus_Fail==status)
{
configPRINTF(("Failedtoloadcryptocontext...
"));
//DEBUG_LOG_DELAY_MS(1000);//Optionaldelay,enablefordebuggingtoensurelogisprintedbeforeacrash

//DoublecheckifencryptedXIPisenabled
if(!bl_nor_encrypt_is_enabled())
{
configPRINTF(("NotrunninginencryptedXIPmode,ignoreerror.
"));
//DEBUG_LOG_DELAY_MS(1000);//Optionaldelay,enablefordebuggingtoensurelogisprintedbeforea
//crash

//NoencryptedXIPenabled,wecanignorethebadstatus
status=kStatus_Success;
}
}
elseif(kStatus_ReadOnly==
status)//UsingthisstatusfromstandardstatustoindicatethatweneedtosplitPRDB
{
volatileuint32_tdelay=1000000;
//Setupcontextasneededforthisapplication
status=bl_nor_encrypt_split_prdb();

configPRINTF(("RestartingBOOTLOADER...
"));

while(delay--)
;

//Restart
DbgConsole_Deinit();
NVIC_DisableIRQ(LPUART6_IRQn);
NVIC_SystemReset();
}
}
elseif(SLN_AUTH_OK==status)
{
configPRINTF(("Ensuringcontext...
"));
//DEBUG_LOG_DELAY_MS(1000);//Optionaldelay,enablefordebuggingtoensurelogisprintedbeforeacrash

//WewillchecktoseeifweneedtoupdatethebackuptothereducedscopePRDB0forbootloaderspace
status=bl_nor_encrypt_ensure_context();

if(kStatus_Fail==status)
{
configPRINTF(("Failedtoloadcryptocontext...
"));
//DEBUG_LOG_DELAY_MS(1000);//Optionaldelay,enablefordebuggingtoensurelogisprintedbeforeacrash

//DoublecheckifencryptedXIPisenabled
if(!bl_nor_encrypt_is_enabled())
{
configPRINTF(("NotrunninginencryptedXIPmode,ignoreerror.
"));

//NoencryptedXIPenabled,wecanignorethebadstatus
status=kStatus_Success;
}
}
elseif(kStatus_Success==status)//WehavegoodPRDBssowecanupdatethebackup
{
boolisMatch=false;
boolisOriginal=false;

configPRINTF(("Checkingbackupcontext...
"));
//DEBUG_LOG_DELAY_MS(1000);//Optionaldelay,enablefordebuggingtoensurelogisprintedbeforeacrash

//CheckifwehaveidenticalKIBsandinitialCTR
status=bl_nor_crypto_ctx_compare_backup(&isMatch,&isOriginal,SLN_CRYPTO_CTX_0);

if(kStatus_Success==status)
{
if(isMatch&&isOriginal)
{
configPRINTF(("Updatingbackupcontextwithvalidaddressspace...
"));
//DEBUG_LOG_DELAY_MS(1000);//Optionaldelay,enablefordebuggingtoensurelogisprintedbefore
//acrash

//UpdatebackupPRDB0
status=SLN_AUTH_backup_context(SLN_CRYPTO_CTX_0);
}
}
}
}

但相较于直接永久禁止Debug port的简单粗暴, 小编更加推荐Secure Debug安全调试,因为产品的售后,维护往往不是一帆风顺的,产品在客户现场有时也是状况频出,所以Secure Debug[1]就像给Debug port加了一把坚固的锁,只有能打开这把锁的人才能使用调试功能。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Boot
    +关注

    关注

    0

    文章

    149

    浏览量

    35822
  • 泄漏
    +关注

    关注

    0

    文章

    8

    浏览量

    8471
  • mcuxpresso
    +关注

    关注

    1

    文章

    40

    浏览量

    4174

原文标题:Encrypted Boot image泄漏讨论

文章出处:【微信号:MCU频道,微信公众号:MCU频道】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    CMOS Image sensor的基础知识

    摄像机用来成像的感光元件叫做Image Sensor或Imager。目前广泛使用的2种Image Sensor是CCD和CMOS Image Sensor(CIS)。
    的头像 发表于 01-15 11:07 5057次阅读
    CMOS <b class='flag-5'>Image</b> sensor的基础知识

    计算机信息泄漏

    。这说明我国对信息安全越来越重视,通常人们讨论的重点是网络攻击、安全漏洞和计算机病毒与此同时还要重视网络终端设备在运行过程中由于电磁辐射所造成的信息泄漏的问题。目前利用计算机的电磁泄漏窃取信息是国内外情报机关获取信息的重要途径。
    发表于 08-06 06:56

    执行tools/mkimg.sh脚本后,image目录下没有ML0和u-boot.img文件是为什么?

    执行 tools/mkimg.sh 脚本后,image目录下没有ML0和 u-boot.img 文件
    发表于 01-06 07:21

    OKMX6Q-C u-boot可以支持fastboot command直接单独更新image

    OKMX6Q-C u-boot 可以支持fastboot command 直接單獨更新 image 嗎 (u-boot.bin )? 另外在u-boot 有沒有支持SATA comma
    发表于 01-11 06:36

    Android image烧录失败怎么解决?

    的ubootp.bin , boot.img , system.img 都成功userdata.img 也是FailLinux的image都可以順利寫入,謝謝
    发表于 11-24 06:39

    pre_encrypted_ota示例在esp_encrypted_img_decrypt_end() 中失败的原因?

    有没有人得到examples/system/ota/pre_encrypted_ota/与ESP-IDF v5.0和esp_encrypted_img v2.0.2成功运行?对我来说,它在
    发表于 03-02 09:03

    Application boot code image中Code_length的含义是什么?

    Application boot code image的地址是0x3200h。 所以,我们可以得到信息: RAM 起始指针:0x3408FE40hRAM入口指针:0x340A0000h代码
    发表于 03-27 07:08

    Digital Image Processing (Hong

    Digital Image Processing:•What is an Image?Picture, photographVisual dataUsually two or three
    发表于 06-18 07:39 17次下载

    埋地管道泄漏监测检测技术

    埋地管道泄漏监测检测技术 综述了埋地管道泄漏监测与泄漏检测的各种无损检测技术,并讨论了各种方法的原理、适用范围、优点和缺点等。介绍的埋地管道
    发表于 03-31 10:11 22次下载

    Image Compression - Spelling O

    Image Compression - Spelling Out the Options
    发表于 10-02 09:16 25次下载
    <b class='flag-5'>Image</b> Compression - Spelling O

    U-Boot源代码分析之Linux的引导

    映象文件必须满足U-Boot的格式要求,才能被识别和引导。U-Boot中映象文件必须以一个固定格式的头部开始。这个头部由structimage_header_t描述,image_header_t的定义在文件include/
    发表于 04-03 22:39 51次下载

    详解U-Boot引导内核分析

    bootm命令是用来引导经过U-Boot的工具mkimage打包后的kernel image的。U-Boot源代码的tools/目录下有mkimage工具,这个工具可以用来制作不压缩或者压缩的多种可启动映象文件。
    的头像 发表于 04-13 15:22 5259次阅读
    详解U-<b class='flag-5'>Boot</b>引导内核分析

    详细介绍u-boot FIT image

    Linux kernel在ARM架构中引入device tree(全称是flattened device tree,后续将会以FDT代称)的时候[1],其实怀揣了一个Unify Kernel的梦想----同一个Image,可以支持多个不同的平台。
    发表于 05-15 08:43 4039次阅读
    详细介绍u-<b class='flag-5'>boot</b> FIT <b class='flag-5'>image</b>

    Halcon教程:Image、Regiong、XLD基础

    一 读取的3种方式: read_image( image,'filename')       //image 是输出对象,后面是输入文件的路径和名称 读取多图:  1,申明一个数组,分别保存路径
    的头像 发表于 01-07 11:52 5120次阅读
    Halcon教程:<b class='flag-5'>Image</b>、Regiong、XLD基础

    FIT Image起源及制作方法

    secure boot 和FIT Image是前段时间接触到的,其实早就该总结下了,奈何懒癌犯了,拖了好久才写出来。
    的头像 发表于 09-05 14:23 2096次阅读