320 likes | 534 Views
Security Improvements in Linux Using Capabilities. Gautam Barua Department Of Computer Science & Engg Indian Institute of Technology, Guwahati. Outline. Discretionary Access Control Set user on execution Mandatory Access Control Linux Security Modules SeLinux Buffer Overflow Attack
E N D
Security Improvements in Linux Using Capabilities Gautam Barua Department Of Computer Science & Engg Indian Institute of Technology, Guwahati
Outline Discretionary Access Control Set user on execution Mandatory Access Control Linux Security Modules SeLinux Buffer Overflow Attack Posix Capabilities Work at IITG
Discretionary Access Control • Owner-administered • Mode bits: User, Group, Others • Basic Permissions: Read, Write, Execute rwxr_ _ r_ _ owner_id group_id ……. • Access Control Lists added in later versions of Unix (and Linux). • Can specify particulars users or groups who are given permissions or denied permissions. IIT Guwahati
Discretionary Access Control • Setting controls is at the discretion of users. • An “owner” is identified with every file • Mode bits can be changed by the owner. • Distributed control • Easy to manage • User controls her data • Attacks can be catastrophic IIT Guwahati
Set uid on execution • ls – l /var/bin/ps r_sr_xr_x root root ……………….. ps • When user gb executes “ps”, the process executing “ps” gets an effective user id of “root”. • So privileges of “root” are available to the program “ps” even though it is gb executing it. IIT Guwahati
Set uid on execution • But only what “ps” can do as root is allowed to gb. • This method of controlled escalation of privileges provides flexibility in managing resources. BUT • Mistakes may be made by administrators • If write permission is given inadvertently to the file containing “ps” …. IIT Guwahati
Set uid on Execution • More seriously, there may be a bug in “ps” • This may be exploited by an intruder, and the process running “ps” may be made to execute some malicious code. • This malicious code will get root privileges and can therefore wreck havoc. • We should give only the necessary privileges to programs like “ps”, not full root privileges. IIT Guwahati
Mandatory Access Control • Controls imposed by a central administrator • Enforced by the OS kernel • User programmes cannot over-ride the controls • Complex to implement • Restrictive to users • Less vulnerable to attacks IIT Guwahati
Mandatory Access Control • Linux Security Module (LSM) • General kernel framework for implementing security modules • Around 200 hooks • About 150 are for mediation • Others for allocation/freeing, labelling, ad hoc management IIT Guwahati
Linux Security Module • Add a “security” field to major data structures: • task_struct, inode, sk_buff, net_device, … • Type: void *security; • Add hooks in kernel critical points • To manage the “security” field • To perform access control as per defined policies • Register/unregister • Using register_security()/unregister_security() • LSM recognizes only the primary module • mod_reg_security enables a second module to stack IIT Guwahati
Security Enhanced Linux (SeLinux) • Mandatory Access Control Implementation • Uses LSM • Fine Grained Control Possible • Complex to set up • Flexibility is therefore low • Critics say chances of misconfiguration high and so vulnerability increases IIT Guwahati
Security Enhanced Linux (SeLinux) • Subject (e.g. process) Object (e.g. file) • Action (e.g. file read) Subject has a • Security Context : • User Identifier (few) • Role (few) • Types (hundreds) IIT Guwahati
Buffer Overflow Attack • void func (char *str) { • char buffer[16]; • strcpy(buffer,str); • } • void main() { • char large_string[256]; • int i; • for( i = 0; i < 255; i++) • large_string[i] = 'A'; • func (large_string); • } IIT Guwahati
Buffer Overflow Attack Run Time Stack when “func” is called Buffer [0..15] *str Return address Attack Code IIT Guwahati
Buffer Overflow Attack #include <stdio.h> void main() { char *name[2]; name[0] = "/bin/sh"; name[1] = NULL; execve(name[0], name, NULL); } IIT Guwahati
POSIX Capabilities • Fine grain control of who can do what • Traditional: all-or-nothing: root can do everything, normal user can do nothing • Capabilities: define a set of distinct privileges in the system (if a task has a capability, it is permitted to do a certain task) • POSIX 1.e defines a list of capabilities • Linux 2.6.24 implements 8 from POSIX, and adds 24 Linux-specific (total 32) • Not Capabilities as per classical definition IIT Guwahati
Capabilities • CAP_CHOWN: allow changing file ownership • CAP_SETUID: allow manipulations of UIDs • CAP_NET_BIND_SERVICE: allow binding to TCP/UDP port below 1024 • CAP_DAC_OVERRIDE: bypass rwx permission checks • CAP_SYS_NICE: allow changing nice level • CAP_FOWNER: bypass need for uids to match (e.g. chmod) • CAP_SYS_PTRACE: allow ptrace() of any process • CAP_SYS_CHROOT: allow use of chroot() IIT Guwahati
Capabilities • CAP_MKNOD: allow creation of special files • CAP_SYS_MODULE: allow loading and unloading of kernel modules • CAP_DAC_READ_SEARCH: bypass directory read and execute permission checks • CAP_FSETID: don’t clear suid and sgid flags on files when modified. • CAP_KILL: bypass permission checks for sending signals • CAP_NET_RAW: allow the use of raw sockets IIT Guwahati
Capabilities Implementation • 32-bit integer • Bitmap: 1 bit per capability: 1 means having the corresponding capability , 0 means no • Maximum 32 capabilities support in Linux 2.6.24 (will increase to 64 bit in coming versions) • Operations: • cap_raise(c, flag): Include the capability in c • cap_lower(c, flag): Remove the capability from c • cap_raised(c, flag): c having the capability? IIT Guwahati
Capability Set in Processes • Each process has 3 sets of capabilities • Permitted set: capabilities the task can use • Effective set: capabilities that the task currently chooses to use (so as to lower privileges temporarily) • Inheritable set: capabilities that are preserved across an “execve” • A child that is forked gets a copy of each of the three sets IIT Guwahati
Use Capabilities • Kernel can check the capability before doing privileged actions: ... if (!capable(CAP_XXX)) return -EPERM; ... • capable(cap): does this process have the capability? int capable(int cap) { if (cap_raised(current->cap_effective, cap)) return 1; return 0; } IIT Guwahati
Capability Example • Controlling system call nice() • In kernel/sched.c: asmlinkage long sys_nice(int increment) { if (increment < 0) { if (!capable(CAP_SYS_NICE)) return -EPERM; … IIT Guwahati
Giving Capabilities • Capabilities are copied from the parent process • But there is a need to provide program specific capabilities, and inheriting from the parent will not give the required functionality. • So associate capabilities with executable programs. • Store capabilities in files containing executable programs. IIT Guwahati
File Capabilities • Executable files can have capabilities too • Also have 3 sets: permitted, effective, inheritable • Stored as file attributes in file systems • Changes the process's capabilities after execve() • Capability rules • Inheritable set does not change after execve() • New permitted set = file permitted set OR (file inheritable set AND process permitted set) • New effective set = file effective set AND new permitted set IIT Guwahati
File Capability Implementation • Executable file data structure: struct linux_binprm • Defined in include/linux/binfmts.h • Fields related to capabilities: kernel_cap_t cap_inheritable, cap_permitted, cap_effective; • When an executable file is loaded: • Fill in linux_binprm from file system and call compute_creds() • Example: load ELF file: function load_elf_binary() calls compute_creds() IIT Guwahati
File Capability Implementation (Cont.) • File system support has been recently added in the Linux kernel starting from Linux 2.6.24-rc2. • Uses “extended attributes” feature of ext2 file system to store file capabilities. IIT Guwahati
Ongoing Research at IITG • No process should run with euid = 0 • Its difficult to figure out required capabilities for a given executable • How to convert a running system into one with capabilities • Is the available set of capabilities sufficient for an executable? IIT Guwahati
(Cont.) • Our goal • To ease the process of setting caps • tool which sets the required caps by diagnosing the given executable • Monitor a server (with caps enabled): • Has the tool set the least required caps or not • Gather more information to see if there are any areas left uncovered by the Capability System which should get attention. IIT Guwahati
(cont.) • Diagnostic tool • Checks which system calls are called by the executable • In cases where the capabilities check straightaway access to the system call like CAP_CHOWN, CAP_SYS_PTRACE etc., decision is obvious. • For cases like CAP_NET_RAW, CAP_NET_BIND_SERVICE etc. dynamic heuristics are required as decision depends on arguments passed IIT Guwahati
Questions??? IIT Guwahati