Upgrade to Pro — share decks privately, control downloads, hide ads and more …

網路爬蟲與 WordPress 防禦機制 / Anti-scraping and WordPress Security Defence_Terry Lin

網路爬蟲與 WordPress 防禦機制 / Anti-scraping and WordPress Security Defence_Terry Lin

開場白與講者自介 什麼是網路爬蟲
常見網路爬蟲介紹
— 搜尋引擎
— 大數據收集
— 網路服務商
— 盜文採集、垃圾流量網站
— 隨機弱點掃描、網路攻擊目標搜集
進行過濾爬蟲的優點與缺點 伺服器端的防禦機制 應用程式面的防禦機制 免費安全外掛介紹 – WP Shieldon 與會夥伴現場互動 開放提問

WordCamp Taipei

December 28, 2019
Tweet

More Decks by WordCamp Taipei

Other Decks in Technology

Transcript

  1. 淺談網路爬蟲、網站安全與
    WordPress 防禦機制
    Terry Lin

    View Slide

  2. 講者自介
    林新邦 ( Terry Lin)
    現職:豐趣科技 前端工程師
    GitHub: terrylinooo
    Website: https://terryl.in
    WP Githuber MD (Markdown 編輯器外掛 )
    WP Shieldon (安全性外掛)
    Mynote (佈景主題)
    WordPress 相關作品

    View Slide

  3. 什麼是網路爬蟲
    維基百科的解釋: https://zh.wikipedia.org/wiki/網路爬蟲
    一言以蔽之:
    以搜集資料為目的的自動程式。

    View Slide

  4. 常見的網路爬蟲
    1 搜尋引擎
    2 網路服務商
    3 數據收集
    4 盜文採集、垃圾流量網站
    5 資安威脅

    View Slide

  5. (1) 搜尋引擎
    ● Google、Bing 、Yandex (俄羅斯)、Baidu (中國),etc.
    1 沒有目標、連結跟隨
    2 遵守網路禮儀。( robots.txt)
    3 為網站帶來自然流量

    View Slide

  6. (2) 數據收集
    ● 反向連結分析 (e.g. ahref . com)
    ● 版權比對 (e.g. copyscape . com)
    ● SEO 分析 (e.g. semrush . com ) ,等等...
    1 沒有目標、連結跟隨
    2 不一定遵守網路禮儀。( robots.txt)
    3 收集數據後,包裝成服務轉售

    View Slide

  7. (3) 網路服務商
    ● 垃圾貼文 (Link building)
    ● 比價網站,等等
    1 有採集目標
    2 不遵守網路禮儀。( robots.txt)
    3 收集數據後,整理資訊呈現

    View Slide

  8. (4) 盜文採集
    ● 非自產型文章農場
    ● 網站鏡像 (Website Mirroring)
    ● 離線下載軟體,等等
    看到長的和你網站一模一樣的網站
    吼...氣氣氣氣氣氣氣
    (Shieldon 誕生的起源)

    View Slide

  9. 資安威脅
    隨機弱點掃描、攻擊目標收集
    來看看實例

    View Slide

  10. cat access.log | awk '{print $1}' | sort | uniq -c | sort -nr
    查詢 access.log 連線次數最多的IP

    View Slide

  11. grep 150.109.67.14 access.log
    這個 IP 想做什麼?

    View Slide

  12. 探嗅目標、弱點掃描
    150.109.67.14 - - [02/Sep/2019:07:23:31 +0200] "GET /phpMyAdmln/index.php HTTP/1.1" 404 169 "-"
    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0"
    150.109.67.14 - - [02/Sep/2019:07:23:31 +0200] "GET /program/index.php HTTP/1.1" 404 169 "-"
    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0"
    150.109.67.14 - - [02/Sep/2019:07:23:32 +0200] "GET /shopdb/index.php HTTP/1.1" 404 169 "-"
    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0"
    150.109.67.14 - - [02/Sep/2019:07:23:32 +0200] "GET /phppma/index.php HTTP/1.1" 404 169 "-"
    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0"
    150.109.67.14 - - [02/Sep/2019:07:23:32 +0200] "GET /phpmy/index.php HTTP/1.1" 404 169 "-" "Mozilla/5.0
    (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0"
    150.109.67.14 - - [02/Sep/2019:07:23:33 +0200] "GET /mysql/admin/index.php HTTP/1.1" 404 169 "-"
    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0"
    150.109.67.14 - - [02/Sep/2019:07:23:33 +0200] "GET /mysql/dbadmin/index.php HTTP/1.1" 404 169 "-"
    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0"
    150.109.67.14 - - [02/Sep/2019:07:23:33 +0200] "GET /mysql/sqlmanager/index.php HTTP/1.1" 404 169 "-"
    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0"
    150.109.67.14 - - [02/Sep/2019:07:23:33 +0200] "GET /mysql/mysqlmanager/index.php HTTP/1.1" 404 169 "-"
    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0"
    150.109.67.14 - - [02/Sep/2019:07:23:33 +0200] "GET /wp-content/plugins/portable-phpmyadmin/wp-pma-
    mod/index.php HTTP/1.1" 404 169 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101
    Firefox/52.0"
    150.109.67.14 - - [02/Sep/2019:07:23:33 +0200] "GET /manager/html HTTP/1.1" 404 169 "-"
    "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"

    View Slide

  13. 伺服器端的防禦機制
    Apache
    Nginx ngx_http_limit_req_module (內建)
    mod_evasive (自行安裝)

    View Slide

  14. Apache : 模組 mod_evasive
    儲存在記憶體的表大小
    設定的時間區間內頁面最大的網頁讀取數
    設定的時間區間內網站最大的網頁讀取數
    被封鎖的秒數

    View Slide

  15. Nginx : 模組 ngx_http_limit_req_module
    rate=1r/s : 每秒1次
    burst=5 : 最大緩衝次數

    View Slide

  16. 思考一下
    伺服器方案的優點和缺點

    View Slide

  17. 網站上的訪客,覺得?
    訪客A: 網站壞了,工程師好遜

    View Slide

  18. 搜尋引擎吃網頁吃到一半遇到這個?
    GoogleBot: 這張網頁有問題,給它排名低一點

    View Slide

  19. 有沒有解決方案,不會影響搜尋引擎排名?

    View Slide

  20. 應用程式面的防禦機制

    View Slide

  21. Shieldon 的
    生命週期
    部署在 PHP 套件管裡器
    Composer 自動載入之後
    PHP 框架的設計模式如有
    Middleware (中介層)
    1
    2

    View Slide

  22. WordPress Hook
    生命週期
    部署在 plugins_loaded
    第一順位
    1

    View Slide

  23. View Slide

  24. View Slide

  25. 過濾爬蟲的優點
    1 節省流量
    2 節省系統開銷
    3 提高攻擊者成本
    4 提高安全性
    5 智慧財產權保護

    View Slide

  26. 優點1:節省流量 (平均頁面下載 ? MB 降到 < 20KB )
    例:Google Cloud 網路流量定價

    View Slide

  27. 優點2:節省系統開銷
    使用 Acunetix 試用版進行掃描15分鐘後
    CPU 每5分鐘平均: 5.02 → 2.34 ↓ 53.78%
    Memory 已使用:490752 → 379944 ↓ 22.58%
    啟用前
    啟用後

    View Slide

  28. 優點3:提高攻擊者成本
    ● 更多的 Proxy IP
    Shared - 0.5 美元
    Dedicated - 2 美元
    ● 更多的時間
    與其浪費時間在你的網站,不如找其它目標

    View Slide

  29. 優點4:提高安全性
    ● 阻礙弱點掃描,降低找到弱點機率
    ● 攻擊者嘗試修改標頭資訊 (Header)、修改表單
    (Form) 測試弱點會一直受到要求驗證碼的阻礙

    View Slide

  30. 優點5:智慧財產權保護
    ● 保護文章被打包帶走

    View Slide

  31. 過濾爬蟲的缺點
    1 偶爾造成訪客瀏覽困擾
    2 擋到不希望被阻擋的爬蟲
    3 可能阻擋到 WordPress 正常功能使用
    (請回報給我立即排除)

    View Slide

  32. WP Shieldon 設定說明及過濾原理
    ● 設定
    ● 動作記錄
    ● 總覽
    ● 規則表
    ● 過濾器記錄表
    ● 工作階段表
    ● IP 位址管理
    ● XSS 防護
    ● 網頁驗證

    View Slide

  33. 設定 → 守護進程
    ● 必須啟用才會正式運作。

    View Slide

  34. 設定 → 守護進程 → 資料驅動
    ● 效率 Redis > MySQL > SQLite > File system

    View Slide

  35. 設定 → 守護進程 → 重設資料週期
    ● 已經不會再度造訪的 IP 累積越多,查詢效率越差

    View Slide

  36. 設定 → 守護進程 → IP 位址來源
    ● 網站訪客的 IP 來源

    View Slide

  37. 設定 → 守護進程 → 線上工作階段限制

    View Slide

  38. 設定 → 守護進程 → 線上工作階段限制
    ● 線上 280 個工作階段。
    ● 限制 100 個工作階段。
    ● 我是第 280 個,須等待
    180 人。
    ● 每人有 5 分鐘可以瀏覽,
    過期後會被踢出重新排隊。

    View Slide

  39. 過濾器 (Filters)
    1 點閱頻率
    2 工作階段
    3 HTTP 參照來源
    4 Cookie

    View Slide

  40. 設定 → 守護進程 → 檢查頻率(Filter 1)

    View Slide

  41. 設定 -> 過濾器 -> 工作階段(Filter 2)

    View Slide

  42. 設定 → 過濾器 → HTTP 參照來源位址(Filter 3)
    ● HTTP_REFERER 為空的會被標記

    View Slide

  43. 設定 → 過濾器 → Cookie(Filter 4)
    ● 無法執行網頁的 JavaScript 以產生 Cookie,會被標記

    View Slide

  44. 元件 (Components)
    1 受信任的檢索機器人
    2 資料標頭
    3 使用者代理
    4 DNS 反向解析

    View Slide

  45. 設定 → 元件 → 受信任的檢索機器人
    ● [嚴格模式] 下一頁說明

    View Slide

  46. IP 與 IP 反解

    View Slide

  47. 設定 → 元件 → 資料標頭 (Header)

    View Slide

  48. 設定 → 元件 → 使用者代理 (User-agent)

    View Slide

  49. 設定 → 元件 → DNS 反向解析 (rDNS)

    View Slide

  50. 設定 → CAPTCHA → Google ReCAPTCHA

    View Slide

  51. 設定 → CAPTCHA → Google ReCAPTCHA
    v2 v3

    View Slide

  52. 設定 -> CAPTCHA -> 圖片CAPTCHA 驗證

    View Slide

  53. 設定 → CAPTCHA → 圖片CAPTCHA 驗證

    View Slide

  54. 設定 → 排除項目 → 網址

    View Slide

  55. 設定 → 排除項目 → 頁面

    View Slide

  56. IP管理
    ● 全站
    ● 登入
    ● 註冊
    ● XML-RPC
    可設定封鎖單一個 IP
    也可封鎖 IP 區段

    View Slide

  57. IP管理 → 登入 ( wp.login.php )
    ● 給沒有固定 IP 的使用者,一個避免封鎖的入口
    ● 這個網址只能你本人知道。

    View Slide

  58. XSS 防護

    View Slide

  59. XSS 防護
    不想過濾全部,也
    可只針對特定變數
    名稱。

    View Slide

  60. 網頁認證

    View Slide

  61. 報表 → 動作記錄

    View Slide

  62. 報表 → 資料週期 → 工作階段表

    View Slide

  63. 報表 → 資料週期 → 過濾器記錄表

    View Slide

  64. 報表 → 資料週期 → 規則表

    View Slide

  65. 總覽

    View Slide

  66. WP Shieldon 外掛下載
    https://wordpress.org/plugins/wp-shieldon/
    https://github.com/terrylinooo/wp-shieldon
    開放源碼
    WordPress官方下載點

    View Slide

  67. 實例
    https://terryl.in (WP Shieldon外掛)
    https://shieldon.io (Shieldon Firewall)

    View Slide

  68. END

    View Slide