---
# System prepended metadata

title: Design and Implementation of a Dynamic Information Flow Tracking Architecture to Secure a RISC-V Core for IoT Applications
tags: [paper]

---

# 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`