資料執行保護講解

阿吉啊發表於2024-08-28

資料執行保護(Data Execution Prevention,簡稱DEP)作業系統中的一項安全功能,旨在防止惡意程式碼利用緩衝區溢位漏洞執行。它透過將記憶體的某些區域標記為不可執行,從而防止從這些區域執行程式碼。這適用於所有程式,包括第三方程式,而不僅僅是Windows系統元件和服務。。根據設定,DEP的保護範圍和嚴格程度會有所不同。

1. **為所有程式和服務啟用DEP**:這種模式被稱為“AlwaysOn”,它為所有程式和服務啟用了DEP保護,不允許任何程式從受保護的記憶體區域執行程式碼。這種模式提供了最大程度的保護,但可能會影響一些舊版軟體的相容性。在64位作業系統上,預設情況下DEP就是以這種方式啟用的。

2. **僅為基本Windows程式和服務啟用DEP**:這種模式被稱為“Option”,它只對Windows系統元件和服務啟用DEP保護,而對其他第三方應用程式則不啟用。這樣既可以保護系統關鍵元件不受惡意程式碼的侵害,又能避免影響大多數第三方應用程式的正常執行。這是DEP的預設設定,在一些舊的Windows版本中,可以透過系統屬性中的“資料執行保護”選項卡進行配置。

為所有程式和服務啟用DEP與僅為基本Windows程式和服務啟用DEP的主要區別在於保護範圍和潛在的相容性問題。當您選擇為所有程式和服務啟用DEP”時,DEP將會對計算機上執行的所有程式進行監控,以確保它們安全地使用系統記憶體,從而提供更高階別的安全保護。然而,這也可能導致一些較舊的或不相容的程式出現問題或無法執行。

相反,選擇僅為基本Windows程式和服務啟用DEP”則僅對Windows系統元件和服務提供保護,這可以減少對第三方程式的干擾,但相應地降低了對某些潛在威脅的防護。這種模式通常足以滿足大多數使用者的需求,同時保持系統的穩定性和相容性。

僅為基本Windows程式和服務啟用DEP”的配置下,DEP僅對關鍵的Windows系統元件和服務提供保護,但這種模式可以被應用程式動態關閉。這意味著,如果第三方程式確定它們不會受到緩衝區溢位攻擊的影響,或者它們需要執行某些特定的記憶體操作,它們可以選擇關閉DEP。然而,這可能會使這些程式容易受到攻擊,然後可能會傳播到計算機上的其他程式和檔案

資料執行保護開啟步驟如下:

1. **開啟系統屬性**

- Windows搜尋欄中輸入“系統”,然後開啟它。

2. **進入高階系統設定**

- 在系統屬性視窗中,點選“高階”選項卡,然後點選“設定”按鈕旁邊的“效能”部分。

3. **開啟資料執行保護選項**

- 在效能選項視窗中,點選“資料執行保護”選項。

4. **選擇DEP策略**

- 在資料執行保護視窗中,可以選擇以下選項之一:

- 僅為基本Windows程式和服務啟用DEP

- 為所有程式和服務啟用DEP

5. **應用更改**

- 選擇適當的選項後,點選“應用”按鈕來儲存更改。

6. **重啟計算機**

- 為了使更改生效,需要重啟計算機。

7. **驗證DEP狀態**

- 開啟“命令提示符”(以管理員身份)。

- 輸入命令 `wmic OS Get DataExecutionPrevention_SupportPolicy` 並按Enter鍵。

- 系統將返回一個數字,代表DEP的當前狀態:

- **0**:所有程序都禁用DEP

- **1**:所有程序均啟用DEP

- **2**(預設):僅對Windows系統元件和服務啟用DEP

8. **驗證DEP狀態是否生效**

執行包含故意製造緩衝區溢位的程式碼,例如使用不安全的gets函式。如果DEP生效,嘗試執行該程式時,程式應該會因違反DEP規則而被作業系統終止

快取區溢位程式碼示例:

#include <stdio.h>
#include <stdlib.h>

int main() {
    // 宣告一個大小為256的字元陣列
    char buffer[256];

    // 透過gets函式填充buffer,這是一個危險操作,因為它不檢查邊界
    printf("請輸入一些文字:");
    gets(buffer);

    // 嘗試執行buffer中的程式碼
    // 如果DEP生效,此操作將導致程式被作業系統終止
    ((void (*)())buffer)();

    return 0;
}

  

相關文章