攻擊者透過使為輸入處理程序保留的固定大小記憶體緩衝區發生溢位,使用緩衝區溢位入侵執行可執行程式碼。此程式碼可讓攻擊者接管目標電腦或洩漏其資料。
緩衝區溢位入侵有以下兩種類型:
- 堆積型攻擊 - 這類攻擊會攻擊為程式保留的記憶體空間,不過這類攻擊很難執行,並且很少見。
- 堆疊型攻擊 - 這類攻擊使用堆疊記憶體物件儲存使用者輸入,並且是最常見的類型。
以下處理程序說明堆疊型緩衝區溢位攻擊:
- 正常堆疊記憶體處理程序 - 固定大小堆疊記憶體物件通常是空的,並且等待使用者輸入。當某個程式收到使用者輸入 (例如其名稱) 時,會將資料儲存在堆疊的上方,並將資料指派至傳回記憶體位址。處理堆疊後,會將使用者輸入傳送至該程式指定的傳回位址。
- 堆疊溢位 - 寫入程式後,會為資料保留特定容量的記憶體空間。如果寫入的資料大小大於在記憶體堆疊中為其保留的空間大小,則會發生堆疊溢位。此問題僅在進行惡意輸入時發生。
- 溢位入侵 - 如果程式正在等待使用者輸入其名稱,但攻擊者卻輸入了超出堆疊大小的可執行命令,則會在保留的空間外儲存該命令。
- 執行惡意程式碼 - 命令不會自動執行,因為它超出了堆疊緩衝區空間大小。但是,如果指向惡意命令的傳回位址是由攻擊者提供的,該命令則會自動執行。最初,由於緩衝區溢位,程式開始出現故障,但是程式會使用攻擊者提供的傳回位址試圖復原。如果傳回位址有效,則會執行惡意命令。
- 入侵權限 - 由於程式通常在核心模式下執行或使用從服務帳戶繼承的權限執行,因此惡意程式碼目前會使用與遭入侵的應用程式相同的權限來執行。這可能意味著攻擊者可以完全控制作業系統。