從 Log4j 到 IIS:理解與應用
近期資安事件頻傳,Log4j 漏洞事件更是讓許多開發者和系統管理員繃緊神經。雖然 Log4j 主要應用於 Java 環境,但其影響範圍廣泛,也間接影響到其他平台,包括 Microsoft 的 IIS (Internet Information Services)。本文將深入探討 Log4j 漏洞,並探討如何在 IIS 環境中進行有效的日誌管理和安全防護。
Log4j 漏洞回顧
Log4j 是一個廣泛使用的 Java 日誌框架。在 2021 年底爆發的 Log4j 漏洞 (CVE-2021-44228) 影響極其深遠。該漏洞允許攻擊者通過發送特製的日誌請求,在伺服器上執行任意程式碼。攻擊原理是 Log4j 在處理日誌訊息時,會對某些特殊語法 (例如 `${jndi:ldap://…}`) 進行解析,並通過 JNDI (Java Naming and Directory Interface) 查詢遠端伺服器,進而執行惡意程式碼。
雖然 IIS 本身不是 Java 應用程式伺服器,通常不會直接使用 Log4j,但以下情境仍可能受到影響:
- IIS 作為反向代理: 如果 IIS 作為反向代理伺服器,將請求轉發到後端的 Java 應用程式,則後端應用程式的 Log4j 漏洞可能被利用。
- Web 應用程式: 即使 Web 應用程式不是用 Java 撰寫,如果它使用了任何底層 Java 組件,且這些組件使用了存在漏洞的 Log4j 版本,則仍然存在風險。
- 其他元件: IIS 伺服器上運行的其他元件,例如某些擴充功能或外掛程式,可能依賴於 Java 和 Log4j。
IIS 日誌管理
良好的日誌管理是安全防護的重要一環。IIS 提供了豐富的日誌功能,可以記錄 Web 伺服器的各種活動,包括請求、錯誤、安全事件等。透過分析這些日誌,可以及早發現潛在的攻擊和異常行為。
IIS 內建日誌功能
IIS 預設提供了一些基本的日誌功能,可以記錄以下資訊:
- HTTP 錯誤日誌: 記錄 HTTP 錯誤訊息,例如 404 Not Found、500 Internal Server Error 等。
- 安全日誌: 記錄安全相關事件,例如身份驗證失敗、拒絕存取等。
- 請求日誌: 記錄每個 HTTP 請求的詳細資訊,包括客戶端 IP 位址、請求 URI、HTTP 方法、使用者代理程式等。
這些日誌可以配置儲存位置、格式和保留策略。可以通過 IIS 管理員或直接編輯 IIS 的設定檔 (applicationHost.config) 來進行配置。
使用進階日誌模組
IIS 還提供了一個進階日誌模組 (Advanced Logging Module),可以更靈活地配置日誌記錄。該模組允許您定義自定義的日誌欄位、篩選條件和輸出格式。例如,您可以記錄特定的 HTTP 標頭、Cookie 或使用者資訊。
以下是一個使用進階日誌模組記錄特定 HTTP 標頭的範例:
<advancedLogging enabled="true">
<siteDefinitions>
<site name="MyWebsite" useW3CFields="true">
<w3CFields>
<clear />
<add name="date" source="date" />
<add name="time" source="time" />
<add name="s-ip" source="serverAddress" />
<add name="cs-method" source="method" />
<add name="cs-uri-stem" source="uriStem" />
<add name="cs-uri-query" source="uriQuery" />
<add name="cs(User-Agent)" source="requestHeader" header="User-Agent" />
<add name="cs(Referer)" source="requestHeader" header="Referer" />
<add name="sc-status" source="statusCode" />
<add name="sc-bytes" source="bytesSent" />
<add name="cs-bytes" source="bytesReceived" />
<add name="time-taken" source="timeTaken" />
</w3CFields>
</site>
</siteDefinitions>
<logDefinitions>
<logDefinition name="MyWebsiteLog" site="MyWebsite" enabled="true"
dailySchedule="00:00:00"
directory="C:\inetpub\logs\AdvancedLogs"
format="W3C"
truncateFiles="true"
maxFileSizeKB="10240"
period="Daily" />
</logDefinitions>
</advancedLogging>
這個範例配置了一個名為 “MyWebsiteLog” 的日誌定義,它記錄了日期、時間、伺服器 IP 位址、HTTP 方法、URI、使用者代理程式、Referer、狀態碼、發送和接收的位元組數以及請求處理時間。日誌以 W3C 格式儲存到 “C:\inetpub\logs\AdvancedLogs” 目錄中,每天產生一個新的日誌檔案,並在檔案大小達到 10MB 時截斷。
安全防護建議
除了有效的日誌管理外,還應採取以下措施來加強 IIS 環境的安全性:
- 及時更新: 定期更新 IIS 和所有相關元件,以修補已知的安全漏洞。
- 最小權限原則: 僅授予使用者和應用程式所需的最低權限。
- Web 應用程式防火牆 (WAF): 使用 WAF 來過濾惡意請求,例如 SQL 注入、跨站腳本攻擊等。
- 安全掃描: 定期使用安全掃描工具來檢測系統中的漏洞。
- 入侵檢測系統 (IDS): 部署 IDS 來監控網路流量,並檢測可疑的活動。
- 禁用不必要的服務和功能: 禁用任何不使用的 IIS 服務和功能,以減少攻擊面。
- 使用強密碼: 為所有使用者帳戶配置強密碼,並定期更改密碼。
- 多因素身份驗證 (MFA): 啟用 MFA 可以提高身份驗證的安全性。
總結
Log4j 漏洞事件提醒我們,即使是不直接使用的組件,也可能對系統安全造成威脅。在 IIS 環境中,除了關注 IIS 本身的安全外,還應關注 Web 應用程式和所有相關元件的安全性。通過有效的日誌管理和安全防護措施,可以最大限度地降低安全風險。
參考文獻
- Microsoft Learn. (n.d.). Advanced Logging for IIS – Custom Logging. Retrieved from https://learn.microsoft.com/en-us/iis/extensions/advanced-logging-module/advanced-logging-for-iis-custom-logging
- Microsoft Learn. (n.d.). Log4J vulnerability concerns. Retrieved from https://learn.microsoft.com/en-us/answers/questions/662469/log4j-vulnerability-concerns
- SecurityScorecard. (2024). Log4j Security Vulnerability [PDF]. Retrieved from https://securityscorecard.com/wp-content/uploads/2
🧠 本文由 DreamJ AI 自動網路探索生成系統撰寫,內容經 AI 模型審核與自動優化,
僅供技術參考與研究用途。












發佈留言