Off-by-one 錯誤與不當的 Unicode 展開,都是當下難以察覺、事後卻對任何程式設計師都刺眼明顯的錯誤。但還有一些常見錯誤,能以不那麼明顯的方式被利用。
為什麼會有「通用」技術#
這些錯誤對安全的衝擊並不總是顯而易見,而且到處都存在於程式碼中。
正因為同一類錯誤在許多不同地方被重複犯下,才演化出可套用於各種情境的通用利用技術(generalized exploit techniques)。
核心目標:任意程式碼執行#
多數程式漏洞利用都與**記憶體毀損(memory corruption)**有關,包括常見的緩衝區溢位(buffer overflow),以及較少見的格式字串攻擊(format string exploit)。
這些技術的終極目標是一致的:
這種挾持程序的手法稱為任意程式碼執行(execution of arbitrary code),因為駭客幾乎可以讓程式做任何他或她想做的事。
如同 LaMacchia 漏洞,這類弱點之所以存在,是因為有程式無法處理的特定意外情況:
- 正常情況下,這些意外會讓程式崩潰——比喻上,就是把執行流程開下懸崖。
- 但若小心控制環境,執行流程反而能被掌控——阻止崩潰,並對程序重新編程。