官术网_书友最值得收藏!

第3章 指針詭計(jì)

與Rob Murawski合著 [1]

Tush!tush!fear boys with bugs.

—William Shakespeare.The Taming of the Shrew.act1.scene2 

指針詭計(jì)(pointer subterfuge)是通過(guò)修改指針值來(lái)利用程序漏洞的方法的統(tǒng)稱[Pincus 2004]。C和C++的對(duì)象指針和函數(shù)指針是有區(qū)別的。指向void或指向一個(gè)對(duì)象類型的指針的類型被稱為對(duì)象指針類型(object pointer type)。可以指定一個(gè)函數(shù)的指針類型被稱為函數(shù)指針類型(function pointer type)。指向類型T的對(duì)象的指針被稱為“指向T的指針”。C++還定義了一種成員指針類型(pointer to member type),它是指定一個(gè)非靜態(tài)類成員的指針類型。

可以通過(guò)覆蓋函數(shù)指針將程序的控制權(quán)轉(zhuǎn)移到攻擊者提供的外殼代碼(shellcode)。當(dāng)程序通過(guò)函數(shù)指針執(zhí)行一個(gè)函數(shù)調(diào)用時(shí),攻擊者提供的代碼將會(huì)取代原本希望執(zhí)行的代碼而得到執(zhí)行。

對(duì)象指針也可以被修改,從而執(zhí)行任意代碼。如果一個(gè)對(duì)象指針用作后繼賦值操作的目的地址,那么攻擊者就可以通過(guò)控制該地址從而修改內(nèi)存其他位置中的內(nèi)容。

本章詳細(xì)解釋了函數(shù)指針和對(duì)象指針的修改問題。與本書其他各章的不同之處在于,本章在介紹了如何初步利用漏洞后(如緩沖區(qū)溢出),還詳細(xì)討論了攻擊者可能如何進(jìn)一步地執(zhí)行任意的代碼。預(yù)防指針詭計(jì)非常困難,最佳緩解措施就是在編程階段消除漏洞。在進(jìn)一步討論指針詭計(jì)之前,讓我們首先了解數(shù)據(jù)的聲明與它在內(nèi)存中存儲(chǔ)位置之間的關(guān)系。

[1] Rob Murawski 是卡內(nèi)基梅隆大學(xué)軟件工程研究所(SEI)CERT 計(jì)劃技術(shù)團(tuán)隊(duì)中的一員。
主站蜘蛛池模板: 乌兰察布市| 历史| 囊谦县| 方城县| 绩溪县| 盱眙县| 大连市| 晋江市| 沧州市| 合阳县| 泸州市| 金山区| 威信县| 广饶县| 博野县| 双流县| 房山区| 定远县| 那坡县| 门源| 扬中市| 澄迈县| 长治市| 封丘县| 南江县| 陕西省| 尼玛县| 清水河县| 彭州市| 瓮安县| 昂仁县| 水城县| 壤塘县| 达孜县| 永胜县| 龙里县| 驻马店市| 璧山县| 林周县| 泌阳县| 桐乡市|