Mendeteksi dan mencegah penipuan SMS

Dokumen ini menunjukkan cara menggunakan pertahanan SMS untuk mendeteksi dan mencegah serangan pumping SMS di bisnis yang mengandalkan SMS untuk autentikasi dua faktor (2FA) atau verifikasi telepon, 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, pertahanan SMS 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 penipuan sebelum dikirim ke penyedia SMS Anda.

Skor risiko pertahanan SMS berfungsi berlawanan dengan skor global reCAPTCHA. Skor risiko perlindungan SMS 0,0 menunjukkan keyakinan rendah bahwa penipuan pulsa SMS terjadi; skor risiko 1,0 menunjukkan keyakinan tinggi bahwa penipuan pulsa SMS terjadi. Untuk mengetahui informasi selengkapnya tentang skor reCAPTCHA, lihat Menafsirkan penilaian untuk situs. Jika Anda menggunakan Firebase Authentication atau Identity Platform, lihat dokumentasi Identity Platform.

Untuk mengetahui informasi tambahan, lihat blog pertahanan SMS.

Sebelum memulai

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

Pengguna reCAPTCHA lama

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

  1. Di konsol Google Cloud , buka halaman reCAPTCHA.

    Buka reCAPTCHA

  2. Pastikan nama project Anda muncul di pemilih resource.

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

  3. Klik Setelan.

  4. Di panel Perlindungan SMS, klik Konfigurasi.

  5. Klik tombol Aktifkan, lalu klik Simpan.

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

Pengguna reCAPTCHA baru

Jika Anda baru menggunakan reCAPTCHA, lakukan hal berikut:

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

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

      Buka reCAPTCHA

    2. Pastikan nama project Anda muncul di pemilih resource.

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

    3. Klik Setelan.

    4. Di panel Perlindungan SMS, klik Konfigurasi.

    5. Klik tombol Aktifkan, lalu klik Simpan.

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

Buat penilaian dengan nomor telepon

Untuk pertahanan SMS, buat penilaian dengan token yang dibuat 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 Anda 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 batasan kunci API.

    Library klien

    Gunakan resource berikut:

  • Pilih ID akun yang stabil accountId yang tidak sering diubah oleh pengguna dan berikan ke penilaian dalam metode projects.assessments.create. ID akun yang 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 melanggar dan menggunakan pengetahuan tentang pola penyalahgunaan lintas situs yang terkait dengan ID ini.

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

    Di-hash atau dienkripsi

    Jika tidak memiliki ID pengguna internal yang secara unik dikaitkan dengan setiap akun, Anda dapat mengubah ID yang stabil menjadi ID akun spesifik per situs yang tidak transparan. ID ini tetap diperlukan agar reCAPTCHA account defender dapat memahami pola aktivitas pengguna dan mendeteksi perilaku anomali, tetapi ID ini tidak dibagikan ke situs lain.

    Pilih ID akun stabil apa pun dan buat ID tersebut menjadi buram sebelum mengirimkannya ke reCAPTCHA dengan menggunakan enkripsi atau hashing:

    • enkripsi (direkomendasikan): mengenkripsi 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 perlu menyimpan pemetaan antara hash yang dihasilkan dan ID pengguna Anda sehingga Anda dapat memetakan ID akun yang di-hash yang dikembalikan ke akun asli.

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

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: Google Cloud Project ID Anda.
  • 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 atau tidak. 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 . Makin tinggi skornya, makin besar kemungkinan nomor telepon tersebut berisiko; makin rendah skornya, makin besar kemungkinan nomor telepon tersebut valid.

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

Memberikan anotasi pada penilaian

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

Anda membuat anotasi 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 memberi 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 menganotasi peristiwa:

    Label Deskripsi Contoh permintaan
    reasons

    Wajib. Label untuk mendukung penilaian Anda.

    Memberikan detail acara real-time dalam label reasons dalam beberapa detik atau menit setelah acara karena 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 dalam label annotation.

    Nilai yang mungkin: LEGITIMATE atau FRAUDULENT.

    Sebaiknya kirimkan informasi ini dalam beberapa detik atau menit setelah peristiwa terjadi karena 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 itu sah atau curang.
    • REASONS: alasan yang mendukung anotasi Anda. Untuk daftar kemungkinan nilai, 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