iT邦幫忙

2026 iThome 鐵人賽

DAY 2
0
Security

從 0 到 ? 的 Linux Hook 系列 第 2

[Day02] Linux 01 - User & Kernel Space, Ring

  • 分享至 

  • xImage
  •  

Linux 系統架構

我們可以把 Linux 系統大致分為三大層:

image
圖片來源

User Space (使用者空間)

這是我們平常使用的應用程式執行的地方,像是 Shell、瀏覽器,以及自己寫的程式,都在這個空間執行。

Kernel Space (核心空間)

這是 Linux 核心程式碼執行的地方,負責行程排程、記憶體管理、檔案系統,以及透過驅動程式操作裝置等工作。

當使用者程式需要讀取檔案(I/O)等核心服務時,就會透過 System Call(系統呼叫,也稱 syscall) 提出請求,由 Kernel 檢查處理後把結果交回程式。

Hardware

包含 CPU、RAM、儲存裝置與網路卡等,提供系統運作需要的實體資源。


區分出 User/Kernel Space 的目的主要是為了保護系統,避免應用程式任意存取核心記憶體或操作硬體。
透過隔離與保護機制,一般使用者程式發生 Crash 時,通常只會讓該 Process 終止,不會直接造成核心崩潰。

  • 那系統是怎麼限制應用程式,讓它不能任意執行這些操作的呢?

除了空間上的區分,CPU 也會區分執行程式碼時的權限模式:

應用程式執行通常處於 User Mode,核心程式碼處於 Kernel Mode

接下來就以 x86/x86-64 架構為例,看看 CPU 如何透過 Protection Ring 區分執行權限。

Protection ring(分級保護域)

image
圖片來源
x86 架構提供了 Ring 0 到 Ring 3 四個權限等級,數字越小,權限越高。
在 x86/x86-64 架構上,Linux 主要使用其中兩個:

權限等級 執行模式 執行的程式碼
Ring 0 Kernel Mode (核心模式) Kernel 程式碼
Ring 3 User Mode (使用者模式) 應用程式與 User Space 函式庫的程式碼

CPU 會配合記憶體保護等機制,限制程式可以執行的操作與存取的資源。

當使用者程式需要 Kernel 提供服務時,可以透過 System Call,讓 CPU 從 User Mode 進入 Kernel Mode,由 Kernel 程式碼處理請求。若正常返回 User Space,就會回到 User Mode 繼續執行。

Ps. 使用 sudo 以 root 身分執行程式,程式本身的 User Space 程式碼仍然在 User Mode(Ring 3) 執行;需要核心服務時,一樣透過 System Call 進入 Kernel Mode。
root 是使用者身分,Ring 0 則是 CPU 的執行權限等級,兩者不同!

總結

今天介紹了 Linux 的三層架構(User/Kernel Space),以及 User Mode 和 Kernel Mode 的差異。
而後面我們會接觸 User Space 與 Kernel Space 中的 Hook,介入的位置不同,能攔截到的行為與影響範圍也會不同。

參考資料


上一篇
[Day 01] 前言
系列文
從 0 到 ? 的 Linux Hook 2
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言