日誌監控失效概述
安全日誌與監控失效(Security Logging and Monitoring Failures)是 OWASP Top 10 中重要的安全風險之一。當系統缺乏適當的日誌記錄和監控機制時,攻擊者可以在不被發現的情況下持續入侵系統,導致資料外洩、系統被完全控制等嚴重後果。
根據統計,企業平均需要 200 天以上才能發現資安事件,這主要是因為:
- 沒有記錄關鍵的安全事件
- 日誌未被定期審查
- 缺乏即時告警機制
- 日誌儲存時間過短
- 日誌完整性未受保護
應記錄的安全事件
完善的日誌系統應該記錄以下關鍵安全事件:
| 事件類型 | 說明 | 重要性 |
|---|---|---|
| 登入嘗試 | 成功與失敗的登入記錄 | 高 |
| 權限變更 | 使用者權限的新增、修改、刪除 | 高 |
| 敏感資料存取 | 存取個資或機密資料的行為 | 高 |
| 系統設定變更 | 系統組態的任何修改 | 中 |
| API 呼叫 | 外部 API 的請求與回應 | 中 |
| 錯誤與異常 | 應用程式的錯誤訊息 | 中 |
| 安全事件 | WAF 阻擋、入侵偵測告警 | 高 |
Python 日誌記錄範例:
| |
日誌格式標準化
採用標準化的日誌格式有助於日誌的分析和關聯。建議使用 JSON 格式,並包含以下必要欄位:
| |
Node.js 結構化日誌範例:
| |
日誌完整性保護
日誌的完整性至關重要,攻擊者通常會試圖刪除或修改日誌以掩蓋入侵痕跡。
保護措施:
- 日誌簽章:對日誌加上數位簽章確保未被竄改
| |
- 唯寫權限:應用程式只有寫入權限,無法刪除或修改現有日誌
- 遠端備份:即時將日誌同步到安全的遠端伺服器
集中式日誌管理
對於分散式系統,應採用集中式日誌管理解決方案,如 ELK Stack(Elasticsearch, Logstash, Kibana)或 Splunk。
Logstash 配置範例:
| |
Filebeat 配置範例:
| |
即時告警設定
建立即時告警機制可以在安全事件發生時立即通知相關人員。
常見告警規則:
| 告警條件 | 嚴重程度 | 回應時間 |
|---|---|---|
| 單一帳戶 5 分鐘內登入失敗 > 5 次 | 中 | 1 小時 |
| 同一 IP 對多個帳戶登入失敗 | 高 | 15 分鐘 |
| 管理員帳戶異常登入 | 緊急 | 立即 |
| 敏感資料大量存取 | 高 | 30 分鐘 |
| 非上班時間的管理操作 | 中 | 2 小時 |
Python 告警實作範例:
| |
事件關聯分析
透過關聯分析可以發現單一事件難以察覺的攻擊模式。
Elasticsearch 查詢範例:
| |
測試方法
1. 日誌記錄完整性測試
| |
2. 日誌注入測試
測試是否能透過輸入惡意內容污染日誌:
| |
3. 告警機制測試
| |
測試清單
- 驗證所有安全事件是否被記錄
- 測試日誌是否包含必要欄位
- 確認日誌不包含敏感資訊(密碼、信用卡號等)
- 測試日誌注入防護
- 驗證告警機制是否正常運作
- 檢查日誌保留期限是否符合規範
- 測試日誌存取權限控管
防護措施
1. 完善的日誌記錄策略
| |
2. 日誌保護機制
- 設定適當的檔案權限(chmod 640)
- 使用獨立的日誌伺服器
- 實施日誌輪替和壓縮
- 加密傳輸中的日誌資料
3. 監控儀表板建置
建立安全監控儀表板,即時顯示:
- 登入成功/失敗趨勢
- 異常存取模式
- 地理位置分析
- 高風險事件統計