View a markdown version of this page

用於管理機器人的用戶端識別控制項 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

用於管理機器人的用戶端識別控制項

如果無法透過靜態屬性輕鬆識別與攻擊相關的流量,則偵測需要能夠準確識別提出請求的用戶端。例如,當限制速率的屬性是應用程式特定的,例如 Cookie 或權杖時,速率型規則通常會更有效率且更難逸出。使用與工作階段繫結的 Cookie 可防止殭屍網路運算子跨多個機器人複製類似的請求流程。

字符獲取通常用於用戶端識別。針對權杖取得,JavaScript 程式碼會收集資訊,以產生在伺服器端評估的權杖。評估的範圍可以從驗證用戶端上執行 JavaScript 到收集裝置資訊以進行指紋。權杖取得需要將 JavaScript 開發套件整合到網站或應用程式中,或者需要服務提供者動態執行注入。

需要 JavaScript 支援為嘗試模擬瀏覽器的機器人新增額外的障礙。涉及 SDK 時,例如在行動應用程式中,權杖擷取會驗證 SDK 實作,並防止機器人模擬應用程式的請求。

權杖取得需要使用在連線用戶端實作的 SDKs。下列 AWS WAF 功能提供適用於瀏覽器的 JavaScript 型 SDK 和適用於行動裝置的應用程式型 SDK:機器人控制詐騙控制帳戶接管預防 (ATP)詐騙控制帳戶建立詐騙預防 (ACFP)

用戶端識別的技術包括 CAPTCHA、瀏覽器分析、裝置指紋和 TLS 指紋。

CAPTCHA

完全自動化的公有 Turing 測試,用於區分電腦和人類 (CAPTCHA),以區分機器人和人類訪客,並防止 Web 抓取、憑證填充和垃圾郵件。有各種實作,但它們通常涉及人類可以解決的拼圖。CAPTCHAs為常見機器人提供額外的防禦層,並可減少機器人偵測中的誤判。

AWS WAF 允許規則針對符合規則檢查條件的 Web 請求執行 CAPTCHA 動作。此動作是評估 service. AWS WAF rules 收集的用戶端識別資訊的結果。rules 可能需要解決 CAPTCHA 挑戰,以解決經常由機器人鎖定的特定資源,例如登入、搜尋和表單提交。 AWS WAF 可以透過間質方式或使用 SDK 在用戶端處理 CAPTCHA。如需詳細資訊,請參閱 CAPTCHA 和 Challenge in AWS WAF

瀏覽器分析

瀏覽器分析是一種收集和評估瀏覽器特性的方法,作為字符獲取的一部分,用於使用互動式瀏覽器區分真實人類和分散式機器人活動。您可以透過瀏覽器運作方式固有之請求的標頭、標頭順序和其他特性,被動地執行瀏覽器分析。

您也可以使用字符擷取在程式碼中執行瀏覽器分析。透過使用 JavaScript 進行瀏覽器分析,您可以快速判斷用戶端是否支援 JavaScript。這可協助您偵測不支援它的簡單機器人。瀏覽器分析檢查不只是 HTTP 標頭和 JavaScript 支援;瀏覽器分析讓機器人難以完全模擬 Web 瀏覽器。兩個瀏覽器分析選項都有相同的目標:尋找瀏覽器設定檔中的模式,指出與實際瀏覽器的行為不一致。

AWS WAF 目標機器人的機器人控制提供指示,指出瀏覽器是否顯示自動化的證據或不一致的訊號。 AWS WAF 會標記請求,以採取規則中指定的動作。如需詳細資訊,請參閱 AWS 安全部落格中的偵測和封鎖進階機器人流量

裝置指紋

裝置指紋類似於瀏覽器分析,但並不限於瀏覽器。在裝置上執行的程式碼 (可以是行動裝置或 Web 瀏覽器) 會收集裝置的詳細資訊,並向後端伺服器回報。詳細資訊可以包含系統屬性,例如記憶體、CPU 類型、作業系統 (OS) 核心類型、作業系統版本和虛擬化。

您可以使用裝置指紋辨識機器人是否模擬環境,或是否有使用自動化的直接跡象。除此之外,裝置指紋也可以用來辨識來自相同裝置的重複請求。

識別來自相同裝置的重複請求,即使裝置嘗試變更請求的某些特性, 也允許後端系統強制執行速率限制規則。以裝置指紋為基礎的速率限制規則通常比以 IP 地址為基礎的速率限制規則更有效。這可協助您減少在 VPNs 或代理之間輪換,但來自少量裝置的機器人流量。

與應用程式整合 SDKs 搭配使用時,目標 AWS WAF 機器人的機器人控制可以 彙總用戶端工作階段請求行為。這可協助您偵測並區隔合法用戶端工作階段與惡意用戶端工作階段,即使兩者都來自相同的 IP 地址。如需目標 AWS WAF 機器人的機器人控制詳細資訊,請參閱 AWS 安全部落格中的偵測和封鎖進階機器人流量

TLS 指紋

當機器人來自許多 IP 地址,但具有類似的特性時,通常會使用 TLS 指紋,也稱為以簽章為基礎的規則。使用 HTTPS 時,用戶端和伺服器端會交換訊息,以互相確認和驗證。它們會建立密碼編譯演算法和工作階段金鑰。這稱為 TLS 交握。如何實作 TLS 交握是一種簽章,通常對於識別分散在許多 IP 地址的大型攻擊很有價值。

TLS 指紋可讓 Web 伺服器以高準確度判斷 Web 用戶端的身分。在進行任何應用程式資料交換之前,它只需要第一個封包連線中的參數。在此情況下,Web 用戶端是指起始請求的應用程式,可能是瀏覽器、CLI 工具、指令碼 (機器人)、原生應用程式或其他用戶端。

SSL 和 TLS 指紋方法之一是 JA3 指紋。JA3 會根據 SSL 或 TLS 交握的 Client Hello 訊息中的欄位對用戶端連線進行指紋。它可協助您跨不同的來源 IP 地址、連接埠和 X.509 憑證來描述特定的 SSL 和 TLS 用戶端。

Amazon CloudFront 支援將 JA3 標頭新增至請求。CloudFront-Viewer-JA3-Fingerprint 標頭包含傳入檢視器請求之 TLS Client Hello 封包的 32 個字元雜湊指紋。指紋會封裝用戶端通訊方式的相關資訊。此資訊可用於描述共用相同模式的用戶端。您可以將 CloudFront-Viewer-JA3-Fingerprint標頭新增至原始伺服器請求政策,並將政策連接至 CloudFront 分佈。然後,您可以在原始伺服器應用程式或 Lambda@Edge 和 CloudFront Functions 中檢查標頭值。您可以比較標頭值與已知惡意軟體指紋清單,以封鎖惡意用戶端。您也可以將標頭值與預期的指紋清單進行比較,以僅允許來自已知用戶端的請求。