iOS ma szczelniejszą piaskownicę niż Android, ale to nie zwalnia aplikacji z odpowiedzialności. Sprawdzamy, co aplikacja sama zapisuje, komu ufa i ile z jej zabezpieczeń zostaje na urządzeniu z jailbreakiem.
Plik binarny, Info.plist, uprawnienia (entitlements), zasoby i biblioteki. Szukamy sekretów, adresów środowisk testowych i ukrytych funkcji zaszytych w aplikacji.
Czy sekrety trafiają do Keychain z właściwą klasą dostępności, czy dane leżą w NSUserDefaults, plikach i bazach bez ochrony, co zostaje w zrzutach ekranu przy przełączaniu aplikacji.
Wyjątki od App Transport Security, akceptowanie fałszywych certyfikatów, przypinanie certyfikatów i to, co aplikacja wysyła ponad to, czego potrzebuje ekran.
Czy link otwierający aplikację wykona akcję bez potwierdzenia albo przekaże złośliwe parametry. Własne schematy URL może zarejestrować także inna aplikacja.
Treści ładowane wewnątrz aplikacji i mostki do kodu natywnego. Jeśli da się wstrzyknąć obcą stronę, dostaje ona możliwości aplikacji.
Na urządzeniu z jailbreakiem modyfikujemy działanie aplikacji w locie (Frida) i obchodzimy kontrole po stronie klienta. Potem API, które musi bronić się samo.
iOS izoluje aplikacje mocniej niż Android: mniej kanałów komunikacji między nimi, podpisywanie kodu, piaskownica, sklep z przeglądem. To realnie utrudnia część ataków i łatwo uznać, że reszta też jest załatwiona. Nie jest, bo platforma nie wie, co aplikacja uważa za tajne.
Najczęściej znajdujemy dane zapisane poza Keychain: tokeny w NSUserDefaults, odpowiedzi serwera w pamięci podręcznej, dokumenty w katalogu aplikacji bez klasy ochrony danych. Na urządzeniu z jailbreakiem albo z kopii zapasowej to wszystko da się odczytać.
Druga kategoria to zaufanie do klienta. Aplikacja sprawdza uprawnienia przed pokazaniem ekranu, liczy cenę albo pilnuje limitu, a serwer przyjmuje wynik bez weryfikacji. Na iOS wymaga to od napastnika trochę więcej przygotowania, ale narzędzia takie jak Frida działają tu tak samo dobrze jak na Androidzie.
Dlatego test aplikacji iOS zawsze łączymy z testem API, z którym się komunikuje. Szerzej o całym procesie piszemy we wpisie co sprawdzamy w teście aplikacji mobilnej.
Definiujemy, co testujemy, w jakim trybie i w jakich godzinach. Doprecyzowujemy, co jest poza zakresem.
Pełna poufność na każdym etapie. Znalezione podatności zostają między nami.
Testy manualne wsparte narzędziami. Krytyczne znaleziska zgłaszamy od razu, nie czekamy z nimi do raportu.
Raport z oceną ryzyka, krokami reprodukcji i rekomendacjami. Po wdrożeniu poprawek sprawdzamy je ponownie.
Napisz, czy aplikacja jest już w App Store i czy mamy sprawdzić także backend - odezwiemy się w 24 h z wyceną.
Zapytaj o wycenę