Implementing SELinux as a Linux Security Module.pdf

(538 KB) Pobierz
Implementing SELinux as a Linux
Security Module
Stephen Smalley
sds@epoch.ncsc.mil
Chris Vance
NAI Labs
cvance@nai.com
Wayne Salamon
NAI Labs
wsalamon@nai.com
This work supported by NSA contract MDA904-01-C-0926 (SELinux)
Initial: December 2001, Last revised: May 2002
NAI Labs Report #01-043
Table of Contents
1. Introduction............................................................................................................................................6
2. Acknowledgements ................................................................................................................................7
3. LSM Overview .......................................................................................................................................7
4. SELinux Basic Concepts .......................................................................................................................8
5. Changes from the Original SELinux Kernel Patch ............................................................................9
5.1. General Changes .......................................................................................................................10
5.1.1. Adding a New Level of Indirection ..............................................................................10
5.1.2. Dynamically Allocating Security Fields ......................................................................10
5.1.3. Handling Pre-Existing Subjects and Objects................................................................10
5.1.4. Stacking with the Capabilities Module.........................................................................11
5.1.5. Reimplementing the Extended System Calls ...............................................................11
5.1.6. Leveraging Linux Permission Functions ......................................................................11
5.2. Program Execution Changes .....................................................................................................12
5.2.1. File
execute_no_trans
Permission..........................................................................12
5.2.2. File Descriptor Inheritance ...........................................................................................12
5.2.3. Process Tracing and State Sharing ...............................................................................12
1
Implementing SELinux as a Linux Security Module
5.3. Filesystem Changes...................................................................................................................13
5.3.1. Persistent Labeling .......................................................................................................13
5.3.2. Pseudo Filesystem Labeling .........................................................................................13
5.3.3. Leveraging
permission
.............................................................................................13
5.3.4. File Descriptor Permissions..........................................................................................14
5.3.5.
open_secure
Interface ...............................................................................................14
5.3.6. Pipe Security Class .......................................................................................................14
5.4. Socket IPC and Networking Changes .......................................................................................15
5.4.1. Storing Socket Security Data........................................................................................15
5.4.2. Minimally Invasive Hooks............................................................................................15
5.4.3. File Descriptor Transfer................................................................................................15
5.4.4. Omitting Low-Level
ioctl
Controls...........................................................................16
5.4.5. Extended Socket Calls ..................................................................................................16
5.5. System V IPC Changes .............................................................................................................16
5.5.1. Storing IPC Security Data ............................................................................................16
5.5.2. Leveraging
ipcperms
..................................................................................................17
5.6. Miscellaneous Changes.............................................................................................................17
6. Internal Architecture...........................................................................................................................17
7. Initialization and Exit..........................................................................................................................18
7.1. selinux_plug_init.......................................................................................................................18
7.2. selinux_plug_exit ......................................................................................................................19
8. Stacking with Other Modules .............................................................................................................19
9. New System Calls.................................................................................................................................20
10. Helper Functions for Hook Functions .............................................................................................21
10.1. Primitive Allocation Helper Functions ...................................................................................21
10.2. Precondition Helper Functions................................................................................................22
10.3. Permission Checking Helper Functions ..................................................................................23
11. Task Hook Functions .........................................................................................................................23
11.1. Managing Task Security Fields ...............................................................................................23
11.1.1. Task Security Structure...............................................................................................23
11.1.2. task_alloc_security and task_free_security ................................................................24
11.1.3. task_precondition .......................................................................................................24
11.1.4. selinux_task_kmod_set_label.....................................................................................24
11.1.5. selinux_task_post_setuid............................................................................................25
11.2. Controlling Task Operations ...................................................................................................25
11.2.1. Helper Functions for Checking Task Permissions......................................................25
11.2.2. Hook Functions for Controlling Task Operations ......................................................25
12. Program Loading Hook Functions...................................................................................................27
12.1. Managing Binprm Security Fields ..........................................................................................27
12.1.1. selinux_bprm_alloc_security and selinux_bprm_free_security .................................27
12.1.2. selinux_bprm_set_security .........................................................................................27
12.1.3. selinux_bprm_compute_creds....................................................................................28
2
Implementing SELinux as a Linux Security Module
13. Superblock Hook Functions..............................................................................................................29
13.1. Managing Superblock Security Fields ....................................................................................29
13.1.1. Superblock Security Structure....................................................................................29
13.1.2. superblock_alloc_security and superblock_free_security ..........................................29
13.1.3. superblock_precondition ............................................................................................29
13.1.4. selinux_post_mountroot .............................................................................................30
13.1.5. selinux_post_pivotroot ...............................................................................................30
13.1.6. selinux_post_addmount..............................................................................................30
13.1.7. selinux_post_remount.................................................................................................30
13.1.8. selinux_umount_close ................................................................................................30
13.1.9. selinux_umount_busy.................................................................................................31
13.2. Controlling Filesystem Operations .........................................................................................31
13.2.1. superblock_has_perm .................................................................................................31
13.2.2. selinux_sb_statfs.........................................................................................................31
13.2.3. selinux_mount ............................................................................................................31
13.2.4. selinux_check_sb........................................................................................................31
13.2.5. selinux_umount ..........................................................................................................31
13.2.6. selinux_pivotroot ........................................................................................................31
13.2.7. Summary of Filesystem Permission Checks ..............................................................32
14. Inode Hook Functions .......................................................................................................................32
14.1. Managing Inode Security Fields .............................................................................................32
14.1.1. Inode Security Structure .............................................................................................32
14.1.2. inode_alloc_security and inode_free_security ...........................................................33
14.1.3. inode_precondition .....................................................................................................33
14.1.3.1. Procfs File Labeling.......................................................................................34
14.1.3.2. Devpts and Tmpfs File Labeling....................................................................35
14.1.3.3. Devfs File Labeling........................................................................................35
14.1.4. selinux_inode_post_lookup........................................................................................35
14.1.5. post_create..................................................................................................................35
14.1.6. selinux_inode_post_link/rename................................................................................36
14.1.7. selinux_inode_delete ..................................................................................................36
14.1.8. selinux_inode_revalidate ............................................................................................36
14.2. Controlling Inode Operations..................................................................................................36
14.2.1. inode_has_perm..........................................................................................................36
14.2.2. dentry_has_perm ........................................................................................................36
14.2.3. may_create..................................................................................................................37
14.2.4. may_link .....................................................................................................................37
14.2.5. may_rename ...............................................................................................................38
14.2.6. selinux_inode_permission ..........................................................................................39
14.2.7. Other inode access control hook functions.................................................................39
15. File Hook Functions...........................................................................................................................40
15.1. Managing File Security Fields ................................................................................................40
15.1.1. File Security Structure................................................................................................40
15.1.2. file_alloc_security and file_free_security...................................................................41
15.1.3. file_precondition.........................................................................................................41
15.1.4. selinux_file_set_fowner..............................................................................................41
15.2. Controlling File Operations ....................................................................................................41
3
Implementing SELinux as a Linux Security Module
15.2.1. file_has_perm .............................................................................................................41
15.2.2. selinux_file_permission..............................................................................................42
15.2.3. selinux_file_llseek ......................................................................................................42
15.2.4. selinux_file_ioctl ........................................................................................................42
15.2.5. selinux_file_mmap .....................................................................................................42
15.2.6. selinux_file_mprotect .................................................................................................43
15.2.7. selinux_file_lock.........................................................................................................43
15.2.8. selinux_file_fcntl ........................................................................................................43
15.2.9. selinux_file_send_sigiotask........................................................................................44
15.2.10. selinux_file_receive ..................................................................................................44
16. System V IPC Hook Functions .........................................................................................................44
16.1. Managing System V IPC Security Fields ...............................................................................44
16.1.1. IPC Security Structure................................................................................................44
16.1.2. ipc_alloc_security and ipc_free_security ...................................................................45
16.1.3. msg_msg_alloc_security and msg_msg_free_security ..............................................46
16.1.4. ipc_precondition .........................................................................................................46
16.1.5. msg_precondition .......................................................................................................46
16.1.6. ipc_savesid..................................................................................................................46
16.2. Controlling General IPC Operations.......................................................................................46
16.2.1. ipc_has_perm..............................................................................................................47
16.2.2. selinux_ipc_permission ..............................................................................................47
16.2.3. selinux_ipc_getinfo ....................................................................................................47
16.2.4. selinux_*_associate ....................................................................................................47
16.3. Controlling Semaphore Operations.........................................................................................48
16.3.1. selinux_semctl ............................................................................................................48
16.3.2. selinux_semop ............................................................................................................48
16.4. Controlling Shared Memory Operations.................................................................................48
16.4.1. selinux_shm_shmctl ...................................................................................................48
16.4.2. selinux_shm_shmat ....................................................................................................49
16.5. Controlling Message Queue Operations .................................................................................49
16.5.1. selinux_msg_queue_msgctl........................................................................................49
16.5.2. selinux_msg_queue_msgsnd ......................................................................................49
16.5.3. selinux_msg_queue_msgrcv.......................................................................................50
17. Socket Hook Functions......................................................................................................................50
17.1. Socket Related Security Structures .........................................................................................50
17.2. Managing Socket Related Security Fields ..............................................................................51
17.2.1. selinux_socket_post_create ........................................................................................51
17.2.2. selinux_socket_accept ................................................................................................52
17.2.3. selinux_socket_post_accept .......................................................................................52
17.2.4. selinux_tcp_connection_request.................................................................................52
17.2.5. selinux_tcp_synack.....................................................................................................52
17.2.6. selinux_tcp_create_openreq_child .............................................................................53
17.3. Controlling Socket Operations................................................................................................53
17.3.1. socket_has_perm ........................................................................................................53
17.3.2. Socket Layer Hooks ...................................................................................................53
17.3.2.1. selinux_socket_bind.......................................................................................53
17.3.2.2. selinux_socket_sendmsg................................................................................54
4
Implementing SELinux as a Linux Security Module
17.3.3. selinux_socket_sock_rcv_skb (Transport Layer Hook) .............................................54
17.3.4. Hooks for Unix Domain Socket IPC ..........................................................................55
17.4. Extended Socket Call Processing............................................................................................55
17.4.1. Extended Inode Security Structure.............................................................................55
17.4.2. Open Request Security Structure................................................................................56
17.4.3. Extended Socket Functions ........................................................................................56
17.4.3.1. extsocket_open_request_alloc_security.........................................................57
17.4.3.2. extsocket_open_request_free_security ..........................................................57
17.4.3.3. extsocket_init .................................................................................................57
17.4.3.4. extsocket_create .............................................................................................57
17.4.3.5. extsocket_connect ..........................................................................................57
17.4.3.6. extsocket_listen..............................................................................................57
17.4.3.7. extsocket_accept ............................................................................................58
17.4.3.8. extsocket_post_accept....................................................................................58
17.4.3.9. extsocket_sendmsg ........................................................................................58
17.4.3.10. extsocket_recvmsg .......................................................................................59
17.4.3.11. extsocket_getsockname................................................................................59
17.4.3.12. extsocket_getpeername ................................................................................59
17.4.3.13. extsocket_sock_rcv_skb ..............................................................................59
17.4.3.14. extsocket_tcp_connection_request...............................................................60
17.4.3.15. extsocket_tcp_synack ..................................................................................60
17.4.3.16. extsocket_tcp_create_openreq_child ...........................................................60
17.4.3.17. extsocket_unix_stream_connect ..................................................................60
17.4.3.18. extsocket_unix_may_send ...........................................................................61
17.4.3.19. extsocket_skb_set_owner_w........................................................................61
17.4.3.20. extsocket_skb_recv_datagram .....................................................................61
18. Network Buffer Hook Functions ......................................................................................................61
18.1. Network Buffer Security Structure .........................................................................................61
18.2. selinux_skb_set_owner_w ......................................................................................................62
18.3. selinux_skb_recv_datagram....................................................................................................63
19. IPv4 Networking Hook Functions....................................................................................................63
19.1. Netfilter-based Hook Functions ..............................................................................................63
19.1.1. selinux_ip_input_helper .............................................................................................63
19.1.2. selinux_ip_preroute_last.............................................................................................64
19.1.3. selinux_ip_input_first .................................................................................................64
19.1.4. selinux_ip_input_last..................................................................................................64
19.1.5. selinux_ip_output_first ...............................................................................................64
19.1.6. selinux_ip_postroute_last ...........................................................................................64
19.1.7. Unused NetFilter-based Hooks...................................................................................65
19.2. IP Packet Lifecycle Hooks ......................................................................................................65
19.2.1. selinux_ip_fragment ...................................................................................................65
19.2.2. selinux_ip_defragment ...............................................................................................65
19.2.3. selinux_ip_decode_options ........................................................................................66
19.2.4. Unused IP Packet Lifecycle Hooks ............................................................................66
5
Zgłoś jeśli naruszono regulamin