<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    怎么阻止棧溢出被利用


    發現錯別字 6個月前 提問
    回答
    3
    瀏覽
    315
    請勿發布不友善或者負能量的內容。與人為善,比聰明更重要!
    上官雨寶
    CISM-WSE 中級信息安全等級測評師
    最佳答案

    由于棧一般默覺得1-2m,一旦出現死循環或者是大量的遞歸調用,在不斷的壓棧過程中,造成棧容量超過1m而導致溢出。

    解決方式:

    方法一:用棧把遞歸轉換成非遞歸

    通常,一個函數在調用還有一個函數之前,要作例如以下的事情:

    a)將實在參數,返回地址等信息傳遞給被調用函數保存;

    b)為被調用函數的局部變量分配存儲區;

    c)將控制轉移到被調函數的入口.

    從被調用函數返回調用函數之前,也要做三件事情:

    a)保存被調函數的計算結果;

    b)釋放被調函數的數據區;
    c)按照被調函數保存的返回地址將控制轉移到調用函數.

    全部的這些,不論是變量還是地址,本質上來說都是”數據”,都是保存在系統所分配的棧中的. 那么自己就能夠寫一個棧來存儲必要的數據,以降低系統負擔。

    方法二:使用static對象替代nonstatic局部對象

    在遞歸函數設計中,能夠使用static對象替代nonstatic局部對象(即棧對象),這不僅能夠降低每次遞歸調用和返回時產生和釋放nonstatic對象的開銷,并且static對象還能夠保存遞歸調用的中間狀態,并且可為各個調用層所訪問。

    方法三:增大堆棧大小值

    當創建一個線程的堆棧時,系統將會保留一個鏈接程序的/STACK開關指明的地址空間區域。可是,當調用CreateThread或_beginthreadex函數時,能夠重載原先提交的內存數量。這兩個函數都有一個參數,能夠用來重載原先提交給堆棧的地址空間的內存數量。假設設定這個參數為0,那么系統將使用/STACK開關指明的已提交的堆棧大小值。后面將假定我們使用默認的堆棧大小值,即1MB的保留區域,每次提交一個頁面的內存。

    回答所涉及的環境:聯想(Lenovo)天逸510S、Windows 10。

    5個月前 / 評論
    回答數量: 3

    針對棧溢出攻擊的預防措施有以下這些:

    • 地址空間隨機化:顧名思義,程序每次加載到的內存位置是隨機的,所以,即使可以利用棧溢出控制函數的返回地址,但是無法確定惡意代碼的位置,因此,可以有效地防范棧溢出攻擊。

    • 不可執行棧:不可執行棧的基本原理是將數據所在的內存頁標記為不可執行的,當進程嘗試去執行數據頁面上的指令時,CPU就會拋出異常,而不是去執行。所以,當開啟了不可執行棧選項時,即使我們的惡意代碼已經插入到內存,但由于處在數據頁面,因此無法執行從而實現防御攻擊。

    • Stack Guard:具體是再緩沖區(如:棧)和控制信息(如 ebp等)間插入一個canary word。這樣,當緩沖區溢出時,再返回地址被覆蓋之前canary word會首先被覆蓋,通過檢測canary word的值是否被修改,就可以判斷是否發生了溢出,如果出現溢出則進行終止溢出的進程來進行防御。

    • 使用模糊識別檢測:由于溢出類漏洞的填充數據對于攻擊本身是沒有意義的,即只是用來占位以達到數據長度的目的,這部分一般會被攻擊者以習慣模式填充(如多個字符重復多遍),而這部分數據在正常訪問情況下,是外部輸入中有意義的部分。另外輸入的shellcode和跳轉地址部分與正常的輸入一般情況下也有差別,基于這些差別可以建立起來模糊識別的模型,用于檢測對未知漏洞的攻擊。

    • 使用基于虛擬技術的檢測技術:對于安全性要求很高、需要重點防護的系統,基于漏洞特征與攻擊特征的防御難免還有漏網之魚。就像Honey Pot系統可以用真實的系統做誘餌也可以虛擬一個誘餌系統一樣,防御設備也可以虛擬一個跟真實系統相近的系統,用于檢測對系統的訪問是否存在攻擊。

    回答所涉及的環境:聯想天逸510S、Windows 10。

    5個月前 / 評論
    等保中級測評師 CICSA

    這個可以從根源上解決,就是解決棧溢出,解決棧溢出可以用棧把遞歸轉換成非遞歸,還可以使用static對象替代nonstatic局部對象。最后可以增大堆棧大小值,從這三個方面入手來解決棧溢出就可以防止棧溢出被利用了

    回答所涉及的環境:聯想天逸510S、Windows 10。

    6個月前 / 評論
    亚洲 欧美 自拍 唯美 另类