Needle wspomaga analizę bezpieczeństwa aplikacji na platformie iOS. Składa się z modułów, które korzystają z wielu dostępnych na tej platformie narzędzi, znacznie upraszczając pracę z nimi. Został stworzony przez MWRLabs, czyli twórców popularnego w androidowym środowisku Drozera. Podobnie jak Drozer, działa w architekturze klient — serwer. Uruchamiany na komputerze klient przesyła polecenia do serwera działającego na urządzeniu mobilnym.


Michał Dardas. Ex-programista, rozwijający się jako tester bezpieczeństwa aplikacji mobilnych oraz webowych w firmie LogicalTrust. Doświadczenie nabyte podczas rozwijania projektów związanych z branżą bankową i tłumaczeniową daje mu lepszy wgląd w testowane aplikacje oraz wiedzę, jak chronić je z punktu widzenia programisty. Razem z serwisem Zaufana Trzecia Strona prowadzi otwarte warsztaty z bezpieczeństwa aplikacji mobilnych.


Zapoznamy się z procesem instalacji i konfiguracji oraz obsługą na przykładzie kilku modułów. Opis został przygotowany używając urządzenia z iOS 10. Część modułów może zachowywać się niepoprawnie lub nie działać na poszczególnych wersjach systemu.

Instalacja na urządzeniu

Wymagane są:

  • urządzenie z iOS (8, 9 lub 10) po jailbreaku,
  • Cydia,
  • APT 0.7 Strict,
  • Needle Agent — serwer.

Opcjonalne zależności:

  • Frida — narzędzie do dynamicznego modyfikowania uruchomionych aplikacji, wykorzystywane przez niektóre moduły Needle.
  • Clutch2 — narzędzie do deszyfrowania plików binarnych aplikacji, wykorzystywane przez jeden z modułów.

Proces instalacji

Do repozytoriów Cydii dodajemy:

http://mobiletools.mwrinfosecurity.com/cydia/
https://build.frida.re

Następnie możemy już zainstalować pakiety:

  • NeedleAgent,
  • Frida,
  • Clutch2.

Instalacja klienta na komputerze

Needle oficjalnie ma wsparcie dla dwóch systemów — macOS i Kali Linux. Bez problemów można uruchomić narzędzie również na Ubuntu.

Instalacja zależności

Kali Linux

macOS

Instalacja Needle

Pobieramy projekt z GitHuba:

lub

Uruchomienie i konfiguracja

Uruchomienie serwera

Włączamy aplikację NeedleAgent na urządzeniu i aktywujemy przełącznik Listen.

Uruchomienie klienta

Klienta uruchamiamy na komputerze za pomocą polecenia:

Konfiguracja

Po uruchomieniu konieczne jest skonfigurowanie komunikacji między komputerem a urządzeniem. W opisywanym przypadku odbywała się ona za pośrednictwem Wi-Fi, jednak istnieje też możliwość komunikacji przez USB.

IP urządzenia (lub localhost dla połączenia USB):

Port urządzenia, na którym uruchomiona jest usługa SSH:

Hasło do konta root na urządzeniu. (Domyśle to alpine):

Dodatkowo można jeszcze wyłączyć wyświetlanie w narzędziu aplikacji systemowych, co ułatwia wyszukiwanie zainstalowanych aplikacji.

Konfiguracja z pliku

Konfigurowanie Needle jest konieczne przy każdym uruchomieniu. Możemy to sobie ułatwić tworząc plik, który zawiera wybrane polecenia.

Dodatkowy parametr -r, przy uruchamianiu Needle sprawi, że konfiguracja zostanie wczytana z pliku.

W akcji

Po instalacji i konfiguracji, mając przed sobą ekran główny Needle, możemy zająć się analizą zainstalowanych aplikacji.

Polecenia

  • show modules — wyświetla moduły,
  • use <moduł> — wybiera moduł,
  • show info — wyświetla informacje o wybranym module,
  • show options — wyświetla ustawienia wybranego modułu,
  • set <zmienna> <wartość> — przypisuje wartość do zmiennej,
  • back — cofa wybór modułu,
  • unset app — cofa wybór aplikacji,
  • exec_command <polecenie> — wykonuje polecenie na urządzeniu,
  • run — uruchamia wybrany moduł.

Wybór aplikacji

Aplikację wybieramy podczas pierwszego uruchomienia modułu lub po wywołaniu unset app.

Moduły

Metadata

Moduł binary/info/metadata wyświetla szczegółowe informacje na temat aplikacji. Do dalszej analizy przydatne są:

  • data directory — katalog z danymi aplikacji,
  • binary directory — katalog z plikami binarnymi aplikacji,
  • URL Handlers — schematy URL używane przez aplikację,
  • Apple Transport Security Settings – ustawienia rozluźniające restrykcje mechanizmu, który wymusza używanie HTTPS,
  • Entitlements — uprawnienia aplikacji.

Moduł wybieramy za pomocą polecenia:

a następnie uruchamiamy:

Z otrzymanej odpowiedzi wynika, że:

  • dane aplikacji znajdują się w /private/var/mobile/Containers/Data/Application/09ACB084-A5A6-45F2-B421-5AF4BE3A1E0B,
  • pliki binarne znajdują się w /private/var/containers/Bundle/Application/9CE2809B-AD4F-4FBF-AB18-198062E39903/DamnVulnerableIOSApp.app,
  • Aplikacja posiada swój schemat URL dvia,
  • Aplikacja zezwala na komunikację protokołem HTTP.

Keyboard autocomplete

iOS posiada mechanizm autokorekty, który przechowuje słowa wpisywane na klawiaturze. Aplikacje powinny wyłączać autokorektę dla pól z wrażliwymi danymi. Moduł storage/caching/keyboard_autocomplete pozwala to zweryfikować poprzez wyświetlenie wszystkich zapamiętanych wyrazów.

Property list

Format plist służy do przechowywania informacji w formie klucz — wartość. Zapisywane w nim są m.in. informacje o aplikacji oraz ustawienia użytkowników. Moduł storage/data/files_plist wyszukuje wszystkie pliki plist powiązane z aplikacją i umożliwia wyświetlanie ich zawartości.

Strings

Znajomość stringów znajdujących się w pliku binarnym aplikacji znacznie ułatwia analizę. Wśród nich można znaleźć np. informacje o ukrytych opcjach aplikacji albo wykorzystywanych zewnętrznych usługach sieciowych, czasem łącznie z zaszytymi w kodzie hasłami. Aplikacje pobrane z AppStore są zaszyfrowane, dlatego przed przeszukaniem pliku konieczne jest odszyfrowanie go. Moduł binary/reversing/strings automatyzuje ten proces z wykorzystaniem narzędzia Clutch2.

Uruchomienie tego modułu może okazać się problematyczne w porównaniu do pozostałych.

Przy pierwszej próbie uruchomienia dowiadujemy się, że moduł ten nie jest wspierany na obecnej wersji systemu (iOS 10). Można jednak spróbować wykonać drobną modyfikację w kodzie Needle.

Otwieramy plik needle/core/utils/contants.py

i komentujemy w nim linię jak poniżej. Sprawi to, że Needle nie będzie blokował modułu w iOS 10.

Restartujemy Needle (mając przygotowany plik konfiguracyjny warto pamiętać o -r). Przy kolejnej próbie odpalenia modułu dowiadujemy się, że nie mamy uprawnień do uruchomienia Clutch2.

Rozwiązujemy to nadając prawa do wykonywania.

Ostatecznie moduł udaje się uruchomić.

Class Dump

Nagłówki klas aplikacji są kolejnym cennym źródłem informacji. Pozwalają w prosty sposób zapoznać się ze strukturą aplikacji. Moduł binary/reversing/class_dump_frida_enum-all-methods wykorzystuje narzędzie Frida do odczytania nazw klas i metod w wybranej aplikacji.

Przed pierwszym uruchomieniem modułu należy uruchomić serwer Fridy.

Pozostałe moduły

Needle jest pełen modułów, inne warte sprawdzenia to:

  • binary/info/checksums — oblicza sumy kontrolne dla pliku binarnego.
  • binary/info/compilation_checks — sprawdza czy plik binarny posiada odpowiednie zabezpieczenia (szyfrowanie, stack canaries, ARC, PIE).
  • binary/info/universal_links — wyświetla Universal Links zdefiniowane dla aplikacji.
  • dynamic/ipc/open_uri — uruchamia podany URI.
  • static/code_checks — analizuje kod źródłowy (jeśli jest dostępny) pod kątem podatności.
  • storage/backup/icloud_content_frida — wyświetla listę plików, które trafiają do kopii zapasowych.
  • storage/data/container — wyświetla i pobiera zawartość katalogów Bundle i Data.
  • storage/data/files_binarycookies — wyświetla Binary Cookies używane przez aplikację.
  • storage/data/files_cachedb — wyświetla pliki tymczasowe Cache.db.
  • storage/data/files_sql — wyświetla pliki zawierające bazy danych.
  • storage/data/keychain_dump_frida — wyciąga zawartość Keychain, która należy do aplikacji.

Artykuł został pierwotnie opublikowany na logicaltrust.github.io.

 

Zapraszamy do dyskusji
Nie ma więcej wpisów

Send this to a friend