

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

# 用於管理機器人的用戶端識別控制項
<a name="client-identification-controls"></a>

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

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

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

權杖取得需要使用在連線用戶端實作的 SDKs。下列 AWS WAF 功能提供適用於瀏覽器的 JavaScript 型 SDK 和適用於行動裝置的應用程式型 SDK：[機器人控制](https://docs.aws.amazon.com/waf/latest/developerguide/waf-bot-control.html)、[詐騙控制帳戶接管預防 (ATP)](https://docs.aws.amazon.com/waf/latest/developerguide/waf-atp.html) 和[詐騙控制帳戶建立詐騙預防 (ACFP)](https://docs.aws.amazon.com/waf/latest/developerguide/waf-acfp.html)。

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

## CAPTCHA
<a name="captcha"></a>

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

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

## 瀏覽器分析
<a name="browser-profiling"></a>

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

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

AWS WAF 目標機器人的機器人控制提供指示，指出瀏覽器是否顯示自動化的證據或不一致的訊號。 AWS WAF 會標記請求，以採取規則中指定的動作。如需詳細資訊，請參閱 AWS 安全部落格中的[偵測和封鎖進階機器人流量](https://aws.amazon.com/blogs/security/detect-and-block-advanced-bot-traffic/)。

## 裝置指紋
<a name="device-fingerprinting"></a>

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

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

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

與應用程式整合 SDKs 搭配使用時，目標 AWS WAF 機器人的機器人控制可以 彙總用戶端工作階段請求行為。這可協助您偵測並區隔合法用戶端工作階段與惡意用戶端工作階段，即使兩者都來自相同的 IP 地址。如需目標 AWS WAF 機器人的機器人控制詳細資訊，請參閱 AWS 安全部落格中的[偵測和封鎖進階機器人流量](https://aws.amazon.com/blogs/security/detect-and-block-advanced-bot-traffic/)。

## TLS 指紋
<a name="tls-fingerprinting"></a>

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

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

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

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