系統強化之控制流限制
導讀 | CFI非常簡單:我們確保程式碼中的控制流始終遵循靜態控制流圖。例如,一個函式的返回指令應該只允許返回到它的呼叫站點,而使用C中的函式指標或C++中的虛擬函式的間接呼叫應該只能夠定位它應該能夠呼叫的合法函式的入口點。 |
正交防線是調節作業系統的控制流。透過確保攻擊者無法將控制權轉移到他們選擇的程式碼上,即使我們不刪除記憶體錯誤,我們也使利用記憶體錯誤變得更加困難。最好的例子被稱為控制流完整性(CFI),現在許多編譯器工具鏈(如LLVM和微軟的VisualStudio),並於2017年以ControlFlowGuard的名義併入Windows核心-另見軟體安全CyBOK知識領域。
從概念上講,CFI非常簡單:我們確保程式碼中的控制流始終遵循靜態控制流圖。例如,一個函式的返回指令應該只允許返回到它的呼叫站點,而使用C中的函式指標或C++中的虛擬函式的間接呼叫應該只能夠定位它應該能夠呼叫的合法函式的入口點。為了實現這種保護,我們可以標記間接控制轉移指令的所有合法目標(返回、間接呼叫和間接跳轉),並將這些標籤新增到特定於此指令的集合。在執行時,我們檢查指令即將進行的控制轉移是否是到集合中的目標。否則,CFI會發出警報和/或使程式崩潰。
與ASLR一樣,CFI有多種口味,從粗粒度到細粒度,從上下文敏感到上下文不敏感。就像在ASLR中一樣,今天的大多數實現只採用最簡單,最粗粒度的保護。粗粒度CFI意味著為了效能而稍微放寬規則。例如,它不是將函式的返回指令限制為可能呼叫此函式的僅目標合法呼叫站點,而是可以針對任何呼叫站點。雖然不如細粒度CFI安全,但它仍然極大地限制了攻擊者的迴旋餘地,並且具有更快的執行時檢查。
在現代機器上,某些形式的CFI甚至(或將要)得到硬體的支援。例如,英特爾控制流強制技術(CET)支援影子堆疊和間接分支跟蹤,以幫助分別強制實施退貨和前向控制傳輸的完整性(以非常粗粒度的方式)。ARM也不甘示弱,它提供了指標身份驗證,以防止對指標值進行非法修改—主要是透過使用 指標的上位來儲存指標身份驗證程式碼(PAC),其功能類似於加密指標值上的簽名(除非您獲得正確的PAC,否則您的指標無 效)。
遺憾的是,CFI只能透過破壞返回地址、函式指標和跳轉目標等控制資料來幫助抵禦改變控制流的攻擊,但對非控制資料攻擊卻無能為力。例如,它無法阻止覆蓋當前程式的許可權級別並將其設定為“root”的記憶體損壞(例如,透過將有效使用者ID設定為root使用者的ID)。但是,如果對控制流的限制在實踐中如此成功,您可能想知道資料流是否也可以進行類似的限制。事實上,它們確實如此,這被稱為資料流完整性(DFI)。在DFI中,我們靜態地確定每個載入指令(即從記憶體中讀取的指令)儲存指令可能合法地產生了資料,並且我們標記這些指令並將這些標籤儲存在一組中。在執行時,對於記憶體中的每個位元組,我們記住該位置的最後一個儲存的標籤。當我們遇到載入指令時,我們會檢查該地址的最後一個儲存是否在合法儲存集中,如果不是,我們會發出警報。與CFI不同,DFI在實踐中並未被廣泛採用,可能是因為其顯著的效能開銷。
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2943151/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 版本控制系統之gitGit
- 內部控制資訊系統化
- 【限制】32G,作業系統限制?資料庫限制?作業系統資料庫
- 內控系統之控制點物件研究物件
- CRM系統加強醫療機構資訊化建設?
- 從資訊流推薦到控制領域,基於PaddlePaddle的強化學習框架PARL有多強?強化學習框架
- 程式分析與優化 - 2 控制流圖優化
- [java IO流]之 序列化流和反序列化流(ObjectOutputStream/ObjectInputStream)JavaObject
- java基礎學習之十二:控制流Java
- 乾貨|個性化推薦系統五大研究熱點之強化學習(三)強化學習
- 加強企業的變化管理系統(轉)
- 城市交通系統最佳化策略:透視擁堵之困,探索流暢之道
- MySQL優化之系統變數優化MySql優化變數
- 容器編排系統K8s之訪問控制--准入控制K8S
- 系統初始化之sys init
- 版本控制系統
- 強化學習之CartPole強化學習
- CRM系統怎麼加強醫療機構資訊化建設?
- 一個強化系統看出你的策劃段位!
- 你不知道的前端·許可權控制篇 之 中後臺系統——故事化前端
- 強大的工作流引擎,讓免費OA辦公系統更智慧
- Feed 流系統雜談
- 容器編排系統之ReplicaSet和Deployment控制器
- 學生資訊管理系統之優化優化
- 智慧照明系統, 智慧照明控制系統
- 前端效能優化之節流-throttle前端優化
- js優化之防抖節流JS優化
- Flink + 強化學習 搭建實時推薦系統強化學習
- 川大ATC系統部分引數限制
- MySQL最佳化之系統變數最佳化MySql變數
- python控制流Python
- FAT、NTFS檔案系統的大小限制與NTFS的效能及最佳化
- 透過整合所有系統元件來簡化運動控制元件
- 容器編排系統之DaemonSet、Job和CronJob控制器
- 版本控制系統之基於httpd搭建私有git倉庫httpdGit
- Windows系統之XP應用優化指南Windows優化
- Linux 效能優化之 IO 子系統Linux優化
- 運維自動化之賬單系統運維