Skip to content
Snippets Groups Projects
Commit 6231b4d9 authored by Jeff Vander Stoep's avatar Jeff Vander Stoep
Browse files

Enforce per-app data protections for targetSdk 28+

Adds per-app categories to untrusted app domains and their
app data types. Per-app categories are in addition to the
existing per-user categories.

Apps targeting sdk version 28+ will now have the following
characteristics:
Domain: u:r:untrusted_app:s0:c[0-9]+,c[0-9]+,c[0-9],c[0-9]
Data context: u:object_r:app_data_file:s0:c[0-9]+,c[0-9]+,c[0-9],c[0-9]

Whereas apps targeting 27- will look like:
Domain: u:r:untrusted_app_27:s0:c[0-9]+,c[0-9]+
Data context: u:object_r:app_data_file:s0:c[0-9]+,c[0-9]+

To ensure backwards compatibility with previous SDK versions,
the levelFrom=all now enforces categories by dominance instead of
equality. Apps with per-app and per-user categories will continue
to have selinux permissions (but not necessarily unix permissions)
to access app data with only per-user categories, but apps with only
per-user categories will not be able to access the data of apps with
both per-app and per-user categories.

Bug: 63897054
Test: Boot sailfish, run apps, verify no new selinux denials.
Test: cts-tradefed run cts -m CtsSelinuxTargetSdkCurrentTestCases
Test: cts-tradefed run cts -m CtsSelinuxTargetSdk27TestCases
Test: cts-tradefed run cts -m CtsSelinuxTargetSdk25TestCases
Test: adb sideload an OTA and verify that files are correctly labeled.
Change-Id: I64b013874fe87b55f47e817a1279e76ecf86b7c0
parent 2377fa7c
No related branches found
No related tags found
No related merge requests found
...@@ -8,6 +8,7 @@ define(`all_untrusted_apps',`{ ...@@ -8,6 +8,7 @@ define(`all_untrusted_apps',`{
mediaprovider mediaprovider
untrusted_app untrusted_app
untrusted_app_25 untrusted_app_25
untrusted_app_27
untrusted_app_all untrusted_app_all
untrusted_v2_app untrusted_v2_app
}') }')
......
...@@ -671,7 +671,9 @@ ...@@ -671,7 +671,9 @@
(typeattributeset unencrypted_data_file_26_0 (unencrypted_data_file)) (typeattributeset unencrypted_data_file_26_0 (unencrypted_data_file))
(typeattributeset unlabeled_26_0 (unlabeled)) (typeattributeset unlabeled_26_0 (unlabeled))
(typeattributeset untrusted_app_25_26_0 (untrusted_app_25)) (typeattributeset untrusted_app_25_26_0 (untrusted_app_25))
(typeattributeset untrusted_app_26_0 (untrusted_app)) (typeattributeset untrusted_app_26_0
( untrusted_app
untrusted_app_27))
(typeattributeset untrusted_v2_app_26_0 (untrusted_v2_app)) (typeattributeset untrusted_v2_app_26_0 (untrusted_v2_app))
(typeattributeset update_engine_26_0 (update_engine)) (typeattributeset update_engine_26_0 (update_engine))
(typeattributeset update_engine_data_file_26_0 (update_engine_data_file)) (typeattributeset update_engine_data_file_26_0 (update_engine_data_file))
......
...@@ -78,6 +78,7 @@ ...@@ -78,6 +78,7 @@
traced_probes_tmpfs traced_probes_tmpfs
traced_producer_socket traced_producer_socket
traced_tmpfs traced_tmpfs
untrusted_app_all_devpts
update_engine_log_data_file update_engine_log_data_file
vendor_default_prop vendor_default_prop
vendor_init vendor_init
...@@ -96,4 +97,6 @@ ...@@ -96,4 +97,6 @@
;; Thus, these types are also not mapped, but recorded for checkapi tests ;; Thus, these types are also not mapped, but recorded for checkapi tests
(typeattribute priv_objects) (typeattribute priv_objects)
(typeattributeset priv_objects (typeattributeset priv_objects
( adbd_tmpfs )) ( adbd_tmpfs
untrusted_app_27_tmpfs
))
...@@ -53,11 +53,11 @@ mlsconstrain dir_file_class_set { create relabelfrom relabelto } ...@@ -53,11 +53,11 @@ mlsconstrain dir_file_class_set { create relabelfrom relabelto }
# Only constrain open, not read/write. # Only constrain open, not read/write.
# Also constrain other forms of manipulation, e.g. chmod/chown, unlink, rename, etc. # Also constrain other forms of manipulation, e.g. chmod/chown, unlink, rename, etc.
# Subject must be equivalent to object unless the subject is trusted. # Subject must dominate object unless the subject is trusted.
mlsconstrain dir { open search setattr rename add_name remove_name reparent rmdir } mlsconstrain dir { open search setattr rename add_name remove_name reparent rmdir }
(t2 != app_data_file or l1 eq l2 or t1 == mlstrustedsubject); (t2 != app_data_file or l1 dom l2 or t1 == mlstrustedsubject);
mlsconstrain { file lnk_file sock_file } { open setattr unlink link rename } mlsconstrain { file lnk_file sock_file } { open setattr unlink link rename }
(t2 != app_data_file or l1 eq l2 or t1 == mlstrustedsubject); (t2 != app_data_file or l1 dom l2 or t1 == mlstrustedsubject);
# #
# Constraints for file types other than app data files. # Constraints for file types other than app data files.
......
...@@ -102,10 +102,11 @@ user=nfc seinfo=platform domain=nfc type=nfc_data_file ...@@ -102,10 +102,11 @@ user=nfc seinfo=platform domain=nfc type=nfc_data_file
user=radio seinfo=platform domain=radio type=radio_data_file user=radio seinfo=platform domain=radio type=radio_data_file
user=shared_relro domain=shared_relro user=shared_relro domain=shared_relro
user=shell seinfo=platform domain=shell type=shell_data_file user=shell seinfo=platform domain=shell type=shell_data_file
user=_isolated domain=isolated_app levelFrom=user user=_isolated domain=isolated_app levelFrom=all
user=_app seinfo=media domain=mediaprovider name=android.process.media type=app_data_file levelFrom=user user=_app seinfo=media domain=mediaprovider name=android.process.media type=app_data_file levelFrom=user
user=_app seinfo=platform domain=platform_app type=app_data_file levelFrom=user user=_app seinfo=platform domain=platform_app type=app_data_file levelFrom=user
user=_app isV2App=true isEphemeralApp=true domain=ephemeral_app type=app_data_file levelFrom=user user=_app isV2App=true isEphemeralApp=true domain=ephemeral_app type=app_data_file levelFrom=all
user=_app isPrivApp=true domain=priv_app type=app_data_file levelFrom=user user=_app isPrivApp=true domain=priv_app type=app_data_file levelFrom=user
user=_app minTargetSdkVersion=26 domain=untrusted_app type=app_data_file levelFrom=user user=_app minTargetSdkVersion=28 domain=untrusted_app type=app_data_file levelFrom=all
user=_app minTargetSdkVersion=26 domain=untrusted_app_27 type=app_data_file levelFrom=user
user=_app domain=untrusted_app_25 type=app_data_file levelFrom=user user=_app domain=untrusted_app_25 type=app_data_file levelFrom=user
...@@ -23,7 +23,3 @@ app_domain(untrusted_app) ...@@ -23,7 +23,3 @@ app_domain(untrusted_app)
untrusted_app_domain(untrusted_app) untrusted_app_domain(untrusted_app)
net_domain(untrusted_app) net_domain(untrusted_app)
bluetooth_domain(untrusted_app) bluetooth_domain(untrusted_app)
# Allow the allocation and use of ptys
# Used by: https://play.google.com/store/apps/details?id=jackpal.androidterm
create_pty(untrusted_app)
...@@ -26,10 +26,6 @@ untrusted_app_domain(untrusted_app_25) ...@@ -26,10 +26,6 @@ untrusted_app_domain(untrusted_app_25)
net_domain(untrusted_app_25) net_domain(untrusted_app_25)
bluetooth_domain(untrusted_app_25) bluetooth_domain(untrusted_app_25)
# Allow the allocation and use of ptys
# Used by: https://play.google.com/store/apps/details?id=jackpal.androidterm
create_pty(untrusted_app_25)
# b/34115651 - net.dns* properties read # b/34115651 - net.dns* properties read
# This will go away in a future Android release # This will go away in a future Android release
get_prop(untrusted_app_25, net_dns_prop) get_prop(untrusted_app_25, net_dns_prop)
......
### ###
### Untrusted apps. ### Untrusted_27.
### ###
### This file defines the rules for untrusted apps running with
### 25 < targetSdkVersion <= 27.
###
### This file defines the rules for untrusted apps.
### Apps are labeled based on mac_permissions.xml (maps signer and ### Apps are labeled based on mac_permissions.xml (maps signer and
### optionally package name to seinfo value) and seapp_contexts (maps UID ### optionally package name to seinfo value) and seapp_contexts (maps UID
### and optionally seinfo value to domain for process and type for data ### and optionally seinfo value to domain for process and type for data
### directory). The untrusted_app domain is the default assignment in ### directory). The untrusted_app_27 domain is the default assignment in
### seapp_contexts for any app with UID between APP_AID (10000) ### seapp_contexts for any app with UID between APP_AID (10000)
### and AID_ISOLATED_START (99000) if the app has no specific seinfo ### and AID_ISOLATED_START (99000) if the app has no specific seinfo
### value as determined from mac_permissions.xml. In current AOSP, this ### value as determined from mac_permissions.xml. In current AOSP, this
...@@ -16,5 +20,9 @@ ...@@ -16,5 +20,9 @@
### seapp_contexts. ### seapp_contexts.
### ###
type untrusted_app_25, domain; typeattribute untrusted_app_27 coredomain;
app_domain(untrusted_app_27)
untrusted_app_domain(untrusted_app_27)
net_domain(untrusted_app_27)
bluetooth_domain(untrusted_app_27)
...@@ -115,3 +115,7 @@ unix_socket_connect(untrusted_app_all, traced_producer, traced) ...@@ -115,3 +115,7 @@ unix_socket_connect(untrusted_app_all, traced_producer, traced)
# allow untrusted apps to use UDP sockets provided by the system server but not # allow untrusted apps to use UDP sockets provided by the system server but not
# modify them other than to connect # modify them other than to connect
allow untrusted_app_all system_server:udp_socket { connect getattr read recvfrom sendto write }; allow untrusted_app_all system_server:udp_socket { connect getattr read recvfrom sendto write };
# Allow the allocation and use of ptys
# Used by: https://play.google.com/store/apps/details?id=jackpal.androidterm
create_pty(untrusted_app_all)
...@@ -17,3 +17,5 @@ ...@@ -17,3 +17,5 @@
### ###
type untrusted_app, domain; type untrusted_app, domain;
type untrusted_app_27, domain;
type untrusted_app_25, domain;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment