我的研究領域是系統安全和一些系統其它層面的效能探討。我們是做在作業系統這個層面的探討,我們也做蠻多虛擬化系統,虛擬化系統現在很多都是直接做在作業系統裡面。
Email 跟我聯絡,我們會安排時間跟同學討論覺得有趣的題目。
會希望同學在加入我們實驗室之前有修過一些課、有相關的背景,最主要需求的課程是系統程式設計跟作業系統,還有建議修過計算機安全,過去也有同學邊修邊加入我們,也有同學是修過再加入,或是目前在做研究之後想再去修,其實都可以,就是希望對於計算機安全這一塊的領域有所接觸。
那因為我們會接觸到的程式的層級對於大學階段修的課相對來講是相當巨量的程式碼,例如我們可能會碰到像 Linux kernel 這樣的程式,Linux 裡面現在有幾千萬行的 source code,一開始接觸到的時候會希望同學要有心理準備,要對於接觸大型的軟體方案這樣的方向是有興趣的。
除此之外,對於做實驗要多嘗試這件事要有些心理準備,因為有時候學生光架設一個環境要跑實驗可能都要一些功夫,很多事情需要 trial and error 慢慢去摸索,這部分可能會有一定程度的挑戰,有時候會覺得好像很簡單的事都花很多時間,但同學需要排除這樣的心態,盡量去嘗試,會需要花一些時間摸索才能上手。
目前有兩個方向,一個方向是讓學生參與我們大型的計畫,因為我們做的東西可能 scope 很大,所以會請學生負責一個小的 component 或特定的功能,幫忙實現或思考一個小的 component 在大型的計畫中如何完成。具體來講,像我們目前有些學生參與虛擬機器的安全平台的計畫,在這個大計畫下做不同的面相,有人是做平台上需要的驅動程式的優化,有人是實現把虛擬機器在不同平台上搬移的功能。
我們不會讓學生從零開始去建一個作業系統,而是我們集眾人之力完成一個大的計畫,這是一個方向。另外一個方向是,有同學來跟我談他覺得對於什麼題目特別有興趣,那他就專注在那個系統安全相關的題目,可能定期跟我討論研究的 paper,然後我給他一個方向,我們討論出可以實際做出來的主題。
這部分我們實驗室都有一些資源,你做系統假如只有空談沒有做實作就不好玩,我們有很多機會讓學生可以實際操控一些硬體,把你的軟體放在硬體上面跑,或去看硬體的一些潛在的漏洞。所以我覺得方向上是蠻有彈性的。
會讓同學參與我們每週的 group meeting,我們實驗室的 group meeting 就是定期讓大家討論、報 paper,專題生可能會輪到要報 paper。
我比較不會看一個禮拜,而是我們要完成一個學期的一個計畫,希望同學可以自己安排時間。我們有固定時間跟同學進行 meeting,看看專題有沒有什麼問題可以討論,這個 meeting 原則上有一些彈性,同學可以說他這禮拜比較忙,先請假,下禮拜再來討論。總之我不會要求學生一個禮拜花多少時間,希望大家以期末交一篇 report、完成一件事情為目標做好安排,我們提供大家面談或討論的機會,給學生彈性。
剛才我講到研究的部分,我們做的是系統底層的研究,有時候你要去看一行一行的程式指令,例如說 CPU 的指令或是作業系統的 system call 的實作,這需要一些經驗累積才能完成比較有意義的專題的題目。那我們會希望同學不只以完成你的專題的 requirement 為目標,而是在這之外可以思考你要如何實現一個計畫,我們鼓勵同學拿這個計畫去參加專題展,可能要兩個學期,我們有學生也是這樣兩個學期完成整個計畫。
我認為我們做的東西好玩的地方在於你可以追根究柢,把一個東西完全實現出來,再看到你自己的程式真的在機器上開始跑起來,是很有成就感又有趣的。我也鼓勵同學做完專題以論文發表為目標,我個人都很樂意跟學生合作,我們把一個題目完成,去投稿,這也是學生參與專題可以期待的 output。
我對於我們計畫的題目再補充一下。剛才講到我們做的一大部分是關於虛擬化的軟體,像 KVM 這個軟體,它是開源的、在 Linux kernel 上,可以實現跑虛擬機器的功能,例如在 Ubuntu 上跑 Windows。那我們會有修改 Linux 再把它跑起來,跑一些有趣的實驗的機會。
我們目前一大部分的研究是如何實現一個安全的 KVM 介面。為什麼牽扯到安全呢?因為比方說大家開一個網站,網站大部分是跑在雲端上,雲端上其實跑的就是這些虛擬機器,大部分就是透過 Linux 的 KVM 功能實現。這部分就有一些很大的安全性的問題,你的 data 跑在雲端的平台上,這個雲端平台假如被惡意攻擊者攻擊,他可能就會去任意存取跑在我們虛擬機器裡面的 data,這就是一個安全性上的問題。
你的資料跑在 Amazon AWS 的平台上,可能有些使用者會嘗試去偷你的 data,我們希望提供一個方法保護這些用戶資料,這是我們一大部分關注的安全的議題考量,我們希望透過軟體實現的方法讓這樣的雲端運算的虛擬化平台可以更有安全保障性,有很多技術可以在專題做探討。
另外我們還有看蠻廣的層面,例如作業系統的安全的議題,還有作業系統的軟體執行之後,有些硬體的功能可以應用去保護軟體的安全,我們也有看像是車用系統的安全,有很多不同層面。
我覺得在大學部一般上課的學習,學到的比較算是基礎打底的一些學門的知識,可能有時候這些知識並不是這麼與時俱進的,而是一些經典的。像作業系統來講,上課碰到的可能都是 80、90 甚至 70 年代提出的技術,那你就會好奇,例如說我們真的跑一台電腦、跑一台聯網的汽車,跑的作業系統是怎樣,也就是說希望大家可以透過專題接觸到如何把這些經典的技術或書本上學到的知識應用在不同的層面上,在研究上或是在軟體服務、在系統的搭建上。
除此之外我覺得對於學生未來的職業方向探索也是蠻好的,有參與的機會你才會知道你對於特定的學門有沒有興趣,資工是一個非常廣泛的領域,參與專題可以幫助不同面向的了解。除此之外我覺得也可以讓大家思考職業生涯的發展,像有些人也許參與專題後對於做研究非常有興趣,他可能就會選擇往更進階的研究所邁進,去安排他的職涯的方向。
我覺得透過讀 paper、做研究可以產生一個反思的過程,我們看每篇 paper 都會盡量把自己做的東西表現得很正向,有時候很難看到它存在的問題,這時候就要透過很多思考、不斷的推導,從其它的 work 跟更廣泛的研究去了解整個發展的趨勢或它潛在的問題,這是一個很好的反思的過程,我覺得是蠻可貴的經驗,去做整體全面的思考,看一些不同研究,獨立思考去解決問題。研究有時候沒有一個標準答案,不像我們寫作業有一個標準答案,研究就是有時候你必須要自己去思考、推導,這是可以透過專題獲得的機會。
像我剛才講的,會希望同學有接觸過 computer security 跟作業系統,所以可能大三開始來做專題是不錯的一個起點。我們也有同學是大二就參與,他過去有 computer security 的背景,我覺得至少 computer security 跟作業系統有修過一個就可以來做做看。
我覺得可以多接觸看看,多跟不同教授聊看看。有時候聊了也不一定知道自己有興趣的地方,那我覺得可以先挑一個題目做,也有些同學是一個學期做兩個題目或是修過好幾個專題,我覺得這都是很好的。有時候你可能去做之後發現不喜歡,再去嘗試其它的,也都很好,可以多嘗試。
參與專題是一個學期的份量,即使發現自己不喜歡,我覺得還是在一個學期內把這樣一個題目完成。有時候很難什麼事從頭到尾都很喜歡,如果覺得不喜歡,還是讓自己完成一個目標,也是很好的學習經驗。