盡管開發人員已經采取最大努力,但是仍然可能將物聯網 (IoT) 設計暴露在預期用來維護安全性的代碼攻擊之下。黑客經常會用受損代碼替換固件,以攻擊看似安全的設計。安全引導方法可以緩解這些攻擊,但可能難以確保正確實現。
開發人員需要更簡單的方法來實現安全引導,將其作為確保物聯網器件安全性的整體策略的一部分。
本文簡要回顧了物聯網器件設計中的常見攻擊面,以及安全密鑰存儲、加密和身份驗證等基本安全方法的作用;然后介紹了一種安全芯片,能讓開發人員在整體策略所需的其他功能中添加安全引導,以確保物聯網器件的安全。
物聯網器件漏洞
對于黑客而言,物聯網器件帶來了可用以破壞器件本身、其網絡甚至是最終應用的多個入口點。雖然開發人員可以使用各種技術來增強網絡和應用安全性,但由于物聯網器件上可用的存儲器和處理資源有限,因此確保其安全性仍是一項挑戰。
盡管開發人員在采用加密方法來保護數據,但許多器件都不具備所需的安全身份驗證功能,無法防止黑客偽裝成授權服務器、網關或其他物聯網器件來攔截通信。某些情況下,如果器件使用有效但較弱的身份驗證方法,仍然容易受到復雜的漏洞程序攻擊,這些攻擊會攔截看似私密的通信會話中所用的有效安全密鑰,然后加以重復使用。
物聯網器件更新
一個更加底層的安全漏洞涉及數量快速增長的物聯網器件中內置的空中升級 (OTA) 功能。空中升級為快速發展的物聯網市場提供了一項重要功能。開發人員可通過升級已部署器件的固件,響應客戶對新功能不斷變化的需求(或修復錯誤)。在典型的空中升級流程中,物聯網器件將定期尋找更新,在新代碼可用時下載新代碼,并執行一系列系統調用以完成更新流程。
例如,對于 Microchip Technology 基于 SAM D21 MCU 的物聯網器件,其固件將包含空中升級代碼,用于從某個預設端點下載鏡像,之后固件會檢查是否執行成功,然后切換到新的固件集(列表 1)。在 Microchip 高級軟件框架包提供的這個列表中,OTA 固件初始化 (m2m_ota_init()) 之后,回調例程 OtaUpdateCb() 會在 OTA 固件下載新代碼鏡像后,切換到新固件集 (m2m_ota_switch_firmware()),然后系統復位即會引導 MCU 重啟到已更新的固件。
副本
static void OtaUpdateCb(uint8 u8OtaUpdateStatusType ,uint8 u8OtaUpdateStatus)
{
if(u8OtaUpdateStatusType == DL_STATUS) {
if(u8OtaUpdateStatus == OTA_STATUS_SUCSESS) {
//switch to the upgraded firmware
m2m_ota_switch_firmware();
}
}
else if(u8OtaUpdateStatusType == SW_STATUS) {
if(u8OtaUpdateStatus == OTA_STATUS_SUCSESS) {
M2M_INFO("Now OTA successfully done");
//start the host SW upgrade then system reset is required (Reinitialize the driver)
}
}
}
void wifi_event_cb(uint8 u8WiFiEvent, void * pvMsg)
{
case M2M_WIFI_REQ_DHCP_CONF:
{
//after successfully connection, start the over air upgrade
m2m_ota_start_update(OTA_URL);
}
break;
default:
break;
}
int main (void)
{
tstrWifiInitParam param;
tstr1xAuthCredentials gstrCred1x = AUTH_CREDENTIALS;
nm_bsp_init();
m2m_memset((uint8*)?m, 0, sizeof(param));
param.pfAppWifiCb = wifi_event_cb;
//Initialize the WINC Driver
ret = m2m_wifi_init(?m);
if (M2M_SUCCESS != ret)
{
M2M_ERR("Driver Init Failed <%d> ",ret);
while(1);
}
//Initialize the OTA module
m2m_ota_init(OtaUpdateCb,NULL);
//connect to AP that provide connection to the OTA server
m2m_wifi_default_connect();
while(1)
{
//Handle the app state machine plus the WINC event handler
while(m2m_wifi_handle_events(NULL) != M2M_SUCCESS) {
}
}
}
列表 1:這是來自 Microchip 高級軟件框架包的無線 (OTA) 代碼樣例,一個 Wi-Fi 事件句柄回調函數 wifi_event_cb() 使用指定 URL 啟動空中升級 m2m_ota_start_update(OTA_URL),并在成功完成 OtaUpdateCb() 后,切換至新固件 m2m_ota_switch_firmware()。(代碼來源:Microchip Technology)
為了檢查下載的代碼是否有效,開發人員長期依賴由認可的認證機構頒發的代碼簽名證書。即便如此,安全數據存儲、驗證技術實現和證書保護方面的不足也為黑客提供了操縱侵入物聯網器件的途徑。
即使使用傳統的安全技術,器件自身的固件更新流程也可能遭受侵害,有效代碼被替換成受損代碼。在重啟時,器件會成為黑客用來更深入地滲透物聯網網絡、物聯網應用甚至企業內部資源的工具。
在這種情況下,安全引導物聯網器件的能力便成為一道關鍵防線。但是,對于開發人員而言,要實現安全引導,在安全存儲、加密、身份驗證和代碼驗證機制方面需滿足多種要求。
有些攻擊方法側重于從器件存儲中檢索安全密鑰、攔截加密數據、欺騙身份驗證機制以及破壞代碼驗證算法,如果以軟件方式實現安全引導,更新流程將暴露于這些危險之中。實際上,物聯網設計通常缺乏額外的存儲器和處理能力,而這正是軟件解決方案在所有情況下都需要的。即便如此,硬件實現也無法始終保證安全性。
為了在硬件中實現安全引導,物聯網器件往往需要大量專用器件,而這會大幅增加設計復雜性和成本,這種情況直到最近才有所改觀。即使開發人員集成了這些獨立器件,意向堅決的黑客也可以輕松獲取目標物聯網器件的樣件,并通過其總線和信號互連攻擊單個安全器件。相比之下,Microchip Technology 的 ATECC608A 是一種單芯片解決方案,允許開發人員在不暴露底層機密或安全機制的情況下添加安全引導。
安全 IC
ATECC608A 是一款 8 引腳安全器件,可通過簡單的串行接口為主機 MCU 提供先進的安全功能補充(圖 1)。
圖 1:ATECC608A 是一款 8 引腳加密協處理器,具有基于硬件的安全密鑰存儲器。(圖片來源:Microchip Technology)
該器件提供基于硬件的完整安全解決方案,將其集成的加密加速器與片載安全存儲器相結合,支持各種加密算法,包括 SHA-256、AES-128 以及穩健的橢圓曲線算法,如橢圓曲線數字簽名 (ECDSA)、橢圓曲線 Diffie-Hellman (ECDH) 和 NIST 曲線 P-256 等。除了這些加密機制,該器件還支持包括 TLS 1.3 在內的更高級別的傳輸層安全 (TLS) 協議。與早期器件不同,ATECC608A 可以生成并安全存儲會話密鑰,這有助于減輕使用 TLS 身份驗證時常見的威脅來源。
這些功能在確保物聯網器件正常運行方面發揮著重要作用,但 ATECC608A 對安全引導的支持將安全覆蓋范圍擴展到基本固件更新流程。ATECC608A 會驗證新代碼集,并向 MCU 返回表示成功或失敗的消息。此時,根據現有安全策略,MCU 可以重試更新,向安全監視器端點發送警告消息,暫停或忽略更新并重啟進入原始代碼。
硬件集成
對于開發人員而言,在向基于 MCU 的設計添加安全引導和其他安全功能方面,ATECC608A 帶來的額外要求相對較少。在硬件方面,設計人員需要處理最多四個連接:VCC、GND、串行時鐘輸入 (SCL) 和串行數據 (SDA)。其余四個引腳未連接。除了將 VCC 連接到 2.0 V 至 5.5 V 電源外,唯一待確定的是與 MCU 的串行連接。
設計人員可以將器件的 SCL 和 SDA 引腳連接到 MCU,以實現傳統的 I2C 連接。或者,設計人員可以利用器件對 Microchip 單線接口的支持。這里,開發人員將器件的 SDA 端口連接到 MCU GPIO 引腳,并使用 Microchip 的單線時序協議傳輸邏輯 0 和 1 值(圖 2)。
圖 2:在 Microchip 單線串行協議中,一個指定持續時間的波形轉換序列發出邏輯 0 或邏輯 1 信號。(圖片來源:Microchip Technology)
在此協議中,ATECC608A 與 MCU 之間的邏輯值傳輸始于指定持續時間的起始脈沖 (tSTART)。在起始脈沖之后,協議將邏輯 0 定義為指定了持續時間的一個循環,由零傳輸高脈沖 (tZHI) 與隨后的零傳輸低脈沖 (tZLO) 組成。同樣,持續的高電平表示邏輯 1 傳輸。
無論哪種情況下,協議都希望信號在指定位時間 (tBIT) 內降低。在一系列位傳輸之后,如果串行線路在指定的 IO 超時持續時間后變為非活動狀態,則可以將器件編程為自動進入休眠模式。但是,使用 ATECC608A 的開發人員很少需要關注此協議的時序細節:Microchip 定義的關鍵時序參數與在 230.4 Kbaud 運行的標準 UART 兼容。
器件配置
在器件級別,ATECC608A 需要的配置設置最少。開發人員可以使用 I2C 或單線串行接口加載 I2C 地址等設置,或設置一些功能,如喚醒或開機時自檢。該器件確實提供了與超低功耗物聯網設計特別相關的配置設置。
在這些設計中,ATECC608A 在其空閑或休眠模式下增加的總功耗預算相對較少,這兩種模式可能是典型物聯網設計中的最常見狀態。在空閑模式下,器件功耗約為 800 微安 (μA);在休眠模式下,功耗為 150 納安 (nA) 或更低,具體取決于配置。當 MCU 喚醒器件執行某些安全流程時,器件的功耗在有效工作期間仍只有 14 毫安 (mA)。即便如此,具有嚴格功耗預算的設計也可能需要甚至更低的有功功率水平。
為了支持這些設計,該器件提供了一個配置選項,允許開發人員選擇三種不同的工作模式,通過減緩執行速度來實現更低的功耗。因此,開發人員可通過相應減緩執行速度,將有功功率從最大執行速度下的 14 mA 降至 6 mA 或 3 mA。
除了各種低級配置項之外,如果在開發之前已落實安全器件(如 ATECC608A)的安全信息,會更為有效。開發過程中所執行安全密鑰和證書的錯誤或漏洞甚至會致使最佳安全措施失效。為解決這一可能的威脅,Microchip 的可信配置服務會在制造過程中加載包括密鑰和證書在內的安全數據。
在工廠的安全環境中加載安全信息后,即使器件通過供應鏈中的正常處理流程,也可以保護其不被意外或故意發現。ATECC608A 包含一種特殊的傳輸鎖定功能,在使用從最終主機 MCU 傳輸的已知密鑰以加密方式啟用器件前,禁止使用器件。
一旦被主機 MCU 啟用,ATECC608A 就會隨機生成一個與 MCU 共享的稱為 IO 保護密鑰的密鑰。ATECC608A 與 MCU 之間的后續通信使用此 IO 保護密鑰進行加密——這是一種在安全引導和其他安全流程中提供額外身份驗證的機制。
如果黑客希望切斷與 ATECC608A 的連接并將自己的“成功”信號饋送給 MCU 以欺騙驗證流程,此 IO 保護密鑰機制將導致 MCU 忽略錯誤信號。即使黑客以某種方式破壞 ATECC608A 器件并嘗試在不同的系統上使用它,IO 保護密鑰機制也會有效阻止其使用。
軟件集成
ATECC608A 具有所有精致的功能和保護機制,可以直接應用到基于 MCU 的設計。除了實現前面提到的簡單硬件接口和配置設置之外,開發人員還可使用抽象出操作細節的應用編程接口 (API)。Microchip 的 CryptoAuthLib 加密認證庫提供一個全面的軟件包,其中包含充分利用 ATECC608A 功能所需的定義、結構和 API 調用。此庫充當硬件中立層,通過硬件抽象層 (HAL) API 和用于特定硬件目標的驅動程序來運作(圖 3)。
圖 3:Microchip 的 CryptoAuthLib 庫在應用和底層硬件之間提供了一個加密服務層,可通過硬件特定驅動程序之上的硬件抽象層訪問該服務層,從而實現跨不同硬件組的可移植性。(圖片來源:Microchip Technology)
開發人員使用 CryptoAuthLib API 例程(如 io_protection_set_key())創建 IO 保護密鑰,并使用 atcab_secureboot() 對照調用參數中包含的代碼摘要或簽名,執行 ATECC608A 的安全引導驗證機制。
雖然 API 命令很簡單,但實現安全性所需的特定設置、管理和操作步驟可能頗具挑戰性。如果關鍵步驟缺失或未按順序執行,開發人員試圖實現的安全機制可能會導致延遲。
使用 Microchip 基于 SAM D21 MCU 的 ATSAMD21-XPRO 開發套件及其配備 ATECC608A 的 ATCRYPTOAUTH-XPRO-B 擴展板,開發人員可以快速獲得使用這些通用機制和 ATECC608A 特定功能的經驗。Microchip 提供在 ATSAMD21-XPRO 和 ATCRYPTOAUTH-XPRO-B 上運行的廣泛安全引導軟件包,使用 Microchip ATOLED1-XPRO 為樣例應用提供基本顯示接口(圖 4)。
圖 4:開發人員可以使用 Microchip 軟件和基于 SAM D21 MCU 的 ATSAMD21-XPRO 開發套件快速評估安全引導流程,其中開發套件結合了配備 ATECC608A 的 ATCRYPTOAUTH-XPRO-B 擴展板和 ATOLED1-XPRO 顯示擴展板。(圖片來源:Microchip Technology)
包含在 SAM D21 演示包中的完整安全引導例程說明了用于設置、執行和檢查安全引導操作狀態的關鍵軟件設計模式(列表 2)。通過此硬件平臺和演示軟件包,開發人員可以快速評估 ATECC608A 的遠程引導使用情況,并根據需要修改樣例軟件以滿足自己的要求。
副本
/** rief Handles secure boot functionality through initialization, execution,
* and de-initialization.
* eturn ATCA_SUCCESS on success, otherwise an error code.
*/
ATCA_STATUS secure_boot_process(void)
{
ATCA_STATUS status;
secure_boot_parameters secure_boot_params;
uint8_t secure_boot_mode;
bool secure_boot_app_valid = false;
/*Initialize secure boot */
if ((status = secure_boot_init(&secure_boot_params)) != ATCA_SUCCESS)
{
return status;
}
do
{
.
.
.
#if SECURE_BOOT_DIGEST_ENCRYPT_ENABLED
.
.
.
/*Get IO Protection Key*/
if ((status = io_protection_get_key(secure_boot_params.io_protection_key)) != ATCA_SUCCESS)
{
return status;
}
if ((status = atcab_secureboot_mac(secure_boot_mode,
(const uint8_t*)&secure_boot_params.app_digest,
(const uint8_t*)&secure_boot_params.memory_params.signature,
(const uint8_t*)secure_boot_params.randomnum,
(const uint8_t*)secure_boot_params.io_protection_key,
&secure_boot_app_valid)) != ATCA_SUCCESS)
{
break;
}
#else
if ((status = atcab_secureboot(secure_boot_mode,
0,
(const uint8_t*)&secure_boot_params.app_digest,
(const uint8_t*)&secure_boot_params.memory_params.signature,
NULL)) != ATCA_SUCCESS)
{
break;
}
secure_boot_app_valid = true;
#endif
/*Check whether the secure boot command executed successfully with the correct return mac */
if (!secure_boot_app_valid)
{
break;
}
.
.
.
}
while (0);
/* De-initialize memory interface and release its resources*/
secure_boot_deinit_memory(&secure_boot_params.memory_params);
return status;
}
列表 2:Microchip SAM D21 演示包的這個代碼片段展示了安全引導的關鍵設計模式,包括檢查 IO 保護密鑰 (io_protection_get_key()) 以及使用其摘要、簽名和其他參數(atcab_secureboot_mac() 或 atcab_secureboot(),具體取決于所選配置)驗證固件。(代碼來源:Microchip Technology)
總結
物聯網器件為意圖使用受損器件入侵物聯網網絡、應用和企業資源的黑客提供了多個威脅面。在解決技術中,安全引導是更廣泛安全策略中的關鍵要素。然而,安全引導的實現本身也有一套要求,如果處理不當,可能會使系統暴露于危險當中。
Microchip Technology 的 ATECC608A 安全 IC 在單個封裝中提供一個全面的解決方案,使開發人員能夠將其輕松添加到任何基于 MCU 的設計中。開發人員可以利用 ATECC608A 極大地增強安全性并確保其物聯網設計中的安全引導。
-
芯片
+關注
關注
456文章
50955瀏覽量
424783 -
存儲
+關注
關注
13文章
4332瀏覽量
85950 -
物聯網
+關注
關注
2910文章
44764瀏覽量
374635
發布評論請先 登錄
相關推薦
評論