diff options
Diffstat (limited to 'Documentation/security')
-rw-r--r-- | Documentation/security/00-INDEX | 2 | ||||
-rw-r--r-- | Documentation/security/Yama.txt | 60 |
2 files changed, 62 insertions, 0 deletions
diff --git a/Documentation/security/00-INDEX b/Documentation/security/00-INDEX index 99b85d39751c..eeed1de546d4 100644 --- a/Documentation/security/00-INDEX +++ b/Documentation/security/00-INDEX | |||
@@ -6,6 +6,8 @@ SELinux.txt | |||
6 | - how to get started with the SELinux security enhancement. | 6 | - how to get started with the SELinux security enhancement. |
7 | Smack.txt | 7 | Smack.txt |
8 | - documentation on the Smack Linux Security Module. | 8 | - documentation on the Smack Linux Security Module. |
9 | Yama.txt | ||
10 | - documentation on the Yama Linux Security Module. | ||
9 | apparmor.txt | 11 | apparmor.txt |
10 | - documentation on the AppArmor security extension. | 12 | - documentation on the AppArmor security extension. |
11 | credentials.txt | 13 | credentials.txt |
diff --git a/Documentation/security/Yama.txt b/Documentation/security/Yama.txt new file mode 100644 index 000000000000..4f0b7896a21d --- /dev/null +++ b/Documentation/security/Yama.txt | |||
@@ -0,0 +1,60 @@ | |||
1 | Yama is a Linux Security Module that collects a number of system-wide DAC | ||
2 | security protections that are not handled by the core kernel itself. To | ||
3 | select it at boot time, specify "security=yama" (though this will disable | ||
4 | any other LSM). | ||
5 | |||
6 | Yama is controlled through sysctl in /proc/sys/kernel/yama: | ||
7 | |||
8 | - ptrace_scope | ||
9 | |||
10 | ============================================================== | ||
11 | |||
12 | ptrace_scope: | ||
13 | |||
14 | As Linux grows in popularity, it will become a larger target for | ||
15 | malware. One particularly troubling weakness of the Linux process | ||
16 | interfaces is that a single user is able to examine the memory and | ||
17 | running state of any of their processes. For example, if one application | ||
18 | (e.g. Pidgin) was compromised, it would be possible for an attacker to | ||
19 | attach to other running processes (e.g. Firefox, SSH sessions, GPG agent, | ||
20 | etc) to extract additional credentials and continue to expand the scope | ||
21 | of their attack without resorting to user-assisted phishing. | ||
22 | |||
23 | This is not a theoretical problem. SSH session hijacking | ||
24 | (http://www.storm.net.nz/projects/7) and arbitrary code injection | ||
25 | (http://c-skills.blogspot.com/2007/05/injectso.html) attacks already | ||
26 | exist and remain possible if ptrace is allowed to operate as before. | ||
27 | Since ptrace is not commonly used by non-developers and non-admins, system | ||
28 | builders should be allowed the option to disable this debugging system. | ||
29 | |||
30 | For a solution, some applications use prctl(PR_SET_DUMPABLE, ...) to | ||
31 | specifically disallow such ptrace attachment (e.g. ssh-agent), but many | ||
32 | do not. A more general solution is to only allow ptrace directly from a | ||
33 | parent to a child process (i.e. direct "gdb EXE" and "strace EXE" still | ||
34 | work), or with CAP_SYS_PTRACE (i.e. "gdb --pid=PID", and "strace -p PID" | ||
35 | still work as root). | ||
36 | |||
37 | For software that has defined application-specific relationships | ||
38 | between a debugging process and its inferior (crash handlers, etc), | ||
39 | prctl(PR_SET_PTRACER, pid, ...) can be used. An inferior can declare which | ||
40 | other process (and its descendents) are allowed to call PTRACE_ATTACH | ||
41 | against it. Only one such declared debugging process can exists for | ||
42 | each inferior at a time. For example, this is used by KDE, Chromium, and | ||
43 | Firefox's crash handlers, and by Wine for allowing only Wine processes | ||
44 | to ptrace each other. | ||
45 | |||
46 | 0 - classic ptrace permissions: a process can PTRACE_ATTACH to any other | ||
47 | process running under the same uid, as long as it is dumpable (i.e. | ||
48 | did not transition uids, start privileged, or have called | ||
49 | prctl(PR_SET_DUMPABLE...) already). | ||
50 | |||
51 | 1 - restricted ptrace: a process must have a predefined relationship | ||
52 | with the inferior it wants to call PTRACE_ATTACH on. By default, | ||
53 | this relationship is that of only its descendants when the above | ||
54 | classic criteria is also met. To change the relationship, an | ||
55 | inferior can call prctl(PR_SET_PTRACER, debugger, ...) to declare | ||
56 | an allowed debugger PID to call PTRACE_ATTACH on the inferior. | ||
57 | |||
58 | The original children-only logic was based on the restrictions in grsecurity. | ||
59 | |||
60 | ============================================================== | ||