Mendeteksi dan mencegah pengambilalihan akun

Google Cloud Fraud Defense memungkinkan Anda mendeteksi dan mencegah pengambilalihan akun (ATO) di seluruh situs dan aplikasi seluler Anda. Untuk membantu melindungi akun dari credential stuffing dan pengambilalihan otomatis, Anda dapat menggabungkan analisis perilaku tingkat akun di Account defense dengan pemeriksaan kredensial yang disusupi di Password defense dan autentikasi multi-faktor (MFA) langkah-langkah.

Serangan ATO, seperti credential stuffing, biasanya terjadi saat penyerang mengirim permintaan untuk login menggunakan kredensial yang terekspos dalam pelanggaran data dan dump sandi. Karena pengguna sering menggunakan kembali sandi di berbagai situs yang tidak terkait, serangan credential stuffing otomatis dapat berhasil bahkan terhadap endpoint autentikasi yang dikonfigurasi dengan benar, kecuali jika Anda mengevaluasi risiko perilaku dan kredensial yang bocor.

Sebelum memulai

Menyiapkan lingkungan Anda untuk Google Cloud Fraud Defense.

Mendeteksi dan mencegah ATO

Dengan Fraud Defense, Anda dapat mendeteksi dan mencegah ATO menggunakan kemampuan berikut:

Menggunakan Account defense dan skor penilaian risiko ATO

Account defense adalah kemampuan utama untuk mendeteksi dan mencegah ATO di seluruh situs dan aplikasi seluler.

Account defense memberikan skor risiko ATO khusus (accountDefenderAssessment.accountTakeoverVerdict.risk, mulai dari 0.0 hingga 1.0) dan sinyal penjelasan (riskReasons dan trustReasons). Sinyal ini mengevaluasi histori perilaku tingkat akun bersama dengan sinyal sesi, sehingga memberikan presisi deteksi ATO sekitar empat kali lebih tinggi daripada skor bot saja.

Untuk mengintegrasikan Account defense, teruskan ID akun yang stabil di kolom user_info.account_id (event.userInfo.accountId saat Anda memanggil CreateAssessment. Jika ID akun hanya tersedia setelah autentikasi, teruskan account_id saat Anda memanggil AnnotateAssessment.

Mendeteksi sandi yang bocor

Karena ATO sering kali mengandalkan credential stuffing dengan kredensial yang terekspos dalam dump sandi, gunakan Password defense pada alur login, perubahan sandi, dan reset sandi untuk mendeteksi kredensial yang disusupi.

Saat Anda memeriksa kredensial selama penilaian, Password defense akan mengevaluasi nama pengguna yang dikanonikalisasi dan awalan hash sandi terhadap pelanggaran data yang diketahui tanpa mengekspos kredensial teks biasa ke Google. Saat Anda memanggil CreateAssessment, teruskan awalan hash (lookupHashPrefix) nama pengguna (credentials.username) dan hash kredensial terenkripsi (encryptedUserCredentialsHash) di privatePasswordLeakVerification. Jika verdict (leakedPasswordVerdict) menunjukkan kredensial yang disusupi, wajibkan reset sandi atau picu tantangan MFA tambahan.

Menggunakan kunci berbasis skor dan MFA peningkatan

Jika skor risiko ATO (accountDefenderAssessment.accountTakeoverVerdict.risk) atau skor bot (riskAnalysis.score) menunjukkan risiko yang meningkat, gunakan kunci berbasis skor untuk memicu autentikasi tambahan atau autentikasi multi-faktor (MFA) di aplikasi Anda sebagai mekanisme penegakan. Misalnya, meminta faktor tambahan kepada pengguna, mewajibkan autentikasi ulang, atau memicu verifikasi sandi sekali pakai (OTP).

Untuk menerapkan kunci berbasis skor dan MFA peningkatan, selesaikan langkah-langkah berikut:

  • Instal kunci berbasis skor untuk mengumpulkan sinyal sesi dan mendeteksi otomatisasi dalam ATO berskala besar:

  • Jika accountTakeoverVerdict.risk melebihi nilai minimum risiko atau riskAnalysis.score berada di bawah nilai minimum bot, picu autentikasi step-up atau verifikasi MFA di penyedia identitas Anda untuk memverifikasi kepemilikan akun saat login atau untuk tindakan sensitif. Memicu verifikasi langkah tambahan secara selektif pada permintaan berisiko tinggi akan mengurangi hambatan bagi pengguna yang sah.

Contoh berikut menunjukkan cara mengintegrasikan kunci berbasis skor dalam alur kerja login:

function submitForm() {
  grecaptcha.enterprise.ready(function() {
    grecaptcha.enterprise.execute(
      'reCAPTCHA_site_key', {action: 'account_login'}).then(function(token) {
       document.getElementById("token").value = token;
       document.getElementByID("loginForm").submit();
    });
  });
}
<form id="loginForm" action="?" method="POST">
  Username: <input type="text" name="username"/><br/>
  Password: <input type="password" name="password"/><br/>
  <input type="hidden" id="token" name="recaptcha_token"/>
  <button onclick="submitForm()">Login</button>
</form>
<script src="https://www.google.com/recaptcha/enterprise.js" async defer></script>

Anda dapat bereksperimen dengan kode ini di JSFiddle dengan mengklik ikon <> di sudut kanan atas jendela kode.

<html>
  <head>
    <title>Account Login - Score</title>
    <script src="https://www.google.com/recaptcha/enterprise.js"></script>
    <script>
    function submitForm() {
      grecaptcha.enterprise.ready(function() {
        grecaptcha.enterprise.execute(
          'reCAPTCHA_site_key', {action: 'account_login'}).then(function(token) {
           document.getElementById("token").value = token;
           document.getElementByID("loginForm").submit();
        });
      });
    }
    </script>
  </head>
  <body>
    <form id="loginForm" action="?" method="POST">
      Username: <input type="text" name="username"/><br/>
      Password: <input type="password" name="password"/><br/>
      <input type="hidden" id="token" name="recaptcha_token"/>
      <button onclick="submitForm()">Login</button>
    </form>
  </body>
</html>

Langkah berikutnya