2005-04-17 05:20:36 +07:00
|
|
|
#
|
|
|
|
# Security configuration
|
|
|
|
#
|
|
|
|
|
|
|
|
menu "Security options"
|
|
|
|
|
2012-05-11 16:56:56 +07:00
|
|
|
source security/keys/Kconfig
|
2005-04-17 05:20:36 +07:00
|
|
|
|
2010-11-12 05:05:18 +07:00
|
|
|
config SECURITY_DMESG_RESTRICT
|
|
|
|
bool "Restrict unprivileged access to the kernel syslog"
|
|
|
|
default n
|
|
|
|
help
|
|
|
|
This enforces restrictions on unprivileged users reading the kernel
|
|
|
|
syslog via dmesg(8).
|
|
|
|
|
|
|
|
If this option is not selected, no restrictions will be enforced
|
|
|
|
unless the dmesg_restrict sysctl is explicitly set to (1).
|
|
|
|
|
|
|
|
If you are unsure how to answer this question, answer N.
|
|
|
|
|
2005-04-17 05:20:36 +07:00
|
|
|
config SECURITY
|
|
|
|
bool "Enable different security models"
|
2005-08-22 23:20:50 +07:00
|
|
|
depends on SYSFS
|
kernel: conditionally support non-root users, groups and capabilities
There are a lot of embedded systems that run most or all of their
functionality in init, running as root:root. For these systems,
supporting multiple users is not necessary.
This patch adds a new symbol, CONFIG_MULTIUSER, that makes support for
non-root users, non-root groups, and capabilities optional. It is enabled
under CONFIG_EXPERT menu.
When this symbol is not defined, UID and GID are zero in any possible case
and processes always have all capabilities.
The following syscalls are compiled out: setuid, setregid, setgid,
setreuid, setresuid, getresuid, setresgid, getresgid, setgroups,
getgroups, setfsuid, setfsgid, capget, capset.
Also, groups.c is compiled out completely.
In kernel/capability.c, capable function was moved in order to avoid
adding two ifdef blocks.
This change saves about 25 KB on a defconfig build. The most minimal
kernels have total text sizes in the high hundreds of kB rather than
low MB. (The 25k goes down a bit with allnoconfig, but not that much.
The kernel was booted in Qemu. All the common functionalities work.
Adding users/groups is not possible, failing with -ENOSYS.
Bloat-o-meter output:
add/remove: 7/87 grow/shrink: 19/397 up/down: 1675/-26325 (-24650)
[akpm@linux-foundation.org: coding-style fixes]
Signed-off-by: Iulia Manda <iulia.manda21@gmail.com>
Reviewed-by: Josh Triplett <josh@joshtriplett.org>
Acked-by: Geert Uytterhoeven <geert@linux-m68k.org>
Tested-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Reviewed-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2015-04-16 06:16:41 +07:00
|
|
|
depends on MULTIUSER
|
2005-04-17 05:20:36 +07:00
|
|
|
help
|
|
|
|
This allows you to choose different security modules to be
|
|
|
|
configured into your kernel.
|
|
|
|
|
|
|
|
If this option is not selected, the default Linux security
|
|
|
|
model will be used.
|
|
|
|
|
|
|
|
If you are unsure how to answer this question, answer N.
|
|
|
|
|
2017-02-14 20:17:24 +07:00
|
|
|
config SECURITY_WRITABLE_HOOKS
|
|
|
|
depends on SECURITY
|
|
|
|
bool
|
|
|
|
default n
|
|
|
|
|
2008-08-22 22:35:57 +07:00
|
|
|
config SECURITYFS
|
|
|
|
bool "Enable the securityfs filesystem"
|
|
|
|
help
|
|
|
|
This will build the securityfs filesystem. It is currently used by
|
2009-02-04 21:06:58 +07:00
|
|
|
the TPM bios character driver and IMA, an integrity provider. It is
|
|
|
|
not used by SELinux or SMACK.
|
2008-08-22 22:35:57 +07:00
|
|
|
|
|
|
|
If you are unsure how to answer this question, answer N.
|
|
|
|
|
2005-04-17 05:20:36 +07:00
|
|
|
config SECURITY_NETWORK
|
|
|
|
bool "Socket and Networking Security Hooks"
|
|
|
|
depends on SECURITY
|
|
|
|
help
|
|
|
|
This enables the socket and networking security hooks.
|
|
|
|
If enabled, a security module can use these hooks to
|
|
|
|
implement socket and networking access controls.
|
|
|
|
If you are unsure how to answer this question, answer N.
|
[LSM-IPSec]: Security association restriction.
This patch series implements per packet access control via the
extension of the Linux Security Modules (LSM) interface by hooks in
the XFRM and pfkey subsystems that leverage IPSec security
associations to label packets. Extensions to the SELinux LSM are
included that leverage the patch for this purpose.
This patch implements the changes necessary to the XFRM subsystem,
pfkey interface, ipv4/ipv6, and xfrm_user interface to restrict a
socket to use only authorized security associations (or no security
association) to send/receive network packets.
Patch purpose:
The patch is designed to enable access control per packets based on
the strongly authenticated IPSec security association. Such access
controls augment the existing ones based on network interface and IP
address. The former are very coarse-grained, and the latter can be
spoofed. By using IPSec, the system can control access to remote
hosts based on cryptographic keys generated using the IPSec mechanism.
This enables access control on a per-machine basis or per-application
if the remote machine is running the same mechanism and trusted to
enforce the access control policy.
Patch design approach:
The overall approach is that policy (xfrm_policy) entries set by
user-level programs (e.g., setkey for ipsec-tools) are extended with a
security context that is used at policy selection time in the XFRM
subsystem to restrict the sockets that can send/receive packets via
security associations (xfrm_states) that are built from those
policies.
A presentation available at
www.selinux-symposium.org/2005/presentations/session2/2-3-jaeger.pdf
from the SELinux symposium describes the overall approach.
Patch implementation details:
On output, the policy retrieved (via xfrm_policy_lookup or
xfrm_sk_policy_lookup) must be authorized for the security context of
the socket and the same security context is required for resultant
security association (retrieved or negotiated via racoon in
ipsec-tools). This is enforced in xfrm_state_find.
On input, the policy retrieved must also be authorized for the socket
(at __xfrm_policy_check), and the security context of the policy must
also match the security association being used.
The patch has virtually no impact on packets that do not use IPSec.
The existing Netfilter (outgoing) and LSM rcv_skb hooks are used as
before.
Also, if IPSec is used without security contexts, the impact is
minimal. The LSM must allow such policies to be selected for the
combination of socket and remote machine, but subsequent IPSec
processing proceeds as in the original case.
Testing:
The pfkey interface is tested using the ipsec-tools. ipsec-tools have
been modified (a separate ipsec-tools patch is available for version
0.5) that supports assignment of xfrm_policy entries and security
associations with security contexts via setkey and the negotiation
using the security contexts via racoon.
The xfrm_user interface is tested via ad hoc programs that set
security contexts. These programs are also available from me, and
contain programs for setting, getting, and deleting policy for testing
this interface. Testing of sa functions was done by tracing kernel
behavior.
Signed-off-by: Trent Jaeger <tjaeger@cse.psu.edu>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2005-12-14 14:12:27 +07:00
|
|
|
|
2017-12-04 21:08:03 +07:00
|
|
|
config PAGE_TABLE_ISOLATION
|
|
|
|
bool "Remove the kernel mapping in user mode"
|
2018-01-03 21:18:44 +07:00
|
|
|
default y
|
2017-12-04 21:08:03 +07:00
|
|
|
depends on X86_64 && !UML
|
|
|
|
help
|
|
|
|
This feature reduces the number of hardware side channels by
|
|
|
|
ensuring that the majority of kernel addresses are not mapped
|
|
|
|
into userspace.
|
|
|
|
|
2018-01-13 06:24:59 +07:00
|
|
|
See Documentation/x86/pti.txt for more details.
|
2017-12-04 21:08:03 +07:00
|
|
|
|
IB/core: Enforce PKey security on QPs
Add new LSM hooks to allocate and free security contexts and check for
permission to access a PKey.
Allocate and free a security context when creating and destroying a QP.
This context is used for controlling access to PKeys.
When a request is made to modify a QP that changes the port, PKey index,
or alternate path, check that the QP has permission for the PKey in the
PKey table index on the subnet prefix of the port. If the QP is shared
make sure all handles to the QP also have access.
Store which port and PKey index a QP is using. After the reset to init
transition the user can modify the port, PKey index and alternate path
independently. So port and PKey settings changes can be a merge of the
previous settings and the new ones.
In order to maintain access control if there are PKey table or subnet
prefix change keep a list of all QPs are using each PKey index on
each port. If a change occurs all QPs using that device and port must
have access enforced for the new cache settings.
These changes add a transaction to the QP modify process. Association
with the old port and PKey index must be maintained if the modify fails,
and must be removed if it succeeds. Association with the new port and
PKey index must be established prior to the modify and removed if the
modify fails.
1. When a QP is modified to a particular Port, PKey index or alternate
path insert that QP into the appropriate lists.
2. Check permission to access the new settings.
3. If step 2 grants access attempt to modify the QP.
4a. If steps 2 and 3 succeed remove any prior associations.
4b. If ether fails remove the new setting associations.
If a PKey table or subnet prefix changes walk the list of QPs and
check that they have permission. If not send the QP to the error state
and raise a fatal error event. If it's a shared QP make sure all the
QPs that share the real_qp have permission as well. If the QP that
owns a security structure is denied access the security structure is
marked as such and the QP is added to an error_list. Once the moving
the QP to error is complete the security structure mark is cleared.
Maintaining the lists correctly turns QP destroy into a transaction.
The hardware driver for the device frees the ib_qp structure, so while
the destroy is in progress the ib_qp pointer in the ib_qp_security
struct is undefined. When the destroy process begins the ib_qp_security
structure is marked as destroying. This prevents any action from being
taken on the QP pointer. After the QP is destroyed successfully it
could still listed on an error_list wait for it to be processed by that
flow before cleaning up the structure.
If the destroy fails the QPs port and PKey settings are reinserted into
the appropriate lists, the destroying flag is cleared, and access control
is enforced, in case there were any cache changes during the destroy
flow.
To keep the security changes isolated a new file is used to hold security
related functionality.
Signed-off-by: Daniel Jurgens <danielj@mellanox.com>
Acked-by: Doug Ledford <dledford@redhat.com>
[PM: merge fixup in ib_verbs.h and uverbs_cmd.c]
Signed-off-by: Paul Moore <paul@paul-moore.com>
2017-05-19 19:48:52 +07:00
|
|
|
config SECURITY_INFINIBAND
|
|
|
|
bool "Infiniband Security Hooks"
|
|
|
|
depends on SECURITY && INFINIBAND
|
|
|
|
help
|
|
|
|
This enables the Infiniband security hooks.
|
|
|
|
If enabled, a security module can use these hooks to
|
|
|
|
implement Infiniband access controls.
|
|
|
|
If you are unsure how to answer this question, answer N.
|
|
|
|
|
[LSM-IPSec]: Security association restriction.
This patch series implements per packet access control via the
extension of the Linux Security Modules (LSM) interface by hooks in
the XFRM and pfkey subsystems that leverage IPSec security
associations to label packets. Extensions to the SELinux LSM are
included that leverage the patch for this purpose.
This patch implements the changes necessary to the XFRM subsystem,
pfkey interface, ipv4/ipv6, and xfrm_user interface to restrict a
socket to use only authorized security associations (or no security
association) to send/receive network packets.
Patch purpose:
The patch is designed to enable access control per packets based on
the strongly authenticated IPSec security association. Such access
controls augment the existing ones based on network interface and IP
address. The former are very coarse-grained, and the latter can be
spoofed. By using IPSec, the system can control access to remote
hosts based on cryptographic keys generated using the IPSec mechanism.
This enables access control on a per-machine basis or per-application
if the remote machine is running the same mechanism and trusted to
enforce the access control policy.
Patch design approach:
The overall approach is that policy (xfrm_policy) entries set by
user-level programs (e.g., setkey for ipsec-tools) are extended with a
security context that is used at policy selection time in the XFRM
subsystem to restrict the sockets that can send/receive packets via
security associations (xfrm_states) that are built from those
policies.
A presentation available at
www.selinux-symposium.org/2005/presentations/session2/2-3-jaeger.pdf
from the SELinux symposium describes the overall approach.
Patch implementation details:
On output, the policy retrieved (via xfrm_policy_lookup or
xfrm_sk_policy_lookup) must be authorized for the security context of
the socket and the same security context is required for resultant
security association (retrieved or negotiated via racoon in
ipsec-tools). This is enforced in xfrm_state_find.
On input, the policy retrieved must also be authorized for the socket
(at __xfrm_policy_check), and the security context of the policy must
also match the security association being used.
The patch has virtually no impact on packets that do not use IPSec.
The existing Netfilter (outgoing) and LSM rcv_skb hooks are used as
before.
Also, if IPSec is used without security contexts, the impact is
minimal. The LSM must allow such policies to be selected for the
combination of socket and remote machine, but subsequent IPSec
processing proceeds as in the original case.
Testing:
The pfkey interface is tested using the ipsec-tools. ipsec-tools have
been modified (a separate ipsec-tools patch is available for version
0.5) that supports assignment of xfrm_policy entries and security
associations with security contexts via setkey and the negotiation
using the security contexts via racoon.
The xfrm_user interface is tested via ad hoc programs that set
security contexts. These programs are also available from me, and
contain programs for setting, getting, and deleting policy for testing
this interface. Testing of sa functions was done by tracing kernel
behavior.
Signed-off-by: Trent Jaeger <tjaeger@cse.psu.edu>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2005-12-14 14:12:27 +07:00
|
|
|
config SECURITY_NETWORK_XFRM
|
|
|
|
bool "XFRM (IPSec) Networking Security Hooks"
|
|
|
|
depends on XFRM && SECURITY_NETWORK
|
|
|
|
help
|
|
|
|
This enables the XFRM (IPSec) networking security hooks.
|
|
|
|
If enabled, a security module can use these hooks to
|
|
|
|
implement per-packet access controls based on labels
|
|
|
|
derived from IPSec policy. Non-IPSec communications are
|
|
|
|
designated as unlabelled, and only sockets authorized
|
|
|
|
to communicate unlabelled data can send without using
|
|
|
|
IPSec.
|
|
|
|
If you are unsure how to answer this question, answer N.
|
2005-04-17 05:20:36 +07:00
|
|
|
|
2008-12-17 11:24:15 +07:00
|
|
|
config SECURITY_PATH
|
|
|
|
bool "Security hooks for pathname based access control"
|
|
|
|
depends on SECURITY
|
|
|
|
help
|
|
|
|
This enables the security hooks for pathname based access control.
|
|
|
|
If enabled, a security module can use these hooks to
|
|
|
|
implement pathname based access controls.
|
|
|
|
If you are unsure how to answer this question, answer N.
|
|
|
|
|
x86, intel_txt: Intel TXT boot support
This patch adds kernel configuration and boot support for Intel Trusted
Execution Technology (Intel TXT).
Intel's technology for safer computing, Intel Trusted Execution
Technology (Intel TXT), defines platform-level enhancements that
provide the building blocks for creating trusted platforms.
Intel TXT was formerly known by the code name LaGrande Technology (LT).
Intel TXT in Brief:
o Provides dynamic root of trust for measurement (DRTM)
o Data protection in case of improper shutdown
o Measurement and verification of launched environment
Intel TXT is part of the vPro(TM) brand and is also available some
non-vPro systems. It is currently available on desktop systems based on
the Q35, X38, Q45, and Q43 Express chipsets (e.g. Dell Optiplex 755, HP
dc7800, etc.) and mobile systems based on the GM45, PM45, and GS45
Express chipsets.
For more information, see http://www.intel.com/technology/security/.
This site also has a link to the Intel TXT MLE Developers Manual, which
has been updated for the new released platforms.
A much more complete description of how these patches support TXT, how to
configure a system for it, etc. is in the Documentation/intel_txt.txt file
in this patch.
This patch provides the TXT support routines for complete functionality,
documentation for TXT support and for the changes to the boot_params structure,
and boot detection of a TXT launch. Attempts to shutdown (reboot, Sx) the system
will result in platform resets; subsequent patches will support these shutdown modes
properly.
Documentation/intel_txt.txt | 210 +++++++++++++++++++++
Documentation/x86/zero-page.txt | 1
arch/x86/include/asm/bootparam.h | 3
arch/x86/include/asm/fixmap.h | 3
arch/x86/include/asm/tboot.h | 197 ++++++++++++++++++++
arch/x86/kernel/Makefile | 1
arch/x86/kernel/setup.c | 4
arch/x86/kernel/tboot.c | 379 +++++++++++++++++++++++++++++++++++++++
security/Kconfig | 30 +++
9 files changed, 827 insertions(+), 1 deletion(-)
Signed-off-by: Joseph Cihula <joseph.cihula@intel.com>
Signed-off-by: Shane Wang <shane.wang@intel.com>
Signed-off-by: Gang Wei <gang.wei@intel.com>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2009-07-01 09:30:59 +07:00
|
|
|
config INTEL_TXT
|
|
|
|
bool "Enable Intel(R) Trusted Execution Technology (Intel(R) TXT)"
|
2009-09-02 08:25:07 +07:00
|
|
|
depends on HAVE_INTEL_TXT
|
x86, intel_txt: Intel TXT boot support
This patch adds kernel configuration and boot support for Intel Trusted
Execution Technology (Intel TXT).
Intel's technology for safer computing, Intel Trusted Execution
Technology (Intel TXT), defines platform-level enhancements that
provide the building blocks for creating trusted platforms.
Intel TXT was formerly known by the code name LaGrande Technology (LT).
Intel TXT in Brief:
o Provides dynamic root of trust for measurement (DRTM)
o Data protection in case of improper shutdown
o Measurement and verification of launched environment
Intel TXT is part of the vPro(TM) brand and is also available some
non-vPro systems. It is currently available on desktop systems based on
the Q35, X38, Q45, and Q43 Express chipsets (e.g. Dell Optiplex 755, HP
dc7800, etc.) and mobile systems based on the GM45, PM45, and GS45
Express chipsets.
For more information, see http://www.intel.com/technology/security/.
This site also has a link to the Intel TXT MLE Developers Manual, which
has been updated for the new released platforms.
A much more complete description of how these patches support TXT, how to
configure a system for it, etc. is in the Documentation/intel_txt.txt file
in this patch.
This patch provides the TXT support routines for complete functionality,
documentation for TXT support and for the changes to the boot_params structure,
and boot detection of a TXT launch. Attempts to shutdown (reboot, Sx) the system
will result in platform resets; subsequent patches will support these shutdown modes
properly.
Documentation/intel_txt.txt | 210 +++++++++++++++++++++
Documentation/x86/zero-page.txt | 1
arch/x86/include/asm/bootparam.h | 3
arch/x86/include/asm/fixmap.h | 3
arch/x86/include/asm/tboot.h | 197 ++++++++++++++++++++
arch/x86/kernel/Makefile | 1
arch/x86/kernel/setup.c | 4
arch/x86/kernel/tboot.c | 379 +++++++++++++++++++++++++++++++++++++++
security/Kconfig | 30 +++
9 files changed, 827 insertions(+), 1 deletion(-)
Signed-off-by: Joseph Cihula <joseph.cihula@intel.com>
Signed-off-by: Shane Wang <shane.wang@intel.com>
Signed-off-by: Gang Wei <gang.wei@intel.com>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2009-07-01 09:30:59 +07:00
|
|
|
help
|
|
|
|
This option enables support for booting the kernel with the
|
|
|
|
Trusted Boot (tboot) module. This will utilize
|
|
|
|
Intel(R) Trusted Execution Technology to perform a measured launch
|
|
|
|
of the kernel. If the system does not support Intel(R) TXT, this
|
|
|
|
will have no effect.
|
|
|
|
|
2009-08-12 22:00:40 +07:00
|
|
|
Intel TXT will provide higher assurance of system configuration and
|
x86, intel_txt: Intel TXT boot support
This patch adds kernel configuration and boot support for Intel Trusted
Execution Technology (Intel TXT).
Intel's technology for safer computing, Intel Trusted Execution
Technology (Intel TXT), defines platform-level enhancements that
provide the building blocks for creating trusted platforms.
Intel TXT was formerly known by the code name LaGrande Technology (LT).
Intel TXT in Brief:
o Provides dynamic root of trust for measurement (DRTM)
o Data protection in case of improper shutdown
o Measurement and verification of launched environment
Intel TXT is part of the vPro(TM) brand and is also available some
non-vPro systems. It is currently available on desktop systems based on
the Q35, X38, Q45, and Q43 Express chipsets (e.g. Dell Optiplex 755, HP
dc7800, etc.) and mobile systems based on the GM45, PM45, and GS45
Express chipsets.
For more information, see http://www.intel.com/technology/security/.
This site also has a link to the Intel TXT MLE Developers Manual, which
has been updated for the new released platforms.
A much more complete description of how these patches support TXT, how to
configure a system for it, etc. is in the Documentation/intel_txt.txt file
in this patch.
This patch provides the TXT support routines for complete functionality,
documentation for TXT support and for the changes to the boot_params structure,
and boot detection of a TXT launch. Attempts to shutdown (reboot, Sx) the system
will result in platform resets; subsequent patches will support these shutdown modes
properly.
Documentation/intel_txt.txt | 210 +++++++++++++++++++++
Documentation/x86/zero-page.txt | 1
arch/x86/include/asm/bootparam.h | 3
arch/x86/include/asm/fixmap.h | 3
arch/x86/include/asm/tboot.h | 197 ++++++++++++++++++++
arch/x86/kernel/Makefile | 1
arch/x86/kernel/setup.c | 4
arch/x86/kernel/tboot.c | 379 +++++++++++++++++++++++++++++++++++++++
security/Kconfig | 30 +++
9 files changed, 827 insertions(+), 1 deletion(-)
Signed-off-by: Joseph Cihula <joseph.cihula@intel.com>
Signed-off-by: Shane Wang <shane.wang@intel.com>
Signed-off-by: Gang Wei <gang.wei@intel.com>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2009-07-01 09:30:59 +07:00
|
|
|
initial state as well as data reset protection. This is used to
|
|
|
|
create a robust initial kernel measurement and verification, which
|
|
|
|
helps to ensure that kernel security mechanisms are functioning
|
|
|
|
correctly. This level of protection requires a root of trust outside
|
|
|
|
of the kernel itself.
|
|
|
|
|
|
|
|
Intel TXT also helps solve real end user concerns about having
|
|
|
|
confidence that their hardware is running the VMM or kernel that
|
2009-08-12 22:00:40 +07:00
|
|
|
it was configured with, especially since they may be responsible for
|
x86, intel_txt: Intel TXT boot support
This patch adds kernel configuration and boot support for Intel Trusted
Execution Technology (Intel TXT).
Intel's technology for safer computing, Intel Trusted Execution
Technology (Intel TXT), defines platform-level enhancements that
provide the building blocks for creating trusted platforms.
Intel TXT was formerly known by the code name LaGrande Technology (LT).
Intel TXT in Brief:
o Provides dynamic root of trust for measurement (DRTM)
o Data protection in case of improper shutdown
o Measurement and verification of launched environment
Intel TXT is part of the vPro(TM) brand and is also available some
non-vPro systems. It is currently available on desktop systems based on
the Q35, X38, Q45, and Q43 Express chipsets (e.g. Dell Optiplex 755, HP
dc7800, etc.) and mobile systems based on the GM45, PM45, and GS45
Express chipsets.
For more information, see http://www.intel.com/technology/security/.
This site also has a link to the Intel TXT MLE Developers Manual, which
has been updated for the new released platforms.
A much more complete description of how these patches support TXT, how to
configure a system for it, etc. is in the Documentation/intel_txt.txt file
in this patch.
This patch provides the TXT support routines for complete functionality,
documentation for TXT support and for the changes to the boot_params structure,
and boot detection of a TXT launch. Attempts to shutdown (reboot, Sx) the system
will result in platform resets; subsequent patches will support these shutdown modes
properly.
Documentation/intel_txt.txt | 210 +++++++++++++++++++++
Documentation/x86/zero-page.txt | 1
arch/x86/include/asm/bootparam.h | 3
arch/x86/include/asm/fixmap.h | 3
arch/x86/include/asm/tboot.h | 197 ++++++++++++++++++++
arch/x86/kernel/Makefile | 1
arch/x86/kernel/setup.c | 4
arch/x86/kernel/tboot.c | 379 +++++++++++++++++++++++++++++++++++++++
security/Kconfig | 30 +++
9 files changed, 827 insertions(+), 1 deletion(-)
Signed-off-by: Joseph Cihula <joseph.cihula@intel.com>
Signed-off-by: Shane Wang <shane.wang@intel.com>
Signed-off-by: Gang Wei <gang.wei@intel.com>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2009-07-01 09:30:59 +07:00
|
|
|
providing such assurances to VMs and services running on it.
|
|
|
|
|
|
|
|
See <http://www.intel.com/technology/security/> for more information
|
|
|
|
about Intel(R) TXT.
|
|
|
|
See <http://tboot.sourceforge.net> for more information about tboot.
|
|
|
|
See Documentation/intel_txt.txt for a description of how to enable
|
|
|
|
Intel TXT support in a kernel boot.
|
|
|
|
|
|
|
|
If you are unsure as to whether this is required, answer N.
|
|
|
|
|
2009-07-31 23:54:11 +07:00
|
|
|
config LSM_MMAP_MIN_ADDR
|
2009-08-19 03:14:29 +07:00
|
|
|
int "Low address space for LSM to protect from user allocation"
|
2009-07-31 23:54:11 +07:00
|
|
|
depends on SECURITY && SECURITY_SELINUX
|
2014-02-04 09:15:32 +07:00
|
|
|
default 32768 if ARM || (ARM64 && COMPAT)
|
2009-08-19 00:47:37 +07:00
|
|
|
default 65536
|
2009-07-31 23:54:11 +07:00
|
|
|
help
|
|
|
|
This is the portion of low virtual memory which should be protected
|
|
|
|
from userspace allocation. Keeping a user from writing to low pages
|
|
|
|
can help reduce the impact of kernel NULL pointer bugs.
|
|
|
|
|
|
|
|
For most ia64, ppc64 and x86 users with lots of address space
|
|
|
|
a value of 65536 is reasonable and should cause no problems.
|
|
|
|
On arm and other archs it should not be higher than 32768.
|
|
|
|
Programs which use vm86 functionality or have some need to map
|
|
|
|
this low address space will need the permission specific to the
|
|
|
|
systems running LSM.
|
|
|
|
|
2016-06-08 01:05:33 +07:00
|
|
|
config HAVE_HARDENED_USERCOPY_ALLOCATOR
|
|
|
|
bool
|
|
|
|
help
|
|
|
|
The heap allocator implements __check_heap_object() for
|
|
|
|
validating memory ranges against heap object sizes in
|
|
|
|
support of CONFIG_HARDENED_USERCOPY.
|
|
|
|
|
|
|
|
config HARDENED_USERCOPY
|
|
|
|
bool "Harden memory copies between kernel and userspace"
|
2016-08-20 02:47:01 +07:00
|
|
|
depends on HAVE_HARDENED_USERCOPY_ALLOCATOR
|
2016-06-08 01:05:33 +07:00
|
|
|
select BUG
|
2017-12-02 04:19:39 +07:00
|
|
|
imply STRICT_DEVMEM
|
2016-06-08 01:05:33 +07:00
|
|
|
help
|
|
|
|
This option checks for obviously wrong memory regions when
|
|
|
|
copying memory to/from the kernel (via copy_to_user() and
|
|
|
|
copy_from_user() functions) by rejecting memory ranges that
|
|
|
|
are larger than the specified heap object, span multiple
|
2017-05-03 01:27:41 +07:00
|
|
|
separately allocated pages, are not on the process stack,
|
2016-06-08 01:05:33 +07:00
|
|
|
or are part of the kernel text. This kills entire classes
|
|
|
|
of heap overflow exploits and similar kernel memory exposures.
|
|
|
|
|
2017-12-01 04:04:32 +07:00
|
|
|
config HARDENED_USERCOPY_FALLBACK
|
|
|
|
bool "Allow usercopy whitelist violations to fallback to object size"
|
|
|
|
depends on HARDENED_USERCOPY
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
This is a temporary option that allows missing usercopy whitelists
|
|
|
|
to be discovered via a WARN() to the kernel log, instead of
|
|
|
|
rejecting the copy, falling back to non-whitelisted hardened
|
|
|
|
usercopy that checks the slab allocation size instead of the
|
|
|
|
whitelist size. This option will be removed once it seems like
|
|
|
|
all missing usercopy whitelists have been identified and fixed.
|
|
|
|
Booting with "slab_common.usercopy_fallback=Y/N" can change
|
|
|
|
this setting.
|
|
|
|
|
2016-09-07 23:54:34 +07:00
|
|
|
config HARDENED_USERCOPY_PAGESPAN
|
|
|
|
bool "Refuse to copy allocations that span multiple pages"
|
|
|
|
depends on HARDENED_USERCOPY
|
2016-09-08 04:03:49 +07:00
|
|
|
depends on EXPERT
|
2016-09-07 23:54:34 +07:00
|
|
|
help
|
|
|
|
When a multi-page allocation is done without __GFP_COMP,
|
|
|
|
hardened usercopy will reject attempts to copy it. There are,
|
|
|
|
however, several cases of this in the kernel that have not all
|
|
|
|
been removed. This config is intended to be used only while
|
|
|
|
trying to find such users.
|
|
|
|
|
include/linux/string.h: add the option of fortified string.h functions
This adds support for compiling with a rough equivalent to the glibc
_FORTIFY_SOURCE=1 feature, providing compile-time and runtime buffer
overflow checks for string.h functions when the compiler determines the
size of the source or destination buffer at compile-time. Unlike glibc,
it covers buffer reads in addition to writes.
GNU C __builtin_*_chk intrinsics are avoided because they would force a
much more complex implementation. They aren't designed to detect read
overflows and offer no real benefit when using an implementation based
on inline checks. Inline checks don't add up to much code size and
allow full use of the regular string intrinsics while avoiding the need
for a bunch of _chk functions and per-arch assembly to avoid wrapper
overhead.
This detects various overflows at compile-time in various drivers and
some non-x86 core kernel code. There will likely be issues caught in
regular use at runtime too.
Future improvements left out of initial implementation for simplicity,
as it's all quite optional and can be done incrementally:
* Some of the fortified string functions (strncpy, strcat), don't yet
place a limit on reads from the source based on __builtin_object_size of
the source buffer.
* Extending coverage to more string functions like strlcat.
* It should be possible to optionally use __builtin_object_size(x, 1) for
some functions (C strings) to detect intra-object overflows (like
glibc's _FORTIFY_SOURCE=2), but for now this takes the conservative
approach to avoid likely compatibility issues.
* The compile-time checks should be made available via a separate config
option which can be enabled by default (or always enabled) once enough
time has passed to get the issues it catches fixed.
Kees said:
"This is great to have. While it was out-of-tree code, it would have
blocked at least CVE-2016-3858 from being exploitable (improper size
argument to strlcpy()). I've sent a number of fixes for
out-of-bounds-reads that this detected upstream already"
[arnd@arndb.de: x86: fix fortified memcpy]
Link: http://lkml.kernel.org/r/20170627150047.660360-1-arnd@arndb.de
[keescook@chromium.org: avoid panic() in favor of BUG()]
Link: http://lkml.kernel.org/r/20170626235122.GA25261@beast
[keescook@chromium.org: move from -mm, add ARCH_HAS_FORTIFY_SOURCE, tweak Kconfig help]
Link: http://lkml.kernel.org/r/20170526095404.20439-1-danielmicay@gmail.com
Link: http://lkml.kernel.org/r/1497903987-21002-8-git-send-email-keescook@chromium.org
Signed-off-by: Daniel Micay <danielmicay@gmail.com>
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Kees Cook <keescook@chromium.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Daniel Axtens <dja@axtens.net>
Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Chris Metcalf <cmetcalf@ezchip.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2017-07-13 04:36:10 +07:00
|
|
|
config FORTIFY_SOURCE
|
|
|
|
bool "Harden common str/mem functions against buffer overflows"
|
|
|
|
depends on ARCH_HAS_FORTIFY_SOURCE
|
|
|
|
help
|
|
|
|
Detect overflows of buffers in common string and memory functions
|
|
|
|
where the compiler can determine and validate the buffer sizes.
|
|
|
|
|
2017-01-16 22:22:39 +07:00
|
|
|
config STATIC_USERMODEHELPER
|
|
|
|
bool "Force all usermode helper calls through a single binary"
|
|
|
|
help
|
|
|
|
By default, the kernel can call many different userspace
|
|
|
|
binary programs through the "usermode helper" kernel
|
|
|
|
interface. Some of these binaries are statically defined
|
|
|
|
either in the kernel code itself, or as a kernel configuration
|
|
|
|
option. However, some of these are dynamically created at
|
|
|
|
runtime, or can be modified after the kernel has started up.
|
|
|
|
To provide an additional layer of security, route all of these
|
|
|
|
calls through a single executable that can not have its name
|
|
|
|
changed.
|
|
|
|
|
|
|
|
Note, it is up to this single binary to then call the relevant
|
|
|
|
"real" usermode helper binary, based on the first argument
|
|
|
|
passed to it. If desired, this program can filter and pick
|
|
|
|
and choose what real programs are called.
|
|
|
|
|
|
|
|
If you wish for all usermode helper programs are to be
|
|
|
|
disabled, choose this option and then set
|
|
|
|
STATIC_USERMODEHELPER_PATH to an empty string.
|
|
|
|
|
|
|
|
config STATIC_USERMODEHELPER_PATH
|
|
|
|
string "Path to the static usermode helper binary"
|
|
|
|
depends on STATIC_USERMODEHELPER
|
|
|
|
default "/sbin/usermode-helper"
|
|
|
|
help
|
|
|
|
The binary called by the kernel when any usermode helper
|
|
|
|
program is wish to be run. The "real" application's name will
|
|
|
|
be in the first argument passed to this program on the command
|
|
|
|
line.
|
|
|
|
|
|
|
|
If you wish for all usermode helper programs to be disabled,
|
|
|
|
specify an empty string here (i.e. "").
|
|
|
|
|
2005-04-17 05:20:36 +07:00
|
|
|
source security/selinux/Kconfig
|
Smack: Simplified Mandatory Access Control Kernel
Smack is the Simplified Mandatory Access Control Kernel.
Smack implements mandatory access control (MAC) using labels
attached to tasks and data containers, including files, SVIPC,
and other tasks. Smack is a kernel based scheme that requires
an absolute minimum of application support and a very small
amount of configuration data.
Smack uses extended attributes and
provides a set of general mount options, borrowing technics used
elsewhere. Smack uses netlabel for CIPSO labeling. Smack provides
a pseudo-filesystem smackfs that is used for manipulation of
system Smack attributes.
The patch, patches for ls and sshd, a README, a startup script,
and x86 binaries for ls and sshd are also available on
http://www.schaufler-ca.com
Development has been done using Fedora Core 7 in a virtual machine
environment and on an old Sony laptop.
Smack provides mandatory access controls based on the label attached
to a task and the label attached to the object it is attempting to
access. Smack labels are deliberately short (1-23 characters) text
strings. Single character labels using special characters are reserved
for system use. The only operation applied to Smack labels is equality
comparison. No wildcards or expressions, regular or otherwise, are
used. Smack labels are composed of printable characters and may not
include "/".
A file always gets the Smack label of the task that created it.
Smack defines and uses these labels:
"*" - pronounced "star"
"_" - pronounced "floor"
"^" - pronounced "hat"
"?" - pronounced "huh"
The access rules enforced by Smack are, in order:
1. Any access requested by a task labeled "*" is denied.
2. A read or execute access requested by a task labeled "^"
is permitted.
3. A read or execute access requested on an object labeled "_"
is permitted.
4. Any access requested on an object labeled "*" is permitted.
5. Any access requested by a task on an object with the same
label is permitted.
6. Any access requested that is explicitly defined in the loaded
rule set is permitted.
7. Any other access is denied.
Rules may be explicitly defined by writing subject,object,access
triples to /smack/load.
Smack rule sets can be easily defined that describe Bell&LaPadula
sensitivity, Biba integrity, and a variety of interesting
configurations. Smack rule sets can be modified on the fly to
accommodate changes in the operating environment or even the time
of day.
Some practical use cases:
Hierarchical levels. The less common of the two usual uses
for MLS systems is to define hierarchical levels, often
unclassified, confidential, secret, and so on. To set up smack
to support this, these rules could be defined:
C Unclass rx
S C rx
S Unclass rx
TS S rx
TS C rx
TS Unclass rx
A TS process can read S, C, and Unclass data, but cannot write it.
An S process can read C and Unclass. Note that specifying that
TS can read S and S can read C does not imply TS can read C, it
has to be explicitly stated.
Non-hierarchical categories. This is the more common of the
usual uses for an MLS system. Since the default rule is that a
subject cannot access an object with a different label no
access rules are required to implement compartmentalization.
A case that the Bell & LaPadula policy does not allow is demonstrated
with this Smack access rule:
A case that Bell&LaPadula does not allow that Smack does:
ESPN ABC r
ABC ESPN r
On my portable video device I have two applications, one that
shows ABC programming and the other ESPN programming. ESPN wants
to show me sport stories that show up as news, and ABC will
only provide minimal information about a sports story if ESPN
is covering it. Each side can look at the other's info, neither
can change the other. Neither can see what FOX is up to, which
is just as well all things considered.
Another case that I especially like:
SatData Guard w
Guard Publish w
A program running with the Guard label opens a UDP socket and
accepts messages sent by a program running with a SatData label.
The Guard program inspects the message to ensure it is wholesome
and if it is sends it to a program running with the Publish label.
This program then puts the information passed in an appropriate
place. Note that the Guard program cannot write to a Publish
file system object because file system semanitic require read as
well as write.
The four cases (categories, levels, mutual read, guardbox) here
are all quite real, and problems I've been asked to solve over
the years. The first two are easy to do with traditonal MLS systems
while the last two you can't without invoking privilege, at least
for a while.
Signed-off-by: Casey Schaufler <casey@schaufler-ca.com>
Cc: Joshua Brindle <method@manicmethod.com>
Cc: Paul Moore <paul.moore@hp.com>
Cc: Stephen Smalley <sds@tycho.nsa.gov>
Cc: Chris Wright <chrisw@sous-sol.org>
Cc: James Morris <jmorris@namei.org>
Cc: "Ahmed S. Darwish" <darwish.07@gmail.com>
Cc: Andrew G. Morgan <morgan@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-02-05 13:29:50 +07:00
|
|
|
source security/smack/Kconfig
|
2009-02-05 15:18:17 +07:00
|
|
|
source security/tomoyo/Kconfig
|
2010-07-30 04:48:08 +07:00
|
|
|
source security/apparmor/Kconfig
|
2016-04-21 05:46:28 +07:00
|
|
|
source security/loadpin/Kconfig
|
2011-12-22 03:17:04 +07:00
|
|
|
source security/yama/Kconfig
|
2005-04-17 05:20:36 +07:00
|
|
|
|
2011-03-10 02:13:22 +07:00
|
|
|
source security/integrity/Kconfig
|
2009-02-04 21:06:58 +07:00
|
|
|
|
2009-11-06 08:03:20 +07:00
|
|
|
choice
|
|
|
|
prompt "Default security module"
|
|
|
|
default DEFAULT_SECURITY_SELINUX if SECURITY_SELINUX
|
|
|
|
default DEFAULT_SECURITY_SMACK if SECURITY_SMACK
|
|
|
|
default DEFAULT_SECURITY_TOMOYO if SECURITY_TOMOYO
|
2010-07-30 04:48:08 +07:00
|
|
|
default DEFAULT_SECURITY_APPARMOR if SECURITY_APPARMOR
|
2009-11-06 08:03:20 +07:00
|
|
|
default DEFAULT_SECURITY_DAC
|
|
|
|
|
|
|
|
help
|
|
|
|
Select the security module that will be used by default if the
|
|
|
|
kernel parameter security= is not specified.
|
|
|
|
|
|
|
|
config DEFAULT_SECURITY_SELINUX
|
|
|
|
bool "SELinux" if SECURITY_SELINUX=y
|
|
|
|
|
|
|
|
config DEFAULT_SECURITY_SMACK
|
|
|
|
bool "Simplified Mandatory Access Control" if SECURITY_SMACK=y
|
|
|
|
|
|
|
|
config DEFAULT_SECURITY_TOMOYO
|
|
|
|
bool "TOMOYO" if SECURITY_TOMOYO=y
|
|
|
|
|
2010-07-30 04:48:08 +07:00
|
|
|
config DEFAULT_SECURITY_APPARMOR
|
|
|
|
bool "AppArmor" if SECURITY_APPARMOR=y
|
|
|
|
|
2009-11-06 08:03:20 +07:00
|
|
|
config DEFAULT_SECURITY_DAC
|
|
|
|
bool "Unix Discretionary Access Controls"
|
|
|
|
|
|
|
|
endchoice
|
|
|
|
|
|
|
|
config DEFAULT_SECURITY
|
|
|
|
string
|
|
|
|
default "selinux" if DEFAULT_SECURITY_SELINUX
|
|
|
|
default "smack" if DEFAULT_SECURITY_SMACK
|
|
|
|
default "tomoyo" if DEFAULT_SECURITY_TOMOYO
|
2010-07-30 04:48:08 +07:00
|
|
|
default "apparmor" if DEFAULT_SECURITY_APPARMOR
|
2009-11-06 08:03:20 +07:00
|
|
|
default "" if DEFAULT_SECURITY_DAC
|
|
|
|
|
2005-04-17 05:20:36 +07:00
|
|
|
endmenu
|
|
|
|
|