Android bezpieczny w kilku krokach

Xamarin – bezpieczny Android w kilku krokach

Platforma Android należy do platform otwartych. Oznacza to, że udostępnia programistom dużo możliwości i swobody w tworzeniu aplikacji. Dzięki temu powstają ciekawe, rozbudowane programy, które oferują nam nie tylko nowe funkcjonalności, ale również nakładki na system, upraszczające to, czego nie udało się zrobić twórcom. Niestety, ma to swoją cenę i przełożenie na to, jak bardzo system ten jest podatny na ataki, również tworząc w Xamarin.

 

Odpowiedzialność zbiorowa w służbie bezpieczeństwu.

Dlaczego jako programista muszę się martwić o luki i błędy systemu i jeszcze tracić czas na naprawianie tego? Sam kiedyś zadawałem sobie to pytanie. Tłumaczyłem się tym, że taka jest specyfika systemu i to nie w mojej intencji powinno leżeć poprawienie tego. Postawmy się jednak w sytuacji zwykłego użytkownika, o małej wiedzy z dziedziny bezpieczeństwa danych, który instaluje naszą aplikację. Niech ta aplikacja wymaga podania od niego danych karty kredytowej, albo nawet numeru telefonu. Czy faktycznie możemy obarczyć takiego użytkownika koniecznością posiadania zaawansowanej wiedzy technicznej, aby mógł się ustrzec przed istniejącymi zagrożeniami związanymi z podawaniem takich danych? Nie zapominajmy, że to nasz klient i powinno nam zależeć na tym, aby dostawał usługę nie tylko dobrą jakościowo, prostą w użytkowaniu, ale również bezpieczną. To właśnie takie drobne rzeczy budują dobre relacje i więź z klientem na dłużej dlatego powinniśmy zadbać również o to, aby nie musiał dodatkowo martwić się bezpieczeństwem.

 

Tapjacking – skryty złodziej.

Skoro wiemy już, że powinniśmy zadbać o bezpieczeństwo użytkownika również na poziomie naszej aplikacji, zapoznajmy się z pierwszym z możliwych ataków. Tapjacking polega na tym, że na naszą aplikację nałożona jest zewnętrzna, niewidzialna warstwa. Warstwa ta przechwytuje zdarzenia, które wykonujemy i symuluje wpisywanie ich do aplikacji, abyśmy myśleli, że wszystko jest w porządku. Taki schemat działania pozwala mu przechwytywać wszystkie dane wprowadzane w aplikacji. Loginy, hasła, dane kart kredytowych, numery telefonów itp. Może on również wprowadzać fałszywe dane, inne od tych, które faktycznie wpisujemy np.: numer konta bankowego. Jak można się przed tym zabezpieczyć? Rozwiązaniem jest blokowanie wszelkich działań na warstwie naszej aplikacji (aktywnym activity) w trakcie wyświetlania tzw. screen overlay. Screen overlay jest to właśnie ta dodatkowa warstwa nałożona na wierzch naszej aplikacji. Przykładem mogą być powiadomienia z messengera facebook. Aby to zablokować mamy dwie możliwości:

  • Ustawienie flagi android:filterTouchesWhenObscuredNależy pamiętać, że ustawienie tej flagi na całym oknie powodować będzie blokowanie wszelkich zdarzeń na naszej aplikacji jeśli jest ona przykryta jakąś warstwą. Może być to toast, lub wspomniane wyżej powiadomienie z messengera. Nie jest to zbyt przyjazne użytkownikowi, ponieważ nie będzie on wiedział dlaczego tak się dzieje. Ewentualnie możemy rozważyć ustawianie tej flagi tylko dla niektórych kontrolek np.: Entry.
  • Rozwiązaniem bardziej przyjaznym użytkownikowi jest nadpisanie metody onFilterTouchEventForSecurityDzięki temu możemy przechwycić moment w którym na naszym ekranie nałożona jest warstwa, zablokować wykonanie eventu i wyświetlić użytkownikowi stosowny komunikat.

 

Niechciany screenshot.

Mniej groźny, lecz wciąż niebezpieczny jest nieautoryzowany zrzut ekranu z naszej aplikacji. Można w ten sposób przechwycić nasze dane do logowania, wiadomości i wszystko to co robimy na naszym telefonie. Rozwiązaniem tego problemu jest ustawienie flagi FLAG_SECURE na oknie aplikacji. Niesie to za sobą jednak pewną wadę. Bez możliwości robienia zrzutów ekranu testerzy i użytkownicy nie będą mogli przesyłać nam zdjęć z miejsc w których pojawił się problem. O ile w przypadku testerów pracujących na wersji developerskiej nie stanowi to problemu, wystarczy ustawianie tej flagi w przypadku innym niż środowisko DEBUG, o tyle z użytkownikami wersji produkcyjnej jest to już niemożliwe bez posiłkowania się innym telefonem bądź aparatem.

 

Window.SetFlags(WindowManagerFlags.Secure, WindowManagerFlags.Secure);

 

Backup danych aplikacji.

Jedną z flag udostępnianych przez androida jest android:allowBackup. Jak sama nazwa wskazuje służy ona do tworzenia backupu danych oraz ich odczytu, a jej domyślna wartość jest ustawiona na true.  Niebezpieczeństwo takiego ustawienia jest spowodowane tym, że owy backup danych odbywa się za pomocą ADB (Android Debug Bridge). ADB pozwala na dostęp do takich danych na niezrootowanym urządzeniu, wystarczy mieć do niego fizyczny dostęp. Możliwe zatem staje się wyciągnięcie poufnych danych lub wstrzyknięcie swojego kodu w aplikację. Zablokowanie tego ogranicza się do przestawienia flagi na false w pliku AndroidManifest.xmlw sekcji Application.

 

<application android:allowBackup=”false” />

 

Podsumowanie.

W artykule tym opisałem najpopularniejsze zagrożenia na platformie Android, które warto znać i przed którymi w prosty sposób można się zabezpieczyć. Choć opisane tutaj przykłady oparte są na moich doświadczeniach w pracy z platformą Xamarin to wynikają one bezpośrednio z problemów i rozwiązań, które obecne są również na natywnej platformie Android. Stąd, w zaprezentowanych przykładach odnośniki prowadzą do strony developerskiej Androida. Zachęcam zatem do nabywania wiedzy nie tylko poprzez platformę Xamarin, ale również u źródła.

 

Jeżeli interesuje Cię jak jeszcze możesz zadbać o bezpieczeństwo Twojej aplikacji na platformie Xamarin, to koniecznie zapoznaj się z artykułem Xamarin – bezpieczeństwo kodu. Jak chronić się przed niepowołanym dostępem?.