Aby chronić swój system uwierzytelniania na Androidzie, rozważ rezygnację z oparty na haśle, zwłaszcza w przypadku kont poufnych, takich jak z banku i konta e-mail. Pamiętaj, że niektóre aplikacje instalowane przez użytkowników mogą nie mieć użytkowników w dobrej wierze i mogą próbować wyłudzić od nich informacje.
Nie zakładaj też, że z urządzenia będą korzystać tylko autoryzowani użytkownicy. Kradzież telefonu to częsty problem, a hakerzy wycelują w nie odblokowane urządzenia, aby bezpośrednio zyskać zyski. z danych użytkownika lub aplikacji finansowych. W przypadku wszystkich poufnych aplikacji zalecamy stosowanie rozsądnego limitu czasu uwierzytelniania (15 minut) za pomocą weryfikacji biometrycznej, wymagają dodatkowego uwierzytelniania przed podjęciem działań związanych z poufnymi danymi, takich jak przekazanie pieniędzy transfery danych.
Okno uwierzytelniania biometrycznego
Biblioteka danych biometrycznych udostępnia zestaw funkcji do wyświetlania promptu uwierzytelnieniem biometrycznym, takim jak rozpoznawanie twarzy czy odcisku palca. Prompty biometryczne można jednak skonfigurować w taki sposób, aby korzystały z formatu LSKF, znanych zagrożeń związanych z surfowaniem po barku. W przypadku aplikacji poufnych zalecamy że system biometryczny nie przełącza się na kod PIN ani nie wyczerpuje się użytkownicy mogą poczekać albo zalogować się ponownie za pomocą hasła lub zresetować konta. Resetowanie konta należy wymagać elementów, które nie są łatwo dostępne na urządzeniu (sprawdzone metody poniżej).
Jak pomaga to zapobiegać oszustwom i kradzieżom telefonu
Szczególnym przypadkiem użycia, który może pomóc w zapobieganiu oszustwom, jest żądanie uwierzytelniania biometrycznego w aplikacji przed transakcją. Gdy użytkownicy chcą dokonać transakcji finansowej, wyświetla się okno biometryczne, zweryfikować, czy to rzeczywiście zamierzony użytkownik dokonuje transakcji. Ten która zapewni ochronę przed kradzieżą urządzenia, niezależnie atakujący wie, czy nie ma informacji o LSKF, ponieważ będzie musiał sprawdzić, czy do właściciela urządzenia.
W celu zwiększenia bezpieczeństwa zalecamy, aby deweloperzy aplikacji korzystali z klasy 3.
uwierzytelniania biometrycznego i używać CryptoObject
w usługach bankowych i
transakcje finansowe.
Implementacja
- Pamiętaj, aby dodać bibliotekę androidx.biometric.
- Uwzględnij okno logowania biometrycznego we aktywności lub fragmencie, który zawiera które mają być uwierzytelniane.
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); }); }
Sprawdzone metody
Zalecamy zacząć od ćwiczeń z programowania, aby dowiedzieć się więcej o biometrii.
W zależności od przypadków użycia możesz wdrożyć to okno z zastosowaniem lub bez konkretne działanie użytkownika. Aby uniknąć oszustw, zalecamy dodanie biometrii z jednoznacznym działaniem użytkownika w przypadku każdej transakcji. Zdajemy sobie sprawę, że dodanie uwierzytelniania może wprowadzić niekorzystny wpływ na UX, ale ze względu na charakter informacje przetwarzane w ramach transakcji bankowej oraz dane biometryczne, jest wygodniejsze niż inne metody. niezbędne do dodania tego poziomu nawigacji.
Więcej informacji o uwierzytelnianiu biometrycznym
Klucze dostępu
Klucze dostępu to bezpieczniejsza i łatwiejsza w obsłudze alternatywa dla haseł. Użycie kluczy dostępu kryptografia klucza publicznego umożliwiająca użytkownikom logowanie się w aplikacjach i na stronach internetowych. używając funkcji blokady ekranu urządzenia, np. odcisku palca lub skanu twarzy i rozpoznawanie obiektów. Dzięki temu użytkownik nie musi zapamiętywać haseł ani nimi zarządzać. i zapewnia znacznie wyższy poziom bezpieczeństwa.
Klucze dostępu mogą spełniać wymagania dotyczące uwierzytelniania wielopoziomowego w jednym kroku. zastępując zarówno hasło, jak i kody hasła jednorazowego, zapewniając solidną ochronę przed ataków phishingowych i uniknięcia problemów użytkowników związanych z jednorazowym SMS-em lub użyciem aplikacji. haseł. Ponieważ klucze dostępu są ustandaryzowane, pojedyncza implementacja umożliwia i bez haseł na całym świecie urządzeń, przeglądarek systemów operacyjnych.
Na Androidzie klucze dostępu są obsługiwane przez usługę Credential Manager Jetpack ujednolica główne metody uwierzytelniania, w tym klucze dostępu, haseł i logowania sfederowanego (np. w ramach funkcji Zaloguj się przez Google).
Jak pomaga to zapobiegać oszustwom
Klucze dostępu chronią Cię przed atakami phishingowymi, ponieważ działają tylko na Twoim urządzeniu zarejestrowanych aplikacji i witryn.
Podstawowym komponentem klucza dostępu jest kryptograficzny klucz prywatny. Zwykle Klucz prywatny jest przechowywany wyłącznie na Twoich urządzeniach, takich jak laptopy czy telefony komórkowe. i jest synchronizowane między nimi przez dostawców danych uwierzytelniających (zwanych też hasłami Menedżerami haseł Google), np. Menedżera haseł Google. Tylko odpowiedni klucz publiczny jest zapisane przez usługę online po utworzeniu klucza dostępu. Podczas logowania usługa używa klucza prywatnego do podpisania testu zabezpieczającego za pomocą klucza publicznego. Może to być pochodzi z jednego z Twoich urządzeń. Aby tak się stało, musisz również odblokować urządzenie lub magazyn danych logowania, aby zapobiec nieautoryzowanym logowaniu (na przykład ze skradzionego telefonu).
Aby zapobiec nieautoryzowanemu dostępowi w przypadku kradzieży, odblokowanego urządzenia, klucze dostępu muszą być połączone z racjonalnym czasem oczekiwania na uwierzytelnianie. An osoba przeprowadzająca atak, która ukradnie urządzenie, nie powinna mieć możliwości korzystania z aplikacji ponieważ zalogował się poprzedni użytkownik. Dane logowania powinny wygasają w regularnych odstępach czasu (np. co 15 minut), a użytkownicy powinni być muszą potwierdzić swoją tożsamość przez ponowne uwierzytelnienie za pomocą blokady ekranu.
Jeśli Twój telefon zostanie skradziony, klucze dostępu będą Cię chronić, ponieważ złodziej nie może ukraść haseł do używania na innych urządzeniach – klucze dostępu są powiązane z konkretnymi urządzeniami. Jeśli używasz Menedżer haseł Google lub Twój telefon zostaną skradzione, możesz zalogować się na swoje konto Google zalogować się na inne urządzenie (np. na komputerze) i zdalnie wylogować się z skradzionego telefonu. Dzięki temu Menedżer haseł Google może działać na skradzionym telefonie bez możliwości użycia, łącznie z zapisanymi kluczami dostępu.
W najgorszym przypadku, jeśli skradzione urządzenie nie zostanie przywrócone, klucze dostępu zostaną zsynchronizowane z nowym urządzeniem przez dostawcę danych logowania, który utworzył i zsynchronizował klucz. Na przykład użytkownik mógł wybrać Menedżera haseł Google, klucz dostępu i będzie mógł uzyskać dostęp do klucza na nowym urządzeniu, podpisując się z powrotem na konto Google i ustawić blokadę ekranu z poprzedniego urządzenia.
Więcej informacji: Artykuł Bezpieczeństwo kluczy dostępu w Menedżerze haseł Google
Implementacja
Klucze dostępu są obsługiwane na urządzeniach z Androidem 9 (poziom interfejsu API 28) lub nowszym. Hasła i funkcja Zaloguj się przez Google są obsługiwane od Androida 4.4. Do aby zacząć korzystać z kluczy dostępu, wykonaj te czynności:
- Wykonaj ćwiczenie z programowania Menedżera danych logowania, aby dowiedzieć się, jak wdrażać klucze dostępu.
- Zapoznaj się ze wskazówkami na temat wygody użytkowników kluczy dostępu. Ten dokument przedstawia przepływy, które są zalecane w Twoim przypadku użycia.
- Zapoznaj się z dokumentem Credential Manager, postępując zgodnie z tym przewodnikiem.
- Zaplanuj implementację Menedżera danych logowania i kluczy dostępu w swojej aplikacji. Zaplanuj dodanie obsługi linków do zasobów cyfrowych.
Zapoznaj się z naszą dokumentacją dla deweloperów, aby dowiedzieć się więcej o tworzeniu, rejestrowaniu uwierzytelniać za pomocą kluczy dostępu.
Resetowanie bezpiecznego konta
Nieupoważniona osoba mająca dostęp do odblokowanego urządzenia (np. gdy telefon próbuje uzyskać dostęp do poufnych aplikacji, szczególnie bankowych lub finansowo. Jeśli w aplikacji jest wdrażana weryfikacja biometryczna, atakujący spróbuje zresetować urządzenie konto, do którego chcesz uzyskać dostęp. Procedura resetowania konta musi być kluczowa, aby nie polegać wyłącznie na tym, o informacjach, które są łatwo dostępne na urządzeniu, takich jak e-maile lub SMS-y z hasłem jednorazowym linków resetowania.
Oto sprawdzone metody, które możesz zastosować podczas resetowania aplikacji. przepływ:
- Rozpoznawanie twarzy oprócz hasła jednorazowego
- Pytania zabezpieczające
- Czynnik wiedzy (np. nazwisko panieńskie matki, miasto urodzenia lub ulubione) utwór)
- Weryfikacja za pomocą dokumentu tożsamości
Interfejs API SMS retriever
SMS retriever API
pozwala na weryfikację użytkowników za pomocą SMS-ów
automatycznie. Dzięki temu użytkownik nie będzie musiał
ręcznie wpisać kody weryfikacyjne. Dodatkowo ten interfejs API nie pyta użytkownika
uzyskać dodatkowe, potencjalnie niebezpieczne uprawnienia aplikacji, takie jak RECEIVE_SMS
lub
READ_SMS
Jednak SMS nie może być jedynym sposobem weryfikacji użytkownika
chronią przed nieautoryzowanym dostępem
do urządzenia lokalnego.
Jak pomaga to zapobiegać oszustwom
Niektórzy użytkownicy używają kodów SMS jako jedynego czynnika uwierzytelniania, który pozwala że jest to łatwy punkt wyjścia do oszustwa.
Interfejs API SMS retriever umożliwia aplikacji bezpośrednie pobieranie kodu SMS bez interakcji użytkowników i może zapewnić poziom ochrony przed oszustwami.
Implementacja
Implementacja interfejsu SMS retriever API składa się z 2 etapów: Android i serwer.
Android: (przewodnik)
- Uzyskaj numer telefonu użytkownika.
- Uruchom klienta aplikacji do pobierania SMS-ów.
- Wyślij numer telefonu na swój serwer.
- odbieranie wiadomości weryfikacyjnych,
- Wyślij hasło jednorazowe na swój serwer.
Serwer: (przewodnik)
- Utwórz wiadomość weryfikacyjną.
- Wyślij wiadomość weryfikacyjną SMS-em.
- Sprawdź, czy hasło jednorazowe zostało zwrócone.
Sprawdzone metody
Po zintegrowaniu aplikacji i weryfikacji numeru telefonu użytkownika interfejsu API SMS retriever, próbuje uzyskać hasło jednorazowe, Jeśli nam się uda, zasygnalizuje automatyczne odebranie SMS-a na urządzeniu. Jeśli nie użytkownik musi ręcznie wpisać hasło jednorazowe. Może to być znak ostrzegawczy. że użytkownik może być oszustem.
SMS nie powinien być używany jako jedyny mechanizm weryfikacji użytkownika, ponieważ pozostawia w nim miejsce. ataki lokalne, np. kradzież odblokowanego urządzenia; lub karta SIM ataki klonowania. Zalecamy, aby w miarę możliwości korzystać z systemu biometrycznego. Wł. urządzeń, w których czujniki biometryczne nie są dostępne, należy uwierzytelnianie użytkownika polegać na co najmniej jednym czynniku, którego nie można łatwo uzyskać z bieżącego urządzenia.
Więcej informacji
Więcej informacji o sprawdzonych metodach znajdziesz w tych materiałach:
- Dokumentacja dotycząca bezpieczeństwa Androida w naszej dokumentacji
- Dokumentacja interfejsu Play Integrity API
- Zmiany w Androidzie 15
- Sprawdzone metody zapobiegania oszustwom przez Monzo Bank