数十亿物联网 (IoT) 设备中使用的硬件随机数生成器中存在一个严重漏洞,该漏洞无法正确生成随机数,从而破坏其安全性并使其面临遭受攻击的风险。
“事实证明,当涉及到物联网设备时,这些‘随机’选择的数字并不总是像您希望的那样随机,Bishop Fox 研究人员 Dan Petro 和 Allan Cecil在上周发表的一项报告中说。“事实上,在许多情况下,设备选择 0 或更差的加密密钥。这可能导致所有上游使用的设备的安全性变得难以保障。”
随机数生成 ( RNG ) 是一个重要的函数,它为几个加密应用程序提供服务,包括密钥生成、随机数和加盐。在传统操作系统上,它来自一个加密安全的伪随机数生成器(CSPRNG),该生成器使用从高质量种子源获得的熵。
当涉及到物联网设备时,这是由一个SoC提供的,它包含一个专用的硬件RNG的外围设备,称为真正的随机数生成器(TRNG),用于从物理进程或专辑音乐(phenomenа)中捕获随机性。
研究人员指出当前调用外围设备的方式是不正确的,缺乏对错误代码响应的全面检查,导致产生的随机数并不随机,甚至是可预测的,甚至会出现纯零的加密密钥。
研究人员指出:“RNG外围设备的HAL功能可能会因各种原因失效,但到目前为止最常见的(也是可利用的)是设备的熵耗尽。”硬件RNG外设通过各种方式(如模拟传感器或EMF读数)将熵从宇宙中提取出来,但并不是无限供应的。
“它们每秒只能产生这么多随机数。如果你在没有任何随机数给你的情况下尝试调用 RNG HAL 函数,它将失败并返回一个错误代码。因此,如果设备试图过快地获取太多随机数,调用将开始失败。”
这个问题只有在物联网系统中才会存在,因为他们并没有其他操作系统所拥有的随机数api(例如,在类unix操作系统中是“/dev/random”,在Windows中是BCryptGenRandom)。研究人员强调了与CSPRNG子系统相关的熵池更大的好处,从而消除了“熵源中的单点故障”。
尽管可以通过软件更新来修复这些问题,但理想的解决方案是物联网设备制造商和开发人员提供从一组不同的熵源中生成的 CSPRNG API,并确保代码不会忽略错误条件或当没有更多的熵可用时无法阻止调用RNG。
研究人员说:“这个漏洞的难点之一是,它不是一个简单的‘你在应该拐弯的地方已经拐弯了(这句话的意思可以理解为在不恰当的时间做了一件正确的事,比如在饭还没熟的时候出锅之类的)’的情况,可以很容易地修补。”他们强调了在物联网操作系统中实现CSPRNG的必要性。“为了解决这个问题,必须在物联网设备中设计一个实质性和复杂的功能。”