Untuk melindungi sistem autentikasi Anda di Android, pertimbangkan untuk beralih dari model berbasis sandi, terutama untuk akun sensitif seperti akun bank dan email pengguna Anda. Ingatlah bahwa beberapa aplikasi yang diinstal pengguna Anda mungkin tidak memiliki niat baik dan dapat mencoba melakukan phishing terhadap pengguna Anda.
Selain itu, jangan berasumsi bahwa hanya pengguna yang diberi otorisasi yang akan menggunakan perangkat. Pencurian ponsel adalah masalah umum, dan penyerang menargetkan perangkat yang tidak terkunci untuk mendapatkan keuntungan langsung dari data pengguna atau aplikasi keuangan. Sebaiknya semua aplikasi sensitif menerapkan batas waktu autentikasi yang wajar (15 menit?) dengan verifikasi biometrik dan mewajibkan autentikasi tambahan sebelum melakukan tindakan sensitif seperti transfer uang.
Dialog autentikasi biometrik
Library Biometrics menawarkan serangkaian fungsi untuk menampilkan dialog yang meminta autentikasi biometrik seperti pengenalan wajah atau pengenalan sidik jari. Namun, perintah biometrik dapat dikonfigurasi untuk melakukan penggantian ke LSKF, yang memiliki risiko intai yang diketahui. Untuk aplikasi sensitif, sebaiknya jangan menggunakan PIN sebagai alternatif biometrik, dan setelah mencoba ulang biometrik beberapa kali, pengguna dapat menunggu, atau login ulang dengan sandi atau mereset akun. Reset akun harus memerlukan faktor yang tidak mudah diakses di perangkat (praktik terbaik di bawah).
Cara fitur ini membantu memitigasi penipuan dan pencurian ponsel
Salah satu kasus penggunaan khusus yang dapat membantu mencegah penipuan adalah meminta autentikasi biometrik dalam aplikasi Anda sebelum transaksi. Saat pengguna Anda ingin melakukan transaksi keuangan, dialog biometrik akan ditampilkan untuk memverifikasi bahwa memang pengguna yang dimaksud yang melakukan transaksi. Praktik terbaik ini akan melindungi dari penyerang yang mencuri perangkat, terlepas dari apakah penyerang mengetahui atau tidak LSKF, karena mereka harus menyelidiki bahwa mereka adalah pemilik perangkat.
Untuk tingkat keamanan tambahan, sebaiknya developer aplikasi meminta Autentikasi Biometrik Kelas 3 dan menggunakan CryptoObject
untuk transaksi perbankan dan keuangan.
Implementasi
- Pastikan Anda menyertakan library androidx.biometric.
- Sertakan dialog login biometrik dalam aktivitas atau fragmen yang menyimpan logika yang Anda inginkan untuk mengautentikasi pengguna.
Kotlin
private var executor: Executor? = null private var biometricPrompt: BiometricPrompt? = null private var promptInfo: BiometricPrompt.PromptInfo? = null fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_login) executor = ContextCompat.getMainExecutor(this) biometricPrompt = BiometricPrompt(this@MainActivity, executor, object : AuthenticationCallback() { fun onAuthenticationError( errorCode: Int, @NonNull errString: CharSequence ) { super.onAuthenticationError(errorCode, errString) Toast.makeText( getApplicationContext(), "Authentication error: $errString", Toast.LENGTH_SHORT ) .show() } fun onAuthenticationSucceeded( @NonNull result: BiometricPrompt.AuthenticationResult? ) { super.onAuthenticationSucceeded(result) Toast.makeText( getApplicationContext(), "Authentication succeeded!", Toast.LENGTH_SHORT ).show() } fun onAuthenticationFailed() { super.onAuthenticationFailed() Toast.makeText( getApplicationContext(), "Authentication failed", Toast.LENGTH_SHORT ) .show() } }) promptInfo = Builder() .setTitle("Biometric login for my app") .setSubtitle("Log in using your biometric credential") .setNegativeButtonText("Use account password") .build() // Prompt appears when user clicks "Log in". // Consider integrating with the keystore to unlock cryptographic operations, // if needed by your app. val biometricLoginButton: Button = findViewById(R.id.biometric_login) biometricLoginButton.setOnClickListener { view -> biometricPrompt.authenticate( promptInfo ) } }
Java
private Executor executor; private BiometricPrompt biometricPrompt; private BiometricPrompt.PromptInfo promptInfo; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); executor = ContextCompat.getMainExecutor(this); biometricPrompt = new BiometricPrompt(MainActivity.this, executor, new BiometricPrompt.AuthenticationCallback() { @Override public void onAuthenticationError(int errorCode, @NonNull CharSequence errString) { super.onAuthenticationError(errorCode, errString); Toast.makeText(getApplicationContext(), "Authentication error: " + errString, Toast.LENGTH_SHORT) .show(); } @Override public void onAuthenticationSucceeded( @NonNull BiometricPrompt.AuthenticationResult result) { super.onAuthenticationSucceeded(result); Toast.makeText(getApplicationContext(), "Authentication succeeded!", Toast.LENGTH_SHORT).show(); } @Override public void onAuthenticationFailed() { super.onAuthenticationFailed(); Toast.makeText(getApplicationContext(), "Authentication failed", Toast.LENGTH_SHORT) .show(); } }); promptInfo = new BiometricPrompt.PromptInfo.Builder() .setTitle("Biometric login for my app") .setSubtitle("Log in using your biometric credential") .setNegativeButtonText("Use account password") .build(); // Prompt appears when the user clicks "Log in". // Consider integrating with the keystore to unlock cryptographic operations, // if needed by your app. Button biometricLoginButton = findViewById(R.id.biometric_login); biometricLoginButton.setOnClickListener(view -> { biometricPrompt.authenticate(promptInfo); }); }
Praktik terbaik
Sebaiknya Anda memulai dengan codelab untuk mengetahui lebih lanjut biometrik.
Bergantung pada kasus penggunaan, Anda dapat menerapkan dialog dengan atau tanpa tindakan pengguna eksplisit. Untuk menghindari penipuan, sebaiknya tambahkan dialog biometrik dengan tindakan pengguna yang eksplisit untuk setiap transaksi. Kami memahami bahwa penambahan autentikasi dapat menimbulkan hambatan dalam UX, tetapi karena sifat informasi yang ditangani dalam transaksi bank dan autentikasi biometrik lebih lancar daripada metode autentikasi lainnya, kami merasa perlu menambahkan tingkat navigasi ini.
Pelajari autentikasi biometrik lebih lanjut.
Kunci sandi
Kunci sandi adalah alternatif sandi yang lebih aman dan mudah. Kunci sandi menggunakan kriptografi kunci publik untuk memungkinkan pengguna Anda login ke aplikasi dan situs menggunakan mekanisme kunci layar perangkat mereka, seperti pengenalan wajah atau sidik jari. Dengan begitu, pengguna tidak perlu mengingat dan mengelola sandi, serta keamanan meningkat secara signifikan.
Kunci sandi dapat memenuhi persyaratan autentikasi multi-faktor dalam satu langkah, menggantikan sandi dan kode OTP untuk memberikan perlindungan yang kuat terhadap serangan phishing dan menghindari pengalaman pengguna yang menyulitkan karena harus menggunakan sandi sekali pakai berbasis SMS atau aplikasi. Karena kunci sandi distandardisasi, satu penerapan memungkinkan pengalaman tanpa sandi di semua perangkat, browser, dan sistem operasi pengguna.
Di Android, kunci sandi didukung menggunakan library Jetpack Credential Manager yang menyatukan metode autentikasi utama, termasuk kunci sandi, sandi, dan login gabungan (seperti Login dengan Google).
Cara ini membantu mengurangi penipuan
Kunci sandi melindungi Anda dari serangan phishing karena hanya berfungsi di aplikasi dan situs yang telah Anda daftarkan.
Komponen inti kunci sandi adalah kunci pribadi kriptografis. Biasanya, kunci pribadi ini hanya ada di perangkat Anda, seperti laptop atau ponsel, dan disinkronkan di seluruh perangkat oleh penyedia kredensial (juga dikenal sebagai pengelola sandi), seperti Pengelola Sandi Google. Hanya kunci publik yang sesuai yang disimpan oleh layanan online saat kunci sandi dibuat. Selama login, layanan menggunakan kunci pribadi untuk menandatangani tantangan dari kunci publik. Permintaan ini hanya dapat berasal dari salah satu perangkat Anda. Selain itu, agar hal ini terjadi, Anda harus membuka kunci perangkat atau penyimpanan kredensial Anda, yang mencegah login yang tidak sah (misalnya, dari ponsel yang dicuri).
Untuk mencegah akses tidak sah jika perangkat yang dicuri dan tidak terkunci, kunci sandi harus dipasangkan dengan jangka waktu habis autentikasi yang wajar. Penyerang yang mencuri perangkat tidak boleh dapat menggunakan aplikasi hanya karena pengguna sebelumnya telah login. Sebaliknya, kredensial harus berakhir pada interval reguler (misalnya, setiap 15 menit), dan pengguna harus diminta untuk memverifikasi identitas mereka melalui autentikasi ulang kunci layar.
Jika ponsel Anda dicuri, kunci sandi akan melindungi Anda karena pencuri tidak dapat mencuri sandi Anda untuk digunakan di perangkat lain. Kunci sandi khusus untuk perangkat. Jika Anda menggunakan Pengelola Sandi Google dan ponsel Anda dicuri, Anda dapat login ke Akun Google Anda dari perangkat lain (seperti komputer) dan logout dari ponsel yang dicuri dari jarak jauh. Tindakan ini membuat Pengelola Sandi Google di ponsel yang dicuri tidak dapat digunakan, termasuk kunci sandi tersimpan.
Dalam skenario terburuk, jika perangkat yang dicuri tidak ditemukan, kunci sandi akan disinkronkan kembali ke perangkat baru oleh penyedia kredensial yang membuat dan menyinkronkan kunci sandi. Misalnya, pengguna mungkin telah memilih Pengelola Sandi Google untuk membuat kunci sandi, dan mereka dapat mengakses kunci sandi mereka di perangkat baru dengan login kembali ke Akun Google mereka dan memberikan kunci layar dari perangkat sebelumnya.
Pelajari lebih lanjut di artikel Keamanan Kunci Sandi di Pengelola Sandi Google.
Implementasi
Kunci sandi didukung di perangkat yang menjalankan Android 9 (level API 28) atau yang lebih baru. Sandi dan Login dengan Google didukung mulai dari Android 4.4. Untuk mulai menggunakan kunci sandi, ikuti langkah-langkah berikut:
- Ikuti codelab Pengelola Kredensial untuk mendapatkan pemahaman awal tentang cara menerapkan kunci sandi.
- Tinjau panduan desain pengalaman pengguna kunci sandi. Dokumen ini menunjukkan alur yang direkomendasikan untuk kasus penggunaan Anda.
- Pelajari Credential Manager dengan mengikuti panduan.
- Rencanakan penerapan Pengelola Kredensial dan kunci sandi untuk aplikasi Anda. Rencanakan penambahan dukungan untuk Digital Asset Links.
Lihat dokumentasi developer kami untuk mengetahui detail selengkapnya tentang cara membuat, mendaftarkan, dan mengautentikasi dengan kunci sandi.
Reset akun yang aman
Penyerang tidak sah yang memiliki akses ke perangkat yang tidak terkunci (seperti saat ponsel direbut) akan mencoba mengakses aplikasi sensitif, terutama aplikasi perbankan atau aplikasi tunai. Jika aplikasi menerapkan verifikasi biometrik, penyerang akan mencoba mereset akun untuk masuk. Alur reset akun tidak boleh hanya mengandalkan informasi yang mudah diakses di perangkat, seperti link reset OTP email atau SMS.
Berikut adalah praktik terbaik umum yang dapat Anda masukkan ke dalam alur reset aplikasi:
- Pengenalan wajah, selain OTP
- Pertanyaan keamanan
- Faktor pengetahuan (seperti nama gadis ibu, kota kelahiran, atau lagu favorit)
- Verifikasi tanda pengenal
SMS Retriever API
SMS Retriever API memungkinkan Anda melakukan verifikasi pengguna berbasis SMS di aplikasi Android secara otomatis. Dengan begitu, pengguna tidak perlu mengetik kode verifikasi secara manual. Selain itu, API ini tidak meminta izin aplikasi tambahan yang berpotensi berbahaya seperti RECEIVE_SMS
atau READ_SMS
kepada pengguna. Namun, SMS tidak boleh digunakan sebagai satu-satunya verifikasi pengguna untuk melindungi dari akses lokal yang tidak sah ke perangkat.
Cara ini membantu mengurangi penipuan
Beberapa pengguna menggunakan kode SMS sebagai satu-satunya faktor autentikasi mereka yang memberikan titik masuk yang mudah untuk penipuan.
SMS Retriever API memungkinkan aplikasi mengambil kode SMS secara langsung tanpa interaksi pengguna, dan dapat memberikan tingkat perlindungan terhadap penipuan.
Implementasi
Ada dua bagian dalam menerapkan SMS Retriever API: Android, dan Server.
Android: (panduan)
- Dapatkan nomor telepon pengguna.
- Mulai klien pengambil SMS.
- Kirim nomor telepon ke server Anda.
- Menerima pesan verifikasi.
- Kirim OTP ke server Anda.
Server: (panduan)
- Susun pesan verifikasi.
- Kirim pesan verifikasi melalui SMS.
- Verifikasi OTP saat dikembalikan.
Praktik terbaik
Setelah aplikasi diintegrasikan dan nomor telepon pengguna diverifikasi dengan SMS Retriever API, aplikasi akan mencoba mendapatkan OTP. Jika berhasil, hal itu merupakan sinyal kuat bahwa SMS diterima di perangkat secara otomatis. Jika tidak berhasil dan pengguna perlu mengetik OTP secara manual, hal ini dapat menjadi tanda peringatan bahwa pengguna mungkin mengalami penipuan.
SMS tidak boleh digunakan sebagai satu-satunya mekanisme verifikasi pengguna karena dapat membuka peluang serangan lokal, seperti penyerang yang merampas perangkat yang tidak terkunci; atau serangan kloning SIM. Sebaiknya gunakan Biometrik jika memungkinkan. Di perangkat yang tidak memiliki sensor Biometrik, autentikasi pengguna harus mengandalkan setidaknya satu faktor yang tidak mudah diperoleh dari perangkat saat ini.
Pelajari lebih lanjut
Untuk membaca lebih lanjut praktik terbaik, lihat referensi berikut:
- Dokumentasi Android kami tentang Keamanan
- Dokumentasi Play Integrity API
- Perubahan Android 15
- Praktik Terbaik untuk Mencegah Panggilan Penipuan dari Monzo Bank