專家稱:沙箱技術改善安全之余 仍有不足
Adobe系統公司和其他軟件廠商已經將沙箱(sandboxing)技術作為其應用程序安全策略的重要組成部分,沙箱技術能夠將特定的進程與宿主系統的內存隔離開。采用沙箱技術的目標是阻止攻擊者接觸關鍵的系統文件,防止攻擊者竊取敏感數據。但最近一位安全研究人員指出,部署沙箱技術的方式存在固有缺陷,精明的黑客能夠繞過沙箱進入保存在用戶電腦上的Adobe Flash文件。位于弗吉尼亞Fairfax的 Invincea公司創始人兼首席科學家、網絡安全專家Anup Ghosh說,沙箱技術開發于20世紀90年代,直到現在才成為主流的應用。除了Adobe,智能手機平臺制造商使用沙箱技術隔離應用程序與設備上的不同功能,瀏覽器供應商采用沙箱技術隔離瀏覽器的渲染引擎。在本次采訪中,Ghosh介紹了沙箱技術的基本知識,解釋了為什么使用沙箱是一個正確的方向,并指出了目前此種技術的實現具有的一些弱點。
問:什么是沙箱?為提高安全性,軟件供應商們以這樣或那樣的方式使用沙箱多長時間了?
Anup Ghosh:早在20世紀90年代后期,美國國防高級研究計劃局(DARPA)資助了一些項目,發展了沙箱技術。沙箱技術旨在阻止不受信任的代碼執行惡意操作。與直接運行程序代碼相比,沙箱最重要的屬性是能夠允許不完美的代碼進行運行和被滲透,同時不會對宿主系統造成損害。這就是沙箱的作用。隔離軟件與操作系統是很重要的概念,因為對于不在沙箱中運行的軟件來說,一個缺陷就可能導致桌面系統的全面崩潰。如今我們在市場上見到的沙箱都是嵌入到主流的商業產品中的。谷歌瀏覽器內為其渲染引擎部署了一個沙箱。Adobe Reader X內部也有一個沙箱,當你打開一個PDF文件時,Adobe Reader X使用的渲染引擎就會在沙箱中運行。
問:那我們可以認為,軟件制造商正在試著開發獨立運行、不依賴于操作系統和服務器的應用程序,對嗎?
Ghosh:這確實是目前某些沙箱系統的工作,但實際上這是虛擬化技術應該做的,而非沙箱技術。Java虛擬機(JVM)就是這樣一個例子。例如,利用沙箱,Google可以發現你將要訪問的網頁(含有JavaScript內容)存在的惡意內容。Google知道在其JavaScript引擎中會存在缺陷,而且他們不可能全部發現這些缺陷,也不可能提前發現。使用沙箱背后的想法在于,即使JavaScript引擎中存在缺陷,即使有黑客程序能夠利用這個缺陷,那么鑒于JavaScript引擎運行于谷歌瀏覽器的沙箱之內,黑客行為也不可能成功。簡單地說,他們的想法就是將惡意行為包裹在沙箱之內。這是朝著正確方向邁進的一步,程序員可以不用再苛求完美的代碼——我們知道他們也寫不出完美的代碼。但是,應用程序級的沙箱還遠遠不夠。沙箱的基本功能設計涉及截斷所有被認為有可能被黑客利用的系統調用。舉個例子,對Adobe Flash插件的分析表明,該插件會將所有被Adobe Flash調用的通信協議列入黑名單,已知的是他們至少忘記列入某一個協議了,誰知道未知的還有多少。所以從根本上來說,試圖列出所有可能被黑客利用的系統調用并嘗試截斷它們的方法是不夠魯棒(robust)的。對于隔離用戶可能從桌面運行的未授信代碼,我們做得還遠遠不夠。
問:當谷歌瀏覽器推出的時候它就具有沙箱功能嗎?他們在沙箱中運行第三方組件?
Ghosh:實際上,他們在沙箱中運行他們自己的渲染器。至少在推出瀏覽器的時候,他們沒有支持在沙箱中運行第三方組件。后來,Adobe公司為谷歌瀏覽器的Flash插件加入了沙箱。
問:我們并沒有在許多應用程序中看到有沙箱。對程序員來說創建沙箱功能真的很難嗎?
Ghosh:創建沙箱功能確實需要重新設計和重寫應用程序。如果你分析一下Adobe Reader X,你會發現它是與Adobe Reader 9.x不同的全新的代碼庫。這就是建立沙箱不那么容易的部分原因。因為目前人們采用的沙箱實現辦法,要求程序員思考出所有可能被攻擊者用來攻擊系統的代碼運行方式。他們建立了一個模型,顯示某段代碼可能會調用文件系統,而我們可能會要求允許這些文件讀取操作,但不要讓該段代碼獲得任何系統權限。于是,程序員們不得不編寫代碼,繞過系統權限。Reader X的沙箱有一個明顯之處,開發它的程序員決定不試圖阻止程序對文件的讀取,而是阻止機器將這些文件發送給某些遠端服務器。
問:當談論Android、Apple甚至是Windows的智能手機時,我們不時會聽到沙箱。這里所說的沙箱與我們前面說的是同一個概念嗎?
Ghosh:是的。Android為運行應用程序部署了一個名為Dalvik的JVM。當你運行Andorid應用的時候,Java虛擬機就如同沙箱,而且Java虛擬機很優秀,它已經使用了很長一段時間。問題是許多應用要求沙箱之外的權限。作為用戶,當你下載這樣一個應用時,你將被要求給予該應用程序打破沙箱的權限。當然,作為用戶,你的回答幾乎總會是“是”,因為你想使用該應用的全部功能。你需要給它GPS、攝像頭、麥克風或者電話的權限。所有這些操作基本上打破了整個沙箱。所以,讓用戶為應用程序授權這樣的模型并不能保護用戶,因為大多數時候用戶并沒受到做出良好安全決策的必要訓練。
問:Adobe正在使用的是協議處理黑名單(protocol handler blacklists),安全研究員Billy Rios指出這是一個弱點。什么是協議處理黑名單?還有其他方法可以屏蔽特定的協議嗎?
Ghosh:他們為用戶從磁盤加載的所有Flash文件設定了一個要求。要求是當Flash文件運行時,該文件不能夠進行任何出站通信。他們擔心的風險是,Flash文件有可能隱藏著惡意軟件,能在用戶毫無察覺的情況下讀取敏感文件,然后通過網絡發送出去。這是安全性上的要求。他們實現了一個沙箱來防止這種數據外泄的發生。實現的方法是舉出所有你能夠向外發送數據的方式。他們列舉了不同的網絡協議。我們并不知道他們都列出了哪些協議,但我們知道他們不可能列出所有的。Billy Rios知道這種方法不是完備的,所以,他只需要找到一種不在黑名單上的協議即可(破解Adobe的沙箱)。他需要的只是一種泄漏桌面上所有數據的協議。