2015-04-03 70 views
3

我在Android 4.4.4上運行並有兩個進程。兩個處理的安全上下文包括: -防止untrusted_app訪問數據庫

com.example.contentproviderexample having security context --> u:r:hm_phonebookaccess_app:s0 
com.example.contentprovideruser having security context --> u:r:untrusted_app:s0   

com.example.contentproviderexample是內容提供商,並且具有作爲安全上下文數據庫 -

mydb --> u:object_r:hm_phonebookaccess_data_file:s0 
mydb-journal --> u:object_r:hm_phonebookaccess_data_file:s0 

上述安全上下文已經使用設置以下規則 -

type hm_phonebookaccess_app, domain; 
app_domain(hm_phonebookaccess_app) 
allow hm_phonebookaccess_app dalvikcache_data_file:file { write setattr }; 
allow hm_phonebookaccess_app hm_phonebookaccess_data_file:file { read getattr open }; 
allow hm_phonebookaccess_app hm_phonebookaccess_data_file:dir setattr; 
allow hm_phonebookaccess_app zygote:unix_stream_socket { getopt getattr }; 
allow hm_phonebookaccess_app apk_data_file:dir getattr; 
allow hm_phonebookaccess_app hm_phonebookaccess_data_file:dir { write create add_name }; 
allow hm_phonebookaccess_app hm_phonebookaccess_data_file:file { write create setattr }; 
allow hm_phonebookaccess_app hm_phonebookaccess_data_file:dir search; 
allow hm_phonebookaccess_app hm_phonebookaccess_data_file:dir { read open }; 
allow hm_phonebookaccess_app hm_phonebookaccess_data_file:file lock; 
allow hm_phonebookaccess_app hm_phonebookaccess_data_file:dir remove_name; 
allow hm_phonebookaccess_app hm_phonebookaccess_data_file:file unlink; 
allow installd hm_phonebookaccess_data_file:lnk_file create; 

在運行時,我正在setenforce爲1

我的目標是防止任何屬於域 - > untrusted_app的進程訪問屬於域的數據庫-u:r:hm_phonebookaccess_app:s0

注意:內容提供程序導出爲true。

在seapp_contexts,以下條目已取得: -

user=_app domain=hm_phonebookaccess_app name=com.example.contentproviderexample type=hm_phonebookaccess_data_file 

我的觀察是,在強制模式,進程「com.example.contentprovideruser」能夠訪問數據庫。

有沒有什麼辦法可以防止「untrusted_app」域訪問該數據庫?

感謝和問候, Souvik

+0

有幾個問題:1)您是否確認運行設備上的'sepolicy'二進制文件反映了您的新域和規則?爲了檢查確定,我建議使用'adb'將它從運行設備上打印出來,並將其加載到開發包中的'apol'上。 2)你有沒有嘗試在你的類型執行規則中引入一個'neverallow'?在編譯期間,如果策略中存在不一致,則會導致錯誤並停止。出現錯誤時,它應該幫助您找到允許'untrusted_app'訪問'hm_phonebookaccess_app'的'allow'規則。 – 2015-04-20 15:14:17

回答

0

該用戶打哪裏的問題已得到全部回答SE Android的郵件列表。他們在這裏沒有描述的問題是,他們有一個Web套接字填充數據庫,而untrusted_app通過這個Web接口訪問它。需要注意的是,要阻止open,read和其他原始文件訪問該數據庫,必須直接在數據庫(目標文件)上執行來自其他(源進程)進程的直接系統調用。從內核的角度來看,它能夠看到untrusted_app正在嘗試打開/讀取/寫入類型爲hm_phonebookaccess_data_file的文件。

但是,(我在這裏簡化)與網絡接口內核看到untrusted_app使用網絡套接字,然後hm_phonebook讀取數據庫和寫入套接字,這一切都OK。

使用SE Linux保護套接字的方法是通過標籤網絡,但是,我們認爲AOSP上的這種「不受支持」,因爲沒有這樣做的說服機制。

http://www.mail-archive.com/seandroid-list%40tycho.nsa.gov/msg02073.html

在SE的Android版本的現代,一個將不能夠簡單的seapp_contexts指定名稱=名稱,因爲它會導致生成錯誤。當不是指定seinfo時通常被認爲是不安全的; seinfo +名稱是安全的。