Ce document explique comment utiliser reCAPTCHA Account Defense pour détecter et prévenir les activités frauduleuses liées aux comptes sur les applications mobiles.
reCAPTCHA vous aide à protéger les actions critiques, comme la connexion et le paiement. Toutefois, il existe de nombreuses formes subtiles d'utilisation abusive de comptes qui peuvent être détectées en observant le comportement d'un utilisateur spécifique sur une application mobile pendant une période donnée. reCAPTCHA Account Defender permet d'identifier ces types d'utilisation abusive subtile en créant un modèle spécifique à votre application mobile pour détecter une tendance de comportement suspect ou un changement d'activité. En utilisant le modèle spécifique à votre site, reCAPTCHA Account Defender vous aide à détecter les éléments suivants :
- Activités suspectes
- Comptes avec des comportements similaires
- Requêtes provenant d'appareils marqués comme fiables pour des utilisateurs spécifiques
En fonction de l'analyse de reCAPTCHA Account Defender et du modèle spécifique au site, vous pouvez effectuer les actions suivantes :
- Limitez ou désactivez les comptes frauduleux.
- Empêchez les tentatives de piratage de compte.
- Limitez les piratages de compte réussis.
- N'accordez l'accès qu'aux demandes provenant de comptes utilisateur légitimes.
- Réduisez les frictions pour les utilisateurs qui se connectent depuis l'un de leurs appareils vérifiés.
Avant de commencer
- Pour bénéficier de reCAPTCHA Account Defender pour les applications mobiles, vous devez déclencher un examen de sécurité automatique en ajoutant un compte de facturation à votre projet. Ajoutez un compte de facturation à votre projet pour intégrer votre application mobile à cette fonctionnalité.
- Préparez votre environnement pour reCAPTCHA.
- Créez une clé basée sur un score.
Configurer votre application mobile pour reCAPTCHA Account Defense
reCAPTCHA Account Defense nécessite une compréhension globale des activités de compte pour permettre une détection efficace. Pour commencer à fournir des activités liées au compte à reCAPTCHA Account Defense, et pour créer et améliorer votre modèle spécifique au site, procédez comme suit :
Intégrez reCAPTCHA à votre application mobile.
- Pour les applications Android, consultez Intégrer reCAPTCHA à des applications Android.
- Pour les applications iOS, consultez Intégrer reCAPTCHA aux applications iOS.
- Créez des rapports sur les actions critiques des utilisateurs.
- Évaluez les événements utilisateur critiques.
- Annoter les événements utilisateur pour ajuster votre modèle spécifique au site
Créer des rapports sur les actions utilisateur critiques
Pour détecter les schémas d'activité suspects et mieux comprendre les schémas d'activité typiques sur votre site, la protection des comptes reCAPTCHA a besoin d'informations sur les actions utilisateur critiques.
Pour chaque action de votre application protégée à l'aide de reCAPTCHA, appelez la méthode execute() avec RecaptchaAction. Pour en savoir plus sur execute() et RecaptchaAction, consultez les ressources suivantes :
- Android :
execute()etRecaptchaAction. - iOS :
execute()etRecaptchaAction.
reCAPTCHA fournit un ensemble d'actions intégrées. Si nécessaire, vous pouvez créer des actions personnalisées.
Le tableau suivant liste les noms d'actions que vous pouvez utiliser lorsque vous signalez les actions utilisateur critiques.
| Nom de l'action | Événement ou action déclenchés par l'utilisateur |
|---|---|
LOGIN |
Connectez-vous à l'application mobile. |
SIGNUP |
Inscrivez-vous dans l'application mobile. |
Évaluer les événements utilisateur critiques
Lorsque vous appelez execute() sur une action utilisateur, un jeton est généré. Pour les événements utilisateur critiques, tels que les connexions et les inscriptions réussies ou échouées, ainsi que les actions des utilisateurs connectés, créez une évaluation pour évaluer les résultats de l'appel execute(). L'évaluation vous fournit un verdict sur le risque, que vous pouvez utiliser pour décider comment gérer les activités potentiellement frauduleuses. Vous pouvez, par exemple, bloquer les requêtes suspectes, demander une authentification pour les connexions risquées et examiner les comptes qui vous intéressent.
reCAPTCHA Account Defense vous demande de fournir un identifiant de compte stable pour attribuer l'activité des utilisateurs (comme les demandes de connexion, les demandes de connexion et les demandes d'inscription) à un compte spécifique. Cela aide reCAPTCHA Account Defense à comprendre les habitudes d'activité des utilisateurs et à créer un modèle d'activité pour chaque compte afin de mieux détecter le trafic anormal et abusif.
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 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 l'utiliser comme accountId. Lorsque vous fournissez de tels identifiants multisites (identifiants réutilisables sur plusieurs sites), reCAPTCHA utilise ces informations pour améliorer la protection de vos comptes utilisateur en fonction de modèles multisites. Pour ce faire, il signale les identifiants de compte abusifs et utilise les connaissances sur les schémas d'utilisation abusive multisites liés à ces identifiants.
Vous pouvez également fournir un ID utilisateur interne associé de manière unique à chaque compte 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 et propre au site. Cet identifiant est toujours nécessaire pour que reCAPTCHA Account Defender comprenne les habitudes d'utilisation des utilisateurs et détecte 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 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 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 de 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 salt 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é qui est renvoyé aux comptes d'origine.
En plus de fournir un identifiant de compte stable pour toutes les requêtes liées au compte, vous pouvez fournir des identifiants de compte supplémentaires, potentiellement non stables, pour certaines requêtes spécifiques.
Les identifiants de compte spécifiques au contexte fournis en plus de accountId aident reCAPTCHA Account Defense à mieux comprendre l'activité des utilisateurs et à détecter les tentatives de piratage de compte pour protéger vos comptes utilisateur. Lorsque vous fournissez des identifiants supplémentaires, reCAPTCHA utilise ces informations pour améliorer la protection de vos comptes utilisateur en fonction de modèles multisites. Pour ce faire, il signale les identifiants de compte abusifs et utilise les connaissances sur les schémas d'utilisation abusive multisites liés à ces identifiants. Par exemple, vous pouvez fournir les informations suivantes :
Nom d'utilisateur, adresse e-mail ou numéro de téléphone utilisés comme identifiant de connexion pour les demandes de connexion
Adresse e-mail ou numéro de téléphone validés pour une demande d'authentification multifacteur
Adresse e-mail ou numéro de téléphone (principal ou secondaire) fourni par l'utilisateur lors d'une demande de modification de compte
Adresses e-mail et numéros de téléphone fournis par l'utilisateur lors d'une demande d'inscription
Ajoutez l'identifiant de compte stable choisi au paramètre accountId dans la méthode
projects.assessments.create pour toutes les requêtes liées au compte. Vous pouvez éventuellement fournir des identifiants de compte supplémentaires pour les demandes concernées en utilisant le champ userIds dans l'évaluation.
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
execute() - KEY_ID : clé reCAPTCHA associée à l'application
- ACCOUNT_ID : identifiant associé de manière unique au compte utilisateur pour un compte utilisateur dans votre application
- EMAIL_ADDRESS : facultatif. Adresse e-mail associée à cette demande, le cas échéant
- PHONE_NUMBER : facultatif. Numéro de téléphone associé à cette demande, le cas échéant
- USERNAME : facultatif. Nom d'utilisateur associé à cette demande, le cas échéant
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": [
{
"email": "EMAIL_ADDRESS"
},
{
"phoneNumber": "PHONE_NUMBER"
},
{
"username": "USERNAME"
}
]
}
}
}
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 :
{
"tokenProperties": {
"valid": true,
"androidPackageName": "com.example.app" or "iosBundleId": "com.example.app",
"action": "login",
"createTime": "2019-03-28T12:24:17.894Z"
},
"riskAnalysis": {
"score": 0.6,
},
"event": {
"token": "TOKEN",
"siteKey": "KEY",
"userInfo": {
"accountId": "ACCOUNT_ID"
}
},
"name": "projects/PROJECT_NUMBER/assessments/b6ac310000000000",
"accountDefenderAssessment": {
"labels": ["SUSPICIOUS_LOGIN_ACTIVITY"]
}
}
Exemple de code
Java
Pour vous authentifier auprès de reCAPTCHA, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Interpréter le verdict de risque des événements utilisateur critiques
Lorsque vous créez une évaluation avec Account Defense activé, Account Defense renvoie accountDefenderAssessment dans la réponse à l'évaluation.
La valeur de accountDefenderAssessment vous aide à déterminer si l'activité de l'utilisateur est légitime ou frauduleuse. Elle renvoie également un ID d'évaluation que vous devez utiliser lorsque vous annotez des événements utilisateur.
Voici un exemple de réponse JSON :
{ "tokenProperties": { "valid": true, "androidPackageName": "com.example.app" or "iosBundleId": "com.example.app", "action": "login", "createTime": "2019-03-28T12:24:17.894Z" }, "riskAnalysis": { "score": 0.6, }, "event": { "token": "TOKEN", "siteKey": "KEY_ID", "expectedAction": "USER_ACTION" }, "name": "projects/PROJECT_ID/assessments/b6ac310000000000X", "accountDefenderAssessment": { labels: ["SUSPICIOUS_LOGIN_ACTIVITY"] } }
Le champ accountDefenderAssessment peut présenter l'une des valeurs suivantes :
| Valeur | Description |
|---|---|
SUSPICIOUS_LOGIN_ACTIVITY |
Indique que la demande présente un risque élevé de credential stuffing ou de piratage de compte. |
SUSPICIOUS_ACCOUNT_CREATION |
Indique que la demande représente un risque élevé de création abusive de compte. |
PROFILE_MATCH |
Indique que les attributs de l'utilisateur correspondent à ceux qui ont déjà été observés pour cet utilisateur. Cette valeur indique que l'utilisateur se trouve sur un appareil de confiance qui a déjà été utilisé pour accéder à votre application mobile.
|
Annoter des événements pour ajuster votre modèle spécifique à votre site
Pour fournir plus d'informations à reCAPTCHA Account Defense et améliorer votre modèle de détection spécifique à votre site, vous devez annoter les événements que vous avez évalués en créant des évaluations.
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 demande, vous incluez des libellés fournissant des informations supplémentaires sur un événement décrit dans l'évaluation.
Pour annoter une évaluation, procédez comme suit :
-
Déterminez les informations et les libellés à ajouter au corps JSON de la requête en fonction de votre cas d'utilisation.
Le tableau suivant liste les libellés et les valeurs que vous pouvez utiliser pour annoter les événements :
Libellé Description Exemple de requête reasonsObligatoire. Libellé pour étayer vos évaluations. Fournissez des détails sur les événements en temps réel dans le libellé
reasonsquelques secondes ou minutes après l'événement, car ils influencent la détection en temps réel.Pour obtenir la liste des valeurs possibles, consultez Valeurs des motifs.
Exemple : Pour détecter les piratages de compte, indiquez si le mot de passe saisi était correct avec les valeurs
CORRECT_PASSWORDouINCORRECT_PASSWORD. Si vous avez déployé votre propre MFA, vous pouvez ajouter les valeurs suivantes :INITIATED_TWO_FACTOR,PASSED_TWO_FACTORouFAILED_TWO_FACTOR.{ "reasons": ["INCORRECT_PASSWORD"] }annotationFacultatif. 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 libellé
annotation.Valeurs possibles :
LEGITIMATEouFRAUDULENT.Vous pouvez envoyer ces informations à tout moment ou dans le cadre d'un job par lot. Toutefois, 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" }accountIdFacultatif. Libellé permettant d'associer un ID de compte à un événement.
Si vous avez créé une évaluation sans ID de compte, utilisez ce libellé pour fournir l'ID de compte d'un événement chaque fois qu'il est disponible.
{ "accountId": "ACCOUNT_ID" } Créez une requête d'annotation avec les libellés appropriés.
Avant d'utiliser les données de requête, effectuez les remplacements suivants :
- ASSESSMENT_ID : valeur du champ
namerenvoyée par l'appelprojects.assessments.create. - ANNOTATION : facultatif. Libellé indiquant si l'évaluation est légitime ou frauduleuse.
- REASONS : facultatif. Les raisons qui justifient votre annotation. Pour obtenir la liste des valeurs possibles, consultez Valeurs des motifs.
- ACCOUNT_ID : facultatif. Identifiant unique associé au compte utilisateur dans votre application.
Pour en savoir plus, consultez Libellés pour les annotations.
Méthode HTTP et URL :
POST https://recaptchaenterprise.googleapis.com/v1/ASSESSMENT_ID:annotate
Corps JSON de la requête :
{ "annotation": ANNOTATION, "reasons": REASONS, "accountId": ACCOUNT_ID }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 ContentVous devriez recevoir un code d'état indiquant le succès de l'opération (2xx), ainsi qu'une réponse vide.
- ASSESSMENT_ID : valeur du champ
Exemple de code
Java
Pour vous authentifier auprès de reCAPTCHA, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Utiliser et interpréter le score de risque de piratage de compte
La fonctionnalité de score de risque de piratage de compte ajoute un score de risque numérique et des explications lisibles par l'utilisateur à l'évaluation de la protection du compte. Ces insights vous aident à comprendre l'évaluation et à prendre des décisions ou des mesures en conséquence.
Obtenir le score de risque
Pour recevoir le score de risque et les raisons de l'explication, envoyez une requête CreateAssessment et incluez event.userInfo.accountId dans votre requête.
Lire le score de risque et les détails
Le score de risque et les raisons de l'explication se trouvent dans l'objet accountDefenderAssessment.accountTakeoverVerdict de la réponse à l'évaluation.
- Score de risque :
accountDefenderAssessment.accountTakeoverVerdict.risk - Motifs de risque :
accountDefenderAssessment.accountTakeoverVerdict.riskReasons - Motifs de confiance :
accountDefenderAssessment.accountTakeoverVerdict.trustReasons
L'extrait de code suivant montre un exemple des champs d'une réponse d'évaluation :
"accountDefenderAssessment": { "labels": ["PROFILE_MATCH"], "accountTakeoverVerdict": { "risk": 0.249, "riskReasons": [{"reason": "CLIENT_ACCESSED_MANY_ACCOUNTS"}], "trustReasons": [{"reason": "PROFILE_MATCH"}, {"reason": "ACCOUNT_HISTORY_REPUTABLE"}] } }
Interpréter le score de risque ATO
Lorsque vous utilisez le score de risque, définissez un seuil pour déterminer quand prendre des mesures de protection.
Utilisez le score de risque ATO à la place du libellé SUSPICIOUS_LOGIN_ACTIVITY.
N'utilisez pas à la fois le score de risque et le libellé pour déclencher l'application des règles sur la même évaluation. Vous pouvez configurer votre logique d'application en fonction du dépassement du seuil de risque ou de la présence du libellé. En général, le score de risque offre une évaluation plus précise.
Nous vous recommandons d'évaluer les performances du score de risque avec un seuil approprié sur le trafic de votre plate-forme avant de l'utiliser pour l'application des règles.
Pour agir en fonction du score de risque, implémentez une vérification dans votre backend, comme indiqué dans l'extrait suivant :
if (assessment.accountDefenderAssessment.accountTakeoverVerdict.risk > YOUR_CHOSEN_THRESHOLD) {
// Treat as suspicious
// Implement protective actions
}
Seuils standards du score de risque
Le tableau suivant fournit les seuils de score de risque standards et les taux de faux positifs (FPR) attendus. Choisissez un seuil en fonction du taux de faux positifs acceptable. Les performances peuvent varier. Vous devrez peut-être ajuster votre seuil en fonction des performances observées.
| FPR attendu | Seuil du score de risque |
|---|---|
| 0,1 % | 1.0 |
| 0,25 % | 0,9 |
| 0,5 % | 0,8 |
| 1 % | 0,7 |
| 2 % | 0,6 |
| 4 % | 0,5 |
| 8 % | 0,4 |
| 15 % | 0,3 |
| 30 % | 0,2 |
| 60 % | 0,1 |
| 100 % | 0,0 |
Ajuster votre seuil
Si le FPR observé est trop élevé, augmentez le seuil. Si le rappel observé est trop faible et que vous pouvez tolérer un taux de faux positifs plus élevé, diminuez le seuil.
Calculer les valeurs intermédiaires
Pour estimer le FPR pour un seuil compris entre les valeurs standards, utilisez l'interpolation linéaire. L'exemple suivant montre comment calculer le FPR pour un seuil de 0,85 :
FPR(T: 0.85) = (FPR(T: 0.8) + FPR(T: 0.9)) / 2 = (0.5% + 0.25%) / 2 = 0.375%
Pour trouver un seuil pour un FPR spécifique, effectuez une interpolation entre les valeurs standards. L'exemple suivant montre comment trouver le seuil pour un FPR de 5 % :
Threshold = 0.4 + (0.5 − 0.4) × (8% − 5%) / (8% − 4%) Threshold = 0.4 + 0.1 × (3 / 4) Threshold = 0.4 + 0.075 = 0.475
Un seuil de 0,475 est estimé pour générer un FPR de 5 %.
Interpréter les raisons de l'explicabilité
Les motifs d'explication fournissent des informations sur les facteurs qui influencent le score de risque. Utilisez ces raisons pour affiner votre prise de décision.
- Motifs de risque : indiquent les facteurs associés à un risque plus élevé de prise de contrôle de compte.
- Motifs de confiance : indiquent les facteurs qui suggèrent la légitimité.
Des motifs de risque et de confiance peuvent s'afficher pour n'importe quel score de risque.
| Motif | Type | Interprétation |
|---|---|---|
PROFILE_MATCH |
Confiance | La demande correspond à un profil de confiance associé à ce compte. Cela équivaut au libellé AccountDefenderLabel.PROFILE_MATCH. |
ACCOUNT_HISTORY_REPUTABLE |
Confiance | L'historique d'activité du compte est fiable. Il est peu probable que le compte ait été piraté par le passé. |
CLIENT_HISTORICAL_BOT_ACTIVITY |
Risque | Le client a déjà envoyé du trafic de type robot sur ce site. Cette raison intègre la réputation historique et indique que le client est connu pour utiliser des robots, même si la requête actuelle est effectuée par un humain. |
ACCOUNT_IN_LARGE_RELATED_GROUP |
Risque | Le compte fait partie d'un grand groupe de comptes associés, ce qui indique qu'il peut faire partie d'un réseau frauduleux. Les comptes associés sont identifiés en fonction de la similitude de leurs caractéristiques de trafic et de requêtes. |
CLIENT_ACCESSED_MANY_ACCOUNTS |
Risque | Le client a été observé accédant à de nombreux comptes sur ce site. |
Activer reCAPTCHA Account defense
Une fois que vous avez configuré votre application mobile pour reCAPTCHA Account Defense, vous pouvez activer reCAPTCHA Account Defense.
Dans la console Google Cloud , accédez à la page reCAPTCHA.
Vérifiez que le nom de votre projet s'affiche dans le sélecteur de ressources en haut de la page.
Si le nom de votre projet n'apparaît pas, cliquez sur le sélecteur de projet, puis sélectionnez votre projet.
- Cliquez sur Paramètres.
Dans le volet Protection du compte, cliquez sur Configurer.
Dans la boîte de dialogue Configurer la protection du compte, cliquez sur Activer, puis sur Enregistrer.
L'activation de la protection de compte reCAPTCHA peut prendre quelques heures sur nos systèmes. Une fois l'activation de la fonctionnalité propagée à nos systèmes, vous devriez commencer à recevoir des réponses liées à la protection du compte dans les évaluations.
Étapes suivantes
- Pour en savoir plus sur les autres fonctionnalités de protection des comptes, consultez Fonctionnalités de protection des comptes utilisateur.