天天看點

桌面Linux安全加強——系統加強和安全啟動

作者:蟲蟲安全

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設定(有時稱為“主管”或“管理者”密碼)至關重要——否則對手可以簡單地禁用安全啟動。

繼續閱讀