Güvenli kullanıcı kimlik doğrulaması

Android'deki kimlik doğrulama sisteminizi korumak için, özellikle kullanıcılarınızın banka ve e-posta hesapları gibi hassas hesaplarda şifre tabanlı model kullanmayı düşünün. Kullanıcılarınızın yüklediği bazı uygulamaların amacının iyi olmayabileceğini ve kullanıcılarınızı kimlik avına geçmeye çalışabileceklerini unutmayın.

Ayrıca, cihazı yalnızca yetkili kullanıcıların kullanacağını da varsaymayın. Telefon hırsızlığı yaygın bir sorundur ve saldırganlar, kilidi açılmış cihazları doğrudan kullanıcı verilerinden veya finansal uygulamalardan kâr elde etmek için hedef alır. Tüm hassas uygulamaların biyometrik doğrulamayla makul bir kimlik doğrulama zaman aşımı (15 dakika) uygulamasını ve para transferi gibi hassas işlemlerden önce ek kimlik doğrulama gerektirmesini öneririz.

Biyometrik kimlik doğrulama iletişim kutusu

Biyometri kitaplığı, yüz tanıma veya parmak izi tanıma gibi biyometrik kimlik doğrulama isteyen bir istemi görüntüleyecek bir dizi işlev sunar. Ancak biyometrik istemler, omuz sörfü riskleri bilinen LSKF'ye geri düşecek şekilde yapılandırılabilir. Hassas uygulamalarda, PIN kodu yerine biyometri kullanılmamalıdır. Kullanıcılar, biyometrik yeniden deneme tamamlandıktan sonra bekleyebilir veya şifreyle yeniden giriş yapabilir ya da hesaplarını sıfırlayabilir. Hesap sıfırlama, cihazda kolayca erişilemeyen faktörlerin gerekli kılınmasını gerektirir (en iyi uygulama aşağıdadır).

Bu yöntem, sahtekarlık ve telefon hırsızlığını azaltmaya nasıl yardımcı olur?

Sahtekarlığı önlemeye yardımcı olabilecek özel kullanım alanlarından biri, bir işlemden önce uygulamanızda biyometrik kimlik doğrulama istemektir. Kullanıcılarınız finansal işlem yapmak istediğinde işlemi yapan kişinin gerçekten amaçlanan kullanıcı olduğunu doğrulamak için biyometrik iletişim kutusu gösterilir. Bu en iyi uygulama, saldırganın LSKF'yi bilip bilmemesine bakılmaksızın cihazı çalan bir saldırgana karşı koruma sağlar. Çünkü saldırganın, cihazın sahibi olduğunun doğrulanması gerekecektir.

Ek güvenlik seviyeleri için uygulama geliştiricilerin 3. Sınıf Biyometrik Kimlik Doğrulama isteğinde bulunmasını ve bankacılık ve finansal işlemler için CryptoObject kullanmasını öneririz.

Uygulama

  1. androidx.biometric kitaplığını eklediğinizden emin olun.
  2. Kullanıcının kimliğinin doğrulanmasını istediğiniz mantığı içeren etkinliğe veya parçaya biyometrik giriş iletişim kutusunu ekleyin.

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);
    });
}

En iyi uygulamalar

Biyometri hakkında daha fazla bilgi edinmek için codelab ile başlamanızı öneririz.

Kullanım alanlarınıza bağlı olarak, iletişim kutusunu uygunsuz kullanıcı işlemi yaparak veya kullanmadan uygulayabilirsiniz. Sahtekarlığı önlemek amacıyla, her işlem için kullanıcı işleminin açıkça belirtildiği biyometrik iletişim kutusunu eklemenizi öneririz. Kimlik doğrulama eklemenin kullanıcı deneyiminde zorluklara neden olabileceğini biliyoruz. Ancak, banka işlemlerinde işlenen bilgilerin doğası ve biyometrik kimlik doğrulamanın diğer kimlik doğrulama yöntemlerinden daha sorunsuz olması nedeniyle, bu düzeyde gezinmeyi eklemenin gerekli olduğunu düşünüyoruz.

Biyometrik kimlik doğrulama hakkında daha fazla bilgi edinin.

Geçiş anahtarları

Geçiş anahtarları, şifrelere kıyasla daha güvenli ve kolay bir alternatiftir. Geçiş anahtarları, kullanıcılarınızın, cihazlarının parmak izi veya yüz tanıma gibi ekran kilidi mekanizmasını kullanarak uygulamalarda ve web sitelerinde oturum açabilmesi için ortak anahtar kriptografisini kullanır. Bu sayede kullanıcı, şifreleri hatırlamak ve yönetmek zorunda kalmaz ve güvenliği önemli ölçüde artırır.

Geçiş anahtarları, kimlik avı saldırılarına karşı güçlü koruma sağlamak ve SMS veya uygulama tabanlı tek kullanımlık şifreler nedeniyle kullanıcı deneyiminin sıkıntısını önlemek için hem şifreyi hem de OTP kodlarını değiştirerek tek adımda çok öğeli kimlik doğrulama gereksinimlerini karşılayabilir. Geçiş anahtarları standart hale getirildiğinden tek bir uygulama, tüm kullanıcıların tüm cihazları, tarayıcıları ve işletim sistemlerinde şifresiz bir deneyim sağlar.

Android'de geçiş anahtarları; geçiş anahtarları, şifreler ve birleşik oturum açma (ör. Google ile oturum açma) gibi başlıca kimlik doğrulama yöntemlerini birleştiren Kimlik Bilgisi Yöneticisi Jetpack kitaplığını kullanarak desteklenir.

Bu yöntemle sahtekarlığın azaltılmasına nasıl yardımcı olur?

Geçiş anahtarları, yalnızca kayıtlı uygulamalarınızda ve web sitelerinizde çalıştığı için sizi kimlik avı saldırılarına karşı korur.

Geçiş anahtarının temel bileşeni, şifrelemeyle ilgili bir özel anahtardır. Genellikle bu özel anahtar yalnızca dizüstü bilgisayar veya cep telefonu gibi cihazlarınızda bulunur ve Google Şifre Yöneticisi gibi kimlik bilgisi sağlayıcıları (şifre yöneticileri olarak da bilinir) tarafından senkronize edilir. Geçiş anahtarı oluşturulduğunda online hizmet tarafından yalnızca karşılık gelen ortak anahtar kaydedilir. Hizmet, giriş sırasında ortak anahtardan bir sorgulama imzalamak için özel anahtarı kullanır. Bu durum yalnızca cihazlarınızın birinden gelebilir. Ayrıca, bunun gerçekleşmesi için cihazınızın veya kimlik bilgisi deponuzun kilidini açmanız gerekir. Bu da yetkisiz oturum açma işlemlerini (örneğin, çalıntı bir telefondan) önler.

Kilidi açılmış cihazın çalınması durumunda yetkisiz erişimi önlemek için geçiş anahtarları, anlamlı bir kimlik doğrulama zaman aşımı penceresiyle birleştirilmelidir. Cihazı çalan bir saldırgan, sırf önceki kullanıcı giriş yapmış olduğu için bir uygulamayı kullanamamalıdır. Bunun yerine, kimlik bilgilerinin süresi düzenli aralıklarla (ör. her 15 dakikada bir) dolmalıdır ve kullanıcıların ekran kilidi yeniden kimlik doğrulaması yoluyla kimliklerini doğrulaması gerekir.

Telefonunuz çalınırsa geçiş anahtarları sizi korur. Çünkü hırsızlar diğer cihazlarda kullanmak üzere şifrelerinizi çalamaz. Geçiş anahtarları cihaza özeldir. Google Şifre Yöneticisi'ni kullanırsanız ve telefonunuz çalınırsa başka bir cihazdan (ör. bilgisayar) Google Hesabınıza giriş yapabilir ve çalınan telefondaki oturumu uzaktan kapatabilirsiniz. Bu durumda, çalıntı telefondaki Google Şifre Yöneticisi (kayıtlı geçiş anahtarları dahil) kullanılamaz.

En kötü senaryoda, çalınan cihaz kurtarılmazsa geçiş anahtarları, geçiş anahtarını oluşturup senkronize eden kimlik bilgisi sağlayıcı tarafından yeni cihazla senkronize edilir. Örneğin, kullanıcı geçiş anahtarını oluşturmak için Google Şifre Yöneticisi'ni seçmiş olabilir ve yeni bir cihazda Google Hesabı'nda tekrar oturum açıp önceki cihazın ekran kilidini sağlayarak geçiş anahtarına erişebilir.

Google Şifre Yöneticisi'nde geçiş anahtarlarının güvenliği başlıklı makaleden daha fazla bilgi edinebilirsiniz.

Uygulama

Geçiş anahtarları, Android 9 (API düzeyi 28) veya sonraki sürümleri çalıştıran cihazlarda desteklenir. Şifreler ve Google ile Oturum Açma, Android 4.4'ten itibaren desteklenmektedir. Geçiş anahtarlarını kullanmaya başlamak için şu adımları uygulayın:

  1. Geçiş anahtarlarını nasıl uygulayacağınızı ilk kez anlamak için Kimlik Bilgisi Yöneticisi codelab'ini izleyin.
  2. Geçiş anahtarları kullanıcı deneyimi tasarım yönergelerini inceleyin. Bu dokümanda, kullanım alanınız için hangi akışların önerildiği gösterilmektedir.
  3. Kılavuzdan yararlanarak Kimlik Bilgisi Yöneticisi'ni inceleyin.
  4. Kimlik Bilgisi Yöneticisi ve geçiş anahtarı kullanımınızı planlayın. Dijital Öğe Bağlantıları için destek eklemeyi planlayın.

Geçiş anahtarı oluşturma, kaydetme ve kimlik doğrulama hakkında daha fazla bilgi için geliştirici belgelerimizi inceleyin.

Güvenli hesap sıfırlama

Kilidi açılmış bir cihaza erişimi olan yetkisiz bir saldırgan (ör. bir telefon elimize alındığında) özellikle bankacılık veya nakit para uygulamaları olmak üzere hassas uygulamalara erişmeye çalışır. Uygulamada biyometrik doğrulama kullanılıyorsa saldırgan, hesabınıza girebilmek için hesabı sıfırlamaya çalışır. Hesap sıfırlama akışının yalnızca cihaz üzerinden kolayca erişilebilen e-posta veya SMS OTP sıfırlama bağlantıları gibi bilgilere dayanmaması çok önemlidir.

Uygulamanızın sıfırlama akışına dahil edebileceğiniz yaygın en iyi uygulamalar şunlardır:

  • OTP'ye ek olarak yüz tanıma
  • Güvenlik soruları
  • Bilgi faktörü (ör. bir annenin kızlık soyadı, doğduğu şehir veya en sevdiğiniz şarkı)
  • Kimlik doğrulama

SMS Retriever API'si

SMS Retriever API, Android uygulamanızda otomatik olarak SMS tabanlı kullanıcı doğrulaması yapmanızı sağlar. Bu sayede, kullanıcıdan doğrulama kodlarını manuel olarak yazması gerekmez. Ayrıca bu API, kullanıcıdan RECEIVE_SMS veya READ_SMS gibi fazladan, tehlikeli olabilecek uygulama izinleri istemez. Ancak, cihaza yetkisiz yerel erişime karşı koruma sağlamak için tek kullanıcı doğrulaması olarak SMS kullanılmamalıdır.

Bu yöntemle sahtekarlığın azaltılmasına nasıl yardımcı olur?

Bazı kullanıcılar, tek kimlik doğrulama faktörü olarak SMS kodlarını kullanır ve bu da sahtekarlık için kolay bir giriş noktası sağlar.

SMS Retriever API, uygulamanın SMS kodunu kullanıcı etkileşimi olmadan doğrudan almasına olanak tanır ve sahtekarlığa karşı bir düzey koruma sağlayabilir.

Uygulama

SMS Retriever API'yi uygulamanın iki bölümü vardır: Android ve Sunucu.

Android: (kılavuz)

  1. Kullanıcının telefon numarasını alın.
  2. SMS retriever istemcisini başlatın.
  3. Telefon numarasını sunucunuza gönderin.
  4. Doğrulama mesajları alın.
  5. OTP'yi sunucunuza gönderin.

Sunucu: (kılavuz)

  1. Bir doğrulama mesajı oluşturun.
  2. Doğrulama mesajını SMS ile gönder.
  3. İade edildiğinde OTP'yi doğrulayın.

En iyi uygulamalar

Uygulama entegre edildikten ve kullanıcının telefon numarası SMS Retriever API ile doğrulandıktan sonra, OTP'yi almaya çalışır. Başarılı olursa bu, SMS'in cihaza otomatik olarak alındığına dair güçlü bir sinyaldir. Başarılı olmazsa ve kullanıcının OTP'yi manuel olarak yazması gerekiyorsa bu, kullanıcının sahtekarlıkla karşılaşıyor olabileceğini gösteren bir uyarı işareti olabilir.

SMS, kilidi açılmış bir cihazı soyan saldırganlar veya SIM klonlama saldırıları gibi yerel saldırılara alan yarattığı için tek kullanıcı doğrulama mekanizması olarak kullanılmamalıdır. Mümkünse Biyometri kullanmanız önerilir. Biyometrik sensörlerin kullanılamadığı cihazlarda, kullanıcı kimlik doğrulaması mevcut cihazdan kolayca elde edilemeyecek en az bir faktöre dayalı olmalıdır.

Daha fazla bilgi

En iyi uygulamalarla ilgili daha fazla bilgi edinmek için aşağıdaki kaynaklara göz atın: