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

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

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

如果無法透過靜態屬性輕易辨識攻擊相關流量,則偵測必須能夠準確識別提出要求的用戶端。例如,當速率限制的屬性是應用程序特定的(例如 cookie 或令牌)時,基於速率的規則通常更有效且更難逃避。使用綁定到會話的 cookie 可以防止殭屍網絡操作員能夠在許多漫遊器上複製類似的請求流程。

令牌獲取通常用於客戶端識別。對於令牌獲取, JavaScript 代碼會收集信息以生成在服務器端評估的令牌。評估的範圍從驗證 JavaScript 是否在用戶端上執行到收集裝置資訊以進行指紋辨識。令牌獲取需要將 JavaScript SDK 集成到站點或應用程序中,或者服務提供商動態執行注入。

需要 JavaScript 支持為嘗試模擬瀏覽器的漫遊器增加了一個額外的障礙。當涉及 SDK(例如在移動應用程序中)時,令牌獲取會驗證 SDK 實現並防止漫遊器模仿應用程序的請求。

令牌獲取需要使用在連接客戶端實現的 SDK。下列 AWS WAF 功能提供適用 JavaScript於瀏覽器的 SDK,以及適用於行動裝置的應用程式 SDK:機器人控制防止詐騙控制帳戶接管 (ATP)詐騙控制帳戶建立詐騙預防 (AC FP)。

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

CAPTCHA

完全自動化的公共圖靈測試,可將計算機和人類分開(CAPTCHA)用於區分機器人和人類訪問者,並防止網絡抓取,憑證填充和垃圾郵件。有各種各樣的實現,但它們通常涉及一個人可以解決的難題。驗證碼可針對常見的機器人提供額外的防禦層,並且可以減少機器人偵測中的誤判率。

AWS WAF 允許規則針對符合規則檢查條件的 Web 要求執行 CAPTCHA 動作。此操作是評估服務收集的客戶識別信息的結果。 AWS WAF 規則可能需要針對經常被機器人鎖定的特定資源(例如登錄,搜索和表單提交)解決 CAPTCHA 挑戰。 AWS WAF 可以通過插頁式方式或通過使用 SDK 在客戶端處理它直接提供 CAPTCHA。有關更多信息,請參閱驗證碼和挑戰 AWS WAF

瀏覽器分析

瀏覽器分析是一種收集和評估瀏覽器特徵的方法,作為令牌獲取的一部分,用於區分使用交互式瀏覽器的真實人類與分佈式機器人活動。您可以透過瀏覽器運作方式所固有的要求的標頭、標頭順序和其他特性,以被動方式執行瀏覽器剖析。

您還可以通過使用令牌獲取在代碼中執行瀏覽器分析。通過使 JavaScript 用瀏覽器分析,您可以快速確定客戶端是否支持 JavaScript。這有助於您檢測不支持它的簡單漫遊器。瀏覽器分析檢查的不僅僅是 HTTP 標頭和 JavaScript 支持; 瀏覽器分析使漫遊器很難完全模擬 Web 瀏覽器。這兩個瀏覽器分析選項都有相同的目標:在瀏覽器配置文件中查找表示與真實瀏覽器行為不一致的模式。

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

裝置指紋

裝置指紋與瀏覽器分析類似,但不限於瀏覽器。在設備上運行的代碼(可以是移動設備或 Web 瀏覽器)收集設備的詳細信息並向後端服務器報告。詳細資料包括系統屬性,例如記憶體、CPU 類型、作業系統 (OS) 核心類型、作業系統版本和虛擬化。

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

即使設備嘗試更改請求的某些特性,也可以識別來自同一設備的重複請求,允許後端系統施加速率限制規則。以裝置指紋為基礎的速率限制規則通常比以 IP 位址為基礎的速率限制規則更有效。這可協助您減輕在 VPN 或 Proxy 之間旋轉但來自少數裝置的機器人流量。

搭配應用程式整合 SDK (針對目標機器人的機器人控制) 使用時,可彙總用戶端工作階段要求行為。 AWS WAF 這可協助您偵測合法的用戶端工作階段,並將其與惡意用戶端工作階段分開,即使兩者來自相同的 IP 位址也是如此。如需有關 AWS WAF 針對目標機器人控制的更多資訊,請參閱 AWS 安全性部落格中的偵測並封鎖進階機器人流量

TLS 指紋辨識

TLS 指紋識別 (也稱為以簽名為基礎的規則) 通常在機器人來自許多 IP 位址但具有類似特性時使用。使用 HTTPS 時,用戶端和伺服器端會交換訊息以互相認可和驗證。他們建立加密算法和會話密鑰。這稱為 TLS 握手。實作 TLS 握手的方式是一種簽章,對於辨識散佈在多個 IP 位址的大型攻擊而言通常很有用。

TLS 指紋識別可讓 Web 伺服器以高度準確的方式判斷 Web 用戶端的身分。在發生任何應用程式資料交換之前,它只需要第一個封包連線中的參數。在這種情況下,Web 客戶端是指啟動請求的應用程序,這可能是瀏覽器,CLI 工具,腳本(bot),本機應用程序或其他客戶端。

一種 SSL 和 TLS 指紋識別方法是 JA3 指紋識別。JA3 會根據來自 SSL 或 TLS 握手的用戶端 Hello 訊息中的欄位,為用戶端連線指紋。它可協助您設定跨不同來源 IP 位址、通訊埠和 X.509 憑證的特定 SSL 和 TLS 用戶端。

Amazon CloudFront 支持向請求添加 JA3 標頭CloudFront-Viewer-JA3-Fingerprint標頭包含傳入檢視器要求的 TLS 用戶端 Hello 封包的 32 個字元雜湊指紋。指紋封裝有關用戶端通訊方式的資訊。此資訊可用於分析共用相同病毒碼的用戶端。您可以將標CloudFront-Viewer-JA3-Fingerprint頭新增至原始要求原則,並將原則附加至 CloudFront 散發。然後,您可以在原始應用程式或 Lambda @Edge 和 CloudFront 函數中檢查標頭值。您可以將標頭值與已知惡意程式碼指紋清單進行比較,以封鎖惡意用戶端。您也可以將標頭值與預期的指紋清單進行比較,以便僅允許來自已知用戶端的要求。