Upvotes
0
Upvotes: 0請問security audit log需要紀錄哪些內容才能符合國際要求, 有哪些國際要求需要特別遵循?
進行資安稽核紀錄(Security Audit Logging)時,重點不在於「記下所有事」,而在於「記下關鍵的事」。如果紀錄太少,發生事件時無法追蹤;紀錄太多,則會淹沒在雜訊中且增加儲存成本。
要符合國際標準(如 ISO 27001、NIST、SOC2 或 PCI DSS),你的日誌必須能夠還原人事時地物。
無論在哪個標準下,一筆合格的稽核日誌通常需要包含以下欄位:
| 類別 | 重點紀錄內容 |
|---|---|
| 認證與授權 | 登入/登出成功與失敗、密碼更改、多因素驗證 (MFA) 失敗。 |
| 帳號管理 | 建立或刪除使用者、提升權限(如賦予管理者權限)。 |
| 資料存取 | 對機密資料的讀取、修改、刪除動作。 |
| 系統變更 | 防火牆規則更改、安裝新軟體、更新系統配置。 |
| 安全性警報 | 防毒軟體偵測、入侵偵測系統 (IDS) 的警告。 |
不同的產業與地區,會有不同的合規要求:
這是最通用的標準。其附錄 A (Control A.12.4) 明確要求:
常被視為資安實務的黃金標準(特別是 AU 家族:Audit and Accountability):
如果你處理信用卡交易,這是強制性的:
雖然 GDPR 沒寫明技術細節,但要求具備「問責制」(Accountability):
光有紀錄是不夠的,國際稽核員通常會檢查以下機制:
下一步建議: 您目前是為了準備特定的認證(如 ISO 27001),還是為了建立內部的資安監控中心 (SOC)?我可以根據您的目標,提供更具體的 Log 格式範例(例如 JSON 或 Syslog 格式)。
目標是建立內部的資安監控中心 (SOC), 請提供更具體的 Log 格式範例
建立內部的資安監控中心 (SOC) 時,最核心的挑戰在於「正規化」(Normalization)。如果各個設備各說各話(有的用 Syslog,有的用 XML),你的 SIEM(日誌分析系統)就無法進行有效的關聯分析。
目前的行業趨勢是優先使用 JSON 格式,因為它具備良好的結構化特徵,易於被 Splunk、Elasticsearch (ELK) 或 Azure Sentinel 解析。
這是 SOC 監控「異常登入」或「暴力破解」最關鍵的資料。
{
"timestamp": "2026-03-02T14:30:05.123Z",
"log_source": "Active Directory",
"event_id": 4625,
"event_type": "Authentication",
"status": "Failure",
"user": {
"name": "admin_backup",
"domain": "CORP",
"source_ip": "203.0.113.42"
},
"reason": "Invalid password",
"severity": "Medium"
}
SOC 監控點: 如果同一個
source_ip在一分鐘內產生 50 筆status: Failure,應立即觸發告警。
許多網通設備(如 Palo Alto, Fortinet)支援 CEF (Common Event Format),這是專為 SOC 整合設計的標準格式。
CEF:0|Vendor|Product|Version|ID|Name|Severity|[Extension]
範例:
CEF:0|Fortinet|FortiGate|6.0|0001|Traffic Denied|6|src=10.0.0.5 dst=8.8.8.8 dpt=53 proto=UDP msg=Blocked by blacklisted IP
用於追蹤惡意程式在主機上的行為(例如 PowerShell 執行異常指令)。
{
"timestamp": "2026-03-02T15:00:20Z",
"host": "WORKSTATION-01",
"action": "Process_Created",
"process": {
"name": "powershell.exe",
"command_line": "powershell.exe -ExecutionPolicy Bypass -File C:\\temp\\payload.ps1",
"parent_process": "explorer.exe"
},
"user": "marketing_staff_01"
}
SOC 監控點:
command_line中出現-ExecutionPolicy Bypass或EncodedCommand通常是攻擊徵兆。
若公司使用雲端環境,API 的呼叫紀錄是稽核重點。
{
"eventTime": "2026-03-02T16:20:00Z",
"eventSource": "iam.amazonaws.com",
"eventName": "CreateUser",
"userIdentity": {
"type": "IAMUser",
"userName": "root_account"
},
"sourceIPAddress": "1.2.3.4",
"userAgent": "aws-cli/2.0.0"
}
為了確保這些 Log 能被有效處理,您的 SOC 架構應如下圖所示:
在建立 SOC 時,請確保你的 Log 接收器能解析出以下欄位,這被稱為 ECS (Elastic Common Schema) 或類似的標準:
| 欄位名稱 | 說明 | 範例 |
|---|---|---|
@timestamp |
統一的 ISO 8601 時間 | 2026-03-02T... |
event.category |
事件分類 | authentication, network, process |
source.ip |
攻擊者或來源 IP | 192.168.1.1 |
user.name |
觸發事件的使用者 | system_admin |
outcome |
結果 | success, failure |
下一步建議: 建立 SOC 的第一步通常是選擇 SIEM 平台(如開源的 ELK/Wazuh 或商用的 Splunk/Sentinel)。您是否已經決定了要使用哪套工具?我可以針對該工具提供更精確的解析規則 (Parsing Rules) 設定建議。
比較SIEM平台, 並且說明如何選擇
建立內部的資安監控中心 (SOC),選擇 SIEM 平台就像選車:你要的是一台改裝空間極大的賽車(Splunk),還是一台整合完善的豪華休旅車(Sentinel),或者是一台需要自己動手組裝的經濟型房車(Wazuh)?
以下是 2026 年主流 SIEM 平台的對比與選擇指南。
| 平台名稱 | 部署模式 | 核心優勢 | 價格模型 | 適合對象 |
|---|---|---|---|---|
| Splunk ES | 雲端 / 地端 / 混合 | 功能最強大、搜尋語法 (SPL) 極其靈活。 | 昂貴(依資料量或運算負載)。 | 預算充足、資料架構複雜的大型企業。 |
| Microsoft Sentinel | 純雲端 (Azure) | 與微軟生態系 (M365, Azure) 深度整合,內建 AI 助手。 | 隨支隨付 (Pay-as-you-go)。 | 以微軟環境為主的組織,追求快速上線。 |
| Elastic Security | 雲端 / 地端 | 搜尋速度極快,兼具效能與可擴展性。 | 節點費或商業授權。 | 技術力強、有大量日誌搜尋需求的團隊。 |
| Wazuh | 地端 / 雲端 | 開源免費,整合了 EDR 與日誌分析。 | 免費(維護成本在人力)。 | 預算有限、需要高度自定義的 SOC 中小企業。 |
| IBM QRadar | 雲端 / 地端 | 強大的事件關聯 (Correlation) 與合規性報告。 | 依每秒事件數 (EPS) 計算。 | 重視合規、傳統金融或政府單位。 |
你可以透過以下五個維度來做最後決定:
我的真心建議: 如果您是 「初創 SOC」且預算有限,先架一套 Wazuh 跑跑看,感受一下處理日誌的痛苦與樂趣;如果您是 「企業級需求」且希望下週就開張,直接開 Microsoft Sentinel 是風險最低的路。
下一步建議: 您目前公司的環境主體是哪一種?(例如:全微軟環境、大量 Linux 伺服器、還是混合雲環境?)我可以針對您的環境推薦最適合的資料匯入工具 (Log Forwarder)。
請教如果資料庫使用PostgreSQL, audit log是先寫入PostgreSQL, 然後再透過Log Forwarder寫到專門處理的平台, 還是直接寫, 比較其優缺點
在 PostgreSQL 的環境中,關於稽核紀錄(Audit Log)的傳輸路徑,資安專家通常會給出一個非常明確的建議:千萬不要把稽核紀錄「長期」儲存在資料庫本身的資料表中。
以下為您詳細分析「先寫入 DB 表格再轉發」與「直接寫入檔案/串流並轉發」的優缺點比較,這對您建立 SOC 監控中心至關重要。
| 比較項目 | 方案 A:先寫入 DB Table 再轉發 | 方案 B:寫入 File/Syslog 並透過 Forwarder 轉發 |
|---|---|---|
| 效能影響 | 高。每次操作都要額外執行一次 SQL Insert,會造成嚴重的寫入放大(Write Amplification)。 | 低。非同步寫入本地檔案或 Syslog,對資料庫主程式的延遲影響極小。 |
| 安全性(防竄改) | 低。如果駭客取得資料庫最高權限,可以直接 DELETE 或 TRUNCATE 稽核資料表,毀屍滅跡。 |
高。日誌一旦寫入檔案並由 Forwarder 送走,即使資料庫被攻破,舊的紀錄也無法被輕易抹除。 |
| 儲存成本 | 高。稽核資料會佔用資料庫的 Data 空間,影響備份與還原的速度。 | 低。檔案可定期轉動(Rotate)或壓縮,不影響資料庫主體的儲存空間。 |
| SOC 整合難度 | 中。Forwarder 需要透過 SQL 輪詢(Polling),容易產生時間差,且對 DB 造成額外查詢壓力。 | 易。Forwarder (如 Filebeat) 即時監控檔案變動,毫秒級傳送到 SOC 平台。 |
在建立 SOC 時,我們追求的是 「職責分離」(Separation of Duties, SoD)。
pgaudit 擴充套件輸出)則相對穩健許多。對於要對接 SOC 的 PostgreSQL,最專業的作法是:
pgaudit 擴充套件PostgreSQL 內建的日誌比較簡陋。pgaudit 是專門為稽核設計的,它可以詳細記錄誰對哪個物件做了什麼(如 SELECT, INSERT, GRANT)。
將 pgaudit 的內容輸出到本地磁碟的 log 目錄,並建議使用 CSV 格式,因為它結構清晰,方便解析。
在資料庫伺服器上安裝一個輕量級的 Agent(Sidecar 模式):
當您透過 Forwarder 轉發到 SOC 時,您的 Log 看起來會像這樣,這才是符合國際稽核要求的細節:
"2026-03-02 10:00:01 UTC","admin_user","my_db","10.0.5.20","SESSION","READ","SELECT","TABLE","employees","SELECT name, salary FROM employees;"
下一步建議:
您是否需要我提供針對 pgaudit 的具體安裝指令,或是如何撰寫 Log Forwarder (如 Filebeat) 的配置檔來解析 PostgreSQL 的日誌?
如果在API中間層寫audit log到File/或是stream, 但是因為有多台API server, 使用pgaudit不會有分散的問題, 但是File/Scream是否會有同時多台寫入Forwarder的問題, 請比較這兩個的優缺點
這是一個非常專業的架構問題。在分散式系統中,「在哪個層級紀錄」以及「如何匯流而不塞車」是建立 SOC 的兩大技術挑戰。
首先要澄清一個觀念:pgaudit 其實也有分散問題,因為如果你有 Read Replicas(唯讀副本),每一台資料庫伺服器都會產生自己的 Log。
以下針對 API 中間層紀錄 與 資料庫層 (pgaudit) 紀錄 進行深度對比,並回答您關於「同時寫入 Forwarder」的疑慮。
| 維度 | API 中間層 (Middleware) | 資料庫層 (pgaudit) |
|---|---|---|
| 業務語意 | 極高。能紀錄「某某用戶購買了某產品」,而不只是 SQL。 | 低。只能看到 UPDATE table SET...,很難對應回業務邏輯。 |
| 完整性 | 中。只能紀錄透過 API 的操作。若有人直接用 CLI 連進 DB,這層會完全落空。 | 極高。不管是 API、開發者手動連線、還是腳本,所有對 DB 的變更都會被抓到。 |
| 效能影響 | 消耗 API Server 的 CPU/Memory,可能增加 Request 延遲。 | 增加資料庫 IO 壓力,對高併發的 DB 影響較大。 |
| SOC 價值 | 適合用於「行為分析」(例如:使用者異常大量讀取資料)。 | 適合用於「特權帳號監控」與「鑑識調查」。 |
您擔心的「多台 API Server 同時寫入會不會出問題」,在 SOC 架構中通常有兩種解決方案,取決於您所謂的「寫入」是指哪一種:
audit.log,各自跑自己的 Forwarder (如 Filebeat)。為了符合國際資安要求,建議採用 「Agent-Aggregator」 架構:
在成熟的 SOC 環境中,通常是 「兩者都要」,但分工不同:
作法: 寫入本地 File,由 Agent 非同步送走。
Database pgaudit Log: 用來滿足 「系統安全稽核」(例如:DBA 有沒有私下改動權限表?)。
pgaudit 輸出至 DB 伺服器本地,再由 Agent 送走。這兩份 Log 最後會在 SIEM 平台透過 Request ID 或 Timestamp 進行「關聯分析」(Correlation)。
下一步建議: 您的 API Server 是部署在 Kubernetes (K8s) 環境中,還是獨立的 虛擬機 (VM)?這會決定 Forwarder(Agent)的部署方式(Sidecar 模式 vs. 原生安裝),我可以提供相對應的配置範例。
先部署在VM, 之後會擴展到K8s, 請兩種都提供並比較
不論是在 VM 還是 K8s 環境中,建立 SOC 的核心目標都是「日誌不丟失、不被竄改、即時傳輸」。
以下為您分析這兩種環境的部署方式、具體配置範例以及深度對比。
在 VM 中,Log Forwarder(如 Filebeat 或 Vector)通常作為 Systemd 服務 運行,直接監控磁碟上的日誌檔。
/var/log/app/audit.log。Filebeat 配置範例 (filebeat.yml):
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/app/audit.log
- /var/log/postgresql/audit.csv
fields:
env: production
log_type: audit
# 確保日誌被標記,方便 SOC 關聯分析
fields_under_root: true
output.kafka: # 建議先打入 Kafka 緩衝
hosts: ["kafka-broker:9092"]
topic: "audit-logs"
在 K8s 中,日誌處理有兩種主流作法:
在每個 Node 部署一個 Forwarder 實例,收集該節點上所有 Pod 的 stdout(標準輸出)。
stdout,則需要額外掛載磁碟。在 API Pod 內多塞一個 Forwarder 容器,專門盯著該 API 產生的稽核檔。
K8s Sidecar 配置範例 (Deployment.yaml):
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-server
spec:
template:
spec:
containers:
- name: api-container
image: my-api:latest
volumeMounts:
- name: shared-logs
mountPath: /var/log/app
- name: filebeat-sidecar # Sidecar 容器
image: docker.elastic.co/beats/filebeat:8.x
volumeMounts:
- name: shared-logs
mountPath: /var/log/app
volumes:
- name: shared-logs
emptyDir: {} # 共享記憶體或磁碟
| 比較項目 | VM 部署 (System Service) | K8s 部署 (DaemonSet / Sidecar) |
|---|---|---|
| 部署複雜度 | 簡單。手動或透過 Ansible 安裝即可。 | 高。需編寫 YAML、處理 RBAC 權限與 Volume 掛載。 |
| 可擴展性 (Scaling) | 有限。增加 VM 時需重新配置環境。 | 極高。Pod 增加時,日誌收集自動隨之擴展 (Auto-scaling)。 |
| 資源消耗 | 固定。Agent 長駐在背景。 | 動態。Sidecar 模式會隨 Pod 數量線性增加記憶體消耗。 |
| 日誌遺失風險 | 低。磁碟持久性高。 | 中。若 Pod 瞬間毀損且沒掛載 Persistent Volume,未上傳的 Log 可能遺失。 |
| 維護成本 | 中。需維護每台機器的 Agent 版本。 | 低。透過 Container Image 統一管理版本。 |
| 中繼資料 (Metadata) | 僅能抓到 Hostname, IP。 | 可抓到 Pod Name, Namespace, Container ID 等豐富資訊。 |
如果您打算從 VM 遷移到 K8s,這裡有幾個 SOC 建立的「地雷」要避開:
chronyd 或 ntp 服務正常,否則 SOC 的事件關聯會失效。K8s: 通常依賴 Node 的時間,但建議在容器啟動時強制設定 TZ (時區) 環境變數。
日誌切割 (Log Rotation):
logrotate,否則磁碟會被稽核日誌塞滿,導致服務崩潰。K8s: 如果寫入 stdout,Docker/Containerd 會幫你切割;如果是 Sidecar 寫入檔案,則需要在 Sidecar 內自行處理切割。
從 VM 擴展到 K8s 的「過渡橋樑」:
pgaudit 統一寫入檔案,由 Agent 轉發。您目前是否有偏好的 Log Forwarder 工具(如 Filebeat、Fluent-bit 或 Vector)?我可以為您針對該工具提供 VM 轉 K8s 的「無縫遷移配置」。
在API server寫audit log如何避免被竄改的風險, 如何確保audit log是原始log, 無變更疑慮, 是否每個環節都需要注意這些問題?
確保稽核日誌(Audit Log)的不可竄改性(Immutability)與原始性(Integrity),是資安監控中心(SOC)能否在法律或數位鑑識中站得住腳的關鍵。
這在資安領域被稱為「證據連續性」(Chain of Custody)。是的,每一個環節都需要注意,因為只要有一個斷點,日誌的真實性就會受到質疑。
以下是從「產生」到「存儲」各個環節的防護策略:
日誌留在伺服器硬碟裡的時間越長,被竄改的風險就越高。
/var/log/audit.log。pgaudit(資料庫層)或 Auditd(Linux 核心層)紀錄的是底層動作,較難從應用程式層級進行竄改。日誌在網路流動時,可能被攔截、修改或刪除。
這是最重要的環節。日誌存放的地方必須是「唯寫一次,讀取多次」(Write Once Read Many, WORM)。
SOC 管理員不應該有權限進入資料庫修改資料。
S3 Object Lock / Immutable Storage: 如果日誌備份在雲端(如 AWS S3),開啟 Object Lock 功能。這能保證在設定的時間內(例如 1 年),連 Root 帳號都無法刪除或修改這些檔案。
模仿區塊鏈的概念,每一筆 Log 都包含前一筆 Log 的雜湊值(Hash)。
Log #2 = Hash(內容 + Hash of Log #1)。| 環節 | 風險點 | 防範技術 |
|---|---|---|
| 產生 (API) | 攻擊者取得 root 權限後 rm -rf |
即時同步、檔案唯加模式 (Append-only) |
| 暫存 (Local Disk) | 攻擊者修改 audit.log 內容 |
限制檔案權限 (chmod 600)、核心稽核 (Auditd) |
| 傳輸 (Network) | 封包被攔截修改 | TLS 加密、Token 認證 |
| 處理 (Forwarder) | 緩衝區溢位導致丟失 | Back-pressure 機制、持久性佇列 (Kafka) |
| 儲存 (SIEM) | 管理員誤刪或惡意刪除 | WORM 存儲、職責分離 (SoD) |
您目前在考慮這類問題,是否是為了滿足特定的合規(如 PCI DSS 的 10.5 條款要求保護日誌不可竄改)?如果是,我可以直接提供符合該合規標準的具體檢核清單。
Comments
Login to add a comment.
No comments yet.