gen2linux的blog

不要問我gentoo linux的東西, 玩一玩就忘記了....

星期六, 8月 12, 2006

 

syscall track history

其實在 kernel 2.4時代就有 http://syscalltrack.sourceforge.net/ 此等非常優秀的 kernel tool了,可以 hook各個 syscalls,且其強大的地方在於它對大部份 syscall的 pointer to structure都能夠解析並傳遞到 user space,而不僅僅只是傳出個位址.(那位址對其他 APPs來說幾乎沒有意義)例如 struct shm, struct sock_addr等等的. 當年 syscalltrack無法解析 execve()中的 char *argv[]參數,所以我們在這部份也有做了一些 dirty hack(簡單的 copy_from_user處理)另外 syscalltrack也解決了一些較特殊的 syscall的 hook的處理方式,例如 fork(), execve(), exit()等...

另一件故事是, 當時我們採用的 Redhat9.0, 其 kernel把 sys_call_table[]的 EXPORT_SYBMOL給關閉了, 也就是把 syscall table的位址給隱藏了不讓其它 kernel module引用, 此舉可能是為了安全起見,但是 syscalltrack強烈依賴此 symbol來實行 syscall hook的動作, 結果就是另一個 dirty hack的開始, 這個技巧很有趣, 簡單說拿已知的 sys_write&sys_read的位址, 動態的在 kernel stack搜尋, 如果找到的話就是在 sys_call_table裡了.(前提是 sys_write跟 sys_read的位址有被 export出來)http://sourceforge.net/mailarchive/forum.php?thread_id=4116192&forum_id=714

那 syscalltrack跟 strace這等程式有何不同? strace只能 trace同一個process(& his childs), 但 syscalltrack是整個系統性的... syscalltrack還可自定 rule,自定 result output format...

不過不知何因, syscalltrack此 project在 2003年已經停止 maintain了...所以我們就將腦筋動到 kernel 2.6內建支援的 audit subsystem了

先講故事...

Comments: 張貼留言



<< Home

Archives

8月 2006   9月 2006   10月 2006   11月 2006   3月 2007  

This page is powered by Blogger. Isn't yours?