Konferencja Mega Sekurak Hacking Party w Krakowie – 26-27 października!
Mikołajki z sekurakiem! od 2 do 8 grudnia!
Konferencja Mega Sekurak Hacking Party w Krakowie – 26-27 października!
Mikołajki z sekurakiem! od 2 do 8 grudnia!
OWASP to organizacja, który kojarzy nam się z projektami związanymi z bezpieczeństwem aplikacji webowych. Mniej znanym jest 4 letni projekt poświęcony zagrożeniom platform mobilnych – OWASP Mobile Security Project. Celem artykułu jest zapoznanie Was z tymi zagrożeniami oraz z różnicami w stosunku do klasyfikacji z roku 2012. Jednocześnie jest to wstęp do artykułów poświęconych testom penetracyjnym aplikacji napisanych na platformę Android.
Na szczyt listy TOP 10 wskoczyło z miejsca drugiego ryzyko związane ze słabymi mechanizmami zabezpieczeń po stronie serwerowej. Punkt M1 silnie łączy zagrożenia mobilne ze typowymi problemami bezpieczeństwa będącymi w zainteresowaniu OWASP. Aplikacje mobilne nie funkcjonują w próżni i w większości przypadkowych oprogramowanie to komunikuje się za pomocą webserwisów z aplikacją serwerową. Pomimo tego, że problemy te są dobrze rozpoznane w kontekście zagrożeń www, to w świecie mobilnym są wciąż aktualne i bardzo powszechne.
Zagrożenia M1:
Na miejscu drugim znajduje się problem ściśle już związany z aplikacjami mobilnym – niezabezpieczone przechowywanie danych na urządzeniu. Aplikacje przechowują dane lokalnie w różnych postaciach: bazy danych SQLite, pliki XML, pliki tekstowe, Plist, logi itp.
Zagrożenia M2:
M3: Insufficient Transport Layer Protection
Niewystarczające zabezpieczenie danych w warstwie transportowej to numer 3 na podium listy zagrożeń. Spora część aplikacji mobilnych jest podatna na podsłuch przesyłanych do serwera danych z powodu braku lub słabej implementacji mechanizmów szyfrujących. Często spotykanymi błędami w aplikacjach jest akceptowanie wszystkich certyfikatów:
Android:
TrustManager[] trustAllCerts = new <własny menadżer akceptujący wszystkie certyfikaty>
SSLContext sc = SSLContext.getInstance(“TLS”);
sc.init(null, trustAllCerts, new java.security.SecureRandom());
Na iPhone należy zwrócić uwagę, czy wywołania setAllowsAnyHTTPSCertificate nie akceptują niepoprawnych certyfikatów. Na Android należy zwrócić uwagę na metodę checkServerTrusted z klasy fabrykującej SSLSocketFactory oraz na stosowane przez deweloperów metody AllowAllHostnameVerifier z pakietu org.apache.http.conn.ssl lub SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER.
Inne zagrożenia to przesyłanie danych takimi kanałami jak SMS, MMS, itp. Programiści rzadko stosują też praktykę Certificat Pinning, czyli weryfikacji otrzymanego certyfikatu z listą kluczy zapisaną w aplikacji.
Wcześniej nazwane Side Channel Data Leakage i plasujące się na dalekim 8. miejscu ryzyko zostało przemianowane na – „niezamierzony wyciek danych”. Zagrożenie to wiąże się z wewnętrznymi procesami przetwarzania danych przez system lub frameworki w kontekście cachowania zapytań i odpowiedzi HTTP, schowka, logów, przyciskanych klawiszy, ciasteczek, danych HTML5, wrażliwe dane dostępne dla API stron trzecich.
Szczególnie istotne jest sprawdzenie logu systemowego za pomocą takich narzędzi jak logcat (Android).
Logi mogą również posłużyć do wyszukowanie informacji o cachowanych ciasteczkach:
adb logcat | grep “cookie”
Mimo, że w przypadku Androida od wersji 4.1 zablokowano dla tworzonych aplikacji możliwość stosowania uprawnienia READ_LOGS, jednak testerzy bezpieczeństwa mogą skorzystać ze „zrootowanych” urządzeń lub ich emulatorów.
Często spotyka się też aplikacje, które zostały opublikowane do ściągnięcia z ustawioną flaga DEBUG.
M5: Poor Authorization and Authentication
Niezmiennie na pozycji nr 5 pozostał problem związany z słabymi mechanizmami uwierzytelniania i autoryzacji. Złudne przekonanie, że można zastosować mechanizmy uwierzytelniania po stronie aplikacji mobilnej, zostało już dawno obalone w przypadku aplikacji webowych i przeglądarek stron www. Dane aplikacyjne powinne być dostępne wyłącznie po przeprowadzeniu poprawnego uwierzytelniania użytkownika po stronie serwerowej. Jeśli wymagane jest, aby dane były przechowywane na urządzeniu, to zaleca się, aby były zaszyfrowane za pomocą klucza opartego na poświadczeniach do logowania użytkownika i dostępne po prawidłowym zalogowaniu. Należy zwrócić uwagę, aby proces uwierzytelniania nie opierał się na danych łatwych do podmiany np. id urządzenia (IMEI,IMSI,UUID) lub lokalizacja.
Podkreśla się, że często spotykane funkcjonalność zapamiętywania poświadczeń była opcjonalna i nie powinna umożliwiać przechowywania hasła lokalnie, a była zaimplementowana po stronie serwerowej.
Przykład uruchomienia na platformie Android dowolnej klasy Aktywności w celu zmiany zaprojektowanego przez programistę przepływ logiczny aplikacji, co może pozwolić pominąć etap weryfikacji kodu autoryzującego:
#am start –a android.intent.action.MAIN –n .StartAfterAuthenticationActivity
Ryzyko związane z przełamaniem mechanizmów kryptograficznych zostało przesunięte z odległego 9. miejsca do środka stawki na pozycję 6. W tym punkcie wyróżnia się cztery grupy problemów:
Wstrzyknięcia po stronie klienckiej to klasyk i w przypadku świata mobilnego nie ma tu specjalnej różnicy w stosunku do układu przegladarka- serwer www. Przykłady spotykanych wstrzyknięć to:
M8: Security Decision via Untrusted Inputs
Aplikacje, które wykorzystują IPC powinny wykorzystywać wszelkie mechanizmy bezpieczeństwa jakie zostały do tego zaprojektowane. W przypadku platformy Android został opracowany model uprawnień, za pomocą których programista może w dość granularny sposób kontrolować, co i w jaki sposób aplikacja udostępnia innych procesom. W większości przypadków programiści nie stosują tych ograniczeń umożliwiając zewnętrznym procesom na odczyt i modyfikację przetwarzanych danych w aplikacji. O tym jak ograniczać i jak stosować te mechanizmy można przeczytać w prezentacji Jefffa Sixa jaka została umieszczona przez OWASP w odnośnikach do tego punktu. O książce tego autora pisaliśmy wcześniej na Sekuraku.
Podobne zalecenia stosowane są dla iOS jednak tu ich jakość jest dość uboga – autorzy zwracają uwagę na jedną niebezpieczną metodę handleOpenURL i przestrzegają przed korzystaniem z iOS Pasteboard do IPC, ponieważ inne zainstalowane aplikacją mogą odczytać z niego dane.
Sekcja ta koncentruje się na znanym z świata webaplikacji zagadnieniu zarządzania sesjami użytkowników. Problemy zatem pozostają te same, tj.:
M10: Lack of Binary Protection
Ostatni punkt na liście największych zagrożeń w aplikacjach mobilnych – to nowo dodana pozycja i ryzyko ściśle związane z aplikacjami mobilnymi.
OWASP zwraca uwagę na szereg zagadnień jakie powinny być elementami dobrych praktyk w procesie wytwarzania oprogramowania:
Tym zagadnieniem zajmuje się szerzej inny projekt OWASP – Technical Risks of Reverse Engineering and Unauthorized Code Modification
Znajdziemy tu również metody i narzędzia do badania podatności w aplikacjach pisanych na dwie najpopularniejsze platformy mobilne:
iOS
Android
–j23