Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book

Drozer – narzędzie do analizy aplikacji mobilnych [Android]

14 stycznia 2016, 22:55 | Teksty | komentarzy 5

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:

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.

Uruchomienie agenta Drozer (serwer nasłuchuje na polcenia na porcie 31415)

Uruchomienie agenta Drozer (serwer nasłuchuje na polcenia na porcie 31415)

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

 

Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

  1. oiup

    Łączymy się z tel. po Wi Fi, GSM czy po kablu?

    Odpowiedz
  2. Maar

    Czy testowaliście Drozera na Nethunterze (wczoraj zainstalowałem na OnePlus One)?

    Odpowiedz
  3. rip rat

    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.

    Odpowiedz
  4. asas

    @rip rat, typowy Antek Kowalski akurat słowo konkurencja jest rażąco nie na miejscu :p u look deeper

    Odpowiedz

Odpowiedz