Google jest zaangażowany w promowanie równości rasowej dla społeczności czarnych. Zobacz jak.
Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

Najlepsze praktyki w zakresie bezpieczeństwa aplikacji

Ta sekcja zawiera zalecenia dotyczące zapewnienia bezpieczeństwa aplikacji na urządzeniach z systemem Android.

Przegląd kodu źródłowego

Przegląd kodu źródłowego może wykryć szeroki zakres problemów związanych z bezpieczeństwem, w tym te zidentyfikowane w tym dokumencie. Android zdecydowanie zachęca do ręcznego i automatycznego sprawdzania kodu źródłowego.

  • Postępuj zgodnie ze szczegółowymi wskazówkami dotyczącymi bezpieczeństwa podczas przeprowadzania recenzji, aby zapewnić ochronę. Stosuj odpowiednie wewnętrzne lub zewnętrzne standardy, aby zapewnić spójne i kompletne recenzje.
  • Uruchom linter, taki jak linter Android Studio , dla całego kodu aplikacji za pomocą zestawu Android SDK i napraw wszelkie zidentyfikowane problemy.
  • Analizuj kod natywny za pomocą zautomatyzowanego narzędzia, które może wykrywać problemy z zarządzaniem pamięcią, takie jak przepełnienia bufora i błędy typu off-by-one.
  • System kompilacji systemu Android obsługuje wiele środków odkażających LLVM, takich jak AddressSanitizer i UndefinedBehaviorSanitizer , których można używać do analizy problemów związanych z pamięcią w czasie wykonywania. W połączeniu z fuzzingiem, obsługiwanym w systemie Android przez libFuzzer , środki dezynfekujące mogą wykryć nietypowe przypadki, które wymagają dalszego zbadania.
  • Doświadczony rzeczoznawca bezpieczeństwa powinien przejrzeć kod o podwyższonym ryzyku, taki jak krypto, przetwarzanie płatności i przetwarzanie danych osobowych.

Testowanie automatyczne

Testowanie automatyczne może pomóc w wykryciu szerokiego zakresu problemów z bezpieczeństwem i powinno być wykonywane regularnie.

  • Regularnie uruchamiaj najnowszą wersję CTS przez cały proces tworzenia oprogramowania, aby wcześnie wykrywać problemy i skrócić czas naprawy. Android używa CTS w ramach ciągłej integracji w naszym zautomatyzowanym procesie kompilacji, który jest tworzony wiele razy dziennie.
  • Zautomatyzuj testowanie bezpieczeństwa interfejsów, w tym testowanie ze zniekształconymi danymi wejściowymi (testowanie fuzz). System kompilacji Androida obsługuje libFuzzer do pisania testów fuzz.

Skanowanie luk w zabezpieczeniach

Skanowanie luk w zabezpieczeniach może zapewnić, że wstępnie zainstalowane aplikacje są wolne od znanych luk w zabezpieczeniach. Zaawansowane wykrywanie może skrócić czas i zmniejszyć koszty związane z usuwaniem tych luk i zapobieganiem zagrożeniom dla użytkowników i urządzeń.

  • Przeskanuj wszystkie wstępnie zainstalowane aplikacje za pomocą uznanego w branży narzędzia do wykrywania luk w zabezpieczeniach aplikacji i usuń wykryte luki.

Potencjalnie szkodliwe aplikacje

Ważne jest, aby upewnić się, że wstępnie zainstalowane aplikacje na urządzeniu nie są potencjalnie szkodliwymi aplikacjami (PHA). Ponosisz odpowiedzialność za działanie wszystkich aplikacji znajdujących się na Twoich urządzeniach. Przed uruchomieniem urządzenia przeskanuj wszystkie wstępnie załadowane aplikacje pod kątem luk w zabezpieczeniach.

Aby uzyskać więcej informacji na temat PHA i tego, jak Google walczy z nimi w sklepie Play, zobacz dokumentację dla programistów Google Play Protect .

Instalacja aplikacji i uprawnienia

Nadmierne uprawnienia dla wstępnie zainstalowanych aplikacji mogą stanowić zagrożenie dla bezpieczeństwa. Ogranicz wstępnie zainstalowane aplikacje do minimalnych niezbędnych uprawnień i upewnij się, że nie mają one dostępu do niepotrzebnych uprawnień lub uprawnień. Uprawnienia aplikacji są opisane w pliku AndroidManifest.xml .

  • Nie nadawaj niepotrzebnych uprawnień ani przywilejów wstępnie zainstalowanym aplikacjom. Dokładnie przejrzyj aplikacje z uprawnieniami systemowymi, ponieważ mogą one mieć bardzo poufne uprawnienia.
  • Upewnij się, że wszystkie wymagane uprawnienia są odpowiednie i niezbędne do działania tej konkretnej aplikacji.
  • Upewnij się, że istnieją ujawnienia dla wszystkich wstępnie zainstalowanych aplikacji, które korzystają z uprawnienia INSTALL_PACKAGES .
  • Upewnij się, że programista jest zobowiązany w umowie do nie instalowania żadnych aplikacji z UID 0.
  • Oceń uprawnienia zadeklarowane w manifeście wszystkich aplikacji do zainstalowania za pośrednictwem sieci programisty.
  • Upewnij się, że programista jest umownie zobowiązany do przeskanowania wszystkich adresów URL pobierania aplikacji do automatycznego aktualizowania i instalowania za pomocą interfejsu API Google Safe Browsing przed udostępnieniem aplikacji na urządzenie.

Podpisywanie aplikacji

Podpisy aplikacji odgrywają ważną rolę w zabezpieczaniu urządzeń i służą do sprawdzania uprawnień i aktualizacji oprogramowania. Wybierając klucz do podpisywania aplikacji, należy wziąć pod uwagę, czy aplikacja będzie dostępna tylko na jednym urządzeniu, czy wspólna na wielu urządzeniach.

  • Upewnij się, że aplikacje nie są podpisane kluczem, który jest publicznie znany, takim jak klucz programisty AOSP.
  • Upewnij się, że klucze używane do podpisywania aplikacji są zarządzane w sposób zgodny ze standardami branżowymi dotyczącymi obsługi poufnych kluczy, w tym sprzętowym modułem zabezpieczeń (HSM), który zapewnia ograniczony dostęp z możliwością kontroli.
  • Upewnij się, że aplikacje nie są podpisane za pomocą klucza platformy. W ten sposób aplikacja ma dostęp do uprawnień do podpisów platformy, które są bardzo potężne i przeznaczone do użytku tylko przez składniki systemu operacyjnego. Aplikacje systemowe powinny używać uprzywilejowanych uprawnień.
  • Upewnij się, że aplikacje o tej samej nazwie pakietu nie są podpisane różnymi kluczami. Dzieje się tak często podczas tworzenia aplikacji na różne urządzenia, zwłaszcza przy użyciu klucza platformy. Jeśli aplikacja jest niezależna od urządzenia, użyj tego samego klucza na różnych urządzeniach. Jeśli aplikacja jest przeznaczona dla konkretnego urządzenia, utwórz unikalne nazwy pakietów dla każdego urządzenia i klucza.

Izolowanie aplikacji i procesów

Model piaskownicy dla systemu Android zapewnia dodatkowe bezpieczeństwo aplikacji i procesów, jeśli jest używany prawidłowo.

Izolowanie procesów rootowania

Procesy root są najczęstszym celem ataków eskalacji uprawnień; zmniejszenie liczby procesów roota zmniejsza ryzyko eskalacji uprawnień.

  • Upewnij się, że urządzenia uruchamiają minimalny wymagany kod jako root. Tam, gdzie to możliwe, używaj zwykłego procesu systemu Android zamiast procesu rootowania. Jeśli proces musi działać jako root na urządzeniu, udokumentuj proces w żądaniu funkcji AOSP, aby można go było publicznie przejrzeć.
  • Tam, gdzie to możliwe, kod root powinien być odizolowany od niezaufanych danych i dostępny za pośrednictwem komunikacji międzyprocesowej (IPC). Na przykład zredukuj funkcjonalność roota do małej usługi dostępnej za pośrednictwem programu Binder i udostępnij tę usługę z uprawnieniem do podpisu aplikacji z małymi uprawnieniami lub bez uprawnień do obsługi ruchu sieciowego.
  • Procesy główne nie mogą nasłuchiwać w gnieździe sieciowym.
  • Procesy główne nie mogą zawierać środowiska wykonawczego ogólnego przeznaczenia, takiego jak maszyna wirtualna Java).

Izolowanie aplikacji systemowych

Ogólnie rzecz biorąc, wstępnie zainstalowane aplikacje nie powinny działać ze wspólnym unikalnym identyfikatorem systemu (UID). Jeśli konieczne jest, aby aplikacja używała wspólnego UID systemu lub innej uprzywilejowanej usługi (np. Telefonu), aplikacja nie powinna eksportować żadnych usług, odbiorników telewizyjnych ani dostawców treści, do których mają dostęp aplikacje innych firm zainstalowane przez użytkowników .

  • Upewnij się, że urządzenia uruchamiają minimalny niezbędny kod jako system. Tam, gdzie to możliwe, używaj procesu Androida z własnym identyfikatorem UID zamiast ponownego używania identyfikatora UID systemu.
  • Tam, gdzie to możliwe, kod systemowy powinien być odizolowany od niezaufanych danych i wystawiać IPC tylko na inne zaufane procesy.
  • Procesy systemowe nie mogą nasłuchiwać w gnieździe sieciowym. To jest wymóg CTS.

Procesy izolacyjne

Android Application Sandbox zapewnia aplikacjom oczekiwanie na izolację od innych procesów w systemie, w tym procesów root i debuggerów. O ile debugowanie nie jest specjalnie włączone przez aplikację i użytkownika, żadna aplikacja nie powinna naruszać tego oczekiwania.

  • Upewnij się, że procesy główne nie uzyskują dostępu do danych w poszczególnych folderach danych aplikacji, chyba że używasz udokumentowanej metody debugowania systemu Android.
  • Upewnij się, że procesy root nie mają dostępu do pamięci aplikacji, chyba że używasz udokumentowanej metody debugowania systemu Android.
  • Upewnij się, że urządzenia nie zawierają żadnej aplikacji, która uzyskuje dostęp do danych lub pamięci innych aplikacji lub procesów.