Détecter et empêcher la fraude au SMS

Ce document explique comment utiliser la protection contre la fraude aux appels par SMS de reCAPTCHA pour détecter et empêcher les attaques par pompage de SMS dans les entreprises qui utilisent des SMS pour l'authentification à deux facteurs (A2F) ou la validation du numéro de téléphone, une cible potentielle de la fraude aux SMS.

SMS 2FA est un standard dans l'industrie pour la sécurité des connexions et des inscriptions, mais il n'offre pas de protection contre la fraude à la facturation par SMS ni à la fraude à l'envoi de SMS.

La protection contre la fraude aux SMS par SMS de reCAPTCHA contribue à protéger votre entreprise contre la fraude au numéro de téléphone SMS ou au pompage de SMS, tout en conservant le confort de l'authentification par SMS. La protection contre la fraude aux appels par SMS de reCAPTCHA agit comme un filtre de votre trafic SMS. Avant d'envoyer un SMS, la protection contre la fraude aux SMS par SMS reCAPTCHA vous fournit un score de risque qui indique la probabilité que ce numéro de téléphone commise une fraude aux SMS. Sur la base de ce score, vous pouvez autoriser ou bloquer les SMS frauduleux avant qu'ils ne soient envoyés à votre fournisseur de SMS.

Avant de commencer

  • Préparez votre environnement pour reCAPTCHA.
  • Activez la protection contre la fraude aux SMS par SMS reCAPTCHA dans 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 apparaît dans le sélecteur de ressources.

      Si vous ne voyez pas le nom de votre projet, cliquez sur le sélecteur de ressources, puis sélectionnez votre projet.

    3. Cliquez sur Paramètres.

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

      1. Dans le volet Account Defender, cliquez sur Activer.
      2. Dans la boîte de dialogue Configure account Defender (Configurer Account Defender), cliquez sur Activer.
    5. Dans le volet Protection contre la fraude à la facturation par SMS, cliquez sur Configurer.

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

    La propagation de la protection contre la fraude par SMS reCAPTCHA à nos systèmes peut prendre quelques minutes. Une fois la fonctionnalité activée dans nos systèmes, vous devriez commencer à recevoir des réponses liées à la protection contre la fraude à la fraude à la péage par SMS reCAPTCHA lors des évaluations.

  • Créez une clé basée sur des scores pour votre site Web ou votre application mobile.

Configurer la protection contre la fraude aux SMS par SMS reCAPTCHA

Pour configurer la protection contre la fraude par SMS de reCAPTCHA sur votre site Web ou votre application mobile, procédez comme suit:

  1. Intégrez reCAPTCHA à votre site Web ou votre application mobile.

  2. Créez une évaluation avec le numéro de téléphone.

  3. Annotez l'évaluation.

Intégrer reCAPTCHA

Pour intégrer reCAPTCHA à votre site Web ou à votre application mobile, effectuez l'une des opérations suivantes:

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

Avec le jeton généré par la fonction execute(), créez une évaluation à l'aide des bibliothèques clientes reCAPTCHA ou de l'API REST depuis votre backend.

Ce document explique comment créer une évaluation à l'aide de l'API REST. Pour découvrir comment créer une évaluation à l'aide des bibliothèques clientes, consultez la section 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
    Accès IAP
    • REST
    • Bibliothèques clientes
    Utilisez des comptes de service associés.
    Sur site ou auprès d'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 liées aux clés 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 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 utiliser 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 l'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. Il signale les identifiants de compte abusifs et s'appuie sur nos connaissances des modèles d'abus intersites liés à ces identifiants.

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

    Hachées ou chiffrées

    Si vous n'avez pas d'ID utilisateur interne associé de manière unique à chaque compte, vous pouvez transformer tout identifiant stable en identifiant de compte opaque spécifique au site. Cet identifiant est toujours nécessaire pour permettre à reCAPTCHA Account Defender de comprendre les modèles d'activité des utilisateurs et de détecter les comportements anormaux, mais il n'est pas partagé avec d'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é): chiffre 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 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 identifiants utilisateur.

    • hachage: nous vous recommandons de hacher l'identifiant de compte à l'aide de la méthode SHA256-HMAC avec une valeur salt personnalisée de votre choix. Étant donné que les hachages sont à sens unique, vous devez conserver le mappage entre les hachages générés et vos identifiants utilisateur afin de pouvoir mapper l'identifiant de compte haché qui est 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 à vérifier dans l'évaluation dans la méthode projects.assessments.create.

Avant d'utiliser les données de requête, 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 les scores 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 dont le contenu malveillant doit être vérifié. Le numéro de téléphone doit être au format E.164, et il 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 susceptible de présenter un risque. Plus le score est faible, plus le numéro est susceptible d'être légitime.

Vous êtes responsable des actions que vous effectuez sur la base de l'évaluation. Pour une intégration la plus simple, vous pouvez définir des seuils sur smsFraudRisk afin de contribuer à votre décision.

Annoter l'évaluation

Pour effectuer le suivi du 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 après 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 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 étiquettes à ajouter dans le corps JSON de la requête en fonction de votre cas d'utilisation.

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

    Étiquette Description Exemple de requête
    reasons

    Obligatoire. Une étiquette pour vos évaluations.

    Fournissez des détails sur les événements en temps réel dans le libellé reasons 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. Étiquette indiquant la légitimité des évaluations.

    Le libellé annotation fournit des informations sur les événements de connexion et d'inscription afin de valider ou de corriger vos évaluations des risques.

    Valeurs possibles: LEGITIMATE ou FRAUDULENT.

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

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

    Avant d'utiliser les données de requête, 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 pour lesquelles vous souhaitez ajouter cette annotation. Pour obtenir la liste des valeurs possibles, reportez-vous à la section Valeurs des motifs.
    • PHONE_NUMBER: numéro de téléphone évalué Le numéro de téléphone doit être au format E.164, et il 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.

Étapes suivantes