本文特別關注通常由電池供電并運行輕量級、低帶寬射頻協(xié)議的小型無線連接系統(tǒng)。
明文披露
明文披露是指以“明文”或未加密的方式交付或存儲的秘密,例如密鑰或敏感數(shù)據(jù)。大多數(shù)傳輸漏洞適用于通過未加密通道傳遞的敏感用戶數(shù)據(jù),例如登錄憑據(jù)。存儲漏洞包括敏感的用戶數(shù)據(jù)和密鑰,這是一次性物聯(lián)網(wǎng)設備需要特別關注的領域。我們大多數(shù)人在處理筆記本電腦或智能手機時都會小心謹慎,以確保敏感信息已被適當刪除。在連接燈泡時,您是否同樣小心?“垃圾箱攻擊”是指從廢棄設備中提取敏感信息(例如 Wi-Fi 憑據(jù))。
中間人攻擊
“中間人” (MITM) 是一種攻擊,攻擊者在其中秘密中繼并可能改變認為他們直接相互通信的兩方之間的通信。MITM 攻擊的漏洞表明身份驗證存在弱點。在將新設備引入網(wǎng)絡時,通常會在調(diào)試期間執(zhí)行這種類型的漏洞利用。有多種方法可用于驗證設備以使其安全地加入網(wǎng)絡。其中一些需要用戶干預,例如輸入 PIN 碼 (BLE) 或掃描條形碼 (Z-Wave)。其他的可以在沒有用戶干預的情況下發(fā)生,例如使用設備證書與證書頒發(fā)機構和/或云服務相結合來提供身份驗證。
MITM 最常見的實施問題要么是未能包含身份驗證(例如,BLE 中的“Just Works”配對方法),要么是未能使用受信任的第三方(例如證書頒發(fā)機構 (CA))正確驗證證書。
蠻力攻擊
“蠻力”攻擊試圖利用密碼系統(tǒng)實施中的弱點。如果實施得當,破解密碼系統(tǒng)所需的努力可以在理論上進行估計,并且很容易超過計算的可能性。但是,實施中的弱點會大大減少整體解決方案的空間,將不可能的事情變成可行甚至容易的事情。示例包括弱密碼、加密功能的不當使用、硬編碼密鑰和熵不足。
弱密碼
由于計算能力的提高以及發(fā)現(xiàn)加密弱點的進步,許多早期的密碼系統(tǒng)已經(jīng)過時。例如,使用 40 位密鑰對密碼進行暴力攻擊需要約 1.1 萬億次測試。這聽起來可能是一個很高的數(shù)字,但如果再加上當今顯卡、FPGA 或云服務的計算能力,就顯得不夠了。
2017 年,比利時魯汶大學的研究人員成功破解了 DST40,這是早期特斯拉 Model S 密鑰卡中使用的 40 位密碼。“假冒 fob”攻擊使用連接到 Raspberry Pi 的 RF 接收器“嗅探”汽車的標識符 RF 信標,從汽車請求隨機挑戰(zhàn)短語,計算并傳輸對挑戰(zhàn)的正確響應,然后可以使用解鎖車門或啟動汽車,只需大約兩秒鐘。該系統(tǒng)使用包含所有可能的挑戰(zhàn)短語的 5.4 TB 數(shù)據(jù)結構來查找正確的響應。破解密碼的蠻力工作,使用相同的 Raspberry Pi 需要 777 天,之前使用更強大的計算資源預先計算。
這種攻擊的對策是不選擇弱密碼,特別是如果那些密碼已經(jīng)被破解。上面的 DST40 密碼最初在 2005 年被約翰霍普金斯大學和 RSA 實驗室的一個團隊破解,并在 2005 年的福特 Escape SUV 上以類似的方式進行了演示。其他已被證明較弱的流行密碼包括 DES、3DES、RC2 和 RC4。在 TLS 連接或協(xié)商密碼或密碼套件的任何連接的情況下,不允許使用弱協(xié)議(例如 SSL)或弱密碼套件非常重要。
密碼學功能的不當使用
高級加密標準 (AES) 是一種分組密碼,它對固定大小為 128 位(16 字節(jié))的數(shù)據(jù)元素進行操作。在對長度超過 16 字節(jié)的數(shù)據(jù)流進行加密或解密時,需要進行多次 AES 操作。獨立處理每個塊(稱為“AES_ECB”或“電子密碼本”)可以揭示密文數(shù)據(jù)中的某些模式,這對于機密性來說是不可取的,因此建議使用 NIST 批準的鏈式密碼模式,例如 AES_CBC(“Cipher Block Chaining”)或 AES_CTR(“計數(shù)器”),或者更好的是,使用經(jīng)過身份驗證的加密模式,例如 AES_CCM(“帶有 CBC-MAC 的計數(shù)器”)或 AES_GCM(“Galois/計數(shù)器模式”),這可以確保機密性和真實性的數(shù)據(jù)。
請注意,其中許多模式都需要使用初始化向量 (IV),其安全要求取決于所選的特定模式。保守的指導是使用強隨機數(shù),例如來自經(jīng)批準的密碼隨機數(shù)生成器,并且只使用一次 IV,使其成為“隨機數(shù)”。IV 最常見的錯誤是使用硬編碼或常量 IV。
硬編碼鍵
“硬編碼”密鑰是指嵌入在源代碼中的密鑰。硬編碼密鑰不好,因為它們難以更改(需要重新編譯源代碼),并且它們是最容易竊取的密鑰之一(通過逆向工程、閱讀源代碼或其他方式)。理想情況下,密鑰在需要時計算或以加密形式存儲。NIST SP 800-57 建議根據(jù)密鑰的使用方式定期更改密鑰,通常每 1 到 3 年或更頻繁。此外,系統(tǒng)還應該支持一種機制,用于在密鑰被泄露的情況下撤銷密鑰。
熵不足
密碼學依賴于具有高熵的隨機數(shù)源。一個常見且看似無害的密碼學實現(xiàn)錯誤之一是選擇了錯誤的隨機數(shù)源。當開發(fā)人員使用編譯器原生的“rand()”函數(shù)而不是加密的強偽隨機數(shù)生成器 (PRNG) 或者他們使用具有錯誤種子值(例如常量或時間參考)的良好 PRNG 時,就會發(fā)生這種情況。
圖 2 顯示了使用“rand()”生成的位圖和使用 TRNG(真隨機數(shù)生成器)生成的位圖。請注意“rand()”圖片中的莫爾狀圖案。模式不是隨機的,這表明這是熵源的錯誤選擇。
密碼學的強度取決于隨機數(shù)中的熵量。隨機數(shù)源中的任何模式或偏差都會減少暴力攻擊期間測試所需的選項數(shù)量。為了說明,我們假設嵌入式系統(tǒng)使用“自上次復位后的系統(tǒng)時鐘”作為其“rand()”函數(shù)的種子,而“rand()”函數(shù)用于在系統(tǒng)初始化期間生成密鑰。由于 MCU 在很大程度上是確定性的,因此該系統(tǒng)將傾向于生成相同的密鑰或一小組密鑰中的一個。如果系統(tǒng)只生成八個唯一密鑰,那么密鑰是 128 位還是 256 位長都沒有關系。該密鑰的強度只有三位,因為攻擊者只需八次嘗試即可確定密鑰。此外,C 標準規(guī)定“rand()”的周期至少為 232,這在蠻力攻擊范圍內(nèi),這意味著如果攻擊者能夠辨別 PRNG 序列中的當前位置,所有未來的數(shù)字都將是已知的。
幸運的是,許多 MCU 和無線 SoC 都配備了硬件 TRNG 外設,它們提供了極好的熵源。TRNG 是從物理源(例如熱能)中獲取熵的外圍設備。NIST 800-90A/B/C 和 AIS-31 規(guī)定了密碼學的合適要求。或者,如果使用 TRNG 源定期播種,則可以使用加密 PRNG(例如 CTR_DRBG)。
如果 MCU 沒有 TRNG 外設,則可以使用其他外設(例如無線 RF 接收器或 ADC)作為熵源,但必須小心使用這種方法。具體來說,必須將源表征為熵源,以確定其數(shù)學屬性是否足以滿足 NIST 要求的密碼學要求。NIST 標準還要求對原始熵源添加健康檢查,以確保其保持適當?shù)墓δ埽⑻砑诱{(diào)節(jié)功能(例如 SHA-256)以消除輸出中的任何偏差。
審核編輯:郭婷
-
mcu
+關注
關注
146文章
17272瀏覽量
352084 -
接收器
+關注
關注
14文章
2476瀏覽量
72072 -
soc
+關注
關注
38文章
4193瀏覽量
218695
發(fā)布評論請先 登錄
相關推薦
評論