Index: Documentation/Yama.txt |
diff --git a/Documentation/Yama.txt b/Documentation/Yama.txt |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f9f15d230555c034f8fb1a8d09eee8e51576201c |
--- /dev/null |
+++ b/Documentation/Yama.txt |
@@ -0,0 +1,91 @@ |
+Yama is a Linux Security Module that collects a number of security |
+protections that are not handled by the core kernel itself. To select |
+it at boot time, specify "security=yama" (though this will disable any |
+other LSM). |
+ |
+Yama is controlled through sysctl in /proc/sys/kernel/yama: |
+ |
+- protected_sticky_symlinks |
+- protected_nonaccess_hardlinks |
+- ptrace_scope |
+ |
+============================================================== |
+ |
+protected_sticky_symlinks: |
+ |
+A long-standing class of security issues is the symlink-based |
+time-of-check-time-of-use race, most commonly seen in world-writable |
+directories like /tmp. The common method of exploitation of this flaw |
+is to cross privilege boundaries when following a given symlink (i.e. a |
+root process follows a symlink belonging to another user). For a likely |
+incomplete list of hundreds of examples across the years, please see: |
+http://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=/tmp |
+ |
+When set to "0", symlink following behavior is unrestricted. |
+ |
+When set to "1" symlinks are permitted to be followed only when outside |
+a sticky world-writable directory, or when the uid of the symlink and |
+follower match, or when the directory owner matches the symlink's owner. |
+ |
+This protection is based on the restrictions in Openwall and grsecurity. |
+ |
+============================================================== |
+ |
+protected_nonaccess_hardlinks: |
+ |
+Hardlinks can be abused in a similar fashion to symlinks in sticky |
+world-writable directories, but their weakness is not limited to |
+just that scenario. For example, if /etc and /home are on the same |
+partition, a regular user can create a hardlink to /etc/shadow in their |
+home directory. While it retains the original owner and permissions, |
+it is possible for privileged programs that are otherwise symlink-safe |
+to mistakenly access the file through its hardlink. Additionally, a very |
+minor untraceable quota-bypassing local denial of service is possible by |
+an attacker exhausting disk space by filling a world-writable directory |
+with hardlinks. |
+ |
+When set to "0", hardlink creation behavior is unrestricted. |
+ |
+When set to "1", hardlinks cannot be created to files that a given user |
+would be unable to read and write originally, or are otherwise sensitive. |
+ |
+This protection is based on the restrictions in Openwall and grsecurity. |
+ |
+============================================================== |
+ |
+ptrace_scope: |
+ |
+As Linux grows in popularity, it will become a larger target for |
+malware. One particularly troubling weakness of the Linux process |
+interfaces is that a single user is able to examine the memory and |
+running state of any of their processes. For example, if one application |
+(e.g. Pidgin) was compromised, it would be possible for an attacker to |
+attach to other running processes (e.g. Firefox, SSH sessions, GPG agent, |
+etc) to extract additional credentials and continue to expand the scope |
+of their attack without resorting to user-assisted phishing. |
+ |
+This is not a theoretical problem. SSH session hijacking |
+(http://www.storm.net.nz/projects/7) and arbitrary code injection |
+(http://c-skills.blogspot.com/2007/05/injectso.html) attacks already |
+exist and remain possible if PTRACE is allowed to operate as before. |
+PTRACE is not commonly used by non-developers and non-admins, so system |
+builders should be allowed the option to disable this debugging system. |
+ |
+For a solution, some applications use prctl(PR_SET_DUMPABLE, ...) to |
+specifically disallow such PTRACE attachment (e.g. ssh-agent), but many |
+do not. A more general solution is to only allow PTRACE directly from a |
+parent to a child process (i.e. direct "gdb EXE" and "strace EXE" still |
+work), or with CAP_SYS_PTRACE (i.e. "gdb --pid=PID", and "strace -p PID" |
+still work as root). |
+ |
+0 - classic PTRACE permissions: a process can PTRACE any other process |
+ running under the same uid, as long as it is dumpable (i.e. did not |
+ transition uids, start privileged, or have prctl(PR_SET_DUMPABLE...) |
+ called). |
+ |
+1 - child-only PTRACE: a process can PTRACE only its descendants when |
+ the above classic criteria is also met. |
+ |
+This protection is based on the restrictions in grsecurity. |
+ |
+============================================================== |