Podstawowa kontrola bezpieczeństwa w aplikacjach mobilnych iOS

Marzec 12, 2018 Joanna Gajewska

Umiejętności techniczne, poziom wiedzy i świadomość możliwości, jakie oferuje rynek IT, są obecnie na bardzo wysokim poziomie. Ogromne możliwości w zakresie tworzenia oprogramowania są wykorzystywane do implementacji wspaniałych aplikacji, ale dają również szansę hakerom na wykorzystanie “dziur” w kodzie, dzięki którym mogą ukraść nasze pieniądze lub dane.

Czy kiedykolwiek zastanawiałeś się jak wartościowe są dla Ciebie Twoje dane i jak dużo informacji o sobie ujawniasz w Internecie? Wiele razy mając do wyboru darmową i płatną aplikację wybierasz tę pierwszą opcję. W ten sposób tworzysz okazję do zbierania i wykorzystywania Twoich danych przez nieupoważnione osoby.

Organizacja OWASP (Open Web Application Security Project) oferuje wiele przydatnych projektów i narzędzi, które mogą być użyte podczas implementacji i testowania. Publikuje również listę 10 największych zagrożeń (Top 10 Mobile Risks), która opisuje narażone na ataki obszary bezpieczeństwa aplikacji.

W jaki sposób osoba, która nie ma dostępu do kodu lub nie posiada wiedzy o testach penetracyjnych, może zweryfikować podstawowe punkty dotyczące bezpieczeństwa aplikacji?

Zgodnie z dobrymi zasadami tworzenia oprogramowania, bezpieczeństwo powinno być zapewnione przez programistów podczas implementacji, a następnie zweryfikowane podczas przeglądów przez innych programistów w ramach testów statycznych. Jest też kilka sposobów na sprawdzenie bezpieczeństwa przez testerów w testach dynamicznych. Przyjrzyjmy się aplikacjom mobilnym dedykowanym dla iPhone’ów i iPadów.

Przechowywanie niezabezpieczonych danych

Podczas korzystania z aplikacji urządzenia mobilne zbierają ogromne ilości danych. Bardzo ważne jest aby dowiedzieć się, które dane są zapisywane i czy są one odpowiednio zaszyfrowane.

Pamięć wewnętrzna

Wiele aplikacji musi zapisywać dane i hasła użytkownika w celu ułatwienia korzystania z aplikacji, zbierania informacji o sesji, aktualizowania danych aplikacji, aby były odświeżane na bieżąco, a także aby zapisywać preferencje użytkownika.

W urządzeniach z systemem iOS należy sprawdzić następujące foldery:

  • AppName.app
  • Documents/
  • Library/
  • Library/Caches/
  • Library/Application Support/
  • Library/Preferences/
  • tmp/

Pamięć klawiatury

Wszystkie wprowadzane przez użytkownika dane mogą zostać zapisane w słowniku klawiatury i przechowywane w folderze /private/var/mobile/Library/Keyboard/
Podczas testów należy zweryfikować czy jakiekolwiek wrażliwe dane zostały zapisane w pliku: dynamic-text.dat.

Komunikacja z serwerem

Większość aplikacji mobilnych wymaga dostępu do internetu, więc komunikacja z serwerem powinna być zabezpieczona, aby uniknąć ryzyka kradzieży danych. Wrażliwe dane powinny być wysyłane przez bezpieczne kanały, a zapytania do serwera należałoby wysyłać z wykorzystaniem protokołu SSL lub HTTPS (zamiast HTTP).
Bardzo ważna jest także weryfikacja logów w momencie wprowadzenia przez użytkownika poufnych danych w aplikacji. Dobrze byłoby sprawdzić, czy dane te nie są widoczne w logach i wysyłane do serwera jako niezaszyfrowane teksty.

Uwierzytelnianie

Istnieje kilka obszarów, które powinny być zweryfikowane podczas testów uwierzytelnienia.

Dane użytkownika

Upewnij się, czy użytkownik jest poprawnie uwierzytelniony przez serwer. Wypróbuj różne kombinacje loginu oraz hasła i zweryfikuj czy serwer zwraca odpowiedni błąd. Poprawnie, po kilku nieudanych próbach logowania, konto powinno zostać zablokowane, jednak zależy to od wymagań aplikacji.

Zmiana hasła

W wielu aplikacjach istnieje możliwość zmiany lub resetu hasła. Sprawdź, czy po zmianie hasła na serwerze użytkownik zostaje wylogowany ze wszystkich urządzeń i nie będzie miał dostępu do swoich danych bez wprowadzenia nowego hasła.

Zarządzanie sesją

Następnym punktem będzie upewnienie się, czy sesja została zakończona. Może to być wykonane na dwa sposoby: po wylogowaniu i po wygaśnięciu sesji. Po każdej z tych akcji spróbuj wysłać zapytanie do serwera, używając tokenu lub identyfikatora z poprzedniej sesji i sprawdź, czy odpowiedni błąd zostanie wyświetlony.

Jednorazowe hasła

Jeśli w aplikacji istnieje weryfikacja wieloetapowa i użytkownik musi podać kod otrzymany SMS-em, sprawdź, czy kody są generowane losowo i nie mogą być odgadnięte.

Notyfikacje

Jeśli aplikacja jest skonfigurowana do odbierania notyfikacji, przekonaj się, czy treść wiadomości nie zawiera żadnych poufnych danych, które nie powinny być widoczne dla wszystkie użytkowników. Jeśli aplikacja działa w tle, a użytkownik jest wylogowany, po kliknięciu na powiadomienie, powinien zostać przekierowany na stronę logowania i nie powinien mieć dostępu do danych bez zalogowania się.

Niezabezpieczona autoryzacja

Autoryzacja sprawdza dostępy użytkownika. Testy powinny zweryfikować, czy użytkownik z każdą rolą ma dostęp do odpowiedniej treści. Możesz również spróbować obniżyć poziom autoryzacji i sprawdzić, czy pewne obszary aplikacji przestają być dostępne.

Nieodpowiednie użycie platformy

Tester powinien zweryfikować czy uprawnienia i kontrola dostępu w aplikacjach działa poprawnie i czy aplikacja nie żąda niepotrzebnych uprawnień dostępu.

Podsumowanie

Bezpieczeństwo jest bardzo ważnym obszarem aplikacji mobilnych. Jak widać, można je zweryfikować na podstawowym poziomie bez specjalnej wiedzy. Zacznij testować podstawowe elementy w swojej codziennej pracy i spróbuj znaleźć luki w zabezpieczeniach. Istnieje wiele narzędzi, które mogą zautomatyzować proces weryfikacji. Możesz także spróbować swoich umiejętności jako haker w białym kapeluszu, ale to już kolejny krok na Twojej drodze to testów penetracyjnych.

Najnowsze wpisy