memset()漏洞[关闭]

Posted

技术标签:

【中文标题】memset()漏洞[关闭]【英文标题】:memset() vulnerability [closed] 【发布时间】:2021-04-13 10:06:09 【问题描述】:

我在嵌入式应用程序中使用 memset 来删除一个数据。这是函数:

uint8_t Delete()



    memset(cure.name, 0x0, 32);

    cure.volume = 0;

    cure.valid=0;

    printf("[*] Cure DELETED\n");

    return 1;


我正在尝试针对故障注入攻击(时钟故障)评估它。正如我在实验中看到的那样,时钟故障 memset 也会覆盖邻居的内存块。 (它们已被零填充)。我可以使用 memset 的任何更安全(更安全)的替代功能吗?可能是在所有复制步骤中验证目标块的指令。

提前感谢您的帮助;

【问题讨论】:

你必须解释更多你是如何设法让 memset 行为不端的。 “时钟故障”是一个广义的术语。这是什么系统,什么MCU?还是 FPGA? 您是否介意更详细地解释“时钟故障”以及您认为它干扰memset() 的原因? “它无法检测到内存块的结尾”是什么意思?请通过editing 将此新信息添加到您的问题中。 memset 是函数调用,而不是指令。 MCU时钟和这个函数到底是什么关系? memset 是标准库函数;它不太可能考虑故意产生的硬件故障。由于针对这些故障的固件保护似乎取决于 1. 使执行时间不可预测,并通过添加自我验证代码。我怀疑您将不得不编写自己的函数来执行此操作;例如,您可以在循环中添加随机延迟以将内存归零。我正在写评论,而不是答案,因为我不知道这是否足够。您可能需要有关系统中易受攻击的内容的更多详细信息;以什么指令为目标 在您的问题中提供一些minimal reproducible example。我们不知道cure 的类型是什么,也不知道代码应该在哪个目标处理器上运行。还要给出您正在使用的编译器和编译命令(可能是某个版本 - GCC...中的哪一个?)配置为交叉编译器)。 【参考方案1】:

memset 是标准库函数;它不太可能考虑故意产生的硬件故障。 针对这些故障的固件保护似乎取决于:

    使执行时间不可预测 添加自我验证码。

我怀疑您将不得不编写自己的函数来执行此操作;例如,您可以在循环中添加随机延迟以将内存归零。

我不知道这是否足够。您可能需要有关系统中易受攻击的内容的更多详细信息;针对什么指令,为了还要加验证码

【讨论】:

仅供参考,我发现此页面很有帮助:nuvoton.com/support/technical-support/technical-articles/…

以上是关于memset()漏洞[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为啥或为啥不在 C++ 中使用 memset? [关闭]

使用 memset 时的运行时错误 [关闭]

C++ memset 是不是仅适用于 0 和 -1? [关闭]

为啥在内置类型上使用 memset 会导致问题? [关闭]

用“零”填充数组-memset()不起作用-[关闭]

memcpy() 和 memset() 的奇怪行为 [关闭]