- C和C++安全編碼(原書第2版)
- (美)Robert C.Seacord
- 539字
- 2020-10-30 17:56:48
第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 計劃技術團隊中的一員。
推薦閱讀
- Learning NServiceBus(Second Edition)
- C++程序設計(第3版)
- AWS Serverless架構:使用AWS從傳統部署方式向Serverless架構遷移
- Developing Middleware in Java EE 8
- Building Mapping Applications with QGIS
- Kinect for Windows SDK Programming Guide
- Big Data Analytics
- 單片機應用與調試項目教程(C語言版)
- Getting Started with Gulp
- Learning ArcGIS for Desktop
- RESTful Java Web Services(Second Edition)
- Unity Character Animation with Mecanim
- Zabbix Performance Tuning
- AMP:Building Accelerated Mobile Pages
- PHP項目開發全程實錄(第4版)