blob: 30acf8729929c86fde5a9f084d2a618d26a3be96 [file] [log] [blame]
Chad Brubaker46e5a062017-01-27 15:53:38 -08001###
2### neverallow rules for untrusted app domains
3###
4
Nick Kralevichdb5962c2017-04-26 16:14:40 -07005define(`all_untrusted_apps',`{
6 ephemeral_app
7 isolated_app
8 mediaprovider
9 untrusted_app
10 untrusted_app_25
Jeff Vander Stoep3aa7ca52018-04-03 11:22:38 -070011 untrusted_app_27
Nick Kralevichdb5962c2017-04-26 16:14:40 -070012 untrusted_app_all
Nick Kralevichdb5962c2017-04-26 16:14:40 -070013}')
Chad Brubaker46e5a062017-01-27 15:53:38 -080014# Receive or send uevent messages.
Chad Brubakera782a812017-02-06 10:31:45 -080015neverallow all_untrusted_apps domain:netlink_kobject_uevent_socket *;
Chad Brubaker46e5a062017-01-27 15:53:38 -080016
17# Receive or send generic netlink messages
Chad Brubakera782a812017-02-06 10:31:45 -080018neverallow all_untrusted_apps domain:netlink_socket *;
Chad Brubaker46e5a062017-01-27 15:53:38 -080019
20# Too much leaky information in debugfs. It's a security
21# best practice to ensure these files aren't readable.
Chad Brubakera782a812017-02-06 10:31:45 -080022neverallow all_untrusted_apps debugfs_type:file read;
Chad Brubaker46e5a062017-01-27 15:53:38 -080023
24# Do not allow untrusted apps to register services.
25# Only trusted components of Android should be registering
26# services.
Chad Brubakera782a812017-02-06 10:31:45 -080027neverallow all_untrusted_apps service_manager_type:service_manager add;
Chad Brubaker46e5a062017-01-27 15:53:38 -080028
Alex Klyubin00657832017-04-25 09:27:54 -070029# Do not allow untrusted apps to use VendorBinder
30neverallow all_untrusted_apps vndbinder_device:chr_file *;
31neverallow all_untrusted_apps vndservice_manager_type:service_manager *;
32
Chad Brubaker46e5a062017-01-27 15:53:38 -080033# Do not allow untrusted apps to connect to the property service
34# or set properties. b/10243159
Jerry Zhang9f152d92017-04-10 16:57:48 -070035neverallow { all_untrusted_apps -mediaprovider } property_socket:sock_file write;
36neverallow { all_untrusted_apps -mediaprovider } init:unix_stream_socket connectto;
37neverallow { all_untrusted_apps -mediaprovider } property_type:property_service set;
Chad Brubaker46e5a062017-01-27 15:53:38 -080038
Jeff Vander Stoep886aa542018-03-28 15:34:37 -070039# net.dns properties are not a public API. Temporarily exempt pre-Oreo apps,
40# but otherwise disallow untrusted apps from reading this property.
41neverallow { all_untrusted_apps -untrusted_app_25 } net_dns_prop:file read;
42
Yabin Cui5dc2c8c2018-11-02 11:12:43 -070043# Block calling execve() on files in an apps home directory.
44# This is a W^X violation (loading executable code from a writable
45# home directory). For compatibility, allow for targetApi <= 28.
46# b/112357170
47neverallow {
48 all_untrusted_apps
49 -untrusted_app_25
50 -untrusted_app_27
Yabin Cuiffa2b612018-11-02 14:34:06 -070051 -runas_app
Yabin Cui5dc2c8c2018-11-02 11:12:43 -070052} { app_data_file privapp_data_file }:file execute_no_trans;
53
Chad Brubaker46e5a062017-01-27 15:53:38 -080054# Do not allow untrusted apps to be assigned mlstrustedsubject.
55# This would undermine the per-user isolation model being
56# enforced via levelFrom=user in seapp_contexts and the mls
57# constraints. As there is no direct way to specify a neverallow
58# on attribute assignment, this relies on the fact that fork
59# permission only makes sense within a domain (hence should
60# never be granted to any other domain within mlstrustedsubject)
61# and an untrusted app is allowed fork permission to itself.
Chad Brubakera782a812017-02-06 10:31:45 -080062neverallow all_untrusted_apps mlstrustedsubject:process fork;
Chad Brubaker46e5a062017-01-27 15:53:38 -080063
64# Do not allow untrusted apps to hard link to any files.
65# In particular, if an untrusted app links to other app data
66# files, installd will not be able to guarantee the deletion
67# of the linked to file. Hard links also contribute to security
68# bugs, so we want to ensure untrusted apps never have this
69# capability.
Chad Brubakera782a812017-02-06 10:31:45 -080070neverallow all_untrusted_apps file_type:file link;
Chad Brubaker46e5a062017-01-27 15:53:38 -080071
72# Do not allow untrusted apps to access network MAC address file
Chad Brubakera782a812017-02-06 10:31:45 -080073neverallow all_untrusted_apps sysfs_mac_address:file no_rw_file_perms;
Chad Brubaker46e5a062017-01-27 15:53:38 -080074
Jeff Vander Stoep06cef4f2017-10-04 13:12:25 -070075# Do not allow any write access to files in /sys
Jeff Vander Stoep886aa542018-03-28 15:34:37 -070076neverallow all_untrusted_apps sysfs_type:file { no_w_file_perms no_x_file_perms };
77
78# Apps may never access the default sysfs label.
79neverallow all_untrusted_apps sysfs:file no_rw_file_perms;
Jeff Vander Stoep06cef4f2017-10-04 13:12:25 -070080
Chad Brubaker46e5a062017-01-27 15:53:38 -080081# Restrict socket ioctls. Either 1. disallow privileged ioctls, 2. disallow the
82# ioctl permission, or 3. disallow the socket class.
Jeff Vander Stoep0597ade2018-06-21 16:57:58 -070083neverallowxperm all_untrusted_apps domain:{ icmp_socket rawip_socket tcp_socket udp_socket } ioctl priv_sock_ioctls;
Chad Brubakera782a812017-02-06 10:31:45 -080084neverallow all_untrusted_apps *:{ netlink_route_socket netlink_selinux_socket } ioctl;
85neverallow all_untrusted_apps *:{
Chad Brubaker46e5a062017-01-27 15:53:38 -080086 socket netlink_socket packet_socket key_socket appletalk_socket
Stephen Smalley49210852017-02-06 14:14:58 -050087 netlink_tcpdiag_socket netlink_nflog_socket
88 netlink_xfrm_socket netlink_audit_socket
Chad Brubaker46e5a062017-01-27 15:53:38 -080089 netlink_dnrt_socket netlink_kobject_uevent_socket tun_socket
90 netlink_iscsi_socket netlink_fib_lookup_socket netlink_connector_socket
91 netlink_netfilter_socket netlink_generic_socket netlink_scsitransport_socket
Jeff Vander Stoep0597ade2018-06-21 16:57:58 -070092 netlink_rdma_socket netlink_crypto_socket sctp_socket
93 ax25_socket ipx_socket netrom_socket atmpvc_socket x25_socket rose_socket decnet_socket
94 atmsvc_socket rds_socket irda_socket pppox_socket llc_socket can_socket tipc_socket
95 bluetooth_socket iucv_socket rxrpc_socket isdn_socket phonet_socket ieee802154_socket caif_socket
Nick Kralevicha194d372018-11-16 02:48:03 -080096 alg_socket nfc_socket vsock_socket kcm_socket qipcrtr_socket smc_socket xdp_socket
Chad Brubaker46e5a062017-01-27 15:53:38 -080097} *;
98
99# Do not allow untrusted apps access to /cache
Jerry Zhang9f152d92017-04-10 16:57:48 -0700100neverallow { all_untrusted_apps -mediaprovider } { cache_file cache_recovery_file }:dir ~{ r_dir_perms };
101neverallow { all_untrusted_apps -mediaprovider } { cache_file cache_recovery_file }:file ~{ read getattr };
Chad Brubaker46e5a062017-01-27 15:53:38 -0800102
103# Do not allow untrusted apps to create/unlink files outside of its sandbox,
104# internal storage or sdcard.
105# World accessible data locations allow application to fill the device
106# with unaccounted for data. This data will not get removed during
107# application un-installation.
Jerry Zhang9f152d92017-04-10 16:57:48 -0700108neverallow { all_untrusted_apps -mediaprovider } {
Chad Brubaker46e5a062017-01-27 15:53:38 -0800109 fs_type
Jeff Sharkey000cafc2018-03-30 12:22:54 -0600110 -sdcard_type
Chad Brubaker46e5a062017-01-27 15:53:38 -0800111 file_type
112 -app_data_file # The apps sandbox itself
Nick Kralevich23c9d912018-08-02 15:54:23 -0700113 -privapp_data_file
Chad Brubaker46e5a062017-01-27 15:53:38 -0800114 -media_rw_data_file # Internal storage. Known that apps can
115 # leave artfacts here after uninstall.
116 -user_profile_data_file # Access to profile files
Chad Brubaker46e5a062017-01-27 15:53:38 -0800117 userdebug_or_eng(`
118 -method_trace_data_file # only on ro.debuggable=1
119 -coredump_file # userdebug/eng only
120 ')
121}:dir_file_class_set { create unlink };
122
Nick Kralevich45766d42017-04-26 11:40:48 -0700123# No untrusted component should be touching /dev/fuse
124neverallow all_untrusted_apps fuse_device:chr_file *;
125
Nick Kralevich3b2df192018-11-15 06:14:07 -0800126# Do not allow untrusted apps to directly open the tun_device
127neverallow all_untrusted_apps tun_device:chr_file open;
128# The tun_device ioctls below are not allowed, to prove equivalence
129# to the kernel patch at
Nick Kralevich619c1ef2018-10-30 20:12:41 -0700130# https://android.googlesource.com/kernel/common/+/11cee2be0c2062ba88f04eb51196506f870a3b5d%5E%21
131neverallowxperm all_untrusted_apps tun_device:chr_file ioctl {
132 SIOCGIFHWADDR
133 SIOCSIFHWADDR
134 TUNATTACHFILTER
135 TUNDETACHFILTER
136 TUNGETFEATURES
137 TUNGETFILTER
138 TUNGETSNDBUF
139 TUNGETVNETHDRSZ
140 TUNSETDEBUG
141 TUNSETGROUP
142 TUNSETIFF
143 TUNSETLINK
144 TUNSETNOCSUM
145 TUNSETOFFLOAD
146 TUNSETOWNER
147 TUNSETPERSIST
148 TUNSETQUEUE
149 TUNSETSNDBUF
150 TUNSETTXFILTER
151 TUNSETVNETHDRSZ
152};
Chad Brubaker46e5a062017-01-27 15:53:38 -0800153
154# Only allow appending to /data/anr/traces.txt (b/27853304, b/18340553)
Chad Brubakera782a812017-02-06 10:31:45 -0800155neverallow all_untrusted_apps anr_data_file:file ~{ open append };
156neverallow all_untrusted_apps anr_data_file:dir ~search;
Chad Brubaker46e5a062017-01-27 15:53:38 -0800157
158# Avoid reads from generically labeled /proc files
159# Create a more specific label if needed
Dan Cashman91d398d2017-09-26 12:58:29 -0700160neverallow all_untrusted_apps {
161 proc
Tri Vo464f59a2017-10-06 10:20:53 -0700162 proc_asound
Dan Cashman91d398d2017-09-26 12:58:29 -0700163 proc_filesystems
164 proc_kmsg
165 proc_loadavg
166 proc_mounts
167 proc_pagetypeinfo
Mark Salyzynd6eaed82018-06-14 07:34:19 -0700168 proc_slabinfo
Jeff Vander Stoep886aa542018-03-28 15:34:37 -0700169 proc_stat
Dan Cashman91d398d2017-09-26 12:58:29 -0700170 proc_swaps
Jeff Vander Stoep886aa542018-03-28 15:34:37 -0700171 proc_uptime
Dan Cashman91d398d2017-09-26 12:58:29 -0700172 proc_version
173 proc_vmallocinfo
Jeff Vander Stoep886aa542018-03-28 15:34:37 -0700174 proc_vmstat
Dan Cashman91d398d2017-09-26 12:58:29 -0700175}:file { no_rw_file_perms no_x_file_perms };
Fyodor Kupolovb238fe62017-03-14 11:42:03 -0700176
Sandeep Patil2da9cfd2017-04-21 11:25:29 -0700177# Avoid all access to kernel configuration
178neverallow all_untrusted_apps config_gz:file { no_rw_file_perms no_x_file_perms };
179
Fyodor Kupolovb238fe62017-03-14 11:42:03 -0700180# Do not allow untrusted apps access to preloads data files
181neverallow all_untrusted_apps preloads_data_file:file no_rw_file_perms;
Nick Kralevich92c44a52017-03-22 10:35:24 -0700182
183# Locking of files on /system could lead to denial of service attacks
184# against privileged system components
185neverallow all_untrusted_apps system_file:file lock;
Alex Klyubin2a7f4fb2017-04-21 17:06:43 -0700186
Alex Klyubin5c5b6262017-04-24 15:09:19 -0700187# Do not permit untrusted apps to perform actions on HwBinder service_manager
188# other than find actions for services listed below
189neverallow all_untrusted_apps *:hwservice_manager ~find;
190
Alex Klyubin2a7f4fb2017-04-21 17:06:43 -0700191# Do not permit access from apps which host arbitrary code to HwBinder services,
192# except those considered sufficiently safe for access from such apps.
193# The two main reasons for this are:
194# 1. HwBinder servers do not perform client authentication because HIDL
195# currently does not expose caller UID information and, even if it did, many
196# HwBinder services either operate at a level below that of apps (e.g., HALs)
197# or must not rely on app identity for authorization. Thus, to be safe, the
198# default assumption is that every HwBinder service treats all its clients as
199# equally authorized to perform operations offered by the service.
200# 2. HAL servers (a subset of HwBinder services) contain code with higher
201# incidence rate of security issues than system/core components and have
202# access to lower layes of the stack (all the way down to hardware) thus
203# increasing opportunities for bypassing the Android security model.
Dan Cashman3e307a42017-06-21 10:00:32 -0700204#
205# Safe services include:
206# - same process services: because they by definition run in the process
207# of the client and thus have the same access as the client domain in which
208# the process runs
209# - coredomain_hwservice: are considered safe because they do not pose risks
210# associated with reason #2 above.
211# - hal_configstore_ISurfaceFlingerConfigs: becuase it has specifically been
212# designed for use by any domain.
213# - hal_graphics_allocator_hwservice: because these operations are also offered
214# by surfaceflinger Binder service, which apps are permitted to access
215# - hal_omx_hwservice: because this is a HwBinder version of the mediacodec
216# Binder service which apps were permitted to access.
Pawin Vongmasa19a74ec2018-03-28 21:09:23 -0700217# - hal_codec2_hwservice: because this is a newer version of hal_omx_hwservice.
Alex Klyubin2a7f4fb2017-04-21 17:06:43 -0700218neverallow all_untrusted_apps {
219 hwservice_manager_type
Alex Klyubin2a7f4fb2017-04-21 17:06:43 -0700220 -same_process_hwservice
Dan Cashman3e307a42017-06-21 10:00:32 -0700221 -coredomain_hwservice
Pawin Vongmasa19a74ec2018-03-28 21:09:23 -0700222 -hal_codec2_hwservice
Dan Cashman3e307a42017-06-21 10:00:32 -0700223 -hal_configstore_ISurfaceFlingerConfigs
Alex Klyubin2a7f4fb2017-04-21 17:06:43 -0700224 -hal_graphics_allocator_hwservice
Alex Klyubin2a7f4fb2017-04-21 17:06:43 -0700225 -hal_omx_hwservice
Dan Cashman91d398d2017-09-26 12:58:29 -0700226 -hal_cas_hwservice
Michael Butlerea331aa2017-12-15 14:16:25 -0800227 -hal_neuralnetworks_hwservice
Tri Vo7f8b6cc2018-07-28 16:48:06 -0700228 -untrusted_app_visible_hwservice_violators
Dan Cashman3e307a42017-06-21 10:00:32 -0700229}:hwservice_manager find;
Dan Cashman91d398d2017-09-26 12:58:29 -0700230
Dan Cashman3e307a42017-06-21 10:00:32 -0700231# Make sure that the following services are never accessible by untrusted_apps
232neverallow all_untrusted_apps {
233 default_android_hwservice
Wei Wangbc71a612018-09-19 16:06:28 -0700234 hal_atrace_hwservice
Dan Cashman3e307a42017-06-21 10:00:32 -0700235 hal_audio_hwservice
Andrew Scull64f35fa2018-01-10 16:11:46 +0000236 hal_authsecret_hwservice
Dan Cashman3e307a42017-06-21 10:00:32 -0700237 hal_bluetooth_hwservice
238 hal_bootctl_hwservice
239 hal_camera_hwservice
Janis Danisevskis97c56bd2018-01-09 17:42:53 -0500240 hal_confirmationui_hwservice
Dan Cashman3e307a42017-06-21 10:00:32 -0700241 hal_contexthub_hwservice
242 hal_drm_hwservice
243 hal_dumpstate_hwservice
244 hal_fingerprint_hwservice
245 hal_gatekeeper_hwservice
246 hal_gnss_hwservice
247 hal_graphics_composer_hwservice
248 hal_health_hwservice
249 hal_ir_hwservice
250 hal_keymaster_hwservice
251 hal_light_hwservice
252 hal_memtrack_hwservice
253 hal_nfc_hwservice
254 hal_oemlock_hwservice
255 hal_power_hwservice
Ruchi Kandoi8a2b4a72018-01-04 10:33:20 -0800256 hal_secure_element_hwservice
Dan Cashman3e307a42017-06-21 10:00:32 -0700257 hal_sensors_hwservice
258 hal_telephony_hwservice
259 hal_thermal_hwservice
260 hal_tv_cec_hwservice
261 hal_tv_input_hwservice
262 hal_usb_hwservice
263 hal_vibrator_hwservice
264 hal_vr_hwservice
265 hal_weaver_hwservice
266 hal_wifi_hwservice
Dan Cashman91d398d2017-09-26 12:58:29 -0700267 hal_wifi_offload_hwservice
Dan Cashman3e307a42017-06-21 10:00:32 -0700268 hal_wifi_supplicant_hwservice
269 hidl_base_hwservice
Dan Cashman91d398d2017-09-26 12:58:29 -0700270 system_net_netd_hwservice
271 thermalcallback_hwservice
Alex Klyubin2a7f4fb2017-04-21 17:06:43 -0700272}:hwservice_manager find;
273# HwBinder services offered by core components (as opposed to vendor components)
274# are considered somewhat safer due to point #2 above.
275neverallow all_untrusted_apps {
276 coredomain_hwservice
277 -same_process_hwservice
278 -hidl_allocator_hwservice # Designed for use by any domain
279 -hidl_manager_hwservice # Designed for use by any domain
280 -hidl_memory_hwservice # Designed for use by any domain
281 -hidl_token_hwservice # Designed for use by any domain
282}:hwservice_manager find;
283
Dan Cashman91d398d2017-09-26 12:58:29 -0700284# SELinux is not an API for untrusted apps to use
285neverallow all_untrusted_apps selinuxfs:file no_rw_file_perms;
286
Alex Klyubin2a7f4fb2017-04-21 17:06:43 -0700287# Restrict *Binder access from apps to HAL domains. We can only do this on full
288# Treble devices where *Binder communications between apps and HALs are tightly
289# restricted.
290full_treble_only(`
291 neverallow all_untrusted_apps {
292 halserverdomain
293 -coredomain
294 -hal_configstore_server
295 -hal_graphics_allocator_server
Dan Cashman91d398d2017-09-26 12:58:29 -0700296 -hal_cas_server
Michael Butlerea331aa2017-12-15 14:16:25 -0800297 -hal_neuralnetworks_server
Steven Moreland7baf7252018-05-25 16:23:37 -0700298 -hal_omx_server
Alex Klyubin2a7f4fb2017-04-21 17:06:43 -0700299 -binder_in_vendor_violators # TODO(b/35870313): Remove once all violations are gone
Tri Vo7f8b6cc2018-07-28 16:48:06 -0700300 -untrusted_app_visible_halserver_violators
Alex Klyubin2a7f4fb2017-04-21 17:06:43 -0700301 }:binder { call transfer };
302')
Dongwon Kang1134bd02017-11-06 11:19:07 -0800303
304# Untrusted apps are not allowed to find mediaextractor update service.
305neverallow all_untrusted_apps mediaextractor_update_service:service_manager find;
Jeff Vander Stoepff511cb2018-09-07 07:39:28 -0700306
307# Access to /proc/tty/drivers, to allow apps to determine if they
308# are running in an emulated environment.
309# b/33214085 b/33814662 b/33791054 b/33211769
310# https://github.com/strazzere/anti-emulator/blob/master/AntiEmulator/src/diff/strazzere/anti/emulator/FindEmulator.java
311# This will go away in a future Android release
312neverallow { all_untrusted_apps -untrusted_app_25 } proc_tty_drivers:file r_file_perms;
313neverallow all_untrusted_apps proc_tty_drivers:file ~r_file_perms;
Tri Vof55c9892018-10-10 22:48:15 +0000314
315# Untrusted apps are not allowed to use cgroups.
316neverallow all_untrusted_apps cgroup:file *;