返回文章列表

Linux系統稽核日誌安全強化組態

本文探討如何強化 Linux 系統稽核與日誌管理,涵蓋 auditd 與 rsyslog 的組態,確保核心模組變更的稽核、設定 auditd 不可變模式、組態 rsyslog 轉發日誌到遠端主機,以及 systemd-journald 的整合與安全性強化,以提升系統安全性。

系統管理 資安

Linux 系統安全仰賴完善的稽核和日誌機制。本文探討如何組態 auditdrsyslog,強化核心模組變更稽核、設定 auditd 不可變模式,並將日誌安全地轉發到遠端伺服器。此外,文章也涵蓋 systemd-journald 的整合,實作集中式日誌管理,同時兼顧日誌檔案的壓縮和持久化儲存,以提升整體系統安全性。

加強 Linux 系統稽核與日誌管理的安全性組態

Linux 系統的安全性對於企業和個人使用者來說至關重要。適當的稽核和日誌管理組態能夠幫助系統管理員監控系統活動、檢測潛在的安全威脅,並在發生安全事件時提供詳細的調查依據。本文將介紹如何透過組態 auditdrsyslog 來加強 Linux 系統的稽核與日誌管理。

4.1.16 確保對核心模組的變更進行稽核

為了監控對系統核心模組的修改,需要組態 auditd 來記錄相關的操作。根據系統的位元數(32 位或 64 位),需要新增相應的稽核規則。

32 位系統組態

  1. 編輯或建立檔案 /etc/audit/rules.d/modules.rules,並新增以下規則:
    -w /sbin/insmod -p x -k modules
    -w /sbin/rmmod -p x -k modules
    -w /sbin/modprobe -p x -k modules
    -a always,exit -F arch=b32 -S init_module -S delete_module -k modules
    
  2. 驗證規則是否正確載入:
    # grep modules /etc/audit/rules.d/*.rules
    # auditctl -l | grep modules
    

64 位系統組態

  1. 編輯或建立檔案 /etc/audit/rules.d/modules.rules,並新增以下規則:
    -w /sbin/insmod -p x -k modules
    -w /sbin/rmmod -p x -k modules
    -w /sbin/modprobe -p x -k modules
    -a always,exit -F arch=b64 -S init_module -S delete_module -k modules
    
  2. 驗證規則是否正確載入:
    # grep modules /etc/audit/rules.d/*.rules
    # auditctl -l | grep modules
    

稽核規則說明

這些規則會監控對 /sbin/insmod/sbin/rmmod/sbin/modprobe 的執行,以及 init_moduledelete_module 系統呼叫,並將相關的日誌以 modules 為鍵值記錄下來。

4.1.17 確保稽核組態不可變

為了防止未授權的使用者修改稽核規則,可以將稽核組態設定為不可變模式。

  1. 編輯或建立檔案 /etc/audit/rules.d/99-finalize.rules,並在檔案末尾新增:
    -e 2
    
  2. 驗證組態是否生效:
    # grep "^\s*[^#]" /etc/audit/rules.d/*.rules | tail -1
    

不可變模式的優勢

在不可變模式下,除非重啟系統,否則無法修改稽核規則,這大大提高了系統的安全性。

4.2 組態日誌管理

有效的日誌管理對於監控系統活動和調查安全事件至關重要。rsyslog 是一個功能強大的日誌管理工具,支援 TCP 傳輸、日誌資料函式庫儲存和加密等功能。

4.2.1 組態 rsyslog

4.2.1.1 確保 rsyslog 已安裝

  1. 檢查 rsyslog 是否已安裝:
    # dpkg -s rsyslog
    
  2. 如果未安裝,請執行以下命令安裝:
    # apt install rsyslog
    

4.2.1.2 確保 rsyslog 服務已啟用

  1. 檢查 rsyslog 服務是否已啟用:
    # systemctl is-enabled rsyslog
    
  2. 如果未啟用,請執行以下命令啟用:
    # systemctl --now enable rsyslog
    

組態與強化Linux系統日誌功能

概述

Linux系統的日誌功能對於監控系統安全、診斷問題以及遵守合規要求至關重要。rsyslog是Linux上廣泛使用的日誌服務,負責收集、處理和儲存系統日誌。本篇文章將探討如何組態rsyslog以確保日誌的安全性和完整性。

1. 確保日誌組態正確

描述

/etc/rsyslog.conf/etc/rsyslog.d/*.conf檔案定義了日誌記錄的規則和使用的日誌檔案。

理由

許多重要的安全相關資訊透過rsyslog傳送,例如成功和失敗的su嘗試、失敗的登入嘗試、root登入嘗試等。

稽核

檢查/etc/rsyslog.conf/etc/rsyslog.d/*.conf檔案的內容,以確保正確的日誌組態。同時,執行以下命令以驗證日誌檔案是否正在記錄資訊:

ls -l /var/log/

修正

編輯/etc/rsyslog.conf/etc/rsyslog.d/*.conf檔案,根據您的環境新增或修改以下行:

*.emerg :omusrmsg:*
auth,authpriv.* /var/log/auth.log
mail.* -/var/log/mail
mail.info -/var/log/mail.info
mail.warning -/var/log/mail.warn
mail.err /var/log/mail.err
news.crit -/var/log/news/news.crit
news.err -/var/log/news/news.err
news.notice -/var/log/news/news.notice
*.=warning;*.=err -/var/log/warn
*.crit /var/log/warn
*.*;mail.none;news.none -/var/log/messages
local0,local1.* -/var/log/localmessages
local2,local3.* -/var/log/localmessages
local4,local5.* -/var/log/localmessages
local6,local7.* -/var/log/localmessages

執行以下命令重新載入rsyslog組態:

systemctl reload rsyslog

2. 確保rsyslog預設檔案許可權組態正確

描述

rsyslog將為系統上不存在的日誌檔案建立新的日誌檔案。此設定控制將應用於這些新建立檔案的許可權。

理由

確保日誌檔案具有正確的許可權對於保護敏感資料至關重要。

稽核

執行以下命令並驗證每個$FileCreateMode例項是否為0640或更具限制性:

grep ^\s*\$FileCreateMode /etc/rsyslog.conf /etc/rsyslog.d/*.conf

如果未找到$FileCreateMode,則使用預設值0644,並且至少需要新增一個$FileCreateMode

修正

編輯/etc/rsyslog.conf/etc/rsyslog.d/*.conf檔案,並將每個$FileCreateMode例項設定為0640或更具限制性:

$FileCreateMode 0640

3. 組態rsyslog將日誌傳送到遠端日誌主機

描述

rsyslog實用程式支援將收集的日誌傳送到執行syslogd(8)的遠端日誌主機,或從遠端主機接收訊息,從而減少管理開銷。

理由

將日誌資料儲存在遠端主機上可以保護日誌完整性免受本地攻擊。

稽核

檢查/etc/rsyslog.conf/etc/rsyslog.d/*.conf檔案,並驗證日誌是否被傳送到中央主機。

grep -E "^[^#](\s*\S+\s*)\s*action\(" /etc/rsyslog.conf /etc/rsyslog.d/*.conf | grep "target="

輸出應包含目標=遠端日誌主機的FQDN或IP。

修正

編輯/etc/rsyslog.conf/etc/rsyslog.d/*.conf檔案,並新增以下行之一:

*.* action(type="omfwd" target="192.168.2.100" port="514" protocol="tcp" action.resumeRetryCount="100" queue.type="LinkedList" queue.size="1000")

或使用舊語法:

*.* @@192.168.2.100

執行以下命令重新載入rsyslog組態:

systemctl stop rsyslog
systemctl start rsyslog

4. 確保僅在指定的日誌主機上接受遠端rsyslog訊息

描述

預設情況下,rsyslog不偵聽來自遠端系統的日誌訊息。 $ModLoad imtcp告訴rsyslog載入imtcp.so模組,以便它可以透過TCP偵聽網路。 InputTCPServerRun選項指示rsyslogd在指定的TCP埠上偵聽。

理由

本文中的指導確保遠端日誌主機組態為僅接受來自指定域內主機的rsyslog資料,並且那些未被指定為日誌主機的系統不接受任何遠端rsyslog訊息。

圖示:Rsyslog 組態與強化流程圖
@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

此圖示展示了強化Linux系統日誌功能的主要步驟,從檢查現有組態到最終完成強化措施,每一步驟都對於確保系統安全和高效的日誌管理至關重要。

#### 內容解密:

上述圖表清晰地展示了強化Linux系統日誌功能的流程。首先,從檢查現有的rsyslog組態開始,接著是組態正確的日誌記錄規則,然後是設定正確的檔案許可權,以確保敏感資料的安全。下一步是組態遠端日誌主機,以便集中管理和保護日誌資料。最後,透過限制哪些主機可以傳送日誌到指定的日誌伺服器,進一步增強了安全性。每個步驟都對於實作全面的日誌安全策略至關重要。

加強Linux系統日誌管理的安全性

Linux系統的日誌管理對於維護系統安全至關重要。適當的組態日誌管理不僅可以幫助監控系統活動,還能在發生安全事件時提供寶貴的調查依據。本篇文章將重點介紹如何透過組態rsyslogsystemd-journald來加強Linux系統的日誌管理。

4.2.1 組態rsyslog

rsyslog是一個用於收集、處理和轉發系統日誌的服務。正確組態rsyslog可以確保日誌資料的安全性和完整性。

4.2.1.1 確保rsyslog組態為傳送日誌到遠端日誌主機

將日誌資料傳送到遠端日誌主機可以防止本地攻擊者篡改或刪除日誌記錄。

Audit:

檢查/etc/rsyslog.conf/etc/rsyslog.d/*.conf檔案中是否包含相關組態。

# grep '$ModLoad imtcp' /etc/rsyslog.conf /etc/rsyslog.d/*.conf
$ModLoad imtcp
# grep '$InputTCPServerRun' /etc/rsyslog.conf /etc/rsyslog.d/*.conf
$InputTCPServerRun 514
Remediation:

對於被指定為日誌主機的系統,編輯/etc/rsyslog.conf檔案並取消註解或新增以下行:

$ModLoad imtcp
$InputTCPServerRun 514

對於非日誌主機的系統,則應註解或刪除上述行。

# $ModLoad imtcp
# $InputTCPServerRun 514

完成組態修改後,重新啟動rsyslog服務。

# systemctl restart rsyslog

4.2.2 組態systemd-journald

systemd-journald負責收集和儲存系統日誌資料。正確組態systemd-journald可以提高日誌管理的效率和安全性。

4.2.2.1 確保systemd-journald組態為傳送日誌到rsyslog

systemd-journald的日誌資料傳送到rsyslog可以實作集中式日誌管理。

Audit:

檢查/etc/systemd/journald.conf檔案中ForwardToSyslog的組態。

# grep -e ForwardToSyslog /etc/systemd/journald.conf
ForwardToSyslog=yes
Remediation:

編輯/etc/systemd/journald.conf檔案並新增或修改以下行:

ForwardToSyslog=yes

4.2.2.2 確保systemd-journald組態為壓縮大型日誌檔案

壓縮大型日誌檔案可以避免檔案系統被意外填滿。

Audit:

檢查/etc/systemd/journald.conf檔案中Compress的組態。

# grep -e Compress /etc/systemd/journald.conf
Compress=yes
Remediation:

編輯/etc/systemd/journald.conf檔案並新增或修改以下行:

Compress=yes

4.2.2.3 確保systemd-journald組態為將日誌檔案寫入持久化磁碟

將日誌資料持久化到磁碟可以防止因系統重啟而丟失日誌。

Audit:

檢查/etc/systemd/journald.conf檔案中Storage的組態。

# grep -e Storage /etc/systemd/journald.conf
Storage=persistent
Remediation:

編輯/etc/systemd/journald.conf檔案並新增或修改以下行:

Storage=persistent

5 存取、驗證與授權

5.1 組態時間基準的任務排程器

cron是一個時間基準的任務排程器,用於排程任務、命令或殼層指令碼,以固定的時間、日期或間隔週期性執行。at提供了在指定的日期和時間或在給定的時間間隔後執行命令或殼層指令碼的能力。

重點注意事項

  • 其他方法也可用於排程任務,例如 systemd timers。如果使用其他方法,應根據本地站點策略進行安全組態。
  • systemd timers 是名稱以 .timer 結尾的 systemd 單元檔案,用於控制 .service 檔案或事件。
    • timers 可用作 cronat 的替代方案。
    • timers 對日曆時間事件、單調時間事件具有內建支援,並且可以非同步執行。
  • 如果未安裝 cronat,本文可略過。

5.1.1 確保 cron 守護程式已啟用並執行中(自動化)

設定適用性

  • 等級 1 - 伺服器
  • 等級 1 - 工作站

描述

cron 守護程式用於在系統上執行批次任務。

理由

即使系統上可能沒有需要執行的使用者任務,系統仍有維護任務需要執行,包括安全監控,而 cron 用於執行這些任務。

稽核

執行以下命令以驗證 cron 是否已啟用:

# systemctl is-enabled cron
enabled

執行以下命令以驗證 cron 是否正在執行中:

# systemctl status cron | grep 'Active: active (running) '
Active: active (running) since <Day Date Time>

修復

執行以下命令以啟用並啟動 cron

# systemctl --now enable cron

CIS 控制項

版本 7 6 維護、監控與分析稽核日誌

5.1.2 確保 /etc/crontab 的許可權已組態(自動化)

設定適用性

  • 等級 1 - 伺服器
  • 等級 1 - 工作站

描述

/etc/crontab 檔案由 cron 用於控制其自身的任務。本項中的命令確保該檔案的使用者和組所有者為 root,並且只有所有者可以存取該檔案。

理由

該檔案包含有關 cron 執行的系統任務的資訊。對這些檔案的寫入許可權可能允許未經授權的使用者提升其許可權。讀取這些檔案的許可權可能允許使用者瞭解系統上執行的系統任務,並可能提供他們獲得未經授權的特權存取的途徑。

稽核

執行以下命令並驗證 Uid 和 Gid 是否均為 0/root,且 Access 不授予組或其他許可權:

# stat /etc/crontab
Access: (0600/-rw
---
-
---
) Uid: ( 0/ root) Gid: ( 0/ root)

修復

執行以下命令以設定 /etc/crontab 的所有權和許可權:

# chown root:root /etc/crontab
# chmod og-rwx /etc/crontab

4.2.3 確保所有日誌檔案的許可權已組態(自動化)

描述

儲存在 /var/log/ 中的日誌檔案包含來自系統上許多服務的日誌資訊,或來自其他日誌主機的日誌資訊。

理由

確保日誌檔案具有正確的許可權對於保護敏感資料至關重要。

稽核

執行以下命令並驗證其他使用者沒有任何許可權,且組使用者沒有寫入或執行許可權:

# find /var/log -type f -ls

修復

執行以下命令以設定所有現有日誌檔案的許可權:

find /var/log -type f -exec chmod g-wx,o-rwx "{}" + -o -type d -exec chmod g-w,o-rwx "{}" +

4.3 確保 logrotate 已組態(手動)

描述

系統包含定期輪替日誌檔案的功能,以避免日誌檔案佔滿系統或變得難以管理。/etc/logrotate.d/rsyslog 是用於輪替由 rsyslog 建立的日誌檔案的組態檔案。

理由

保持日誌檔案較小且易於管理,可以讓系統管理員輕鬆將這些檔案存檔到其他系統,並減少瀏覽過大日誌檔案的時間。

稽核

檢閱 /etc/logrotate.conf/etc/logrotate.d/rsyslog,並根據站點策略驗證日誌是否已輪替。

修復

編輯 /etc/logrotate.conf/etc/logrotate.d/rsyslog,以根據站點策略確保日誌已輪替。

4.4 確保 logrotate 分配適當的許可權(自動化)

描述

日誌檔案包含來自系統上許多服務的日誌資訊,或來自其他日誌主機的日誌資訊。

理由

確保日誌檔案具有正確的許可權對於保護敏感資料至關重要。

稽核

執行以下命令:

# grep -E "^\s*create\s+\S+" /etc/logrotate.conf | grep -E -v "\s(0)?[0-6][04]0\s"

不應傳回任何結果。

修復

編輯 /etc/logrotate.conf,並更新 create 行以符合本地站點策略,例如:

create 0640 root utmp