修復(fù)黑客用來攻擊系統(tǒng)的漏洞背后的各個(gè)漏洞是很重要的,但阻止攻擊者利用這些漏洞和刪除整個(gè)漏洞的技術(shù)更有效,或者至少使它們更昂貴和更耗時(shí)的創(chuàng)建。
面向返回的編程(ROP)是一種非常常見的技術(shù),尤其難以阻止,因?yàn)楣粽卟皇窃噲D將自己的代碼注入正在運(yùn)行的進(jìn)程(某些操作系統(tǒng)和瀏覽器已經(jīng)添加了防御),而是尋找內(nèi)存中已經(jīng)包含“返回”的合法代碼的小塊,其中代碼跳轉(zhuǎn)到新的例程或返回主線程。
微軟操作系統(tǒng)安全總監(jiān)戴夫·韋斯頓告訴Tech Republic說:“有了ROP,我就無法創(chuàng)建新的代碼;我只能跳轉(zhuǎn)到不同的代碼片段,并試圖將它們串成有效負(fù)載。” 如果合法代碼像緩沖區(qū)溢出一樣存在內(nèi)存安全錯(cuò)誤,損壞內(nèi)存中的指針意味著系統(tǒng)開始運(yùn)行攻擊者自己的代碼,而不是返回程序調(diào)用堆棧中的地址。
自2012年以來,微軟一直在研究如何阻止攻擊者劫持像這樣的程序中的控制流程。 Windows增加了多個(gè)級別的保護(hù),從簽署重要代碼(代碼完整性保護(hù),或CIG)開始,首先在瀏覽器中阻止運(yùn)行時(shí)代碼生成,然后在VM和內(nèi)核中(任意代碼保護(hù),或ACG)。
韋斯頓解釋說:“目標(biāo)是防止攻擊者加載微軟或我們的第三方之一沒有簽署的二進(jìn)制文件;即使他們能夠利用進(jìn)程并在進(jìn)程中獲得內(nèi)存損壞,他們也不能注入shell code或其他構(gòu)造。”