RSA中國大會陳海波:道里可信結構在云安全保障方面的應用
【51CTO.com 綜合報道】為期兩天的RSA 2010大會在北京落幕了,不過很多業內人士和網絡安全愛好者都還覺得意猶未盡。那么,51CTO作為特邀媒體,對大會進行了相關報道。在這里我們來整理一下大會中精彩的演講。下面就是復旦大學并行處理研究所助理教授陳海波的演講內容,主題是《道里可信結構在云計算服務隱私安全保障方面的應用》。更多內容請參閱RSA 2010信息安全國際論壇專題報道。
陳海波:大家下午好!我是來自復旦大學的陳海波,我給大家介紹的是在云計算環境里面,如何用虛擬化保證數據的安全性。我們在非云時代,我們的數據是怎么樣保護的?在非云時代,我們數據放在自己個人電腦里,在自己電腦上裝很多防火墻,然后再加上一些密碼鎖,把數據可以保護起來。在云時代,我們又要逐步把個人數據放到云端里,放到云端里去以后,問題在于我們怎么樣能夠保護我們的數據。我們現在不能再像自己本地電腦一樣,給每個數據加一把鎖鎖起來,這樣的話就會給數據帶來一些挑戰。所以我們看到在云時代,數據隱私性是非常重要的特性,因為我們不能把數據放到云端以后,云的提供者或者云的租客把我的數據偷走,再對它非法的使用。
在這樣一個云里面,對于在線的數據存在哪些威脅?
第一個威脅,從云里本身來的。主要有一些問題,我們可以相信一個云的提供商,但是由于現在一些技術和法律手段局限性,我們很難有有效的手段保證我們不會使得其中的某個云的操作者能夠獲取我們這樣一些隱私數據。在目前這樣的環境里,大部分情況下,如果一個云的操作者擁有對你存放數據的計算機有控制權,他就可以把你的數據竊取,然后進行非法使用。第二個,從網絡來的,我們以前把數據放在個人電腦里,跟其他人的數據完全隔離。在云里面以后,也許你的數據就在我的數據旁邊,可以通過各種各樣的方式來竊取你的數據。
舉例:我現在自己在云上面部署這樣的服務,現在需要把我的個人信息放進去,大家都知道現在在人口普查,我要調查一下到底中國有多少有錢人,然后他們對應的婚姻狀態是什么樣的。對應這樣一個云,正確的服務應該是如果把我的數據提供到云上面以后,他肯定覺得我不是一個有錢人,回答人口普查的結果是我不是有錢人。而且人口普查的過程不應該把我的個人隱私數據放到網上去。很不幸的是,現在認為很大威脅對于云里面提供者對客戶數據的非法訪問,他可以通過各種手段,把云平臺竊取,竊取一些隱私數據,同時他可以修改反饋數據。對我來講,我不是一個有錢人,但是它會干擾調查的結果。另外來自于你的鄰居甚至網絡的攻擊,這種攻擊通過在云的平臺里面裝入惡意代碼,同樣也可以竊取信息,同時篡改云的結果。
云對于數據安全性帶來了一些新的挑戰,包括云提供者、操作員之間可能造成的一些侵入。另外你的鄰居很有可能是你的競爭對手,甚至來自網絡的攻擊,都可能會導致你的數據會被竊取。
我們講安全,基本上都有一個威脅的模型,我們首先假設這樣的一個攻擊者到底能做什么。假設攻擊者能夠去看云存儲磁盤里面的文件,他可以修改這些文件。我們知道一個操作者很容易查看磁盤里面的內容,對磁盤文件內容進行修改,甚至他把磁盤移走。同樣數據的生命周期有多種多樣的,一種形式,我僅僅存在磁盤上面,這種方式非常簡單,在這種方式下面只需要把它加密好,放在磁盤上面,攻擊者哪怕把你的硬盤拿走,也不會發生例如"艷照門"這樣的事件。但是很不幸的是,我們數據需要用來處理的,處理的時候就不可避免要加載到內存里面,然后才能被處理。所以攻擊者還能做到的一點是能夠檢查并且修改內存里面的內容,比如我們在虛擬機的環境下,你如果是一個控制虛擬機管理軟件的人,可以把虛擬機里的值讀出來,把內存修改,甚至通過一些外設訪問方式把內存存到某一個秘密的位置。
數據要進行處理,處理的話就離不開CPU,在CPU里面也會存在很多這種狀態,因為再處理計算的時候,相當于你的數據就在機器里面留了一個腳印,這些腳印也會泄露一些隱私信息。比如我們上網銀的時候,在某個時間內,你的網銀密碼存在CPU計算器里面的,這也是攻擊者可以做到的一點。
還有中間人的攻擊,在云的用戶和云的提供者之間,很有可能把你的網絡信道劫持,劫持以后可以偽裝成我是可信員,請把你的數據放到我這兒來。
另外還有一種很強大的攻擊,就是拒絕服務。拒絕服務,就可以提供一些錯誤的服務,本來你要做的事情是把這個數據存到這個磁盤上面,結果他說他把這個數據丟了。這種情況可能會出現bug暫停的一些錯誤,作為執行者可以執行任意行為。
攻擊者不能做什么?我們認為云的提供者本意是善意的,因為他的主要目的是提供一個云,來竊取你的數據,主要目的是賺錢,我給你提供服務,你付費給我。他的目的是希望提供可信的服務。所以在這種環境下,大部分機房里面都有很多攝象頭了,所以你不可能跑到機房里把機箱打開,在CPU上插一根線,在操作過程當中把所有數據記錄下來。這是可以通過攝象頭來防止的。
另外,我們假設它不能把TPM(可信平臺模塊)認證在這樣機器上面運行的軟件,是不能夠破壞的,也不能把TPM里面的P給獲取。同時我們假設密碼學的算法是安全的,我們現在不認為比較容易把RSA、AES等密碼給破解。
對于數據在云里面在線數據的威脅,現在很多時候操作員、攻擊者可以做到哪些事情?介紹系統之前我們首先要知道一點,我們要做一些假設,首先沒有絕對的安全,我們只能有相對的安全,相對的安全就是我們假設誰是可信的,誰是不可信的,我們講硬件的信任根是什么。
現在很多機器上面有很多可信平臺模塊,可信平臺模塊所做到的事情,其實是主板上面加了一個協處理器,能夠對這個平臺上面一些運行的軟件進行度量,然后用戶通常很難把這樣一個TPM暴力的拆掉,拆掉以后,計算機也不能用了。TPM在PC機的設計里面設計成信任根。
TPM能提供什么樣的功能?TPM主要提供第一點是它有一些私鑰,有了這個私鑰就可以做一些認證,這樣的私鑰不會離開,只是用來做簽名用的。還有一個hash,把你要加載的軟件進行hash,會得到唯一的一個數據,這樣一個數據,可以用來跟以往數據判斷,如果是匹配的,就是你所裝載的是你所期望的軟件。
平臺配制的計算器,主要用來存儲這些hash值,有很多,因為我們在度量的時候,不僅僅度量OS,也許我們度量應用,還有度量hypervisor之類的。
還有隨機數的序列,如果偽造的話,可能導致密碼被破解。所以在有TPM環境下,在傳統方式下面,理想的信任鏈模型是什么樣?我們首先度量bios,然后把操作系統的加載器進行度量,度量好了以后,會度量hypervisor,就是我們VM可以被度量。度量好hypervisor以后,再度量操作系統,最終度量應用,這是一個非常完美的故事,這樣我們就可以精確的知道,運行的時候這些都是已知的,都可能是可以被信任的。
我們如何做這樣一件事情?我們首先要做這樣一個Attestation,防止中間有一個人在里面偽裝我是一個可信員,請把數據交給我。它所做的事情就是跟云的服務器做一個認證,跟警察盤查路人一樣,說你是誰,你身份證號碼是什么,如果認證的話,你不是一個壞蛋。云的用戶會發一個問題給云的服務器,服務器通過TPM會返回hash值,hash值就表示在這個云平臺里面運行的硬件、軟件確實是用戶所期望的,經過這樣以后,我們就可以進行度量。hash值是獨一能夠反映當前軟件的狀態。
我們既然講到軟件的信任鏈,在這樣信任鏈模式下有哪些問題,我們還需要做什么?在這樣一個信任鏈模式下來,中間確實存在這樣一個(gap),因為我們中間度量鏈里面有一個非常龐大的東西。OS是一個非常復雜的軟件,windows有幾千行代碼,在這樣復雜的軟件里面,沒有人能夠說這樣一個操作系統是可信的,這個操作系統是沒有病毒的,沒有間諜軟件的。基本上只要是一臺聯網的機器,沒有人可以確定的說我的機器里面沒有漏洞、后門或者間諜軟件,所以在一個度量的連里面,我們只能保證操作系統在加載的時候是可信的,但是一旦你上線以后,不停跟云的用戶打交道,里面有好人也有壞人,也許壞人把這個操作系統里面加了木馬、病毒以后,你在啟動的時候是怎么樣,并不代表這個操作系統以后會是可信的。
基于這樣一個假設,有一個Goal的體系結構,我們還是認為數據是云的核心,我們要保護只是云中間的數據,尤其是數據隱私性不會被破壞?,F在有很多用戶對云遲疑態度,我放進去的數據到底能不能保護云的隱私性。
第二個作用,就是這樣的軟件是不是可能會被破壞掉?主要有兩個目的,第一個目的,也許這個軟件有版權的,認為這個軟件非常重要,放在云上面以后,你會擔心把這個軟件放上去以后,會不會你的競爭對手把你的軟件拿過去用。第二的目的,會不會有人把你的軟件篡改以后再進行服務。我們系統主要達到這兩個目標。
基于這樣的目標,我們提出一個體系結構。我們假設這個操作系統本身是不可信的,我們假設這樣一個操作系統里面可能會被裝了間諜軟件、裝了木馬,甚至有人可以完全控制操作系統這個行為。盡管假設hypervisor是一個可信的軟件,為什么我們相信VMM,而不相信OS。首先我們從實現復雜度來看,VMM通常幾萬行,幾十萬行代碼,但是操作系統是幾千萬行代碼,數量級完全不一樣。第二,VMM里面通常是一個靜態的,現在很少有VMM說你可以在啟動以后,在里面插入一個模塊,但是現在操作系統就不一樣,現在把這樣一個操作系統里面插入一個新的硬件,它也許就裝入一個新的模塊,它有比較強大的接口,病毒也可以插入一個模塊,讓你的操作代碼就變成惡意的了。VMM當中,這個代碼數據是靜態的,你度量它以后,接下來執行的時候,起來原來啟動那樣的情況。VMM相對來講沒有直接跟用戶交互,只是提供服務整合,遷移,以及我們包含的安全的服務,所以它是比較難被攻克的。
在我們這樣一個操作系統里面可以運行各種各樣的服務,一種是可以運行可信的云服務,這種是我們需要保護的。比如我們可以在里面運行人口普查軟件,我們把數據提交上去,它會給你一個結果,而且同時不會把數據的隱私性破壞掉。同時還可以運行其他的服務,這些服務也許是惡意的,也許是善意的。
盡管操作系統是非可信,我們在虛擬機監控系統里面加了行為約束層,如果把這樣一個軟件的行為或者一個人的行為約束好以后,他就不太容易做壞事。在我們這里,行為約束層所做的事情就是防止非可信的操作系統把這樣一個服務篡改掉。
TPM要去度量bios,VMM,度量到VMM里面就結束了,不度量上面的OS。在我們這樣一個保護里,應用是由用戶提交上去的,用戶提交的應用可能包含一些軟件,一些二進制文件,一些他要操作的數據文件。我們為了保證中間人這種攻擊,或者把這個數據從我的機器放到云的過程中間被篡改,我們讓用戶的數據和代碼進行加密,他用的加密方式是TPM提供簽名過的密鑰,這種簽名過的密鑰只有TPM才能夠把這樣一個代碼或者數據解密。盡管有人在中間說我是一個可信員,你把數據交給我,他拿到以后也是沒有用的。
啟動方式,度量到hypervisor,也是VMM。我們沒有度量操作系統或者應用,因為我們沒有辦法給一個一直變化的壞蛋發一個三好學生的證書,說你是一個三好學生。盡管這樣的話,你不能根據他在某一個時間點表現成為一個好人,就認為他是一個好人,所以我們就不在這里度量OS,也不度量Attestation。
hypervisor可以通過我們提供的接口,可以和遠端一些用戶進行通信,可以讓用戶能夠知道這樣一個機器里面確實運行了我們提供的hypervisor,然后你的數據放在我的hypervisor上面處理是安全的。還提供安全通信信道,主要為了做遠程驗證所需要的。#p#
如何保護云的應用
介紹一下如何保護云的應用。靜下來看到一個一個數據文件,但是在電腦里面運行的時候,通常會體現成三個狀態,第一個是CPU中間的狀態,因為在執行的時候必須要到處理器里面去執行,處理器執行的時候會留下腳印。第二個要執行的時候,CPU,特別是要把這些數據和代碼放到內存里面,還有I/O,因為算好以后會放到磁盤里面去,所以我們要保護的是操作系統不能夠通過CPU、內存和這樣一個文件來修改我們的服務。
我們如何保護內存里面的數據?如果把這個數據進行計算的時候,我們首先把這個數據進行解密。因為我們前面提到用戶提交數據的時候,提交的是一個加密過的數據和代碼,他要執行的話不能直接執行密文,必須進行解密。如果解密了以后,不對它進行保護,這樣操作系統就高興了,說你已經變成明文,就可以把你的數據給竊取。hypervisor保證的一點是這樣的內存是不能被操作系統所看到的,為什么hypervisor能做到這一點?因為hypervisor實現的是計算機系統里面軟件的老大,它能說你不能做這個事情,不能做那個事情,可以做到這一點。
如果操作系統要攻擊的話會通過什么方式?第一種是MMU翻譯,只有通過這個翻譯才能對內存進行訪問,我們只要防住對MMU的攻擊,就可以保證這個操作系統不能夠通過這種地址翻譯的方式來攻擊它。第二種是I/O MMU,是把內存和外設進行溝通的渠道。為什么要防住I/O MMU呢?因為很可能里面裝一個惡意的設備,或者發了一個惡意的指令,說你應該把這個內存里面的明文直接存到磁盤上面去,這樣就能夠把明文竊取。
如何防住MMU的攻擊?我們要理解操作系統如何管理內存。我們知道每一個操作系統對應每一個進程都有頁表,每個頁表里面有地址空間,地址空間里面分用戶的和kernel的,在kernel里面,操作系統獲取處理器控制權的時候,不能讓他看到用戶的應用,就沒有辦法直接訪問應用的內存。當從用戶模式切換到核心模式的時候,就把用戶的映射全部清掉,就不能直接訪問那塊內存。
另外通過一個惡意的應用從另外一個地址映射它,我們要知道每個內存業怎么映射的。hypervisor必須要做到能夠跟蹤每一個內存頁,當它在映射的時候,檢查一下它是不是一個被保護的應用內存,如果是的話,它只能被這個被保存的內存所映射。它發現的時候,如果內存要映射它的話,就會把這樣的請求去除掉。
I/O MMU,虛擬機管理 I/O MMU表,用戶提供被保護的應用上來的時候,hypervisor就把用戶所有的內存,因為用戶所有內存里面包含隱私的數據,把它制成設備不可訪問,這樣設備就沒有辦法通過 I/O MMU的方式來竊取用戶的數據。因為我們嚴格意義上隔離來講會帶來一些問題,操作系統和用戶進程之間會有一些交互,比如用戶掉到內核里面的時候會做這樣一些工作,另外要傳遞一些數據,比如通過操作系統讀一些數據的時候,就需要先把這個數據讀到內核里面。我們在hypervisor里面維護這兩個Buffer。如果這是kernel和用戶的交互可以通過Buffer傳遞,用戶給內核的數據是經過我們認證的。
I/O是如何做的?我們用的一個方式是加密的,我們系統保證只要這個用戶應用的隱私數據從內存到磁盤里,被我們hypervisor加密的,盡管操作系統能看到磁盤里的文件,也只能拿到密文,沒有辦法把這個數據進行解密。我們從內存到I/O這條通道里面,把它進行了加密。
在我們這樣一個系統里,二進制文件如何做?首先我們對于每一個文件進行加密,然后用TPM的鑰匙把AES進行加密,不僅僅包含被加密文件,而且包含這個密鑰,就保證只有TPM的機器才能把這樣的數據給解開。數據文件也是類似。如果讀一個文件的時候,如果用戶從存儲里面讀一張銀行報表的時候,首先kernel幫你進行磁盤操作,讀的是密文,hypervisor就會把這個數據放到Buffer里面,hypervisor就進行解密,解密以后,就可以把這個數據發給用戶。在這個過程里,加密和解密對于用戶是透明的,用戶不知道我還要對這個數據進行加密,其實我們透明的對他提供了這樣的保護個。對于CPU來講,可以自然的保護它。CPU是分時的,從一個進程切換到另外一個進程,可以進行加載。hypervisor就可以說把你之前被可信的應用,會被保護的應用,踩過的腳印擦掉,把它丟給其他的進程進行運行。
這樣一個系統到底有沒有效果?我們做了一些測試。首先要防止攻擊,運行一個Apache web server,攻擊者能把Linux內核控制住,把內存驗證的代碼直接映射到內存里面,再把代碼改掉。它在內存里面,加密的模塊在內存里面,就是0101一些二進制數字。它所做的事情非常簡單,你登陸這個網站,你的密鑰是不是對,對的話,你可以做,不對的話就不能做。我們控制了OS以后,很難去攻擊它。也可以看到直接把這個代碼改掉,直接不要判斷了,直接pass掉就可以了。有了這樣一個保護以后,因為這道內存被我們道里認為是被保護應用私有的內存,操作系統看不到它,即使想映射它也沒有辦法被映射,所以就可以防住攻擊。
有些時候我們看一些編輯器,比如看銀行報表,有些咨詢公司提供的數據,這些數據是非常貴的,沒有攻擊的時候,我們用編輯器就能看到這些東西。如果我們做了這樣一個攻擊軟件,沒有的話就不能做這樣一件事情。
我們在這里講的兩個攻擊非常簡單,實際上我們道里這樣一個平臺也是在使用,在清華大學里有一個云存儲平臺里,有幾千的用戶,為清華提供云存儲的服務。原來碰到一個問題,我們把數據放進去的時候,我們就不確定它會不會把我的數據偷掉,我們知道之前高校發生很多問題,招生名單都泄露出去,導致很多人不敢把數據放上去。用道里系統保護他們云存儲平臺,而且在清華里面測試了很久,很多人來攻擊,目前還沒有被攻破。
我們需要注意我們提供這樣的保護,并不限制我們虛擬機的移動性,我們還是可以進行虛擬機的遷移。
性能方面我們進行比較,因為安全不是免費的,一定會帶來性能損失,看看這個性能損失到底有多大。從我們一些應用來看,做了好幾個應用,比如FTV服務器,(HTVB)的網絡服務器,以及一些計算密集的任務,發現性能開銷大部分情況是小于10%,對于一些非常安全敏感的應用也是比較合適的。
我們之前也做一些相關工作,在工作的時候需要相信OS,需要使用一些相關硬件,我們解決方案是基于軟件的方案,我們不需要特殊的硬件,只需要你有TPM。在云里面,用戶數據的威脅比在終端上面的威脅越來越多,因為它不僅僅是存在于傳統的網絡攻擊,還存在這種攻擊,是來自于你的鄰居,你的鄰居也可能是你的競爭對手,也可能來自提供商,也有可能你是一個創業者,把數據放上去以后,云提供者也是創業者,他把你的數據偷走,自己開另外一家公司,這是很多的威脅。
對于這樣的威脅,我們提出這樣一個系統,這個系統基于TPM完整性度量,使用VMM對于用戶的隱私數據和他的代碼進行保護,通過內存的隔離, I/O MMU的隔離,還有透明的I/O加密的方式來做到這一點。
提問環節
提問:報告里面有128位的密鑰,就是存儲到磁盤上面的,密鑰放在哪?
陳海波:密鑰在文件的末尾。
剛開始加密的密鑰是用TPM的鑰匙加密嗎,但是剛開始原始密鑰,它存放是隨機的,還是用戶指定的,還是系統給的?就是密鑰怎么生成的?
陳海波:首先有一個Remto Attestation,生成一個隨機的密鑰,用戶用來對他的代碼和數據進行加密。
提問:這是系統生成的,所以用戶不知道。
陳海波:用戶不知道。
提問:用戶上傳數據是加密的,這個密鑰是怎么回事?這兩個是同一個密鑰嗎?
陳海波:我們通過Attestation,生成128位密鑰,這個密鑰兩方面都會存一份。用戶用AES密鑰對它的數據和代碼進行加密,同時用它的公鑰放到末尾。把它的文件放到云平臺上的時候,TPM就能夠知道這個東西是我的,因為它能夠把這個東西解密,避免中間人的攻擊。傳輸密鑰,首先要建立安全的信道。
提問:你的這個平臺提到云概念,我不知道測試數據的時候數據量有多大,為什么叫云,就是因為數據量很大,你的測試有沒有考慮過如果數據量很大的時候,反復加密、解密,有可能讓這個系統變得非常慢,而且TPM是硬件+解密比軟件+解密更慢,所以可能性能上不見得就是一個好事。
陳海波:這個問題非常好。首先您提到TPM加密解密非常慢,確實是這樣的,我們沒有TPM去做key,或者常見數據的加密,數據加密是由CPU來做的,這實際上在hypervisor里面進行運行的?,F在CPU非??欤覀儼l現加解密帶來的性能并不是那么大。
云里面數據量非常大,谷歌Map都是用幾千臺機器算一個任務,我們只是每臺機器上有10%的開銷,并不會因為這樣一個機器數量的增加而增加,100臺機器還是10%,因為它的開銷是每一臺機器,而不是把所有的任務都丟到一個機器上面來。所以它一定是非常多的機器來跑應用。
【編輯推薦】