2021-01-11 21:17:13 -05:00
|
|
|
|
# Enhances miscellaneous security settings
|
2015-12-15 16:05:03 -05:00
|
|
|
|
|
2021-01-11 21:17:13 -05:00
|
|
|
|
## Kernel hardening
|
2019-09-15 10:07:50 -04:00
|
|
|
|
|
2021-01-11 21:17:13 -05:00
|
|
|
|
This section is inspired by the Kernel Self Protection Project (KSPP). It
|
2023-12-25 08:37:23 -05:00
|
|
|
|
implements all recommended Linux kernel settings by the KSPP and many more.
|
2019-09-15 10:07:50 -04:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project
|
2019-09-15 10:07:50 -04:00
|
|
|
|
|
2021-01-11 21:17:13 -05:00
|
|
|
|
### sysctl
|
2016-11-21 12:42:55 -05:00
|
|
|
|
|
2021-01-11 21:17:13 -05:00
|
|
|
|
sysctl settings are configured via the `/etc/sysctl.d/30_security-misc.conf`
|
|
|
|
|
configuration file.
|
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- A kernel pointer points to a specific location in kernel memory. These can
|
|
|
|
|
be very useful in exploiting the kernel so they are restricted to
|
|
|
|
|
`CAP_SYSLOG`.
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- The kernel logs are restricted to `CAP_SYSLOG` as they can often leak
|
|
|
|
|
sensitive information such as kernel pointers.
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- The `ptrace()` system call is restricted to `CAP_SYS_PTRACE`.
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- eBPF is restricted to `CAP_BPF` (`CAP_SYS_ADMIN` on kernel versions prior to
|
|
|
|
|
5.8) and JIT hardening techniques such as constant blinding are enabled.
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Restricts performance events to `CAP_PERFMON` (`CAP_SYS_ADMIN` on kernel
|
|
|
|
|
versions prior to 5.8).
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Restricts loading line disciplines to `CAP_SYS_MODULE` to prevent
|
|
|
|
|
unprivileged attackers from loading vulnerable line disciplines with the
|
|
|
|
|
`TIOCSETD` ioctl which has been abused in a number of exploits before.
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Restricts the `userfaultfd()` syscall to `CAP_SYS_PTRACE` as `userfaultfd()`
|
|
|
|
|
is often abused to exploit use-after-free flaws.
|
2019-06-23 15:51:53 -04:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Kexec is disabled as it can be used to load a malicious kernel and gain
|
|
|
|
|
arbitrary code execution in kernel mode.
|
2019-06-23 15:51:53 -04:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Randomises the addresses for mmap base, heap, stack, and VDSO pages.
|
2022-07-13 08:25:53 -04:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Prevents unintentional writes to attacker-controlled files.
|
2019-06-23 15:51:53 -04:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Prevents common symlink and hardlink TOCTOU races. `<!--
|
|
|
|
|
* Restricts the SysRq key so it can only be used for shutdowns and the
|
|
|
|
|
Secure Attention Key.
|
|
|
|
|
-->`{=html}
|
|
|
|
|
|
|
|
|
|
- Disables SysRq completely.
|
2023-11-05 14:41:01 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- The kernel is only allowed to swap if it is absolutely necessary. This
|
|
|
|
|
prevents writing potentially sensitive contents of memory to disk.
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- TCP timestamps are disabled as it can allow detecting the system time.
|
2020-02-15 15:28:30 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Enforces the logging of martian packets, those with a source address which
|
|
|
|
|
is blatantly wrong.
|
2023-11-04 10:33:35 -04:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Set coredump file name based on core_pattern value instead of the default of
|
|
|
|
|
naming it 'core'.
|
2023-11-04 10:33:35 -04:00
|
|
|
|
|
2023-05-08 09:45:18 -04:00
|
|
|
|
### mmap ASLR
|
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- The bits of entropy used for mmap ASLR are maxed out via
|
|
|
|
|
`/usr/libexec/security-misc/mmap-rnd-bits` (set to the values of
|
|
|
|
|
`CONFIG_ARCH_MMAP_RND_BITS_MAX` and `CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX`
|
|
|
|
|
that the kernel was built with), therefore improving its effectiveness.
|
2023-05-08 09:45:18 -04:00
|
|
|
|
|
2021-01-11 21:17:13 -05:00
|
|
|
|
### Boot parameters
|
2019-06-23 15:51:53 -04:00
|
|
|
|
|
2022-07-13 08:25:53 -04:00
|
|
|
|
Boot parameters are outlined in configuration files located in the
|
|
|
|
|
`etc/default/grub.d/` directory.
|
2019-10-14 06:10:08 -04:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Slab merging is disabled which significantly increases the difficulty of
|
|
|
|
|
heap exploitation by preventing overwriting objects from merged caches and
|
|
|
|
|
by making it harder to influence slab cache layout.
|
2019-06-23 15:51:53 -04:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Memory zeroing at allocation and free time is enabled to mitigate some
|
|
|
|
|
use-after-free vulnerabilities and erase sensitive information in memory.
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Page allocator freelist randomization is enabled.
|
2019-06-23 15:51:53 -04:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Kernel Page Table Isolation is enabled to mitigate Meltdown and increase
|
|
|
|
|
KASLR effectiveness.
|
2019-06-23 15:51:53 -04:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- vsyscalls are disabled as they are obsolete, are at fixed addresses and
|
|
|
|
|
thus, are a potential target for ROP.
|
2020-01-30 01:22:06 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- The kernel panics on oopses to thwart certain kernel exploits.
|
2019-07-15 09:03:30 -04:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Enables randomisation of the kernel stack offset on syscall entries.
|
2022-07-13 08:25:53 -04:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- All mitigations for known CPU vulnerabilities are enabled and SMT is
|
|
|
|
|
disabled.
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- IOMMU is enabled to prevent DMA attacks along with strict enforcement of
|
|
|
|
|
IOMMU TLB invalidation so devices will never be able to access stale data
|
|
|
|
|
contents.
|
2022-07-13 08:25:53 -04:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Distrust the 'randomly' generated CPU and bootloader seeds.
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
2023-11-03 14:53:40 -04:00
|
|
|
|
### Kernel Modules
|
2023-12-25 08:37:23 -05:00
|
|
|
|
|
2023-11-03 14:53:40 -04:00
|
|
|
|
#### Kernel Module Signature Verification
|
|
|
|
|
|
|
|
|
|
Not yet due to issues:
|
2023-11-03 15:55:17 -04:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- https://forums.whonix.org/t/enforce-kernel-module-software-signature-verification-module-signing-disallow-kernel-module-loading-by-default/7880/64
|
|
|
|
|
- https://github.com/dell/dkms/issues/359
|
2023-11-03 14:53:40 -04:00
|
|
|
|
|
|
|
|
|
See:
|
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- `/etc/default/grub.d/40_only_allow_signed_modules.cfg`
|
2023-11-03 14:53:40 -04:00
|
|
|
|
|
2023-11-04 10:33:35 -04:00
|
|
|
|
#### Disables the loading of new modules to the kernel after the fact
|
|
|
|
|
|
2023-11-05 20:54:43 -05:00
|
|
|
|
Not yet due to issues:
|
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- https://github.com/Kicksecure/security-misc/pull/152
|
2023-11-05 20:54:43 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
A systemd service dynamically sets the kernel parameter `modules_disabled` to 1,
|
|
|
|
|
preventing new modules from being loaded. Since this isn't configured directly
|
|
|
|
|
within systemctl, it does not break the loading of legitimate and necessary
|
|
|
|
|
modules for the user, like drivers etc., given they are plugged in on startup.
|
2023-11-04 10:33:35 -04:00
|
|
|
|
|
2023-11-03 14:53:40 -04:00
|
|
|
|
#### Disables and blacklists kernel modules
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
Certain kernel modules are disabled and blacklisted by default to reduce attack
|
|
|
|
|
surface via the `/etc/modprobe.d/30_security-misc.conf` configuration file.
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Deactivates Netfilter's connection tracking helper - this module increases
|
|
|
|
|
kernel attack surface by enabling superfluous functionality such as IRC
|
|
|
|
|
parsing in the kernel. Hence, this feature is disabled.
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Thunderbolt and numerous FireWire kernel modules are also disabled as they
|
|
|
|
|
are often vulnerable to DMA attacks.
|
2022-07-12 03:18:47 -04:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- The MSR kernel module is disabled to prevent CPU MSRs from being abused to
|
|
|
|
|
write to arbitrary memory.
|
2022-07-12 03:18:47 -04:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Uncommon network protocols are blacklisted. This includes:
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
2023-12-25 08:45:20 -05:00
|
|
|
|
- DCCP - Datagram Congestion Control Protocol
|
|
|
|
|
- SCTP - Stream Control Transmission Protocol
|
|
|
|
|
- RDS - Reliable Datagram Sockets
|
|
|
|
|
- TIPC - Transparent Inter-process Communication
|
|
|
|
|
- HDLC - High-Level Data Link Control
|
|
|
|
|
- AX25 - Amateur X.25
|
|
|
|
|
- NetRom
|
|
|
|
|
- X25
|
|
|
|
|
- ROSE
|
|
|
|
|
- DECnet
|
|
|
|
|
- Econet
|
|
|
|
|
- af_802154 - IEEE 802.15.4
|
|
|
|
|
- IPX - Internetwork Packet Exchange
|
|
|
|
|
- AppleTalk
|
|
|
|
|
- PSNAP - Subnetwork Access Protocol
|
|
|
|
|
- p8023 - Novell raw IEEE 802.3
|
|
|
|
|
- p8022 - IEEE 802.2
|
|
|
|
|
- CAN - Controller Area Network
|
|
|
|
|
- ATM
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Disables a large array of uncommon file systems and network file systems
|
|
|
|
|
that reduces the attack surface especially against legacy approaches.
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- The vivid kernel module is only required for testing and has been the cause
|
|
|
|
|
of multiple vulnerabilities so it is disabled.
|
2019-10-05 05:39:05 -04:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Provides some disabling of the interface between the [Intel Management
|
|
|
|
|
Engine (ME)](https://www.kernel.org/doc/html/latest/driver-api/mei/mei.html)
|
|
|
|
|
and the OS.
|
2022-07-07 05:28:30 -04:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Incorporates much of
|
|
|
|
|
[Ubuntu's](https://git.launchpad.net/ubuntu/+source/kmod/tree/debian/modprobe.d?h=ubuntu/disco)
|
|
|
|
|
default blacklist of modules to be blocked from automatically loading.
|
|
|
|
|
However, they are still permitted to load.
|
2022-07-07 15:28:09 -04:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Blocks automatic loading of the modules needed to use of CD-ROM devices by
|
|
|
|
|
default. Not completely disabled yet.
|
2023-11-05 14:41:01 -05:00
|
|
|
|
|
2021-01-11 21:17:13 -05:00
|
|
|
|
### Other
|
2019-12-23 03:57:36 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- A systemd service clears the System.map file on boot as these contain kernel
|
|
|
|
|
pointers. The file is completely overwritten with zeroes to ensure it cannot
|
|
|
|
|
be recovered. See:
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
|
|
|
|
`/etc/kernel/postinst.d/30_remove-system-map`
|
|
|
|
|
|
|
|
|
|
`/lib/systemd/system/remove-system-map.service`
|
|
|
|
|
|
2021-08-03 12:56:31 -04:00
|
|
|
|
`/usr/libexec/security-misc/remove-system.map`
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Coredumps are disabled as they may contain important information such as
|
|
|
|
|
encryption keys or passwords. See:
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
|
|
|
|
`/etc/security/limits.d/30_security-misc.conf`
|
|
|
|
|
|
|
|
|
|
`/etc/sysctl.d/30_security-misc.conf`
|
2019-12-23 03:57:36 -05:00
|
|
|
|
|
2021-01-11 21:17:13 -05:00
|
|
|
|
`/lib/systemd/coredump.conf.d/30_security-misc.conf`
|
2020-01-11 15:17:06 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- An initramfs hook sets the sysctl values in `/etc/sysctl.conf` and
|
|
|
|
|
`/etc/sysctl.d` before init is executed so sysctl hardening is enabled as
|
|
|
|
|
early as possible. This is implemented for `initramfs-tools` only because
|
|
|
|
|
this is not needed for `dracut` because `dracut` does that by default, at
|
|
|
|
|
least on `systemd` enabled systems. Not researched for non-`systemd` systems
|
|
|
|
|
by the author of this part of the readme.
|
2020-01-15 10:08:57 -05:00
|
|
|
|
|
2023-11-05 14:41:01 -05:00
|
|
|
|
## Network hardening
|
2020-01-14 09:18:30 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- TCP syncookies are enabled to prevent SYN flood attacks.
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- ICMP redirect acceptance, ICMP redirect sending, source routing and IPv6
|
|
|
|
|
router advertisements are disabled to prevent man-in-the-middle attacks.
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- The kernel is configured to ignore all ICMP requests to avoid Smurf attacks,
|
|
|
|
|
make the device more difficult to enumerate on the network and prevent clock
|
|
|
|
|
fingerprinting through ICMP timestamps.
|
2020-02-15 15:28:30 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- RFC1337 is enabled to protect against time-wait assassination attacks by
|
|
|
|
|
dropping RST packets for sockets in the time-wait state.
|
2020-02-15 15:28:30 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Reverse path filtering is enabled to prevent IP spoofing and mitigate
|
|
|
|
|
vulnerabilities such as CVE-2019-14899.
|
2020-03-03 09:07:42 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Unlike version 4, IPv6 addresses can provide information not only about the
|
|
|
|
|
originating network, but also the originating device. We prevent this from
|
|
|
|
|
happening by enabling the respective privacy extensions for IPv6.
|
2023-11-05 14:41:01 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- In addition, we deny the capability to track the originating device in the
|
|
|
|
|
network at all, by using randomized MAC addresses per connection per
|
|
|
|
|
default.
|
2023-11-04 10:33:35 -04:00
|
|
|
|
|
2023-11-05 14:54:05 -05:00
|
|
|
|
See:
|
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- `/usr/lib/NetworkManager/conf.d/80_ipv6-privacy.conf`
|
|
|
|
|
- `/usr/lib/NetworkManager/conf.d/80_randomize-mac.conf`
|
|
|
|
|
- `/usr/lib/systemd/networkd.conf.d/80_ipv6-privacy-extensions.conf`
|
2023-11-05 14:54:05 -05:00
|
|
|
|
|
2023-11-05 14:41:01 -05:00
|
|
|
|
## Network & Bluetooth hardening
|
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Bluetooth is 'enabled' for the system. Unlike the usual default behavior, we
|
|
|
|
|
start bluetooth turned off on system start and it stays that way unless the
|
|
|
|
|
user explicitly chooses to turn bluetooth on. The user is left with the
|
|
|
|
|
freedom to easily switch bluetooth on and off the usual way with his own
|
|
|
|
|
discretion. We set significantly more private defaults for bluetooth
|
|
|
|
|
connections by enforcing private addresses and strict timeout settings for
|
|
|
|
|
discoverability and visibility. That being said, the most secure and private
|
|
|
|
|
bluetooth connection might inherently come with risks by its nature and may
|
|
|
|
|
be prone to exploits, as it has a history of having new security
|
|
|
|
|
vulnurabilities often. So users are recommended to choose not to use
|
|
|
|
|
bluetooth when given the option.
|
2023-11-05 14:54:05 -05:00
|
|
|
|
|
|
|
|
|
See:
|
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- `/etc/bluetooth/30_security-misc.conf`
|
|
|
|
|
- https://github.com/Kicksecure/security-misc/pull/145
|
2023-11-04 10:33:35 -04:00
|
|
|
|
|
2021-01-11 21:17:13 -05:00
|
|
|
|
## Entropy collection improvements
|
2019-11-23 09:06:28 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- The `jitterentropy_rng` kernel module is loaded as early as possible during
|
|
|
|
|
boot to gather more entropy via the
|
|
|
|
|
`/usr/lib/modules-load.d/30_security-misc.conf` configuration file.
|
2019-11-23 09:06:28 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Distrusts the CPU for initial entropy at boot as it is not possible to
|
|
|
|
|
audit, may contain weaknesses or a backdoor. For references, see:
|
|
|
|
|
`/etc/default/grub.d/40_distrust_cpu.cfg`
|
2020-02-25 02:08:10 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Gathers more entropy during boot if using the linux-hardened kernel patch.
|
2019-12-06 09:30:05 -05:00
|
|
|
|
|
2021-01-11 21:17:13 -05:00
|
|
|
|
## Restrictive mount options
|
2019-12-06 09:30:05 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
A systemd service is triggered on boot to remount all sensitive partitions and
|
|
|
|
|
directories with significantly more secure hardened mount options. Since this
|
|
|
|
|
would require manual tuning for a given specific system, we handle it by
|
|
|
|
|
creating a very solid configuration file for that very system on package
|
|
|
|
|
install.
|
2023-11-04 10:33:35 -04:00
|
|
|
|
|
2021-01-12 03:24:11 -05:00
|
|
|
|
Not enabled by default yet. In development. Help welcome.
|
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- https://github.com/Kicksecure/security-misc/pull/152
|
|
|
|
|
- https://forums.whonix.org/t/re-mount-home-and-other-with-noexec-and-nosuid-among-other-useful-mount-options-for-better-security/
|
2021-01-12 03:24:11 -05:00
|
|
|
|
|
2021-01-11 21:17:13 -05:00
|
|
|
|
## Root access restrictions
|
2019-07-13 12:29:10 -04:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- `su` is restricted to only users within the group `sudo` which prevents
|
|
|
|
|
users from using `su` to gain root access or to switch user accounts -
|
|
|
|
|
`/usr/share/pam-configs/wheel-security-misc` (which results in a change in
|
|
|
|
|
file `/etc/pam.d/common-auth`).
|
2019-07-31 11:15:30 -04:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Add user `root` to group `sudo`. This is required due to the above
|
|
|
|
|
restriction so that logging in from a virtual console is still possible -
|
|
|
|
|
`debian/security-misc.postinst`
|
2019-07-31 11:15:30 -04:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Abort login for users with locked passwords -
|
|
|
|
|
`/usr/libexec/security-misc/pam-abort-on-locked-password`.
|
2019-08-17 06:53:45 -04:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Logging into the root account from a virtual, serial, whatnot console is
|
|
|
|
|
prevented by shipping an existing and empty `/etc/securetty` file (deletion
|
|
|
|
|
of `/etc/securetty` has a different effect).
|
2019-08-15 11:08:48 -04:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
This package does not yet automatically lock the root account password. It is
|
|
|
|
|
not clear if this would be sane in such a package although, it is recommended to
|
|
|
|
|
lock and expire the root account.
|
2019-08-15 11:08:48 -04:00
|
|
|
|
|
2022-05-19 17:25:58 -04:00
|
|
|
|
In new Kicksecure builds, root account will be locked by package
|
2020-04-08 08:30:05 -04:00
|
|
|
|
dist-base-files.
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
|
|
|
|
See:
|
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- https://www.kicksecure.com/wiki/Root
|
|
|
|
|
- https://www.kicksecure.com/wiki/Dev/Permissions
|
|
|
|
|
- https://forums.whonix.org/t/restrict-root-access/7658
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
2019-07-17 17:06:17 -04:00
|
|
|
|
However, a locked root password will break rescue and emergency shell.
|
2023-12-25 08:37:23 -05:00
|
|
|
|
Therefore, this package enables passwordless rescue and emergency shell. This is
|
|
|
|
|
the same solution that Debian will likely adapt for Debian installer:
|
|
|
|
|
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=802211
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
|
|
|
|
See:
|
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- `/etc/systemd/system/emergency.service.d/override.conf`
|
|
|
|
|
- `/etc/systemd/system/rescue.service.d/override.conf`
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
2019-07-17 17:06:17 -04:00
|
|
|
|
Adverse security effects can be prevented by setting up BIOS password
|
2021-01-11 21:17:13 -05:00
|
|
|
|
protection, GRUB password protection and/or full disk encryption.
|
2019-07-17 17:06:17 -04:00
|
|
|
|
|
2021-01-11 21:17:13 -05:00
|
|
|
|
## Console lockdown
|
|
|
|
|
|
|
|
|
|
This uses pam_access to allow members of group `console` to use console but
|
|
|
|
|
restrict everyone else (except members of group `console-unrestricted`) from
|
2023-12-25 08:37:23 -05:00
|
|
|
|
using console with ancient, unpopular login methods such as `/bin/login` over
|
|
|
|
|
networks as this might be exploitable. (CVE-2001-0797)
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
This is not enabled by default in this package since this package does not know
|
|
|
|
|
which users shall be added to group 'console' and thus, would break console.
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
|
|
|
|
See:
|
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- `/usr/share/pam-configs/console-lockdown-security-misc`
|
|
|
|
|
- `/etc/security/access-security-misc.conf`
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
|
|
|
|
## Brute force attack protection
|
|
|
|
|
|
2021-08-10 15:11:01 -04:00
|
|
|
|
User accounts are locked after 50 failed login attempts using `pam_faillock`.
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
|
|
|
|
Informational output during Linux PAM:
|
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Show failed and remaining password attempts.
|
|
|
|
|
- Document unlock procedure if Linux user account got locked.
|
|
|
|
|
- Point out that there is no password feedback for `su`.
|
|
|
|
|
- Explain locked root account if locked.
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
|
|
|
|
See:
|
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- `/usr/share/pam-configs/tally2-security-misc`
|
|
|
|
|
- `/usr/libexec/security-misc/pam-info`
|
|
|
|
|
- `/usr/libexec/security-misc/pam-abort-on-locked-password`
|
2020-04-09 05:45:29 -04:00
|
|
|
|
|
2021-01-11 21:17:13 -05:00
|
|
|
|
## Access rights restrictions
|
|
|
|
|
|
|
|
|
|
### Strong user account separation
|
|
|
|
|
|
2023-11-03 10:44:48 -04:00
|
|
|
|
#### Permission Lockdown
|
|
|
|
|
|
2021-01-11 21:17:13 -05:00
|
|
|
|
Read, write and execute access for "others" are removed during package
|
2023-12-25 08:37:23 -05:00
|
|
|
|
installation, upgrade or PAM `mkhomedir` for all users who have home folders in
|
|
|
|
|
`/home` by running, for example:
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
chmod o-rwx /home/user
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
This will be done only once per folder in `/home` so users who wish to relax
|
|
|
|
|
file permissions are free to do so. This is to protect files in a home folder
|
|
|
|
|
that were previously created with lax file permissions prior to the installation
|
|
|
|
|
of this package.
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
|
|
|
|
See:
|
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- `debian/security-misc.postinst`
|
|
|
|
|
- `/usr/libexec/security-misc/permission-lockdown`
|
|
|
|
|
- `/usr/share/pam-configs/mkhomedir-security-misc`
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
2023-11-03 10:44:48 -04:00
|
|
|
|
#### umask
|
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
Default `umask` is set to `027` for files created by non-root users such as for
|
|
|
|
|
example user `user`.
|
2023-11-03 10:44:48 -04:00
|
|
|
|
|
|
|
|
|
This is doing using pam module `pam_mkhomedir.so umask=027`.
|
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
This means, files created by non-root users cannot be read by other non-root
|
|
|
|
|
users by default. While Permission Lockdown already protects the `/home` folder,
|
|
|
|
|
this protects other folders such as `/tmp`.
|
2023-11-03 10:44:48 -04:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
`group` read permissions are not removed. This is unnecessary due to Debian's
|
|
|
|
|
use of User Private Groups (UPGs). See also:
|
|
|
|
|
https://wiki.debian.org/UserPrivateGroups
|
2023-11-03 10:44:48 -04:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
Default `umask` is unchanged for root, because then configuration files created
|
|
|
|
|
in `/etc` by the system administrator would be unreadable by "others" and break
|
|
|
|
|
applications. Examples include `/etc/firefox-esr` and `/etc/thunderbird`.
|
2023-11-03 10:44:48 -04:00
|
|
|
|
|
|
|
|
|
See:
|
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- `/usr/share/pam-configs/umask-security-misc`
|
2023-11-03 10:44:48 -04:00
|
|
|
|
|
2021-01-11 21:17:13 -05:00
|
|
|
|
### SUID / SGID removal and permission hardening
|
|
|
|
|
|
2023-11-04 10:33:35 -04:00
|
|
|
|
#### SUID / SGID removal
|
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
A systemd service removes SUID / SGID bits from non-essential binaries as these
|
|
|
|
|
are often used in privilege escalation attacks.
|
2023-11-04 10:33:35 -04:00
|
|
|
|
|
|
|
|
|
#### File permission hardening
|
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
Various file permissions are reset with more secure and hardened defaults. These
|
|
|
|
|
include but are not limited to:
|
2023-11-04 10:33:35 -04:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Limiting `/home` and `/root` to the root only.
|
|
|
|
|
- Limiting crontab to root as well as all the configuration files for cron.
|
|
|
|
|
- Limiting the configuration for cups and ssh.
|
|
|
|
|
- Protecting the information of sudoers from others.
|
|
|
|
|
- Protecting various system relevant files and modules.
|
2023-11-05 14:41:01 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
```{=html}
|
2023-11-04 10:33:35 -04:00
|
|
|
|
<!--
|
2021-01-12 03:24:11 -05:00
|
|
|
|
Not enabled by default yet.
|
|
|
|
|
|
2021-01-11 21:17:13 -05:00
|
|
|
|
A systemd service removes SUID / SGID bits from non-essential binaries as
|
|
|
|
|
these are often used in privilege escalation attacks. It is disabled by
|
|
|
|
|
default for now during testing and can optionally be enabled by running
|
|
|
|
|
`systemctl enable permission-hardening.service` as root.
|
|
|
|
|
|
|
|
|
|
See:
|
|
|
|
|
|
2021-08-03 12:56:31 -04:00
|
|
|
|
* `/usr/libexec/security-misc/permission-hardening`
|
2021-01-11 21:17:13 -05:00
|
|
|
|
* `/lib/systemd/system/permission-hardening.service`
|
|
|
|
|
* `/etc/permission-hardening.d`
|
|
|
|
|
* https://forums.whonix.org/t/disable-suid-binaries/7706
|
2022-05-19 17:25:58 -04:00
|
|
|
|
* https://www.kicksecure.com/wiki/SUID_Disabler_and_Permission_Hardener
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
|
|
|
|
### Access rights relaxations
|
|
|
|
|
|
2021-01-12 03:24:11 -05:00
|
|
|
|
This is not enabled yet because hidepid is not enabled by default.
|
|
|
|
|
|
2021-01-11 21:17:13 -05:00
|
|
|
|
Calls to `pkexec` are redirected to `lxqt-sudo` because `pkexec` is
|
|
|
|
|
incompatible with `hidepid=2`.
|
|
|
|
|
|
|
|
|
|
See:
|
|
|
|
|
|
|
|
|
|
* `/usr/bin/pkexec.security-misc`
|
|
|
|
|
* https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=860040
|
|
|
|
|
* https://forums.whonix.org/t/cannot-use-pkexec/8129
|
2023-11-04 10:33:35 -04:00
|
|
|
|
-->
|
2023-12-25 08:37:23 -05:00
|
|
|
|
```
|
2021-01-11 21:17:13 -05:00
|
|
|
|
## Application-specific hardening
|
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Enables "`apt-get --error-on=any`" which makes apt exit non-zero for
|
|
|
|
|
transient failures. - `/etc/apt/apt.conf.d/40error-on-any`.
|
|
|
|
|
- Enables APT seccomp-BPF sandboxing - `/etc/apt/apt.conf.d/40sandbox`.
|
|
|
|
|
- Deactivates previews in Dolphin.
|
|
|
|
|
- Deactivates previews in Nautilus -
|
|
|
|
|
`/usr/share/glib-2.0/schemas/30_security-misc.gschema.override`.
|
|
|
|
|
- Deactivates thumbnails in Thunar.
|
|
|
|
|
- Thunderbird is hardened with the following options:
|
|
|
|
|
- Displays domain names in punycode to prevent IDN homograph attacks (a
|
|
|
|
|
form of phishing).
|
|
|
|
|
- Strips email client information for sent email headers.
|
|
|
|
|
- Stripts user time information from sent email headers by replacing the
|
|
|
|
|
originating time zone with UTC and rounding the timestamp to the nearest
|
|
|
|
|
minute.
|
|
|
|
|
- Disables scripting when viewing pdf files.
|
|
|
|
|
- Disables implicit outgoing connections.
|
|
|
|
|
- Disables all and any kind of telemetry.
|
|
|
|
|
- Security and privacy enhancements for gnupg's config file
|
|
|
|
|
`/etc/skel/.gnupg/gpg.conf`. See also:
|
|
|
|
|
- https://raw.github.com/ioerror/torbirdy/master/gpg.conf
|
|
|
|
|
- https://github.com/ioerror/torbirdy/pull/11
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
2023-11-06 13:47:30 -05:00
|
|
|
|
### project scope of application-specific hardening
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
2023-12-04 10:58:16 -05:00
|
|
|
|
Added in December 2023.
|
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
Before sending pull requests to harden arbitrary applications, please note the
|
|
|
|
|
scope of security-misc is limited to default installed applications in
|
|
|
|
|
Kicksecure, Whonix. This includes:
|
2023-11-06 13:47:30 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Thunderbird, VLC Media Player, KeepassXC
|
|
|
|
|
- Debian Specific System Components (APT, DPKG)
|
|
|
|
|
- System Services (NetworkManager IPv6 privacy options, MAC address
|
|
|
|
|
randomization)
|
|
|
|
|
- Actually used development utilities such as `git`.
|
2023-11-06 13:47:30 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
It will not be possible to review and merge "1500" settings profiles for
|
|
|
|
|
arbitrary applications outside of this context.
|
2023-11-06 13:47:30 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
The main objective of security-misc is to harden Kicksecure and its derivatives,
|
|
|
|
|
such as Whonix, by implementing robust security settings. It's designed to be
|
|
|
|
|
compatible with Debian, reflecting a commitment to clean implementation and
|
|
|
|
|
sound design principles. However, it's important to note that security-misc is a
|
|
|
|
|
component of Kicksecure, not a substitute for it. The intention isn't to
|
|
|
|
|
recreate Kicksecure within security-misc. Instead, specific security
|
|
|
|
|
enhancements, like for example recommending a curated list of security-focused
|
|
|
|
|
default packages (e.g., `libpam-tmpdir`), should be integrated directly into
|
|
|
|
|
those appropriate areas of Kicksecure (e.g. `kicksecure-meta-packages`).
|
2023-12-04 10:48:27 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
Discussion: https://github.com/Kicksecure/security-misc/issues/154
|
2019-09-15 10:07:50 -04:00
|
|
|
|
|
2023-12-04 10:58:16 -05:00
|
|
|
|
### development philosophy
|
|
|
|
|
|
|
|
|
|
Added in December 2023.
|
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
"Maintainability is a key priority \[1\]. Before modifying settings in the
|
|
|
|
|
downstream security-misc, it's essential to first engage with upstream
|
|
|
|
|
developers to propose these changes as defaults. This step should only be
|
|
|
|
|
bypassed if there's a clear, prior indication from upstream that such changes
|
|
|
|
|
won't be accepted. Additionally, before implementing any workarounds, consulting
|
|
|
|
|
with upstream is necessary to future unmaintainable complexity.
|
2023-12-04 10:58:16 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
If debugging features are disabled, pull requests won't be merged until there is
|
|
|
|
|
a corresponding pull request for the debug-misc package to re-enable these. This
|
|
|
|
|
is to avoid configuring the system into a corner where it can be no longer
|
|
|
|
|
debugged.
|
2023-12-04 10:58:16 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
\[1\] https://www.kicksecure.com/wiki/Dev/maintainability
|
2023-12-04 10:58:16 -05:00
|
|
|
|
|
2021-01-11 21:17:13 -05:00
|
|
|
|
## Opt-in hardening
|
|
|
|
|
|
|
|
|
|
Some hardening is opt-in as it causes too much breakage to be enabled by
|
|
|
|
|
default.
|
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- An optional systemd service mounts `/proc` with `hidepid=2` at boot to
|
|
|
|
|
prevent users from seeing another user's processes. This is disabled by
|
|
|
|
|
default because it is incompatible with `pkexec`. It can be enabled by
|
|
|
|
|
executing `systemctl enable proc-hidepid.service` as root.
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- A systemd service restricts `/proc/cpuinfo`, `/proc/bus`, `/proc/scsi` and
|
|
|
|
|
`/sys` to the root user. This hides a lot of hardware identifiers from
|
|
|
|
|
unprivileged users and increases security as `/sys` exposes a lot of
|
|
|
|
|
information that shouldn't be accessible to unprivileged users. As this will
|
|
|
|
|
break many things, it is disabled by default and can optionally be enabled
|
|
|
|
|
by executing `systemctl enable hide-hardware-info.service` as root.
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
2021-08-17 15:23:49 -04:00
|
|
|
|
## miscellaneous
|
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- hardened malloc compatibility for haveged workaround
|
|
|
|
|
`/lib/systemd/system/haveged.service.d/30_security-misc.conf`
|
2021-08-17 15:23:49 -04:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- set `dracut` `reproducible=yes` setting
|
2021-09-04 18:28:37 -04:00
|
|
|
|
|
2023-12-04 11:38:49 -05:00
|
|
|
|
## legal
|
|
|
|
|
|
|
|
|
|
`/usr/lib/issue.d/20_security-misc.issue`
|
|
|
|
|
|
|
|
|
|
https://github.com/Kicksecure/security-misc/pull/167
|
|
|
|
|
|
2021-01-11 21:17:13 -05:00
|
|
|
|
## Related
|
2019-12-16 06:24:14 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- Linux Kernel Runtime Guard (LKRG)
|
|
|
|
|
- tirdad - TCP ISN CPU Information Leak Protection.
|
|
|
|
|
- Kicksecure (TM) - a security-hardened Linux Distribution
|
|
|
|
|
- And more.
|
|
|
|
|
- https://www.kicksecure.com/wiki/Linux_Kernel_Runtime_Guard_LKRG
|
|
|
|
|
- https://github.com/Kicksecure/tirdad
|
|
|
|
|
- https://www.kicksecure.com
|
|
|
|
|
- https://github.com/Kicksecure
|
2019-12-16 06:24:14 -05:00
|
|
|
|
|
2021-01-11 21:17:13 -05:00
|
|
|
|
## Discussion
|
2019-09-15 10:07:50 -04:00
|
|
|
|
|
2022-05-19 17:25:58 -04:00
|
|
|
|
Happening primarily in forums.
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
2019-09-15 10:07:50 -04:00
|
|
|
|
https://forums.whonix.org/t/kernel-hardening/7296
|
2021-01-11 21:17:13 -05:00
|
|
|
|
|
|
|
|
|
## How to install `security-misc`
|
2015-12-14 21:00:24 -05:00
|
|
|
|
|
2022-05-19 17:25:58 -04:00
|
|
|
|
See https://www.kicksecure.com/wiki/Security-misc#install
|
2015-12-14 21:00:24 -05:00
|
|
|
|
|
2021-01-11 21:17:13 -05:00
|
|
|
|
## How to Build deb Package from Source Code
|
2015-12-14 21:00:24 -05:00
|
|
|
|
|
2020-04-02 07:22:47 -04:00
|
|
|
|
Can be build using standard Debian package build tools such as:
|
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
dpkg-buildpackage -b
|
2020-04-02 07:22:47 -04:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
See instructions. (Replace `generic-package` with the actual name of this
|
|
|
|
|
package `security-misc`.)
|
2020-04-15 14:05:37 -04:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- **A)**
|
|
|
|
|
[easy](https://www.kicksecure.com/wiki/Dev/Build_Documentation/generic-package/easy),
|
|
|
|
|
*OR*
|
|
|
|
|
- **B)** [including verifying software
|
|
|
|
|
signatures](https://www.kicksecure.com/wiki/Dev/Build_Documentation/generic-package)
|
2015-12-14 21:00:24 -05:00
|
|
|
|
|
2021-01-11 21:17:13 -05:00
|
|
|
|
## Contact
|
2015-12-14 21:00:24 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
- [Free Forum Support](https://forums.kicksecure.com)
|
|
|
|
|
- [Professional Support](https://www.kicksecure.com/wiki/Professional_Support)
|
2015-12-14 21:00:24 -05:00
|
|
|
|
|
2021-01-11 21:17:13 -05:00
|
|
|
|
## Donate
|
2015-12-14 21:00:24 -05:00
|
|
|
|
|
2023-12-25 08:37:23 -05:00
|
|
|
|
`security-misc` requires [donations](https://www.kicksecure.com/wiki/Donate) to
|
|
|
|
|
stay alive!
|