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

第3章 指針詭計

與Rob Murawski合著 [1]

Tush!tush!fear boys with bugs.

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

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

可以通過覆蓋函數指針將程序的控制權轉移到攻擊者提供的外殼代碼(shellcode)。當程序通過函數指針執行一個函數調用時,攻擊者提供的代碼將會取代原本希望執行的代碼而得到執行。

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

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

[1] Rob Murawski 是卡內基梅隆大學軟件工程研究所(SEI)CERT 計劃技術團隊中的一員。
主站蜘蛛池模板: 镇康县| 丹江口市| 左权县| 逊克县| 伊川县| 武陟县| 金阳县| 荥阳市| 土默特左旗| 都昌县| 稻城县| 太仆寺旗| 万源市| 江城| 汝南县| 宁明县| 上饶市| 景谷| 额尔古纳市| 衡阳市| 右玉县| 孟津县| 咸阳市| 仁化县| 卓资县| 无极县| 昭觉县| 台山市| 娄底市| 长乐市| 浦城县| 绍兴县| 葫芦岛市| 北流市| 乐陵市| 易门县| 菏泽市| 临汾市| 沾益县| 潍坊市| 班玛县|