邻里|芯片安全保障工作全面提前( 三 )


这在很大程度上是由正在执行的软件驱动的 , 而不是硬件本身 , 因此硅验证可能不适用于这种情况 。 相比之下 , 监视缓存一直是许多众所周知的攻击的组成部分 。 请求时 , 执行所需的数据可能位于缓存中 , 也可能不在缓存中 。 否则 , 将发生缓存未命中 , 并且必须从内存中获取数据 。 这比缓存命中所需的时间更多 , 从而提供有关数据流的信息 。
通过缓存进行的攻击可能微妙而复杂 。 \"缓存计时攻击归结为攻击者 , 迫使受害者的数据进入缓存的标签 , 然后通过缓存命中/未命中时间的差异提取该数据 , \"Oberg解释说 。 \"缓存标记与内存地址相关 , 并指示地址映射到哪个缓存行 。 标记很重要 , 因为攻击者不能从缓存中任意读取数据 , 但它可以从命中/未命中延迟差异中找出属于受害者的地址 。 \"
这些线索本身不太可能是秘密 , 但它们通常是一系列精心设计的步骤的一部分 , 这些步骤最终可以通过移交控制权 , 提供对特权内存的访问或通过将数据从安全切换到不安全来\"反转\"数据来导致机密 。
\"这些漏洞是微架构设计决策的影响 , 可能是无意中引入的 , 或者更糟糕的是 , 故意引入的 , \"Brinkmann指出 。 \"虽然原则上可以通过硅前验证来分析和防止这种后门或特洛伊木马 , 但它们很难找到 , 因为它们既不会添加冗余逻辑 , 也不会破坏预期的设计功能 。 \"
投机执行加载可能永远不会执行的指令的能力在Meltdown和Spectre等著名攻击中一直是一个特别的问题 。 在完全启动的系统上 , 这往往更像是一个漏洞 。 \"你的安全启动处理器通常是一个更简单的处理器 , 实际上不使用任何推测执行 , \"Hardee指出 。
同时 , 总线争用攻击允许由攻击者控制的程序尝试总线访问 , 而另一个进程也尝试访问总线 。 被授予访问权限或必须等待获得访问权限所涉及的时间会产生更多信息 。 \"在时域中 , 由于公共汽车上与其他共享资源(如浮点单位)的争用 , 导致一整类网络攻击不断增长 , \"Oberg说 。 \"当有一些秘密交易也击中公共汽车时 , 攻击者可以操纵公共汽车 。 攻击者能够观察到这一点 , 因为他们也在公共汽车上行驶 。 因此 , 即使他们没有读取秘密价值——他们可能会得到垃圾——至少他们正在从时间延迟中学习信息 , 因为争论 。 \"
\"将会有一大堆继续出现 , 特别是在异构共享架构中 , \"他补充说 。 \"这将是一个持续增长的攻击媒介 。 我们的许多客户正在构建非常复杂的环境来看待这种争用 , 因为他们担心熔毁/幽灵类型的东西 。 \"
对于这些攻击 , 需要准确的计时信息源 。 \"在大多数实际情况下 , 这是通过使用备份到处理器内核的现有计时器的软件完成的 , \"Oberg说 。
时序分辨率越高 , 从执行中可以学到的信息就越多 。 如果计时器的分辨率降低得足够低 , 则更难区分时间差异很小的事件 。 所有这些定时攻击都与执行过程中通过系统的信息流有关 。 硅片前验证涉及跟踪这些流以识别漏洞 。 \"我们确定受害者的信息如何在设计中流动 , 包括受害者的信息如何影响时间 , \"Oberg说 。 \"如果你能阻止受害者的数据流向攻击者可以访问的区域 , 那么你就可以对系统的安全性做出非常强烈的声明 。 \"
但验证工程师必须确保识别可能受到攻击的资产 。 否则 , 大量不相关的流和时序关系可能会使结果充满噪音 。 \"我们非常喜欢根据资产定义您的安全要求 , 然后基于一些安全目标 - 机密性 , 完整性或可用性 。 \"Oberg补充道 。
故障注入攻击
第三种攻击类别更难确定 , 因为它往往涉及不可预测的行为 , 例如当芯片以某种方式被滥用时 。 \"例如 , 假设你正在做一个安全的启动过程 , \"Oberg说 。 \"您可能会使电源线出现故障 , 并可能导致安全启动跳转到安全模式 , 现在您拥有root访问权限 。 \"

相关经验推荐