2015-04-03 1 views
3

Je suis sous Android 4.4.4 et j'ai deux processus. Le contexte de la sécurité des deux processus sont: -Empêcher untrusted_app d'accéder à la base de données

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 est un fournisseur de contenu et la base de données qui a contexte de sécurité que -

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

Le contexte de sécurité ci-dessus a été définie à l'aide règle suivante -

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; 

Au moment de l'exécution, je fais setenforce comme 1.

Mon but est d'empêcher tout processus qui appartient au domaine -> untrusted_app d'accéder à la base de données qui appartient au domaine-u: r: hm_phonebookaccess_app: s0

REMARQUE: Le fournisseur de contenu est exporté comme vrai.

Dans les seapp_contexts, entrée suivante a été faite: -

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

Mon observation est que en mode d'exécution, le processus « com.example.contentprovideruser » est en mesure d'accéder à la base de données.

Est-il possible que je puisse empêcher le domaine "untrusted_app" d'accéder à cette base de données?

Merci et salutations, Souvik

+0

Quelques questions: 1) avez-vous confirmé que le binaire 'sepolicy' sur le périphérique en cours d'exécution reflète votre nouveau domaine et les règles comme ci-dessus? Pour vérifier à coup sûr, je recommande de le pulper de l'appareil en cours d'exécution avec 'adb' et de le charger dans' apol' sur votre boîte de dev. 2) avez-vous essayé d'introduire un 'neverallow' dans vos règles d'application de type? Pendant la compilation, cela provoquera une erreur et s'arrêtera s'il y a des incohérences dans la politique. En cas d'erreur, il devrait vous aider à localiser la règle 'allow' qui autorise' untrusted_app' à accéder à 'hm_phonebookaccess_app'. –

Répondre

0

Cet utilisateur a frappé la liste de diffusion SE Android où la question a été répondu en totalité. Le problème, qu'ils ont omis de décrire ici, était qu'ils avaient une socket Web qui faisait apparaître la base de données et que le fichier untrusted_app y accédait via cette interface web. Il est important de noter que pour bloquer les accès ouverts, lus et autres fichiers bruts io à cette base de données, un appel système direct provenant de l'autre processus (processus source) doit se produire directement sur la base de données (fichier cible). Du point de vue du noyau, il est capable de voir que untrusted_app tente d'ouvrir/lire/écrire un fichier de type hm_phonebookaccess_data_file. Cependant, (je simplifie ici) avec l'interface web, le noyau voit untrusted_app en utilisant une socket réseau, suivi par hm_phonebook en lisant la base de données et en écrivant sur le socket, tout est OK. La manière de protéger les sockets avec SE Linux est via le réseau étiqueté, cependant, nous considérons cela comme n'étant pas supporté sur AOSP car aucun mécanisme de persuasion n'existe pour le faire.

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

Dans les versions modernes de SE Android, on ne sera pas en mesure de préciser simplement name = nom seapp_contexts car il entraînera une erreur de construction. Il est généralement considéré comme dangereux lorsque NOT spécifiant seinfo; seinfo + nom est sûr.