Achterdeurtjes in Android-applicaties

Update 28 – De Hack –September 2016

Dit keer in rubriek De Hack geeft security consultant Ben Brücker uit hoe je een Android-applicatie hack door een backdoor in te bouwen.

Privé en zakelijk zijn mobiele telefoons en tablets niet meer weg te denken. We spenderen steeds meer tijd met deze apparaten, en hackers zijn zich hiervan bewust. In dit artikel bespreek ik hoe een aanvaller te werk gaat om een backdoor in een Android-applicatie in te bouwen.

Van de twee meestgebruikte mobiele platforms, iOS en Android, heeft Android het grootste deel van de markt in handen. In combinatie met de volgende factoren maakt dit Android-applicaties een gewild doel voor hackers:
– Veel Android-toestellen worden niet (of te laat) geüpdatet met beveiligingspatches, omdat de telefoonfabrikant deze niet (of pas na maanden) aanbiedt. Hierdoor zijn er nog veel oude en kwetsbare toestellen in omloop;
- Gebruikers kunnen eenvoudig applicaties installeren die niet uit de officiële Google Play app-store afkomstig zijn;
– Android-applicaties zijn makkelijk te reverse-engineeren, waardoor een aanvaller modificaties kan uitvoeren. Voor een geoefende aanvaller, die in bezit is van een geschikt stukje backdoor-code, zijn maar tien minuten nodig om deze in een mobiele applicatie in te bouwen.

Er zijn meerdere mogelijkheden om een kwaadaardige applicatie te verspreiden. Social engineering, het hacken van de interne app-store van een bedrijf of het illegaal aanbieden van gewilde software in een inofficiële app-tore.
Dit laatste scenario hebben we eerder gezien met bijvoorbeeld Angry Birds, waarbij gebruikers in-game betalingen omzeilden door illegaal te downloaden, maar meer recentelijk met Pokemon Go. Omdat Pokemon Go tijdens de release niet over de gehele wereld beschikbaar was kon nog niet iedereen het populaire spelletje installeren uit de officiële Play Store. Hackers speelden hier snel op in en verspreiden een versie die was geïnfecteerd met de DroidJack-backdoor in diverse online app-stores.

Wat is een backdoor?
Een backdoor is een stuk programmacode dat beveiligingen omzeilt en toegang geeft tot data of functionaliteit, zonder dat een gebruiker zich ervan bewust is. In het voorbeeld dat we in dit artikel beschrijven zal onze backdoor alle bestanden, zoals foto's, die op de SD-kaart staan opgeslagen naar ons, de aanvaller doorsturen.

Wat heeft een aanvaller nodig?
Het maken en inbouwen van een backdoor kan eenvoudig met een aantal gratis programma's. Er zijn alternatieven, maar we zullen van de volgende componenten gebruikmaken:

De backdoor
Er bestaan commerciële backdoors, zoals het eerder genoemde DroidJack, maar  je kan met behulp van Metasploit ook zelf een meterpreter-payload voor Android genereren. Deze kan ook eenvoudig zelf worden geprogrammeerd. Onze backdoor zal gebruikmaken van twee componenten: een Activity en een Service. De Activity is een `scherm' in de applicatie en gebruikelijk datgene wat de gebruiker ziet wanneer deze een applicatie gebruikt. Het enige wat deze Activity zal doen is het opstarten van een Service die op de achtergrond ons programma uitvoert.

Met behulp van Android Studio creëren we een eenvoudig programma dat een Service start die alle bestanden op de SD-kaart enumereert en naar onze eigen server stuurt. Uiteindelijk wordt er een bestand in het .apk-formaat, het Android Package-formaat, gecreëerd dat we op een apparaat kunnen installeren.

De aanpak
De eerste stap is het verkrijgen van een applicatie waarin we de backdoor willen inbouwen. Hiervoor downloaden we simpelweg een applicatie naar eigen keuze uit de Google Play Store. Bij voorkeur een applicatie met leesrechten voor de SD-kaart, zodat de applicatie geen extra permissies nodig heeft om onze backdoor uit te voeren. Om de applicatie van het Android-toestel naar ons eigen systeem te verplaatsen voeren we de volgende commando's uit om de juiste applicatie te identificeren en vervolgens te downloaden:

Nu zijn we in het bezit van twee .apk-bestanden: de legitieme applicatie en de  backdoor. Vervolgens gaan we deze combineren. Hier kan ons het programma apktool helpen. We decompileren beide .apk-bestanden met het volgende commando:

Na het decompileren hebben we een map met daarin het AndroidManifest.xml-bestand en de volgende mappen:

Voor ons is de map smali van belang. Het smali-formaat is een vorm van assembly die wordt gebruikt door de smali/baksmali assembler van Google. Dit formaat bevat nog leesbare functie-namen en kan worden gebruikt voor het modificeren van applicaties. We kopiëren het programma van onze backdoor naar de andere applicatie door alle bestanden in de smali-map van de backdoor te kopiëren naar de smali-map van de andere applicatie. Nu bevat de originele applicatie alle code die nodig is voor onze backdoor. Het enige dat nog mist is het aanroepen van deze code.

Wanneer een Activity wordt gestart wordt standaard de onCreate-functie aangeroepen. Daarnaast wordt de Main Activity altijd aangeroepen bij het starten van een Android-applicatie. Om deze te vinden bekijken we het AndroidManifest.xml-bestand in beide .apk-bestanden en zien het volgende:

Hier is, niet verrassend, MainActivity de Main Activity. In onze backdoor roept de Main Activity enkel onze service aan om bestanden te stelen. We vinden deze aanroep in MainActivity.smali:

We kopiëren deze invoke-static-regel en plakken deze in de onCreate-functie van de Main Activity van de originele applicatie. Wanneer de applicatie wordt gestart, wordt er naast het gebruikelijke programma ook onze backdoor uitgevoerd.

De laatste stap is het weer inpakken en ondertekenen van de nieuwe applicatie. Hiervoor voeren we de volgende commando's uit:

Nu zijn we in het bezit van een .apk-bestand dat we naar eigen inzicht aan gebruikers kunnen verspreiden. In het kort hebben we de volgende stappen uitgevoerd:
1. Verkrijgen van twee .apk’s: die van een backdoor en die van een onschuldige applicatie.
2. Decompileren van beide applicaties.
3. De code van de backdoor kopiëren naar de onschuldige applicatie.
4. Een aanroep naar de backdoor plaatsen in de onCreate-functie van de onschuldige applicatie.
5. Het .apk-bestand weer inpakken en ondertekenen.

Beschermingsmaatregelen
Het is als gebruiker goed om ervan bewust te zijn dat deze aanval relatief eenvoudig is om uit te voeren. Helaas is het aan een applicatie niet eenvoudig om te zien of deze ongewenste functionaliteit vertoont. De enige manier om hier achter te komen is door de applicatie zelf te reverse-engineeren en om het verkeer te onderscheppen dat de applicatie verzendt en ontvangt.

Gelukkig zijn er manieren om de kans te verkleinen dat dit soort applicaties worden geïnstalleerd:
– Installeer applicaties enkel uit vertrouwde app-stores, zoals Google Play, of de app-store van uw  bedrijf. De zogenaamde `Google Bouncer' stopt het grootste gedeelte van de malafide applicaties die naar Google Play worden geüpload.
– Installeer geen applicaties die permissies vragen die de applicatie niet nodig heeft. Zo hoeft een zaklamp-applicatie geen telefoongesprekken te kunnen voeren. Wees ervan bewust dat Android een aantal permissies zoals `Internet' niet als kritieke permissies inschat, en dus ook niet aan de gebruiker meedeelt.
– Wanneer men zo een applicatie toch moet installeren, beperk dan de beschikbare permissies via app-permissions in het settings-menu. Hiervoor heeft men wel versie 6 of hoger van Android nodig.

 

@Secura 2018
Webdesign Studio HB / webdevelopment Medusa