问题描述
我在嵌入式 c 应用程序中使用 atoi 将字符串转换为整数。但是,我可以使用时钟毛刺故障注入攻击来利用 atoi() 中的漏洞。我的意思是当我有一个或多个故障时,处理器错过了一些字符并返回错误的整数。 atoi 函数是否有任何替代方案可以更稳健地防止故障注入?可以用它的互补(itoa函数)重新生成字符串并比较两个字符串吗?
- 我将 strtol 函数视为验证的替代方法,而不是 atoi()。这可能是我的问题的一种情况,还是只是返回软件错误?
解决方法
这是一个典型的CPU被薛定谔猫控制的案例。用她的量子爪子,她可以决定执行或跳过哪些指令......
很难想象代码在这样的环境中具有弹性。
事实上,任何测试输出一致性的尝试都可能因为跳过相应的指令而失败。
正如 Barmar 所评论的那样,您可以只调用 atoi()
两次并比较这些值,希望能暂时分散时钟故障的注意力。