該技術(shù)是在編譯階段在原始程序的數(shù)據(jù)操作指令前后加入一系列處理指令,使得原始數(shù)據(jù)以加密形式存儲到內(nèi)存中,只有正確解密內(nèi)存數(shù)據(jù)的指令才能夠正常執(zhí)行。因此,攻擊者將因為不了解原始密鑰,而無法正確改寫數(shù)據(jù)(如,指針地址)或泄漏內(nèi)存中的原始數(shù)據(jù)。例如,攻擊者若采用控制流劫持攻擊,其想要覆蓋的內(nèi)存地址值是密文,不知道密鑰的攻擊者便無法構(gòu)造正確的內(nèi)存地址因而無法篡改程序的控制流。 2003年,C.考恩(Crispin Cowan)等人提出了PointGuard技術(shù),是數(shù)據(jù)隨機(jī)化技術(shù)的雛形。該技術(shù)將指針加密存儲于內(nèi)存中,僅在指針解引用(dereference)時才進(jìn)行解密,使得攻擊者無法直接覆蓋指針以實現(xiàn)劫持程序的控制流。但該技術(shù)僅限于保護(hù)指針,而無法對抗非指針覆蓋類型的攻擊。2008年,微軟研究院的C.查德爾(Cristian Cadar)等人首次正式提出數(shù)據(jù)隨機(jī)化技術(shù)的概念,能夠全面保護(hù)存儲到內(nèi)存中的數(shù)據(jù)。該技術(shù)是將在編譯階段通過靜態(tài)分析識別數(shù)據(jù)操作相關(guān)指令,在內(nèi)存數(shù)據(jù)操作指令前后加入一系列處理代碼,使得數(shù)據(jù)在加密后才寫入內(nèi)存,并且通過在不同的內(nèi)存操作處采用不同的隨機(jī)密鑰以增強(qiáng)隨機(jī)性。 數(shù)據(jù)隨機(jī)化能夠有效彌補(bǔ)地址空間布局隨機(jī)化和指令集隨機(jī)化技術(shù)的局限性,運行期間引入的開銷相對較小(約增加11%),能夠抵御代碼注入攻擊和數(shù)據(jù)流攻擊(例如,數(shù)據(jù)導(dǎo)向返回編程攻擊(Data Oriented Programming Attack))等內(nèi)存數(shù)據(jù)相關(guān)的軟件漏洞利用攻擊。 |
|