Android中的沙箱模型
沙箱模型是業界保證系統安全的關鍵安全技術,已經在瀏覽器等領域得到了成功應用。作為優秀的開源移動平臺作業系統,Android也有相應的沙箱模型,本文將對其進行介紹。
一、沙箱模型原理簡介
現實中的沙箱(SandBox),是一種兒童玩具,類如KFC中一個裝滿小球的容器,兒童可以在其中隨意玩耍,起到保護兒童的作用。(也可以理解為一種安全環境。)
近年來,隨著網路安全問題的日益突出,人們更多的將沙箱技術應用於網上衝浪方面。從技術實現角度而言,就是從原有的阻止可疑程式對系統訪問,轉變成將可疑程式對磁碟、登錄檔等的訪問重定向到指定資料夾下,從而消除對系統的危害。
舉個例子,GreenBorder為IE和FireFox構建了一個安全的虛擬執行環境。使用者通過瀏覽器所作的任何寫磁碟操作,都將重定向到一個特定的臨時資料夾中。這樣,即使網頁中包含病毒,木馬,廣告等惡意程式,被強行安裝後,也只是安裝到了臨時資料夾中,不會對使用者pc造成危害。
對於程式開發中的Java技術來說,沙箱也具有很重要的安全意義。沙箱無論何時載入遠端網站上程式碼並在本地執行,安全都是至關重要的問題。點選一個連結可以啟動Java Web Start應用程式。訪問一個網頁時,其中的所有Applet也會自動地啟動。如果再點選一個連結,或者訪問一個網頁時,在使用者的機器上能夠安裝任意的程式碼,那麼犯罪分子就可能在此時竊聽機密資訊、讀取財務資料或者接管使用者機器來傳送廣告。 為了確保Java技術不會被邪惡目的所利用,SUN公司在設計Java的時候,設計了一套精密的安全模型;即安全管理器(Security Manager)將檢查有權使用的所有系統資源。在預設的情況下,只允許那些無害的操作,要想允許執行其他操作,程式碼需得到數字簽名,使用者必須得到數字認證。
特別是,在沙箱中的程式有下列限制:
- 不能執行任何本地可執行程式。
- 不能從本地計算機檔案系統中讀取任何資訊,也不能往本地計算機檔案系統中寫入任何資訊。
- 不能檢視除Java版本資訊和少數幾個無害的作業系統詳細資訊外的任何有關本地計算機的資訊。特別是,在沙箱中的程式碼不能檢視使用者名稱、E-mail地址等資訊。
- 遠端載入的程式不能與除下載程式所在的伺服器之外的任何主機通訊,這個伺服器被稱為源主機(originating host)。這條規則通常稱為“遠端程式碼只能與家人通話”這條規則將會確保使用者不會被程式碼探查到內部網路資源(在Java SE 6 中,Java Web Start 應用程式可以與其他網路連線,但必須得到使用者的同意)。
因此,近年來,沙箱技術非常盛行,如360瀏覽器等,都宣稱採用了沙箱技術來保證上網安全,而對於Android系統來說,也有意識地引入了這樣一個概念。
二、Android中的沙箱模型
在 Linux 中,一個使用者 ID 識別一個給定使用者;在 Android 上,一個使用者 ID 識別一個應用程式。應用程式在安裝時被分配使用者 ID,應用程式在裝置上的存續期間內,使用者 ID 保持不變。許可權是關於允許或限制應用程式(而不是使用者)訪問裝置資源。
從本質上來說,Android 通過使用沙箱的概念來實現應用程式之間的分離和許可權,以允許或拒絕一個應用程式訪問裝置的資源,比如說檔案和目錄、網路、感測器和 API。為此,Android 使用一些 Linux 實用工具(比如說程式級別的安全性、與應用程式相關的使用者和組 ID,以及許可權),來實現應用程式被允許執行的操作。
概念上講,沙箱可以表示為 圖 1 所示。可以清楚地看到,兩個 Android 應用程式,各自在其自己的基本沙箱或程式上。
圖1
Android 應用程式執行在它們自己的 Linux 程式上,並被分配一個惟一的使用者 ID。預設情況下,執行在基本沙箱程式中的應用程式沒有被分配許可權,因而防止了此類應用程式訪問系統或資源。但是 Android 應用程式可以通過應用程式的 manifest 檔案請求許可權。
通過做到以下兩點,Android 應用程式可以允許其他應用程式訪問它們的資源:
1) 宣告適當的 manifest 許可權
2) 與其他受信任的應用程式執行在同一程式中,從而共享對其資料和程式碼的訪問(如圖 2所示)。
圖2
不同的應用程式可以執行在相同的程式中。對於此方法,首先必須使用相同的私鑰簽署這些應用程式,然後必須使用 manifest 檔案給它們分配相同的 Linux 使用者 ID,這可以通過用相同的值/名定義 manifest 屬性 android:sharedUserId 來做到。具體的私鑰簽署和許可權相關的內容,請參看Android安全專欄中的相關文章,這裡不再贅述。
本文轉自samsunglinuxl51CTO部落格,原文連結:http://blog.51cto.com/patterson/974309 ,如需轉載請自行聯絡原作者
相關文章
- 瀏覽器沙箱模型瀏覽器模型
- petite-vue原始碼剖析-沙箱模型Vue原始碼模型
- 微前端中實現沙箱環境的方案調研前端
- 峰會預告 | Android漏洞檢測沙箱的設計與實現Android
- 技術界中的虛擬機器、容器和沙箱的關係虛擬機
- 簡單的沙箱反除錯除錯
- python沙箱逃逸Python
- iOS開發-沙箱iOS
- 模板注入&沙箱逃逸
- 【譯】 沙箱中的間諜 - 可行的 JavaScript 快取記憶體區攻擊JavaScript快取記憶體
- 實現 JavaScript 沙箱的幾種方式JavaScript
- 聊聊 QianKun JS 沙箱的那些事JS
- 構建一個安全的 JavaScript 沙箱JavaScript
- 動手寫 js 沙箱JS
- pwn 之 沙箱機制
- 淺析微前端沙箱前端
- Windows Presentation Foundation 安全沙箱Windows
- Android優化幀動畫過程中的多執行緒模型思考Android優化動畫執行緒模型
- Android的程式,執行緒模型Android執行緒模型
- 軟體測試中的V模型、W模型和H模型模型
- pytorch中中的模型剪枝方法PyTorch模型
- Node.js 沙箱環境Node.js
- python 棧幀沙箱逃逸Python
- python棧幀沙箱逃逸Python
- win10系統開啟360沙箱的操作步驟_ win10系統啟動360沙箱的方法Win10
- c++中的物件模型C++物件模型
- 智慧合約的沙箱機制是什麼?
- 安全沙箱技術如何在企業數字化中發揮作用?
- IE沙箱拖拽安全策略解析
- JVM--java沙箱安全機制JVMJava
- 深度學習中的Normalization模型深度學習ORM模型
- Dubbo 中的 URL 統一模型模型
- 分散式機器學習中的模型聚合分散式機器學習模型
- Laravel 中模型事件 Observer 的使用Laravel模型事件Server
- Redis 中的事件驅動模型Redis事件模型
- 機器學習中的模型和資料機器學習模型
- Laravel 中的模型事件與 ObserverLaravel模型事件Server
- 說說JavaScript中的事件模型JavaScript事件模型