由于緩沖區溢出攻擊可能帶來嚴重的后果,所以要采取措施對緩沖區溢出攻擊進行防御。目前有如下幾種措施可以保護緩沖區免受緩沖區溢出的攻擊和影響。
關閉不必要的端口或服務
管理員應該知道自己的系統上安裝了什么,并且哪些服務正在運行。
及時更新漏洞補丁
安裝軟件廠商的補丁,漏洞一公布,大的廠商就會及時提供補丁。
過濾特殊的流量
在防火墻上過濾特殊的流量,無法阻止內部人員的溢出攻擊。
編寫正確的代碼
編寫正確的代碼是一件非常有意義但耗時的工作,特別像編寫C語言那種具有容易出錯傾向的程序。盡管花了很長的時間使得人們知道了如何編寫安全的程序,具有安全漏洞的程序依舊出現。因此需要開發了一些工具和技術來幫助經驗不足的程序員編寫安全、正確的程序。
非執行的緩沖區
通過使被攻擊程序的數據段地址空間不可執行,從而使得攻擊者不可能執行植入被攻擊程序輸入緩沖區的代碼,這種技術被稱為非執行的緩沖區技術。但Windows系統為了實現更好的性能和功能,往往在數據段中動態地放入可執行的代碼。但為了保持程序的兼容性,不可能使所有程序的數據段不可執行,所以緩沖區漏洞還是存在的。
數組邊界檢查
該種方式和非執行緩沖區的不同在于:數組邊界檢查完全放置了緩沖區溢出的產生和攻擊。所以只要數組不溢出,溢出攻擊也就無從談起。為了實現數組邊界檢查,則所有的對數組的讀寫操作都應該進行檢查,以確保對數組的操作在正確的范圍內。最直接的方法是檢查所有的數組操作,但是通常可以采用一些優化的技術來減少檢查的次數。
程序指針完整性檢查
程序指針完整性檢查和邊界檢查略微不同:程序指針完整性檢查在程序指針被引用之前檢測到它的改變。即使一個攻擊者成功地改變了程序的指針,由于系統事先檢測到了指針的改變,所以這個指針將不會被使用。程序指針完整性檢查不能解決所有的緩沖區溢出問題,但是這種方法在性能上有很大的優勢,而且其兼容性也很好。
回答所涉及的環境:聯想天逸510S、Windows 10。
由于緩沖區溢出攻擊可能帶來嚴重的后果,所以要采取措施對緩沖區溢出攻擊進行防御。目前有如下幾種措施可以保護緩沖區免受緩沖區溢出的攻擊和影響。
關閉不必要的端口或服務
管理員應該知道自己的系統上安裝了什么,并且哪些服務正在運行。
及時更新漏洞補丁
安裝軟件廠商的補丁,漏洞一公布,大的廠商就會及時提供補丁。
過濾特殊的流量
在防火墻上過濾特殊的流量,無法阻止內部人員的溢出攻擊。
編寫正確的代碼
編寫正確的代碼是一件非常有意義但耗時的工作,特別像編寫C語言那種具有容易出錯傾向的程序。盡管花了很長的時間使得人們知道了如何編寫安全的程序,具有安全漏洞的程序依舊出現。因此需要開發了一些工具和技術來幫助經驗不足的程序員編寫安全、正確的程序。
非執行的緩沖區
通過使被攻擊程序的數據段地址空間不可執行,從而使得攻擊者不可能執行植入被攻擊程序輸入緩沖區的代碼,這種技術被稱為非執行的緩沖區技術。但Windows系統為了實現更好的性能和功能,往往在數據段中動態地放入可執行的代碼。但為了保持程序的兼容性,不可能使所有程序的數據段不可執行,所以緩沖區漏洞還是存在的。
數組邊界檢查
該種方式和非執行緩沖區的不同在于:數組邊界檢查完全放置了緩沖區溢出的產生和攻擊。所以只要數組不溢出,溢出攻擊也就無從談起。為了實現數組邊界檢查,則所有的對數組的讀寫操作都應該進行檢查,以確保對數組的操作在正確的范圍內。最直接的方法是檢查所有的數組操作,但是通常可以采用一些優化的技術來減少檢查的次數。
程序指針完整性檢查
程序指針完整性檢查和邊界檢查略微不同:程序指針完整性檢查在程序指針被引用之前檢測到它的改變。即使一個攻擊者成功地改變了程序的指針,由于系統事先檢測到了指針的改變,所以這個指針將不會被使用。程序指針完整性檢查不能解決所有的緩沖區溢出問題,但是這種方法在性能上有很大的優勢,而且其兼容性也很好。
回答所涉及的環境:聯想天逸510S、Windows 10。