Linux 系統安全加固涉及多個層面,從網路服務掃描到系統核心組態,都需要仔細考量。本文首先分析了使用 Nikto 等工具掃描 Web 伺服器後發現的常見漏洞,例如可瀏覽的密碼檔案、敏感目錄暴露等,並提出了相應的防護措施,包括移除風險高的可執行檔案、使用強制存取控制(MAC)機制如 SELinux 或 AppArmor、佈署 Web 應用防火牆(WAF)如 ModSecurity,以及定期更新系統和應用程式。接著,文章探討了 Linux 系統分割區的掛載選項,特別是 noexec、nodev 和 nosuid,解釋了這些選項如何限制程式執行、裝置檔案建立和 SUID/SGID 許可權,從而提升系統安全性。最後,文章詳細介紹了 fapolicyd 的功能和使用方法,包括規則檔案、信任清單管理、資料函式庫更新和服務重啟等,並透過實際案例演示瞭如何將應用程式加入信任清單以允許其執行。

網路安全掃描與防護措施

在前面的章節中,我們探討瞭如何設定Snort作為網路入侵偵測系統(NIDS),並介紹了Lynis、Greenbone Security Assistant和Nikto等工具,用於掃描系統漏洞和合規性問題。本章節將探討如何保護Web伺服器免受各種漏洞的侵害,並介紹如何阻止某些應用程式執行。

網路安全掃描結果分析

使用Nikto掃描某個真實的生產網站後,我們發現了多個潛在的安全問題,包括:

  • wwwboard/passwd.txt檔案可被瀏覽,這是一個嚴重的問題,因為它可能導緻密碼洩露。
  • /stats//test.html/webstats//cgi-bin/wwwboard.pl等目錄或檔案可能包含敏感資訊或可被利用的漏洞。
  • FrontPage可能已安裝,這可能導致額外的安全風險。

掃描WordPress網站時,我們發現了以下問題:

  • HTTP TRACK方法已啟用,這可能使主機容易受到XST攻擊。
  • wordpress_test_cookie cookie未設定httponly標誌,這可能允許攻擊者竊取使用者憑證。

內容解密:

這些問題表明該網站存在多個安全漏洞,需要立即修復。對於wwwboard/passwd.txt檔案,應限制其存取許可權或刪除。對於其他目錄或檔案,應檢查其內容和許可權設定,確保沒有敏感資訊洩露。對於WordPress網站,應檢查是否有可用的更新來修復HTTP TRACK方法和cookie設定的問題。

防護措施

為了保護Web伺服器免受這些漏洞的侵害,我們可以採取以下措施:

  1. 確保沒有風險較高的可執行檔案:檢查Web伺服器上是否存在不必要或可疑的可執行檔案,如.exe檔案,並確保它們不會對系統造成威脅。
  2. 使用強制存取控制(MAC):安裝SELinux或AppArmor等MAC系統,以限制惡意指令碼的存取許可權。
  3. 安裝Web應用防火牆(WAF):考慮安裝ModSecurity等WAF,以增強Web應用程式的安全性。
  4. 保持系統更新:定期更新系統和應用程式,特別是PHP為基礎的內容管理系統,如WordPress,以修復已知漏洞。

練習題

  1. 以下哪一項最能描述IPFire? A. 一個具有內建NIDS的主機型防火牆裝置 B. 一個具有內建NIDS的邊緣防火牆裝置

  2. 以下哪一種工具最適合用於掃描Sarbanes-Oxley合規性問題? A. Lynis B. Lynis Enterprise C. Greenbone Security Assistant D. OpenSCAP

答案

  1. B
  2. B

進一步閱讀

  • Lynis首頁:https://cisofy.com/lynis/
  • Greenbone首頁:https://securityonionsolutions.com/
  • Snort首頁:https://www.snort.org/
  • Nikto首頁:https://cirt.net/nikto2
  • Security Onion首頁:https://securityonionsolutions.com/

阻止不想要的程式執行

在下一章中,我們將探討如何阻止某些應用程式執行,以進一步增強系統的安全性。敬請期待!

強化 Linux 系統安全:使用 noexec、nodev 和 nosuid 選項掛載分割區

在維護 Linux 系統安全時,正確組態分割區的掛載選項是非常重要的。根據美國政府的 STIG(Security Technical Implementation Guides)規範,某些系統目錄必須掛載在獨立的分割區上,並使用特定的掛載選項以增強安全性。

為何需要獨立掛載系統目錄?

將特定目錄掛載在獨立分割區有兩個主要原因:

  1. 防止根目錄滿溢:如果根目錄(/)滿了,可能會導致系統完全鎖死。將特定目錄掛載在獨立分割區可以有效避免這種情況。
  2. 符合安全規範要求:STIG 等安全規範要求某些分割區需以特定選項掛載,例如禁止執行檔執行、停用 SUID/SGID 許可權以及禁止裝置檔案建立。

掛載選項的作用

在安裝 Linux 系統(如 AlmaLinux 9)時,可以透過自定義分割區方案來實作上述需求。STIG 設定檔會自動為相關分割區新增以下掛載選項:

  • noexec:禁止在該分割區執行任何可執行檔(包括 shell 指令碼,除非使用 sh 執行)。
  • nodev:禁止在該分割區建立裝置檔案。
  • nosuid:使 SUID 和 SGID 許可權在該分割區失效。

實際組態範例

安裝完成後,/etc/fstab 檔案內容可能如下所示:

UUID=72d0a3b3-cd07-45c0-938e-4e3377750adb / xfs defaults 0 0
UUID=7bf3315e-525e-4940-b562-7e0b634d65de /boot xfs defaults,nosuid,nodev 0 0
UUID=4df2f723-e875-4194-9ccd-b4a2733fd617 /home xfs defaults,noexec,nosuid,nodev 0 0
UUID=d89b01b1-c3ee-48b6-bb40-0311fdd2838a /tmp xfs defaults,nodev,noexec,nosuid 0 0
UUID=d79889b0-1635-47d5-950d-8dbca088c464 /var xfs defaults,nodev 0 0
UUID=be9a3d41-0e07-4466-8eb7-57fb850df2d4 /var/log xfs defaults,nodev,noexec,nosuid 0 0
UUID=ed001588-333b-4027-bef1-754fcc5e868d /var/log/audit xfs defaults,nodev,noexec,nosuid 0 0
UUID=05c1b1e9-7f32-4791-9d41-492fce6f5166 /var/tmp xfs defaults,nodev,noexec,nosuid 0 0
UUID=c4fdabb8-7e45-4717-b7f5-1cad5f8e7720 none swap defaults 0 0
tmpfs /dev/shm tmpfs defaults,relatime,inode64,nodev,noexec,nosuid 0 0

內容解密:

這段 /etc/fstab 組態展示了各個系統目錄的掛載情況和對應的掛載選項。例如:

  • /home 使用 defaults,noexec,nosuid,nodev,表示禁止執行檔執行、SUID/SGID 無效及禁止建立裝置檔案。
  • /tmp/var/log 等目錄同樣採用了多重安全選項,以滿足 STIG 合規性要求。

分割區大小規劃考量

在實際操作中,需根據業務需求合理規劃各分割區的大小。例如,若該機器主要作為 Samba 檔案伺服器,則 /home 分割區可適當調大;若是資料函式庫伺服器,則需根據資料函式庫需求進行調整。

值得注意的是,RHEL 9.1 的安裝程式存在一個已知問題,要求每個分割區至少為 1 GB,即使實際需求較小,否則安裝過程可能會失敗。

瞭解noexec掛載選項與fapolicyd的安全機制

在Linux系統中,安全性是管理員非常關注的一環。本文將探討noexec掛載選項和fapolicyd(File Access Policy Daemon)這兩種安全機制,並透過實際操作來展示它們的功能。

使用noexec掛載選項

noexec掛載選項用於禁止在掛載的檔案系統中執行任何可執行檔案。這種設定可以提高安全性,因為它可以防止在特定分割槽上執行惡意程式碼。

測試noexec的效果

首先,我們建立一個簡單的bash指令碼,內容如下:

#!/bin/bash
echo "This is a test of the noexec option."
exit

將此指令碼儲存為donnie_script.sh並賦予執行許可權:

chmod u+x donnie_script.sh

嘗試執行該指令碼:

./donnie_script.sh

如果該指令碼所在的分割槽被掛載為noexec,則會出現許可權被拒絕的錯誤:

-bash: ./donnie_script.sh: Permission denied

即使用sudo也無法執行:

sudo ./donnie_script.sh
sudo: unable to execute ./donnie_script.sh: Permission denied

然而,如果使用sh命令來執行指令碼,則可以繞過noexec限制:

sh ./donnie_script.sh
This is a test of the noexec option.

對編譯過的可執行檔案的影響

對於編譯過的可執行檔案,如DERO專案的derod-linux-amd64noexec選項則能有效阻止其執行:

./derod-linux-amd64
-bash: ./derod-linux-amd64: Permission denied

內容解密:

  1. noexec掛載選項能夠防止在指定分割槽上直接執行可執行檔案,從而提高系統安全性。
  2. 對於shell指令碼,雖然noexec限制了直接執行,但仍可透過呼叫shell直譯器(如sh)來執行,顯示出其限制的侷限性。
  3. 對於編譯過的可執行檔案noexec能夠有效阻止其執行,無論是普通使用者還是使用sudo

瞭解fapolicyd

fapolicyd是Red Hat Enterprise Linux及其衍生版本中新加入的安全機制,用於控制檔案存取策略。它能夠根據預定義的規則允許或拒絕程式對檔案的存取。

測試fapolicyd的效果

移動DERO專案目錄到根目錄下:

sudo mv dero_linux_amd64/ /

並複製之前建立的指令碼到/usr/local/bin/

sudo cp donnie_script.sh /usr/local/bin

檢視/usr/local/bin/下的指令碼許可權:

ls -l /usr/local/bin/donnie_script.sh
-rwx
---
---
. 1 root root 61 Dec 31 16:01 donnie_script.sh

由於STIG組態檔案設定了UMASK為077,因此新建立的檔案預設許可權為700。需要手動調整許可權以繼續演示:

chmod 755 /usr/local/bin/donnie_script.sh

內容解密:

  1. **fapolicyd**透過控制檔案存取策略來增強系統安全性。
  2. STIG組態檔案自動設定了UMASK為077,從而影響新檔案的預設許可權設定。
  3. 許可權設定對於系統安全至關重要,需要根據實際需求進行適當調整。

fapolicyd 的應用與管理

fapolicyd 是一個強大的 Linux 安全模組,用於控制系統上執行的程式。本文將探討 fapolicyd 的規則、組態和管理。

理解 fapolicyd 的規則

fapolicyd 使用 /etc/fapolicyd/rules.d/ 目錄中的規則檔案來決定哪些程式可以執行。這些規則檔案按數字順序處理,因此順序很重要。

預設規則檔案

/etc/fapolicyd/rules.d/ 目錄中,有多個預設規則檔案,每個檔案都有特定的功能:

[donnie@localhost ~]$ sudo ls -l /etc/fapolicyd/rules.d
total 44
-rw-r--r--. 1 root fapolicyd 456 Dec 29 14:42 10-languages.rules
-rw-r--r--. 1 root fapolicyd 131 Dec 29 14:42 20-dracut.rules
-rw-r--r--. 1 root fapolicyd 192 Dec 29 14:42 21-updaters.rules
-rw-r--r--. 1 root fapolicyd 225 Dec 29 14:42 30-patterns.rules
-rw-r--r--. 1 root fapolicyd 101 Dec 29 14:42 40-bad-elf.rules
-rw-r--r--. 1 root fapolicyd 248 Dec 29 14:42 41-shared-obj.rules
-rw-r--r--. 1 root fapolicyd 71 Dec 29 14:42 42-trusted-elf.rules
-rw-r--r--. 1 root fapolicyd 143 Dec 29 14:42 70-trusted-lang.rules
-rw-r--r--. 1 root fapolicyd 96 Dec 29 14:42 72-shell.rules
-rw-r--r--. 1 root fapolicyd 76 Dec 29 14:42 90-deny-execute.rules
-rw-r--r--. 1 root fapolicyd 69 Dec 29 14:42 95-allow-open.rules

自訂規則與信任清單

雖然可以建立自訂規則,但建議將應用程式新增到信任清單中,以提高效能和安全性。

[donnie@localhost ~]$ sudo fapolicyd-cli --file add /dero_linux_amd64/derod-linux-amd64

此命令將指定的檔案及其 SHA256 雜湊值新增到 /etc/fapolicyd/fapolicyd.trust 檔案中。

[donnie@localhost ~]$ sudo cat /etc/fapolicyd/fapolicyd.trust
# AUTOGENERATED FILE VERSION 2
# This file contains a list of trusted files
# FULL PATH SIZE SHA256
/dero_linux_amd64/derod-linux-amd64 16750936 847ea80b83a1df887d245085db60a9b0626aacb6cd4f0f192eb2

更新資料函式庫與重啟服務

新增檔案到信任清單後,需要更新資料函式庫並重啟 fapolicyd 服務,以使變更生效。

[donnie@localhost ~]$ sudo fapolicyd-cli --update
Fapolicyd was notified
[donnie@localhost ~]$ sudo systemctl restart fapolicyd

示例程式碼執行

在新增 derod-linux-amd64 到信任清單並更新後,可以正常執行該程式。

[donnie@localhost ~]$ cd /dero_linux_amd64/
[donnie@localhost dero_linux_amd64]$ ./derod-linux-amd64

程式碼解析

以下是一個簡單的 shell 指令碼,用於測試 noexec 選項:

#!/bin/bash
echo "This is a test of the noexec option."

程式碼詳細解析

此指令碼簡單地輸出一段文字,用於測試 noexec 選項是否生效。

程式邏輯:
  1. #!/bin/bash 指定了指令碼的直譯器為 Bash。
  2. echo 命令輸出指定的文字。
注意事項:
  • 確保指令碼具有可執行許可權,否則無法直接執行。
  • 指令碼的行為可能受到掛載選項(如 noexec)的影響。

圖表說明

此圖示展示了 fapolicyd 的工作流程:

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title Linux 系統安全強化與防護措施

package "安全架構" {
    package "網路安全" {
        component [防火牆] as firewall
        component [WAF] as waf
        component [DDoS 防護] as ddos
    }

    package "身份認證" {
        component [OAuth 2.0] as oauth
        component [JWT Token] as jwt
        component [MFA] as mfa
    }

    package "資料安全" {
        component [加密傳輸 TLS] as tls
        component [資料加密] as encrypt
        component [金鑰管理] as kms
    }

    package "監控審計" {
        component [日誌收集] as log
        component [威脅偵測] as threat
        component [合規審計] as audit
    }
}

firewall --> waf : 過濾流量
waf --> oauth : 驗證身份
oauth --> jwt : 簽發憑證
jwt --> tls : 加密傳輸
tls --> encrypt : 資料保護
log --> threat : 異常分析
threat --> audit : 報告生成

@enduml

圖表翻譯: 此圖展示了 fapolicyd 的基本工作流程,從初始化到檢查程式是否受信任,最終決定是否允許執行。