緩沖區溢出攻擊過程如下:
注入惡意數據:惡意數據是指用于實現攻擊的數據,它的內容將影響攻擊模式中的后續活動能否順利進行。惡意數據可以通過命令行參數、環境變量、輸入文件或網絡數據注入到被攻擊系統。
緩沖區溢出:實現緩沖區溢出的前提條件是發現系統中存在的可以被利用的緩沖區溢出漏洞。只有在發現了可被利用的漏洞后,才可以在特定外部輸入條件的作用下,迫使緩沖區溢出的發生。
控制流重定向:控制流重定向是將系統從正常的控制流程轉向非正常流程的過程,傳統做法是通過改寫位于堆棧上的函數返回地址來改變指令流程,并借助指令(如NOP指令)提高重定向的成功率。除此之外,還可以通過改寫被調用函數棧上保存的調用函數棧的棧地址、改寫指針、改寫跳轉地址等方式實現。
執行攻擊程序:當控制流被成功地重定向到攻擊程序的位置時,攻擊程序得以運行。攻擊程序專指真正實現攻擊的代碼部分,稱為有效載荷(payload)。在攻擊中,有效載荷可能以可執行的二進制代碼形式放置在惡意數據中,這種有效載荷用于產生命令解釋器(shellcode)。這是因為,攻擊者為達到控制被攻擊系統的目的,通常會利用緩沖區漏洞來獲得被攻擊系統的cmd shell,能為攻擊者提供cmd shell的代碼被稱為Shellcode。此外,有效載荷也可能是已經存在于內存中的代碼,相應的攻擊技術稱為注入攻擊。
保護緩沖區免受緩沖區溢出攻擊的方法如下:
通過操作系統使得緩沖區不可執行,從而阻止攻擊者植入攻擊代碼。
強制寫正確的代碼的方法。
利用編譯器的邊界檢查來實現緩沖區的保護。這個方法使得緩沖區溢出不可能出現,從而完全消除了緩沖區溢出的威脅,但是相對而言代價比較大。
一種間接的方法,這個方法在程序指針失效前進行完整性檢查。雖然這種方法不能使得所有的緩沖區溢出失效,但它能阻止絕大多數的緩沖區溢出攻擊。分析這種保護方法的兼容性和性能優勢。