Linux2 4 18核心下的系統呼叫劫持

2021-04-20 22:58:24 字數 1455 閱讀 8051

struct __attribute__ ((packed)) idtr;

struct __attribute__ ((packed)) idt;

int kmem;

void readkmem (void *m,unsigned off,int sz)

if (read(kmem,m,sz)!=sz)

set_fs(old_fs_value);

} #define calloff 100 /* 我們將讀出int $0x80的頭100個位元組 */

/*得到sys_call_table的位址*/

unsigned getsctable()

set_fs(old_fs_value);

/* 從idt讀出0x80向量 (syscall) */

readkmem (&idt,idtr.base+8*0x80,sizeof(idt));

sys_call_off = (idt.off2 << 16) | idt.off1;

/* 尋找sys_call_table的位址 */

readkmem (sc_asm,sys_call_off,calloff);

p = (char*)mymem (sc_asm,calloff,"/xff/x14/x85",3);

sct = *(unsigned*)(p+3);

close(kmem);

return sct;

} 好了,但是上面的函式沒有做足夠的錯誤檢查。

四.劫持系統呼叫

在得到了sys_call_table的位址後,我們就可以很輕易的劫持系統呼叫了。

我們把最開始的那個例子修改一下,讓它執行在2.4.18的核心。

系統呼叫的劫持過程主要**如下:

static unsigned sys_call_table_addr;

void **sys_call_table;

int init_module(void)

void cleanup_module(void)

五.綜述

雖然核心2.4.18以後不再匯出sys_call_table,但是我們仍然可以通過讀/dev/kmem裝置檔案得到它的位址,來實現系統呼叫的劫持。要解決這個問題,最好是使/dev/kmem不可讀,或者乾脆不使用這個裝置檔案。否則,總會給安全帶來隱患。

參考資料:

phrack58-0x07 linux on-the-fly kernel patching without lkm

(nearly) complete linux loadable kernel modules -the definitive guide for hackers, virus coders and system administrators- written by pragmatic / thc, version 1.0 released 03/1999

Linux系統核心

bin 該目錄中存放linux的常用命令,在有的版本中是一些和根目錄下相同的目錄。boot 該目錄下存放的都是系統啟動時要用到的程式,當用lilo引導linux時,會用到這裡的一些資訊 dev 該目錄包含了linux系統中使用的所有外部裝置,它實際上是訪問這些外部裝置的埠,你可以訪問這些外部裝置,與...

Linux系統下核心定時器的用法

總的來說,timer的用法還是很簡單的。主要需要定義乙個timer list變數timer 先初始化timer init timer timer timer.function fun timer.expires jiffies timer delay add timer timer 在定時器時間到的...

linux的核心日誌系統

在linux中,syslogd是使用者空間的乙個守護程序,所有的需要記錄日誌的別的程序可以和這個守護程序通訊,可以委託這個守護程序幫助記錄日誌,為何不自己記錄呢,那是因為syslogd非常的專業,可以將日誌記錄到很細的地步,可以看etc 下面的配置檔案,既然所有的程序都可以委託syslogd記錄日誌...