偵測及防範簡訊詐欺

本文說明如何使用 reCAPTCHA 簡訊防護功能,偵測並防範垃圾簡訊攻擊。如果貴商家採用簡訊進行雙重驗證 (2FA) 或電話號碼驗證,就可能成為簡訊費用詐欺的目標。

簡訊驗證機制 (雙重驗證和登入) 是登入和註冊安全性的業界標準,但無法防範簡訊費用詐欺或垃圾簡訊詐欺。在您傳送簡訊前,reCAPTCHA 簡訊防護功能會提供風險分數,指出該電話號碼發生簡訊費用詐欺的可能性。根據這個分數,您可以在詐欺簡訊傳送給簡訊服務供應商之前,允許或封鎖這類訊息。

與 reCAPTCHA 全球分數相比,reCAPTCHA SMS defense 風險分數的運作方式相反。reCAPTCHA 簡訊防護風險分數為 0.0,表示簡訊費用詐欺發生的可能性很低;風險分數為 1.0,表示簡訊費用詐欺發生的可能性很高。如要進一步瞭解 reCAPTCHA 分數,請參閱「解讀網站評估結果」。如果您使用 Firebase Authentication 或 Identity Platform,請參閱 Identity Platform 說明文件

詳情請參閱 reCAPTCHA SMS defense 網誌

事前準備

請根據您是否為 reCAPTCHA 現有使用者,按照適當分頁中的操作說明進行:

現有 reCAPTCHA 使用者

如果您是 reCAPTCHA 現有使用者,請在 Google Cloud 專案中啟用 reCAPTCHA SMS defense:

  1. 前往 Google Cloud 控制台的 reCAPTCHA 頁面。

    前往 reCAPTCHA

  2. 確認資源選取器中顯示專案名稱。

    如果沒有看到專案名稱,請按一下資源選取器,然後選取專案。

  3. 按一下「設定」

  4. 在「簡訊防禦」窗格中,按一下「設定」

  5. 按一下「啟用」切換鈕,然後按一下「儲存」

    啟用 reCAPTCHA SMS defense 時,如果帳戶防護工具尚未啟用,系統會一併啟用。

    啟用 reCAPTCHA SMS defense 後,系統可能需要幾分鐘才能套用變更。功能啟用設定傳播至我們的系統後,您應該會開始在評估中收到與 reCAPTCHA 簡訊防護相關的回應。

新 reCAPTCHA 使用者

如果您是 reCAPTCHA 新手,請按照下列步驟操作:

  1. 如要在網站或行動應用程式上使用 reCAPTCHA 簡訊防護功能,請按照下列步驟整合 reCAPTCHA:

  2. 在 Google Cloud 專案中啟用 reCAPTCHA SMS defense:
    1. 前往 Google Cloud 控制台的 reCAPTCHA 頁面。

      前往 reCAPTCHA

    2. 確認資源選取器中顯示專案名稱。

      如果沒有看到專案名稱,請按一下資源選取器,然後選取專案。

    3. 按一下「設定」

    4. 在「簡訊防禦」窗格中,按一下「設定」

    5. 按一下「啟用」切換鈕,然後按一下「儲存」

      啟用 reCAPTCHA SMS defense 時,如果帳戶防護工具尚未啟用,系統會一併啟用。

      啟用 reCAPTCHA SMS defense 後,系統可能需要幾分鐘才能套用變更。功能啟用設定傳播至我們的系統後,您應該會開始在評估中收到與 reCAPTCHA 簡訊防護相關的回應。

使用電話號碼建立評估

如要使用 reCAPTCHA 防範垃圾簡訊,請使用 reCAPTCHA 用戶端程式庫或後端的 REST API,透過 execute() 函式產生的權杖和電話號碼建立評估作業。

本文說明如何使用 REST API 建立評估。如要瞭解如何使用用戶端程式庫建立評估,請參閱建立評估

建立評估前,請先完成下列步驟:

  • 設定 reCAPTCHA 驗證。

    可選用的驗證方法取決於 reCAPTCHA 的設定環境。下表可協助您選擇適當的驗證方法和支援的介面,以設定驗證:

    環境 介面 驗證方式
    Google Cloud
    • REST
    • 用戶端程式庫
    使用附加的服務帳戶
    地端部署或其他雲端服務供應商 REST 使用 API 金鑰Workload Identity 聯盟

    如要使用 API 金鑰,建議套用 API 金鑰限制,確保 API 金鑰安全無虞。

    用戶端程式庫

    使用下列設定:

  • 選擇使用者不會經常變更的穩定帳戶 ID accountId,並在 projects.assessments.create 方法中提供給評估服務。對於與同一位使用者相關的所有事件,這個穩定帳戶 ID 的值應相同。您可以提供下列任一項做為帳戶 ID:

    使用者 ID

    如果每個帳戶都能與穩定的使用者名稱、電子郵件地址或電話號碼建立專屬關聯,您就可以將這些資訊做為 accountId。當您提供這類跨網站 ID (可在不同網站重複使用的 ID) 時,reCAPTCHA 會使用這項資訊,根據跨網站模型標記濫用帳戶 ID,並運用與這些 ID 相關的跨網站濫用模式知識,提升使用者帳戶的防護能力。

    或者,如果每個帳戶都有專屬的內部使用者 ID,您可以將該 ID 提供為 accountId

    雜湊處理或加密

    如果沒有與每個帳戶唯一相關聯的內部使用者 ID,您可以將任何穩定 ID 轉換為不透明的網站專屬帳戶 ID。reCAPTCHA 帳戶防護功能仍需使用這個 ID 瞭解使用者活動模式並偵測異常行為,但不會與其他網站共用。

    挑選任何穩定的帳戶 ID,並使用加密或雜湊處理方式,在傳送至 reCAPTCHA 之前將其設為不透明:

    • 加密 (建議):使用確定性加密方法加密帳戶 ID,產生穩定的密文。如需詳細操作說明,請參閱以決定性方式加密資料。選擇對稱加密而非雜湊處理時,您不需要保留使用者 ID 與對應不透明使用者 ID 之間的對應關係。解密 reCAPTCHA 傳回的不透明 ID,將其轉換為使用者 ID。

    • 雜湊處理:建議使用 SHA256-HMAC 方法,並搭配您選擇的自訂鹽值,對帳戶 ID 進行雜湊處理。由於雜湊值只能單向轉換,您必須保留產生的雜湊值與使用者 ID 之間的對應關係,才能將傳回的雜湊帳戶 ID 對應回原始帳戶。

projects.assessments.create 方法中,新增 accountId 參數和 E.164 格式的電話號碼,做為評估中的 UserId,以進行驗證。

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:您的 Google Cloud 專案 ID。
  • TOKEN:從 grecaptcha.enterprise.execute() 呼叫傳回的權杖。
  • KEY_ID:您在網站上安裝的分數型金鑰。
  • ACCOUNT_ID:網站專屬的使用者帳戶 ID。
  • PHONE_NUMBER:需要檢查是否惡意的電話號碼。電話號碼必須採用 E.164 格式,且不得經過雜湊或加密處理。

HTTP 方法和網址:

POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments

JSON 要求主體:


{
  "event": {
    "token": "TOKEN",
    "siteKey": "KEY_ID",
    "userInfo": {
      "accountId": "ACCOUNT_ID",
      "userIds": [
        {
          "phoneNumber": "PHONE_NUMBER"
        }
      ]
    }
  }
}

如要傳送要求,請選擇以下其中一個選項:

curl

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments"

PowerShell

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments" | Select-Object -Expand Content

您應該會收到如下的 JSON 回應:


{
  "event": {
     …
  },
  "name": "ASSESSMENT_ID",
  "phoneFraudAssessment": {
    "smsTollFraudVerdict": {
      "risk": 0.3
    }
  }
}

您收到的回應會在 phoneFraudAssessment.smsTollFraudVerdict 欄位中包含 risk 分數。分數越高,電話號碼越有可能有風險;分數越低,電話號碼越有可能屬於正當活動。

您必須為根據評估結果採取的行動負責。 如要進行最簡單的整合,您可以設定門檻,phoneFraudAssessment.smsTollFraudVerdict.risk藉此協助您做出決策。

為評估結果加上註解

為追蹤簡訊流量及提升詐欺偵測準確度,您必須在簡訊傳送後或電話號碼驗證成功後 10 分鐘內,為評估結果加上註解。

如要加註評估,請將要求傳送至 projects.assessments.annotate 方法,並提供評估 ID。在該要求的內文中,以 E.164 格式在 phoneAuthenticationEvent 欄位中加入電話號碼。

如要為評估作業加上註解,請按照下列步驟操作:

  1. 視用途而定,決定要在要求 JSON 主體中新增的資訊和標籤。

    下表列出可用於註解事件的標籤和值:

    標籤 說明 要求範例
    reasons

    這是必要旗標,支援評估作業的標籤。

    在活動發生後幾秒或幾分鐘內,於 reasons 標籤中提供即時活動詳細資料,因為這些資料會影響即時偵測。

    可能的值包括:

    • INITIATED_TWO_FACTOR:系統會透過簡訊傳送驗證碼。
    • PASSED_TWO_FACTOR:驗證碼已成功通過驗證。
    • FAILED_TWO_FACTOR:驗證碼無效。
        {
          "reasons": ["INITIATED_TWO_FACTOR"],
          "phoneAuthenticationEvent": {
            "phoneNumber": "+18005550175"
          }
        }
        
    annotation

    (選用步驟) 用來指出評估作業是否合法。

    提供登入和註冊事件的相關事實,以驗證或修正 annotation 標籤中的風險評估。

    可能的值:LEGITIMATEFRAUDULENT

    建議您在事件發生後幾秒或幾分鐘內傳送這項資訊,因為這會影響即時偵測。

      {
       "annotation": "LEGITIMATE"
      }
      
  2. 使用適當的標籤建立註解要求。 <0x0A

    使用任何要求資料之前,請先替換以下項目:

    • ASSESSMENT_ID:從 projects.assessments.create 呼叫傳回的 name 欄位值。
    • ANNOTATION:選用。標籤,指出評估作業是否正當或有詐欺行為。
    • REASONS:支援註解的原因。如需可能值的清單,請參閱原因值
    • PHONE_NUMBER:接受評估的電話號碼。電話號碼必須採用 E.164 格式,且不得經過雜湊或加密處理。

    HTTP 方法和網址:

    POST https://recaptchaenterprise.googleapis.com/v1/ASSESSMENT_ID:annotate

    JSON 要求主體:

    {
      "annotation": ANNOTATION,
      "reasons": REASONS,
      "phoneAuthenticationEvent": {
        "phoneNumber": "PHONE_NUMBER"
      }
    }
    

    如要傳送要求,請選擇以下其中一個選項:

    curl

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://recaptchaenterprise.googleapis.com/v1/ASSESSMENT_ID:annotate"

    PowerShell

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://recaptchaenterprise.googleapis.com/v1/ASSESSMENT_ID:annotate" | Select-Object -Expand Content

    您應該會收到執行成功的狀態碼 (2xx) 和空白回應。

後續步驟