Web Log Analysis Concept

尋找攻擊者除了要有資安概念外,分析方法也是重要的環節。Web Log分析的方法是將「分析方向(由大到小、基準線、時序、同儕)」與「日誌屬性(URL、Status、Method、UA、Referer)」做矩陣式搭配,再落實到「報告撰寫(摘要、宏觀成因、微觀 IP 與證據佐證)」,才能成為結構完整、邏輯清晰且具備實務價值的分析結果。


一 Web Log 異常分析

以下是幾個常見的分析方向

1. 從上到下看(Top-Down & Aggregation Analysis)

  • 概念說明:面對數百萬筆海量 Log,切忌從第 1 筆開始逐行細讀。必須先透過圖表或 GROUP BY 聚合功能拉出全域統計,找出「極大值(Top 10)」或「極小值(Rare/Outlier)」,再下鑽(Drill-down)去看個別 Log 的細節。
  • 實例
    • 看 Top 10 IP:統計發現第 1 名的 IP 占了全站 35% 流量。下鑽發現該 IP 在 1 小時內對 /api/v1/login 發送數萬次 POST 請求(帳密暴力破解 / Credential Stuffing)。
    • 看 Top 10 Status Code:統計發現 HTTP 404 占了全站流量 65%。下鑽查看對應的 URL,發現全是 .envwp-config.php.bak/admin/,確認為自動化弱點掃描。
    • 看極小值(Bottom 10):統計 User-Agent,全站 99% 是主流瀏覽器,但出現 1 筆只出現過 1 次的 UA,內容包含 ${jndi:ldap://...}(Log4Shell 漏洞試探)。

2. 了解平常的樣子(建立基準線 Baseline)

  • 概念說明:沒有定義「正常」,就無法辨識「異常」。分析師必須先掌握系統在平時營運時的基線(Baseline),包含請求方法比例、常規回應大小與流量波動範圍。
  • 實例
    • Method 比例基線:平日網站流量比例為 GET (85%)POST (15%)。若某天 POST 比例突然飆升至 70%,或突然出現平日沒有的 PUT/DELETE/OPTIONS,即為異常。
    • 回應傳輸量(Bytes Sent)基線:個資查詢 API(/api/get_user_info)平次回傳大小通常在 2 KB ~ 5 KB。若 Log 中該 API 回傳了 50 MB,極可能發生了 SQL 注入全表拖庫(Data Exfiltration)或任意檔案下載(LFI)。

3. 時間比較分析(趨勢與週期分析)

  • 概念說明:將當前時段(如最後 24 小時)與歷史週期(過去 7 天、30 天)進行比對,尋找時間軸上的突波(Spike)或離峰時段的異常行為
  • 實例
    • 最近 24 小時(短期離峰突波):平日凌晨 3:00~4:00 流量為全天最低(每分鐘不到 30 筆),但今日凌晨 3:00 突然飆升至每分鐘 2 萬筆,且集中在少數 API,通常為排程腳本或海外攻擊者在離峰期發動攻擊。
    • 7 天 / 30 天(長週期比較):比較 30 天內「每日獨立 IP 數(Unique IPs)」與「總請求數」。若某天獨立 IP 數沒有增長,但總請求數暴增 10 倍,代表是少數特定 IP 發動的高頻攻擊(如 CC 攻擊/爬蟲),而非真實使用者成長。

4. 和別的 IP 比較(同儕分析)

  • 概念說明:將單一 IP 的屬性特徵與「全站使用者群體」做橫向交叉比對,找出偏離常態的IP。
  • 實例
    • URL 豐富度(Diversity)對比:正常使用者會載入 HTML、CSS、JS、圖片與多個 API(1 小時內存取數十個不同 URL);某 IP 發送 2,000 次請求卻 100% 只存取 1 個 URL(如 /cart/checkout),為典型的搶購/搶票 Bot。
    • Header 組合對比:99% 的正常 IP 在發送 POST 時都會帶有 Referer 與標準瀏覽器 User-Agent;若某 IP 發送 POSTReferer 為空白,且 User-Agentpython-requests/2.31 或空白,即為未經偽裝的自動化腳本。

Web Log 要關注的屬性

將上述分析方向與常見Web Log 關鍵屬性進行矩陣式交叉,能精準鎖定各類型的攻擊特徵,常見屬性有URL, HTTP Status, Method, Useragent, Referer等,舉例如下:

關注屬性核心關注點交叉分析範例(異常特徵)
URL (Request Path)存取路徑是否敏感、參數長度、是否含特殊字元包含 ../..(路徑遍歷)、UNION SELECT(SQLi)、/admin/.git/(目錄探測)。
HTTP Status Code回應狀態碼分布(200, 30x, 401, 403, 404, 500)404 比例過高(掃描);401/403 激增(權限試探);出現大量 500(應用程式崩潰或 SQL 錯誤注入)。
HTTP Method請求方法(GET, POST, PUT, DELETE, OPTIONS, HEAD)對靜態圖檔(.jpg)發送 POST(Webshell 調用);出現罕見的 PUT/DELETE(企圖寫入/刪除檔案)。
User-Agent (UA)客戶端軟體特徵、版本號、長度出現 sqlmapNiktoGo-http-clientpython-requests,或 UA 內藏有 ${jndi: / 命令列代碼。
Referer請求來源頁面敏感操作(如付款、修改密碼)無 Referer(CSRF/腳本直連);或 Referer 指向外部可疑釣魚網站。

二 報告撰寫架構

撰寫資安分析報告時,應遵循「先寫摘要 -> 再分析宏觀異常成因 -> 最後深入可疑 IP 屬性與證據佐證」的層次。

  1. 先宏觀再微觀:先用統計與圖表說服讀者「發生了什麼異常」,再用單筆 Log「證實是誰做的」。
  2. 數據要有對照組:單寫「此 IP 發送了 4 萬次請求」說服力不足;寫出「全站平均單 IP 為 50 次,該 IP 為平均值的 800 倍」,能更精確凸顯其異常程度。

【範本】Web Log 資安威脅分析報告

1. 執行摘要(Executive Summary)

本次分析區間為 2026/08/15 00:00 至 2026/08/15 12:00。分析期間監測到顯著流量異常,共發現 1 個高風險攻擊 IP(198.51.100.45),該來源針對後台管理介面與備份路徑進行大規模自動化目錄列舉與弱點掃描,累計發送逾 42,000 次惡意請求。目前受測路徑均回傳 404/403,尚未發現攻擊成功突破之跡象,建議已於防火牆封鎖該 IP。

2. 宏觀異常分析與導因(Macro Anomalies & Root Cause)

  • 宏觀異常發現
    • 今日凌晨 02:00 ~ 03:30 期間,全站 HTTP 404 Not Found 回應數暴增至 42,310 次,占該時段總請求量的 82%(平日歷史基線僅為 1.5%)。
  • 異常構成與手法解析
    • 經聚合關聯分析,該突波集中在單一來源 IP 198.51.100.45 對非公開路徑的大量試探。攻擊者使用自動化字典檔掃描工具,快速列舉如 .envwp-config.php.bak/admin/config.json 等敏感檔案,由於目標檔案在伺服器上均不存在,因而觸發大量 404 狀態碼。

3. 疑似攻擊 IP 詳細剖析(Suspect IP Profile & Evidence)

資訊一:和 IP 相關的日誌屬性介紹(IP Attributes)
屬性項目日誌紀錄 / 分析結果
可疑 IP198.51.100.45
地理位置 / 所屬 ISP美國 (US) / DigitalOcean 雲端機房
威脅情資標籤標記為 Known Malicious Scanner / Tor Exit Node
主要活動時間2026-08-15 02:15:20 ~ 03:42:11(持續約 1.5 小時)
主要 User-AgentGo-http-client/1.1 (Go 語言自動化套件預設值)
主要 Referer(空白未填寫)
請求方法(Method)GET (99.2%)、POST (0.8%)
資訊二:判定異常原因與佐證截圖(Root Cause & Screenshots)
  • 判定異常原因
    1. 請求頻率遠超常人:該 IP 於 1.5 小時內發送 42,000 次請求,平均每秒高達 7.7 次,遠高於正常使用者行為模式(正常單 IP 每小時少於 100 次)。
    2. 狀態碼分布極端:該 IP 請求之 HTTP 404 比例達 98%,具備明確的目錄列舉特徵。
    3. 標頭特徵符合腳本:所有請求皆無 Referer,且 User-Agent 為未經偽裝之開發套件標頭。
  • 相關佐證截圖
    • 【佐證圖 1:Top IP 流量與狀態碼統計圖】
      (此處附上 SIEM / Kibana / Grafana 聚合圖表,標記該 IP 的流量柱狀圖與 404 占比離群狀況)
    • 【佐證圖 2:原始日誌(Raw Log)採樣截圖】
      (此處附上 3~5 筆原始日誌截圖,紅框標記 Timestamp、Client IP、請求路徑如 /admin/.env、狀態碼 404 及 User-Agent Go-http-client/1.1)