| 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.
|
| +
|
| +==============================================================
|
|
|