在電腦程式中,變量會以固定大小的記憶體區塊配置。 配置此記憶體後,程式可以從這些位置儲存和擷取資料。 當寫入其中一個記憶體區塊的資料量超過其大小時,就會發生緩衝區溢位。 因此,用於其他目的分配的內存被覆寫,這可能會對程序產生各種影響。
緩衝區溢位攻擊是一種常見的網路攻擊,它故意利用緩衝區溢位漏洞,將使用者控制的資料寫入記憶體。透過提交多於配置記憶體區塊中容納的資料,攻擊者可覆寫記憶體其他部分中的資料。
攻擊者可以由於各種原因執行緩衝區溢位攻擊,例如覆寫重要程式碼或資料以損毀程式、注入惡意程式碼以執行至程式,或修改關鍵值、變更程式的執行流程。
緩衝區溢位攻擊可用於實現各種目標,包括:
緩衝區溢位攻擊可以通過幾種不同的方式執行,但一些最常見的範例包括:
緩衝區溢位在 C/C++ 中很常見,當程式分配固定大小的記憶體區塊然後不安全地將資料複製到其中時,就會發生緩衝區溢位。以下程式碼範例包含緩衝區溢位脆弱性:
字符增益 [補丁尺寸]; 獲得(增益);
在此代碼範例中,變量 buf 的固定大小為 BUFSIZE。 但是,gets 函數將讀取數據並將其存儲在 buf 中,直到達到空終止符(0x00)為止。 攻擊者可惡意利用此弱點,覆寫 bu f 結束後的資料。
格式字串攻擊是緩衝區溢位的特殊情況。 以下程式碼範例包含格式字串脆弱性。
#include<stdio.h>空白主要(內含字元,字符 ** argv) { 打印 TF(阿爾吉夫 [1]); }
在此範例中,程序從 argv [1] 接收用戶提供的輸入並將其打印到終端。 但是,如果使用者的輸入包含格式字串,攻擊者可以讀取或編輯系統上的記憶體。
可以透過以下方式防止緩衝區溢位脆弱性:
緩衝區溢位漏洞的利用可能會導致程式崩潰、資料外洩或在組織的系統上執行惡意程式碼。在CloudGuard AppSec 此電子書 中了解 如何幫助防範緩衝區溢位攻擊和其他威脅。然後,註冊免費演示,親自了解 CloudGuard AppSec 如何提高雲端應用程式的安全性。