分析脈絡
- Step 1: 按月查看各 ip_country 的 Session 量與 CVR 趨勢,定位異常起始時間
- Step 2: 拆解 CN 異常流量的 source_code / cid_channel,定位問題在 WEB 端
- Step 3: 分析 User-Agent 分布,識別爬蟲類型(GuzzleHttp、null UA、偽裝瀏覽器)
- Step 4: 跨國比對 CN/KR/US 的 UA 模式,確認為同一批攻擊者
- Step 5: 檢查 null UA 的 source 分布,確認排除不會誤殺正常流量
- dm_tableau.tableau_order_dd_session_gross
- dw_middledb.action
- dw_middledb.crawlers_ip(現有爬蟲 IP 黑名單)
- dw_analysis_record.action_crawlers_cookie(現有爬蟲 cookie 黑名單)
核心發現
異常流量並非 AI Search Bot(GPTBot/ClaudeBot/PerplexityBot 合計 < 0.1%),
而是使用 GuzzleHttp/6.5.5 PHP/8.0.30 的分散式爬蟲 + 大量 null User-Agent 的程式化存取 + 偽裝 Chrome 的 headless 自動化工具。
攻擊者跨 CN/KR/US 三國使用完全相同的工具組合,且 GuzzleHttp 會偽裝 APP source(IOS/ANDROID),直接打 KKday APP 的 API endpoint。
Phase 1 的 GuzzleHttp + null UA 過濾預計可排除 CN 49%、KR 84%、US 93% 的異常流量,且零誤殺風險。
Executive Summary
2025 年 9 月起,KKday 網站遭受大規模自動化爬蟲流量攻擊,影響遍及 CN、KR、US、NL 等多國,嚴重扭曲 Session 量和 CVR 指標。
攻擊者特徵:使用相同的 GuzzleHttp/6.5.5 curl/7.81.0 PHP/8.0.30 工具,
跨 CN/KR/US 三國分散式爬取,偽裝 APP API endpoint(source 顯示為 IOS/ANDROID),
並搭配大量 null User-Agent 和偽裝 Chrome 瀏覽器的 headless 自動化工具。
異常國家 Session 量趨勢
CN 從 2025-09 起暴增,KR 持續攀升至 2026-01,US 從 2025-12 加入,NL 在 2025-06~09 期間曾大量出現後消退。
CVR 趨勢:異常國家 vs 正常國家
正常國家(TW、JP)的 CVR 維持穩定,異常國家的 CVR 因分母灌水而崩跌。
CN 異常流量定位:ORGANIC / WEB
拆解 CN 流量的 source_code + cid_channel,異常集中在 ORGANIC/WEB 組合。
User-Agent 分類:三國對比
將 User-Agent 分為五大類,比較 CN/KR/US 的異常流量組成。
US 最嚴重:80.6% 是 null UA
KR 規模最大:null UA (54%) + GuzzleHttp (30%) 合計 84%
CN 最多偽裝:regular_browser 佔 50.7%,含偽裝 Chrome/134 的 headless 工具
AI Search Bot 幾乎不存在:GPTBot / ClaudeBot / PerplexityBot 合計 < 0.1%
異常流量的 Source 分布:偽裝 APP 的鐵證
分析 null UA 和 GuzzleHttp 分別出現在哪些 source(WEB/MWEB/IOS/ANDROID)。
GuzzleHttp 大量偽裝為 IOS/ANDROID:GuzzleHttp 是 PHP HTTP Client,根本不可能是行動裝置。CN 的 GuzzleHttp 有 31 萬次偽裝 IOS、6 萬次偽裝 ANDROID;KR 更誇張,50 萬偽裝 IOS、44 萬偽裝 ANDROID。這些爬蟲直接打 KKday APP 的 API endpoint。
CN Top User-Agent 明細與 Cookies/IP 比率
分析 CN 2025-10 的 Top UA,用 cookies-per-IP 比率識別偽裝瀏覽器。
| user_agent | actions | cookies | ips | note | cookies_per_ip |
|---|---|---|---|---|---|
| Chrome/134.0.0.0 (Win10) | 832,058 | 798,374 | 21,498 | 偽裝瀏覽器:37 cookies/IP | 37.1 |
| null (無 UA) | 461,663 | 430,952 | 42,690 | 無 User-Agent | 10.1 |
| GuzzleHttp/6.5.5 PHP/8.0.30 | 370,254 | 36,187 | 82,223 | PHP HTTP Client | 0.4 |
| GuzzleHttp/7 | 5,394 | 5,187 | 4,236 | PHP HTTP Client | 1.2 |
| Chrome/141 Edge/141 | 5,139 | 2,065 | 1,356 | 可能正常 | 1.5 |
| Chrome/141.0.0.0 | 2,112 | 905 | 635 | 可能正常 | 1.4 |
| Safari/18.6 (iPhone) | 1,602 | 680 | 629 | 正常流量 | 1.1 |
GuzzleHttp 雖然 cookies/IP 較低(0.4),但它用 8.2 萬個不同 IP 分散爬取,是分散式爬蟲。
2026-03 最新狀態
截至 2026 年 3 月,各異常國家的最新狀態。
| 國家 | 基線 Sessions | 最新 (2026-02) | 倍率 | CVR 變化 | 趨勢 | 最新 (2026-01) |
|---|---|---|---|---|---|---|
| CN | ~100K | 842K | 8x | 7~10% → 0.89% | 較高峰下降,仍嚴重 | NaN |
| KR | ~1.3M | 1.61M | 1.2x | 5.5% → 1.77% | 持續惡化中 | NaN |
| US | ~190K | 652K | 3.4x | 3.0% → 0.67% | 持續惡化中 | NaN |
| NL | ~620K | NaN | 已消退 | 0.02% → 0.33% | 已自然消退 | 38K |
| GB | ~55K | 114K | 2.1x | 1.2% → 0.66% | 中等,持續 | NaN |
| FR/DE/ES/IT | <30K | 40~74K | 2~3x | — → <0.6% | 新出現,需觀察 | NaN |
建議過濾策略
根據排查結果,建議分三階段實施過濾。
Phase 1:UA Pattern 黑名單(立即可做,零誤殺風險)
AND NOT REGEXP_CONTAINS(user_agent, '(?i)GuzzleHttp')
AND user_agent IS NOT NULL
| 國家 | 可排除 Actions | 佔該國異常流量 |
|---|---|---|
| CN | 837K | 48.8% |
| KR | 2.81M | 84.0% |
| US | 855K | 92.5% |
Phase 2:UA Pattern 維護模型(中期)
新建 action_crawlers_ua 模型,維護 UA pattern 黑名單表。類似 crawlers_ip 但以 UA 為維度,可持續更新新出現的爬蟲 UA。
Phase 3:行為偵測模型(長期)
針對偽裝瀏覽器(Chrome/134 那批 UA 看似正常),需靠行為特徵識別:
- 同 IP 不同 cookie 數 > 30/天 — 自動化 cookie 輪替
- 單一 UA 版本佔該國 WEB 流量 > 40% — headless browser 農場
- Session 內商品瀏覽數 > 100 — 價格爬蟲
- Actions 時間間隔均勻無停頓 — 機器行為
結論與建議
核心發現
- 異常流量主要來自 GuzzleHttp PHP 爬蟲(21~30%)、null User-Agent(27~81%)、偽裝 Chrome 的 headless 工具(CN 特有)
- AI Search Bot(GPTBot、ClaudeBot、PerplexityBot)幾乎不存在(< 0.1%),非本次異常主因
- 三國(CN/KR/US)使用完全相同的
GuzzleHttp/6.5.5版本,高度疑似同一攻擊者或工具鏈 - GuzzleHttp 會偽裝 IOS/ANDROID source,直接存取 APP API endpoint
- null UA 全部集中在 WEB/MWEB source,排除不會影響 APP 用戶
- 問題至 2026-03 仍未解決,KR 和 US 持續惡化中
優先建議
- Phase 1(立即):在 middledb_action.sql 加入 GuzzleHttp + null UA 過濾,預估可排除 49~93% 異常流量
- Phase 2(中期):建立 UA pattern 黑名單維護機制,持續更新
- Phase 3(長期):建立行為偵測模型,用 cookies/IP 比率等指標識別偽裝瀏覽器
分析方法說明
使用 BigQuery 查詢 dm_tableau.tableau_order_dd_session_gross(Session/CVR 趨勢)及 dw_middledb.action(User-Agent 明細)進行排查。