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.
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.
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ę,
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 informacja 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.
Na podstawie art. 13 ust. 1 i 2 ogólnego Rozporządzenia Parlamentu Europejskiego i Rady (UE) 2016/679 z dnia 27 kwietnia 2016 r. w sprawie ochrony osób fizycznych w związku z przetwarzaniem danych osobowych i w sprawie swobodnego przepływu takich danych oraz uchylenia dyrektywy 95/46/WE (dalej jako „RODO”) informuję, że:
Administrator danych: Pani/Pana danych osobowych jest Logicaltrust sp. z o.o., sp. k., z siedzibą przy ul. Stanisławowska 47, 54-611 Wrocław, NIP: 8952177980, REGON: 369271084, KRS: 0000713515.
Kontakt z administratorem danych: z administratorem danych można kontaktować się drogą mailową pod adresem e-mail: ado@logicaltrust.net lub w formie tradycyjnej, pisząc na adres siedziby administratora danych.
Cel i podstawa prawna przetwarzania danych osobowych: Pani/Pana dane osobowe będą przetwarzane przez administratora danych w celu udzielenia odpowiedzi na zadane pytanie; realizacji zamówionego kontaktu; w celu podjęcia działań przed zawarciem umowy, jak i realizacji umowy; nawiązania relacji biznesowych; przedstawienia oferty na żądanie potencjalnego klienta (na podstawie art. 6 ust. 1 lit. a), b) i f) RODO).
Okres przetwarzania danych: Pani/Pana dane osobowe będą przetwarzane przez czas niezbędny do wyjaśnienia Pani/Pana sprawy i udzielenia wyczerpującej odpowiedzi; do chwili nawiązania współpracy i zawarcia umowy (wówczas dane przetwarzane są jak dane klienta). W przypadku nienawiązania współpracy dane zostaną niezwłocznie usunięte, chyba, że zaistnieje potrzeba dalszego przechowywania przez czas niezbędny do obrony i ochrony przed roszczeniami. W przypadku gdy przetwarzanie danych osobowych odbywa się na podstawie dobrowolnie wyrażonej zgody zgodnie z art. 6 ust. 1 lit a) RODO, przysługuje Pani/Panu prawo do cofnięcia tej zgody w dowolnym momencie. Cofnięcie zgody nie ma wpływu na zgodność przetwarzania, którego dokonano na podstawie zgody przed jej cofnięciem, z obowiązującym prawem.
Zakres przetwarzanych danych: zakres przetwarzanych danych obejmuje: imię, nazwisko, e-mail, numer telefonu.
Odbiorcy danych osobowych: w określonych sytuacjach Pani/Pana dane osobowe mogą zostać przekazane np. w celu spełnienia obowiązku wynikającego z przepisu prawa lub wykonania prawnie uzasadnionych interesów realizowanych przez administratora danych lub przez stronę trzecią. Kategorie odbiorców jakim administrator danych może przekazać Pani/Pana dane osobowe to podmioty lub organy uprawnione na podstawie przepisów prawa i dostawcy usług przetwarzających powierzone dane osobowe w imieniu administratora na podstawie umów powierzenia przetwarzania danych osobowych (np. firma hostingowa).
Przekazywanie danych: Pani/Pana dane osobowe nie będą przekazywanie poza Europejski Obszar Gospodarczy.
Przysługujące prawa i uprawnienia: posiada Pani/Pan prawo do żądania od administratora dostępu do danych osobowych, ich sprostowania, usunięcia lub ograniczenia przetwarzania, wniesienia sprzeciwu wobec przetwarzania danych. Przysługuje Pani/Panu prawo do złożenia skargi do Prezesa Urzędu Ochrony Danych Osobowych (ul. Stawki 2, 00-193 Warszawa. Elektroniczna skrzynka podawcza ePUAP, gdy uzna Pani/Pan, iż przetwarzanie danych osobowych narusza przepisy dotyczące ochrony danych osobowych.
Informacje dodatkowe: podanie danych jest dobrowolne, jednakże niepodanie danych niezbędnych do prowadzenia korespondencji może utrudnić realizację i utrzymanie kontaktu.
Polityka Cookie
1. Czym są pliki cookies - Ciasteczka (angielskie „cookies”) to niewielkie pliki danych w szczególności pliki tekstowe, zapisywane przez serwer na twoim komputerze. Pliki te pozwalają rozpoznać twoje urządzenie i odpowiednio wyświetlić stronę internetową dostosowując ją do twoich preferencji. „Cookies” zazwyczaj zawierają nazwę strony internetowej z której pochodzą, czas przechowywania ich na urządzeniu oraz unikalny numer.
2. Z jakich rodzajów plików cookies korzystamy - Cookies „sesyjne” – plikami tymczasowe, które pozostają na twoim urządzeniu, aż do wylogowania ze strony internetowej lub wyłączenia przeglądarki internetowej. Cookies „stałe” – pliki pozostają na twoim urządzeniu przez czas określony w parametrach plików „cookies” albo do momentu ich ręcznego usunięcia. Cookies podmiotów zewnętrznych – umożliwiają dostosowanie wyświetlanej strony do twoich preferencji.
3. Do czego używamy plików cookies - Pliki „cookies” używane są w celach statystycznych, marketingowych oraz w celu dostosowania zawartości stron internetowych do preferencji użytkownika. Pliki cookies przechowują informację o geolokalizacji, języku odwiedzającego stronę oraz losowe dane dotyczące identyfikatorów sesji. Gromadzone dane pomagają zrozumieć w jaki sposób użytkownik korzysta ze stron internetowych co umożliwia ulepszanie ich struktury i zawartości. Pozyskane informacje pomagają nam budować statystyki dotyczące ilości nowych i stałych użytkowników oraz umożliwiają nam analizę odwiedzanych podstron.
4. Usuwanie i wyłączanie plików cookies - Możesz w dowolnym momencie zmienić ustawienia przeglądarki, by nie akceptowała plików cookies lub informowała o ich przesyłaniu. Należy jednak pamiętać, iż nieakceptowanie plików cookie może spowodować utrudnienia w korzystaniu ze strony internetowej. Standardowo oprogramowanie służące do przeglądania stron internetowych domyślnie dopuszcza umieszczanie plików „cookies”. Ustawienia przeglądarki mogą zostać zmienione w taki sposób, aby blokować automatyczną obsługę plików „cookies” lub informować o ich każdorazowym przesłaniu na urządzenie użytkownika. Więcej informacji o wyłączeniu automatycznego zapisu plików „cookies” można odnaleźć w ustawieniach przeglądarki (oprogramowania służącego do przeglądania stron internetowych).