Try  HackMD Logo HackMD

2021q3 Homework1 (quiz1)

contributed by < ChunYoLin >
實驗平台

CPU Distro Kernel
i7-6700 Ubuntu 21.04-LTS 5.11.0-25-generic

1. 解釋上述程式碼運作原理,包含 ftrace 的使用

interface

使用character device 作為介面, device_write parse使用者輸入, 針對add做hide_process, del做unhide_process

init_hook

init_hook 初始化ftrace_hook成員, 主要利用 kallsyms_lookup_name 找到 find_ge_pid 並寫入hook的成員orig pointer.

hook_install

  • 這裡再一次的使用 kallsyms_lookup_name 去assign orig pointer, 不太理解為何需要再做一次, 這裡多了error handling, init_hook 的assign或許可以不需要.
  • hook_install 初始化ftrace_ops, ftrace_ops的成員func為此ftrace的callback function, 這裡將 hook_ftrace_thunk assign給他.
  • ftrace_set_filter_ip 使得hook->ops only be called from function of hook->address

If a callback is only to be called from specific functions, a filter must be set up. The filters are added by name, or ip if it is known.

  • register_ftrace_function to enable hook->ops, 若失敗使用 ftrace_set_filter_ip將remove parameter設成1來回復先前的註冊

hook_ftrace_thunk

  • 更改regs->ip來使得function call jump to hook_find_ge_pid instead of original find_ge_pid.

hook_find_ge_pid

jj

2. 本程式僅在 Linux v5.4 測試,若你用的核心較新,請試著找出替代方案

3. 本核心模組只能隱藏單一 PID,請擴充為允許其 PPID 也跟著隱藏,或允許給定一組 PID 列表,而非僅有單一 PID

4. 指出程式碼可改進的地方,並動手實作