Chris PeBenito 31b7c0
##############################
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
# Assertions for the type enforcement (TE) configuration.
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
# Authors:  Stephen Smalley <sds@epoch.ncsc.mil> and Timothy Fraser  
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
Chris PeBenito 31b7c0
##################################
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
# Access vector assertions.
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
# An access vector assertion specifies permissions that should not be in
Chris PeBenito 31b7c0
# an access vector based on a source type, a target type, and a class.
Chris PeBenito 31b7c0
# If any of the specified permissions are in the corresponding access
Chris PeBenito 31b7c0
# vector, then the policy compiler will reject the policy configuration.
Chris PeBenito 31b7c0
# Currently, there is only one kind of access vector assertion, neverallow, 
Chris PeBenito 31b7c0
# but support for the other kinds of vectors could be easily added.  Access 
Chris PeBenito 31b7c0
# vector assertions use the same syntax as access vector rules.
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
# Verify that every type that can be entered by
Chris PeBenito 31b7c0
# a domain is also tagged as a domain.
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
neverallow domain ~domain:process { transition dyntransition };
Chris PeBenito 31b7c0
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
# Verify that only the insmod_t and kernel_t domains 
Chris PeBenito 31b7c0
# have the sys_module capability.
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
neverallow {domain -privsysmod -unrestricted } self:capability sys_module;
Chris PeBenito 31b7c0
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
# Verify that executable types, the system dynamic loaders, and the
Chris PeBenito 31b7c0
# system shared libraries can only be modified by administrators.
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
neverallow {domain  -kernel_t ifdef(`ldconfig.te', `-ldconfig_t') -admin -unrestricted } { exec_type ld_so_t shlib_t }:file { write append unlink rename };
Chris PeBenito 31b7c0
neverallow {domain  ifdef(`ldconfig.te', `-ldconfig_t') -change_context -admin -unrestricted } { exec_type ld_so_t shlib_t }:file relabelto;
Chris PeBenito 31b7c0
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
# Verify that only appropriate domains can access /etc/shadow
Chris PeBenito 31b7c0
neverallow { domain -auth_bool -auth -auth_write -unrestricted } shadow_t:file ~getattr;
Chris PeBenito 31b7c0
neverallow { domain -auth_write -unrestricted } shadow_t:file ~r_file_perms;
Chris PeBenito 31b7c0
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
# Verify that only appropriate domains can write to /etc (IE mess with
Chris PeBenito 31b7c0
# /etc/passwd)
Chris PeBenito 31b7c0
neverallow {domain -auth_write -etc_writer -unrestricted } etc_t:dir ~rw_dir_perms;
Chris PeBenito 31b7c0
neverallow {domain -auth_write -etc_writer -unrestricted } etc_t:lnk_file ~r_file_perms;
Chris PeBenito 31b7c0
neverallow {domain -auth_write -etc_writer -unrestricted } etc_t:file ~{ execute_no_trans rx_file_perms };
Chris PeBenito 31b7c0
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
# Verify that other system software can only be modified by administrators.
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
neverallow {domain -kernel_t ifdef(`ldconfig.te', `-ldconfig_t') -admin -unrestricted } { lib_t bin_t sbin_t }:dir { add_name remove_name rename };
Chris PeBenito 31b7c0
neverallow { domain -kernel_t -admin -unrestricted } { lib_t bin_t sbin_t }:file { write append unlink rename };
Chris PeBenito 31b7c0
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
# Verify that only certain domains have access to the raw disk devices.
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
neverallow { domain -fs_domain -unrestricted } fixed_disk_device_t:devfile_class_set { read write append };
Chris PeBenito 31b7c0
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
# Verify that only the X server and klogd have access to memory devices.
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
neverallow { domain -privmem -unrestricted } memory_device_t:devfile_class_set { read write append };
Chris PeBenito 31b7c0
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
# Verify that only domains with the privlog attribute can actually syslog
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
neverallow { domain -privlog -unrestricted } devlog_t:sock_file { read write append };
Chris PeBenito 31b7c0
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
# Verify that /proc/kmsg is only accessible to klogd.
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
neverallow {domain -privkmsg -unrestricted } proc_kmsg_t:file ~stat_file_perms;
Chris PeBenito 31b7c0
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
# Verify that /proc/kcore is inaccessible.
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
Chris PeBenito 31b7c0
neverallow { domain -unrestricted } proc_kcore_t:file ~stat_file_perms;
Chris PeBenito 31b7c0
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
# Verify that sysctl variables are only changeable
Chris PeBenito 31b7c0
# by initrc and administrators.
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
neverallow { domain -initrc_t -admin -kernel_t -insmod_t -unrestricted } sysctl_t:file { write append };
Chris PeBenito 31b7c0
neverallow { domain -initrc_t -admin -unrestricted } sysctl_fs_t:file { write append };
Chris PeBenito 31b7c0
neverallow { domain -admin -sysctl_kernel_writer -unrestricted } sysctl_kernel_t:file { write append };
Chris PeBenito 31b7c0
neverallow { domain -initrc_t -admin -sysctl_net_writer -unrestricted } sysctl_net_t:file { write append };
Chris PeBenito 31b7c0
neverallow { domain -initrc_t -admin -unrestricted } sysctl_net_unix_t:file { write append };
Chris PeBenito 31b7c0
neverallow { domain -initrc_t -admin -unrestricted } sysctl_vm_t:file { write append };
Chris PeBenito 31b7c0
neverallow { domain -initrc_t -admin -unrestricted } sysctl_dev_t:file { write append };
Chris PeBenito 31b7c0
neverallow { domain -initrc_t -admin -unrestricted } sysctl_modprobe_t:file { write append };
Chris PeBenito 31b7c0
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
# Verify that certain domains are limited to only being
Chris PeBenito 31b7c0
# entered by their entrypoint types and to only executing
Chris PeBenito 31b7c0
# the dynamic loader without a transition to another domain.
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
Chris PeBenito 31b7c0
define(`assert_execute', `
Chris PeBenito 31b7c0
    ifelse($#, 0, , 
Chris PeBenito 31b7c0
           $#, 1, 
Chris PeBenito 31b7c0
           ``neverallow $1_t ~$1_exec_t:file entrypoint; neverallow $1_t ~{ $1_exec_t ld_so_t }:file execute_no_trans;'',
Chris PeBenito 31b7c0
           `assert_execute($1) assert_execute(shift($@))')')
Chris PeBenito 31b7c0
Chris PeBenito 31b7c0
ifdef(`getty.te', `assert_execute(getty)')
Chris PeBenito 31b7c0
ifdef(`klogd.te', `assert_execute(klogd)')
Chris PeBenito 31b7c0
ifdef(`tcpd.te', `assert_execute(tcpd)')
Chris PeBenito 31b7c0
ifdef(`portmap.te', `assert_execute(portmap)')
Chris PeBenito 31b7c0
ifdef(`syslogd.te', `assert_execute(syslogd)')
Chris PeBenito 31b7c0
ifdef(`rpcd.te', `assert_execute(rpcd)')
Chris PeBenito 31b7c0
ifdef(`rlogind.te', `assert_execute(rlogind)')
Chris PeBenito 31b7c0
ifdef(`ypbind.te', `assert_execute(ypbind)')
Chris PeBenito 31b7c0
ifdef(`xfs.te', `assert_execute(xfs)')
Chris PeBenito 31b7c0
ifdef(`gpm.te', `assert_execute(gpm)')
Chris PeBenito 31b7c0
ifdef(`ifconfig.te', `assert_execute(ifconfig)')
Chris PeBenito 31b7c0
ifdef(`iptables.te', `assert_execute(iptables)')
Chris PeBenito 31b7c0
Chris PeBenito 31b7c0
ifdef(`login.te', `
Chris PeBenito 31b7c0
neverallow { local_login_t remote_login_t } ~{ login_exec_t ifdef(`pam.te', `pam_exec_t') }:file entrypoint;
Chris PeBenito 31b7c0
neverallow { local_login_t remote_login_t } ~{ ld_so_t ifdef(`pam.te', `pam_exec_t') }:file execute_no_trans;
Chris PeBenito 31b7c0
')
Chris PeBenito 31b7c0
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
# Verify that the passwd domain can only be entered by its
Chris PeBenito 31b7c0
# entrypoint type and can only execute the dynamic loader
Chris PeBenito 31b7c0
# and the ordinary passwd program without a transition to another domain.
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
ifdef(`passwd.te', `
Chris PeBenito 31b7c0
neverallow passwd_t ~passwd_exec_t:file entrypoint;
Chris PeBenito 31b7c0
neverallow sysadm_passwd_t ~admin_passwd_exec_t:file entrypoint;
Chris PeBenito 31b7c0
neverallow { passwd_t sysadm_passwd_t } ~{ bin_t sbin_t shell_exec_t ld_so_t }:file execute_no_trans;
Chris PeBenito 31b7c0
')
Chris PeBenito 31b7c0
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
# Verify that only the admin domains and initrc_t have setenforce.
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
neverallow { domain -secadmin -initrc_t -unrestricted } security_t:security setenforce;
Chris PeBenito 31b7c0
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
# Verify that only the kernel and load_policy_t have load_policy.
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
Chris PeBenito 31b7c0
neverallow { domain -kernel_t -load_policy_t -unrestricted } security_t:security load_policy;
Chris PeBenito 31b7c0
Chris PeBenito 31b7c0
#
Chris PeBenito 31b7c0
# for gross mistakes in policy
Chris PeBenito 31b7c0
neverallow * domain:dir ~r_dir_perms;
Chris PeBenito 31b7c0
neverallow * domain:file_class_set ~rw_file_perms;
Chris PeBenito 31b7c0
neverallow { domain unlabeled_t } file_type:process *;
Chris PeBenito 31b7c0
neverallow ~{ domain unlabeled_t } *:process *;