桌面Linux安全加固——系统加固和安全启动

桌面Linux安全加固——系统加固和安全启动Linux 不是一个安全桌面操作系统 但是 可能很多条件下 必不可少需要使用 Linux 桌面的图形界面来工作 尤其是一些有密机要求的办公环境下 上一篇文章中我介绍了提高 Linux 桌面安全方面做法 包括磁盘加密 隐私设置和应用限制等

大家好,欢迎来到IT知识分享网。

Linux不是一个安全桌面操作系统。但是,可能很多条件下,必不可少需要使用Linux桌面的图形界面来工作,尤其是一些有密机要求的办公环境下。

上一篇文章中我介绍了提高Linux桌面安全方面做法,包括磁盘加密、隐私设置和应用限制等。本文我们继续讨论桌面Linux的其他安全问题,包括系统安全加固和安全启动方面的方法。

桌面Linux安全加固——系统加固和安全启动

安全加固

掩码077

在一个涉密的桌面Linux中,除了openSUSE(077会破坏snapper)以外的发行版可以考虑将用户的默umask更改为077(表示权限为u=rwx,g=,o=)。

不同发行版配置方法有差异,通常可以直接修改配置文件:/etc/profile,/etc/bashrc,或者/etc/login.defs。

注意,与macOS不同,这只会更改shell的umask。运行应用程序创建的文件不会将其权限设置为600。

Microcode更新

应该确保系统收到Microcode更新信息,以便及时解决由于由于CPU漏洞造成安全问题,比如Meltdown和Spectre修复和缓解措施。

默认Debian官方不提供Microcode更新,因此请务必启用非免费存储库 并安装microcode打包。

对Arch Linux 上,确保安装了intel-ucode或者 amd-ucode包。

如果使用 GNU Guix发行版,可以订阅Nonguix频道或类似频道来获取Microcode更新。

最要要尽量避免使用Linux-libre内核,该内核主动阻止加载仅二进制microcode。

固件更新

为Linux系统提供固件更新许多硬件供应商通过Linux Vendor Firmware Service。 可以通过以下命令下载和安装更新:

# 更新元数据 fwupdmgr refresh # 下载和安装固件升级 fwupdmgr update

默认情况下,Debian等某些发行版没有安装fwupd,因此应该检查系统中是否存在它,并在需要时安装它。

几个图形前端与fwupd 集成以提供固件更新(GNOME软件、KDE ​Discover、Snap Store、 GNOME 固件、Pop!_OS设置应用程序)。但是,并非所有发行版都默认提供此集成,如有严格要求,需要检查特定系统并在需要时使用 systemd计时器 或cron设置按计划定期自动更新。

防火墙

防火墙可用于保护与系统的连接Red Hat发行版(例如Fedora和openSUSE通常使用firewalld。firewalld及其图形前端firewall-config文档可以参考红帽的文档。

桌面Linux安全加固——系统加固和安全启动

基于Debian或Ubuntu的发行版通常使用Uncomplicated Firewall (ufw) 。 顾名思义,它比firewalld简单一点。但是缺少些功能,比如不同的连接应用不同的防火墙规则。

桌面Linux安全加固——系统加固和安全启动

例如要设置默认防火墙区域丢弃数据包。用firewalld可以实现这(IPv6 有必要的例外):

firewall-cmd --set-default-zone=drop firewall-cmd --add-protocol=ipv6-icmp --permanent firewall-cmd --add-service=dhcpv6-client –permanent

firewalld/ufw及以此为基础的防火墙使用netfilter的框架,因此无法(不支持严格的强制访问控制)阻止在系统上运行特权的恶意软件,他们可以插入自己的路由规则来避开firewalld/ufw。

可以使用一些基于二进制的出站防火墙,例如OpenSnitch 和 Portmaster,和firewalld和ufw一样,它们是可以绕过的。

可以使用Flatpak,它可以设置一个覆盖来阻止网络访问,这是不可绕过的。

如果在支持适当限制的系统上使用非经典Snap(包括AppArmor和cgroups v1都存在),可以使用Snap Store撤销网络权限,这样也是不可绕过的。

内核强化

可以采取多种措施来强化Linux内核,包括设置适当的内核参数和将不必要的内核模块列入黑名单。

运行时内核参数 (sysctl)

建议禁用非 特权用户命名空间由于特权升级的重要攻击面。 但是,Podman和 LXC等一些软件依赖于非特权用户命名空间。如果使用此类软件,请不要禁用 kernel.unprivileged_userns_clone

如果使用的是Kicksecure或Whonix,则默认情况下包含大部分强化。如果使用的是Debian系,应该考虑将其转变为 Kicksecure。在其他发行版上,可以将配置文件从 Kicksecure复制到/etc/sysctl.d/(但请注意,这些配置不会禁用非特权用户命名空间)。

需要特别注意的是:

bluetooth和 btusb内核模块被禁用。如果使用蓝牙需要注释掉install bluetooth /bin/disabled-bluetooth-by-security-misc和install btusb /bin/disabled-bluetooth-by-security-misc。

Apple文件系统被禁用。这在非Apple系统上通常没问题;但是,如果使用的是Apple设备,则必须检查的EFI分区使用的文件系统。例如,如果EFI文件系统是HFS+,则需要注释掉install hfsplus /bin/disabled-filesys-by-security-misc,否则计算机将无法启动Linux。

cdrom和sr_mod模块只是被列入黑名单(仍然可以在运行时加载 modprobe). 如果无意使用CD-ROM设备,则应来禁用它们 通过取消注释相应的选项 install线。

在使用配置文件时产生信息性错误,应将相应的10个调试脚本全部复制到 /bin/.

引导参数

在rpm‑ostree发行版上,确保使用rpm-ostree kargs而不是直接编辑GRUB 配置。

CPU 缓解措施

spectre_v2=on spec_store_bypass_disable=on l1tf=full,force mds=full,nosmt tsx=off tsx_async_abort=full,nosmt kvm.nx_huge_pages=force nosmt=force l1d_flush=on mmio_stale_data=full,nosmt

同步多线程 (SMT) 是许多硬件级漏洞的原因,因此建议禁用。如果该选项可用,还应该在固件中禁用SMT/“超​​线程”。

但请注意,禁用SMT可能会对性能产生重大影响——因此,Arch 的流行 linux-hardened内核默认情况下不会禁用SMT。评估风险承受能力,如果选择启用SMT,只需删除所有出现的nosmt和 nosmt=force从这些参数。

内核

slab_nomerge init_on_alloc=1 init_on_free=1 pti=on vsyscall=none page_alloc.shuffle=1 randomize_kstack_offset=on extra_latent_entropy debugfs=off oops=panic quiet loglevel=0

Kicksecure也不强制执行 module.sig_enforce=1或者 lockdown=confidentiality默认情况下,因为它们会导致很多硬件兼容性问题。

墒生成

random.trust_cpu=off random.trust_bootloader=off

random指令(CPU 通过该指令向操作系统提供随机数生成器)的某些实现已被证明是易受攻击的或完全有缺陷的。RDRAND也无法审计,因为它是CPU本身的一部分。

作为加密操作完整性的预防措施,CPU和引导加载程序不应用作信用熵源。请注意,此更改会增加启动时间。

DMA缓解措施

intel_iommu=on amd_iommu=on efi=disable_early_pci_dma iommu.passthrough=0 iommu.strict=1

减轻直接内存访问 (DMA) 攻击 可以通过 IOMMU 和 禁用某些内核模块来 。 此外, 应严格执行 IOMMU TLB 失效, 以便设备永远无法访问陈旧的数据内容。

这些参数 不提供全面的DMA保护。在早期引导(内核加载之前),只有系统固件可以执行IOMMU,从而提供DMA保护。早期引导中的DMA攻击可以修补内存中的内核以完全破坏这些参数。

强化内存分配器

GrapheneOS的强化内存分配器 (hardened_malloc)可用于一般 Linux 发行版,但仅适用于某些程序。

Kicksecure 默认安装它(尽管默认情况下未启用)并提供与所有发行版相关的深入使用说明。

在基于Arch的系统上,hardened_malloc 可通过 AUR 获 。 Divested Computing Group 维护着Fedora 构建。

挂载点强化

考虑添加挂载选项nodev, noexec和nosuid到不需要相应功能的挂载点。 通常,这些可以应用于/boot,/boot/efi,和/var. 这些标志也可以应用于 /home和/root,然而noexec将阻止需要在这些位置执行二进制文件的应用程序工作(包括Flatpak和Snap)。

禁用SUID

SUID允许用户以该应用程序的所有者身份执行该应用程序,在许多情况下是 root用户。易受攻击的SUID可执行文件可能导致特权升级漏洞。

最好从尽可能多的二进制文件中删除SUID;但是,这需要反复试验,因为某些应用程序需要SUID 才能运行。

Kicksecure以及扩展名Whonix具有实验性权限强化服务和应用程序白名单,可以自动从系统上的大多数二进制文件和库中删除SUID,可以参考使用。

DNSSEC

默认情况下,大多数Linux发行版不启用DNSSEC。建议启用它以确保对的DNS 查询的响应是真实的。另外还需要一个支持DNSSEC的DNS提供商。

可以编辑/etc/systemd/resolved.conf归档并添加 DNSSEC=yes启用它。 做systemctl restart systemd-resolved完成编辑以应用配置后。

如果Whonix或Tails用户,可以忽略设置DNSSEC,因为Tor DNS 解析不支持它。或者,可以使用非Tor解析器 ,但不建议长时间这样做。

时间同步

大多数Linux发行版默认使用未加密和未验证的网络时间协议(NTP)进行时间同步。有两种方法可以轻松解决此问题:

使用 chronyd 配置网络时间安全(NTS)

在基于 Debian 的发行版上使用Kicksecure的sdwdate。

如果决定将NTS 与chronyd一起使用,请考虑使用多个独立的时间提供程序和设置minsources大于 1。

GrapheneOS 为他们的基础设施使用了一个非常好的 chrony 配置。可以复制其chrony.conf到需要的系统上。

可插拔身份验证模块(PAM)

PAM的可以强化设设置以提高身份验证安全性(但请记住PAM与加密相反的可绕过性质)。

在红帽发行版上,可以使用authselect来配置它,例如:

sudo authselect select <profile_id, default: sssd> with-faillock without-nullok with-pamaccess

在系统上 pam_faillock不可用,考虑使用pam_tally2。

如果使用YubiKey或其他U2F/FIDO2 身份验证器,则可以使用pam-u2f实现双因子登录身份验证。确保使用硬编码origin和 appid。不要使用默认标识符 pam://$HOSTNAME如果的主机名更改,这会导致中断。

存储介质处理

一些Linux发行版和桌面环境会在插入存储介质时自动挂载任意文件系统。这是一种安全风险,因为对手可以将恶意存储设备连接到的计算机以利用易受攻击的文件系统驱动程序。

Whonix 默认禁用此行为。

U盘

使用UDisks的系统上的GNOME用户可以通过运行以下命令来降低这种风险:

echo '[org/gnome/desktop/media-handling] automount=false automount-open=false' | sudo tee /etc/dconf/db/local.d/automount-disable echo 'org/gnome/desktop/media-handling/automount org/gnome/desktop/media-handling/automount-open' | sudo tee /etc/dconf/db/local.d/locks/automount-disable sudo dconf update

这将禁用自动挂载并防止用户覆盖该设置(没有权限)。

Cinnamon使用同样配置/命令。其他基于GNOME 3的桌面环境可能遵循类似的模式——可以使用 gsettings查看详细信息。

autofs

在较旧的系统上autofs被使用,你应该屏蔽autofs服务来禁用此行为。

USB端口保护

为了更好地保护的USB端口免受BadUSB和Hak5 USB Rubber Ducky 等攻击,建议使用USBGuard。

桌面Linux安全加固——系统加固和安全启动

详见其官方文档,以后有机会可以详细介绍。

安全启动

安全引导 可用于通过防止加载未签名的 UEFI 驱动程序和引导加载程序来保护引导过程。

安全启动的问题之一,尤其是是在典型设置中仅验证链加载程序(垫片)、引导加载程序 (GRUB) 和内核。initramfs敞开了大门通常未经验证和加密攻击。

大多数设备上的固件还预先配置为信任Microsoft的Windows和第三方密钥,从而导致较大的攻击面。

注册自己的钥匙

为了消除信任OEM密钥的需要,建议使用sbctl。

首先,需要启动到固件界面并进入安全启动设置模式。然后重新启动进入生成并注册自己的密钥。在某些硬件上,这将不起作用。需要将公钥导出到EFI分区并通过固件界面手动导入它:

openssl x509 -in /usr/share/secureboot/keys/db/db.pem -outform DER -out /boot/efi/EFI/fedora/DB.cer

统一内核映像

在大多数桌面Linux系统上,可以创建统一内核映像包含内核、initramfs和微代码的(UKI)。然后可以使用sbctl创建的密钥对该统一内核映像进行签名。

加密/引导

openSUSE及其衍生产品带有开箱即用的加密/boot(作为根分区的一部分)。 此设置确实有效,使用加密来回避未经验证的initramfs问题。

但是,有一些注意事项:

openSUSE 使用LUKS1 而非LUKS2进行加密。

GRUB仅支持PBKDF2密钥派生,不支持 Argon2(默认为 LUKS2)。

需要一些额外的步骤来避免输入两次加密密码 。

可以通过以下方式潜在地提高安全性:

注册自己的安全启动密钥;

重新安装 GRUB –no-shim-lock;​

使用自己的密钥签署 GRUB 和内核;

从引导链中移除shim和MOK;

设置挂钩以在每次更新时自动执行这些任务;

其他发行版可以参考openSUSE,并复制其配置文件。

安全启动注意事项

设置安全启动后,用密码保护UEFI设置(有时称为“主管”或“管理员”密码)至关重要——否则对手可以简单地禁用安全启动。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/96160.html

(0)
上一篇 2024-10-28 19:33
下一篇 2024-11-04 12:26

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信