圖1ASLR示例
圖2目前ASLR的問題
圖3Remix:一種ASLR增強的方向AddressSpaceLayoutRandomization(ASLR)是什麼?一些攻擊,比如returnorientedprogramming(ROP)之類的代碼複用攻擊,會試圖得到被攻擊者的内存布局信息。這樣就可以知道代碼或者數據放在哪裡,來定位并進行攻擊。比如可以找到ROP裡面的gadget。而ASLR讓這些内存區域随機分布,來提高攻擊者成功難度,讓他們隻能通過猜測來進行不斷試錯的攻擊(理想狀況下),圖1為ASLR示例。
ASLR的問題
在出現了某些漏洞,比如内存信息洩露的情況下,攻擊者會得到部分内存信息,比如某些代碼指針。傳統的ASLR隻能随機化整個segment,比如棧、堆、或者代碼區。這時攻擊者可以通過洩露的地址信息來推導别的信息,如另外一個函數的地址等。這樣整個segment的地址都可以推導出來,進而得到更多信息,如圖2所示,大大增加了攻擊利用的成功率。在32位系統中,由于随機的熵值不高,攻擊者也容易通過窮舉法猜出地址。
如何改進?
主要的改進方法有兩種:一是防止内存信息洩露,二是增強ASLR本身。本文主要讨論後者。
1.随機化的粒度可以改進。粒度小了,熵值增加,就很難猜出ROPgadget之類的内存塊在哪裡。ASLP[1]在函數級進行随機化,binarystirring[2]在basicblock級進行随機化,ILR[3]和IPR[4]在指令級。[3]将指令地址進行随機化;而[4]把指令串進行重寫,來替換成同樣長度,并且相同語義的指令串。
2.随機化的方式可以改進。Oxymoron[5]解決了庫函數随機化的重複問題:原先假如每個進程的library都進行fine-grained的ASLR,會導緻memory開銷很大。該文用了X86的segmentation巧妙地解決了這個問題;并且由于其分段特性,JITROP[6]之類的攻擊也很難有效讀取足夠多的memory。Isomeron[7]利用兩份differentlystructuredbutsemanticallyidentical的程序copy,在ret的時候來随機化executionpath,随機決定跳到哪個程序copy,有極大的概率可以讓JIT-ROP攻擊無效。
3.随機化的時間(timing)可以改進。假如程序中存在能洩露内存的漏洞,那這種傳統的、一次性的随機化就白費了。所以需要運行時動态ASLR。[8]解決了fork出來的子進程内存布局和父進程一樣的缺陷。其思路是在每次fork時都進行一次随機化。方法是用Pin進行taint跟蹤,找到ASLR之後要修複的指針并進行修複。為了降低把數據當成指針的falsepositive,一個daemon進程會跑多次來提取出重合的部分。
Remix[9]提出了一種在運行時細粒度随機化的方法。該方法以basicblock為單位,經過一個随機的時間對進程(或kernelmodule)本身進行一次随機化,如圖3所示。由于函數指針很難完全确認(比如被轉換成數據,或者是union類型),該方法隻能打亂函數内部的basicblocks。該方法的另一個好處是保留了代碼塊的局部性(locality),因為被打亂的basicblocks位置都靠得很近。打亂後,需要update指令,以及指向basicblock的指針,來讓程序繼續正确運行。假如需要增加更多的熵值,可以在basicblocks之間插入更多的NOP指令(或者别的garbagedata)。
另一種方法[10]是用編譯器來幫助定位要migrate的内存位置(指針),并且在每次有輸出時進行動态随機化。該方法對于網絡應用比如服務器,由于其是I/O-intensive的應用,可能會導緻随機化間隔極短而性能開銷巨大。
(作者單位為FloridaStateUniversity)
參考文獻:
[1]C.Kil,J.Jun,C.Bookholt,J.Xu,andP.Ning.AddressSpaceLayoutPermutation(ASLP):TowardsFineGrainedRandomizationofCommoditySoftware.InProceedingsofthe22ndAnnualComputerSecurityApplicationsConference,2006.
[2]R.Wartell,V.Mohan,K.W.Hamlen,andZ.Lin.BinaryStirring:Self-randomizingInstructionAddressesofLegacyx86BinaryCode.InProceedingsofthe19thACMConferenceonComputerandCommunicationsSecurity,2012.
[3]J.Hiser,A.Nguyen-Tuong,M.Co,M.Hall,andJ.W.Davidson.ILR:Where'dMyGadgetsGo?InProceedingsofthe33rdIEEESymposiumonSecurityandPrivacy,2012.
[4]V.Pappas,M.Polychronakis,andA.D.Keromytis.SmashingtheGadgets:HinderingReturn-OrientedProgrammingUsingIn-placeCodeRandomization.InProceedingsofthe33rdIEEESymposiumonSecurityandPrivacy,2012.
[5]M.BackesandS.Nurnberger.Oxymoron:Makingfine-grainedmemoryrandomizationpracticalbyallowingcodesharing.InProceedingsofthe23rdUSENIXSecuritySymposium,2014.
[6]K.Z.Snow,F.Monrose,L.Davi,A.Dmitrienko,C.Liebchen,andA.-R.Sadeghi.Just-in-timeCodeReuse:OntheEffectivenessofFine-grainedAddressSpaceLayoutRandomization.InProceedingsofthe34thIEEESymposiumonSecurityandPrivacy,2013.
[7]L.Davi,C.Liebchen,A.-R.Sadeghi,K.Z.Snow,andF.Monrose.Isomeron:Coderandomizationresilientto(just-intime)return-orientedprogramming.InProceedingsofthe22ndNetworkandDistributedSystemsSecuritySymposium,2015.
[8]K.Lu,S.Nurnberger,M.BackesandW.Lee.HowtoMakeASLRWintheCloneWars:RuntimeRe-Randomization.InProceedingsofthe23rdNetworkandDistributedSystemsSecuritySymposium,2016.
[9]Y.Chen,Z.Wang,D.WhalleyandL.Lu.Remix:On-demandliverandomization.InProceedingsoftheSixthACMConferenceonDataandApplicationSecurityandPrivacy,2016.
[10]D.Bigelow,T.Hobson,R.Rudd,W.Streilein,andH.Okhravi.Timelyrerandomizationformitigatingmemorydisclosures.InACMSIGSACConferenceonComputerandCommunicationsSecurity,2015.