許多嵌入式設備有着很強的安全要求,因爲他們需要處理機密性的數據或者支持安全事務。一個原型實例是付款終端,爲了確保敏感數據,比如說加密密碼不被泄漏,系統的安全部分當成一個隔離的芯片進行實現,從而與系統的其他部分進行隔離。
但是隔離也能通過軟件進行實現,高端的計算平臺有一些硬件來指出實現虛擬內存與VMM,然而,許多的嵌入式系統缺少這些硬件特徵。
本文設計了一個普遍的、輕量級的硬件機制,能夠支持共享同一個處理器與內存空間的多個子系統之間進行隔離。一個原型就是支持保護密鑰的加密系統的軟件實現。
貢獻:
- 一個新的內存訪問控制模型,訪問內存依賴於程序計數器的值
- 基於這個內存訪問控制模型的自我保護模塊的設計:一個軟件模塊能夠爲模塊處理的數據、如何被其他模塊所調用提供很強的安全保證
- 對這個設計的一個粗略證明
- 幾個應用場景的討論
威脅模型:
攻擊者能夠向系統的內存空間注入代碼,不能進行物理攻擊。
安全屬性:
- entry point的約束:軟件模塊能夠安全地約束他們如何被調用。也就是說,軟件模塊的entry point是由模塊提供者定義的,攻擊者不能夠隨便跳轉到模塊的任意位置。
- 模塊數據的安全:模塊的敏感信息僅能夠被這個模塊讀寫
- 模塊認證:模塊能夠認證其他模塊的內存
- 模塊之間的安全通信:模塊能夠有效的與他們認證的其他模塊交互。消息的完整性與機密性必須能夠保證。
- 最小化TCB
忽略程序本身的邏輯錯誤引起的攻擊、忽略拒絕服務攻擊
自我保護模塊SPM:
- 三個段:SEntry(可以調用SPM的入口點)、SPulic(其他模塊可讀)、SSecret(敏感數據,不可信模塊不可訪問)
- 內存訪問控制策略
SPM的創建與銷燬如下圖所示。創建:OS加載SPublic與Sentry;一個新的硬件指令setProtected創建SPM,定義三個段的邊界,開啓內存訪問控制策略,清空SSecret;一個稱爲vault的模塊初始化SSecret。Vault在boot後安裝,並且不允許卸載。
內存訪問控制矩陣如表一所示:
硬件上的修改:
- setProtected
- isProtected:返回SPM的layout
- resetProtected
安全報告:
- Hash(SEntry || SPublic)
- SPM的layout
- CA的簽名
驗證過程:驗證安全報告的簽名,驗證Sentry與SPublic的hash,使用isProteced驗證SPM的layout
兩個模塊之間的認證協議:
- 單向
- 雙向
- 雙向,事件通信
缺陷:
- 中斷
- 交換
- DMA
- 分頁
- 併發執行