數(shù)十億物聯(lián)網(wǎng)設(shè)備使用的硬件隨機(jī)數(shù)生成器存在嚴(yán)重漏洞,,無法正常生成隨機(jī)數(shù),導(dǎo)致設(shè)備安全性下降,,面臨攻擊風(fēng)險,。
Bishop Fox研究人員稱,這個漏洞影響了整個物聯(lián)網(wǎng)行業(yè),。關(guān)鍵是漏洞并不存在于單個設(shè)備的SDK或任何特定的SoC實現(xiàn),。物聯(lián)網(wǎng)需要一個偽隨機(jī)數(shù)生成器(CSPRNG)子系統(tǒng)。這個問題不能僅僅通過更改文檔和責(zé)備用戶來解決。對于這樣一個CSPRNG子系統(tǒng)來說,,最優(yōu)雅的地方是在一個日益流行的物聯(lián)網(wǎng)操作系統(tǒng)中,。如果您正在從頭開始設(shè)計一個新設(shè)備,建議在操作系統(tǒng)中實現(xiàn)一個CSPRNG,。自己編寫RNG代碼應(yīng)該被認(rèn)為是危險的,,就像加密代碼一樣。不管你有多聰明,,永遠(yuǎn)不要自己編寫與RNG硬件接口的代碼,。你幾乎肯定會弄錯。相反,,您應(yīng)該使用由較低抽象層提供的CSPRNG子系統(tǒng),。不要直接從RNG硬件中使用熵??偟膩碚f,,硬件RNG不適合(立即)加密使用。弱熵可以也應(yīng)該通過軟件,,通過cspring來修復(fù),。
“事實證明,當(dāng)涉及物聯(lián)網(wǎng)設(shè)備時,,這些‘隨機(jī)’選擇的數(shù)字CSPRNG并不總是像你希望的那樣隨機(jī),,”Bishop Fox研究人員丹·彼得羅和艾倫·塞西爾在上周發(fā)表的一份分析報告中說?!笆聦嵣?,在很多情況下,設(shè)備選擇的加密密鑰是0或更糟,。這可能會導(dǎo)致任何上游應(yīng)用的安全性崩潰,。”
隨機(jī)數(shù)生成(RNG)是一個至關(guān)重要的過程,,它支持多個加密應(yīng)用程序,,包括密鑰生成、nonces和salt,。在傳統(tǒng)的操作系統(tǒng)上,,它來自一個加密安全的偽隨機(jī)數(shù)生成器(CSPRNG),該生成器使用從高質(zhì)量種子源獲得的熵,。
當(dāng)涉及到物聯(lián)網(wǎng)設(shè)備時,,這是由一個片上系統(tǒng)(SoC)提供的,它包含一個專用的硬件RNG的外圍設(shè)備,,稱為真正的隨機(jī)數(shù)生成器(TRNG),,用于從物理進(jìn)程或?qū)]嬕魳罚╬henomenа)中捕獲隨機(jī)性,。
研究人員指出當(dāng)前調(diào)用外圍設(shè)備的方式是不正確的,缺乏對錯誤代碼響應(yīng)的全面檢查,,導(dǎo)致產(chǎn)生的隨機(jī)數(shù)不是簡單的隨機(jī),,更糟糕的是可預(yù)測的,導(dǎo)致部分熵,,未初始化的內(nèi)存,,甚至包含純零的加密密鑰。
研究人員指出:“RNG外圍設(shè)備的HAL功能可能會因各種原因失效,,但到目前為止最常見的(也是可利用的)是設(shè)備的熵耗盡,。”硬件RNG外設(shè)通過各種方式(如模擬傳感器或EMF讀數(shù))將熵從宇宙中提取出來,,但并不是無限供應(yīng)的,。
“它們每秒只能產(chǎn)生這么多隨機(jī)比特。如果你嘗試調(diào)用RNG HAL函數(shù)時,,它沒有任何隨機(jī)數(shù)給你,,它將失敗并返回一個錯誤代碼。因此,,如果設(shè)備試圖快速獲取太多隨機(jī)號碼,,呼叫就會開始失敗?!?/p>
這個問題是物聯(lián)網(wǎng)領(lǐng)域特有的,,因為它們?nèi)狈νǔв须S機(jī)API的操作系統(tǒng)(例如,在類unix操作系統(tǒng)中是“/dev/random”,,在Windows中是BCryptGenRandom),,研究人員強(qiáng)調(diào)了與CSPRNG子系統(tǒng)相關(guān)聯(lián)的更大熵池的好處,,這樣就消除了“熵源中的任何單點(diǎn)故障”,。
雖然可以矯正軟件更新的問題,理想的解決方案是物聯(lián)網(wǎng)設(shè)備制造商和開發(fā)商包括CSPRNG API的種子從一組不同的熵源并確保代碼沒有忽略錯誤條件,,或未能阻止調(diào)用RNG當(dāng)沒有更多的熵是可用時,。
研究人員說:“這個漏洞的難點(diǎn)之一是,它不是一個簡單的‘你在應(yīng)該曲折的地方曲折了’的情況,,可以很容易地修補(bǔ),。”他們強(qiáng)調(diào)了在物聯(lián)網(wǎng)操作系統(tǒng)中實現(xiàn)CSPRNG的必要性,?!盀榱私鉀Q這個問題,必須在物聯(lián)網(wǎng)設(shè)備中設(shè)計一個實質(zhì)性和復(fù)雜的功能,?!?/p>
最后,,研究人員建議:
對設(shè)備所有者而言:
留意更新,并確保在它們可用時應(yīng)用它們,。這是一個可以用軟件解決的問題,,但可能需要一些時間。與此同時,,要小心不要太相信你的物聯(lián)網(wǎng)設(shè)備,。對于需要連接互聯(lián)網(wǎng)的家用設(shè)備,把它們放在一個只能連接到外部的專用網(wǎng)絡(luò)段,。這將有助于防止任何漏洞蔓延到你的網(wǎng)絡(luò),。
對物聯(lián)網(wǎng)設(shè)備開發(fā)人員而言:
如果可能,請選擇包含從包括硬件 RNG 在內(nèi)的各種熵源中播種的 CSPRNG API 的物聯(lián)網(wǎng)設(shè)備,。如果沒有可用的 CSPRNG 并且您別無選擇,,請仔細(xì)檢查您所依賴的庫以及您自己的代碼,以確保您沒有使用從未初始化的內(nèi)存讀取,、忽略硬件 RNG 外設(shè)寄存器或錯誤的代碼條件,,或者在沒有更多可用熵時無法阻塞。仔細(xì)考慮阻塞不是可行選項的實時情況的影響,。
對設(shè)備制造商/物聯(lián)網(wǎng)操作系統(tǒng)而言:
在SDK中棄用和/或禁用任何直接使用RNG HAL函數(shù),。相反,要包含一個CSPRNG API,,該API使用健壯的,、不同的熵源和適當(dāng)?shù)挠布NG處理。Linux內(nèi)核的/dev/urandom實現(xiàn)可以作為一個很好的參考,。