SMS 기반 인증에 SMS 전화 결제 사기 방지 사용 설정
이 문서에서는 reCAPTCHA를 사용하여 전화 및 다중 인증과 같은 Identity Platform SMS 기반 흐름을 SMS 전화 결제 사기 (SMS 펌핑 공격이라고도 함)로부터 보호하는 방법을 설명합니다.
개요
앱에서 인증에 SMS 기반 흐름을 사용하는 경우 reCAPTCHA와 Identity Platform 통합의 일환으로 reCAPTCHA SMS 전화 결제 사기 방지 기능을 사용 설정할 수 있습니다. 사용 설정된 경우 Identity Platform은 사용자가 다음 phoneProvider
작업을 사용하여 앱 또는 사이트에서 인증 SMS를 요청할 때 SMS 요금 사기 방지 기능을 호출합니다.
작업 | 메서드 | |
---|---|---|
전화번호로 가입 또는 로그인 | sendVerificationCode |
|
MFA 전화번호 등록 | mfaSmsEnrollment |
|
MFA 전화번호 로그인 | mfaSmsSignIn |
그러면 reCAPTCHA는 사용자의 전화번호가 SMS 전화 결제 사기를 저지를 가능성을 나타내는 위험 점수를 Identity Platform에 제공합니다. Identity Platform은 이 점수를 SMS 전화 결제 사기 방지 구성에서 설정한 기준과 비교한 후 구성에서 설정한 작업에 따라 요청을 처리합니다.
reCAPTCHA SMS 전화 결제 사기 방지 기능에 관한 자세한 내용은 SMS 사기 감지 및 방지를 참고하세요.
시작하기 전에
Identity Platform에 SMS 전화 결제 사기 방지를 사용 설정하기 전에 다음 작업을 완료합니다.
해당하는 경우 앱 또는 사이트에 다음을 구성합니다.
- 사용자의 전화 로그인
- 웹, Android 또는 iOS 앱의 다단계 인증
아직 reCAPTCHA를 사용하지 않는 프로젝트의 서비스 계정을 만들지 않았다면 reCAPTCHA를 사용할 각 프로젝트의 서비스 계정을 만듭니다. 자세한 내용은 서비스 계정 만들기를 참고하세요.
reCAPTCHA 전화 인증 시행 모드
reCAPTCHA SMS 전화 결제 사기 방지를 사용하려면 감사 및 시행이라는 두 가지 모드가 있는 reCAPTCHA 전화 인증 시행을 설정해야 합니다.
감사 모드
전화 인증 시행을 감사 모드로 설정하면 Identity Platform은 앱 인증에 reCAPTCHA SMS 전화 결제 사기 방지 기능을 사용합니다. 사용자 요청이 통화료 사기 평가를 통과하면 Identity Platform에서 사용자의 휴대전화로 인증 코드가 포함된 SMS 메시지를 전송합니다. 요청이 통화 사기 평가에 실패하고 클라이언트 SDK를 사용하는 경우 대체 인증 방법이 트리거되어 전화 인증 흐름이 완료됩니다. 허용되는 대체 메서드는 앱의 플랫폼에 따라 다릅니다.
클라이언트 SDK는 다음 시나리오에서 대체 인증 메서드를 트리거합니다.
- reCAPTCHA 토큰이 누락되었습니다.
- reCAPTCHA 토큰이 잘못되었거나 만료되었습니다.
- reCAPTCHA 토큰이 점수 기준점을 통과하지 못합니다.
- reCAPTCHA가 올바르게 구성되어 있지 않습니다.
앱의 플랫폼에 대한 대체 인증 방법이 설정되어 있고 필요한 경우 클라이언트 SDK에서 트리거할 준비가 되었는지 확인합니다.
웹
초기 통행료 사기 평가에 실패하면 감사 모드는 reCAPTCHA v2를 사용하여 인증합니다. 따라서 reCAPTCHA 인증기 (RecaptchaVerifier
)를 설정하고 다음 전화 인증 작업에 전달해야 합니다.
verifyPhoneNumber
signInWithPhoneNumber
linkWithPhoneNumber
reauthenticateWithPhoneNumber
auth/argument-error
를 반환합니다. reCAPTCHA 인증기 설정에 관한 자세한 내용은 Firebase 문서의 reCAPTCHA 인증기 설정을 참고하세요.
Android
초기 통화 사기 평가에 실패하면 감사 모드에서 Play Integrity API를 기준으로 앱을 확인합니다. 이 인증에 실패하면 reCAPTCHA v2가 트리거됩니다. reCAPTCHA v2는 다음과 같은 시나리오에서 트리거될 수 있습니다.
- 최종 사용자의 기기에 Google Play 서비스가 설치되어 있지 않은 경우
- 앱이 Google Play 스토어를 통해 배포되지 않은 경우 (인증 SDK v21.2.0 이상)
- 획득한 SafetyNet 토큰이 유효하지 않은 경우 (인증 SDK 버전 v21.2.0 미만)
iOS
초기 통행료 사기 평가에 실패하면 감사 모드는 확인을 위해 무음 푸시 알림을 사용합니다. 이 인증 방법에는 자동 푸시 알림을 사용하여 요청하는 기기의 앱에 토큰을 전송하는 작업이 포함됩니다. 앱이 알림을 수신하면 휴대전화 인증 흐름이 진행됩니다. 앱에서 푸시 알림을 수신하지 않으면 reCAPTCHA v2가 트리거됩니다. 자동 푸시 알림이 올바르게 구성되지 않으면 reCAPTCHA v2가 트리거될 수 있습니다.
iOS 앱 인증 설정에 관한 자세한 내용은 Firebase 문서의 앱 인증 사용 설정을 참고하세요.
시행 모드
전화 인증 시행을 시행 모드로 설정하면 Identity Platform은 앱 인증에 reCAPTCHA SMS 전화 결제 사기 방지 기능을 사용합니다. 사용자 요청이 통화 사기 평가를 통과하면 Identity Platform에서 사용자의 휴대전화로 인증 코드가 포함된 SMS 메시지를 전송합니다. 요청이 요금 사기 평가에 실패하면 Identity Platform에서 요청을 차단하고 인증 코드가 포함된 SMS 메시지를 전송하지 않습니다.
시행 모드에서는 대체 인증이 필요하지 않으므로 앱에 추가 인증 방법을 설정할 필요가 없습니다. 그러나 앱의 reCAPTCHA 모드를 AUDIT
또는 OFF
로 변경하려는 경우 reCAPTCHA v2가 사용 설정되도록 웹 앱에 reCAPTCHA 검사기를 설정하는 것이 좋습니다.
reCAPTCHA SMS 전화 결제 사기 방지 사용 설정
SMS 전화 결제 사기 방지를 사용 설정하려면 다음 단계를 따르세요.
아직 설정하지 않았다면 프로젝트에서 reCAPTCHA Enterprise API를 사용 설정합니다.
reCAPTCHA로 SMS 전화 결제 사기 방지 기능을 사용 설정하세요. 자세한 내용은 reCAPTCHA 문서의 SMS 사기 감지 및 방지 페이지에 있는 시작하기 전에 섹션을 참고하세요.
프로젝트에 SMS 전화 결제 사기 방지를 사용 설정하려면 Admin SDK를 사용하여 다음과 같이
updateConfig
를 호출합니다.// Update the reCAPTCHA config to enable toll fraud protection const updateProjectConfigRequest = { recaptchaConfig: { phoneEnforcementState: 'ENFORCE_MODE', useSmsTollFraudProtection: 'true', tollFraudManagedRules: [{ startScore: START_SCORE, action: 'BLOCK' }], } } let projectConfig = await getAuth().projectConfigManager().updateProject(updateProjectConfigRequest);
다음을 바꿉니다.
ENFORCE_MODE
: reCAPTCHA 전화 인증 시행에 설정할 모드입니다. 유효한 값은OFF
,AUDIT
,ENFORCE
입니다. SMS 전화 결제 사기 방지를 사용 설정하려면 이 매개변수를AUDIT
또는ENFORCE
로 설정하고useSmsTollFraudProtection
를true
로 설정해야 합니다.SMS 전화 결제 사기 방지를 처음 사용 설정할 때는 시정 조치 상태를
AUDIT
로 설정하고ENFORCE
로 설정하기 전에 인증 흐름이 보호되는지 확인하는 것이 좋습니다. 모드 작동 방식에 관한 자세한 내용은 reCAPTCHA 전화 인증 시행 모드를 참고하세요.START_SCORE
: 요청이 실패하기 전에 가질 수 있는 최대 통화 사기 평가 점수입니다. 이 점수는0.0
과1.0
사이로 설정할 수 있습니다. 설정한 기준을 초과하는 점수는 SMS 요금 사기로 간주됩니다. 예를 들어 기준을0.3
로 설정하면 reCAPTCHA는0.4
이상의 요청을 실패로 간주합니다. 따라서 점수를 낮게 설정할수록 규칙이 더 엄격해집니다.
웹 또는 Android에서 Identity Platform을 사용하는 경우 Firebase Console에서 앱을 등록합니다.
Android의 경우 Identity Platform을 사용하는 각 Android 패키지 이름을 등록합니다.
웹의 경우 reCAPTCHA를 사용하는 각 도메인에 승인된 도메인을 추가합니다. 승인된 도메인을 추가하려면 다음 단계를 따르세요.
Google Cloud 콘솔에서 Identity Platform 페이지로 이동합니다.
설정 > 보안으로 이동합니다.
도메인 추가를 클릭합니다.
도메인 이름을 입력하고 추가를 클릭하여 도메인을 저장합니다.
reCAPTCHA 키 프로비저닝을 완료하는 데 몇 분 정도 걸릴 수 있습니다.
시정 조치를 감사 모드로 설정한 경우 SMS 통화 사기 방지를 위한 reCAPTCHA 측정항목을 모니터링하여 흐름이 보호되고 있는지 확인하는 것이 좋습니다.
클라이언트 SDK 구성
앱의 플랫폼에 따라 클라이언트 SDK를 구성합니다.
웹
최신 버전의 웹 SDK로 업데이트합니다.
- 웹 앱의 이메일 및 비밀번호 인증을 위한 reCAPTCHA 지원은 JavaScript SDK 버전 9.20.0 이상에서 제공됩니다.
- 웹 앱의 전화 인증을 위한 reCAPTCHA 지원은 JavaScript SDK 버전 11 이상에서 사용할 수 있습니다.
웹 SDK를 앱과 통합하면 SDK가 reCAPTCHA 구성을 자동으로 가져오고 구성한 제공업체에 대한 보호를 사용 설정합니다.
필요한 경우 다음과 같이 reCAPTCHA 신호를 강제로 가져올 수 있습니다.
import { initializeRecaptchaConfig } from '@firebase/auth'; // Initialize Firebase Authentication const auth = getAuth(); initializeRecaptchaConfig(auth) .then(() => { console.log("Recaptcha Enterprise Config Initialization successful.") }) .catch((error) => { console.error("Recaptcha Enterprise Config Initialization failed with " + error) });
Android
Android SDK의 최신 버전으로 업데이트하세요. Android 앱에서 이메일 및 비밀번호 인증과 전화 인증을 위한 reCAPTCHA 지원은 Android SDK 버전 23.1.0 이상에서 사용할 수 있습니다.
또한 reCAPTCHA 지원에는 API 수준 23(Marshmallow) 이상 및 Android 6 이상이 필요합니다.
Android SDK를 앱과 통합하면 SDK가 reCAPTCHA 구성을 자동으로 가져오고 구성한 제공업체에 대한 보호를 사용 설정합니다.
앱 수준
build.gradle
파일의 종속 항목 섹션에 다음 빌드 규칙을 추가하세요.implementation 'com.google.android.recaptcha:recaptcha:18.5.1'
reCAPTCHA SDK 버전 18.5.1 이상을 사용해야 합니다.
필요한 경우 다음과 같이 reCAPTCHA 신호를 강제로 가져올 수 있습니다.
- Kotlin:
// Initialize Firebase Authentication auth = Firebase.auth auth.initializeRecaptchaConfig().addOnCompleteListener(this) { task -> if (task.isSuccessful) { Log.d(TAG, "Recaptcha Enterprise Initialization successful.") } else { Log.w(TAG, "Recaptcha Enterprise Initialization failed.") } }
- 자바
// Initialize Firebase Authentication auth = FirebaseAuth.getInstance(); auth.initializeRecaptchaConfig().addOnCompleteListener( this, new OnCompleteListener<void>() { @Override public void onComplete(@NonNull Task<void> task) { if (task.isSuccessful()) { Log.d(TAG, "Recaptcha Enterprise Initialization successful."); } else { Log.w(TAG, "Recaptcha Enterprise Initialization failed."); } } });
iOS
iOS SDK 버전 11.6.0 이상으로 업데이트합니다. iOS SDK를 앱과 통합하면 SDK가 reCAPTCHA 구성을 자동으로 가져오고 구성한 제공업체에 대한 보호를 사용 설정합니다.
앱에 reCAPTCHA iOS SDK를 통합하려면 환경 준비를 참조하세요.
링커 플래그에
-ObjC
가 있어야 합니다. 타겟 > 빌드 설정 > 전체 > 연결로 이동하여Other Linker Flags
에-ObjC
가 표시되는지 확인합니다.필요한 경우 다음과 같이 reCAPTCHA 신호를 강제로 가져올 수 있습니다.
- Swift:
// Initialize Firebase Authentication try await Auth.auth().initializeRecaptchaConfig()
- Objective-C:
// Initialize Firebase Authentication [[FIRAuth auth] initializeRecaptchaConfigWithCompletion:^(NSError * _Nullable error) { // Firebase Authentication initialization finished }];
SMS 전화 결제 사기 방지를 위한 reCAPTCHA 측정항목 모니터링
reCAPTCHA 시행을 시행 모드로 설정하기 전에 감사 모드를 사용하고 프로젝트에서 내보내는 reCAPTCHA 측정항목을 모니터링하여 SMS 기반 인증 흐름이 보호되는지 확인하시기 바랍니다. 예를 들어 이러한 측정항목을 통해 reCAPTCHA Enterprise API와 Identity Platform 통합을 올바르게 설정했는지 확인할 수 있습니다. 또한 사용자 트래픽의 점수 기준점을 미세 조정하는 데도 도움이 됩니다.
프로젝트가 Cloud Monitoring에 내보내는 다음 측정항목을 검사하여 SMS 전화 결제 사기 방지 기능이 작동하는지 확인하세요.
identitytoolkit.googleapis.com/recaptcha/verdict_count
identitytoolkit.googleapis.com/recaptcha/token_count
identitytoolkit.googleapis.com/recaptcha/sms_tf_risk_scores
자세한 내용은 reCAPTCHA 측정항목 모니터링을 참고하세요.
SMS 전화 결제 사기 방지 적용
앱이 허용되는 사용자 트래픽을 수신하는지 확인한 후 reCAPTCHA 시행을 사용 설정하여 사용자를 보호할 수 있습니다. 이전 버전의 앱을 사용하는 사용자를 포함하여 기존 사용자를 방해하지 않는지 확인하세요.
프로젝트 또는 테넌트의 SMS 기반 인증 흐름에 reCAPTCHA 시행을 사용 설정하려면 Admin SDK를 사용하여 다음 명령어를 실행합니다.
const enforceRequest = {
recaptchaConfig: {
phoneEnforcementState: 'ENFORCE',
useSmsTollFraudProtection: 'true'
}
};
SMS 전화 결제 사기 방지 사용 중지
SMS 요금 사기 방지를 사용 중지하려면 Admin SDK를 사용하여 다음 명령어를 실행합니다.
const disableRequest = {
recaptchaConfig: {
phoneEnforcementState: 'OFF',
useSmsTollFraudProtection: 'false'
}
};
봇 보호 기능을 사용하는 동안 SMS 전화 결제 사기 방지를 사용 중지하려면 봇 보호 기능을 사용하는 동안 SMS 전화 결제 사기 방지 사용 중지를 참고하세요.
봇 보호와 함께 SMS 전화 결제 사기 방지 사용
SMS 전화 결제 사기 방지를 봇 방지와 동시에 사용할 수 있습니다. 두 보호 기능을 모두 사용하는 구성의 경우 다음 사항을 고려하세요.
- 전화 인증 시행 상태를 감사로 설정하면 Identity Platform은 평가 중 하나 이상을 충족하는 경우 요청을 전달합니다. reCAPTCHA 측정항목을 모니터링하여 SMS 전화 결제 사기 방지 및 봇 방지가 모두 적절한 점수 설정으로 구성되어 있는지 확인하세요.
- 전화 인증 시행 상태를 시행으로 설정하면 Identity Platform은 평가를 모두 충족하고 다른 인증 방법으로 대체하지 않고 요청 실패가 종료되는 경우에만 요청을 전달합니다.
두 기능을 모두 사용 설정하려면 Admin SDK를 사용하여 다음 명령어를 실행합니다.
const enableBothRequest = {
recaptchaConfig: {
phoneEnforcementState: 'ENFORCE_MODE',
useSmsTollFraudProtection: true,
useSmsBotScore: true
}
};
ENFORCE_MODE
를 reCAPTCHA 전화 인증 시행에 설정할 모드로 바꿉니다. 유효한 값은 OFF
, AUDIT
, ENFORCE
입니다. SMS 전화 결제 사기 방지를 사용 설정하려면 이 매개변수를 AUDIT
또는 ENFORCE
로 설정해야 합니다. SMS 통화 사기 방지를 처음 사용 설정할 때는 이 매개변수를 AUDIT
로 설정하고 인증 흐름이 보호되는지 확인한 후 ENFORCE
로 설정하는 것이 좋습니다. 모드 작동 방식에 관한 자세한 내용은 reCAPTCHA 전화 인증 시행 모드를 참고하세요.
봇 보호를 사용하는 동안 SMS 전화 결제 사기 방지 사용 중지
SMS 전화 결제 사기 방지와 봇 보호를 동시에 사용 중이며 봇 보호를 사용 중지하지 않고 SMS 전화 결제 사기 방지를 사용 중지하려면 Admin SDK를 사용하여 다음 명령어를 실행합니다.
const disableRequest = {
recaptchaConfig: {
phoneEnforcementState: 'ENFORCE_MODE',
useSmsTollFraudProtection: 'false',
useSmsBotScore: 'true'
}
};
ENFORCE_MODE
를 이전에 reCAPTCHA 전화 인증 시행에 대해 설정한 모드로 바꿉니다. 이 값은 AUDIT
또는 ENFORCE
여야 합니다. 모드 작동 방식에 관한 자세한 내용은 reCAPTCHA 전화 인증 시행 모드를 참고하세요.
다음 단계
- reCAPTCHA SMS 전화 결제 사기 방지 기능에 대해 자세히 알아보세요.