Rilevare e prevenire le frodi via SMS

Questo documento mostra come utilizzare SMS defense per rilevare e prevenire gli attacchi di tipo SMS pumping nelle attività che si basano sugli SMS per l'autenticazione a due fattori (2FA) o la verifica telefonica, che è un potenziale obiettivo per la frode tariffaria SMS.

L'autenticazione basata su SMS (2FA e accesso) è uno standard di settore per la sicurezza di accesso e registrazione, ma non fornisce protezione contro la frode tariffaria SMS o la frode di tipo SMS pumping. Prima di inviare un SMS, SMS defense ti fornisce un punteggio di rischio che indica la probabilità che il numero di telefono commetta frodi tariffarie tramite SMS. In base a questo punteggio, puoi consentire o bloccare i messaggi SMS fraudolenti prima che vengano inviati al tuo fornitore di servizi SMS.

Il punteggio di rischio di SMS defense funziona in modo inverso rispetto al punteggio globale di reCAPTCHA. Un punteggio di rischio di SMS defense pari a 0,0 indica una bassa probabilità di frode tariffaria SMS; un punteggio di rischio pari a 1,0 indica un'alta probabilità di frode tariffaria SMS. Per ulteriori informazioni sui punteggi di reCAPTCHA, consulta Interpretare le valutazioni per i siti web. Se utilizzi Firebase Authentication o Identity Platform, consulta la documentazione di Identity Platform.

Per ulteriori informazioni, consulta il blog di SMS defense.

Prima di iniziare

A seconda che tu sia un utente esistente di reCAPTCHA o un nuovo utente, segui le istruzioni nella scheda appropriata:

Utente reCAPTCHA esistente

Se sei un utente esistente di reCAPTCHA, abilita SMS defense nel tuo Google Cloud progetto:

  1. Nellaconsole, vai alla pagina reCAPTCHA. Google Cloud

    Vai a reCAPTCHA

  2. Verifica che il nome del tuo progetto venga visualizzato nel selettore di risorse.

    Se non vedi il nome del tuo progetto, fai clic sul selettore di risorse, e poi seleziona il tuo progetto.

  3. Fai clic su Impostazioni.

  4. Nel riquadro SMS defense, fai clic su Configura.

  5. Fai clic sul pulsante di attivazione/disattivazione Abilita e poi su Salva.

    L'abilitazione di SMS defense potrebbe richiedere alcuni minuti per la propagazione ai nostri sistemi. Una volta propagata l'abilitazione della funzionalità ai nostri sistemi, dovresti iniziare a ricevere risposte relative a SMS defense come parte delle valutazioni.

Nuovo utente reCAPTCHA

Se non hai mai utilizzato reCAPTCHA, procedi nel seguente modo:

  1. A seconda che tu voglia utilizzare SMS defense su un sito web o un'applicazione mobile, segui questi passaggi per integrare reCAPTCHA:

  2. Abilita SMS defense nel tuo Google Cloud progetto:
    1. Nellaconsole, vai alla pagina reCAPTCHA. Google Cloud

      Vai a reCAPTCHA

    2. Verifica che il nome del tuo progetto venga visualizzato nel selettore di risorse.

      Se non vedi il nome del tuo progetto, fai clic sul selettore di risorse, e poi seleziona il tuo progetto.

    3. Fai clic su Impostazioni.

    4. Nel riquadro SMS defense, fai clic su Configura.

    5. Fai clic sul pulsante di attivazione/disattivazione Abilita e poi su Salva.

      L'abilitazione di SMS defense potrebbe richiedere alcuni minuti per la propagazione ai nostri sistemi. Una volta propagata l'abilitazione della funzionalità ai nostri sistemi, dovresti iniziare a ricevere risposte relative a SMS defense come parte delle valutazioni.

Creare una valutazione con il numero di telefono

Per SMS defense, crea valutazioni con il token generato dalla funzione execute() e il numero di telefono, utilizzando le librerie client reCAPTCHA o l'API REST dal backend.

Questo documento mostra come creare una valutazione utilizzando l'API REST. Per scoprire come creare una valutazione utilizzando le librerie client, consulta Creare valutazioni.

Prima di creare una valutazione:

  • Configura l'autenticazione a reCAPTCHA.

    Il metodo di autenticazione scelto dipende dall'ambiente in cui è configurato reCAPTCHA. La tabella seguente ti aiuta a scegliere il metodo di autenticazione appropriato e l'interfaccia supportata per configurare l'autenticazione:

    Ambiente Interfaccia Metodo di autenticazione
    Google Cloud
    • REST
    • Librerie client
    Utilizza i service account collegati.
    On-premise o un altro cloud provider REST Utilizza le chiavi API o la federazione delle identità per i workload.

    Se vuoi utilizzare le chiavi API, ti consigliamo di proteggerle applicando le restrizioni delle chiavi API.

    Librerie client

    Utilizza quanto segue:

  • Scegli un identificatore dell'account stabile accountId che non venga modificato spesso dall'utente e fornisci questo identificatore alla valutazione nel projects.assessments.create metodo. Questo identificatore dell'account stabile deve avere lo stesso valore per tutti gli eventi relativi allo stesso utente. Puoi fornire quanto segue come identificatore dell'account:

    Identificatori utente

    Se ogni account può essere associato in modo univoco a un nome utente, un indirizzo email o un numero di telefono stabile, puoi utilizzarlo come il accountId. Quando fornisci questi identificatori cross-site (identificatori che possono essere riutilizzati su più siti), reCAPTCHA utilizza queste informazioni per migliorare la protezione degli account utente in base ai modelli cross-site contrassegnando gli identificatori degli account illeciti e utilizzando la conoscenza dei pattern di attività illecite cross-site correlati a questi identificatori.

    In alternativa, se hai un ID utente interno associato in modo univoco a ogni account, puoi fornirelo come il accountId.

    Con hash o criptato

    Se non hai un ID utente interno associato in modo univoco a ogni account, puoi trasformare qualsiasi identificatore stabile in un identificatore dell'account opaco e specifico del sito. Questo identificatore è comunque necessario per reCAPTCHA account defender per comprendere i pattern di attività utente e rilevare comportamenti anomali, ma non viene condiviso con altri siti.

    Scegli un identificatore dell'account stabile e rendilo opaco prima di inviarlo a reCAPTCHA utilizzando la crittografia o l'hashing:

    • Crittografia (consigliata): cripta l'identificatore dell'account utilizzando un metodo di crittografia deterministico che produce un testo cifrato stabile. Per istruzioni dettagliate, consulta criptare i dati in modo deterministico. Quando scegli la crittografia simmetrica rispetto all'hashing, non devi conservare una mappatura tra gli identificatori utente e gli identificatori utente opachi corrispondenti. Decripta gli identificatori opachi restituiti da reCAPTCHA per trasformarli nell' identificatore utente.

    • Hashing: ti consigliamo di eseguire l'hashing dell'identificatore dell'account utilizzando il metodo SHA256-HMAC con un salt personalizzato a tua scelta. Poiché gli hash sono unidirezionali, devi conservare una mappatura tra gli hash generati e gli identificatori utente in modo da poter mappare gli identificatori dell'account con hash restituiti agli account originali.

Aggiungi il accountId parametro e il numero di telefono in formato E.164 come il UserId da verificare nella valutazione nel projects.assessments.create metodo.

Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:

  • PROJECT_ID: l'ID del tuo Google Cloud progetto.
  • TOKEN: il token restituito dalla chiamata grecaptcha.enterprise.execute().
  • KEY_ID: la chiave basata sul punteggio che hai installato sul tuo sito web.
  • ACCOUNT_ID: un identificatore per un account utente univoco per il tuo sito web.
  • PHONE_NUMBER: il numero di telefono di cui è necessario verificare la presenza di attività illecite. Il numero di telefono deve essere in formato E.164 e non deve essere sottoposto ad hashing o criptato.

Metodo HTTP e URL:

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

Corpo JSON della richiesta:


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

Per inviare la richiesta, scegli una di queste opzioni:

curl

Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

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

Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

$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

Dovresti ricevere una risposta JSON simile alla seguente:


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

La risposta che ricevi include il risk punteggio nel phoneFraudAssessment.smsTollFraudVerdict campo . Più alto è il punteggio, più è probabile che il numero di telefono sia rischioso; più basso è il punteggio, più è probabile che il numero di telefono sia legittimo.

Sei responsabile delle azioni che intraprendi in base alla valutazione. Per l'integrazione più semplice, puoi impostare le soglie su phoneFraudAssessment.smsTollFraudVerdict.risk per contribuire alla tua decisione.

Annotare la valutazione

Per tenere traccia del traffico SMS e migliorare il rilevamento delle frodi, devi annotare le valutazioni entro 10 minuti dall'invio dell'SMS o dalla verifica riuscita del numero di telefono.

Per annotare una valutazione, invia una richiesta al projects.assessments.annotate metodo con l'ID della valutazione. Nel corpo della richiesta, includi il numero di telefono in formato E.164 nel campo phoneAuthenticationEvent.

Per annotare una valutazione:

  1. Determina le informazioni e le etichette da aggiungere nel corpo della richiesta JSON a seconda del tuo caso d'uso.

    La tabella seguente elenca le etichette e i valori che puoi utilizzare per annotare gli eventi:

    Etichetta Descrizione Esempio di richiesta
    reasons

    Obbligatorio. Un'etichetta per supportare le tue valutazioni.

    Fornisci i dettagli degli eventi in tempo reale nell' reasons etichetta entro pochi secondi o minuti dall'evento perché influenzano il rilevamento in tempo reale.

    Valori possibili:

    • INITIATED_TWO_FACTOR: viene inviato un codice di verifica tramite SMS.
    • PASSED_TWO_FACTOR: il codice di verifica è stato verificato correttamente.
    • FAILED_TWO_FACTOR: il codice di verifica non è valido.
        {
          "reasons": ["INITIATED_TWO_FACTOR"],
          "phoneAuthenticationEvent": {
            "phoneNumber": "+18005550175"
          }
        }
        
    annotation

    Facoltativo. Un'etichetta per indicare la legittimità delle valutazioni.

    Fornisci informazioni sugli eventi di accesso e registrazione per convalidare o correggere le valutazioni del rischio nell' annotation etichetta.

    Valori possibili: LEGITIMATE o FRAUDULENT.

    Ti consigliamo di inviare queste informazioni entro pochi secondi o minuti dall'evento, perché influenzano il rilevamento in tempo reale.

      {
       "annotation": "LEGITIMATE"
      }
      
  2. Crea una richiesta di annotazione con le etichette appropriate.

    Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:

    • ASSESSMENT_ID: il valore del campo name restituito dalla chiamata projects.assessments.create.
    • ANNOTATION: (facoltativo) Un'etichetta per indicare se la valutazione è legittima o fraudolenta.
    • REASONS: i motivi che supportano l'annotazione. Per l'elenco dei valori possibili, consulta Valori dei motivi.
    • PHONE_NUMBER: il numero di telefono valutato. Il numero di telefono deve essere in formato E.164 e non deve essere sottoposto ad hashing o criptato.

    Metodo HTTP e URL:

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

    Corpo JSON della richiesta:

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

    Per inviare la richiesta, scegli una di queste opzioni:

    curl

    Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

    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

    Salva il corpo della richiesta in un file denominato request.json, e quindi esegui il comando seguente:

    $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

    Dovresti ricevere un codice di stato riuscito (2xx) e una risposta vuota.

Passaggi successivi