Zabezpieczenia na urządzeniach z systemem Android

Adobe AIR 2.5 i nowsze wersje

W systemie Android środowisko AIR działa zgodnie z macierzystym modelem zabezpieczeń, podobnie jak na innych urządzeniach komputerowych. Jednocześnie środowisko AIR stosuje własne reguły dotyczące zabezpieczeń, które mają na celu ułatwienie programistom pisania bezpiecznych aplikacji korzystających z Internetu.

Aplikacje AIR dla systemu Android korzystają z formatu pakietów tego systemu, dlatego ich instalacja przebiega pod kontrolą modelu zabezpieczeń systemu Android. Instalator aplikacji AIR nie jest używany.

Model zabezpieczeń systemu Android ma trzy najważniejsze aspekty:

  • Uprawnienia

  • Podpisy aplikacji

  • Identyfikatory użytkowników aplikacji

Uprawnienia w systemie Android

Wiele funkcji systemu Android jest chronionych przez mechanizm uprawnień systemu operacyjnego. Aby używać chronionej funkcji, w deskryptorze aplikacji AIR należy zadeklarować, że dana aplikacja wymaga odpowiedniego uprawnienia. Gdy użytkownik próbuje zainstalować aplikację, przed kontynuowaniem instalowania system operacyjny Android wyświetla wszystkie uprawnienia, jakich żąda aplikacja.

Większość aplikacji AIR wymaga określenia uprawnień systemu Android w deskryptorach aplikacji. Domyślnie nie są uwzględniane żadne uprawnienia. Następujące uprawnienia są wymagane w celu używania chronionych funkcji systemu Android dostępnych w środowisku wykonawczym AIR:

ACCESS_COARSE_LOCATION
Umożliwia aplikacji uzyskiwanie za pośrednictwem klasy Geolocation dostępu do danych o lokalizacji określanych przy użyciu sieci Wi-Fi oraz sieci komórkowych.

ACCESS_FINE_LOCATION
Umożliwia aplikacji uzyskiwanie dostępu do danych systemu GPS za pośrednictwem klasy Geolocation.

ACCESS_NETWORK_STATE i ACCESS_WIFI_STATE
Umożliwiają aplikacji uzyskiwanie dostępu do informacji o sieci za pośrednictwem klasy NetworkInfo.

CAMERA
Umożliwia aplikacji uzyskiwanie dostępu do kamery.

INTERNET
Umożliwia aplikacji realizowania żądań dotyczących sieci. Pozwala także na zdalne debugowanie.

READ_PHONE_STATE
Powoduje, że środowisko wykonawcze AIR może wyciszyć dźwięk w związku z połączeniem przychodzącym.

RECORD_AUDIO
Umożliwia aplikacji uzyskiwanie dostępu do mikrofonu.

WAKE_LOCK i DISABLE_KEYGUARD
Umożliwiają aplikacji blokowanie przejścia urządzenia w tryb uśpienia przy użyciu ustawień klasy SystemIdleMode.

WRITE_EXTERNAL_STORAGE
Umożliwia aplikacji zapisywanie danych na zewnętrznej karcie pamięci podłączonej do urządzenia.

Podpisy aplikacji

Wszystkie pakiety aplikacji tworzone dla platformy Android muszą być podpisywane. Aplikacje AIR dla systemu Android są pakowane w macierzystym formacie systemu Android (APK), dlatego są podpisywane zgodnie z konwencjami obowiązującymi na platformie Android, a nie w środowisku AIR. Mechanizmy podpisywania kodu stosowane na platformach Android i AIR są podobne, ale różnią się w pewnych istotnych kwestiach:

  • W systemie Android podpis stanowi potwierdzenie, że klucz prywatny jest własnością programisty, ale podpis nie służy do sprawdzania tożsamości programisty.

  • W przypadku aplikacji zgłaszanych do sklepu Android Market certyfikat musi być ważny przez co najmniej 25 dni.

  • System Android nie obsługuje migracji podpisu pakietu do innego certyfikatu. Jeśli aktualizacja zostanie podpisana przy użyciu innego certyfikatu, użytkownicy będą musieli odinstalować oryginalną aplikację, aby następnie zainstalować zaktualizowaną wersję.

  • Dla dwóch aplikacji podpisanych przy użyciu tego samego certyfikatu można określić współdzielony identyfikator, który pozwoli im korzystać wzajemnie ze swoich buforów oraz plików danych. (Takie współdzielenie nie jest dostępne w środowisku AIR).

Identyfikatory użytkowników aplikacji

W systemie Android jest używane jądro systemu Linux. Do każdej instalowanej aplikacji jest przypisywany identyfikator użytkownika — podobnie jak w systemie Linux — definiujący uprawnienia aplikacji związane z operacjami takimi jak dostęp do plików. Dostęp do plików w aplikacji, magazynu aplikacji i katalogów tymczasowych jest chroniony przy użyciu uprawnień systemu plików. Pliki zapisywane w zewnętrznej pamięci masowej (na przykład na karcie SD) mogą być odczytywane, modyfikowane oraz usuwane przez inne aplikacje i przez użytkownika, gdy taka pamięć jest zamontowana na komputerze jako urządzenie pamięci masowej.

Pliki cookie z żądaniami internetowymi nie są współdzielone między aplikacjami AIR.

Prywatność obrazu w tle

Gdy użytkownik przełącza aplikację na działanie w tle, w niektórych wersjach systemu Android jest przechwytywana migawka aplikacji, która następnie jest wyświetlana jako miniaturka na liście ostatnich aplikacji. Wykonany zrzut ekranu jest przechowywany w pamięci urządzenia i może się dostać w ręce niepowołanej osoby, która przejmie fizyczną kontrolę nad urządzeniem.

Jeśli aplikacja wyświetla poufne informacje, należy się zabezpieczyć przed możliwością ich zapisania na zrzucie ekranu. Zdarzenie deactivate wywołane przez obiekt NativeApplication sygnalizuje, że aplikacja przełączy się zaraz do pracy w tle. Użyj tego zdarzenia, aby usunąć lub ukryć wszelkie poufne informacje.

Zaszyfrowane dane w systemie Android

Aplikacje AIR dla systemu Android mogą zapisywać zaszyfrowane dane przy użyciu opcji szyfrowania dostępnych we wbudowanej bazie danych SQL. W celu zapewnienia optymalnego bezpieczeństwa klucz szyfrowania powinien być oparty na haśle wprowadzanym przez użytkownika przy każdym uruchamianiu aplikacji. Ukrycie klucza szyfrowania lub hasła przechowywanego lokalnie przed osobą atakującą z dostępem do plików aplikacji jest trudne, a często niemożliwe. Jeśli osoba atakująca będzie w stanie pobrać klucz, to zaszyfrowanie danych nie będzie pomocne. Działać będą jedynie dostępne w systemie Android zabezpieczenia systemu plików oparte na identyfikatorze użytkownika.

Klasa EncryptedLocalStore może służyć do zapisywania danych, ale dane te nie są szyfrowane na urządzeniach z systemem Android. Zamiast tego model zabezpieczeń w systemie Android jest oparty na identyfikatorze użytkownika aplikacji, który jest stosowany do ochrony danych przed innymi aplikacjami. Aplikacje używające wspólnego identyfikatora użytkownika i podpisane przy użyciu tego samego certyfikatu podpisywania kodu korzystają z tego samego zaszyfrowanego magazynu lokalnego.

Ważne: Na telefonie obsługującym użytkownika root każda aplikacja z uprawnieniami użytkownika root może uzyskać dostęp do plików wszystkich innych aplikacji. Oznacza to, że na urządzeniach obsługujących użytkownika root dane umieszczone w zaszyfrowanym magazynie lokalnym nie są bezpieczne.