針對面向返回編程(ROP)攻擊的特性,提出了一種利用多密鑰加密函數返回地址值防ROP攻擊的方法。這種方法通過密鑰指定位以及密鑰迷惑位的巧妙設置,防止密鑰在泄露情況下攻擊者實施有效攻擊的可能。利用二進制代碼動態翻譯工具PIN開發了原型系統,在實現時,為了避免攻擊者攻擊原型系統而直接訪問密鑰,引入了誘餌密鑰,在增加攻擊難度的同時降低了可信計算基。其有效性分析和實驗結果表明,在不需要其他信息(如源碼、調試信息等)條件下,多密鑰加密防御方法能在適當的性能開銷下,有效防御ROP攻擊,并且其誤報率極低。
關鍵詞 代碼復用類攻擊,返回編程(ROP)攻擊,多密鑰加密保護,密鑰迷惑位,誘餌密鑰O引言最早代碼復用類攻擊是返回庫into1ibc,攻擊¨,2|,由于RILC攻擊所利用的代碼段粒度大,可供攻擊選用的函數數量少,并且依賴于標準庫中幾種關鍵函數,因此不方便組裝。攻擊者傾向于選擇具有圖靈完全運算能力的面向返回編程(re—一oriented pr0孕踟“ng,ROP)方式實施攻擊”’。
由于程序中存在大量以0xC3字符(即ret指令)結尾的短序列代碼碎片,因此僅僅通過去除標準庫中的若干個函數(如system()函數),難以有效地防御ROP攻擊。同時ROP攻擊已經在真實攻擊中被用來繞過Windows系統的w o x防御方法H1,即數據執行保護,DEP)技術。
為防御ROP攻擊,研究者提出了多種防御方法。包括指令對齊方法【5再]、惡意代碼消除一。0|、設置影子棧保護返回地址值?J、控制流一致性檢測¨2’坫。等。
然而現有的方法或是需要源代碼信息,或者性能開銷過大。部分方法需要依靠動態翻譯工具實現防御,從而擴大了可信計算基的范圍。
針對ROP攻擊需要連接指令ret的執行將各個組裝并連續運行的特點,可采用對返回地址值加密保護的方法予以防御。然而這種方法由于只需要一個隨機生成的密鑰,并且加密方法簡單,因此在加密地址泄露后(如通過格式化字符串攻擊),很容易被攻擊者猜出密鑰值。為解決上述問題,本文提出利用多密鑰加密方法防御代碼復用類攻擊。多密鑰加密方法在程序運行時引入多個隨機生成的密鑰,同時為返回地址隨機指定不同的密鑰。為防止攻擊者在獲取全部密鑰的情況下成功猜測密鑰與地址的匹配關系,本文引入了密鑰迷惑位,進一步提高了攻擊者成功猜測加密方法的難度。多密鑰加密方法不僅繼承了返回地址值加密保護的優點,并且能在部分密鑰泄露甚至在全部加密密鑰被攻擊者所獲知的情況下,有效防御ROP攻擊。本文闡述了多密鑰加密的防御方法,介紹了多密鑰加密的實現,分析了多密鑰加密方法的有效性并用實驗予以驗證,評估了其性能開銷并分析其局限性,討論了相關工作,最后給出了結論。