Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Drozer – narzędzie do analizy aplikacji mobilnych [Android]
Artykuł poświęcony jest narzędziu Drozer, które służy do analizy bezpieczeństwa aplikacji mobilnych na platformie Android. Drozer zbudowany jest w układzie klient-serwer i składa się z dwóch elementów:
- serwer instalowany jako aplikacja mobilna (APK) na urządzeniu/emulatorze Android – agent.apk
- klient napisany w języku Python instalowany na lokalnym komputerze – drozer-2.3.4-py2.7.egg
W artykule zostało przedstawione podstawowe użycie Drozera do rozpoznania aplikacji mobilnej i określenia wektorów ataku.
Instalacja
1. pobranie Drozer (Python .egg) (może istnieć potrzeba zmiany numerów wersji, a aktualne pliki znajdziemy tu https://www.mwrinfosecurity.com/products/drozer/community-edition/ )
$ wget https://www.mwrinfosecurity.com/system/assets/933/original/drozer-2.3.4.tar.gz $ tar zxvf drozer-2.3.4.tar.gz
2. pobranie agenta Drozer, który będzie instalowany na urzadzeniu z systemem Android lub na emulatorze
$ wget https://www.mwrinfosecurity.com/system/assets/934/original/drozer-agent-2.3.4.apk
3. pobranie przykładowej podatnej aplikacji – Sieve
$ wget https://www.mwrinfosecurity.com/system/assets/380/original/sieve.apk
inna dziurawa aplikacja z cyklu Damn Vulnerable Android App znajduje się tutaj:
- Security Compass https://github.com/securitycompass/AndroidLabs/tree/Base (wymagana ona jednak samodzielnej kompilacji do pakietu APK)
- GoatDroid od OWASP https://github.com/jackMannino/OWASP-GoatDroid-Project (zawiera dwie aplikacje: FourGoats – aplikacja społecznościowa wykorzystująca lokalizacje i Herd Financial – bankowość mobilna)
4. pobranie i instalacja zależności Pythona potrzebnych do instalacji Drozera
$ wget https://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg#md5=fe1f997bc722265116870bc7919059ea $ sudo sh setuptools-0.6c11-py2.7.egg $ sudo easy_install --allow-hosts pypi.python.org protobuf $ sudo easy_install twisted==10.2.0
instalacja Drozer
sudo easy_install ./drozer-2.3.4-py2.7.egg
Drozer posiada dwie zależności w pliku requires.txt (w paczce .egg w katalogu EGG-INFO)
protobuf==2.4.1 pyopenssl==0.13
Sprawdźmy jaką wersję pyopenssl mamy zainstalowaną w systemie:
$ python >>> import pkg_resources >>> pkg_resources.get_distribution("pyopenssl").version '0.15.1'
Jeżeli nasza wersja jest nowsza niż w pliku requires.txt, należy w nim zmienić numer wersji danego modułu w celu zakończenia procesu instalacji bez błędów. Alternatywnie można wykonać downgrade modułu pyopenssl.
Uruchomienie Drozer
W pierwszym kroku instalujemy aplikację agenta Drozer na emulatorze android.
$ adb -e install agent.apk 6036 KB/s (633111 bytes in 0.102s) pkg: /data/local/tmp/agent.apk Success
Uruchamiamy serwer Drozer, który nasłuchuje na polecenia od aplikacji klienckiej Drozer na porcie 31415 TCP na urządzeniu lub emulatorze Android.
Za pomocą adb – Android Debugging Bridge włączamy przekierowanie ruchu TCP z portu 31415 lokalnego komputera na port TCP 31415 emulatora. W ten sposób zestawiamy komunikację pomiędzy klientem Drozer (napisanym w Pythonie), a serwerem Drozer (agentem zainstalowanym na urządzeniu/emulatorze Androida).
$ adb forward tcp:31415 tcp:31415
Teraz możemy połączyć się z agentem za pomocą polecenia:
drozer console connect Selecting 3d4c92294b9aba3d (unknown Android SDK built for x86_64 5.0.2) .. ..:. ..o.. .r.. ..a.. . ....... . ..nd ro..idsnemesisand..pr .otectorandroidsneme. .,sisandprotectorandroids+. ..nemesisandprotectorandroidsn:. .emesisandprotectorandroidsnemes.. ..isandp,..,rotectorandro,..,idsnem. .isisandp..rotectorandroid..snemisis. ,andprotectorandroidsnemisisandprotec. .torandroidsnemesisandprotectorandroid. .snemisisandprotectorandroidsnemesisan: .dprotectorandroidsnemesisandprotector. drozer Console (v2.3.4) dz>
Praca z Drozer
Agent Drozer pracuje jako aplikacja mobilna z minimalnymi uprawnieniami (android.permission.INTERNET) niezbędnymi do odbioru poleceń z konsoli. Takie podejście służy do testowania odporności innych aplikacji mobilnych na ataki ze strony agenta Drozer, który ma ograniczone możliwości i symuluje złośliwą aplikację. W trakcie przeprowadzania pentestu aplikacji mobilnej może przekompilować agenta Drozer dodając do niego dodatkowe uprawnienia.
$ sudo drozer agent build --permission android.permission.READ_EXTERNAL_STORAGE<br>Version Mismatch: Consider updating your build(s)<br>Agent Version: 2.3.3<br>drozer Version: 2.3.4<br>Done: /tmp/tmp2I7liE/agent.apk $ sudo mv /tmp/tmp2I7liE/agent.apk . $ adb -e uninstall com.mwr.dz Success $ adb -e install agent.apk 211 KB/s (653728 bytes in 3.022s) pkg: /data/local/tmp/agent.apk Success
Uprawnienia agenta możemy sprawdzić:
dz> permissions Has ApplicationContext: YES Available Permissions: - android.permission.INTERNET - android.permission.READ_EXTERNAL_STORAGE
Za pomocą połączenia z agentem możemy również przejść bezpośrednio do wiersza poleceń systemu Android i wykonywać polecenia z ograniczonymi uprawnieniami użytkownika przydzielonego dla aplikacji agent Drozer. Jest to oczekiwane z uwagi na taki przyjęty model architektury platformy Android, gdzie każde aplikacji przydzielany jest osobny sandbox z odseparowanym od innych aplikacji użytkownikiem-właścicielem plików aplikacji oraz oddzielnym procesem wirtualnej maszyny.
dz> shell u0_a54@generic_x86_64:/data/data/com.mwr.dz $ id uid=10054(u0_a54) gid=10054(u0_a54) groups=3003(inet),9997(everybody),50054(all_a54)
Za pomocą polecenia list wyświetlamy listę poleceń, które służą do testowania bezpieczeństwa aplikacji mobilnych. Polecenia te pogrupowane są w zbioru z kilku grup:
- app – podstawowe polecenia do pentestu aplikacji (rozpoznanie i złośliwe użycie)
- scanner – narzędzia do skanowania urządzenia lub zasobów aplikacji w poszukiwaniu podatności
- tools – dodatkowe narzędzia (m.in. md5sum, upload plików itp.)
- exploit – użycie publicznie znanych exploitów na znane podatności w platformie Android
- shell – użycie powłoki systemu operacyjnego
- information – uzyskanie dodatkowych informacji o testowanym urządzeniu/systemie
- auxilary – interakcja z innymi narzędziami współpracującymi z Drozer
Najbardziej interesujące do testowania aplikacji będą polecenia z pierwszej grupy app:
app.activity.forintent Find activities that can handle the given intent app.activity.info Gets information about exported activities. app.activity.start Start an Activity app.broadcast.info Get information about broadcast receivers app.broadcast.send Send broadcast using an intent app.broadcast.sniff Register a broadcast receiver that can sniff particular intents app.package.attacksurface Get attack surface of package app.package.backup Lists packages that use the backup API (returns true on FLAG_ALLOW_BACKUP) app.package.debuggable Find debuggable packages app.package.info Get information about installed packages app.package.launchintent Get launch intent of package app.package.list List Packages app.package.manifest Get AndroidManifest.xml of package app.package.native Find Native libraries embedded in the application. app.package.shareduid Look for packages with shared UIDs app.provider.columns List columns in content provider app.provider.delete Delete from a content provider app.provider.download Download a file from a content provider that supports files app.provider.finduri Find referenced content URIs in a package app.provider.info Get information about exported content providers app.provider.insert Insert into a Content Provider app.provider.query Query a content provider app.provider.read Read from a content provider that supports files app.provider.update Update a record in a content provider app.service.info Get information about exported services app.service.send Send a Message to a service, and display the reply app.service.start Start Service app.service.stop Stop Service
Podstawowa analiza aplikacji za pomocą Drozer
Pierwsze testy warto przeprowadzić na przygotowanej przez twórców Drozera aplikacji Sieve – prosty menadżer haseł. Poniżej kilka poleceń przeprowadzanych w fazie rekonesansu aplikacji.
1. Wylistowanie zainstalowanych aplikacji i pobrania pełnych ścieżek nazw, filtracja za pomocą przełącznika -f
dz> run app.package.list -f Sieve com.mwr.example.sieve (Sieve)
2. Podstawowe informacje o zainstalowanej aplikacji m.in. uprawnienia wymagane i definiowane przez aplikację, lokalizację pliku aplikacji APK i danych aplikacji
dz> run app.package.info -a com.mwr.example.sieve Package: com.mwr.example.sieve Application Label: Sieve Process Name: com.mwr.example.sieve Version: 1.0 Data Directory: /data/data/com.mwr.example.sieve APK Path: /data/app/com.mwr.example.sieve-1/base.apk UID: 10053 GID: [1028, 1015, 3003] Shared Libraries: null Shared User ID: null Uses Permissions: - android.permission.READ_EXTERNAL_STORAGE - android.permission.WRITE_EXTERNAL_STORAGE - android.permission.INTERNET Defines Permissions: - com.mwr.example.sieve.READ_KEYS - com.mwr.example.sieve.WRITE_KEYS
3.Określenie podstawowej powierzchni ataku (wylistowanie jawnie wyeksportowanych komponentów aplikacji i sprawdzenie czy aplikacja jest w trybie debug)
dz> run app.package.attacksurface com.mwr.example.sieve Attack Surface: 3 activities exported 0 broadcast receivers exported 2 content providers exported 2 services exported is debuggable
4. Uzyskanie bardziej szczegółowych informacji o komponentach np. dostawcach treści (content providers)
dz> run app.provider.info -a com.mwr.example.sieve Package: com.mwr.example.sieve Authority: com.mwr.example.sieve.DBContentProvider Read Permission: null Write Permission: null Content Provider: com.mwr.example.sieve.DBContentProvider Multiprocess Allowed: True Grant Uri Permissions: False Path Permissions: Path: /Keys Type: PATTERN_LITERAL Read Permission: com.mwr.example.sieve.READ_KEYS Write Permission: com.mwr.example.sieve.WRITE_KEYS Authority: com.mwr.example.sieve.FileBackupProvider Read Permission: null Write Permission: null Content Provider: com.mwr.example.sieve.FileBackupProvider Multiprocess Allowed: True Grant Uri Permissions: False
5. Wyszukanie na urządzeniu aplikacji, które posiadają krytyczne z punktu widzenia bezpieczeństwa uprawnienia
dz> run app.package.list -p android.permission.INSTALL_PACKAGES com.android.packageinstaller (Package installer) com.android.shell (Shell) com.android.managedprovisioning (Device Provisioner)
6. Warto w czasie wstępnej analizy aplikacji użyć 2 przełączników:
- u – wylistowanie niewyeksportowanych komponentów
- i – wyświetlenie informacje o filtrach intencji
Dzięki tym przełącznikom jesteśmy w stanie szybko wyfiltrować komponenty niejawnie wyeksportowane, czyli takie do których możemy uzyskać dostęp poprzez spreparowanie i wysłanie odpowiedniej intencji (intent). O atakach typu Intent spoofing, Intent Sniffing w kolejnych artykułach na temat atakowania komponentów aplikacji mobilnych.
dz> run app.service.info -a com.example.app -u -i (...) Hidden Services: com.example.app.MessageService Intent Filter: Actions: - com.example.app.SEND_MSG Permission: null
Co dalej?
1.Drozer jest narzędziem rozszerzalnym, który pozwala na pisanie własnych modułów w języku Python i za pomocą mechanizmu refleksji Javy mamy możliwość odwołań do tworzonych i uruchamianych w wirtualnej maszynie obiektów.
2. Drozer zawiera zbiór podstawowych modułów, jednakże możemy pobrać i zainstalować dodatkowe moduły z repozytorium, które nie zostały dołączone do pakietu instalacyjnego Drozer
listowanie dodatkowych modułów wraz z opisem:
dz> module search -d (...) mwrlabs.urls Finds URLs with the HTTP or HTTPS schemes by searching the strings inside APK files. You can, for instance, use this for finding API servers, C&C servers within malicious APKs and checking for presence of advertising networks. (...)
instalacja dodatkowego modułu urls
dz> module install urls Processing mwrlabs.urls... Done. Successfully installed 1 modules, 0 already installed.
3. Drozer, oprócz funkcji do testowania bezpieczeństwa aplikacji mobilnych, posiada również możliwości typowo ofensywne, które służą do przygotowywania exploitów na urządzenia Android. Aplikacja Drozer zainstalowana na komputerze służy jako serwer C&C do którego łączą się agenci na podatnych i zainfekowanych urządzeniach. Drozer wykorzystywany w ten sposób może pomóc w określeniu poziomu bezpieczeństwa stosowanych w firmie/instytucji służbowych smartfonów.
Podsumowanie
W artykule przedstawiono podstawowe wykorzystanie narzędzia do testowania aplikacji mobilnych na platformie Drozer. Narzędzie to świetnie symuluje złośliwą aplikację, która wykorzystując podatności w zainstalowanych na urządzeniu aplikacjach pozwala pentesterowi na wskazanie słabych punktów. W kolejnych artykułach poświęconych bezpieczeństwu aplikacji mobilnych zostaną przedstawione bardziej zaawansowane przykłady użycia tego narzędzia do atakowania poszczególnych komponentów aplikacji Android.
Bartek Jerzman
Łączymy się z tel. po Wi Fi, GSM czy po kablu?
Z fizycznym urządzeniem po kablu USB
Czy testowaliście Drozera na Nethunterze (wczoraj zainstalowałem na OnePlus One)?
W temacie infekowania andka – atak na włączone wi fi smartfona, instalacja szkodliwego oprogramowania /rat?/, które zaczyna działać po fizycznym restarcie smrtfona /np: pad baterii/ – tel. nie był rotowany.
Gdzie to „coś” się instaluje / pliki, foldery. Jak to znaleźć? Takiego artykułu / opisu nawet u konkurencji / z3z, niebezpiecznik / jeszcze nie było.
@rip rat, typowy Antek Kowalski akurat słowo konkurencja jest rażąco nie na miejscu :p u look deeper