Linux Rootkit之三:系統調用劫持簡介

3.1 系統調用的功能

        Linux中進程運行的模式有兩個:用戶態和內核態。運行的用戶態的進程功能比較少,要想與硬件設備交互就必須切換到內核態。系統調用就是進程由用戶態進入到內核態的唯一入口。

        這種實現方式有很多優點:

(1)簡化編程方式

編碼人員不需要學習過多的硬件設備的編程特性;

(2)極大地提高了系統的安全性

內核在滿足莫個請求之前在接口級就可以檢查這種請求的合法性;

(3)增強了程序的可移植性

系統通過維持接口不變來隱藏了不同的底層平臺和硬件的差異,使得應用程序的跨平臺移植更加容易。

3.2 系統調用的實現方式

    Linux所有的系統調用的執行流程都是:

(1)在用戶態發起系統調用請求

(2)進程切換到內核態

(3)找到sys_call_table中與系統調用號對應的函數

(4)執行內核函數

(5)返回到用戶態

    根據進程切換到內核態所執行指令的不同系統調用可分爲int 0x80模式、sysenter模式和syscall模式三種。

    int 0x80中斷模式是最古老的模式,它通過用戶態進程使用int指令發起0x80中斷的方式進入內核態,由相應的內核中斷處理函數找到sys_call_table中的函數並執行。

    進程使用sysenter指令也可以切換到內核態,且效率比int 0x80方式更高。在CPU支持sysenter的情況下,系統調用由sysenter指令實現。

    在32位系統中Linux使用int 0x80和sysenter切換到內核態,在64位環境下使用的時syscall指令。

3.3 系統調用劫持簡介

    系統調用劫持是指在內核設置hook點,使得所有系統調用在陷入到先調用hook點中的函數,然後才調用真正的內核處理函數。這樣就能截獲並控制系統調用。

    系統調用劫持的方法有:

(1)截獲sys_call_table

(2)截獲0x80中斷向量

(3)截獲sysenter處理函數指針

(4)截獲syscall處理函數指針

    接下來詳細討論各種劫持方法。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章