2005年3月18日 星期五

WISE 2005

2005 網際網路安全工程(WISE 2005)研討會這兩天在警政署刑事警察局舉行。而我在第一天的下午上台介紹了 Linux Rootkit ,包含 Rookit 的特色、種類及偵測方式等,詳細內容全文已收錄在論文集,而我上台時所使用的投影片檔則可以在這裡下載。
事實上,Linux Rootkit 所包涵的內容很廣泛,而我所描述仍不夠充足,還有許多疏漏的地方,希望在我寫作計畫裡可以把內容補全。




2005年3月4日 星期五

邪惡的 GGKit

真是一個邪惡的點子啊 - 我心裡這麼想.
有一個邪惡且威力強大的 Linux Kernel Rootkit - SucKIT,在著名的 Phrack 裡有作者完整的技術介紹。而我的奮戰,便從將 SucKIT 1.3b 移植到 kernel 2.6 開始....
1. kernel 2.6 移除了 query_module(2) 系統呼叫,往後要取得核心符號表可透過 /proc/kallsyms。
2. 系統呼叫增加到 28x個,比 kernel 2.4 的 25x 多很多。
3. task_struct 結構也略有更動,增加了 struct thread_info *thread_info 等欄位。
4. 支援 TLS - Thread Local Storage,新增 get_thread_area(2)/set_thread_area(2) 系統呼叫。不過這和我要作的沒啥關係 :)。
5. kernel 2.6 支援 Pentium III+ 的快速系統呼叫 sysenter/sysexit 機制。核心提供了原先的 int 0x80 和 sysenter 雙介面,並虛擬印射了 linux-gate.so.1 來實作,詳細內容可閱讀這裡

就這樣奮戰了兩天,我一個個解決了 kernel 2.4 和 2.6 差異造成的問題,並且讓 GGKIT (原 SucKIT 1.3b,我取作新名字)順利的在 2.6 下運作,不過仍然有些奇怪的 bugs 待解決 :(
值得一提的是,GGKIT 可動態偵測核心 2.4 還是 2.6 並作即時修正,不需重新編譯即可在 2.4 和 2.6 kernel 下運作。
我所用的偵測方式乃取 ES 暫存器來判斷,2.4 kernel 下 ES 為 0x2b,而 2.6 kernel 則為 0x7b。底下是在 GGKIT 在 kernel mode 下的程式片段:

--------------
long *es;

asm ("movl %es, %eax\n");
asm ("movl %%eax, %0\n"
if (es == (int)0x7b)
{
/* kernel 2.6 */
*runkernel() = 0x26;
} else
*runkernel() = 0x24;
--------------

Q:既然 GGKit 這麼邪惡,那麼可在何處下載玩弄呢?
A: 應該找不到下載點,但也許會在你的系統裡發現 :-)