> -----Original Message-----
> From: Seandroid-list [mailto:seandroid-list-boun...@tycho.nsa.gov] On Behalf
> Of Stephen Smalley
> Sent: Tuesday, July 12, 2016 12:15 PM
> To: mazur.ro...@gmail.com; android-porting <android-
> port...@googlegroups.com>; seandroid-list@tycho.nsa.gov
> Subject: Re: [android-porting] Strange AVC Denial
> 
> On 07/12/2016 11:57 AM, Roman Mazur wrote:
> > I'm working on a custom build based on Android 6.0.1 for Nexus 7. This
> > custom build adds a special daemon that is started from init.rc and
> > exposes some API to applications. Particularly, one of available
> > methods creates a new file at /data/daemon_dir and returns a file
> > descriptor making it possible to write to this file from an app.
> >
> > The daemon has its own SELinux context (here it's named custom_daemon).
> > And /data/daemon_dir has custom_daemon_file context. There are
> > sepolicy rules that grant file creation to the daemon and file writes
> > to untrusted_app.
> >
> > The configuration described above worked on Android 5. But after
> > merging with Android 6, I'm getting the following denial:
> >
> > 07-11 21:57:46.735 13389-13389/? W/Binder_2: type=1400 audit(0.0:945):
> > avc: denied { write } for path="/data/daemon_dir/some_file"
> > dev="mmcblk0p30" ino=496817 scontext=u:r:untrusted_app:s0:c512,c768
> > tcontext=u:object_r:custom_daemon_file:s0 tclass=file permissive=0
> >
> >
> > Here are the rules that should allow the operation:
> >
> > allow untrusted_app custom_daemon_file:file rw_file_perms; allow
> > untrusted_app custom_daemon_file:dir r_dir_perms;
> 
> (cc seandroid-list)
> 
> Assuming that you only want to allow apps to read and write files passed to 
> them
> explicitly by your daemon and not to directly open files in this directory, 
> you
> should only have:
> allow untrusted_app custom_daemon_file:file { read write getattr };
> 
> In particular, you would not need to allow open permission to file nor any
> permissions to the directory in this usage model, and not allowing those
> permissions would be more secure as it would prevent apps from directly
> accessing any of those files without going through your daemon.
> 
> > allow custom_daemon custom_daemon_file:dir create_dir_perms; allow
> > custom_daemon custom_daemon_file:file create_file_perms;
> >
> >
> > An interesting thing in this denial report is that scontext is
> > untrusted_app. But the denial is logged for the daemon process (13389
> > is one of its thread IDs and Binder_2 is a name of the binder thread
> > that handles the API call).
> >
> > I believe this mismatch is what is causing the denial but cannot
> > understand why this happens and how this can be fixed.
> 
> No, the denial is caused by the fact that the app is running with categories
> (c512,c768) and the file is not labeled with the same categories. You can 
> allow this
> by adding the mlstrustedobject attribute to your type:
> type custom_daemon_file, file_type, data_file_type, mlstrustedobject;

Wouldn't make more sense to make the daemon MLS aware and label these files 
with the category set
Of the requestor? This would prevent sharing the file with a different 
untrusted_app, unless that's
A possible part of your design. Granted, the service would need 
mlstrustedsubject to manage these,
but as long as you don't allow the service access to app_data_files (IIRC 
that's a neverallow) or other things
where MLS is used to further restrict access, then it should be ok.


> 
> In 6.0, apps and their data files are assigned an automatically generated 
> category
> set (c512,c768 above) derived from their user ID in order to isolate the 
> processes
> and files of different users from each other. This prevents cross-user or 
> cross-
> profile access to /proc/pid files and app data files, even if world-readable 
> or -
> writable (sharing is still possible by having the owning app open the file 
> itself and
> pass the file descriptor over binder or local socket IPC to another app, but 
> direct
> open is prohibited).  This separation is currently applied to untrusted apps 
> and
> platform apps as a result of specifying levelFrom=user in the seapp_contexts
> configuration.
> 
> With regard to the potentially misleading audit message, it is due to the 
> fact that
> this check occurs when your daemon tries to pass the open file descriptor to 
> the
> app, so it occurs while the daemon is the current process.  Before 
> transferring the
> descriptor into the app's descriptor table, SELinux checks whether the app is
> allowed to use it.  So the check is between the app's context and the file, 
> but
> happens while the daemon is still the current process.
> 
> _______________________________________________
> Seandroid-list mailing list
> Seandroid-list@tycho.nsa.gov
> To unsubscribe, send email to seandroid-list-le...@tycho.nsa.gov.
> To get help, send an email containing "help" to Seandroid-list-
> requ...@tycho.nsa.gov.

_______________________________________________
Seandroid-list mailing list
Seandroid-list@tycho.nsa.gov
To unsubscribe, send email to seandroid-list-le...@tycho.nsa.gov.
To get help, send an email containing "help" to 
seandroid-list-requ...@tycho.nsa.gov.

Reply via email to