# Design and Implementation of a Dynamic Information Flow Tracking Architecture to Secure a RISC-V Core for IoT Applications ## Abstract * 安全性式計算機架構越來越重要的一個面向 * 介紹了 RISC-V 硬體動態訊息追蹤流(DIFT)架構的設計和實現 * 保護應用程式免於記憶體攻擊 * 該架構快速又透明 * 對於新的攻擊可以輕鬆擴展 * 實作在 PULPino 上,實驗表明對性能不會有影響 ## Introduction * 隨著物聯網的普及,設備的安全性也越來越重要 * 眾多保護技術中,DIFT 是其中一種可保障安全和隱私的方法 * DIFT 主要防止 information leak 和 injection 等攻擊 * DIFT 的主要想法是在 data 中多一個 tag 去記錄該 data 的安全性/真實性 * 主要分為三個概念:標籤初始化、標籤傳播和標籤檢查 ## Securing RISC-V With DIFT ### Protection Scheme Overview * ![](https://i.imgur.com/PVYpj6C.png) * ![](https://i.imgur.com/ocWTDVS.png) * 粉紅色是新加入的元件,用於傳播、檢查、更新 tag * 在 PC、general-purpose registers 和 data memory 中的每 byte 都用了 1-bit 去當 tag,這是需要的 cost * data-memory bus 從 32 bits 變成 36 * 程式開始時,register、PC、memory blocks 的 tag 都是 0 (都是安全的) * 擴展、修改原有的 RISC-V 指令集,使其可支援 tag * 在 Control Status Registers 中增加 Tag Propagation Register 和 Tag Check Register 來完成 tag 傳播和檢查 ### Tag-Propagation Mechanisms * 將指令集分成七類,每類的 tag 傳播檢查規則一樣 * 存取、邏輯、比較、位移、跳轉、分支、整數運算 * 每個操作的規則都不一樣,像是加法就是任一個參數是危險的,出來的結果也會被標記成危險 * 其規則有四種,用 Tag Propagation Register 紀錄 * 00: 保持原值 * 01: AND * 10: OR * 11: 標示成安全(0) ### Tag-Checking Mechanisms * Tag Check Register 紀錄每個指令的會檢查的部分 * 大部分的操作中 TCR 會有 3 bits,分別對應第一個輸入、第二個輸入和輸出,被標記成 1 的欄位代表如果 tag 是 1 就會引發 excption * load/store 有四個欄位,source-address, source, destination-address, destination ### Security Policy for Memory Protection * 將所有的使用者輸入標記成危險 * 透過傳播機制,程式運行時會將危險的暫存器擴張出去 * 而檢查規則會禁止被上 tag 的資料用於加載、儲存或是更動 PC,有效防止惡意代碼執行 * 發生 excption 時會停止該 program execution ## Experiments * 擴展了 RI5CY/PULPino 這個處理器,實現有 DIFT 的 D-RI5CY * 配備在 ZedBoard equipped with a Xilinx XC7Z020 FPGA * 系統內存 36 KB,其中 4 KB 是 tag,耗費 12.5% * 實驗證明 tag 的處理是平行的,對處理器性能沒有影響 ### Buffer-Overflow Attacks * 該漏洞利用 memcpy 缺乏對大小的檢查達到覆蓋 return address 的攻擊 * 常見的 payload 是先輸入一堆 A 當作填充值讓 buffer 填滿,後面再接上 shellcode 覆蓋掉 return address * 實驗中 D-RI5CY 成功偵測到該攻擊 * D-RI5CY 會將使用者的輸入(填充值和 shellcode)標示為危險 * 執行 memcpy 時會將來源和目標也都標示成危險 * 執行 return 的時候就會將帶有危險 tag 的值設定成 PC,觸發 exception ### Format-String Attacks * 該漏洞利用 printf() 中的字串參數,將內容寫入到 memory 的任意位置 * D-RI5CY 成功檢測並阻止這種攻擊 ### False-Positive Analysis * 為了避免在非惡意程式中產生誤報,跑了另外 8 個程式 * 其中在矩陣乘法中,發現會將輸入矩陣標示成危險輸入 * 但矩陣內容不會被當作 PC,因此不會產生異常的 exception ## Concluding Remarks * 展示了 D-RI5CY,利用 DIFT 保護內核安全 * 平行化處理 tag 不會影響到原先的程式效率 * 具有可擴展性,可以修改 tag 機制 ###### tags: `paper`