Détecter et prévenir la fraude par SMS

Ce document explique comment utiliser SMS defense pour détecter et prévenir les attaques par inflation artificielle du trafic dans les entreprises qui utilisent les SMS pour l'authentification à deux facteurs (A2F) ou la validation du numéro de téléphone, qui sont des cibles potentielles de la fraude à la facturation par l'opérateur via SMS.

L'authentification par SMS (A2F et connexion) est une norme du secteur pour la sécurité des connexions et des inscriptions, mais elle ne protège pas contre la fraude à la facturation par l'opérateur via SMS ni contre la fraude par inflation artificielle du trafic. Avant d'envoyer un SMS, SMS defense vous fournit un score de risque qui indique la probabilité que ce numéro de téléphone soit utilisé pour la fraude à la facturation par l'opérateur via SMS. En fonction de ce score, vous pouvez autoriser ou bloquer les SMS frauduleux avant qu'ils ne soient envoyés à votre fournisseur de services SMS.

Le score de risque de SMS defense fonctionne de manière inverse par rapport au score global reCAPTCHA. Un score de risque SMS defense de 0,0 indique une faible probabilité de fraude à la facturation par l'opérateur via SMS, tandis qu'un score de risque de 1,0 indique une forte probabilité de fraude à la facturation par l'opérateur via SMS. Pour en savoir plus sur les scores reCAPTCHA, consultez Interpréter les évaluations pour les sites Web. Si vous utilisez Firebase Authentication ou Identity Platform, consultez la documentation Identity Platform.

Pour en savoir plus, consultez le blog SMS defense.

Avant de commencer

Selon que vous êtes un utilisateur existant de reCAPTCHA ou que vous découvrez reCAPTCHA, suivez les instructions de l'onglet approprié :

Utilisateur reCAPTCHA existant

Si vous êtes un utilisateur existant de reCAPTCHA, activez SMS defense sur votre Google Cloud projet :

  1. Dans la Google Cloud console, accédez à la page reCAPTCHA.

    Accéder à reCAPTCHA

  2. Vérifiez que le nom de votre projet s'affiche dans le sélecteur de projet.

    Si le nom de votre projet n'apparaît pas, cliquez sur le sélecteur de projet, et puis sélectionnez votre projet.

  3. Cliquez sur Paramètres.

  4. Dans le volet SMS defense, cliquez sur Configurer.

  5. Cliquez sur le bouton Activer, puis sur Enregistrer.

    L'activation de SMS defense peut prendre quelques minutes pour se propager à nos systèmes. Une fois la fonctionnalité activée dans nos systèmes, vous devriez commencer à recevoir des réponses liées à SMS defense dans le cadre des évaluations.

Nouvel utilisateur reCAPTCHA

Si vous découvrez reCAPTCHA, procédez comme suit :

  1. Selon que vous souhaitez utiliser SMS defense sur un site Web ou une application mobile, suivez ces étapes pour intégrer reCAPTCHA :

  2. Activez SMS defense sur votre Google Cloud projet:
    1. Dans la Google Cloud console, accédez à la page reCAPTCHA.

      Accéder à reCAPTCHA

    2. Vérifiez que le nom de votre projet s'affiche dans le sélecteur de projet.

      Si le nom de votre projet n'apparaît pas, cliquez sur le sélecteur de projet, et puis sélectionnez votre projet.

    3. Cliquez sur Paramètres.

    4. Dans le volet SMS defense, cliquez sur Configurer.

    5. Cliquez sur le bouton Activer, puis sur Enregistrer.

      L'activation de SMS defense peut prendre quelques minutes pour se propager à nos systèmes. Une fois la fonctionnalité activée dans nos systèmes, vous devriez commencer à recevoir des réponses liées à SMS defense dans le cadre des évaluations.

Créer une évaluation avec le numéro de téléphone

Pour SMS defense, créez des évaluations avec le jeton généré par la fonction execute() et le numéro de téléphone, à l'aide des bibliothèques clientes reCAPTCHA ou de l'API REST à partir de votre backend.

Ce document explique comment créer une évaluation à l'aide de l'API REST. Pour savoir comment créer une évaluation à l'aide des bibliothèques clientes, consultez Créer des évaluations.

Avant de créer une évaluation, procédez comme suit :

  • Configurez l'authentification auprès de reCAPTCHA.

    La méthode d'authentification que vous choisissez dépend de l'environnement dans lequel reCAPTCHA est configuré. Le tableau suivant vous aide à choisir la méthode d'authentification appropriée et l'interface compatible pour configurer l' authentification :

    Environnement Interface Méthode d'authentification
    Google Cloud
    • REST
    • Bibliothèques clientes
    Utilisez des comptes de service associés.
    Sur site ou chez un autre fournisseur de services cloud REST Utilisez des clés API ou la fédération d'identité de charge de travail.

    Si vous souhaitez utiliser des clés API, nous vous recommandons de les sécuriser en appliquant des restrictions de clé API.

    Bibliothèques clientes

    Utilisez les ressources suivantes :

  • Choisissez un identifiant de compte stable accountId qui n'est pas souvent modifié par l'utilisateur et fournissez-le à l'évaluation dans la projects.assessments.create méthode. Cet identifiant de compte stable doit avoir la même valeur pour tous les événements liés au même utilisateur. Vous pouvez fournir les éléments suivants comme identifiant de compte :

    Identifiants utilisateur

    Si chaque compte peut être associé de manière unique à un nom d'utilisateur, une adresse e-mail ou un numéro de téléphone stable, vous pouvez l'utiliser comme accountId. Lorsque vous fournissez de tels identifiants intersites (identifiants qui peuvent être réutilisés sur plusieurs sites), reCAPTCHA utilise ces informations pour améliorer la protection de vos comptes utilisateur en fonction de modèles intersites. Pour ce faire, il signale les identifiants de compte abusifs et utilise les connaissances des schémas d'abus intersites liés à ces identifiants.

    Vous pouvez également fournir un ID utilisateur interne associé de manière unique à chaque compte comme accountId.

    Haché ou chiffré

    Si vous ne disposez pas d'un ID utilisateur interne associé de manière unique à chaque compte, vous pouvez transformer n'importe quel identifiant stable en identifiant de compte opaque et spécifique au site. Cet identifiant est toujours nécessaire pour que reCAPTCHA Account Defender comprenne les schémas d'activité des utilisateurs et détecte les comportements anormaux, mais il n'est pas partagé sur d'autres sites.

    Choisissez un identifiant de compte stable et rendez-le opaque avant de l'envoyer à reCAPTCHA en utilisant le chiffrement ou le hachage :

    • Chiffrement (recommandé) : chiffrez l'identifiant de compte à l'aide d'une méthode de chiffrement déterministe qui produit un texte chiffré stable. Pour obtenir des instructions détaillées, consultez Chiffrer des données de manière déterministe. Lorsque vous choisissez le chiffrement symétrique plutôt que le hachage, vous n'avez pas besoin de conserver un mappage entre vos identifiants utilisateur et les identifiants utilisateur opaques correspondants. Déchiffrez les identifiants opaques renvoyés par reCAPTCHA pour les transformer en identifiant utilisateur.

    • Hachage : nous vous recommandons de hacher l'identifiant de compte à l'aide de la méthode SHA256-HMAC avec un sel personnalisé de votre choix. Étant donné que les hachages sont unidirectionnels, vous devez conserver un mappage entre les hachages générés et vos identifiants utilisateur afin de pouvoir mapper l'identifiant de compte haché renvoyé aux comptes d'origine.

Ajoutez le accountId paramètre et le numéro de téléphone au format E.164 comme le UserId à vérifier dans l'évaluation dans la projects.assessments.create méthode.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID: ID de votre Google Cloud projet.
  • TOKEN : jeton renvoyé par l'appel grecaptcha.enterprise.execute().
  • KEY_ID : clé basée sur un score que vous avez installée sur votre site Web.
  • ACCOUNT_ID : identifiant d'un compte utilisateur unique à votre site Web.
  • PHONE_NUMBER : numéro de téléphone à vérifier pour détecter toute activité malveillante. Le numéro de téléphone doit être au format E.164 et ne doit pas être haché ni chiffré.

Méthode HTTP et URL :

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

Corps JSON de la requête :


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

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

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

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

$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

Vous devriez recevoir une réponse JSON de ce type :


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

La réponse que vous recevez inclut le risk score dans le phoneFraudAssessment.smsTollFraudVerdict field . Plus le score est élevé, plus le numéro de téléphone est susceptible d'être risqué. À l'inverse, plus le score est faible, plus le numéro de téléphone est susceptible d'être légitime.

Vous êtes responsable des actions que vous entreprenez en fonction de l'évaluation. Pour l'intégration la plus simple, vous pouvez définir des seuils sur phoneFraudAssessment.smsTollFraudVerdict.risk pour vous aider à prendre votre décision.

Annoter l'évaluation

Pour suivre le trafic SMS et améliorer la détection des fraudes, vous devez annoter les évaluations dans les 10 minutes suivant l'envoi du SMS ou la validation du numéro de téléphone.

Pour annoter une évaluation, envoyez une requête à la projects.assessments.annotate méthode avec l'ID d'évaluation. Dans le corps de cette requête, incluez le numéro de téléphone au format E.164 dans le champ phoneAuthenticationEvent.

Pour annoter une évaluation, procédez comme suit :

  1. Déterminez les informations et les libellés à ajouter dans le corps JSON de la requête en fonction de votre cas d'utilisation.

    Le tableau suivant répertorie les libellés et les valeurs que vous pouvez utiliser pour annoter des événements :

    Libellé Description Exemple de requête
    reasons

    Obligatoire. Libellé pour prendre en charge vos évaluations.

    Fournissez les détails de l'événement en temps réel dans le reasons libellé quelques secondes ou minutes après l'événement car ils influencent la détection en temps réel.

    Valeurs possibles :

    • INITIATED_TWO_FACTOR : un code de validation est envoyé par SMS.
    • PASSED_TWO_FACTOR : le code de validation a bien été validé.
    • FAILED_TWO_FACTOR : le code de validation n'est pas valide.
        {
          "reasons": ["INITIATED_TWO_FACTOR"],
          "phoneAuthenticationEvent": {
            "phoneNumber": "+18005550175"
          }
        }
        
    annotation

    Facultatif. Libellé indiquant la légitimité des évaluations.

    Fournissez des informations sur les événements de connexion et d'inscription pour valider ou corriger vos évaluations des risques dans le annotation libellé.

    Valeurs possibles : LEGITIMATE ou FRAUDULENT.

    Nous vous recommandons d'envoyer ces informations quelques secondes ou minutes après l'événement, car elles influencent la détection en temps réel.

      {
       "annotation": "LEGITIMATE"
      }
      
  2. Créez une requête d'annotation avec les libellés appropriés.

    Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

    • ASSESSMENT_ID : valeur du champ name renvoyé par l'appel projects.assessments.create.
    • ANNOTATION : facultatif. Libellé indiquant si l'évaluation est légitime ou frauduleuse.
    • REASONS : raisons qui justifient votre annotation. Pour obtenir la liste des valeurs possibles, consultez les valeurs des raisons.
    • PHONE_NUMBER : numéro de téléphone qui a été évalué. Le numéro de téléphone doit être au format E.164 et ne doit pas être haché ni chiffré.

    Méthode HTTP et URL :

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

    Corps JSON de la requête :

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

    Pour envoyer votre requête, choisissez l'une des options suivantes :

    curl

    Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

    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

    Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

    $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

    Vous devriez recevoir un code d'état indiquant le succès de l'opération (2xx), ainsi qu'une réponse vide.

Étape suivante