# 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
* 
* 
* 粉紅色是新加入的元件,用於傳播、檢查、更新 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`