SMS 사기 감지 및 방지

이 문서에서는 SMS 전화 결제 사기의 잠재적 표적이 될 수 있는 2단계 인증(2FA) 또는 전화 인증에 SMS를 사용하는 비즈니스에서 SMS 펌핑 공격을 감지하고 방지하기 위해 reCAPTCHA SMS 전화 결제 사기 방지 기능을 사용하는 방법에 대해 설명합니다.

SMS 기반 인증(2단계 인증 및 로그인)은 로그인 및 가입 보안을 위한 업계 표준이지만 SMS 전화 결제 사기나 SMS 펌핑 사기에 대한 보호 기능을 제공하지 않습니다. reCAPTCHA SMS 전화 결제 사기 방지는 SMS를 보내기 전에 해당 전화번호의 SMS 전화 결제 사기를 수행할 가능성을 나타내는 위험 점수를 제공합니다. 이 점수를 기반으로 허위 SMS 메시지가 SMS 제공업체로 전송되기 전에 이를 허용하거나 차단할 수 있습니다.

자세한 내용은 reCAPTCHA SMS 전화 결제 사기 방지 블로그를 참조하세요.

시작하기 전에

reCAPTCHA의 기존 사용자인지 또는 reCAPTCHA를 처음 사용하는지에 따라 적절한 탭의 안내를 따르세요.

기존 reCAPTCHA 사용자

reCAPTCHA의 기존 사용자인 경우 Google Cloud 프로젝트에서 reCAPTCHA SMS 전화 결제 사기 방지 기능을 사용 설정하세요.

  1. Google Cloud 콘솔에서 reCAPTCHA 페이지로 이동합니다.

    reCAPTCHA로 이동

  2. 리소스 선택기에 프로젝트 이름이 표시되는지 확인합니다.

    프로젝트 이름이 표시되지 않으면 리소스 선택기를 클릭한 후 프로젝트를 선택합니다.

  3. 설정 클릭합니다.

  4. 프로젝트에 reCAPTCHA 계정 방어 도구가 사용 설정되지 않은 경우 다음을 수행합니다.

    1. 계정 방어 도구 창에서 사용 설정을 클릭합니다.
    2. 계정 방어 도구 구성 대화상자에서 사용 설정을 클릭합니다.
  5. SMS 전화 결제 사기 방지 창에서 구성을 클릭합니다.

  6. 사용 설정 전환 스위치를 클릭하고 저장을 클릭합니다.

    reCAPTCHA SMS 전화 결제 사기 방지 사용 설정이 Google 시스템에 적용되는 데 몇 분 정도 걸릴 수 있습니다. 기능 사용 설정이 Google 시스템에 전파되면 평가의 일환으로 reCAPTCHA SMS 전화 결제 사기 방지와 관련된 응답을 받기 시작합니다.

신규 reCAPTCHA 사용자

reCAPTCHA를 처음 사용하는 경우 다음을 수행합니다.

  1. 웹사이트 또는 모바일 애플리케이션에서 reCAPTCHA SMS 전화 결제 사기 방지를 사용하려는지에 따라 다음 단계에 따라 reCAPTCHA를 통합합니다.

  2. Google Cloud 프로젝트에서 reCAPTCHA SMS 전화 결제 사기 방지 기능을 사용 설정하세요.
    1. Google Cloud 콘솔에서 reCAPTCHA 페이지로 이동합니다.

      reCAPTCHA로 이동

    2. 리소스 선택기에 프로젝트 이름이 표시되는지 확인합니다.

      프로젝트 이름이 표시되지 않으면 리소스 선택기를 클릭한 후 프로젝트를 선택합니다.

    3. 설정 클릭합니다.

    4. 프로젝트에 reCAPTCHA 계정 방어 도구가 사용 설정되지 않은 경우 다음을 수행합니다.

      1. 계정 방어 도구 창에서 사용 설정을 클릭합니다.
      2. 계정 방어 도구 구성 대화상자에서 사용 설정을 클릭합니다.
    5. SMS 전화 결제 사기 방지 창에서 구성을 클릭합니다.

    6. 사용 설정 전환 스위치를 클릭하고 저장을 클릭합니다.

      reCAPTCHA SMS 전화 결제 사기 방지 사용 설정이 Google 시스템에 적용되는 데 몇 분 정도 걸릴 수 있습니다. 기능 사용 설정이 Google 시스템에 전파되면 평가의 일환으로 reCAPTCHA SMS 전화 결제 사기 방지와 관련된 응답을 받기 시작합니다.

전화번호로 평가 만들기

reCAPTCHA SMS 전화 결제 사기 방지를 위해 reCAPTCHA 클라이언트 라이브러리 또는 백엔드의 REST API를 사용하여 execute() 함수에서 생성된 토큰과 전화번호로 평가를 만듭니다.

이 문서에서는 REST API를 사용하여 평가를 만드는 방법을 보여줍니다. 클라이언트 라이브러리를 사용하여 평가를 만드는 방법은 평가 만들기를 참조하세요.

평가를 만들기 전에 다음을 수행합니다.

  • reCAPTCHA에 대한 인증을 설정합니다.

    reCAPTCHA가 설정된 환경에 따라 선택하는 인증 방법이 달라집니다. 다음 표는 인증을 설정하는 데 적합한 인증 방법과 지원되는 인터페이스를 선택하는 데 도움이 됩니다.

    환경 인터페이스 인증 방법
    Google Cloud
    • REST
    • 클라이언트 라이브러리
    연결된 서비스 계정을 사용합니다.
    온프레미스 또는 다른 클라우드 제공업체 REST API 키 또는워크로드 아이덴티티 제휴를 사용합니다.

    API 키를 사용하려면 API 키 제한사항을 적용하여 API 키를 보호하는 것이 좋습니다.

    클라이언트 라이브러리

    다음 중 하나를 사용합니다.

  • 사용자가 자주 변경하지 않는 안정적인 계정 식별자 accountId를 선택하고 projects.assessments.create 메서드의 평가에 제공합니다. 이 안정적인 계정 식별자는 동일한 사용자와 관련된 모든 이벤트에서 같은 값이어야 합니다. 계정 식별자로 다음을 제공할 수 있습니다.

    사용자 식별자

    모든 계정을 안정적인 사용자 이름, 이메일 주소 또는 전화번호와 고유하게 연결할 수 있는 경우 accountId로 사용할 수 있습니다. 이러한 교차 사이트 식별자(사이트 간에 재사용할 수 있는 식별자)를 제공하면 reCAPTCHA가 이 정보를 사용하여 악용 계정 식별자를 신고하고 이러한 식별자와 관련된 교차 사이트 악용 패턴에 대한 지식을 사용하여 교차 사이트 모델을 기반으로 사용자 계정 보호를 강화할 수 있습니다.

    또는 각 계정과 고유하게 연결된 내부 사용자 ID가 있으면 이를 accountId로 제공할 수 있습니다.

    해싱 또는 암호화됨

    각 계정에 고유하게 연결된 내부 사용자 ID가 없는 경우 안정적인 식별자를 사이트별 불확실한 계정 식별자로 전환할 수 있습니다. 이 식별자는 reCAPTCHA 계정 방어 도구가 사용자 활동 패턴을 이해하고 비정상적인 동작을 감지하는 데 필요하지만 다른 사이트 간에 공유되지는 않습니다.

    reCAPTCHA에 전송하기 전에 안정적인 계정 식별자를 선택하고 암호화 또는 해싱을 사용하여 불확실하게 만듭니다.

    • 암호화(권장): 안정적인 암호문을 생성하는 확정적 암호화 메서드를 사용하여 계정 식별자를 암호화합니다. 자세한 안내는 확정적으로 데이터 암호화를 참조하세요. 해싱 대신 대칭적 암호화를 선택할 경우 사용자 식별자와 해당 불확실한 사용자 식별자 간에 매핑을 유지할 필요가 없습니다. reCAPTCHA에서 반환하는 불확실한 식별자를 복호화하여 사용자 식별자로 변환합니다.

    • 해싱: SHA256-HMAC 메서드를 사용하여 원하는 커스텀 솔트로 계정 식별자를 해싱하는 것이 좋습니다. 해시는 단방향이므로, 원래 계정으로 다시 반환할 수 있는 해시된 계정 식별자를 매핑할 수 있도록 생성된 해시와 사용자 식별자 간에 매핑을 유지해야 합니다.

projects.assessments.create 메서드의 평가에서 확인할 UserIdaccountId 매개변수와 E.164형식의 전화번호를 추가합니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
  • TOKEN: grecaptcha.enterprise.execute() 호출에서 반환된 토큰입니다.
  • KEY_ID: 웹사이트에 설치한 점수 기반 키입니다.
  • ACCOUNT_ID: 웹사이트에 고유한 사용자 계정의 식별자입니다.
  • PHONE_NUMBER: 악성 수준을 확인해야 하는 전화번호입니다. 전화번호는 E.164 형식이어야 하며 해싱되거나 암호화되어서는 안 됩니다.

HTTP 메서드 및 URL:

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

JSON 요청 본문:


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

요청을 보내려면 다음 옵션 중 하나를 선택합니다.

curl

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

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

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

$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

다음과 비슷한 JSON 응답이 표시됩니다.


{
  "event": {
     …
  },
  "name": "ASSESSMENT_ID",
  "smsFraudAssessment": {
    "smsFraudRisk": 0.3
  }
}

수신되는 응답에는 smsFraudAssessment 필드에 smsFraudRisk 점수가 포함됩니다. 점수가 높을수록 전화번호가 위험할 가능성이 높고 점수가 낮을수록 전화번호가 적법할 가능성이 높습니다.

평가에 따라 조치할 책임은 사용자에게 있습니다. 가장 간단한 통합의 경우 smsFraudRisk에 기준점을 설정하여 결정에 기여할 수 있습니다.

평가에 주석 추가

SMS 트래픽을 추적하고 사기 감지를 개선하려면 SMS를 보낸 후 또는 전화번호 인증이 완료된 후 10분 이내에 평가에 주석을 달아야 합니다.

평가 ID를 사용해서 projects.assessments.annotate 메서드에 요청을 전송하여 평가에 주석을 추가합니다. 요청 본문에서 E.164 형식의 전화번호를 phoneAuthenticationEvent 필드에 입력하세요.

평가에 주석을 추가하려면 다음을 수행합니다.

  1. 사용 사례에 따라 요청 JSON 본문에 추가할 정보 및 라벨을 결정합니다.

    다음 표에는 이벤트에 주석을 추가하는 데 사용할 수 있는 라벨과 값이 나와 있습니다.

    라벨 설명 요청 예시
    reasons

    필수. 평가를 지원하는 라벨입니다.

    실시간 감지에 영향을 주기 때문에 이벤트 발생 후 몇 초 또는 몇 분 이내에 reasons 라벨에 실시간 이벤트 세부정보를 제공합니다.

    가능한 값은 다음과 같습니다.

    • INITIATED_TWO_FACTOR: SMS를 통한 인증 코드가 전송됩니다.
    • PASSED_TWO_FACTOR: 인증 코드가 성공적으로 인증되었습니다.
    • FAILED_TWO_FACTOR: 인증 코드가 잘못되었습니다.
        {
        "reasons": ["INITIATED_TWO_FACTOR"],
        "phoneAuthenticationEvent": {
          "phoneNumber": "+18005550175"
        }
      }
    annotation

    선택사항. 평가 적법성을 나타내는 라벨입니다.

    annotation 라벨에서 위험 평가를 검증하거나 수정하기 위해 로그인 및 등록 이벤트에 대한 사실을 제공합니다.

    가능한 값은 LEGITIMATE 또는 FRAUDULENT입니다.

    실시간 감지에 영향을 주기 때문에 이벤트 후 몇 초 또는 몇 분 이내에 이 정보를 전송하는 것이 좋습니다.

      {
       "annotation": "LEGITIMATE"
      }
      
  2. 적절한 라벨을 사용하여 주석 요청을 만듭니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • ASSESSMENT_ID: projects.assessments.create 호출에서 반환된 name 필드 값입니다.
    • ANNOTATION: (선택사항) 평가가 타당한지 또는 허위인지를 나타내는 라벨입니다.
    • REASONS: 주석을 지원하는 이유입니다. 가능한 값 목록은 이유 값을 참조하세요.
    • PHONE_NUMBER: 평가된 전화번호입니다. 전화번호는 E.164 형식이어야 하며 해싱되거나 암호화되어서는 안 됩니다.

    HTTP 메서드 및 URL:

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

    JSON 요청 본문:

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

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

    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

    요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

    $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

    성공 상태 코드(2xx)와 빈 응답을 받게 됩니다.

다음 단계