Détecter et prévenir la fraude par SMS

Ce document explique comment utiliser la protection reCAPTCHA contre la fraude à la facturation par l'opérateur via SMS pour détecter et empêcher les attaques par inflation artificielle du trafic dans les entreprises qui utilisent les SMS pour l'authentification à deux facteurs (A2F) ou la validation par 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, la protection reCAPTCHA contre la fraude à la facturation par l'opérateur via SMS vous fournit un score de risque qui indique la probabilité que ce numéro de téléphone commette une fraude à la facturation par l'opérateur via SMS. En fonction de ce score, vous pouvez autoriser ou bloquer les messages SMS frauduleux avant qu'ils ne soient envoyés à votre fournisseur de SMS.

Pour en savoir plus, consultez l'article de blog sur la protection contre la fraude à la facturation par l'opérateur via SMS offerte par reCAPTCHA.

Avant de commencer

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

Utilisateur reCAPTCHA existant

Si vous utilisez déjà reCAPTCHA, activez la protection contre la fraude à la facturation par l'opérateur via SMS reCAPTCHA sur votre projet Google Cloud:

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

    Accéder à reCAPTCHA

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

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

  3. Cliquez sur Paramètres.

  4. Si l'outil Account Defender de reCAPTCHA n'est pas activé pour votre projet, procédez comme suit:

    1. Dans le volet Protecteur de compte, cliquez sur Activer.
    2. Dans la boîte de dialogue Configurer le Défenseur du compte, cliquez sur Activer.
  5. Dans le volet Protection contre la fraude à la facturation par l'opérateur via SMS, cliquez sur Configurer.

  6. Activez l'option Activer, puis cliquez sur Enregistrer.

    L'activation de la protection contre la fraude à la facturation par l'opérateur via SMS reCAPTCHA peut prendre quelques minutes pour se propager dans nos systèmes. Une fois l'activation de la fonctionnalité propagée dans nos systèmes, vous devriez commencer à recevoir des réponses liées à la protection contre la fraude à la facturation par l'opérateur via SMS reCAPTCHA dans le cadre des évaluations.

Nouvel utilisateur de reCAPTCHA

Si vous ne connaissez pas reCAPTCHA, procédez comme suit:

  1. Selon que vous souhaitez utiliser la protection contre la fraude à la facturation par l'opérateur via SMS reCAPTCHA sur un site Web ou une application mobile, procédez comme suit pour intégrer reCAPTCHA:

  2. Activez la protection contre la fraude à la facturation par l'opérateur via SMS reCAPTCHA sur votre projet Google Cloud :
    1. Dans la console Google Cloud, accédez à la page reCAPTCHA.

      Accéder à reCAPTCHA

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

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

    3. Cliquez sur Paramètres.

    4. Si l'outil Account Defender de reCAPTCHA n'est pas activé pour votre projet, procédez comme suit:

      1. Dans le volet Protecteur de compte, cliquez sur Activer.
      2. Dans la boîte de dialogue Configurer le Défenseur du compte, cliquez sur Activer.
    5. Dans le volet Protection contre la fraude à la facturation par l'opérateur via SMS, cliquez sur Configurer.

    6. Activez l'option Activer, puis cliquez sur Enregistrer.

      L'activation de la protection contre la fraude à la facturation par l'opérateur via SMS reCAPTCHA peut prendre quelques minutes pour se propager dans nos systèmes. Une fois l'activation de la fonctionnalité propagée dans nos systèmes, vous devriez commencer à recevoir des réponses liées à la protection contre la fraude à la facturation par l'opérateur via SMS reCAPTCHA dans le cadre des évaluations.

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

Pour la protection contre la fraude par appel téléphonique reCAPTCHA, 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 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 de 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 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 accountId stable qui n'est pas souvent modifié par l'utilisateur et fournissez-le à l'évaluation dans la méthode projects.assessments.create. 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 stables, vous pouvez les utiliser comme accountId. Lorsque vous fournissez de tels identifiants intersites (identifiants pouvant ê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 en signalant les identifiants de compte abusifs et en utilisant les connaissances sur les modèles d'abus intersites associés à ces identifiants.

    Si vous disposez d'un ID utilisateur interne associé de manière unique à chaque compte, vous pouvez le fournir en tant que accountId.

    Hachées ou chiffrées

    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 propre au site. Cet identifiant est toujours nécessaire pour que le défenseur de compte reCAPTCHA comprenne les tendances d'activité des utilisateurs et détecte les comportements anormaux, mais il n'est pas partagé entre les autres sites.

    Choisissez un identifiant de compte stable et rendez-le opaque avant de l'envoyer à reCAPTCHA à l'aide du chiffrement ou du 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 la section Chiffrer les 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 une mise en correspondance 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 du compte à l'aide de la méthode SHA256-HMAC avec un sel personnalisé de votre choix. Étant donné que les hachages ne sont à sens unique que, 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 paramètre accountId et le numéro de téléphone au format E.164 en tant que UserId à valider dans l'évaluation dans la méthode projects.assessments.create.

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

  • PROJECT_ID : ID de votre projet Google Cloud.
  • TOKEN: jeton renvoyé par l'appel grecaptcha.enterprise.execute().
  • KEY_ID: clé basée sur le score que vous avez installée sur votre site Web.
  • ACCOUNT_ID: identifiant d'un compte utilisateur propre à 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",
  "smsFraudAssessment": {
    "smsFraudRisk": 0.3
  }
}

La réponse que vous recevez inclut le score smsFraudRisk dans le champ smsFraudAssessment . Plus le score est élevé, plus le numéro de téléphone est risqué. À l'inverse, plus le score est faible, plus le numéro de téléphone est légitime.

Vous êtes responsable des mesures que vous prenez en fonction de l'évaluation. Pour une intégration plus simple, vous pouvez définir des seuils sur smsFraudRisk pour contribuer à 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 méthode projects.assessments.annotate avec l'ID de l'é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 de la requête JSON en fonction de votre cas d'utilisation.

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

    Libellé Description Exemple de requête
    reasons

    Obligatoire. Un libellé pour étayer vos évaluations.

    Fournissez des informations sur l'événement en temps réel dans l'étiquette reasons quelques secondes ou minutes après l'événement, car elles ont une incidence sur 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 est incorrect.
        {
        "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'enregistrement pour valider ou corriger vos évaluations des risques dans le libellé annotation.

    Valeurs possibles: LEGITIMATE ou FRAUDULENT.

    Nous vous recommandons d'envoyer ces informations quelques secondes ou minutes après l'événement, car elles ont une incidence sur 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ée par l'appel projects.assessments.create.
    • ANNOTATION : facultatif. Étiquette indiquant si l'évaluation est légitime ou frauduleuse.
    • REASONS: raisons qui justifient votre annotation. Pour obtenir la liste des valeurs possibles, consultez la section Valeurs de reasons.
    • PHONE_NUMBER: numéro de téléphone é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