Mendeteksi dan mencegah penipuan SMS

Dokumen ini menunjukkan cara menggunakan SMS defense untuk mendeteksi dan mencegah serangan pumping SMS di bisnis yang mengandalkan SMS untuk autentikasi dua faktor (2FA) atau verifikasi ponsel, yang merupakan target potensial untuk penipuan pulsa SMS.

Autentikasi berbasis SMS (2FA dan login) adalah standar industri untuk keamanan login dan pendaftaran, tetapi tidak memberikan perlindungan terhadap penipuan pulsa SMS atau penipuan pumping SMS. Sebelum Anda mengirim SMS, SMS defense akan memberi Anda skor risiko yang menunjukkan kemungkinan nomor telepon tersebut melakukan penipuan pulsa SMS. Berdasarkan skor ini, Anda dapat mengizinkan atau memblokir pesan SMS palsu sebelum dikirim ke penyedia SMS Anda.

Skor risiko SMS defense bekerja secara terbalik dibandingkan dengan skor global reCAPTCHA. Skor risiko SMS defense sebesar 0,0 menunjukkan keyakinan rendah bahwa penipuan pulsa SMS terjadi; skor risiko sebesar 1,0 menunjukkan keyakinan tinggi bahwa penipuan pulsa SMS terjadi. Untuk mengetahui informasi selengkapnya tentang skor reCAPTCHA, lihat Menginterpretasikan penilaian untuk situs. Jika Anda menggunakan Firebase Authentication atau Identity Platform, lihat dokumentasi Identity Platform.

Untuk mengetahui informasi tambahan, lihat blog SMS defense.

Sebelum memulai

Bergantung pada apakah Anda adalah pengguna reCAPTCHA yang sudah ada atau baru menggunakan reCAPTCHA, ikuti petunjuk di tab yang sesuai:

Pengguna reCAPTCHA yang sudah ada

Jika Anda adalah pengguna reCAPTCHA yang sudah ada, aktifkan SMS defense di Google Cloud project Anda:

  1. Di Google Cloud konsol, buka halaman reCAPTCHA.

    Buka reCAPTCHA

  2. Pastikan nama project Anda muncul di pemilih resource.

    Jika Anda tidak melihat nama project Anda, klik pemilih resource, dan lalu pilih project Anda.

  3. Klik Setelan.

  4. Di panel SMS defense, klik Konfigurasi.

  5. Klik tombol Aktifkan, lalu klik Simpan.

    Mungkin perlu waktu beberapa menit agar pengaktifan SMS defense diterapkan ke sistem kami. Setelah pengaktifan fitur diterapkan ke sistem kami, Anda akan mulai menerima respons terkait SMS defense sebagai bagian dari penilaian.

Pengguna reCAPTCHA baru

Jika Anda baru menggunakan reCAPTCHA, lakukan hal berikut:

  1. Bergantung pada apakah Anda ingin menggunakan SMS defense di situs atau aplikasi seluler, ikuti langkah-langkah berikut untuk mengintegrasikan reCAPTCHA:

  2. Aktifkan SMS defense di project Anda:
      Google Cloud
    1. Di Google Cloud konsol, buka halaman reCAPTCHA.

      Buka reCAPTCHA

    2. Pastikan nama project Anda muncul di pemilih resource.

      Jika Anda tidak melihat nama project Anda, klik pemilih resource, dan lalu pilih project Anda.

    3. Klik Setelan.

    4. Di panel SMS defense, klik Konfigurasi.

    5. Klik tombol Aktifkan, lalu klik Simpan.

      Mungkin perlu waktu beberapa menit agar pengaktifan SMS defense diterapkan ke sistem kami. Setelah pengaktifan fitur diterapkan ke sistem kami, Anda akan mulai menerima respons terkait SMS defense sebagai bagian dari penilaian.

Membuat penilaian dengan nomor telepon

Untuk SMS defense, buat penilaian dengan token yang dihasilkan oleh fungsi execute() dan nomor telepon, dengan menggunakan Library Klien reCAPTCHA atau REST API dari backend Anda.

Dokumen ini menunjukkan cara membuat penilaian menggunakan REST API. Untuk mempelajari cara membuat penilaian menggunakan Library Klien, lihat Membuat penilaian.

Sebelum membuat penilaian, lakukan hal berikut:

  • Siapkan autentikasi ke reCAPTCHA.

    Metode autentikasi yang Anda pilih bergantung pada lingkungan tempat reCAPTCHA disiapkan. Tabel berikut membantu Anda memilih metode autentikasi yang sesuai dan antarmuka yang didukung untuk menyiapkan autentikasi:

    Lingkungan Antarmuka Metode autentikasi
    Google Cloud
    • REST
    • Library klien
    Gunakan akun layanan terlampir.
    Lokal atau penyedia cloud lain REST Gunakan kunci API atau Workload Identity Federation.

    Jika Anda ingin menggunakan kunci API, sebaiknya amankan kunci API dengan menerapkan pembatasan kunci API.

    Library klien

    Gunakan resource berikut:

  • Pilih ID akun stabil accountId yang tidak sering diubah oleh pengguna dan berikan ke penilaian dalam metode projects.assessments.create. ID akun stabil ini harus memiliki nilai yang sama untuk semua peristiwa yang terkait dengan pengguna yang sama. Anda dapat memberikan hal berikut sebagai ID akun:

    ID pengguna

    Jika setiap akun dapat dikaitkan secara unik dengan nama pengguna, alamat email, atau nomor telepon yang stabil, Anda dapat menggunakannya sebagai accountId. Saat Anda memberikan ID lintas situs tersebut (ID yang dapat digunakan kembali di seluruh situs), reCAPTCHA menggunakan informasi ini untuk meningkatkan perlindungan bagi akun pengguna Anda berdasarkan model lintas situs dengan menandai ID akun yang kasar dan menggunakan pengetahuan tentang pola penyalahgunaan lintas situs yang terkait dengan ID ini.

    Atau, jika Anda memiliki ID pengguna internal yang secara unik terkait dengan setiap akun, Anda dapat memberikannya sebagai accountId.

    Di-hash atau dienkripsi

    Jika Anda tidak memiliki ID pengguna internal yang secara unik terkait dengan setiap akun, Anda dapat mengubah ID stabil menjadi ID akun buram khusus situs. ID ini masih diperlukan agar reCAPTCHA account defender dapat memahami pola aktivitas pengguna dan mendeteksi perilaku anomali, tetapi tidak dibagikan di seluruh situs lainnya.

    Pilih ID akun stabil dan buat ID tersebut menjadi buram sebelum mengirim ke reCAPTCHA menggunakan enkripsi atau hashing:

    • enkripsi (direkomendasikan): enkripsi ID akun menggunakan metode enkripsi deterministik yang menghasilkan ciphertext stabil. Untuk petunjuk mendetail, lihat mengenkripsi data secara deterministik. Jika Anda memilih enkripsi simetris daripada hashing, Anda tidak perlu menyimpan pemetaan antara ID pengguna dan ID pengguna buram yang sesuai. Dekripsi ID buram yang ditampilkan oleh reCAPTCHA untuk mengubahnya menjadi ID pengguna.

    • hashing: sebaiknya lakukan hashing pada ID akun menggunakan metode SHA256-HMAC dengan salt kustom pilihan Anda. Karena hash hanya satu arah, Anda harus menyimpan pemetaan antara hash yang dihasilkan dan ID pengguna Anda sehingga Anda dapat memetakan ID akun yang di-hash yang ditampilkan kembali ke akun asli.

Tambahkan parameter accountId dan nomor telepon dalam format E.164 sebagai UserId untuk diverifikasi dalam penilaian dalam metode projects.assessments.create.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: ID project Anda Google Cloud .
  • TOKEN: token yang ditampilkan dari panggilan grecaptcha.enterprise.execute().
  • KEY_ID: kunci berbasis skor yang Anda instal di situs Anda.
  • ACCOUNT_ID: ID untuk akun pengguna yang unik untuk situs Anda.
  • PHONE_NUMBER: nomor telepon yang perlu diperiksa untuk mengetahui apakah nomor tersebut berbahaya. Nomor telepon harus dalam format E.164 dan tidak boleh di-hash atau dienkripsi.

Metode HTTP dan URL:

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

Meminta isi JSON:


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

Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:

curl

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

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

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

$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

Anda akan melihat respons JSON seperti berikut:


{
  "event": {
     …
  },
  "name": "ASSESSMENT_ID",
  "phoneFraudAssessment": {
    "smsTollFraudVerdict": {
      "risk": 0.3
    }
  }
}

Respons yang Anda terima mencakup skor risk di kolom phoneFraudAssessment.smsTollFraudVerdict . Semakin tinggi skornya, semakin besar kemungkinan nomor telepon tersebut berisiko; semakin rendah skornya, semakin besar kemungkinan nomor telepon tersebut valid.

Anda bertanggung jawab atas tindakan yang Anda lakukan berdasarkan penilaian. Untuk integrasi yang paling sederhana, Anda dapat menetapkan nilai minimum pada phoneFraudAssessment.smsTollFraudVerdict.risk untuk berkontribusi pada keputusan Anda.

Memberikan anotasi pada penilaian

Untuk melacak traffic SMS dan meningkatkan deteksi penipuan, Anda harus memberikan anotasi pada penilaian dalam waktu 10 menit setelah SMS dikirim atau setelah nomor telepon berhasil diverifikasi.

Anda memberikan anotasi pada penilaian dengan mengirim permintaan ke metode projects.assessments.annotate dengan ID penilaian. Di isi permintaan tersebut, sertakan nomor telepon dalam format E.164 di kolom phoneAuthenticationEvent.

Untuk memberikan anotasi pada penilaian, lakukan hal berikut:

  1. Tentukan informasi dan label yang akan ditambahkan di isi JSON permintaan, bergantung pada kasus penggunaan Anda.

    Tabel berikut mencantumkan label dan nilai yang dapat Anda gunakan untuk memberikan anotasi pada peristiwa:

    Label Deskripsi Contoh permintaan
    reasons

    Wajib diisi. Label untuk mendukung penilaian Anda assessments.

    Berikan detail peristiwa real-time di reasons label dalam beberapa detik atau menit setelah peristiwa karena detail tersebut memengaruhi deteksi real-time.

    Nilai yang memungkinkan:

    • INITIATED_TWO_FACTOR: kode verifikasi melalui SMS dikirim.
    • PASSED_TWO_FACTOR: kode verifikasi berhasil diverifikasi.
    • FAILED_TWO_FACTOR: kode verifikasi tidak valid.
        {
          "reasons": ["INITIATED_TWO_FACTOR"],
          "phoneAuthenticationEvent": {
            "phoneNumber": "+18005550175"
          }
        }
        
    annotation

    Opsional. Label untuk menunjukkan keabsahan penilaian.

    Berikan fakta tentang peristiwa login dan pendaftaran untuk memvalidasi atau mengoreksi penilaian risiko Anda di annotation label.

    Nilai yang memungkinkan: LEGITIMATE atau FRAUDULENT.

    Sebaiknya kirim informasi ini dalam beberapa detik atau menit setelah peristiwa karena informasi ini memengaruhi deteksi real-time.

      {
       "annotation": "LEGITIMATE"
      }
      
  2. Buat permintaan anotasi dengan label yang sesuai.

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • ASSESSMENT_ID: nilai kolom name yang ditampilkan dari panggilan projects.assessments.create.
    • ANNOTATION: Opsional. Label untuk menunjukkan apakah penilaian tersebut valid atau palsu.
    • REASONS: alasan yang mendukung anotasi Anda. Untuk mengetahui daftar nilai yang memungkinkan, lihat nilai alasan.
    • PHONE_NUMBER: nomor telepon yang dinilai. Nomor telepon harus dalam format E.164 dan tidak boleh di-hash atau dienkripsi.

    Metode HTTP dan URL:

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

    Meminta isi JSON:

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

    Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:

    curl

    Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

    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

    Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

    $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

    Anda akan menerima kode status berhasil (2xx) dan respons kosong.

Langkah berikutnya