【问题标题】:Atoi() vulnerability against fault injectionAtoi() 针对错误注入的漏洞
【发布时间】:2021-07-07 23:24:28
【问题描述】:

我在嵌入式 c 应用程序中使用 atoi 将字符串转换为整数。但是,我可以使用时钟故障注入攻击来利用 atoi() 中的漏洞。我的意思是当我有一个或多个故障时,处理器会丢失一些字符并返回错误的整数。 atoi 函数是否有任何替代方法可以更强大地防止故障注入?我可以使用它的互补(itoa 函数)来重新生成字符串并比较两个字符串吗?

  • 我看到 strtol 函数代替了 atoi() 来替代验证。这可能是我的问题还是它只是返回软件错误?

【问题讨论】:

  • 您可以拨打atoi() 两次,看看是否得到相同的结果。
  • "clock glitching fault injection attack" 从 atoi() 获取错误整数将是最好的方案。典型的情况是处理器崩溃了。事实上,你可以让时钟出现故障并且唯一的影响是 atoi() 中丢失数字的可能性非常低,以至于这个问题基本上没有意义。
  • @user3386109 确实如此。到目前为止,我看到的所有“反故障攻击”“解决方案都毫无意义,因为它可能导致任何事情。例如一起跳过一条指令(或一堆)。
  • 我认为有能力在你的硬件中干扰时钟的人已经拥有了你。
  • 来自:darkreading.com/edge/theedge/… 时钟信号中断,CPU 和其他处理组件可以跳过指令,暂时停止执行程序,或以其他方式允许攻击者将恶意指令插入处理差距。 如果你有一个,你会遇到比atoi 更大的问题你会遇到与itoa 或“比较”或几乎任何相同的问题> 你写的代码。

标签: c fault atoi itoa embedded-coder


【解决方案1】:

这是一个典型的由薛定谔猫控制的 CPU 案例。用她的量子爪子,她可以决定执行或跳过哪些指令……

很难想象代码在这样的环境中具有弹性。

事实上,任何测试输出一致性的尝试都可能因跳过相应的指令而失败。

正如 Barmar 所说,您只需调用两次 atoi() 并比较值,希望能暂时分散时钟故障的注意力。

【讨论】:

  • 如果 2 个调用不匹配,则需要第 3 个调用 希望 匹配前一个调用。
  • @chux-ReinstateMonica:如果 2 个调用不匹配,肯定会发生一些可疑的事情......如果你在地球上,如果你在月球上或独自在火星上,中止发射过程似乎更可取,无论如何都要推出,并希望好莱坞剧本有一个圆满的结局。
  • ... 或5。我喜欢你关于位置依赖下一步的想法。
  • 我看到 strtol 函数代替了 atoi() 来替代验证。这可能是我的问题还是它只是返回软件错误?
  • @elik1991: strtolatoi() 的替代品,它具有正确处理long 类型范围之外的值的明显优势。不过没有对时钟故障进行特殊处理。
猜你喜欢
  • 1970-01-01
  • 2022-12-05
  • 2011-06-10
  • 2020-08-21
  • 2014-10-13
  • 2019-05-03
  • 1970-01-01
  • 1970-01-01
  • 2011-07-07
相关资源
最近更新 更多