28
ecurit´ e du syst` eme Android Nicolas Ruff EADS Innovation Works nicolas.ruff(@)eads.net 1 Introduction Le syst` eme Android connait un succ` es croissant aupr` es des d´ eveloppeurs d’applica- tions embarqu´ ees (de type ordiphones, mais ´ egalement tablettes, t´ el´ eviseurs connect´ es, et pourquoi pas demain r´ efrig´ erateurs, etc.). Ce succ` es commercial s’accompagne d’un nombre croissant de publications autour de la s´ ecurit´ e du produit ... ainsi que d’un nombre croissant d’incidents de s´ ecurit´ e. En 2010, on peut citer par exemple la publication de l’application PhoneCreeper ou du bot Geinimi ... ainsi que le challenge SSTIC bien sˆ ur. Cet article se propose de r´ ealiser un tour d’horizon des attaques connues contre le syst` eme Android, ainsi que des faiblesses intrins` eques h´ erit´ ees de la structure du march´ e de la t´ el´ ephonie mobile. Il propose ´ egalement une m´ ethodologie d’audit ecurit´ e des applications Android. Bien que les choix technologiques initiaux puissent difficilement ˆ etre remis en question, il faut toutefois noter que le syst` eme Android est en perp´ etuelle ´ evolution dans un march´ e o` u les cycles de vie sont l’ordre de 6 mois. Le lecteur est donc invit´ e ` a se tenir `a jour des´ evolutions post´ erieures `a la r´ edaction de cet article. Note : sauf mention contraire, tous les tests ont ´ et´ e r´ ealis´ es avec les plateformes suivantes : – Emulateur officiel fourni avec le SDK – Smartphone LG GW620 sous Android 1.5 – Smartphone HTC Desire Z sous Android 2.2 Chaque ´ equipement physique ´ etant personnalis´ e par les constructeurs (par rapport aux sources officielles fournies par Google), votre exp´ erience utilisateur peut diff´ erer de la mienne. 2 Quelques mots d’histoire Le syst` eme Android n’a pas ´ et´ e d´ evelopp´ e par Google mais par Android, Inc. - une soci´ et´ e californienne cr´ ee en 2003 par des intervenants exp´ eriment´ es dans le domaine

S ecurit e du syst eme Android - sstic.org 2010, on peut citer par exemple la publication de l’application PhoneCreeper ou du ... par Google et d enomm ee ˝ Bionic

Embed Size (px)

Citation preview

Securite du systeme Android

Nicolas Ruff

EADS Innovation Worksnicolasruff()eadsnet

1 Introduction

Le systeme Android connait un succes croissant aupres des developpeurs drsquoapplica-tions embarquees (de type ordiphones mais egalement tablettes televiseurs connecteset pourquoi pas demain refrigerateurs etc)

Ce succes commercial srsquoaccompagne drsquoun nombre croissant de publications autourde la securite du produit ainsi que drsquoun nombre croissant drsquoincidents de securiteEn 2010 on peut citer par exemple la publication de lrsquoapplication PhoneCreeper oudu bot Geinimi ainsi que le challenge SSTIC bien sur

Cet article se propose de realiser un tour drsquohorizon des attaques connues contrele systeme Android ainsi que des faiblesses intrinseques heritees de la structuredu marche de la telephonie mobile Il propose egalement une methodologie drsquoauditsecurite des applications Android

Bien que les choix technologiques initiaux puissent difficilement etre remis enquestion il faut toutefois noter que le systeme Android est en perpetuelle evolutiondans un marche ou les cycles de vie sont lrsquoordre de 6 mois Le lecteur est donc invitea se tenir a jour des evolutions posterieures a la redaction de cet article

Note sauf mention contraire tous les tests ont ete realises avec les plateformessuivantes

ndash Emulateur officiel fourni avec le SDKndash Smartphone LG GW620 sous Android 15ndash Smartphone HTC Desire Z sous Android 22Chaque equipement physique etant personnalise par les constructeurs (par

rapport aux sources officielles fournies par Google) votre experience utilisateurpeut differer de la mienne

2 Quelques mots drsquohistoire

Le systeme Android nrsquoa pas ete developpe par Google mais par Android Inc - unesociete californienne creee en 2003 par des intervenants experimentes dans le domaine

N Ruff 123

des telecoms La societe Android Inc a ete rachetee par Google en 2005 mais lasortie officielle du produit Android nrsquoa eu lieu qursquoen 2007 - en meme temps quela creation de lrsquoOpen Handset Alliance 1 chargee de faire vivre ce produit

Au travers de cet historique on peut comprendre que les choix de conceptioninitiaux (et donc structurants) nrsquoont pas ete faits par Google

3 Principes drsquoimplementation

31 Architecture ARM

Le systeme Android est disponible pour plusieurs architectures CPU (comme x86ARM et MIPS) Toutefois lrsquoecrasante majorite des equipements en circulation equipesdu systeme Android (a savoir les telephones portables) disposent drsquoun processeurARM Cette tendance gagne drsquoailleurs les NetBooks (appeles SmartBooks dansce cas) A terme la domination insolente de lrsquoarchitecture x86x64 est donc menacee- Microsoft annonce drsquoailleurs qursquoil y aura une version ARM de Windows 8 (mais ceciest une autre histoire) Dans la suite de cet article seule lrsquoarchitecture ARM seradonc etudiee

Lrsquoarchitecture ARM est un design de la societe ARM Ltd qui ne fabrique paselle-meme ses processeurs mais les revend sous licence De nombreux constructeursproposent donc des processeurs ARM implementant tout ou partie de lrsquoune desspecifications disponibles - actuellement ARMv5 ARMv6 ou ARMv7 pour le cœur- avec differentes options telles que la presence drsquoun FPU drsquoun DSP drsquoun supportnatif du bytecode Java (technologie Jazelle) etc

La nomenclature des processeurs ARM est deroutante de prime abord 2 Ainsile processeur ARM7-TDMI qui a rencontre un grand succes commercial (il equipelrsquoiPod et la Nintendo DS par exemple) est construit sur un cœur ARMv4 (commeson nom ne lrsquoindique pas)

Au final le parc installe est donc tres heterogene et le developpeur drsquoapplications(ou drsquoattaques) ne peut srsquoappuyer que sur le plus petit denominateur commun

En ce qui concerne strictement la securite du processeur ARM notons les pointssuivants

ndash Les caches drsquoinstructions et de donnees sont generalement separes dans lesimplementations ARM courantes Ceci rend plus complique lrsquoecriture de codeauto-modifiant (de type shellcode encode par un XOR)

1 httpwwwopenhandsetalliancecom

2 httpenwikipediaorgwikiARM_architecture

124 Securite du systeme Android

ndash Lrsquoencodage des instructions est de taille fixe (16 ou 32 bits selon le mode duprocesseur THUMB ou ARM) Il est possible de jouer avec chaque bit alrsquointerieur drsquoune instruction (par exemple pour la rendre conditionnelle) ce quifacilite lrsquoecriture de shellcodes sans octets nuls

ndash La pile peut etre ascendante ou descendante Dans la pratique toutes lesimplementations ARM dont jrsquoai connaissance ont une pile qui fonctionne commesur architecture x86 (donc descendante)

ndash Le passage de parametres srsquoeffectue par registres ndash Enfin certaines implementations du processeur ARM supportent le bit XN

(eXecute Never) apparu avec ARMv6 Ce bit est equivalent au bit NXXD surarchitecture x86

Tous ces points ne sont pas specifiques au systeme Android et sont deja largementdocumentes par ailleurs La societe iSec avait deja publie un article sur lrsquoecriture deshellcodes ARM en 2001 3

32 Lrsquoheritage GNULinux

Android est un systeme drsquoexploitation Open Source (licence Apache v2) basesur le systeme GNULinux avec lequel il partage drsquoailleurs lrsquohebergement des sources 4

- meme si la perennite de ce modele pourrait etre remise en cause compte-tenu desdivergences croissantes entre les developpements realises par Google et la branchestable du noyau 5

Les differences avec une distribution Linux traditionnelle sont toutefois assezsignificatives

1 La librairie C nrsquoest pas la GNULibC traditionnelle mais une version developpeepar Google et denommee Bionic

On peut supposer que les deboires de Debian avec la GNULibC (et parti-culierement le support ARM 6) ne sont pas totalement etrangers a ce choixLa licence GNU pose egalement un probleme potentiel crsquoest pourquoi Google srsquoestplutot inspire du code issu des projets BSD (se reporter au repertoire bioniclibcdans les sources drsquoAndroid pour plus de details)

2 Les applications Java tierce partie doivent necessairement etre compilees enbytecode Dalvik

3 httpwwwisecplpapersinto_my_arms_dslspdf

4 httpandroidgitkernelorg

5 httpwwwkroahcomloglinuxandroid-kernel-problemshtml

6 httplinuxslashdotorgarticleplsid=0905062050216

N Ruff 125

Ce bytecode srsquoexecute dans une JVM specifique a Android denommee Dalvik enreference a un village islandais dont est issue la famille du chef de projet Il srsquoagitdrsquoune machine virtuelle a registres et non a pile comme la JVM de Sun Le bytecodeDalvik est par ailleurs tres similaire au bytecode Java mais pas completementidentique non plus

Le choix drsquoune JVM comme cible de developpement srsquoexplique par plusieurs raisonsparfaitement acceptables facilite de developpement de nouvelles applicationsabstraction de la plateforme materielle (les variantes et les revisions du processeurARM etant nombreuses) possibilite de verifier des proprietes de securite sur lebytecode etc

Toutefois il faut noter que depuis le rachat de la technologie Java par Oracle labataille juridique fait rage entre les deux editeurs 7

Le developpement de code natif est egalement possible au travers du NDK Ilnrsquoest toutefois pas possible de distribuer sur la MarketPlace des applications100 natives le code natif doit utiliser les API JNI pour srsquointerfacer avec uneapplication Java hote

3 Toutes les applications doivent etre signees numeriquement

Le mecanisme de signature Android nrsquoest pas base sur une PKI mondiale qui seraitdifficile a maintenir et commercialement suicidaire Un certificat autosigne generepar le developpeur est acceptable comme nous le verrons plus loin en abordant lemodele de securite du systeme

4 Un equipement physique nrsquoest pas entierement Open Source

Le milieu du materiel et des couches basses (ex pile de protocoles GSM) est tresconcurrentiel et reste traditionnellement assez hostile au concept de lrsquoOpenSource Un smartphone vendu par un constructeur tiers va embarquer ducode proprietaire (essentiellement des pilotes mais aussi parfois des interfacesgraphiques)

Meme les telephones de developpement commercialises par Google (serie des Nexus)perdent une partie de leurs fonctionnalites lorsqursquoils sont recompiles uniquementa partir des sources publiques

La situation nrsquoest pas tres differente de celle drsquoun PC moderne dans lequel denombreux composants embarquent des firmwares proprietaires On peut notertoutefois que ces composants ont fait lrsquoobjet de nombreuses recherches ces dernieresannees Des risques de securite averes ont ete exhibes dans des composants telsque Intel vPro [5] les controleurs claviers [23] les cartes reseau [46] etc

7 httpwwwcomputerworldcomsarticle9180678Update_Oracle_sues_Google_over_Java_

use_in_Android

126 Securite du systeme Android

Plus proche du telephone la compromission du baseband a ete demontree possiblerecemment [7] La securite de la plateforme ne peut pas srsquoenvisager sans la securitedes composants materiels qui la compose

5 Les interfaces avec le systeme drsquoexploitation ne sont pas celles de Linux

On peut meme raisonnablement affirmer que lrsquoAPI Java exposee aux applicationsest radicalement differente de celle utilisee dans la programmation Unix tradition-nelle Lrsquointerface graphique nrsquoest pas X11 (heureusement ) Les communicationsinter-processus doivent passer par un mecanisme specifique appele Binder Denombreux concepts drsquoexecution adaptes aux contraintes drsquoun smartphone ont etemodelises (ex processus de type Activity Service Broadcast Receiver ou ContentProvider)

33 Developpement drsquoapplications

Le developpement sous Android srsquoeffectue majoritairement en langage Java ce quicontribue a la popularite de la plateforme aupres des developpeurs Un SDK est fournigratuitement par Google pour les trois systemes drsquoexploitation majeurs (WindowsMac OS X et Linux) Ce SDK peut srsquointegrer dans lrsquoIDE bien connu Eclipse oufonctionner en ligne de commande Il dispose drsquoun emulateur (base sur QEmu) ainsique drsquooutils de mise au point puissants (comme DDMS)

Apres compilation lrsquoutilitaire DX (fourni dans le SDK) permet de convertir lebytecode Java en bytecode Dalvik Lrsquooperation inverse nrsquoest pas possible avec lesoutils du SDK officiel

Lrsquoapplication installable sur le telephone est empaquetee dans un fichier APK quiinclut le bytecode de lrsquoapplication elle-meme (fichier CLASSESDEX) le manifestedrsquoapplication ses ressources et les signatures numeriques Le concept est identique acelui des fichiers JAR ndash les fichiers APK sont drsquoailleurs eux-memes des archives ZIP

Le developpement drsquoapplications est un peu deroutant de prime abord - lrsquoapplica-tion ne disposant pas drsquoun point drsquoentree fixe (de type main()) mais srsquoenregistrantplutot aupres du systeme pour repondre a des evenements appeles Intents dans ladocumentation officielle

Il est egalement possible drsquointegrer du code natif dans une application Java parune interface JNI et le kit de developpement officiel appele NDK (Native DevelopmentKit) De nombreuses applications cryptographiques exploitent cette opportunite pourameliorer les performances des algorithmes gourmands et assurer la securite deselements cryptographiques en memoire (le mecanisme de garbage collector de Javaetant difficilement compatible avec lrsquoeffacement securise de donnees en memoire)

Il nrsquoest pas possible de developper une application 100 native et de la mettre adisposition sur une MarketPlace Il reste assez simple de compiler une application

N Ruff 127

100 native mais un code Open Source existant pour Linux ne va pas necessairementrecompiler et fonctionner sans modification sur une plateforme Android Lrsquoabsence debinsh et de etcpasswd sont par exemple deux ecueils auxquels jrsquoai ete confrontes

Lrsquoobjectif nrsquoest pas ici drsquoecrire un tutoriel pour le developpement drsquoapplicationsAndroid drsquoautant que la documentation Google est tres bien faite 8

34 Modele de securite

Le modele de securite Android nrsquoa guere evolue depuis ses origines il a donc dejaete abondamment commente [1] Son etude reste neanmoins un prealable obligatoirea toute analyse de risques sur cette plateforme

Signature numerique Les applications sont signees numeriquement Ceci est sourcede confusion dans lrsquoesprit du grand public et meme des informaticiens qui associentgeneralement la presence drsquoun certificat a celle drsquoune securite inviolable probablementa cause de la propagande realisee par les acteurs du e-commerce autour du protocoleHTTPS (les fameuses vertus du cadenas jaune et plus recemment de la barre drsquoadresseverte)

En pratique tous les systemes de signature numerique apparus recemment dansles marches grand public (ex programme Symbian Signed signature des appli-cations iPhone signature des pilotes Windows 64 bits) nrsquooffrent aucune securite apriori Le cout drsquoacquisition drsquoun certificat est marginal et les verifications opereesquasiment nulles Le certificat sert essentiellement drsquoidentifiant unique pour permettrela revocation a posteriori

Afin drsquoeviter les problemes drsquoexpiration et de renouvellement des cles Googleimpose meme lrsquoutilisation de certificats de signature dont la date drsquoexpiration depassele 22 octobre 2033 9

Cloisonnement A lrsquoinstallation chaque application se voit attribuer un compteUnix (uid) Lrsquoisolation entre applications est rendue possible par les mecanismes desecurite natifs du systeme Unix

Lrsquoensemble des applications signees par le meme certificat srsquoexecutent sous la memeidentite de groupe Unix (gid) Les interactions possibles entre applications signeespar le meme certificat sont nombreuses 10 ndash elles peuvent ainsi partager le memeuid 11 ce qui ouvre la voie a la creation drsquoapplications malveillantes k-aires chaque

8 httpdeveloperandroidcom

9 httpdeveloperandroidcomguidepublishingapp-signinghtml

10 httpdeveloperandroidcomguidetopicssecuritysecurityhtml

11 httpdeveloperandroidcomreferenceandroidRattrhtmlsharedUserId

128 Securite du systeme Android

application ne possedant qursquoun jeu limite de permissions (jugees peu dangereusesindividuellement) mais la combinaison de toutes ces applications dans le memeprocessus formant une super application pouvant par exemple exfiltrer toutes lesdonnees du telephone

Revocation Compte-tenu de lrsquoaccroissement du nombre drsquoapplications malveillantessur la MarketPlace officielle Google fait un usage de plus en plus frequent dukill switch 12 ndash fonction qui permet drsquoeliminer a distance toutes les instances drsquouneapplication identifiee par son certificat

Pour ceux que cette fonction intrigue je signale que le mecanisme sous-jacent adeja ete decortique en detail [1819] Le cœur du mecanisme repose sur le processusGTalkService qui recoit et traite les messages REMOVE ASSET (et INSTALL ASSET) Laconclusion en est que toute personne en position drsquoeffectuer un man-in-the-middleSSL avec un certificat valide peut emettre de tels messages La liste des autorites deconfiance du systeme se trouve dans le fichier systemetcsecuritycacertsbkset ne peut pas facilement etre modifiee 13 Toutefois cette liste contient (sur montelephone) 58 autorites de nature variee (entreprises gouvernements etc) De plusune application malveillante ayant eleve ses privileges vers root pourrait probablementbloquer lrsquoutilisation du kill switch sur un equipement donne une fois les mecanismessous-jacents connus et documentes

Par le passe la securite basee sur la revocation a montre ses limites 14 En effetcela suppose que lrsquoequipement cible dispose drsquoune connexion a un reseau de donneeset qursquoil soit configure pour en faire usage Ce sont des hypotheses assez fortes

35 Les permissions

Considerations generales Le modele de securite des applications tierce partieest essentiellement declaratif Un fichier de manifeste decrit les permissionsmaximales requises par lrsquoapplication Google definit une centaine de permissionspossibles par defaut 15 mais les constructeurs sont libres drsquoen ajouter egalement cequi peut engendrer des risques specifiques a un modele de telephone donne

La commande de base permettant de manipuler les permissions sur le telephonesrsquoappelle pm Voici les options qursquoelle offre

$ adb shell pm

12 httpandroid-developersblogspotcom201006exercising-our-remote-applicationhtml

13 httpwwwmcbsyscomtechblog201012android-certificates

14 httpwwwf-securecomweblogarchives00001918html

15 httpdeveloperandroidcomreferenceandroidManifestpermissionhtml

N Ruff 129

usage pm [list|path|install|uninstall]

pm list packages [-f]

pm list permission -groups

pm list permissions [-g] [-f] [-d] [-u] [GROUP]

pm list instrumentation [-f] [TARGET -PACKAGE]

pm list features

pm path PACKAGE

pm install [-l] [-r] [-t] [-i INSTALLER_PACKAGE_NAME] [-s] [-f] PATH

pm uninstall [-k] PACKAGE

pm enable PACKAGE_OR_COMPONENT

pm disable PACKAGE_OR_COMPONENT

pm setInstallLocation [0 auto] [1 internal] [2 external]

()

A titre drsquoexemple voici les permissions definies par HTC sur lrsquoune de mes plate-formes de test

$ adb shell pm list permissions | grep htc

permissioncomhtcandroidmailpermissionREAD_MAIL

permissioncomhtcManifestpermissionBROADCAST_KEYIN_EVENT

permissioncomhtcManifestpermissionBROADCAST_MOTION_EVENT

permissioncomhtcManifestpermissionBLOCK_KEYBOARD_EVENT

permissioncomhtcandroidmailpermissionWRITE_ACCOUNT

permissioncomhtcandroidmailpermissionREAD_ACCOUNT

permissioncomhtchtctwitterpermissionuseprovider

permissioncomhtcManifestpermissionBROADCAST_TRACKBALL_EVENT

permissioncomhtcinternalpermissionHTC_APP_PMEM

permissioncomhtcandroidmailpermissionWRITE_MAIL

On notera egalement que cette plateforme contient des permissions a priorispecifiques a lrsquooperateur (americain) Sprint - alors qursquoil srsquoagit drsquoun telephone acheteen France sans abonnement

$ adb shell pm list permissions | grep sprint

permissioncomsprintinternalpermissionSLOT0

permissioncomsprintinternalpermissionPLATFORM

permissioncomsprintinternalpermissionSYSTEMPROPERTIES_WRITE

permissioncomsprintinternalpermissionSYSTEMPROPERTIES

permissioncomsprintinternalpermissionCONNECTIONMANAGER

permissioncomsprintinternalpermissionOMADM

permissioncomsprintandroidpermissionDISABLE_HDMI

Lrsquoutilisateur est libre drsquoaccepter ou de refuser lrsquoapplication mais il ne peut pasmodifier la liste des permissions demandees (sauf a modifier lrsquoapplication et a lare-signer avec sa propre cle comme nous le verrons plus tard)

On peut raisonnablement estimer que la plupart des utilisateurs ne sont pas enmesure drsquoeffectuer un choix eclaire a ce stade

130 Securite du systeme Android

Securite theorique Lrsquoune des questions qursquoon peut se poser sur le systeme depermissions tel qursquoil a ete defini est lrsquoexistence (ou non) drsquoun modele theorique sous-jacent coherent [98] Est-ce que chaque permission correspond bien a un ensemble detaches uniques et strictement delimitees Crsquoest la meme question qui se pose avec lemodele des capabilities sous Linux et dans ce deuxieme cas la reponse est non CAP SYS MODULE permet par exemple de charger des modules noyau arbitraires etdonc de compromettre entierement lrsquointegrite du noyau

Dans le cas drsquoAndroid on peut suspecter que la permission SYSTEMPROPERTIES WRITE

definie par lrsquooperateur Sprint (vue precedemment) a probablement une intersectionnon nulle avec la permission WRITE SETTINGS definie par Google tout en etantprobablement inconnue des outils drsquoanalyse automatique drsquoinnocuite

Lrsquointeret pratique drsquoune etude mathematique sur les permissions Android esttoutefois limite En effet les deux risques majeurs rencontres dans la nature sont

ndash Des applications malveillantes qui demandent des permissions excessivementlarges et abusent de la confiance des utilisateurs

ndash Des applications malveillantes sans aucune permission qui exploitent des faillessysteme pour obtenir lrsquoacces au compte root et contourner entierement lemodele de securite

Ces risques sont partages avec tous les autres modeles de securite en usage danslrsquoindustrie (SELinux sous Linux UAC sous Windows etc)

ndash Ces modeles se heurtent a lrsquoergonomie des interfaces et a la prise de decisioneclairee par les utilisateurs finaux

ndash Lrsquoimplementation de ces modeles exige un effort de conception important tandisque les attaquants les contournent entierement en violant les hypotheses deconception (en particulier lrsquohypothese que le noyau du systeme drsquoexploitationest exempt de bogues)

Autres limites du modele Presque toutes les applications existantes exigent unacces illimite au reseau tres souvent pour recuperer du contenu publicitaire Enpratique cela signifie que le risque pose par une application ne se limite pas a unensemble de permissions statiques par exemple un contenu malveillant pourra etreenvoye a tout moment au moteur de rendu WebKit a travers le canal publicitaire etprovoquer ainsi la prise de controle drsquoun telephone donne au travers une applicationa priori saine

Les permissions demandees peuvent changer a lrsquooccasion drsquoune mise a jour Orla plupart des utilisateurs font confiance aux applications qursquoils ont deja installeesDepuis la version 22 drsquoAndroid lrsquoutilisateur peut autoriser les applications a semettre a jour automatiquement Fort heureusement la mise a jour automatique est

N Ruff 131

bloquee si les permissions demandees par lrsquoapplication changent De mon point devue le mecanisme de mise a jour automatique peut donc etre considere comme plutotbenefique pour lrsquoecosysteme

Enfin le code natif attache a une application (dans le cas drsquoutilisation du NDK)est essentiellement non verifiable contrairement au bytecode Dalvik Le modelede securite Unix vient donc srsquoajouter au modele de permissions Android

4 Panorama des risques

Jrsquoidentifie trois risques de securite majeurs applicables aux ordiphones mo-dernes

1 La structuration du marche de la telephonie

2 Les failles logicielles

3 Les applications tierce partie

Nous allons passer en revue ces trois risques Le troisieme risque est plus specifique alrsquoecosysteme Android dans lequel le role de chaque acteur est bien separe fournisseurde materiel fournisseur de logiciel fournisseur de service

Il se verifie moins dans des ecosystemes comme celui de lrsquoiPhone et du BlackBerrydans lesquels les fournisseurs du materiel et du logiciel sont les memes

41 Marche de la telephonie

Plusieurs acteurs majeurs interviennent dans le marche de la telephonie mobile

1 Les fabricants de materiels

2 Les fabricants de logiciels (en lrsquooccurrence Google)

3 Les circuits de distribution (pour lrsquoinstant les operateurs de telephonie mobile)

4 Les developpeurs drsquoapplications

5 Les fournisseurs de contenus et de services (regies publicitaires services en ligneetc)

Nous allons passer en revue les interets de ces acteurs et le role qursquoils jouent dansla securite de la plateforme a lrsquoexception des derniers qui sont trop divers et varies

Il faut noter que si demain Android venait a equiper drsquoautres biens de consomma-tion courante (ex televiseurs refrigerateurs etc) les parties prenantes (et donc lesconclusions de cette etude) ne seraient pas fondamentalement differentes

132 Securite du systeme Android

Fabricants de materiels Les fabricants de materiels vivent dans un monde extremementconcurrentiel et doivent minimiser le cout de developpement de leurs produits pourque lrsquooperateur puisse au final proposer son telephone a 1 Par ailleurs ils doiventegalement minimiser le time to market un telephone portable se demode tresvite la duree de vie commerciale drsquoun systeme est de lrsquoordre de 6 mois

En consequence logique les developpements sont bacles Les systemes pousses enproduction sont a peine testes et les fonctions de debogage restent souvent activees(comme en temoigne le shell root disponible sur le port TCP12345 des series HTCEvo et HTC Hero commercialisees par Sprint 16)

En regle generale aucun support technique nrsquoest offert apres la sortie drsquountelephone Les mises a jour officielles de firmware sont rarissimes dans le domaine dela telephonie mobile - a lrsquoexception notable drsquoApple qui propose des mises a jourpour le systeme iOS dans la fenetre de support de ses equipements a savoir 21

2ans

Ceci conduit a la proliferation de firmwares non officiels dont lrsquoinnocuite et la stabilitene peuvent pas etre garantis

Dans le cas tres precis de mon telephone LG GW620 livre sous Android 15 LGFrance 17 a promis une mise a jour vers Android 16 pendant plus drsquoun an avant definalement se retracter Des firmwares Android 21 et 22 drsquoexcellente facture ndash maisnon officiels ndash ont donc ete developpes par des amateurs 18 Sous la pression de sesutilisateurs LG a fini par sortir un firmware officiel mais trop tard

Fabricants de logiciels La concurrence fait rage dans le domaine des systemesdrsquoexploitation pour ordiphones

Des lors les editeurs de systemes drsquoexploitation doivent seduire tous les autresacteurs quitte a diminuer les contraintes de securite

ndash Pour seduire les utilisateurs il semble necessaire de disposer du plus grandnombre drsquoapplications dans sa MarketPlaceBien qursquoon puisse questionner cette logique (ne serait-il pas plus interessant dedisposer drsquoapplications utiles fiables et bien realisees ) la guerre des chiffresest neanmoins lancee

ndash Pour seduire les developpeurs drsquoapplications il est necessaire de leur faciliter letravail au maximumLe choix du langage Java et la mise a disposition drsquoun SDK gratuit pour Eclipseva dans ce sens Mais Google va meme plus loin en mettant a disposition un SDK

16 httpwwwunrevokedcomrootwikidokuphppublicunrevoked1_disclosure

17 httptwittercomlg_blog_france

18 httpopenetnacomopenetna

N Ruff 133

visuel pour les gens nrsquoayant aucune notion de developpement 19 On peutse poser des questions sur la securite (et la qualite en general) des applicationsqui en sortirontLa signature drsquoapplications fut egalement pendant longtemps une pierre drsquoachop-pement Lors du lancement du programme Symbian Signed on a pu lireque Symbian voulait tuer les developpeurs independants HeureusementlrsquoAppStore a depuis prouve le contraire et Android nrsquoa eu aucun mal a imposerla signature des sa genese

ndash Seduire les fabricants de materiels est assez simple il suffit de produire unsysteme gratuit et drsquoen assurer une bonne partie du support Ajoutez a celaune forte demande du marche et tout est en place pour garantir le succes

Circuits de distribution Lrsquoessentiel des ordiphones sont commercialises par lesoperateurs de telephonie mobile (Google ayant drsquoailleurs essuye un echec commercialsur la vente en direct du Nexus One)

Comme la plupart des acteurs de la chaine les operateurs cherchent a maximiserleurs revenus parfois au detriment de la securite

ndash Les operateurs personnalisent les systemes drsquoexploitation en y ajoutant desbogues

ndash Les operateurs tentent de rendre payantes des fonctions natives incitant de cefait les utilisateurs au piratage

Parmi les inventions geniales du marketing on peut citer le bridage du tethering(utilisation du telephone comme modem 3G) la geolocalisation payante (alors que letelephone dispose drsquoun GPS integre) lrsquoimpossibilite de regarder la tele ou drsquoecouterde la musique sur un lien WiFi (mais pas sur un lien 3G) etc

Des lors les utilisateurs sont tentes de debrider leur telephone (jailbreaking)drsquoinstaller des applications tierce partie douteuses voire drsquoinstaller des systemes nonofficiels sans garantie drsquoinnocuite

Developpeurs drsquoapplications Lrsquoun des moyens les plus efficaces pour seduire lesdeveloppements est de leur promettre des revenus consequents Pas facile dans unmonde ou la plupart des applications sont gratuites ou dont le prix nrsquoexcede pas 1

Tout drsquoabord le processus drsquoachat drsquoapplications est relativement simple grace aGoogle Checkout lorsque lrsquooperateur ne fournit pas lui-meme le service de facturationau travers de sa MarketPlace Pour les applications financees par la publicite lareputation de Google dans le domaine nrsquoest plus a faire (surtout depuis le rachat dela societe AdMob specialisee dans le domaine de la publicite sur mobiles)

19 httpappinventorgooglelabscomabout

134 Securite du systeme Android

Contrairement a ce qursquoon pourrait croire les deux methodes generent des reve-nus comparables comme le revele lrsquoauteur drsquoune application inutile mais pourtanttelechargee presque 100 000 fois a savoir Advanced Task Manager 20

Les developpeurs attires par des revenus encore plus rapides pourront etre tentespar le cote obscur de la telephonie mobile appels et SMS surtaxes vol (et revente)du carnet drsquoadresses collecte de lrsquohistorique du navigateur etc

Ce phenomene est loin drsquoetre marginal certaines applications etant clairementmalveillantes ndash comme SMSAndroidOSFakePlayera ou les applications editeespar 09Droid qui se font passer pour des applications bancaires officielles ndash drsquoautresetant simplement a la limite du marketing agressif ndash comme celles de lrsquoediteur francaisZeuzz

Plusieurs etudes soulignent la dangerosite des MarketPlaces generalement fi-nancees par les editeurs antivirus ces etudes ne sont toutefois pas drsquoune qualitescientifique suffisante pour etre citees ici Le risque semble neanmoins reel puisqueGoogle a retire en urgence des dizaines drsquoapplications de la MarketPlace dans le cadrede lrsquoaffaire DroidDream (nous y reviendrons)

42 Failles logicielles

Etat des lieux Compte-tenu de lrsquoutilisation massive de code Open Source dans lesysteme Android les failles drsquoimplementation logicielle sont faciles a identifier il suffitde suivre les alertes de securite des principaux projets Lorsqursquoils sont disponibles cequi nrsquoest pas forcement le cas pour le noyau Linux

Les vecteurs principaux (en termes de nombre de lignes de code et drsquoexposition)sont le systeme Linux et le navigateur Web (et particulierement le moteur WebKitcommun avec Safari)

Il ne faut pas oublier non plus qursquoAndroid integre Flash Player et vit avec lesmemes failles 21

Failles navigateur Comme dans tout navigateur Web de complexite importanteles failles sont nombreuses Ces failles nrsquoen restent pas moins dangereuses car ellesont ete demontrees exploitables sur Android 22 23

Lrsquoune drsquoentre elles est meme disponible dans Metasploit 24 Il srsquoagit drsquoune faillerelativement grave qui permet de lire nrsquoimporte quel fichier du telephone accessible

20 httparronlacom201008android-revenue-advanced-task-manager

21 httpwwwtheinquirernetinquirernews2034092android-smartphones-attack-flash-player-hackers

22 httpwwwexploit-dbcomexploits15423

23 httpwwwexploit-dbcomexploits16974

24 httpblogmetasploitcom201101mobile-device-security-and-android-filehtml

N Ruff 135

au processus navigateur - ce qui inclut lrsquointegralite de la carte SD puisque celle-ci estformatee en FAT (donc sans aucun controle drsquoacces)

On notera dans cette attaque lrsquoutilisation de lrsquoURL contentcomandroid

htmlfileproviderltfilenamegt qui permet de lire nrsquoimporte quel fichier du telephoneau travers drsquoun Content Provider 25 ndash une notion specifique a Android qui prometdrsquoetre encore source de nombreuses failles vu la surface drsquoattaque exposee

Par ailleurs outre les schemas traditionnels (file http etc) Androidsupporte par defaut des schemas plus specifiques et donc moins testes

Parmi les schemas supportes on peut citer content (qui permet de com-muniquer avec un Content Provider) market (qui permet drsquointeragir avec laMarketPlace comme par exemple marketdetailsid=ltpackagegt) ou android

resource (qui permet drsquoacceder a une ressource dans un paquet comme parexemple androidresourceltpaquetgtltressourcegt)

Failles systeme Les failles systeme ne sont pas legion mais ont toutes un impactcritique sur la securite du systeme

Parmi les failles les plus connues (car les plus exploitees dans la nature ) onpeut citer les failles publiees sur le site xSports 26 a savoir

ndash Exploid faille udev bien connue des administrateurs Linux CVE-2009-1185

ndash Rage Against The Cage faille liee au mauvais comportement du processusadb lorsque RLIMIT NPROC a ete atteint 27 - lrsquoappel a setuid() echoue mais leprocessus nrsquoen tient pas compte et continue son execution son lrsquoidentite root

ndash Killing In The Name Of faille permettant de modifier la valeur de la constanteglobale (normalement en lecture seule) rosecure en jouant sur une erreurdrsquoimplementation de devashmem Cette constante definie a la compilationdu systeme indique au processus adb srsquoil doit srsquoexecuter sous lrsquoidentite root 28

Les applications legitimes (comme VISIONary+ 29) ou malveillantes (la pluscelebre ayant probablement ete DroidDream [20] ) ne se privent pas drsquoexploiter cesfailles dans la nature

Il faut toutefois noter qursquoil existe une difference subtile entre obtenir un accesroot et obtenir un acces root persistant au redemarrage du telephone En effetbien qursquoil soit virtuellement possible drsquoecrire dans le repertoire system (au traversde la commande adb remount ou drsquoun remount rw a lrsquointerieur du terminal) un

25 httpdeveloperandroidcomguidetopicsproviderscontent-providershtml

26 httpstealthopenwallnetxSports

27 httpdtorsorg20100825reversing-latest-exploid-release

28 httpsourceandroidcomportingbuild_systemhtml

29 httpandroidmodacocomcontentsoftware32035019-nov-r14-visionary-one-click-root

136 Securite du systeme Android

certain nombre de telephones modernes disposent drsquoune protection contre le reflashageintempestif de la partition systeme Cette protection est souvent liee a lrsquoutilisationdrsquoun composant memoire capable de verifier une signature cryptographique (parexemple un composant eMMC 30)

Dans le jargon on dit que la possibilite de reflasher la partition systeme avecun firmware non signe necessite un telephone en mode S-OFF Sur de nombreuxtelephones de marque HTC 31 le mode courant (S-ON ou S-OFF) peut etre obtenuen appuyant sur la touche Volume Down au demarrage du telephone

Failles logiques Il existe une categorie de failles difficiles a detecter et pourtantdevastatrices les failles logiques

Lrsquoun des exemples les plus fameux est le deblocage du telephone en utilisant soncompte Google Dans certains cas de corruption de donnees ce processus peut echouercomme documente officiellement par Google 32

Dans ce cas le telephone doit normalement etre reinitialise en configuration drsquousine(lorsque crsquoest possible ndash la procedure exacte depend du constructeur) Heureusementil srsquoavere que le mot de passe null est toujours accepte comme valide

Un autre bogue celebre affecte le Motorola Droid et potentiellement drsquoautresLorsque le telephone est verrouille mais qursquoun appel entrant arrive il est possibledrsquoappuyer sur le bouton Back et ainsi drsquoarriver a lrsquoecran drsquoaccueil du telephone 33

Enfin une superbe faille logique a ete decouverte sur le site httpsmarket

androidcom qui permet drsquoinstaller a distance des applications sur un telephoneAndroid Grace a une faille de type XSS persistant sur ce site 34 il etait possible defaire installer une application puis de lrsquoexecuter automatiquement sur le telephonede nrsquoimporte quel utilisateur Un utilisateur pouvait etre victime de cette attaque encliquant sur un lien depuis son telephone ou son PC (sous reserve drsquoetre logue sousson compte Google)

La technique utilisee pour executer automatiquement lrsquoapplication apres soninstallation merite drsquoetre soulignee elle consiste a declarer dans le manifeste delrsquoapplication que celle-ci supporte un nouveau schema drsquoURI (par exemple trigger

) puis a invoquer un lien trigger depuis la page Web drsquoorigine

Que peut-on faire Compte-tenu de la quantite de code C embarque dans lesysteme Android il existe et il existera des bogues drsquoimplementation dans ce systeme

30 httpenwikipediaorgwikiMultiMediaCardeMMC

31 Un site de reference pour les telephones de marque HTC httpunrevokedcom32 httpcodegooglecompandroidissuesdetailid=3006

33 httptechcrunchcom20100111verizon-droid-security-bug

34 httpjonoberheideorgblog20110307how-i-almost-won-pwn2own-via-xss

N Ruff 137

conduisant pour certains a des failles de securite WebKit et le systeme Linux sontdes cibles de choix compte-tenu de la surface drsquoattaque exposee

Toutefois et contrairement a un systeme classique la mise a jour a grandeechelle srsquoavere extremement problematique pour plusieurs raisons

ndash Le facteur drsquoechelle (plusieurs millions drsquounites en circulation rien qursquoen France)ndash La diversite et le haut degre de personnalisation des plateformes materielles et

logiciellesndash La propriete du terminal (lorsqursquoil a ete achete par lrsquoutilisateur)ndash Les risques commerciaux en cas de blocage definitif du terminal (brick)On peut raisonnablement considerer qursquoen dehors du geek moyen aucun utilisateur

de smartphone sous Android nrsquoa jamais mis a jour son systemeLes statistiques officielles de Google sur la repartition des ordiphones par version

drsquoAndroid permettent de se faire une idee objective sur la vitesse de renouvellementdu parc 35 A lrsquoheure ou jrsquoecris ces lignes malgre la disponibilite du systeme Android23 la majorite du parc se compose encore de systemes Android 21 et 22 ndash sanscompter sur les irreductibles 6 qui disposent drsquoune version anterieure Je laisseaux statisticiens le soin de produire une etude plus detaillee qui sera neanmoinsbiaisee par le fait que les donnees mondiales sont agregees tandis que les politiquesde renouvellement des operateurs sont tres variables drsquoun pays a lrsquoautre

Dans ces conditions il est loin le moment ou un operateur mobile fera du NAC-NAP sur son reseau pour interdire la connexion de ordiphones qui ne sont pas a jourdes correctifs

Techniquement le protocole FOTA (Firmware Over-The-Air) permet toutefoisde mettre a jour a distance des terminaux Ce protocole a deja ete utilise a grandeechelle lorsqursquoune backdoor (exploitable a distance) a ete decouverte sur certainstelephones HTC de modele Hero et Evo

5 Audit drsquoapplications Android

51 Auditer pourquoi

Lrsquoaudit securite drsquoapplications tierces est une activite vieille comme le conseil ensecurite Toutefois le circuit de distribution logicielle etant assez different entre lemonde du logiciel drsquoentreprise et les MarketPlaces pour mobiles il est vrai que laquestion merite drsquoetre posee a nouveau

A lrsquoheure ou jrsquoecris ces lignes Google nrsquoeffectue aucune verification de securite surles applications publiees dans lrsquoAndroid Market Cet etat de fait pourrait changer

35 httpdeveloperandroidcomresourcesdashboardplatform-versionshtml

138 Securite du systeme Android

compte-tenu de la proliferation drsquoapplications malveillantes de plus en plus agressiveset sophistiquees

Parmi tous les risques lies aux terminaux mobiles (vol de lrsquoequipement intrusionvia une faille du navigateur etc) on constate dans les faits que le risque principalaujourdrsquohui est la proliferation drsquoapplications malveillantes La malveillance estune notion assez floue et certaines applications peuvent se situer dans une zone grise - comme lrsquoapplication de voix sur IP Viber 36 qui duplique tous les contactsde lrsquoutilisateur sur un serveur central faisant office drsquoannuaire telephonique Maisdrsquoautres applications font lrsquounanimite contre elles comme les applications utilisant desfailles systeme pour elever leurs privileges vers root etou envoyer des SMS surtaxessans le consentement de lrsquoutilisateur Ces applications sont drsquoailleurs tuees parGoogle une fois identifiees car elles violent clairement les regles drsquoutilisation delrsquoAndroid Market

Les circuits qui conduisent a lrsquoapparition drsquoune application malveillante sontmultiples

ndash Malveillance deliberee de lrsquoauteur qui veut gagner de lrsquoargent rapidement Crsquoestle cas le plus simple Un scenario courant consiste a cloner une applicationen vogue tout en y ajoutant du code malveillant

ndash Compromission drsquoun editeur drsquoapplications a son insu Crsquoest la ligne de defenseadoptee par plusieurs editeurs drsquoapplications apres avoir ete pointe du doigtCette defense est malheureusement credible car la plupart des developpeurs sontdes individus isoles ou des micro-entreprises attirees par les success stories a laAngry Birds et bien souvent sans aucune securite dans les developpements

ndash Integration de librairies tierce partie malveillantes dans un programme sainLrsquoauteur drsquoune application populaire (a savoir Tank Hero ) a ainsi an-nonce avoir ete contacte par un fournisseur drsquoapplications probablementmalveillantes qui lui proposait un accord commercial 37

Mais lrsquoidentification des applications malveillantes nrsquoest pas la seule raison quipeut conduire a auditer une application Android Parmi drsquoautres raisons legitimes on peut citer

ndash Verifier que lrsquoapplication fait bien ce qursquoelle pretend faire Ce point est parti-culierement critique pour les applications de securite qui mettent en œuvre duchiffrement ou de la gestion de mots de passe par exemple Dans le domaineles surprises sont nombreuses drsquoautant que les applications mobiles nrsquoont pasencore la maturite des applications bureautiques et que les contraintes

36 httpwwwvibercom

37 httpwwwredditcomrAndroidcommentsfm3cuspyware_company_wants_us_to_embed_

their_code_into

N Ruff 139

du monde embarque se font sentir (puissance de calcul sources drsquoentropieremanence de lrsquoallocateur memoire Java etc)

ndash Recherche des failles de securite Et oui les applications Android sont aussivulnerables aux buffer overflows lorsqursquoelles utilisent du code natif (compileavec le NDK) et meme des injections SQL (meme si SQLite nrsquoimplemente pasdrsquoequivalent a xp cmdshell) Il existe par ailleurs des attaques specifiques aumonde Android comme les BroadcastReceiver qui ne verifieraient pas la sourcedes messages recus

Le probleme principal avec lrsquoaudit drsquoapplications Android nrsquoest pas techniqueLe probleme crsquoest lrsquoeuphorie du marche proliferation drsquoapplications et mises a jourfrequentes qui obligent a automatiser et industrialiser les audits 38

52 Auditer comment

Lrsquoaudit securite est une tache difficile a modeliser car elle tire parti de la creativitede lrsquoauditeur On peut toutefois identifier les grandes lignes suivantes

1 Recuperer lrsquoapplication

2 Decompresser les ressources

3 Desassembler le bytecode

4 Decompiler le bytecode (lorsque crsquoest possible)

5 Desassembler le code natif

6 Deboguer lrsquoapplication en cours drsquoexecution (sur un telephone reel ou danslrsquoemulateur)

Cette methodologie nrsquoest pas exhaustive elle ne donne pas acces au contenutelecharge ulterieurement (par exemple au travers des publicites integrees) Voyonsles methodes et les difficultes associees a chaque etape

Recuperer lrsquoapplication Cette etape nrsquoest pas trop compliquee pour qui est preta installer lrsquoapplication cible sur son telephone Apres installation le fichier APK estconserve dans le repertoire dataapp Selon les permissions appliquees au systeme defichiers il nrsquoest pas necessairement possible de lister le contenu de ce repertoire maisles paquets restent lisibles par lrsquooutil adb et le nom de paquet peut etre determinedepuis la MarketPlace ou le menu parametres du telephone (le nom exact estpaquet-Napk ou N vaut generalement 1)

38 httpwwwappanalysisorg

140 Securite du systeme Android

Toute autre methode est complexe et probablement illegale Parmi les methodespossibles on peut citer lrsquoinstallation de lrsquoapplication MarketPlace dans un emulateurou le reverse engineering de lrsquoapplication MarketPlace a des fins de reimplementation(cette derniere etant toutefois volumineuse donc complexe a analyser)

Depuis la version 22 du systeme Android et si lrsquoapplication lrsquoautorise il estpossible drsquoinstaller une application sur la carte SD Mais lrsquoapplication est alorsstockee dans un fichier asec chiffre Ce fichier est inexploitable jusqursquoa ce quele mecanisme et la cle de chiffrement soient connus

On peut imaginer qursquoune application extremement malveillante pourrait exploiterune faille des lrsquoinstallation pour elever ses privileges vers root et dissimuler ses traces(ie se rendre inaccessible de lrsquoexterieur) Ce cas ne srsquoest pas encore produit dansla nature a lrsquoheure ou jrsquoecris ces lignes mais srsquoavere techniquement faisable

Il faut noter que la MarketPlace de Google nrsquoest pas la seule disponible maisqursquoil existe egalement des MarketPlaces drsquooperateurs ou de tiers ainsi Amazoncommercialise desormais des applications Android 39 Cette proliferation complexifiedrsquoautant la tache drsquoanalyse des MarketPlaces La methode la plus universelle pourrecuperer la source drsquoinstallation drsquoune application reste donc de lrsquoinstaller sur untelephone

Un utilisateur peut installer des applications depuis des sources externes a laMarketPlace si lrsquooption autoriser les sources inconnues est cochee dans lesparametres de configuration Il existe des applications legitimes accessibles en dehorsdes MarketPlaces mais il existe egalement des bases drsquoapplications piratees surInternet dont lrsquoinnocuite ne peut pas etre garantie

Notons que certaines applications meme parmi celles disponibles sur les Market-Places officielles exigent au prealable un acces root au telephone

Decompresser les ressources Les fichiers places a lrsquointerieur drsquoun paquet APKsont optimises drsquoune maniere ou drsquoune autre avant drsquoetre compresses Ceci srsquoappliqueaussi bien au bytecode qursquoaux ressources textuelles (comme les fichiers XML)

Lrsquoune des optimisations principales est la deduplication de donnees Ainsi ilnrsquoexiste qursquoune seule instance de chaque chaine de caracteres dans un fichier DEXDifferents encodages optimises sont egalement utilises tel que LEB128 pourla representation des entiers (Little Endian Base 128 aussi utilise dans le formatDWARF)

Toutes ces optimisations nrsquoont pas pour but la protection logicielle et sont parfai-tement reversibles Lrsquooutil aapt fourni avec le SDK officiel permet ainsi drsquoexplorerle contenu du manifeste drsquoun paquet APK Les techniques drsquooptimisation ont ete

39 httpwwwamazoncomappstore

N Ruff 141

analysees et documentees par des tiers ce qui a permis la production drsquooutils dedecompression comme apktool 40

Desassembler le bytecode Avec le SDK officiel est fourni lrsquooutil dexdump quipermet de lister le bytecode contenu dans un fichier CLASSESDEX

Le format de fichier DEX a ete lui aussi analyse et documente 41 ce qui a permisla production de desassembleurs tiers comme baksmali

Le code genere suit la syntaxe Jasmin 42 bien connue dans le monde Java tra-ditionnel Cette syntaxe peut sembler obscure de prime abord mais elle est par-faitement reguliere donc finalement tres simple a apprehender Prenons un exempleissu drsquoune application reelle voici ci-dessous le code drsquoune methode appeleeemptyResult telle que produit par baksmali

method protected static emptyResult(LjavalangString )Z

locals 1

parameter result

prologue

line 306

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Toutes les directives commencent par un point Leur nom est relativement explicitelocals 1 va par exemple indiquer la presence drsquoune seule variable locale Le nomassigne aux opcodes de la machine virtuelle est egalement assez parlant

pN represente lrsquoargument numero N passe a la methode vN represente le re-gistre numero N (Dalvik est une machine virtuelle a registres et non a pile)

Munis de ces informations decortiquons la seule operation reellement complexeeffectuee dans cet extrait de code

40 httpcodegooglecompandroid-apktool

41 httpwwwnetmitecomandroidmydroiddalvikdocsdex-formathtml

42 httpjasminsourceforgenet

142 Securite du systeme Android

invoke-static Invoque une methode sta-tique Il existe egalementun opcode invoke-virtual

pour les methodes virtuellesinvoke-super pour la methodede la superclasse etc

p0 La methode appelee prend unseul argument La valeur de cetargument provient du premierargument passe a la methodeemptyResult

LcomutilsStringUtils-gtisEmpty Invoque la methode isEmpty de laclasse comutilsStringUtils L est un prefixe accole a tousles litteraux

(LjavalangString) Le premier (et seul) argument estde type javalangString

Z La methode retourne un booleen

A titre de reference voici les differents types natifs disponibles dans Jasmin

Z BooleenB OctetC CaractereS Entier court (16 bits)I Entier (32 bits)J Entier long (64 bits)F Flottant (32 bits)D Double (64 bits)

Lrsquoavantage majeur de lrsquooutil tiers apktool est la possibilite de modifier le bytecodeou les ressources drsquoune application puis de la recompiler dans une version fonctionnelleCeci permet drsquoutiliser une technique drsquoanalyse aussi ancienne que lrsquoinformatiqueappelee printf debugging

Dans le monde Android lrsquoutilisation de Systemout doit etre remplacee parandroidutilLog Cette classe definit plusieurs methodes ndash respectivement v d iw e et wtf ndash qui correspondent chacune a un niveau de verbosite ndash et dont lesarguments sont enregistres dans le journal systeme (sauf le niveau debug) Cejournal peut etre consulte a lrsquoaide de la commande adb logcat apparait en temps

N Ruff 143

reel dans lrsquooutil DDMS et peut egalement etre consulte par toute application quidispose de la permission READ LOGS

Si lrsquoon souhaite connaitre lrsquoargument passe a la methode emptyResult danslrsquoexemple precedent il suffit alors drsquoajouter un appel a nrsquoimporte quelle methode dela classe Log de la maniere suivante

method protected static emptyResult(LjavalangString )Z

locals 2

parameter result

prologue

line 306

const -string v1 PrintfDebuggingStyle

invoke -static v1 p0 LandroidutilLog-gtd(LjavalangStringLjavalang

String )I

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Une variable locale v1 a ete ajoutee contenant une chaine de caracteres fixe Lamethode d() est ensuite invoquee Cette modification est equivalente au code Javasuivant

Logd(PrintfDebuggingStyle ltp0 gt)

On peut constater experimentalement que de nombreuses applications de laMarketPlace font usage de lrsquoAPI Log ce qui permet de collecter des donnees defonctionnement parfois tres (trop) interessantes

Le journal systeme peut etre collecte a distance par un developpeur lors ducrash de son application si lrsquoutilisateur lrsquoautorise Cette technique a ete presenteepar Renaud Lifchitz lors de la conference 27c3 pour espionner les deplacements drsquounutilisateur 43

Decompiler le bytecode Comme avec tout bytecode de haut niveau (ex JavaNET) la semantique de lrsquoapplication est conservee

Il est donc possible de decompiler du bytecode Dalvik et de reconstruire le codeJava drsquoorigine (sans les commentaires ndash seule information perdue a la compilation) Lepremier outil public capable drsquoune telle operation fut undx 44 de Marc Schoenefeld Cetoutil est toutefois bogue et non maintenu par son auteur Le meilleur outil disponibleactuellement est lrsquooutil dex2jar 45 qui reconstruit du bytecode Java a partir du

43 httpeventscccdecongress2010Fahrplanevents4151enhtml

44 httpwwwillegalaccessorgundxhtml

45 httpcodegooglecompdex2jar

144 Securite du systeme Android

bytecode Dalvik Les outils classiques de decompilation Java 46 47 srsquoappliquentalors

Compte-tenu de la facilite deconcertante avec laquelle il est possible drsquoanalyserles applications Android (et donc de les craquer entre autres) Google a mis adisposition des developpeurs une bibliotheque tres complete de gestion des licences enligne Licensing Verification Library (LVL) 48 Toutes les versions de cette bibliothequeont malheureusement ete craquees elles aussi a lrsquoheure ou jrsquoecris ces lignes

Une autre contre-mesure mise en place par Google consiste a integrer un obfusca-teur de bytecode dans la chaine de compilation ProGuard 49 Cet outil relativementpuissant est configurable par le developpeur au travers du fichier proguardcfg toutefois le fichier de configuration par defaut (reproduit ci-apres) nrsquoopere que lerenommage des classes et methodes invisibles a lrsquoexterieur de lrsquoapplication ce qui estpeu efficace face a un attaquant determine

-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontpreverify

-verbose

-optimizations codesimplificationarithmetic field classmerging

-keep public class extends androidappActivity

-keep public class extends androidappApplication

-keep public class extends androidappService

-keep public class extends androidcontentBroadcastReceiver

-keep public class extends androidcontentContentProvider

-keep public class extends androidappbackupBackupAgentHelper

-keep public class extends androidpreferencePreference

-keep public class comandroidvendinglicensingILicensingService

-keepclasseswithmembernames class

native ltmethods gt

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet)

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet int)

-keepclassmembers enum

public static [] values ()

public static valueOf(javalangString)

46 httpmembersfortunecitycomneshkovdjhtml

47 httpjavadecompilerfreefr

48 httpdeveloperandroidcomguidepublishinglicensinghtml

49 httpdeveloperandroidcomguidedevelopingtoolsproguardhtml

N Ruff 145

-keep class implements androidosParcelable

public static final androidosParcelable$Creator

Au vu des resultats obtenus on peut considerer que lrsquoobfuscation de bytecode Javadans le monde Android est en retard sur lrsquoobfuscation de code x86 dans le monde PCLes techniques de complexification du flot de controle ou de construction dynamiquedes constantes ne sont pas encore repandues dans les applications commerciales pourAndroid Afin de combler ce manque des projets paralleles (comme AndroGuard 50)fleurissent - mais on peut supposer que la solution integree au SDK fourni par Googlerestera la solution majoritairement utilisee par les applications (pour des raisons desimplicite evidentes)

Desassembler du code natif Lors de lrsquoaudit drsquoune application Android il estpossible de rencontrer du code natif dans deux cas

1 Lrsquoapplication contient des bibliotheques natives compilees avec le NDK

2 Lrsquoapplication contient des applications natives ou srsquoavere etre elle-meme uneapplication native Ce cas est courant avec les applications malveillantes quiembarquent du code natif pour exploiter des failles noyau 51

Dans les deux cas Android ne presente aucune specificite par rapport a unLinuxARM classique Les fichiers natifs sont au format ELF La chaine de compilationnative est construite autour du compilateur GCC Tous les outils sont disponiblesdepuis longtemps pour analyser des tels binaires (ex IDA Pro Hex-Rays DecompilerARM etc)

Deboguer lrsquoapplication Une application Java compilee en mode debug peutetre deboguee a distance au travers du protocole standard Java Debug Wire Protocol(JDWP) defini dans le cadre de Java Platform Debugger Architecture (JPDA)

Les environnements de developpement Java classiques (comme Eclipse) per-mettent ainsi de deboguer une application a distance une fois celle-ci installee sur letelephone

Il est egalement possible drsquoutiliser le venerable JDB (fourni avec le SDK Java 52)bien que cet outil nrsquoait jamais depasse le statut de preuve de concept a mon avis

Lrsquooutil DDMS fourni avec le SDK Android repose egalement sur JPDA Cetoutil ne permet toutefois pas le debogage drsquoapplications mais seulement lrsquoanalyse deperformance

50 httpcodegooglecompandroguard

51 httpstealthopenwallnetxSports

52 httpdownloadoraclecomjavase142docstooldocssolarisjdbhtml

146 Securite du systeme Android

La liste des applications pouvant etre deboguees sur un systeme Android srsquoobtientavec la commande adb jdwp

Le vrai probleme se pose pour les applications qui nrsquoont pas ete compilees enmode debug Ceci implique que le manifeste de lrsquoapplication ne contient pasdrsquoentree ltapplication androiddebuggable=truegt De plus la plupart des outilsde debogage Java necessitent que le bytecode contienne des indications sur les numerosde lignes dans le code source drsquoorigine (il srsquoagit drsquoune limitation arbitraire qui nesrsquoapplique pas a lrsquooutil JavaSnoop 53 par exemple)

Fort heureusement il est possible de desassembler ces applications puis de lesreassembler en mode debug avec lrsquooutil apktool 54 Le processus est complexe etle resultat peu convivial mais il a le merite drsquoexister

Pour reinstaller lrsquoapplication modifiee sur un equipement reel il est necessairede la signer a nouveau La procedure est simple et parfaitement documentee parGoogle

Il faut drsquoabord generer une cle personnelle autosignee a duree de vie extremementlongue

$ keytool -genkey -v -keystore mykeykeystore -alias nom_alias -keyalg RSA -

keysize 2048 -validity 10000

Il faut ensuite signer le nouvel APK avec les outils du SDK Java

$ jarsigner -verbose -keystore mykeykeystore nom_applicationapk nom_alias

Enfin il est recommande drsquoaligner le code sur un multiple de 4 octets pour desraisons de performance

$ zipalign -v 4 nom_applicationapk nom_application_finalapk

Instrumentation Il est possible drsquoinstrumenter une application Java a lrsquoaide declasses specifiques a Android (androidappInstrumentation 55) Cette methodefournit des resultats detailles et personnalisables sur le fonctionnement interne drsquouneapplication elle necessite toutefois une decompilation et une modification prealablede lrsquoapplication a auditer

A lrsquoheure ou jrsquoecris ces lignes il nrsquoexiste pas (a ma connaissance) drsquooutil permettantde generaliser et drsquoautomatiser le processus a tout fichier APK Cette voie de recherchepourrait toutefois donner des resultats interessants

53 httpwwwaspectsecuritycomtoolsjavasnoop

54 httpcodegooglecompandroid-apktoolwikiSmaliDebugging

55 httpdeveloperandroidcomreferenceandroidappInstrumentationhtml

N Ruff 147

Outils specifiques Les outils disponibles actuellement dans le monde Android sontrudimentaires quoi que suffisants

Toutefois on peut raisonnablement estimer que la quantite et la qualite des outilsdisponibles va croitre de concert avec la popularite du systeme Android

A lrsquoheure ou jrsquoecris ces lignes la version 61 du logiciel IDA Pro 56 vient de sortirCette version ajoute le support du format DEX et du bytecode Dalvik ainsi que ledebogage a distance des applications Android natives

On peut supposer que drsquoautres outils couramment utilises par les auditeurs ensecurite vont etre mis a jour pour srsquoadapter au monde Android

6 Conclusion

Le systeme Android nrsquoa malheureusement pas profite de lrsquoopportunite unique quilui etait donnee repartir de la feuille blanche et creer un systeme drsquoexploitation sur par conception

A cause drsquoun heritage logiciel peu fiable ainsi que des contraintes materielles etcommerciales issues du monde de la telephonie mobile le systeme resultant est uncompromis qui laisse une large place a la creativite des attaquants

Celle-ci est drsquoautant plus exacerbee que la telephonie mobile est un phenomene demasse (il y a plus de telephones mobiles que drsquoordinateurs dans le monde) et que letelephone mobile est par conception un systeme de paiement (ce que nrsquoest pas un PCtraditionnel)

A ce tableau vient srsquoajouter 30 ans drsquoexperience dans le domaine des attaqueslogicielles appliquees a un ecosysteme applicatif qui nrsquoexistait pas il y a 5 ans

Toutes les conditions sont donc reunies pour que des attaques de grande ampleurmotivees par lrsquoargent se produisent contre les materiels grand public equipes dusysteme Android (telephones tablettes televisions )

La bonne nouvelle pour lrsquoexpert en securite crsquoest qursquoil est encore temps de srsquoymettre Android est suffisamment jeune et accessible aux nouveaux entrants ce quinrsquoest plus le cas de la plateforme PC ou les techniques drsquoattaque (ex exploitationdrsquoun heap overflow) et de defense (ex obfuscation logicielle) ont atteint des sommetsde raffinement desormais accessibles aux seuls experts les plus pointus du domaine

7 Sites et outils

71 Sites officiels

ndash Android portail officiel httpwwwandroidcom

56 httpwwwhex-rayscomidapro

148 Securite du systeme Android

ndash Android MarketPlace officielle httpsmarketandroidcomndash Android reference des developpeurs httpdeveloperandroidcom

72 Sites non officiels

ndash Reference de la machine virtuelle Dalvik httpdalvikvmcom

73 Outils tiers

ndash Google Android Debugging Utilities httpsitesgooglecomsiteortegaalfredoandroid

ndash Undx httpwwwillegalaccessorgundxhtmlndash SmaliBaksmali httpcodegooglecompsmalindash Dedexer httpdedexersourceforgenetndash Dex2Jar httpcodegooglecompdex2jarndash TaintDroid httpwwwappanalysisorg

ndash AndroGuard httpandroguardblogspotcom

References

1 Benjamin Morin Modele de securite drsquoAndroid MISC 51 2010

2 K Chen Reversing and exploiting an apple firmware update httpwwwblackhatcom

presentationsbh-usa-09CHENBHUSA09-Chen-RevAppleFirm-PAPERpdf BlackHat 2009

3 Alexandre Gazet Sticky fingers amp KBC Custom Shop httpwwwssticorg2011presentation

sticky_fingers_and_kbc_custom_shop SSTIC 2011

4 Loıc Duflot and Yves-Alexis Perez Quelques elements en matiere de securite des cartes reseau http

wwwssticorg2010presentationPeut_on_faire_confiance_aux_cartes_reseau SSTIC 2010

5 Alexander Tereshkin and Rafal Wojtczuk Introducing Ring -3 Rootkits httpwwwblackhat

compresentationsbh-usa-09TERESHKINBHUSA09-Tereshkin-Ring3Rootkit-SLIDESpdf Black-Hat USA 2009

6 Loıc Duflot Yves-Alexis Perez and Benjamin Morin Run-time firmware integrity verification what ifyou canrsquot trust your network card CanSecWest 2011

7 Ralf-Philipp Weinmann All Your Baseband Are Belong To Us httpeventscccdecongress

2010Fahrplanevents4090enhtml CCC 2010

8 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Formal Model to Analyzethe Permission Authorization and Enforcement in the Android Framework SecureComrsquo10

9 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Small but Non-negligibleFlaw in the Android Permission Scheme Wook Shin Sanghoon Kwak Shinsaku Kiyomoto KazuhideFukushima et Toshiaki Tanaka IEEE POLICY 2010

10 Marc Schonefled Reconstructing Dalvik Applications httpcansecwestcomcsw09

csw09-schoenefeldpdf CanSecWest 2009

N Ruff 149

11 Sergio Alvarez The Smart-Phones Nightmare (iPhone-oriented parts about Android) http

cansecwestcomcsw09csw09-alvarezpdf CanSecWest 2009

12 Nicolas Economou Alfredo Ortega Smartphone (in)security httpcansecwestcomcsw09

csw09-ortega-economoupdf CanSecWest 2009

13 Jesse Burns Exploratory Android Surgery httpwwwblackhatcompresentationsbh-usa-09

BURNSBHUSA09-Burns-AndroidSurgery-SLIDESpdf BlackHat USA 2009

14 Kevin Mahaffey John Hering App Attack httpsmediablackhatcombh-us-10presentations

Mahaffey_HeringBlackhat-USA-2010-Mahaffey-Hering-Lookout-App-Genome-slidespdf Black-Hat USA 2010

15 Nils The Risk you carry in your Pocket httpsmediablackhatcombh-ad-10Nils

Black-Hat-AD-2010-android-sandcastle-slidespdf BlackHat Abu Dhabi 2010

16 Raphael Rigo Android Reverse Engineering and Forensics httpsdeepsecnetdocsspeaker

htmlPSLOT45 DeepSec 2010

17 Itzhak Avraham Popping Shell on A(ndroid)RM Devices httpsmediablackhatcombh-dc-11

AvrahamBlackHat_DC_2011_Avraham-Popping_Android_Devices-Slidespdf BlackHat DC 2011

18 Jon Oberheide httpjonoberheideorgblog20100625remote-kill-and-install-on-google-android

19 Jon Oberheide httpjonoberheideorgblog20100628a-peek-inside-the-gtalkservice-connection

20 httpwwwandroidpolicecom20110301the-mother-of-all-android-

malware-has-arrived-stolen-apps-released-to-the-market-that-root-

your-phone-steal-your-data-and-open-backdoor

  • Seacutecuriteacute du systegraveme Android
  • N Ruff

N Ruff 123

des telecoms La societe Android Inc a ete rachetee par Google en 2005 mais lasortie officielle du produit Android nrsquoa eu lieu qursquoen 2007 - en meme temps quela creation de lrsquoOpen Handset Alliance 1 chargee de faire vivre ce produit

Au travers de cet historique on peut comprendre que les choix de conceptioninitiaux (et donc structurants) nrsquoont pas ete faits par Google

3 Principes drsquoimplementation

31 Architecture ARM

Le systeme Android est disponible pour plusieurs architectures CPU (comme x86ARM et MIPS) Toutefois lrsquoecrasante majorite des equipements en circulation equipesdu systeme Android (a savoir les telephones portables) disposent drsquoun processeurARM Cette tendance gagne drsquoailleurs les NetBooks (appeles SmartBooks dansce cas) A terme la domination insolente de lrsquoarchitecture x86x64 est donc menacee- Microsoft annonce drsquoailleurs qursquoil y aura une version ARM de Windows 8 (mais ceciest une autre histoire) Dans la suite de cet article seule lrsquoarchitecture ARM seradonc etudiee

Lrsquoarchitecture ARM est un design de la societe ARM Ltd qui ne fabrique paselle-meme ses processeurs mais les revend sous licence De nombreux constructeursproposent donc des processeurs ARM implementant tout ou partie de lrsquoune desspecifications disponibles - actuellement ARMv5 ARMv6 ou ARMv7 pour le cœur- avec differentes options telles que la presence drsquoun FPU drsquoun DSP drsquoun supportnatif du bytecode Java (technologie Jazelle) etc

La nomenclature des processeurs ARM est deroutante de prime abord 2 Ainsile processeur ARM7-TDMI qui a rencontre un grand succes commercial (il equipelrsquoiPod et la Nintendo DS par exemple) est construit sur un cœur ARMv4 (commeson nom ne lrsquoindique pas)

Au final le parc installe est donc tres heterogene et le developpeur drsquoapplications(ou drsquoattaques) ne peut srsquoappuyer que sur le plus petit denominateur commun

En ce qui concerne strictement la securite du processeur ARM notons les pointssuivants

ndash Les caches drsquoinstructions et de donnees sont generalement separes dans lesimplementations ARM courantes Ceci rend plus complique lrsquoecriture de codeauto-modifiant (de type shellcode encode par un XOR)

1 httpwwwopenhandsetalliancecom

2 httpenwikipediaorgwikiARM_architecture

124 Securite du systeme Android

ndash Lrsquoencodage des instructions est de taille fixe (16 ou 32 bits selon le mode duprocesseur THUMB ou ARM) Il est possible de jouer avec chaque bit alrsquointerieur drsquoune instruction (par exemple pour la rendre conditionnelle) ce quifacilite lrsquoecriture de shellcodes sans octets nuls

ndash La pile peut etre ascendante ou descendante Dans la pratique toutes lesimplementations ARM dont jrsquoai connaissance ont une pile qui fonctionne commesur architecture x86 (donc descendante)

ndash Le passage de parametres srsquoeffectue par registres ndash Enfin certaines implementations du processeur ARM supportent le bit XN

(eXecute Never) apparu avec ARMv6 Ce bit est equivalent au bit NXXD surarchitecture x86

Tous ces points ne sont pas specifiques au systeme Android et sont deja largementdocumentes par ailleurs La societe iSec avait deja publie un article sur lrsquoecriture deshellcodes ARM en 2001 3

32 Lrsquoheritage GNULinux

Android est un systeme drsquoexploitation Open Source (licence Apache v2) basesur le systeme GNULinux avec lequel il partage drsquoailleurs lrsquohebergement des sources 4

- meme si la perennite de ce modele pourrait etre remise en cause compte-tenu desdivergences croissantes entre les developpements realises par Google et la branchestable du noyau 5

Les differences avec une distribution Linux traditionnelle sont toutefois assezsignificatives

1 La librairie C nrsquoest pas la GNULibC traditionnelle mais une version developpeepar Google et denommee Bionic

On peut supposer que les deboires de Debian avec la GNULibC (et parti-culierement le support ARM 6) ne sont pas totalement etrangers a ce choixLa licence GNU pose egalement un probleme potentiel crsquoest pourquoi Google srsquoestplutot inspire du code issu des projets BSD (se reporter au repertoire bioniclibcdans les sources drsquoAndroid pour plus de details)

2 Les applications Java tierce partie doivent necessairement etre compilees enbytecode Dalvik

3 httpwwwisecplpapersinto_my_arms_dslspdf

4 httpandroidgitkernelorg

5 httpwwwkroahcomloglinuxandroid-kernel-problemshtml

6 httplinuxslashdotorgarticleplsid=0905062050216

N Ruff 125

Ce bytecode srsquoexecute dans une JVM specifique a Android denommee Dalvik enreference a un village islandais dont est issue la famille du chef de projet Il srsquoagitdrsquoune machine virtuelle a registres et non a pile comme la JVM de Sun Le bytecodeDalvik est par ailleurs tres similaire au bytecode Java mais pas completementidentique non plus

Le choix drsquoune JVM comme cible de developpement srsquoexplique par plusieurs raisonsparfaitement acceptables facilite de developpement de nouvelles applicationsabstraction de la plateforme materielle (les variantes et les revisions du processeurARM etant nombreuses) possibilite de verifier des proprietes de securite sur lebytecode etc

Toutefois il faut noter que depuis le rachat de la technologie Java par Oracle labataille juridique fait rage entre les deux editeurs 7

Le developpement de code natif est egalement possible au travers du NDK Ilnrsquoest toutefois pas possible de distribuer sur la MarketPlace des applications100 natives le code natif doit utiliser les API JNI pour srsquointerfacer avec uneapplication Java hote

3 Toutes les applications doivent etre signees numeriquement

Le mecanisme de signature Android nrsquoest pas base sur une PKI mondiale qui seraitdifficile a maintenir et commercialement suicidaire Un certificat autosigne generepar le developpeur est acceptable comme nous le verrons plus loin en abordant lemodele de securite du systeme

4 Un equipement physique nrsquoest pas entierement Open Source

Le milieu du materiel et des couches basses (ex pile de protocoles GSM) est tresconcurrentiel et reste traditionnellement assez hostile au concept de lrsquoOpenSource Un smartphone vendu par un constructeur tiers va embarquer ducode proprietaire (essentiellement des pilotes mais aussi parfois des interfacesgraphiques)

Meme les telephones de developpement commercialises par Google (serie des Nexus)perdent une partie de leurs fonctionnalites lorsqursquoils sont recompiles uniquementa partir des sources publiques

La situation nrsquoest pas tres differente de celle drsquoun PC moderne dans lequel denombreux composants embarquent des firmwares proprietaires On peut notertoutefois que ces composants ont fait lrsquoobjet de nombreuses recherches ces dernieresannees Des risques de securite averes ont ete exhibes dans des composants telsque Intel vPro [5] les controleurs claviers [23] les cartes reseau [46] etc

7 httpwwwcomputerworldcomsarticle9180678Update_Oracle_sues_Google_over_Java_

use_in_Android

126 Securite du systeme Android

Plus proche du telephone la compromission du baseband a ete demontree possiblerecemment [7] La securite de la plateforme ne peut pas srsquoenvisager sans la securitedes composants materiels qui la compose

5 Les interfaces avec le systeme drsquoexploitation ne sont pas celles de Linux

On peut meme raisonnablement affirmer que lrsquoAPI Java exposee aux applicationsest radicalement differente de celle utilisee dans la programmation Unix tradition-nelle Lrsquointerface graphique nrsquoest pas X11 (heureusement ) Les communicationsinter-processus doivent passer par un mecanisme specifique appele Binder Denombreux concepts drsquoexecution adaptes aux contraintes drsquoun smartphone ont etemodelises (ex processus de type Activity Service Broadcast Receiver ou ContentProvider)

33 Developpement drsquoapplications

Le developpement sous Android srsquoeffectue majoritairement en langage Java ce quicontribue a la popularite de la plateforme aupres des developpeurs Un SDK est fournigratuitement par Google pour les trois systemes drsquoexploitation majeurs (WindowsMac OS X et Linux) Ce SDK peut srsquointegrer dans lrsquoIDE bien connu Eclipse oufonctionner en ligne de commande Il dispose drsquoun emulateur (base sur QEmu) ainsique drsquooutils de mise au point puissants (comme DDMS)

Apres compilation lrsquoutilitaire DX (fourni dans le SDK) permet de convertir lebytecode Java en bytecode Dalvik Lrsquooperation inverse nrsquoest pas possible avec lesoutils du SDK officiel

Lrsquoapplication installable sur le telephone est empaquetee dans un fichier APK quiinclut le bytecode de lrsquoapplication elle-meme (fichier CLASSESDEX) le manifestedrsquoapplication ses ressources et les signatures numeriques Le concept est identique acelui des fichiers JAR ndash les fichiers APK sont drsquoailleurs eux-memes des archives ZIP

Le developpement drsquoapplications est un peu deroutant de prime abord - lrsquoapplica-tion ne disposant pas drsquoun point drsquoentree fixe (de type main()) mais srsquoenregistrantplutot aupres du systeme pour repondre a des evenements appeles Intents dans ladocumentation officielle

Il est egalement possible drsquointegrer du code natif dans une application Java parune interface JNI et le kit de developpement officiel appele NDK (Native DevelopmentKit) De nombreuses applications cryptographiques exploitent cette opportunite pourameliorer les performances des algorithmes gourmands et assurer la securite deselements cryptographiques en memoire (le mecanisme de garbage collector de Javaetant difficilement compatible avec lrsquoeffacement securise de donnees en memoire)

Il nrsquoest pas possible de developper une application 100 native et de la mettre adisposition sur une MarketPlace Il reste assez simple de compiler une application

N Ruff 127

100 native mais un code Open Source existant pour Linux ne va pas necessairementrecompiler et fonctionner sans modification sur une plateforme Android Lrsquoabsence debinsh et de etcpasswd sont par exemple deux ecueils auxquels jrsquoai ete confrontes

Lrsquoobjectif nrsquoest pas ici drsquoecrire un tutoriel pour le developpement drsquoapplicationsAndroid drsquoautant que la documentation Google est tres bien faite 8

34 Modele de securite

Le modele de securite Android nrsquoa guere evolue depuis ses origines il a donc dejaete abondamment commente [1] Son etude reste neanmoins un prealable obligatoirea toute analyse de risques sur cette plateforme

Signature numerique Les applications sont signees numeriquement Ceci est sourcede confusion dans lrsquoesprit du grand public et meme des informaticiens qui associentgeneralement la presence drsquoun certificat a celle drsquoune securite inviolable probablementa cause de la propagande realisee par les acteurs du e-commerce autour du protocoleHTTPS (les fameuses vertus du cadenas jaune et plus recemment de la barre drsquoadresseverte)

En pratique tous les systemes de signature numerique apparus recemment dansles marches grand public (ex programme Symbian Signed signature des appli-cations iPhone signature des pilotes Windows 64 bits) nrsquooffrent aucune securite apriori Le cout drsquoacquisition drsquoun certificat est marginal et les verifications opereesquasiment nulles Le certificat sert essentiellement drsquoidentifiant unique pour permettrela revocation a posteriori

Afin drsquoeviter les problemes drsquoexpiration et de renouvellement des cles Googleimpose meme lrsquoutilisation de certificats de signature dont la date drsquoexpiration depassele 22 octobre 2033 9

Cloisonnement A lrsquoinstallation chaque application se voit attribuer un compteUnix (uid) Lrsquoisolation entre applications est rendue possible par les mecanismes desecurite natifs du systeme Unix

Lrsquoensemble des applications signees par le meme certificat srsquoexecutent sous la memeidentite de groupe Unix (gid) Les interactions possibles entre applications signeespar le meme certificat sont nombreuses 10 ndash elles peuvent ainsi partager le memeuid 11 ce qui ouvre la voie a la creation drsquoapplications malveillantes k-aires chaque

8 httpdeveloperandroidcom

9 httpdeveloperandroidcomguidepublishingapp-signinghtml

10 httpdeveloperandroidcomguidetopicssecuritysecurityhtml

11 httpdeveloperandroidcomreferenceandroidRattrhtmlsharedUserId

128 Securite du systeme Android

application ne possedant qursquoun jeu limite de permissions (jugees peu dangereusesindividuellement) mais la combinaison de toutes ces applications dans le memeprocessus formant une super application pouvant par exemple exfiltrer toutes lesdonnees du telephone

Revocation Compte-tenu de lrsquoaccroissement du nombre drsquoapplications malveillantessur la MarketPlace officielle Google fait un usage de plus en plus frequent dukill switch 12 ndash fonction qui permet drsquoeliminer a distance toutes les instances drsquouneapplication identifiee par son certificat

Pour ceux que cette fonction intrigue je signale que le mecanisme sous-jacent adeja ete decortique en detail [1819] Le cœur du mecanisme repose sur le processusGTalkService qui recoit et traite les messages REMOVE ASSET (et INSTALL ASSET) Laconclusion en est que toute personne en position drsquoeffectuer un man-in-the-middleSSL avec un certificat valide peut emettre de tels messages La liste des autorites deconfiance du systeme se trouve dans le fichier systemetcsecuritycacertsbkset ne peut pas facilement etre modifiee 13 Toutefois cette liste contient (sur montelephone) 58 autorites de nature variee (entreprises gouvernements etc) De plusune application malveillante ayant eleve ses privileges vers root pourrait probablementbloquer lrsquoutilisation du kill switch sur un equipement donne une fois les mecanismessous-jacents connus et documentes

Par le passe la securite basee sur la revocation a montre ses limites 14 En effetcela suppose que lrsquoequipement cible dispose drsquoune connexion a un reseau de donneeset qursquoil soit configure pour en faire usage Ce sont des hypotheses assez fortes

35 Les permissions

Considerations generales Le modele de securite des applications tierce partieest essentiellement declaratif Un fichier de manifeste decrit les permissionsmaximales requises par lrsquoapplication Google definit une centaine de permissionspossibles par defaut 15 mais les constructeurs sont libres drsquoen ajouter egalement cequi peut engendrer des risques specifiques a un modele de telephone donne

La commande de base permettant de manipuler les permissions sur le telephonesrsquoappelle pm Voici les options qursquoelle offre

$ adb shell pm

12 httpandroid-developersblogspotcom201006exercising-our-remote-applicationhtml

13 httpwwwmcbsyscomtechblog201012android-certificates

14 httpwwwf-securecomweblogarchives00001918html

15 httpdeveloperandroidcomreferenceandroidManifestpermissionhtml

N Ruff 129

usage pm [list|path|install|uninstall]

pm list packages [-f]

pm list permission -groups

pm list permissions [-g] [-f] [-d] [-u] [GROUP]

pm list instrumentation [-f] [TARGET -PACKAGE]

pm list features

pm path PACKAGE

pm install [-l] [-r] [-t] [-i INSTALLER_PACKAGE_NAME] [-s] [-f] PATH

pm uninstall [-k] PACKAGE

pm enable PACKAGE_OR_COMPONENT

pm disable PACKAGE_OR_COMPONENT

pm setInstallLocation [0 auto] [1 internal] [2 external]

()

A titre drsquoexemple voici les permissions definies par HTC sur lrsquoune de mes plate-formes de test

$ adb shell pm list permissions | grep htc

permissioncomhtcandroidmailpermissionREAD_MAIL

permissioncomhtcManifestpermissionBROADCAST_KEYIN_EVENT

permissioncomhtcManifestpermissionBROADCAST_MOTION_EVENT

permissioncomhtcManifestpermissionBLOCK_KEYBOARD_EVENT

permissioncomhtcandroidmailpermissionWRITE_ACCOUNT

permissioncomhtcandroidmailpermissionREAD_ACCOUNT

permissioncomhtchtctwitterpermissionuseprovider

permissioncomhtcManifestpermissionBROADCAST_TRACKBALL_EVENT

permissioncomhtcinternalpermissionHTC_APP_PMEM

permissioncomhtcandroidmailpermissionWRITE_MAIL

On notera egalement que cette plateforme contient des permissions a priorispecifiques a lrsquooperateur (americain) Sprint - alors qursquoil srsquoagit drsquoun telephone acheteen France sans abonnement

$ adb shell pm list permissions | grep sprint

permissioncomsprintinternalpermissionSLOT0

permissioncomsprintinternalpermissionPLATFORM

permissioncomsprintinternalpermissionSYSTEMPROPERTIES_WRITE

permissioncomsprintinternalpermissionSYSTEMPROPERTIES

permissioncomsprintinternalpermissionCONNECTIONMANAGER

permissioncomsprintinternalpermissionOMADM

permissioncomsprintandroidpermissionDISABLE_HDMI

Lrsquoutilisateur est libre drsquoaccepter ou de refuser lrsquoapplication mais il ne peut pasmodifier la liste des permissions demandees (sauf a modifier lrsquoapplication et a lare-signer avec sa propre cle comme nous le verrons plus tard)

On peut raisonnablement estimer que la plupart des utilisateurs ne sont pas enmesure drsquoeffectuer un choix eclaire a ce stade

130 Securite du systeme Android

Securite theorique Lrsquoune des questions qursquoon peut se poser sur le systeme depermissions tel qursquoil a ete defini est lrsquoexistence (ou non) drsquoun modele theorique sous-jacent coherent [98] Est-ce que chaque permission correspond bien a un ensemble detaches uniques et strictement delimitees Crsquoest la meme question qui se pose avec lemodele des capabilities sous Linux et dans ce deuxieme cas la reponse est non CAP SYS MODULE permet par exemple de charger des modules noyau arbitraires etdonc de compromettre entierement lrsquointegrite du noyau

Dans le cas drsquoAndroid on peut suspecter que la permission SYSTEMPROPERTIES WRITE

definie par lrsquooperateur Sprint (vue precedemment) a probablement une intersectionnon nulle avec la permission WRITE SETTINGS definie par Google tout en etantprobablement inconnue des outils drsquoanalyse automatique drsquoinnocuite

Lrsquointeret pratique drsquoune etude mathematique sur les permissions Android esttoutefois limite En effet les deux risques majeurs rencontres dans la nature sont

ndash Des applications malveillantes qui demandent des permissions excessivementlarges et abusent de la confiance des utilisateurs

ndash Des applications malveillantes sans aucune permission qui exploitent des faillessysteme pour obtenir lrsquoacces au compte root et contourner entierement lemodele de securite

Ces risques sont partages avec tous les autres modeles de securite en usage danslrsquoindustrie (SELinux sous Linux UAC sous Windows etc)

ndash Ces modeles se heurtent a lrsquoergonomie des interfaces et a la prise de decisioneclairee par les utilisateurs finaux

ndash Lrsquoimplementation de ces modeles exige un effort de conception important tandisque les attaquants les contournent entierement en violant les hypotheses deconception (en particulier lrsquohypothese que le noyau du systeme drsquoexploitationest exempt de bogues)

Autres limites du modele Presque toutes les applications existantes exigent unacces illimite au reseau tres souvent pour recuperer du contenu publicitaire Enpratique cela signifie que le risque pose par une application ne se limite pas a unensemble de permissions statiques par exemple un contenu malveillant pourra etreenvoye a tout moment au moteur de rendu WebKit a travers le canal publicitaire etprovoquer ainsi la prise de controle drsquoun telephone donne au travers une applicationa priori saine

Les permissions demandees peuvent changer a lrsquooccasion drsquoune mise a jour Orla plupart des utilisateurs font confiance aux applications qursquoils ont deja installeesDepuis la version 22 drsquoAndroid lrsquoutilisateur peut autoriser les applications a semettre a jour automatiquement Fort heureusement la mise a jour automatique est

N Ruff 131

bloquee si les permissions demandees par lrsquoapplication changent De mon point devue le mecanisme de mise a jour automatique peut donc etre considere comme plutotbenefique pour lrsquoecosysteme

Enfin le code natif attache a une application (dans le cas drsquoutilisation du NDK)est essentiellement non verifiable contrairement au bytecode Dalvik Le modelede securite Unix vient donc srsquoajouter au modele de permissions Android

4 Panorama des risques

Jrsquoidentifie trois risques de securite majeurs applicables aux ordiphones mo-dernes

1 La structuration du marche de la telephonie

2 Les failles logicielles

3 Les applications tierce partie

Nous allons passer en revue ces trois risques Le troisieme risque est plus specifique alrsquoecosysteme Android dans lequel le role de chaque acteur est bien separe fournisseurde materiel fournisseur de logiciel fournisseur de service

Il se verifie moins dans des ecosystemes comme celui de lrsquoiPhone et du BlackBerrydans lesquels les fournisseurs du materiel et du logiciel sont les memes

41 Marche de la telephonie

Plusieurs acteurs majeurs interviennent dans le marche de la telephonie mobile

1 Les fabricants de materiels

2 Les fabricants de logiciels (en lrsquooccurrence Google)

3 Les circuits de distribution (pour lrsquoinstant les operateurs de telephonie mobile)

4 Les developpeurs drsquoapplications

5 Les fournisseurs de contenus et de services (regies publicitaires services en ligneetc)

Nous allons passer en revue les interets de ces acteurs et le role qursquoils jouent dansla securite de la plateforme a lrsquoexception des derniers qui sont trop divers et varies

Il faut noter que si demain Android venait a equiper drsquoautres biens de consomma-tion courante (ex televiseurs refrigerateurs etc) les parties prenantes (et donc lesconclusions de cette etude) ne seraient pas fondamentalement differentes

132 Securite du systeme Android

Fabricants de materiels Les fabricants de materiels vivent dans un monde extremementconcurrentiel et doivent minimiser le cout de developpement de leurs produits pourque lrsquooperateur puisse au final proposer son telephone a 1 Par ailleurs ils doiventegalement minimiser le time to market un telephone portable se demode tresvite la duree de vie commerciale drsquoun systeme est de lrsquoordre de 6 mois

En consequence logique les developpements sont bacles Les systemes pousses enproduction sont a peine testes et les fonctions de debogage restent souvent activees(comme en temoigne le shell root disponible sur le port TCP12345 des series HTCEvo et HTC Hero commercialisees par Sprint 16)

En regle generale aucun support technique nrsquoest offert apres la sortie drsquountelephone Les mises a jour officielles de firmware sont rarissimes dans le domaine dela telephonie mobile - a lrsquoexception notable drsquoApple qui propose des mises a jourpour le systeme iOS dans la fenetre de support de ses equipements a savoir 21

2ans

Ceci conduit a la proliferation de firmwares non officiels dont lrsquoinnocuite et la stabilitene peuvent pas etre garantis

Dans le cas tres precis de mon telephone LG GW620 livre sous Android 15 LGFrance 17 a promis une mise a jour vers Android 16 pendant plus drsquoun an avant definalement se retracter Des firmwares Android 21 et 22 drsquoexcellente facture ndash maisnon officiels ndash ont donc ete developpes par des amateurs 18 Sous la pression de sesutilisateurs LG a fini par sortir un firmware officiel mais trop tard

Fabricants de logiciels La concurrence fait rage dans le domaine des systemesdrsquoexploitation pour ordiphones

Des lors les editeurs de systemes drsquoexploitation doivent seduire tous les autresacteurs quitte a diminuer les contraintes de securite

ndash Pour seduire les utilisateurs il semble necessaire de disposer du plus grandnombre drsquoapplications dans sa MarketPlaceBien qursquoon puisse questionner cette logique (ne serait-il pas plus interessant dedisposer drsquoapplications utiles fiables et bien realisees ) la guerre des chiffresest neanmoins lancee

ndash Pour seduire les developpeurs drsquoapplications il est necessaire de leur faciliter letravail au maximumLe choix du langage Java et la mise a disposition drsquoun SDK gratuit pour Eclipseva dans ce sens Mais Google va meme plus loin en mettant a disposition un SDK

16 httpwwwunrevokedcomrootwikidokuphppublicunrevoked1_disclosure

17 httptwittercomlg_blog_france

18 httpopenetnacomopenetna

N Ruff 133

visuel pour les gens nrsquoayant aucune notion de developpement 19 On peutse poser des questions sur la securite (et la qualite en general) des applicationsqui en sortirontLa signature drsquoapplications fut egalement pendant longtemps une pierre drsquoachop-pement Lors du lancement du programme Symbian Signed on a pu lireque Symbian voulait tuer les developpeurs independants HeureusementlrsquoAppStore a depuis prouve le contraire et Android nrsquoa eu aucun mal a imposerla signature des sa genese

ndash Seduire les fabricants de materiels est assez simple il suffit de produire unsysteme gratuit et drsquoen assurer une bonne partie du support Ajoutez a celaune forte demande du marche et tout est en place pour garantir le succes

Circuits de distribution Lrsquoessentiel des ordiphones sont commercialises par lesoperateurs de telephonie mobile (Google ayant drsquoailleurs essuye un echec commercialsur la vente en direct du Nexus One)

Comme la plupart des acteurs de la chaine les operateurs cherchent a maximiserleurs revenus parfois au detriment de la securite

ndash Les operateurs personnalisent les systemes drsquoexploitation en y ajoutant desbogues

ndash Les operateurs tentent de rendre payantes des fonctions natives incitant de cefait les utilisateurs au piratage

Parmi les inventions geniales du marketing on peut citer le bridage du tethering(utilisation du telephone comme modem 3G) la geolocalisation payante (alors que letelephone dispose drsquoun GPS integre) lrsquoimpossibilite de regarder la tele ou drsquoecouterde la musique sur un lien WiFi (mais pas sur un lien 3G) etc

Des lors les utilisateurs sont tentes de debrider leur telephone (jailbreaking)drsquoinstaller des applications tierce partie douteuses voire drsquoinstaller des systemes nonofficiels sans garantie drsquoinnocuite

Developpeurs drsquoapplications Lrsquoun des moyens les plus efficaces pour seduire lesdeveloppements est de leur promettre des revenus consequents Pas facile dans unmonde ou la plupart des applications sont gratuites ou dont le prix nrsquoexcede pas 1

Tout drsquoabord le processus drsquoachat drsquoapplications est relativement simple grace aGoogle Checkout lorsque lrsquooperateur ne fournit pas lui-meme le service de facturationau travers de sa MarketPlace Pour les applications financees par la publicite lareputation de Google dans le domaine nrsquoest plus a faire (surtout depuis le rachat dela societe AdMob specialisee dans le domaine de la publicite sur mobiles)

19 httpappinventorgooglelabscomabout

134 Securite du systeme Android

Contrairement a ce qursquoon pourrait croire les deux methodes generent des reve-nus comparables comme le revele lrsquoauteur drsquoune application inutile mais pourtanttelechargee presque 100 000 fois a savoir Advanced Task Manager 20

Les developpeurs attires par des revenus encore plus rapides pourront etre tentespar le cote obscur de la telephonie mobile appels et SMS surtaxes vol (et revente)du carnet drsquoadresses collecte de lrsquohistorique du navigateur etc

Ce phenomene est loin drsquoetre marginal certaines applications etant clairementmalveillantes ndash comme SMSAndroidOSFakePlayera ou les applications editeespar 09Droid qui se font passer pour des applications bancaires officielles ndash drsquoautresetant simplement a la limite du marketing agressif ndash comme celles de lrsquoediteur francaisZeuzz

Plusieurs etudes soulignent la dangerosite des MarketPlaces generalement fi-nancees par les editeurs antivirus ces etudes ne sont toutefois pas drsquoune qualitescientifique suffisante pour etre citees ici Le risque semble neanmoins reel puisqueGoogle a retire en urgence des dizaines drsquoapplications de la MarketPlace dans le cadrede lrsquoaffaire DroidDream (nous y reviendrons)

42 Failles logicielles

Etat des lieux Compte-tenu de lrsquoutilisation massive de code Open Source dans lesysteme Android les failles drsquoimplementation logicielle sont faciles a identifier il suffitde suivre les alertes de securite des principaux projets Lorsqursquoils sont disponibles cequi nrsquoest pas forcement le cas pour le noyau Linux

Les vecteurs principaux (en termes de nombre de lignes de code et drsquoexposition)sont le systeme Linux et le navigateur Web (et particulierement le moteur WebKitcommun avec Safari)

Il ne faut pas oublier non plus qursquoAndroid integre Flash Player et vit avec lesmemes failles 21

Failles navigateur Comme dans tout navigateur Web de complexite importanteles failles sont nombreuses Ces failles nrsquoen restent pas moins dangereuses car ellesont ete demontrees exploitables sur Android 22 23

Lrsquoune drsquoentre elles est meme disponible dans Metasploit 24 Il srsquoagit drsquoune faillerelativement grave qui permet de lire nrsquoimporte quel fichier du telephone accessible

20 httparronlacom201008android-revenue-advanced-task-manager

21 httpwwwtheinquirernetinquirernews2034092android-smartphones-attack-flash-player-hackers

22 httpwwwexploit-dbcomexploits15423

23 httpwwwexploit-dbcomexploits16974

24 httpblogmetasploitcom201101mobile-device-security-and-android-filehtml

N Ruff 135

au processus navigateur - ce qui inclut lrsquointegralite de la carte SD puisque celle-ci estformatee en FAT (donc sans aucun controle drsquoacces)

On notera dans cette attaque lrsquoutilisation de lrsquoURL contentcomandroid

htmlfileproviderltfilenamegt qui permet de lire nrsquoimporte quel fichier du telephoneau travers drsquoun Content Provider 25 ndash une notion specifique a Android qui prometdrsquoetre encore source de nombreuses failles vu la surface drsquoattaque exposee

Par ailleurs outre les schemas traditionnels (file http etc) Androidsupporte par defaut des schemas plus specifiques et donc moins testes

Parmi les schemas supportes on peut citer content (qui permet de com-muniquer avec un Content Provider) market (qui permet drsquointeragir avec laMarketPlace comme par exemple marketdetailsid=ltpackagegt) ou android

resource (qui permet drsquoacceder a une ressource dans un paquet comme parexemple androidresourceltpaquetgtltressourcegt)

Failles systeme Les failles systeme ne sont pas legion mais ont toutes un impactcritique sur la securite du systeme

Parmi les failles les plus connues (car les plus exploitees dans la nature ) onpeut citer les failles publiees sur le site xSports 26 a savoir

ndash Exploid faille udev bien connue des administrateurs Linux CVE-2009-1185

ndash Rage Against The Cage faille liee au mauvais comportement du processusadb lorsque RLIMIT NPROC a ete atteint 27 - lrsquoappel a setuid() echoue mais leprocessus nrsquoen tient pas compte et continue son execution son lrsquoidentite root

ndash Killing In The Name Of faille permettant de modifier la valeur de la constanteglobale (normalement en lecture seule) rosecure en jouant sur une erreurdrsquoimplementation de devashmem Cette constante definie a la compilationdu systeme indique au processus adb srsquoil doit srsquoexecuter sous lrsquoidentite root 28

Les applications legitimes (comme VISIONary+ 29) ou malveillantes (la pluscelebre ayant probablement ete DroidDream [20] ) ne se privent pas drsquoexploiter cesfailles dans la nature

Il faut toutefois noter qursquoil existe une difference subtile entre obtenir un accesroot et obtenir un acces root persistant au redemarrage du telephone En effetbien qursquoil soit virtuellement possible drsquoecrire dans le repertoire system (au traversde la commande adb remount ou drsquoun remount rw a lrsquointerieur du terminal) un

25 httpdeveloperandroidcomguidetopicsproviderscontent-providershtml

26 httpstealthopenwallnetxSports

27 httpdtorsorg20100825reversing-latest-exploid-release

28 httpsourceandroidcomportingbuild_systemhtml

29 httpandroidmodacocomcontentsoftware32035019-nov-r14-visionary-one-click-root

136 Securite du systeme Android

certain nombre de telephones modernes disposent drsquoune protection contre le reflashageintempestif de la partition systeme Cette protection est souvent liee a lrsquoutilisationdrsquoun composant memoire capable de verifier une signature cryptographique (parexemple un composant eMMC 30)

Dans le jargon on dit que la possibilite de reflasher la partition systeme avecun firmware non signe necessite un telephone en mode S-OFF Sur de nombreuxtelephones de marque HTC 31 le mode courant (S-ON ou S-OFF) peut etre obtenuen appuyant sur la touche Volume Down au demarrage du telephone

Failles logiques Il existe une categorie de failles difficiles a detecter et pourtantdevastatrices les failles logiques

Lrsquoun des exemples les plus fameux est le deblocage du telephone en utilisant soncompte Google Dans certains cas de corruption de donnees ce processus peut echouercomme documente officiellement par Google 32

Dans ce cas le telephone doit normalement etre reinitialise en configuration drsquousine(lorsque crsquoest possible ndash la procedure exacte depend du constructeur) Heureusementil srsquoavere que le mot de passe null est toujours accepte comme valide

Un autre bogue celebre affecte le Motorola Droid et potentiellement drsquoautresLorsque le telephone est verrouille mais qursquoun appel entrant arrive il est possibledrsquoappuyer sur le bouton Back et ainsi drsquoarriver a lrsquoecran drsquoaccueil du telephone 33

Enfin une superbe faille logique a ete decouverte sur le site httpsmarket

androidcom qui permet drsquoinstaller a distance des applications sur un telephoneAndroid Grace a une faille de type XSS persistant sur ce site 34 il etait possible defaire installer une application puis de lrsquoexecuter automatiquement sur le telephonede nrsquoimporte quel utilisateur Un utilisateur pouvait etre victime de cette attaque encliquant sur un lien depuis son telephone ou son PC (sous reserve drsquoetre logue sousson compte Google)

La technique utilisee pour executer automatiquement lrsquoapplication apres soninstallation merite drsquoetre soulignee elle consiste a declarer dans le manifeste delrsquoapplication que celle-ci supporte un nouveau schema drsquoURI (par exemple trigger

) puis a invoquer un lien trigger depuis la page Web drsquoorigine

Que peut-on faire Compte-tenu de la quantite de code C embarque dans lesysteme Android il existe et il existera des bogues drsquoimplementation dans ce systeme

30 httpenwikipediaorgwikiMultiMediaCardeMMC

31 Un site de reference pour les telephones de marque HTC httpunrevokedcom32 httpcodegooglecompandroidissuesdetailid=3006

33 httptechcrunchcom20100111verizon-droid-security-bug

34 httpjonoberheideorgblog20110307how-i-almost-won-pwn2own-via-xss

N Ruff 137

conduisant pour certains a des failles de securite WebKit et le systeme Linux sontdes cibles de choix compte-tenu de la surface drsquoattaque exposee

Toutefois et contrairement a un systeme classique la mise a jour a grandeechelle srsquoavere extremement problematique pour plusieurs raisons

ndash Le facteur drsquoechelle (plusieurs millions drsquounites en circulation rien qursquoen France)ndash La diversite et le haut degre de personnalisation des plateformes materielles et

logiciellesndash La propriete du terminal (lorsqursquoil a ete achete par lrsquoutilisateur)ndash Les risques commerciaux en cas de blocage definitif du terminal (brick)On peut raisonnablement considerer qursquoen dehors du geek moyen aucun utilisateur

de smartphone sous Android nrsquoa jamais mis a jour son systemeLes statistiques officielles de Google sur la repartition des ordiphones par version

drsquoAndroid permettent de se faire une idee objective sur la vitesse de renouvellementdu parc 35 A lrsquoheure ou jrsquoecris ces lignes malgre la disponibilite du systeme Android23 la majorite du parc se compose encore de systemes Android 21 et 22 ndash sanscompter sur les irreductibles 6 qui disposent drsquoune version anterieure Je laisseaux statisticiens le soin de produire une etude plus detaillee qui sera neanmoinsbiaisee par le fait que les donnees mondiales sont agregees tandis que les politiquesde renouvellement des operateurs sont tres variables drsquoun pays a lrsquoautre

Dans ces conditions il est loin le moment ou un operateur mobile fera du NAC-NAP sur son reseau pour interdire la connexion de ordiphones qui ne sont pas a jourdes correctifs

Techniquement le protocole FOTA (Firmware Over-The-Air) permet toutefoisde mettre a jour a distance des terminaux Ce protocole a deja ete utilise a grandeechelle lorsqursquoune backdoor (exploitable a distance) a ete decouverte sur certainstelephones HTC de modele Hero et Evo

5 Audit drsquoapplications Android

51 Auditer pourquoi

Lrsquoaudit securite drsquoapplications tierces est une activite vieille comme le conseil ensecurite Toutefois le circuit de distribution logicielle etant assez different entre lemonde du logiciel drsquoentreprise et les MarketPlaces pour mobiles il est vrai que laquestion merite drsquoetre posee a nouveau

A lrsquoheure ou jrsquoecris ces lignes Google nrsquoeffectue aucune verification de securite surles applications publiees dans lrsquoAndroid Market Cet etat de fait pourrait changer

35 httpdeveloperandroidcomresourcesdashboardplatform-versionshtml

138 Securite du systeme Android

compte-tenu de la proliferation drsquoapplications malveillantes de plus en plus agressiveset sophistiquees

Parmi tous les risques lies aux terminaux mobiles (vol de lrsquoequipement intrusionvia une faille du navigateur etc) on constate dans les faits que le risque principalaujourdrsquohui est la proliferation drsquoapplications malveillantes La malveillance estune notion assez floue et certaines applications peuvent se situer dans une zone grise - comme lrsquoapplication de voix sur IP Viber 36 qui duplique tous les contactsde lrsquoutilisateur sur un serveur central faisant office drsquoannuaire telephonique Maisdrsquoautres applications font lrsquounanimite contre elles comme les applications utilisant desfailles systeme pour elever leurs privileges vers root etou envoyer des SMS surtaxessans le consentement de lrsquoutilisateur Ces applications sont drsquoailleurs tuees parGoogle une fois identifiees car elles violent clairement les regles drsquoutilisation delrsquoAndroid Market

Les circuits qui conduisent a lrsquoapparition drsquoune application malveillante sontmultiples

ndash Malveillance deliberee de lrsquoauteur qui veut gagner de lrsquoargent rapidement Crsquoestle cas le plus simple Un scenario courant consiste a cloner une applicationen vogue tout en y ajoutant du code malveillant

ndash Compromission drsquoun editeur drsquoapplications a son insu Crsquoest la ligne de defenseadoptee par plusieurs editeurs drsquoapplications apres avoir ete pointe du doigtCette defense est malheureusement credible car la plupart des developpeurs sontdes individus isoles ou des micro-entreprises attirees par les success stories a laAngry Birds et bien souvent sans aucune securite dans les developpements

ndash Integration de librairies tierce partie malveillantes dans un programme sainLrsquoauteur drsquoune application populaire (a savoir Tank Hero ) a ainsi an-nonce avoir ete contacte par un fournisseur drsquoapplications probablementmalveillantes qui lui proposait un accord commercial 37

Mais lrsquoidentification des applications malveillantes nrsquoest pas la seule raison quipeut conduire a auditer une application Android Parmi drsquoautres raisons legitimes on peut citer

ndash Verifier que lrsquoapplication fait bien ce qursquoelle pretend faire Ce point est parti-culierement critique pour les applications de securite qui mettent en œuvre duchiffrement ou de la gestion de mots de passe par exemple Dans le domaineles surprises sont nombreuses drsquoautant que les applications mobiles nrsquoont pasencore la maturite des applications bureautiques et que les contraintes

36 httpwwwvibercom

37 httpwwwredditcomrAndroidcommentsfm3cuspyware_company_wants_us_to_embed_

their_code_into

N Ruff 139

du monde embarque se font sentir (puissance de calcul sources drsquoentropieremanence de lrsquoallocateur memoire Java etc)

ndash Recherche des failles de securite Et oui les applications Android sont aussivulnerables aux buffer overflows lorsqursquoelles utilisent du code natif (compileavec le NDK) et meme des injections SQL (meme si SQLite nrsquoimplemente pasdrsquoequivalent a xp cmdshell) Il existe par ailleurs des attaques specifiques aumonde Android comme les BroadcastReceiver qui ne verifieraient pas la sourcedes messages recus

Le probleme principal avec lrsquoaudit drsquoapplications Android nrsquoest pas techniqueLe probleme crsquoest lrsquoeuphorie du marche proliferation drsquoapplications et mises a jourfrequentes qui obligent a automatiser et industrialiser les audits 38

52 Auditer comment

Lrsquoaudit securite est une tache difficile a modeliser car elle tire parti de la creativitede lrsquoauditeur On peut toutefois identifier les grandes lignes suivantes

1 Recuperer lrsquoapplication

2 Decompresser les ressources

3 Desassembler le bytecode

4 Decompiler le bytecode (lorsque crsquoest possible)

5 Desassembler le code natif

6 Deboguer lrsquoapplication en cours drsquoexecution (sur un telephone reel ou danslrsquoemulateur)

Cette methodologie nrsquoest pas exhaustive elle ne donne pas acces au contenutelecharge ulterieurement (par exemple au travers des publicites integrees) Voyonsles methodes et les difficultes associees a chaque etape

Recuperer lrsquoapplication Cette etape nrsquoest pas trop compliquee pour qui est preta installer lrsquoapplication cible sur son telephone Apres installation le fichier APK estconserve dans le repertoire dataapp Selon les permissions appliquees au systeme defichiers il nrsquoest pas necessairement possible de lister le contenu de ce repertoire maisles paquets restent lisibles par lrsquooutil adb et le nom de paquet peut etre determinedepuis la MarketPlace ou le menu parametres du telephone (le nom exact estpaquet-Napk ou N vaut generalement 1)

38 httpwwwappanalysisorg

140 Securite du systeme Android

Toute autre methode est complexe et probablement illegale Parmi les methodespossibles on peut citer lrsquoinstallation de lrsquoapplication MarketPlace dans un emulateurou le reverse engineering de lrsquoapplication MarketPlace a des fins de reimplementation(cette derniere etant toutefois volumineuse donc complexe a analyser)

Depuis la version 22 du systeme Android et si lrsquoapplication lrsquoautorise il estpossible drsquoinstaller une application sur la carte SD Mais lrsquoapplication est alorsstockee dans un fichier asec chiffre Ce fichier est inexploitable jusqursquoa ce quele mecanisme et la cle de chiffrement soient connus

On peut imaginer qursquoune application extremement malveillante pourrait exploiterune faille des lrsquoinstallation pour elever ses privileges vers root et dissimuler ses traces(ie se rendre inaccessible de lrsquoexterieur) Ce cas ne srsquoest pas encore produit dansla nature a lrsquoheure ou jrsquoecris ces lignes mais srsquoavere techniquement faisable

Il faut noter que la MarketPlace de Google nrsquoest pas la seule disponible maisqursquoil existe egalement des MarketPlaces drsquooperateurs ou de tiers ainsi Amazoncommercialise desormais des applications Android 39 Cette proliferation complexifiedrsquoautant la tache drsquoanalyse des MarketPlaces La methode la plus universelle pourrecuperer la source drsquoinstallation drsquoune application reste donc de lrsquoinstaller sur untelephone

Un utilisateur peut installer des applications depuis des sources externes a laMarketPlace si lrsquooption autoriser les sources inconnues est cochee dans lesparametres de configuration Il existe des applications legitimes accessibles en dehorsdes MarketPlaces mais il existe egalement des bases drsquoapplications piratees surInternet dont lrsquoinnocuite ne peut pas etre garantie

Notons que certaines applications meme parmi celles disponibles sur les Market-Places officielles exigent au prealable un acces root au telephone

Decompresser les ressources Les fichiers places a lrsquointerieur drsquoun paquet APKsont optimises drsquoune maniere ou drsquoune autre avant drsquoetre compresses Ceci srsquoappliqueaussi bien au bytecode qursquoaux ressources textuelles (comme les fichiers XML)

Lrsquoune des optimisations principales est la deduplication de donnees Ainsi ilnrsquoexiste qursquoune seule instance de chaque chaine de caracteres dans un fichier DEXDifferents encodages optimises sont egalement utilises tel que LEB128 pourla representation des entiers (Little Endian Base 128 aussi utilise dans le formatDWARF)

Toutes ces optimisations nrsquoont pas pour but la protection logicielle et sont parfai-tement reversibles Lrsquooutil aapt fourni avec le SDK officiel permet ainsi drsquoexplorerle contenu du manifeste drsquoun paquet APK Les techniques drsquooptimisation ont ete

39 httpwwwamazoncomappstore

N Ruff 141

analysees et documentees par des tiers ce qui a permis la production drsquooutils dedecompression comme apktool 40

Desassembler le bytecode Avec le SDK officiel est fourni lrsquooutil dexdump quipermet de lister le bytecode contenu dans un fichier CLASSESDEX

Le format de fichier DEX a ete lui aussi analyse et documente 41 ce qui a permisla production de desassembleurs tiers comme baksmali

Le code genere suit la syntaxe Jasmin 42 bien connue dans le monde Java tra-ditionnel Cette syntaxe peut sembler obscure de prime abord mais elle est par-faitement reguliere donc finalement tres simple a apprehender Prenons un exempleissu drsquoune application reelle voici ci-dessous le code drsquoune methode appeleeemptyResult telle que produit par baksmali

method protected static emptyResult(LjavalangString )Z

locals 1

parameter result

prologue

line 306

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Toutes les directives commencent par un point Leur nom est relativement explicitelocals 1 va par exemple indiquer la presence drsquoune seule variable locale Le nomassigne aux opcodes de la machine virtuelle est egalement assez parlant

pN represente lrsquoargument numero N passe a la methode vN represente le re-gistre numero N (Dalvik est une machine virtuelle a registres et non a pile)

Munis de ces informations decortiquons la seule operation reellement complexeeffectuee dans cet extrait de code

40 httpcodegooglecompandroid-apktool

41 httpwwwnetmitecomandroidmydroiddalvikdocsdex-formathtml

42 httpjasminsourceforgenet

142 Securite du systeme Android

invoke-static Invoque une methode sta-tique Il existe egalementun opcode invoke-virtual

pour les methodes virtuellesinvoke-super pour la methodede la superclasse etc

p0 La methode appelee prend unseul argument La valeur de cetargument provient du premierargument passe a la methodeemptyResult

LcomutilsStringUtils-gtisEmpty Invoque la methode isEmpty de laclasse comutilsStringUtils L est un prefixe accole a tousles litteraux

(LjavalangString) Le premier (et seul) argument estde type javalangString

Z La methode retourne un booleen

A titre de reference voici les differents types natifs disponibles dans Jasmin

Z BooleenB OctetC CaractereS Entier court (16 bits)I Entier (32 bits)J Entier long (64 bits)F Flottant (32 bits)D Double (64 bits)

Lrsquoavantage majeur de lrsquooutil tiers apktool est la possibilite de modifier le bytecodeou les ressources drsquoune application puis de la recompiler dans une version fonctionnelleCeci permet drsquoutiliser une technique drsquoanalyse aussi ancienne que lrsquoinformatiqueappelee printf debugging

Dans le monde Android lrsquoutilisation de Systemout doit etre remplacee parandroidutilLog Cette classe definit plusieurs methodes ndash respectivement v d iw e et wtf ndash qui correspondent chacune a un niveau de verbosite ndash et dont lesarguments sont enregistres dans le journal systeme (sauf le niveau debug) Cejournal peut etre consulte a lrsquoaide de la commande adb logcat apparait en temps

N Ruff 143

reel dans lrsquooutil DDMS et peut egalement etre consulte par toute application quidispose de la permission READ LOGS

Si lrsquoon souhaite connaitre lrsquoargument passe a la methode emptyResult danslrsquoexemple precedent il suffit alors drsquoajouter un appel a nrsquoimporte quelle methode dela classe Log de la maniere suivante

method protected static emptyResult(LjavalangString )Z

locals 2

parameter result

prologue

line 306

const -string v1 PrintfDebuggingStyle

invoke -static v1 p0 LandroidutilLog-gtd(LjavalangStringLjavalang

String )I

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Une variable locale v1 a ete ajoutee contenant une chaine de caracteres fixe Lamethode d() est ensuite invoquee Cette modification est equivalente au code Javasuivant

Logd(PrintfDebuggingStyle ltp0 gt)

On peut constater experimentalement que de nombreuses applications de laMarketPlace font usage de lrsquoAPI Log ce qui permet de collecter des donnees defonctionnement parfois tres (trop) interessantes

Le journal systeme peut etre collecte a distance par un developpeur lors ducrash de son application si lrsquoutilisateur lrsquoautorise Cette technique a ete presenteepar Renaud Lifchitz lors de la conference 27c3 pour espionner les deplacements drsquounutilisateur 43

Decompiler le bytecode Comme avec tout bytecode de haut niveau (ex JavaNET) la semantique de lrsquoapplication est conservee

Il est donc possible de decompiler du bytecode Dalvik et de reconstruire le codeJava drsquoorigine (sans les commentaires ndash seule information perdue a la compilation) Lepremier outil public capable drsquoune telle operation fut undx 44 de Marc Schoenefeld Cetoutil est toutefois bogue et non maintenu par son auteur Le meilleur outil disponibleactuellement est lrsquooutil dex2jar 45 qui reconstruit du bytecode Java a partir du

43 httpeventscccdecongress2010Fahrplanevents4151enhtml

44 httpwwwillegalaccessorgundxhtml

45 httpcodegooglecompdex2jar

144 Securite du systeme Android

bytecode Dalvik Les outils classiques de decompilation Java 46 47 srsquoappliquentalors

Compte-tenu de la facilite deconcertante avec laquelle il est possible drsquoanalyserles applications Android (et donc de les craquer entre autres) Google a mis adisposition des developpeurs une bibliotheque tres complete de gestion des licences enligne Licensing Verification Library (LVL) 48 Toutes les versions de cette bibliothequeont malheureusement ete craquees elles aussi a lrsquoheure ou jrsquoecris ces lignes

Une autre contre-mesure mise en place par Google consiste a integrer un obfusca-teur de bytecode dans la chaine de compilation ProGuard 49 Cet outil relativementpuissant est configurable par le developpeur au travers du fichier proguardcfg toutefois le fichier de configuration par defaut (reproduit ci-apres) nrsquoopere que lerenommage des classes et methodes invisibles a lrsquoexterieur de lrsquoapplication ce qui estpeu efficace face a un attaquant determine

-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontpreverify

-verbose

-optimizations codesimplificationarithmetic field classmerging

-keep public class extends androidappActivity

-keep public class extends androidappApplication

-keep public class extends androidappService

-keep public class extends androidcontentBroadcastReceiver

-keep public class extends androidcontentContentProvider

-keep public class extends androidappbackupBackupAgentHelper

-keep public class extends androidpreferencePreference

-keep public class comandroidvendinglicensingILicensingService

-keepclasseswithmembernames class

native ltmethods gt

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet)

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet int)

-keepclassmembers enum

public static [] values ()

public static valueOf(javalangString)

46 httpmembersfortunecitycomneshkovdjhtml

47 httpjavadecompilerfreefr

48 httpdeveloperandroidcomguidepublishinglicensinghtml

49 httpdeveloperandroidcomguidedevelopingtoolsproguardhtml

N Ruff 145

-keep class implements androidosParcelable

public static final androidosParcelable$Creator

Au vu des resultats obtenus on peut considerer que lrsquoobfuscation de bytecode Javadans le monde Android est en retard sur lrsquoobfuscation de code x86 dans le monde PCLes techniques de complexification du flot de controle ou de construction dynamiquedes constantes ne sont pas encore repandues dans les applications commerciales pourAndroid Afin de combler ce manque des projets paralleles (comme AndroGuard 50)fleurissent - mais on peut supposer que la solution integree au SDK fourni par Googlerestera la solution majoritairement utilisee par les applications (pour des raisons desimplicite evidentes)

Desassembler du code natif Lors de lrsquoaudit drsquoune application Android il estpossible de rencontrer du code natif dans deux cas

1 Lrsquoapplication contient des bibliotheques natives compilees avec le NDK

2 Lrsquoapplication contient des applications natives ou srsquoavere etre elle-meme uneapplication native Ce cas est courant avec les applications malveillantes quiembarquent du code natif pour exploiter des failles noyau 51

Dans les deux cas Android ne presente aucune specificite par rapport a unLinuxARM classique Les fichiers natifs sont au format ELF La chaine de compilationnative est construite autour du compilateur GCC Tous les outils sont disponiblesdepuis longtemps pour analyser des tels binaires (ex IDA Pro Hex-Rays DecompilerARM etc)

Deboguer lrsquoapplication Une application Java compilee en mode debug peutetre deboguee a distance au travers du protocole standard Java Debug Wire Protocol(JDWP) defini dans le cadre de Java Platform Debugger Architecture (JPDA)

Les environnements de developpement Java classiques (comme Eclipse) per-mettent ainsi de deboguer une application a distance une fois celle-ci installee sur letelephone

Il est egalement possible drsquoutiliser le venerable JDB (fourni avec le SDK Java 52)bien que cet outil nrsquoait jamais depasse le statut de preuve de concept a mon avis

Lrsquooutil DDMS fourni avec le SDK Android repose egalement sur JPDA Cetoutil ne permet toutefois pas le debogage drsquoapplications mais seulement lrsquoanalyse deperformance

50 httpcodegooglecompandroguard

51 httpstealthopenwallnetxSports

52 httpdownloadoraclecomjavase142docstooldocssolarisjdbhtml

146 Securite du systeme Android

La liste des applications pouvant etre deboguees sur un systeme Android srsquoobtientavec la commande adb jdwp

Le vrai probleme se pose pour les applications qui nrsquoont pas ete compilees enmode debug Ceci implique que le manifeste de lrsquoapplication ne contient pasdrsquoentree ltapplication androiddebuggable=truegt De plus la plupart des outilsde debogage Java necessitent que le bytecode contienne des indications sur les numerosde lignes dans le code source drsquoorigine (il srsquoagit drsquoune limitation arbitraire qui nesrsquoapplique pas a lrsquooutil JavaSnoop 53 par exemple)

Fort heureusement il est possible de desassembler ces applications puis de lesreassembler en mode debug avec lrsquooutil apktool 54 Le processus est complexe etle resultat peu convivial mais il a le merite drsquoexister

Pour reinstaller lrsquoapplication modifiee sur un equipement reel il est necessairede la signer a nouveau La procedure est simple et parfaitement documentee parGoogle

Il faut drsquoabord generer une cle personnelle autosignee a duree de vie extremementlongue

$ keytool -genkey -v -keystore mykeykeystore -alias nom_alias -keyalg RSA -

keysize 2048 -validity 10000

Il faut ensuite signer le nouvel APK avec les outils du SDK Java

$ jarsigner -verbose -keystore mykeykeystore nom_applicationapk nom_alias

Enfin il est recommande drsquoaligner le code sur un multiple de 4 octets pour desraisons de performance

$ zipalign -v 4 nom_applicationapk nom_application_finalapk

Instrumentation Il est possible drsquoinstrumenter une application Java a lrsquoaide declasses specifiques a Android (androidappInstrumentation 55) Cette methodefournit des resultats detailles et personnalisables sur le fonctionnement interne drsquouneapplication elle necessite toutefois une decompilation et une modification prealablede lrsquoapplication a auditer

A lrsquoheure ou jrsquoecris ces lignes il nrsquoexiste pas (a ma connaissance) drsquooutil permettantde generaliser et drsquoautomatiser le processus a tout fichier APK Cette voie de recherchepourrait toutefois donner des resultats interessants

53 httpwwwaspectsecuritycomtoolsjavasnoop

54 httpcodegooglecompandroid-apktoolwikiSmaliDebugging

55 httpdeveloperandroidcomreferenceandroidappInstrumentationhtml

N Ruff 147

Outils specifiques Les outils disponibles actuellement dans le monde Android sontrudimentaires quoi que suffisants

Toutefois on peut raisonnablement estimer que la quantite et la qualite des outilsdisponibles va croitre de concert avec la popularite du systeme Android

A lrsquoheure ou jrsquoecris ces lignes la version 61 du logiciel IDA Pro 56 vient de sortirCette version ajoute le support du format DEX et du bytecode Dalvik ainsi que ledebogage a distance des applications Android natives

On peut supposer que drsquoautres outils couramment utilises par les auditeurs ensecurite vont etre mis a jour pour srsquoadapter au monde Android

6 Conclusion

Le systeme Android nrsquoa malheureusement pas profite de lrsquoopportunite unique quilui etait donnee repartir de la feuille blanche et creer un systeme drsquoexploitation sur par conception

A cause drsquoun heritage logiciel peu fiable ainsi que des contraintes materielles etcommerciales issues du monde de la telephonie mobile le systeme resultant est uncompromis qui laisse une large place a la creativite des attaquants

Celle-ci est drsquoautant plus exacerbee que la telephonie mobile est un phenomene demasse (il y a plus de telephones mobiles que drsquoordinateurs dans le monde) et que letelephone mobile est par conception un systeme de paiement (ce que nrsquoest pas un PCtraditionnel)

A ce tableau vient srsquoajouter 30 ans drsquoexperience dans le domaine des attaqueslogicielles appliquees a un ecosysteme applicatif qui nrsquoexistait pas il y a 5 ans

Toutes les conditions sont donc reunies pour que des attaques de grande ampleurmotivees par lrsquoargent se produisent contre les materiels grand public equipes dusysteme Android (telephones tablettes televisions )

La bonne nouvelle pour lrsquoexpert en securite crsquoest qursquoil est encore temps de srsquoymettre Android est suffisamment jeune et accessible aux nouveaux entrants ce quinrsquoest plus le cas de la plateforme PC ou les techniques drsquoattaque (ex exploitationdrsquoun heap overflow) et de defense (ex obfuscation logicielle) ont atteint des sommetsde raffinement desormais accessibles aux seuls experts les plus pointus du domaine

7 Sites et outils

71 Sites officiels

ndash Android portail officiel httpwwwandroidcom

56 httpwwwhex-rayscomidapro

148 Securite du systeme Android

ndash Android MarketPlace officielle httpsmarketandroidcomndash Android reference des developpeurs httpdeveloperandroidcom

72 Sites non officiels

ndash Reference de la machine virtuelle Dalvik httpdalvikvmcom

73 Outils tiers

ndash Google Android Debugging Utilities httpsitesgooglecomsiteortegaalfredoandroid

ndash Undx httpwwwillegalaccessorgundxhtmlndash SmaliBaksmali httpcodegooglecompsmalindash Dedexer httpdedexersourceforgenetndash Dex2Jar httpcodegooglecompdex2jarndash TaintDroid httpwwwappanalysisorg

ndash AndroGuard httpandroguardblogspotcom

References

1 Benjamin Morin Modele de securite drsquoAndroid MISC 51 2010

2 K Chen Reversing and exploiting an apple firmware update httpwwwblackhatcom

presentationsbh-usa-09CHENBHUSA09-Chen-RevAppleFirm-PAPERpdf BlackHat 2009

3 Alexandre Gazet Sticky fingers amp KBC Custom Shop httpwwwssticorg2011presentation

sticky_fingers_and_kbc_custom_shop SSTIC 2011

4 Loıc Duflot and Yves-Alexis Perez Quelques elements en matiere de securite des cartes reseau http

wwwssticorg2010presentationPeut_on_faire_confiance_aux_cartes_reseau SSTIC 2010

5 Alexander Tereshkin and Rafal Wojtczuk Introducing Ring -3 Rootkits httpwwwblackhat

compresentationsbh-usa-09TERESHKINBHUSA09-Tereshkin-Ring3Rootkit-SLIDESpdf Black-Hat USA 2009

6 Loıc Duflot Yves-Alexis Perez and Benjamin Morin Run-time firmware integrity verification what ifyou canrsquot trust your network card CanSecWest 2011

7 Ralf-Philipp Weinmann All Your Baseband Are Belong To Us httpeventscccdecongress

2010Fahrplanevents4090enhtml CCC 2010

8 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Formal Model to Analyzethe Permission Authorization and Enforcement in the Android Framework SecureComrsquo10

9 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Small but Non-negligibleFlaw in the Android Permission Scheme Wook Shin Sanghoon Kwak Shinsaku Kiyomoto KazuhideFukushima et Toshiaki Tanaka IEEE POLICY 2010

10 Marc Schonefled Reconstructing Dalvik Applications httpcansecwestcomcsw09

csw09-schoenefeldpdf CanSecWest 2009

N Ruff 149

11 Sergio Alvarez The Smart-Phones Nightmare (iPhone-oriented parts about Android) http

cansecwestcomcsw09csw09-alvarezpdf CanSecWest 2009

12 Nicolas Economou Alfredo Ortega Smartphone (in)security httpcansecwestcomcsw09

csw09-ortega-economoupdf CanSecWest 2009

13 Jesse Burns Exploratory Android Surgery httpwwwblackhatcompresentationsbh-usa-09

BURNSBHUSA09-Burns-AndroidSurgery-SLIDESpdf BlackHat USA 2009

14 Kevin Mahaffey John Hering App Attack httpsmediablackhatcombh-us-10presentations

Mahaffey_HeringBlackhat-USA-2010-Mahaffey-Hering-Lookout-App-Genome-slidespdf Black-Hat USA 2010

15 Nils The Risk you carry in your Pocket httpsmediablackhatcombh-ad-10Nils

Black-Hat-AD-2010-android-sandcastle-slidespdf BlackHat Abu Dhabi 2010

16 Raphael Rigo Android Reverse Engineering and Forensics httpsdeepsecnetdocsspeaker

htmlPSLOT45 DeepSec 2010

17 Itzhak Avraham Popping Shell on A(ndroid)RM Devices httpsmediablackhatcombh-dc-11

AvrahamBlackHat_DC_2011_Avraham-Popping_Android_Devices-Slidespdf BlackHat DC 2011

18 Jon Oberheide httpjonoberheideorgblog20100625remote-kill-and-install-on-google-android

19 Jon Oberheide httpjonoberheideorgblog20100628a-peek-inside-the-gtalkservice-connection

20 httpwwwandroidpolicecom20110301the-mother-of-all-android-

malware-has-arrived-stolen-apps-released-to-the-market-that-root-

your-phone-steal-your-data-and-open-backdoor

  • Seacutecuriteacute du systegraveme Android
  • N Ruff

124 Securite du systeme Android

ndash Lrsquoencodage des instructions est de taille fixe (16 ou 32 bits selon le mode duprocesseur THUMB ou ARM) Il est possible de jouer avec chaque bit alrsquointerieur drsquoune instruction (par exemple pour la rendre conditionnelle) ce quifacilite lrsquoecriture de shellcodes sans octets nuls

ndash La pile peut etre ascendante ou descendante Dans la pratique toutes lesimplementations ARM dont jrsquoai connaissance ont une pile qui fonctionne commesur architecture x86 (donc descendante)

ndash Le passage de parametres srsquoeffectue par registres ndash Enfin certaines implementations du processeur ARM supportent le bit XN

(eXecute Never) apparu avec ARMv6 Ce bit est equivalent au bit NXXD surarchitecture x86

Tous ces points ne sont pas specifiques au systeme Android et sont deja largementdocumentes par ailleurs La societe iSec avait deja publie un article sur lrsquoecriture deshellcodes ARM en 2001 3

32 Lrsquoheritage GNULinux

Android est un systeme drsquoexploitation Open Source (licence Apache v2) basesur le systeme GNULinux avec lequel il partage drsquoailleurs lrsquohebergement des sources 4

- meme si la perennite de ce modele pourrait etre remise en cause compte-tenu desdivergences croissantes entre les developpements realises par Google et la branchestable du noyau 5

Les differences avec une distribution Linux traditionnelle sont toutefois assezsignificatives

1 La librairie C nrsquoest pas la GNULibC traditionnelle mais une version developpeepar Google et denommee Bionic

On peut supposer que les deboires de Debian avec la GNULibC (et parti-culierement le support ARM 6) ne sont pas totalement etrangers a ce choixLa licence GNU pose egalement un probleme potentiel crsquoest pourquoi Google srsquoestplutot inspire du code issu des projets BSD (se reporter au repertoire bioniclibcdans les sources drsquoAndroid pour plus de details)

2 Les applications Java tierce partie doivent necessairement etre compilees enbytecode Dalvik

3 httpwwwisecplpapersinto_my_arms_dslspdf

4 httpandroidgitkernelorg

5 httpwwwkroahcomloglinuxandroid-kernel-problemshtml

6 httplinuxslashdotorgarticleplsid=0905062050216

N Ruff 125

Ce bytecode srsquoexecute dans une JVM specifique a Android denommee Dalvik enreference a un village islandais dont est issue la famille du chef de projet Il srsquoagitdrsquoune machine virtuelle a registres et non a pile comme la JVM de Sun Le bytecodeDalvik est par ailleurs tres similaire au bytecode Java mais pas completementidentique non plus

Le choix drsquoune JVM comme cible de developpement srsquoexplique par plusieurs raisonsparfaitement acceptables facilite de developpement de nouvelles applicationsabstraction de la plateforme materielle (les variantes et les revisions du processeurARM etant nombreuses) possibilite de verifier des proprietes de securite sur lebytecode etc

Toutefois il faut noter que depuis le rachat de la technologie Java par Oracle labataille juridique fait rage entre les deux editeurs 7

Le developpement de code natif est egalement possible au travers du NDK Ilnrsquoest toutefois pas possible de distribuer sur la MarketPlace des applications100 natives le code natif doit utiliser les API JNI pour srsquointerfacer avec uneapplication Java hote

3 Toutes les applications doivent etre signees numeriquement

Le mecanisme de signature Android nrsquoest pas base sur une PKI mondiale qui seraitdifficile a maintenir et commercialement suicidaire Un certificat autosigne generepar le developpeur est acceptable comme nous le verrons plus loin en abordant lemodele de securite du systeme

4 Un equipement physique nrsquoest pas entierement Open Source

Le milieu du materiel et des couches basses (ex pile de protocoles GSM) est tresconcurrentiel et reste traditionnellement assez hostile au concept de lrsquoOpenSource Un smartphone vendu par un constructeur tiers va embarquer ducode proprietaire (essentiellement des pilotes mais aussi parfois des interfacesgraphiques)

Meme les telephones de developpement commercialises par Google (serie des Nexus)perdent une partie de leurs fonctionnalites lorsqursquoils sont recompiles uniquementa partir des sources publiques

La situation nrsquoest pas tres differente de celle drsquoun PC moderne dans lequel denombreux composants embarquent des firmwares proprietaires On peut notertoutefois que ces composants ont fait lrsquoobjet de nombreuses recherches ces dernieresannees Des risques de securite averes ont ete exhibes dans des composants telsque Intel vPro [5] les controleurs claviers [23] les cartes reseau [46] etc

7 httpwwwcomputerworldcomsarticle9180678Update_Oracle_sues_Google_over_Java_

use_in_Android

126 Securite du systeme Android

Plus proche du telephone la compromission du baseband a ete demontree possiblerecemment [7] La securite de la plateforme ne peut pas srsquoenvisager sans la securitedes composants materiels qui la compose

5 Les interfaces avec le systeme drsquoexploitation ne sont pas celles de Linux

On peut meme raisonnablement affirmer que lrsquoAPI Java exposee aux applicationsest radicalement differente de celle utilisee dans la programmation Unix tradition-nelle Lrsquointerface graphique nrsquoest pas X11 (heureusement ) Les communicationsinter-processus doivent passer par un mecanisme specifique appele Binder Denombreux concepts drsquoexecution adaptes aux contraintes drsquoun smartphone ont etemodelises (ex processus de type Activity Service Broadcast Receiver ou ContentProvider)

33 Developpement drsquoapplications

Le developpement sous Android srsquoeffectue majoritairement en langage Java ce quicontribue a la popularite de la plateforme aupres des developpeurs Un SDK est fournigratuitement par Google pour les trois systemes drsquoexploitation majeurs (WindowsMac OS X et Linux) Ce SDK peut srsquointegrer dans lrsquoIDE bien connu Eclipse oufonctionner en ligne de commande Il dispose drsquoun emulateur (base sur QEmu) ainsique drsquooutils de mise au point puissants (comme DDMS)

Apres compilation lrsquoutilitaire DX (fourni dans le SDK) permet de convertir lebytecode Java en bytecode Dalvik Lrsquooperation inverse nrsquoest pas possible avec lesoutils du SDK officiel

Lrsquoapplication installable sur le telephone est empaquetee dans un fichier APK quiinclut le bytecode de lrsquoapplication elle-meme (fichier CLASSESDEX) le manifestedrsquoapplication ses ressources et les signatures numeriques Le concept est identique acelui des fichiers JAR ndash les fichiers APK sont drsquoailleurs eux-memes des archives ZIP

Le developpement drsquoapplications est un peu deroutant de prime abord - lrsquoapplica-tion ne disposant pas drsquoun point drsquoentree fixe (de type main()) mais srsquoenregistrantplutot aupres du systeme pour repondre a des evenements appeles Intents dans ladocumentation officielle

Il est egalement possible drsquointegrer du code natif dans une application Java parune interface JNI et le kit de developpement officiel appele NDK (Native DevelopmentKit) De nombreuses applications cryptographiques exploitent cette opportunite pourameliorer les performances des algorithmes gourmands et assurer la securite deselements cryptographiques en memoire (le mecanisme de garbage collector de Javaetant difficilement compatible avec lrsquoeffacement securise de donnees en memoire)

Il nrsquoest pas possible de developper une application 100 native et de la mettre adisposition sur une MarketPlace Il reste assez simple de compiler une application

N Ruff 127

100 native mais un code Open Source existant pour Linux ne va pas necessairementrecompiler et fonctionner sans modification sur une plateforme Android Lrsquoabsence debinsh et de etcpasswd sont par exemple deux ecueils auxquels jrsquoai ete confrontes

Lrsquoobjectif nrsquoest pas ici drsquoecrire un tutoriel pour le developpement drsquoapplicationsAndroid drsquoautant que la documentation Google est tres bien faite 8

34 Modele de securite

Le modele de securite Android nrsquoa guere evolue depuis ses origines il a donc dejaete abondamment commente [1] Son etude reste neanmoins un prealable obligatoirea toute analyse de risques sur cette plateforme

Signature numerique Les applications sont signees numeriquement Ceci est sourcede confusion dans lrsquoesprit du grand public et meme des informaticiens qui associentgeneralement la presence drsquoun certificat a celle drsquoune securite inviolable probablementa cause de la propagande realisee par les acteurs du e-commerce autour du protocoleHTTPS (les fameuses vertus du cadenas jaune et plus recemment de la barre drsquoadresseverte)

En pratique tous les systemes de signature numerique apparus recemment dansles marches grand public (ex programme Symbian Signed signature des appli-cations iPhone signature des pilotes Windows 64 bits) nrsquooffrent aucune securite apriori Le cout drsquoacquisition drsquoun certificat est marginal et les verifications opereesquasiment nulles Le certificat sert essentiellement drsquoidentifiant unique pour permettrela revocation a posteriori

Afin drsquoeviter les problemes drsquoexpiration et de renouvellement des cles Googleimpose meme lrsquoutilisation de certificats de signature dont la date drsquoexpiration depassele 22 octobre 2033 9

Cloisonnement A lrsquoinstallation chaque application se voit attribuer un compteUnix (uid) Lrsquoisolation entre applications est rendue possible par les mecanismes desecurite natifs du systeme Unix

Lrsquoensemble des applications signees par le meme certificat srsquoexecutent sous la memeidentite de groupe Unix (gid) Les interactions possibles entre applications signeespar le meme certificat sont nombreuses 10 ndash elles peuvent ainsi partager le memeuid 11 ce qui ouvre la voie a la creation drsquoapplications malveillantes k-aires chaque

8 httpdeveloperandroidcom

9 httpdeveloperandroidcomguidepublishingapp-signinghtml

10 httpdeveloperandroidcomguidetopicssecuritysecurityhtml

11 httpdeveloperandroidcomreferenceandroidRattrhtmlsharedUserId

128 Securite du systeme Android

application ne possedant qursquoun jeu limite de permissions (jugees peu dangereusesindividuellement) mais la combinaison de toutes ces applications dans le memeprocessus formant une super application pouvant par exemple exfiltrer toutes lesdonnees du telephone

Revocation Compte-tenu de lrsquoaccroissement du nombre drsquoapplications malveillantessur la MarketPlace officielle Google fait un usage de plus en plus frequent dukill switch 12 ndash fonction qui permet drsquoeliminer a distance toutes les instances drsquouneapplication identifiee par son certificat

Pour ceux que cette fonction intrigue je signale que le mecanisme sous-jacent adeja ete decortique en detail [1819] Le cœur du mecanisme repose sur le processusGTalkService qui recoit et traite les messages REMOVE ASSET (et INSTALL ASSET) Laconclusion en est que toute personne en position drsquoeffectuer un man-in-the-middleSSL avec un certificat valide peut emettre de tels messages La liste des autorites deconfiance du systeme se trouve dans le fichier systemetcsecuritycacertsbkset ne peut pas facilement etre modifiee 13 Toutefois cette liste contient (sur montelephone) 58 autorites de nature variee (entreprises gouvernements etc) De plusune application malveillante ayant eleve ses privileges vers root pourrait probablementbloquer lrsquoutilisation du kill switch sur un equipement donne une fois les mecanismessous-jacents connus et documentes

Par le passe la securite basee sur la revocation a montre ses limites 14 En effetcela suppose que lrsquoequipement cible dispose drsquoune connexion a un reseau de donneeset qursquoil soit configure pour en faire usage Ce sont des hypotheses assez fortes

35 Les permissions

Considerations generales Le modele de securite des applications tierce partieest essentiellement declaratif Un fichier de manifeste decrit les permissionsmaximales requises par lrsquoapplication Google definit une centaine de permissionspossibles par defaut 15 mais les constructeurs sont libres drsquoen ajouter egalement cequi peut engendrer des risques specifiques a un modele de telephone donne

La commande de base permettant de manipuler les permissions sur le telephonesrsquoappelle pm Voici les options qursquoelle offre

$ adb shell pm

12 httpandroid-developersblogspotcom201006exercising-our-remote-applicationhtml

13 httpwwwmcbsyscomtechblog201012android-certificates

14 httpwwwf-securecomweblogarchives00001918html

15 httpdeveloperandroidcomreferenceandroidManifestpermissionhtml

N Ruff 129

usage pm [list|path|install|uninstall]

pm list packages [-f]

pm list permission -groups

pm list permissions [-g] [-f] [-d] [-u] [GROUP]

pm list instrumentation [-f] [TARGET -PACKAGE]

pm list features

pm path PACKAGE

pm install [-l] [-r] [-t] [-i INSTALLER_PACKAGE_NAME] [-s] [-f] PATH

pm uninstall [-k] PACKAGE

pm enable PACKAGE_OR_COMPONENT

pm disable PACKAGE_OR_COMPONENT

pm setInstallLocation [0 auto] [1 internal] [2 external]

()

A titre drsquoexemple voici les permissions definies par HTC sur lrsquoune de mes plate-formes de test

$ adb shell pm list permissions | grep htc

permissioncomhtcandroidmailpermissionREAD_MAIL

permissioncomhtcManifestpermissionBROADCAST_KEYIN_EVENT

permissioncomhtcManifestpermissionBROADCAST_MOTION_EVENT

permissioncomhtcManifestpermissionBLOCK_KEYBOARD_EVENT

permissioncomhtcandroidmailpermissionWRITE_ACCOUNT

permissioncomhtcandroidmailpermissionREAD_ACCOUNT

permissioncomhtchtctwitterpermissionuseprovider

permissioncomhtcManifestpermissionBROADCAST_TRACKBALL_EVENT

permissioncomhtcinternalpermissionHTC_APP_PMEM

permissioncomhtcandroidmailpermissionWRITE_MAIL

On notera egalement que cette plateforme contient des permissions a priorispecifiques a lrsquooperateur (americain) Sprint - alors qursquoil srsquoagit drsquoun telephone acheteen France sans abonnement

$ adb shell pm list permissions | grep sprint

permissioncomsprintinternalpermissionSLOT0

permissioncomsprintinternalpermissionPLATFORM

permissioncomsprintinternalpermissionSYSTEMPROPERTIES_WRITE

permissioncomsprintinternalpermissionSYSTEMPROPERTIES

permissioncomsprintinternalpermissionCONNECTIONMANAGER

permissioncomsprintinternalpermissionOMADM

permissioncomsprintandroidpermissionDISABLE_HDMI

Lrsquoutilisateur est libre drsquoaccepter ou de refuser lrsquoapplication mais il ne peut pasmodifier la liste des permissions demandees (sauf a modifier lrsquoapplication et a lare-signer avec sa propre cle comme nous le verrons plus tard)

On peut raisonnablement estimer que la plupart des utilisateurs ne sont pas enmesure drsquoeffectuer un choix eclaire a ce stade

130 Securite du systeme Android

Securite theorique Lrsquoune des questions qursquoon peut se poser sur le systeme depermissions tel qursquoil a ete defini est lrsquoexistence (ou non) drsquoun modele theorique sous-jacent coherent [98] Est-ce que chaque permission correspond bien a un ensemble detaches uniques et strictement delimitees Crsquoest la meme question qui se pose avec lemodele des capabilities sous Linux et dans ce deuxieme cas la reponse est non CAP SYS MODULE permet par exemple de charger des modules noyau arbitraires etdonc de compromettre entierement lrsquointegrite du noyau

Dans le cas drsquoAndroid on peut suspecter que la permission SYSTEMPROPERTIES WRITE

definie par lrsquooperateur Sprint (vue precedemment) a probablement une intersectionnon nulle avec la permission WRITE SETTINGS definie par Google tout en etantprobablement inconnue des outils drsquoanalyse automatique drsquoinnocuite

Lrsquointeret pratique drsquoune etude mathematique sur les permissions Android esttoutefois limite En effet les deux risques majeurs rencontres dans la nature sont

ndash Des applications malveillantes qui demandent des permissions excessivementlarges et abusent de la confiance des utilisateurs

ndash Des applications malveillantes sans aucune permission qui exploitent des faillessysteme pour obtenir lrsquoacces au compte root et contourner entierement lemodele de securite

Ces risques sont partages avec tous les autres modeles de securite en usage danslrsquoindustrie (SELinux sous Linux UAC sous Windows etc)

ndash Ces modeles se heurtent a lrsquoergonomie des interfaces et a la prise de decisioneclairee par les utilisateurs finaux

ndash Lrsquoimplementation de ces modeles exige un effort de conception important tandisque les attaquants les contournent entierement en violant les hypotheses deconception (en particulier lrsquohypothese que le noyau du systeme drsquoexploitationest exempt de bogues)

Autres limites du modele Presque toutes les applications existantes exigent unacces illimite au reseau tres souvent pour recuperer du contenu publicitaire Enpratique cela signifie que le risque pose par une application ne se limite pas a unensemble de permissions statiques par exemple un contenu malveillant pourra etreenvoye a tout moment au moteur de rendu WebKit a travers le canal publicitaire etprovoquer ainsi la prise de controle drsquoun telephone donne au travers une applicationa priori saine

Les permissions demandees peuvent changer a lrsquooccasion drsquoune mise a jour Orla plupart des utilisateurs font confiance aux applications qursquoils ont deja installeesDepuis la version 22 drsquoAndroid lrsquoutilisateur peut autoriser les applications a semettre a jour automatiquement Fort heureusement la mise a jour automatique est

N Ruff 131

bloquee si les permissions demandees par lrsquoapplication changent De mon point devue le mecanisme de mise a jour automatique peut donc etre considere comme plutotbenefique pour lrsquoecosysteme

Enfin le code natif attache a une application (dans le cas drsquoutilisation du NDK)est essentiellement non verifiable contrairement au bytecode Dalvik Le modelede securite Unix vient donc srsquoajouter au modele de permissions Android

4 Panorama des risques

Jrsquoidentifie trois risques de securite majeurs applicables aux ordiphones mo-dernes

1 La structuration du marche de la telephonie

2 Les failles logicielles

3 Les applications tierce partie

Nous allons passer en revue ces trois risques Le troisieme risque est plus specifique alrsquoecosysteme Android dans lequel le role de chaque acteur est bien separe fournisseurde materiel fournisseur de logiciel fournisseur de service

Il se verifie moins dans des ecosystemes comme celui de lrsquoiPhone et du BlackBerrydans lesquels les fournisseurs du materiel et du logiciel sont les memes

41 Marche de la telephonie

Plusieurs acteurs majeurs interviennent dans le marche de la telephonie mobile

1 Les fabricants de materiels

2 Les fabricants de logiciels (en lrsquooccurrence Google)

3 Les circuits de distribution (pour lrsquoinstant les operateurs de telephonie mobile)

4 Les developpeurs drsquoapplications

5 Les fournisseurs de contenus et de services (regies publicitaires services en ligneetc)

Nous allons passer en revue les interets de ces acteurs et le role qursquoils jouent dansla securite de la plateforme a lrsquoexception des derniers qui sont trop divers et varies

Il faut noter que si demain Android venait a equiper drsquoautres biens de consomma-tion courante (ex televiseurs refrigerateurs etc) les parties prenantes (et donc lesconclusions de cette etude) ne seraient pas fondamentalement differentes

132 Securite du systeme Android

Fabricants de materiels Les fabricants de materiels vivent dans un monde extremementconcurrentiel et doivent minimiser le cout de developpement de leurs produits pourque lrsquooperateur puisse au final proposer son telephone a 1 Par ailleurs ils doiventegalement minimiser le time to market un telephone portable se demode tresvite la duree de vie commerciale drsquoun systeme est de lrsquoordre de 6 mois

En consequence logique les developpements sont bacles Les systemes pousses enproduction sont a peine testes et les fonctions de debogage restent souvent activees(comme en temoigne le shell root disponible sur le port TCP12345 des series HTCEvo et HTC Hero commercialisees par Sprint 16)

En regle generale aucun support technique nrsquoest offert apres la sortie drsquountelephone Les mises a jour officielles de firmware sont rarissimes dans le domaine dela telephonie mobile - a lrsquoexception notable drsquoApple qui propose des mises a jourpour le systeme iOS dans la fenetre de support de ses equipements a savoir 21

2ans

Ceci conduit a la proliferation de firmwares non officiels dont lrsquoinnocuite et la stabilitene peuvent pas etre garantis

Dans le cas tres precis de mon telephone LG GW620 livre sous Android 15 LGFrance 17 a promis une mise a jour vers Android 16 pendant plus drsquoun an avant definalement se retracter Des firmwares Android 21 et 22 drsquoexcellente facture ndash maisnon officiels ndash ont donc ete developpes par des amateurs 18 Sous la pression de sesutilisateurs LG a fini par sortir un firmware officiel mais trop tard

Fabricants de logiciels La concurrence fait rage dans le domaine des systemesdrsquoexploitation pour ordiphones

Des lors les editeurs de systemes drsquoexploitation doivent seduire tous les autresacteurs quitte a diminuer les contraintes de securite

ndash Pour seduire les utilisateurs il semble necessaire de disposer du plus grandnombre drsquoapplications dans sa MarketPlaceBien qursquoon puisse questionner cette logique (ne serait-il pas plus interessant dedisposer drsquoapplications utiles fiables et bien realisees ) la guerre des chiffresest neanmoins lancee

ndash Pour seduire les developpeurs drsquoapplications il est necessaire de leur faciliter letravail au maximumLe choix du langage Java et la mise a disposition drsquoun SDK gratuit pour Eclipseva dans ce sens Mais Google va meme plus loin en mettant a disposition un SDK

16 httpwwwunrevokedcomrootwikidokuphppublicunrevoked1_disclosure

17 httptwittercomlg_blog_france

18 httpopenetnacomopenetna

N Ruff 133

visuel pour les gens nrsquoayant aucune notion de developpement 19 On peutse poser des questions sur la securite (et la qualite en general) des applicationsqui en sortirontLa signature drsquoapplications fut egalement pendant longtemps une pierre drsquoachop-pement Lors du lancement du programme Symbian Signed on a pu lireque Symbian voulait tuer les developpeurs independants HeureusementlrsquoAppStore a depuis prouve le contraire et Android nrsquoa eu aucun mal a imposerla signature des sa genese

ndash Seduire les fabricants de materiels est assez simple il suffit de produire unsysteme gratuit et drsquoen assurer une bonne partie du support Ajoutez a celaune forte demande du marche et tout est en place pour garantir le succes

Circuits de distribution Lrsquoessentiel des ordiphones sont commercialises par lesoperateurs de telephonie mobile (Google ayant drsquoailleurs essuye un echec commercialsur la vente en direct du Nexus One)

Comme la plupart des acteurs de la chaine les operateurs cherchent a maximiserleurs revenus parfois au detriment de la securite

ndash Les operateurs personnalisent les systemes drsquoexploitation en y ajoutant desbogues

ndash Les operateurs tentent de rendre payantes des fonctions natives incitant de cefait les utilisateurs au piratage

Parmi les inventions geniales du marketing on peut citer le bridage du tethering(utilisation du telephone comme modem 3G) la geolocalisation payante (alors que letelephone dispose drsquoun GPS integre) lrsquoimpossibilite de regarder la tele ou drsquoecouterde la musique sur un lien WiFi (mais pas sur un lien 3G) etc

Des lors les utilisateurs sont tentes de debrider leur telephone (jailbreaking)drsquoinstaller des applications tierce partie douteuses voire drsquoinstaller des systemes nonofficiels sans garantie drsquoinnocuite

Developpeurs drsquoapplications Lrsquoun des moyens les plus efficaces pour seduire lesdeveloppements est de leur promettre des revenus consequents Pas facile dans unmonde ou la plupart des applications sont gratuites ou dont le prix nrsquoexcede pas 1

Tout drsquoabord le processus drsquoachat drsquoapplications est relativement simple grace aGoogle Checkout lorsque lrsquooperateur ne fournit pas lui-meme le service de facturationau travers de sa MarketPlace Pour les applications financees par la publicite lareputation de Google dans le domaine nrsquoest plus a faire (surtout depuis le rachat dela societe AdMob specialisee dans le domaine de la publicite sur mobiles)

19 httpappinventorgooglelabscomabout

134 Securite du systeme Android

Contrairement a ce qursquoon pourrait croire les deux methodes generent des reve-nus comparables comme le revele lrsquoauteur drsquoune application inutile mais pourtanttelechargee presque 100 000 fois a savoir Advanced Task Manager 20

Les developpeurs attires par des revenus encore plus rapides pourront etre tentespar le cote obscur de la telephonie mobile appels et SMS surtaxes vol (et revente)du carnet drsquoadresses collecte de lrsquohistorique du navigateur etc

Ce phenomene est loin drsquoetre marginal certaines applications etant clairementmalveillantes ndash comme SMSAndroidOSFakePlayera ou les applications editeespar 09Droid qui se font passer pour des applications bancaires officielles ndash drsquoautresetant simplement a la limite du marketing agressif ndash comme celles de lrsquoediteur francaisZeuzz

Plusieurs etudes soulignent la dangerosite des MarketPlaces generalement fi-nancees par les editeurs antivirus ces etudes ne sont toutefois pas drsquoune qualitescientifique suffisante pour etre citees ici Le risque semble neanmoins reel puisqueGoogle a retire en urgence des dizaines drsquoapplications de la MarketPlace dans le cadrede lrsquoaffaire DroidDream (nous y reviendrons)

42 Failles logicielles

Etat des lieux Compte-tenu de lrsquoutilisation massive de code Open Source dans lesysteme Android les failles drsquoimplementation logicielle sont faciles a identifier il suffitde suivre les alertes de securite des principaux projets Lorsqursquoils sont disponibles cequi nrsquoest pas forcement le cas pour le noyau Linux

Les vecteurs principaux (en termes de nombre de lignes de code et drsquoexposition)sont le systeme Linux et le navigateur Web (et particulierement le moteur WebKitcommun avec Safari)

Il ne faut pas oublier non plus qursquoAndroid integre Flash Player et vit avec lesmemes failles 21

Failles navigateur Comme dans tout navigateur Web de complexite importanteles failles sont nombreuses Ces failles nrsquoen restent pas moins dangereuses car ellesont ete demontrees exploitables sur Android 22 23

Lrsquoune drsquoentre elles est meme disponible dans Metasploit 24 Il srsquoagit drsquoune faillerelativement grave qui permet de lire nrsquoimporte quel fichier du telephone accessible

20 httparronlacom201008android-revenue-advanced-task-manager

21 httpwwwtheinquirernetinquirernews2034092android-smartphones-attack-flash-player-hackers

22 httpwwwexploit-dbcomexploits15423

23 httpwwwexploit-dbcomexploits16974

24 httpblogmetasploitcom201101mobile-device-security-and-android-filehtml

N Ruff 135

au processus navigateur - ce qui inclut lrsquointegralite de la carte SD puisque celle-ci estformatee en FAT (donc sans aucun controle drsquoacces)

On notera dans cette attaque lrsquoutilisation de lrsquoURL contentcomandroid

htmlfileproviderltfilenamegt qui permet de lire nrsquoimporte quel fichier du telephoneau travers drsquoun Content Provider 25 ndash une notion specifique a Android qui prometdrsquoetre encore source de nombreuses failles vu la surface drsquoattaque exposee

Par ailleurs outre les schemas traditionnels (file http etc) Androidsupporte par defaut des schemas plus specifiques et donc moins testes

Parmi les schemas supportes on peut citer content (qui permet de com-muniquer avec un Content Provider) market (qui permet drsquointeragir avec laMarketPlace comme par exemple marketdetailsid=ltpackagegt) ou android

resource (qui permet drsquoacceder a une ressource dans un paquet comme parexemple androidresourceltpaquetgtltressourcegt)

Failles systeme Les failles systeme ne sont pas legion mais ont toutes un impactcritique sur la securite du systeme

Parmi les failles les plus connues (car les plus exploitees dans la nature ) onpeut citer les failles publiees sur le site xSports 26 a savoir

ndash Exploid faille udev bien connue des administrateurs Linux CVE-2009-1185

ndash Rage Against The Cage faille liee au mauvais comportement du processusadb lorsque RLIMIT NPROC a ete atteint 27 - lrsquoappel a setuid() echoue mais leprocessus nrsquoen tient pas compte et continue son execution son lrsquoidentite root

ndash Killing In The Name Of faille permettant de modifier la valeur de la constanteglobale (normalement en lecture seule) rosecure en jouant sur une erreurdrsquoimplementation de devashmem Cette constante definie a la compilationdu systeme indique au processus adb srsquoil doit srsquoexecuter sous lrsquoidentite root 28

Les applications legitimes (comme VISIONary+ 29) ou malveillantes (la pluscelebre ayant probablement ete DroidDream [20] ) ne se privent pas drsquoexploiter cesfailles dans la nature

Il faut toutefois noter qursquoil existe une difference subtile entre obtenir un accesroot et obtenir un acces root persistant au redemarrage du telephone En effetbien qursquoil soit virtuellement possible drsquoecrire dans le repertoire system (au traversde la commande adb remount ou drsquoun remount rw a lrsquointerieur du terminal) un

25 httpdeveloperandroidcomguidetopicsproviderscontent-providershtml

26 httpstealthopenwallnetxSports

27 httpdtorsorg20100825reversing-latest-exploid-release

28 httpsourceandroidcomportingbuild_systemhtml

29 httpandroidmodacocomcontentsoftware32035019-nov-r14-visionary-one-click-root

136 Securite du systeme Android

certain nombre de telephones modernes disposent drsquoune protection contre le reflashageintempestif de la partition systeme Cette protection est souvent liee a lrsquoutilisationdrsquoun composant memoire capable de verifier une signature cryptographique (parexemple un composant eMMC 30)

Dans le jargon on dit que la possibilite de reflasher la partition systeme avecun firmware non signe necessite un telephone en mode S-OFF Sur de nombreuxtelephones de marque HTC 31 le mode courant (S-ON ou S-OFF) peut etre obtenuen appuyant sur la touche Volume Down au demarrage du telephone

Failles logiques Il existe une categorie de failles difficiles a detecter et pourtantdevastatrices les failles logiques

Lrsquoun des exemples les plus fameux est le deblocage du telephone en utilisant soncompte Google Dans certains cas de corruption de donnees ce processus peut echouercomme documente officiellement par Google 32

Dans ce cas le telephone doit normalement etre reinitialise en configuration drsquousine(lorsque crsquoest possible ndash la procedure exacte depend du constructeur) Heureusementil srsquoavere que le mot de passe null est toujours accepte comme valide

Un autre bogue celebre affecte le Motorola Droid et potentiellement drsquoautresLorsque le telephone est verrouille mais qursquoun appel entrant arrive il est possibledrsquoappuyer sur le bouton Back et ainsi drsquoarriver a lrsquoecran drsquoaccueil du telephone 33

Enfin une superbe faille logique a ete decouverte sur le site httpsmarket

androidcom qui permet drsquoinstaller a distance des applications sur un telephoneAndroid Grace a une faille de type XSS persistant sur ce site 34 il etait possible defaire installer une application puis de lrsquoexecuter automatiquement sur le telephonede nrsquoimporte quel utilisateur Un utilisateur pouvait etre victime de cette attaque encliquant sur un lien depuis son telephone ou son PC (sous reserve drsquoetre logue sousson compte Google)

La technique utilisee pour executer automatiquement lrsquoapplication apres soninstallation merite drsquoetre soulignee elle consiste a declarer dans le manifeste delrsquoapplication que celle-ci supporte un nouveau schema drsquoURI (par exemple trigger

) puis a invoquer un lien trigger depuis la page Web drsquoorigine

Que peut-on faire Compte-tenu de la quantite de code C embarque dans lesysteme Android il existe et il existera des bogues drsquoimplementation dans ce systeme

30 httpenwikipediaorgwikiMultiMediaCardeMMC

31 Un site de reference pour les telephones de marque HTC httpunrevokedcom32 httpcodegooglecompandroidissuesdetailid=3006

33 httptechcrunchcom20100111verizon-droid-security-bug

34 httpjonoberheideorgblog20110307how-i-almost-won-pwn2own-via-xss

N Ruff 137

conduisant pour certains a des failles de securite WebKit et le systeme Linux sontdes cibles de choix compte-tenu de la surface drsquoattaque exposee

Toutefois et contrairement a un systeme classique la mise a jour a grandeechelle srsquoavere extremement problematique pour plusieurs raisons

ndash Le facteur drsquoechelle (plusieurs millions drsquounites en circulation rien qursquoen France)ndash La diversite et le haut degre de personnalisation des plateformes materielles et

logiciellesndash La propriete du terminal (lorsqursquoil a ete achete par lrsquoutilisateur)ndash Les risques commerciaux en cas de blocage definitif du terminal (brick)On peut raisonnablement considerer qursquoen dehors du geek moyen aucun utilisateur

de smartphone sous Android nrsquoa jamais mis a jour son systemeLes statistiques officielles de Google sur la repartition des ordiphones par version

drsquoAndroid permettent de se faire une idee objective sur la vitesse de renouvellementdu parc 35 A lrsquoheure ou jrsquoecris ces lignes malgre la disponibilite du systeme Android23 la majorite du parc se compose encore de systemes Android 21 et 22 ndash sanscompter sur les irreductibles 6 qui disposent drsquoune version anterieure Je laisseaux statisticiens le soin de produire une etude plus detaillee qui sera neanmoinsbiaisee par le fait que les donnees mondiales sont agregees tandis que les politiquesde renouvellement des operateurs sont tres variables drsquoun pays a lrsquoautre

Dans ces conditions il est loin le moment ou un operateur mobile fera du NAC-NAP sur son reseau pour interdire la connexion de ordiphones qui ne sont pas a jourdes correctifs

Techniquement le protocole FOTA (Firmware Over-The-Air) permet toutefoisde mettre a jour a distance des terminaux Ce protocole a deja ete utilise a grandeechelle lorsqursquoune backdoor (exploitable a distance) a ete decouverte sur certainstelephones HTC de modele Hero et Evo

5 Audit drsquoapplications Android

51 Auditer pourquoi

Lrsquoaudit securite drsquoapplications tierces est une activite vieille comme le conseil ensecurite Toutefois le circuit de distribution logicielle etant assez different entre lemonde du logiciel drsquoentreprise et les MarketPlaces pour mobiles il est vrai que laquestion merite drsquoetre posee a nouveau

A lrsquoheure ou jrsquoecris ces lignes Google nrsquoeffectue aucune verification de securite surles applications publiees dans lrsquoAndroid Market Cet etat de fait pourrait changer

35 httpdeveloperandroidcomresourcesdashboardplatform-versionshtml

138 Securite du systeme Android

compte-tenu de la proliferation drsquoapplications malveillantes de plus en plus agressiveset sophistiquees

Parmi tous les risques lies aux terminaux mobiles (vol de lrsquoequipement intrusionvia une faille du navigateur etc) on constate dans les faits que le risque principalaujourdrsquohui est la proliferation drsquoapplications malveillantes La malveillance estune notion assez floue et certaines applications peuvent se situer dans une zone grise - comme lrsquoapplication de voix sur IP Viber 36 qui duplique tous les contactsde lrsquoutilisateur sur un serveur central faisant office drsquoannuaire telephonique Maisdrsquoautres applications font lrsquounanimite contre elles comme les applications utilisant desfailles systeme pour elever leurs privileges vers root etou envoyer des SMS surtaxessans le consentement de lrsquoutilisateur Ces applications sont drsquoailleurs tuees parGoogle une fois identifiees car elles violent clairement les regles drsquoutilisation delrsquoAndroid Market

Les circuits qui conduisent a lrsquoapparition drsquoune application malveillante sontmultiples

ndash Malveillance deliberee de lrsquoauteur qui veut gagner de lrsquoargent rapidement Crsquoestle cas le plus simple Un scenario courant consiste a cloner une applicationen vogue tout en y ajoutant du code malveillant

ndash Compromission drsquoun editeur drsquoapplications a son insu Crsquoest la ligne de defenseadoptee par plusieurs editeurs drsquoapplications apres avoir ete pointe du doigtCette defense est malheureusement credible car la plupart des developpeurs sontdes individus isoles ou des micro-entreprises attirees par les success stories a laAngry Birds et bien souvent sans aucune securite dans les developpements

ndash Integration de librairies tierce partie malveillantes dans un programme sainLrsquoauteur drsquoune application populaire (a savoir Tank Hero ) a ainsi an-nonce avoir ete contacte par un fournisseur drsquoapplications probablementmalveillantes qui lui proposait un accord commercial 37

Mais lrsquoidentification des applications malveillantes nrsquoest pas la seule raison quipeut conduire a auditer une application Android Parmi drsquoautres raisons legitimes on peut citer

ndash Verifier que lrsquoapplication fait bien ce qursquoelle pretend faire Ce point est parti-culierement critique pour les applications de securite qui mettent en œuvre duchiffrement ou de la gestion de mots de passe par exemple Dans le domaineles surprises sont nombreuses drsquoautant que les applications mobiles nrsquoont pasencore la maturite des applications bureautiques et que les contraintes

36 httpwwwvibercom

37 httpwwwredditcomrAndroidcommentsfm3cuspyware_company_wants_us_to_embed_

their_code_into

N Ruff 139

du monde embarque se font sentir (puissance de calcul sources drsquoentropieremanence de lrsquoallocateur memoire Java etc)

ndash Recherche des failles de securite Et oui les applications Android sont aussivulnerables aux buffer overflows lorsqursquoelles utilisent du code natif (compileavec le NDK) et meme des injections SQL (meme si SQLite nrsquoimplemente pasdrsquoequivalent a xp cmdshell) Il existe par ailleurs des attaques specifiques aumonde Android comme les BroadcastReceiver qui ne verifieraient pas la sourcedes messages recus

Le probleme principal avec lrsquoaudit drsquoapplications Android nrsquoest pas techniqueLe probleme crsquoest lrsquoeuphorie du marche proliferation drsquoapplications et mises a jourfrequentes qui obligent a automatiser et industrialiser les audits 38

52 Auditer comment

Lrsquoaudit securite est une tache difficile a modeliser car elle tire parti de la creativitede lrsquoauditeur On peut toutefois identifier les grandes lignes suivantes

1 Recuperer lrsquoapplication

2 Decompresser les ressources

3 Desassembler le bytecode

4 Decompiler le bytecode (lorsque crsquoest possible)

5 Desassembler le code natif

6 Deboguer lrsquoapplication en cours drsquoexecution (sur un telephone reel ou danslrsquoemulateur)

Cette methodologie nrsquoest pas exhaustive elle ne donne pas acces au contenutelecharge ulterieurement (par exemple au travers des publicites integrees) Voyonsles methodes et les difficultes associees a chaque etape

Recuperer lrsquoapplication Cette etape nrsquoest pas trop compliquee pour qui est preta installer lrsquoapplication cible sur son telephone Apres installation le fichier APK estconserve dans le repertoire dataapp Selon les permissions appliquees au systeme defichiers il nrsquoest pas necessairement possible de lister le contenu de ce repertoire maisles paquets restent lisibles par lrsquooutil adb et le nom de paquet peut etre determinedepuis la MarketPlace ou le menu parametres du telephone (le nom exact estpaquet-Napk ou N vaut generalement 1)

38 httpwwwappanalysisorg

140 Securite du systeme Android

Toute autre methode est complexe et probablement illegale Parmi les methodespossibles on peut citer lrsquoinstallation de lrsquoapplication MarketPlace dans un emulateurou le reverse engineering de lrsquoapplication MarketPlace a des fins de reimplementation(cette derniere etant toutefois volumineuse donc complexe a analyser)

Depuis la version 22 du systeme Android et si lrsquoapplication lrsquoautorise il estpossible drsquoinstaller une application sur la carte SD Mais lrsquoapplication est alorsstockee dans un fichier asec chiffre Ce fichier est inexploitable jusqursquoa ce quele mecanisme et la cle de chiffrement soient connus

On peut imaginer qursquoune application extremement malveillante pourrait exploiterune faille des lrsquoinstallation pour elever ses privileges vers root et dissimuler ses traces(ie se rendre inaccessible de lrsquoexterieur) Ce cas ne srsquoest pas encore produit dansla nature a lrsquoheure ou jrsquoecris ces lignes mais srsquoavere techniquement faisable

Il faut noter que la MarketPlace de Google nrsquoest pas la seule disponible maisqursquoil existe egalement des MarketPlaces drsquooperateurs ou de tiers ainsi Amazoncommercialise desormais des applications Android 39 Cette proliferation complexifiedrsquoautant la tache drsquoanalyse des MarketPlaces La methode la plus universelle pourrecuperer la source drsquoinstallation drsquoune application reste donc de lrsquoinstaller sur untelephone

Un utilisateur peut installer des applications depuis des sources externes a laMarketPlace si lrsquooption autoriser les sources inconnues est cochee dans lesparametres de configuration Il existe des applications legitimes accessibles en dehorsdes MarketPlaces mais il existe egalement des bases drsquoapplications piratees surInternet dont lrsquoinnocuite ne peut pas etre garantie

Notons que certaines applications meme parmi celles disponibles sur les Market-Places officielles exigent au prealable un acces root au telephone

Decompresser les ressources Les fichiers places a lrsquointerieur drsquoun paquet APKsont optimises drsquoune maniere ou drsquoune autre avant drsquoetre compresses Ceci srsquoappliqueaussi bien au bytecode qursquoaux ressources textuelles (comme les fichiers XML)

Lrsquoune des optimisations principales est la deduplication de donnees Ainsi ilnrsquoexiste qursquoune seule instance de chaque chaine de caracteres dans un fichier DEXDifferents encodages optimises sont egalement utilises tel que LEB128 pourla representation des entiers (Little Endian Base 128 aussi utilise dans le formatDWARF)

Toutes ces optimisations nrsquoont pas pour but la protection logicielle et sont parfai-tement reversibles Lrsquooutil aapt fourni avec le SDK officiel permet ainsi drsquoexplorerle contenu du manifeste drsquoun paquet APK Les techniques drsquooptimisation ont ete

39 httpwwwamazoncomappstore

N Ruff 141

analysees et documentees par des tiers ce qui a permis la production drsquooutils dedecompression comme apktool 40

Desassembler le bytecode Avec le SDK officiel est fourni lrsquooutil dexdump quipermet de lister le bytecode contenu dans un fichier CLASSESDEX

Le format de fichier DEX a ete lui aussi analyse et documente 41 ce qui a permisla production de desassembleurs tiers comme baksmali

Le code genere suit la syntaxe Jasmin 42 bien connue dans le monde Java tra-ditionnel Cette syntaxe peut sembler obscure de prime abord mais elle est par-faitement reguliere donc finalement tres simple a apprehender Prenons un exempleissu drsquoune application reelle voici ci-dessous le code drsquoune methode appeleeemptyResult telle que produit par baksmali

method protected static emptyResult(LjavalangString )Z

locals 1

parameter result

prologue

line 306

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Toutes les directives commencent par un point Leur nom est relativement explicitelocals 1 va par exemple indiquer la presence drsquoune seule variable locale Le nomassigne aux opcodes de la machine virtuelle est egalement assez parlant

pN represente lrsquoargument numero N passe a la methode vN represente le re-gistre numero N (Dalvik est une machine virtuelle a registres et non a pile)

Munis de ces informations decortiquons la seule operation reellement complexeeffectuee dans cet extrait de code

40 httpcodegooglecompandroid-apktool

41 httpwwwnetmitecomandroidmydroiddalvikdocsdex-formathtml

42 httpjasminsourceforgenet

142 Securite du systeme Android

invoke-static Invoque une methode sta-tique Il existe egalementun opcode invoke-virtual

pour les methodes virtuellesinvoke-super pour la methodede la superclasse etc

p0 La methode appelee prend unseul argument La valeur de cetargument provient du premierargument passe a la methodeemptyResult

LcomutilsStringUtils-gtisEmpty Invoque la methode isEmpty de laclasse comutilsStringUtils L est un prefixe accole a tousles litteraux

(LjavalangString) Le premier (et seul) argument estde type javalangString

Z La methode retourne un booleen

A titre de reference voici les differents types natifs disponibles dans Jasmin

Z BooleenB OctetC CaractereS Entier court (16 bits)I Entier (32 bits)J Entier long (64 bits)F Flottant (32 bits)D Double (64 bits)

Lrsquoavantage majeur de lrsquooutil tiers apktool est la possibilite de modifier le bytecodeou les ressources drsquoune application puis de la recompiler dans une version fonctionnelleCeci permet drsquoutiliser une technique drsquoanalyse aussi ancienne que lrsquoinformatiqueappelee printf debugging

Dans le monde Android lrsquoutilisation de Systemout doit etre remplacee parandroidutilLog Cette classe definit plusieurs methodes ndash respectivement v d iw e et wtf ndash qui correspondent chacune a un niveau de verbosite ndash et dont lesarguments sont enregistres dans le journal systeme (sauf le niveau debug) Cejournal peut etre consulte a lrsquoaide de la commande adb logcat apparait en temps

N Ruff 143

reel dans lrsquooutil DDMS et peut egalement etre consulte par toute application quidispose de la permission READ LOGS

Si lrsquoon souhaite connaitre lrsquoargument passe a la methode emptyResult danslrsquoexemple precedent il suffit alors drsquoajouter un appel a nrsquoimporte quelle methode dela classe Log de la maniere suivante

method protected static emptyResult(LjavalangString )Z

locals 2

parameter result

prologue

line 306

const -string v1 PrintfDebuggingStyle

invoke -static v1 p0 LandroidutilLog-gtd(LjavalangStringLjavalang

String )I

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Une variable locale v1 a ete ajoutee contenant une chaine de caracteres fixe Lamethode d() est ensuite invoquee Cette modification est equivalente au code Javasuivant

Logd(PrintfDebuggingStyle ltp0 gt)

On peut constater experimentalement que de nombreuses applications de laMarketPlace font usage de lrsquoAPI Log ce qui permet de collecter des donnees defonctionnement parfois tres (trop) interessantes

Le journal systeme peut etre collecte a distance par un developpeur lors ducrash de son application si lrsquoutilisateur lrsquoautorise Cette technique a ete presenteepar Renaud Lifchitz lors de la conference 27c3 pour espionner les deplacements drsquounutilisateur 43

Decompiler le bytecode Comme avec tout bytecode de haut niveau (ex JavaNET) la semantique de lrsquoapplication est conservee

Il est donc possible de decompiler du bytecode Dalvik et de reconstruire le codeJava drsquoorigine (sans les commentaires ndash seule information perdue a la compilation) Lepremier outil public capable drsquoune telle operation fut undx 44 de Marc Schoenefeld Cetoutil est toutefois bogue et non maintenu par son auteur Le meilleur outil disponibleactuellement est lrsquooutil dex2jar 45 qui reconstruit du bytecode Java a partir du

43 httpeventscccdecongress2010Fahrplanevents4151enhtml

44 httpwwwillegalaccessorgundxhtml

45 httpcodegooglecompdex2jar

144 Securite du systeme Android

bytecode Dalvik Les outils classiques de decompilation Java 46 47 srsquoappliquentalors

Compte-tenu de la facilite deconcertante avec laquelle il est possible drsquoanalyserles applications Android (et donc de les craquer entre autres) Google a mis adisposition des developpeurs une bibliotheque tres complete de gestion des licences enligne Licensing Verification Library (LVL) 48 Toutes les versions de cette bibliothequeont malheureusement ete craquees elles aussi a lrsquoheure ou jrsquoecris ces lignes

Une autre contre-mesure mise en place par Google consiste a integrer un obfusca-teur de bytecode dans la chaine de compilation ProGuard 49 Cet outil relativementpuissant est configurable par le developpeur au travers du fichier proguardcfg toutefois le fichier de configuration par defaut (reproduit ci-apres) nrsquoopere que lerenommage des classes et methodes invisibles a lrsquoexterieur de lrsquoapplication ce qui estpeu efficace face a un attaquant determine

-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontpreverify

-verbose

-optimizations codesimplificationarithmetic field classmerging

-keep public class extends androidappActivity

-keep public class extends androidappApplication

-keep public class extends androidappService

-keep public class extends androidcontentBroadcastReceiver

-keep public class extends androidcontentContentProvider

-keep public class extends androidappbackupBackupAgentHelper

-keep public class extends androidpreferencePreference

-keep public class comandroidvendinglicensingILicensingService

-keepclasseswithmembernames class

native ltmethods gt

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet)

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet int)

-keepclassmembers enum

public static [] values ()

public static valueOf(javalangString)

46 httpmembersfortunecitycomneshkovdjhtml

47 httpjavadecompilerfreefr

48 httpdeveloperandroidcomguidepublishinglicensinghtml

49 httpdeveloperandroidcomguidedevelopingtoolsproguardhtml

N Ruff 145

-keep class implements androidosParcelable

public static final androidosParcelable$Creator

Au vu des resultats obtenus on peut considerer que lrsquoobfuscation de bytecode Javadans le monde Android est en retard sur lrsquoobfuscation de code x86 dans le monde PCLes techniques de complexification du flot de controle ou de construction dynamiquedes constantes ne sont pas encore repandues dans les applications commerciales pourAndroid Afin de combler ce manque des projets paralleles (comme AndroGuard 50)fleurissent - mais on peut supposer que la solution integree au SDK fourni par Googlerestera la solution majoritairement utilisee par les applications (pour des raisons desimplicite evidentes)

Desassembler du code natif Lors de lrsquoaudit drsquoune application Android il estpossible de rencontrer du code natif dans deux cas

1 Lrsquoapplication contient des bibliotheques natives compilees avec le NDK

2 Lrsquoapplication contient des applications natives ou srsquoavere etre elle-meme uneapplication native Ce cas est courant avec les applications malveillantes quiembarquent du code natif pour exploiter des failles noyau 51

Dans les deux cas Android ne presente aucune specificite par rapport a unLinuxARM classique Les fichiers natifs sont au format ELF La chaine de compilationnative est construite autour du compilateur GCC Tous les outils sont disponiblesdepuis longtemps pour analyser des tels binaires (ex IDA Pro Hex-Rays DecompilerARM etc)

Deboguer lrsquoapplication Une application Java compilee en mode debug peutetre deboguee a distance au travers du protocole standard Java Debug Wire Protocol(JDWP) defini dans le cadre de Java Platform Debugger Architecture (JPDA)

Les environnements de developpement Java classiques (comme Eclipse) per-mettent ainsi de deboguer une application a distance une fois celle-ci installee sur letelephone

Il est egalement possible drsquoutiliser le venerable JDB (fourni avec le SDK Java 52)bien que cet outil nrsquoait jamais depasse le statut de preuve de concept a mon avis

Lrsquooutil DDMS fourni avec le SDK Android repose egalement sur JPDA Cetoutil ne permet toutefois pas le debogage drsquoapplications mais seulement lrsquoanalyse deperformance

50 httpcodegooglecompandroguard

51 httpstealthopenwallnetxSports

52 httpdownloadoraclecomjavase142docstooldocssolarisjdbhtml

146 Securite du systeme Android

La liste des applications pouvant etre deboguees sur un systeme Android srsquoobtientavec la commande adb jdwp

Le vrai probleme se pose pour les applications qui nrsquoont pas ete compilees enmode debug Ceci implique que le manifeste de lrsquoapplication ne contient pasdrsquoentree ltapplication androiddebuggable=truegt De plus la plupart des outilsde debogage Java necessitent que le bytecode contienne des indications sur les numerosde lignes dans le code source drsquoorigine (il srsquoagit drsquoune limitation arbitraire qui nesrsquoapplique pas a lrsquooutil JavaSnoop 53 par exemple)

Fort heureusement il est possible de desassembler ces applications puis de lesreassembler en mode debug avec lrsquooutil apktool 54 Le processus est complexe etle resultat peu convivial mais il a le merite drsquoexister

Pour reinstaller lrsquoapplication modifiee sur un equipement reel il est necessairede la signer a nouveau La procedure est simple et parfaitement documentee parGoogle

Il faut drsquoabord generer une cle personnelle autosignee a duree de vie extremementlongue

$ keytool -genkey -v -keystore mykeykeystore -alias nom_alias -keyalg RSA -

keysize 2048 -validity 10000

Il faut ensuite signer le nouvel APK avec les outils du SDK Java

$ jarsigner -verbose -keystore mykeykeystore nom_applicationapk nom_alias

Enfin il est recommande drsquoaligner le code sur un multiple de 4 octets pour desraisons de performance

$ zipalign -v 4 nom_applicationapk nom_application_finalapk

Instrumentation Il est possible drsquoinstrumenter une application Java a lrsquoaide declasses specifiques a Android (androidappInstrumentation 55) Cette methodefournit des resultats detailles et personnalisables sur le fonctionnement interne drsquouneapplication elle necessite toutefois une decompilation et une modification prealablede lrsquoapplication a auditer

A lrsquoheure ou jrsquoecris ces lignes il nrsquoexiste pas (a ma connaissance) drsquooutil permettantde generaliser et drsquoautomatiser le processus a tout fichier APK Cette voie de recherchepourrait toutefois donner des resultats interessants

53 httpwwwaspectsecuritycomtoolsjavasnoop

54 httpcodegooglecompandroid-apktoolwikiSmaliDebugging

55 httpdeveloperandroidcomreferenceandroidappInstrumentationhtml

N Ruff 147

Outils specifiques Les outils disponibles actuellement dans le monde Android sontrudimentaires quoi que suffisants

Toutefois on peut raisonnablement estimer que la quantite et la qualite des outilsdisponibles va croitre de concert avec la popularite du systeme Android

A lrsquoheure ou jrsquoecris ces lignes la version 61 du logiciel IDA Pro 56 vient de sortirCette version ajoute le support du format DEX et du bytecode Dalvik ainsi que ledebogage a distance des applications Android natives

On peut supposer que drsquoautres outils couramment utilises par les auditeurs ensecurite vont etre mis a jour pour srsquoadapter au monde Android

6 Conclusion

Le systeme Android nrsquoa malheureusement pas profite de lrsquoopportunite unique quilui etait donnee repartir de la feuille blanche et creer un systeme drsquoexploitation sur par conception

A cause drsquoun heritage logiciel peu fiable ainsi que des contraintes materielles etcommerciales issues du monde de la telephonie mobile le systeme resultant est uncompromis qui laisse une large place a la creativite des attaquants

Celle-ci est drsquoautant plus exacerbee que la telephonie mobile est un phenomene demasse (il y a plus de telephones mobiles que drsquoordinateurs dans le monde) et que letelephone mobile est par conception un systeme de paiement (ce que nrsquoest pas un PCtraditionnel)

A ce tableau vient srsquoajouter 30 ans drsquoexperience dans le domaine des attaqueslogicielles appliquees a un ecosysteme applicatif qui nrsquoexistait pas il y a 5 ans

Toutes les conditions sont donc reunies pour que des attaques de grande ampleurmotivees par lrsquoargent se produisent contre les materiels grand public equipes dusysteme Android (telephones tablettes televisions )

La bonne nouvelle pour lrsquoexpert en securite crsquoest qursquoil est encore temps de srsquoymettre Android est suffisamment jeune et accessible aux nouveaux entrants ce quinrsquoest plus le cas de la plateforme PC ou les techniques drsquoattaque (ex exploitationdrsquoun heap overflow) et de defense (ex obfuscation logicielle) ont atteint des sommetsde raffinement desormais accessibles aux seuls experts les plus pointus du domaine

7 Sites et outils

71 Sites officiels

ndash Android portail officiel httpwwwandroidcom

56 httpwwwhex-rayscomidapro

148 Securite du systeme Android

ndash Android MarketPlace officielle httpsmarketandroidcomndash Android reference des developpeurs httpdeveloperandroidcom

72 Sites non officiels

ndash Reference de la machine virtuelle Dalvik httpdalvikvmcom

73 Outils tiers

ndash Google Android Debugging Utilities httpsitesgooglecomsiteortegaalfredoandroid

ndash Undx httpwwwillegalaccessorgundxhtmlndash SmaliBaksmali httpcodegooglecompsmalindash Dedexer httpdedexersourceforgenetndash Dex2Jar httpcodegooglecompdex2jarndash TaintDroid httpwwwappanalysisorg

ndash AndroGuard httpandroguardblogspotcom

References

1 Benjamin Morin Modele de securite drsquoAndroid MISC 51 2010

2 K Chen Reversing and exploiting an apple firmware update httpwwwblackhatcom

presentationsbh-usa-09CHENBHUSA09-Chen-RevAppleFirm-PAPERpdf BlackHat 2009

3 Alexandre Gazet Sticky fingers amp KBC Custom Shop httpwwwssticorg2011presentation

sticky_fingers_and_kbc_custom_shop SSTIC 2011

4 Loıc Duflot and Yves-Alexis Perez Quelques elements en matiere de securite des cartes reseau http

wwwssticorg2010presentationPeut_on_faire_confiance_aux_cartes_reseau SSTIC 2010

5 Alexander Tereshkin and Rafal Wojtczuk Introducing Ring -3 Rootkits httpwwwblackhat

compresentationsbh-usa-09TERESHKINBHUSA09-Tereshkin-Ring3Rootkit-SLIDESpdf Black-Hat USA 2009

6 Loıc Duflot Yves-Alexis Perez and Benjamin Morin Run-time firmware integrity verification what ifyou canrsquot trust your network card CanSecWest 2011

7 Ralf-Philipp Weinmann All Your Baseband Are Belong To Us httpeventscccdecongress

2010Fahrplanevents4090enhtml CCC 2010

8 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Formal Model to Analyzethe Permission Authorization and Enforcement in the Android Framework SecureComrsquo10

9 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Small but Non-negligibleFlaw in the Android Permission Scheme Wook Shin Sanghoon Kwak Shinsaku Kiyomoto KazuhideFukushima et Toshiaki Tanaka IEEE POLICY 2010

10 Marc Schonefled Reconstructing Dalvik Applications httpcansecwestcomcsw09

csw09-schoenefeldpdf CanSecWest 2009

N Ruff 149

11 Sergio Alvarez The Smart-Phones Nightmare (iPhone-oriented parts about Android) http

cansecwestcomcsw09csw09-alvarezpdf CanSecWest 2009

12 Nicolas Economou Alfredo Ortega Smartphone (in)security httpcansecwestcomcsw09

csw09-ortega-economoupdf CanSecWest 2009

13 Jesse Burns Exploratory Android Surgery httpwwwblackhatcompresentationsbh-usa-09

BURNSBHUSA09-Burns-AndroidSurgery-SLIDESpdf BlackHat USA 2009

14 Kevin Mahaffey John Hering App Attack httpsmediablackhatcombh-us-10presentations

Mahaffey_HeringBlackhat-USA-2010-Mahaffey-Hering-Lookout-App-Genome-slidespdf Black-Hat USA 2010

15 Nils The Risk you carry in your Pocket httpsmediablackhatcombh-ad-10Nils

Black-Hat-AD-2010-android-sandcastle-slidespdf BlackHat Abu Dhabi 2010

16 Raphael Rigo Android Reverse Engineering and Forensics httpsdeepsecnetdocsspeaker

htmlPSLOT45 DeepSec 2010

17 Itzhak Avraham Popping Shell on A(ndroid)RM Devices httpsmediablackhatcombh-dc-11

AvrahamBlackHat_DC_2011_Avraham-Popping_Android_Devices-Slidespdf BlackHat DC 2011

18 Jon Oberheide httpjonoberheideorgblog20100625remote-kill-and-install-on-google-android

19 Jon Oberheide httpjonoberheideorgblog20100628a-peek-inside-the-gtalkservice-connection

20 httpwwwandroidpolicecom20110301the-mother-of-all-android-

malware-has-arrived-stolen-apps-released-to-the-market-that-root-

your-phone-steal-your-data-and-open-backdoor

  • Seacutecuriteacute du systegraveme Android
  • N Ruff

N Ruff 125

Ce bytecode srsquoexecute dans une JVM specifique a Android denommee Dalvik enreference a un village islandais dont est issue la famille du chef de projet Il srsquoagitdrsquoune machine virtuelle a registres et non a pile comme la JVM de Sun Le bytecodeDalvik est par ailleurs tres similaire au bytecode Java mais pas completementidentique non plus

Le choix drsquoune JVM comme cible de developpement srsquoexplique par plusieurs raisonsparfaitement acceptables facilite de developpement de nouvelles applicationsabstraction de la plateforme materielle (les variantes et les revisions du processeurARM etant nombreuses) possibilite de verifier des proprietes de securite sur lebytecode etc

Toutefois il faut noter que depuis le rachat de la technologie Java par Oracle labataille juridique fait rage entre les deux editeurs 7

Le developpement de code natif est egalement possible au travers du NDK Ilnrsquoest toutefois pas possible de distribuer sur la MarketPlace des applications100 natives le code natif doit utiliser les API JNI pour srsquointerfacer avec uneapplication Java hote

3 Toutes les applications doivent etre signees numeriquement

Le mecanisme de signature Android nrsquoest pas base sur une PKI mondiale qui seraitdifficile a maintenir et commercialement suicidaire Un certificat autosigne generepar le developpeur est acceptable comme nous le verrons plus loin en abordant lemodele de securite du systeme

4 Un equipement physique nrsquoest pas entierement Open Source

Le milieu du materiel et des couches basses (ex pile de protocoles GSM) est tresconcurrentiel et reste traditionnellement assez hostile au concept de lrsquoOpenSource Un smartphone vendu par un constructeur tiers va embarquer ducode proprietaire (essentiellement des pilotes mais aussi parfois des interfacesgraphiques)

Meme les telephones de developpement commercialises par Google (serie des Nexus)perdent une partie de leurs fonctionnalites lorsqursquoils sont recompiles uniquementa partir des sources publiques

La situation nrsquoest pas tres differente de celle drsquoun PC moderne dans lequel denombreux composants embarquent des firmwares proprietaires On peut notertoutefois que ces composants ont fait lrsquoobjet de nombreuses recherches ces dernieresannees Des risques de securite averes ont ete exhibes dans des composants telsque Intel vPro [5] les controleurs claviers [23] les cartes reseau [46] etc

7 httpwwwcomputerworldcomsarticle9180678Update_Oracle_sues_Google_over_Java_

use_in_Android

126 Securite du systeme Android

Plus proche du telephone la compromission du baseband a ete demontree possiblerecemment [7] La securite de la plateforme ne peut pas srsquoenvisager sans la securitedes composants materiels qui la compose

5 Les interfaces avec le systeme drsquoexploitation ne sont pas celles de Linux

On peut meme raisonnablement affirmer que lrsquoAPI Java exposee aux applicationsest radicalement differente de celle utilisee dans la programmation Unix tradition-nelle Lrsquointerface graphique nrsquoest pas X11 (heureusement ) Les communicationsinter-processus doivent passer par un mecanisme specifique appele Binder Denombreux concepts drsquoexecution adaptes aux contraintes drsquoun smartphone ont etemodelises (ex processus de type Activity Service Broadcast Receiver ou ContentProvider)

33 Developpement drsquoapplications

Le developpement sous Android srsquoeffectue majoritairement en langage Java ce quicontribue a la popularite de la plateforme aupres des developpeurs Un SDK est fournigratuitement par Google pour les trois systemes drsquoexploitation majeurs (WindowsMac OS X et Linux) Ce SDK peut srsquointegrer dans lrsquoIDE bien connu Eclipse oufonctionner en ligne de commande Il dispose drsquoun emulateur (base sur QEmu) ainsique drsquooutils de mise au point puissants (comme DDMS)

Apres compilation lrsquoutilitaire DX (fourni dans le SDK) permet de convertir lebytecode Java en bytecode Dalvik Lrsquooperation inverse nrsquoest pas possible avec lesoutils du SDK officiel

Lrsquoapplication installable sur le telephone est empaquetee dans un fichier APK quiinclut le bytecode de lrsquoapplication elle-meme (fichier CLASSESDEX) le manifestedrsquoapplication ses ressources et les signatures numeriques Le concept est identique acelui des fichiers JAR ndash les fichiers APK sont drsquoailleurs eux-memes des archives ZIP

Le developpement drsquoapplications est un peu deroutant de prime abord - lrsquoapplica-tion ne disposant pas drsquoun point drsquoentree fixe (de type main()) mais srsquoenregistrantplutot aupres du systeme pour repondre a des evenements appeles Intents dans ladocumentation officielle

Il est egalement possible drsquointegrer du code natif dans une application Java parune interface JNI et le kit de developpement officiel appele NDK (Native DevelopmentKit) De nombreuses applications cryptographiques exploitent cette opportunite pourameliorer les performances des algorithmes gourmands et assurer la securite deselements cryptographiques en memoire (le mecanisme de garbage collector de Javaetant difficilement compatible avec lrsquoeffacement securise de donnees en memoire)

Il nrsquoest pas possible de developper une application 100 native et de la mettre adisposition sur une MarketPlace Il reste assez simple de compiler une application

N Ruff 127

100 native mais un code Open Source existant pour Linux ne va pas necessairementrecompiler et fonctionner sans modification sur une plateforme Android Lrsquoabsence debinsh et de etcpasswd sont par exemple deux ecueils auxquels jrsquoai ete confrontes

Lrsquoobjectif nrsquoest pas ici drsquoecrire un tutoriel pour le developpement drsquoapplicationsAndroid drsquoautant que la documentation Google est tres bien faite 8

34 Modele de securite

Le modele de securite Android nrsquoa guere evolue depuis ses origines il a donc dejaete abondamment commente [1] Son etude reste neanmoins un prealable obligatoirea toute analyse de risques sur cette plateforme

Signature numerique Les applications sont signees numeriquement Ceci est sourcede confusion dans lrsquoesprit du grand public et meme des informaticiens qui associentgeneralement la presence drsquoun certificat a celle drsquoune securite inviolable probablementa cause de la propagande realisee par les acteurs du e-commerce autour du protocoleHTTPS (les fameuses vertus du cadenas jaune et plus recemment de la barre drsquoadresseverte)

En pratique tous les systemes de signature numerique apparus recemment dansles marches grand public (ex programme Symbian Signed signature des appli-cations iPhone signature des pilotes Windows 64 bits) nrsquooffrent aucune securite apriori Le cout drsquoacquisition drsquoun certificat est marginal et les verifications opereesquasiment nulles Le certificat sert essentiellement drsquoidentifiant unique pour permettrela revocation a posteriori

Afin drsquoeviter les problemes drsquoexpiration et de renouvellement des cles Googleimpose meme lrsquoutilisation de certificats de signature dont la date drsquoexpiration depassele 22 octobre 2033 9

Cloisonnement A lrsquoinstallation chaque application se voit attribuer un compteUnix (uid) Lrsquoisolation entre applications est rendue possible par les mecanismes desecurite natifs du systeme Unix

Lrsquoensemble des applications signees par le meme certificat srsquoexecutent sous la memeidentite de groupe Unix (gid) Les interactions possibles entre applications signeespar le meme certificat sont nombreuses 10 ndash elles peuvent ainsi partager le memeuid 11 ce qui ouvre la voie a la creation drsquoapplications malveillantes k-aires chaque

8 httpdeveloperandroidcom

9 httpdeveloperandroidcomguidepublishingapp-signinghtml

10 httpdeveloperandroidcomguidetopicssecuritysecurityhtml

11 httpdeveloperandroidcomreferenceandroidRattrhtmlsharedUserId

128 Securite du systeme Android

application ne possedant qursquoun jeu limite de permissions (jugees peu dangereusesindividuellement) mais la combinaison de toutes ces applications dans le memeprocessus formant une super application pouvant par exemple exfiltrer toutes lesdonnees du telephone

Revocation Compte-tenu de lrsquoaccroissement du nombre drsquoapplications malveillantessur la MarketPlace officielle Google fait un usage de plus en plus frequent dukill switch 12 ndash fonction qui permet drsquoeliminer a distance toutes les instances drsquouneapplication identifiee par son certificat

Pour ceux que cette fonction intrigue je signale que le mecanisme sous-jacent adeja ete decortique en detail [1819] Le cœur du mecanisme repose sur le processusGTalkService qui recoit et traite les messages REMOVE ASSET (et INSTALL ASSET) Laconclusion en est que toute personne en position drsquoeffectuer un man-in-the-middleSSL avec un certificat valide peut emettre de tels messages La liste des autorites deconfiance du systeme se trouve dans le fichier systemetcsecuritycacertsbkset ne peut pas facilement etre modifiee 13 Toutefois cette liste contient (sur montelephone) 58 autorites de nature variee (entreprises gouvernements etc) De plusune application malveillante ayant eleve ses privileges vers root pourrait probablementbloquer lrsquoutilisation du kill switch sur un equipement donne une fois les mecanismessous-jacents connus et documentes

Par le passe la securite basee sur la revocation a montre ses limites 14 En effetcela suppose que lrsquoequipement cible dispose drsquoune connexion a un reseau de donneeset qursquoil soit configure pour en faire usage Ce sont des hypotheses assez fortes

35 Les permissions

Considerations generales Le modele de securite des applications tierce partieest essentiellement declaratif Un fichier de manifeste decrit les permissionsmaximales requises par lrsquoapplication Google definit une centaine de permissionspossibles par defaut 15 mais les constructeurs sont libres drsquoen ajouter egalement cequi peut engendrer des risques specifiques a un modele de telephone donne

La commande de base permettant de manipuler les permissions sur le telephonesrsquoappelle pm Voici les options qursquoelle offre

$ adb shell pm

12 httpandroid-developersblogspotcom201006exercising-our-remote-applicationhtml

13 httpwwwmcbsyscomtechblog201012android-certificates

14 httpwwwf-securecomweblogarchives00001918html

15 httpdeveloperandroidcomreferenceandroidManifestpermissionhtml

N Ruff 129

usage pm [list|path|install|uninstall]

pm list packages [-f]

pm list permission -groups

pm list permissions [-g] [-f] [-d] [-u] [GROUP]

pm list instrumentation [-f] [TARGET -PACKAGE]

pm list features

pm path PACKAGE

pm install [-l] [-r] [-t] [-i INSTALLER_PACKAGE_NAME] [-s] [-f] PATH

pm uninstall [-k] PACKAGE

pm enable PACKAGE_OR_COMPONENT

pm disable PACKAGE_OR_COMPONENT

pm setInstallLocation [0 auto] [1 internal] [2 external]

()

A titre drsquoexemple voici les permissions definies par HTC sur lrsquoune de mes plate-formes de test

$ adb shell pm list permissions | grep htc

permissioncomhtcandroidmailpermissionREAD_MAIL

permissioncomhtcManifestpermissionBROADCAST_KEYIN_EVENT

permissioncomhtcManifestpermissionBROADCAST_MOTION_EVENT

permissioncomhtcManifestpermissionBLOCK_KEYBOARD_EVENT

permissioncomhtcandroidmailpermissionWRITE_ACCOUNT

permissioncomhtcandroidmailpermissionREAD_ACCOUNT

permissioncomhtchtctwitterpermissionuseprovider

permissioncomhtcManifestpermissionBROADCAST_TRACKBALL_EVENT

permissioncomhtcinternalpermissionHTC_APP_PMEM

permissioncomhtcandroidmailpermissionWRITE_MAIL

On notera egalement que cette plateforme contient des permissions a priorispecifiques a lrsquooperateur (americain) Sprint - alors qursquoil srsquoagit drsquoun telephone acheteen France sans abonnement

$ adb shell pm list permissions | grep sprint

permissioncomsprintinternalpermissionSLOT0

permissioncomsprintinternalpermissionPLATFORM

permissioncomsprintinternalpermissionSYSTEMPROPERTIES_WRITE

permissioncomsprintinternalpermissionSYSTEMPROPERTIES

permissioncomsprintinternalpermissionCONNECTIONMANAGER

permissioncomsprintinternalpermissionOMADM

permissioncomsprintandroidpermissionDISABLE_HDMI

Lrsquoutilisateur est libre drsquoaccepter ou de refuser lrsquoapplication mais il ne peut pasmodifier la liste des permissions demandees (sauf a modifier lrsquoapplication et a lare-signer avec sa propre cle comme nous le verrons plus tard)

On peut raisonnablement estimer que la plupart des utilisateurs ne sont pas enmesure drsquoeffectuer un choix eclaire a ce stade

130 Securite du systeme Android

Securite theorique Lrsquoune des questions qursquoon peut se poser sur le systeme depermissions tel qursquoil a ete defini est lrsquoexistence (ou non) drsquoun modele theorique sous-jacent coherent [98] Est-ce que chaque permission correspond bien a un ensemble detaches uniques et strictement delimitees Crsquoest la meme question qui se pose avec lemodele des capabilities sous Linux et dans ce deuxieme cas la reponse est non CAP SYS MODULE permet par exemple de charger des modules noyau arbitraires etdonc de compromettre entierement lrsquointegrite du noyau

Dans le cas drsquoAndroid on peut suspecter que la permission SYSTEMPROPERTIES WRITE

definie par lrsquooperateur Sprint (vue precedemment) a probablement une intersectionnon nulle avec la permission WRITE SETTINGS definie par Google tout en etantprobablement inconnue des outils drsquoanalyse automatique drsquoinnocuite

Lrsquointeret pratique drsquoune etude mathematique sur les permissions Android esttoutefois limite En effet les deux risques majeurs rencontres dans la nature sont

ndash Des applications malveillantes qui demandent des permissions excessivementlarges et abusent de la confiance des utilisateurs

ndash Des applications malveillantes sans aucune permission qui exploitent des faillessysteme pour obtenir lrsquoacces au compte root et contourner entierement lemodele de securite

Ces risques sont partages avec tous les autres modeles de securite en usage danslrsquoindustrie (SELinux sous Linux UAC sous Windows etc)

ndash Ces modeles se heurtent a lrsquoergonomie des interfaces et a la prise de decisioneclairee par les utilisateurs finaux

ndash Lrsquoimplementation de ces modeles exige un effort de conception important tandisque les attaquants les contournent entierement en violant les hypotheses deconception (en particulier lrsquohypothese que le noyau du systeme drsquoexploitationest exempt de bogues)

Autres limites du modele Presque toutes les applications existantes exigent unacces illimite au reseau tres souvent pour recuperer du contenu publicitaire Enpratique cela signifie que le risque pose par une application ne se limite pas a unensemble de permissions statiques par exemple un contenu malveillant pourra etreenvoye a tout moment au moteur de rendu WebKit a travers le canal publicitaire etprovoquer ainsi la prise de controle drsquoun telephone donne au travers une applicationa priori saine

Les permissions demandees peuvent changer a lrsquooccasion drsquoune mise a jour Orla plupart des utilisateurs font confiance aux applications qursquoils ont deja installeesDepuis la version 22 drsquoAndroid lrsquoutilisateur peut autoriser les applications a semettre a jour automatiquement Fort heureusement la mise a jour automatique est

N Ruff 131

bloquee si les permissions demandees par lrsquoapplication changent De mon point devue le mecanisme de mise a jour automatique peut donc etre considere comme plutotbenefique pour lrsquoecosysteme

Enfin le code natif attache a une application (dans le cas drsquoutilisation du NDK)est essentiellement non verifiable contrairement au bytecode Dalvik Le modelede securite Unix vient donc srsquoajouter au modele de permissions Android

4 Panorama des risques

Jrsquoidentifie trois risques de securite majeurs applicables aux ordiphones mo-dernes

1 La structuration du marche de la telephonie

2 Les failles logicielles

3 Les applications tierce partie

Nous allons passer en revue ces trois risques Le troisieme risque est plus specifique alrsquoecosysteme Android dans lequel le role de chaque acteur est bien separe fournisseurde materiel fournisseur de logiciel fournisseur de service

Il se verifie moins dans des ecosystemes comme celui de lrsquoiPhone et du BlackBerrydans lesquels les fournisseurs du materiel et du logiciel sont les memes

41 Marche de la telephonie

Plusieurs acteurs majeurs interviennent dans le marche de la telephonie mobile

1 Les fabricants de materiels

2 Les fabricants de logiciels (en lrsquooccurrence Google)

3 Les circuits de distribution (pour lrsquoinstant les operateurs de telephonie mobile)

4 Les developpeurs drsquoapplications

5 Les fournisseurs de contenus et de services (regies publicitaires services en ligneetc)

Nous allons passer en revue les interets de ces acteurs et le role qursquoils jouent dansla securite de la plateforme a lrsquoexception des derniers qui sont trop divers et varies

Il faut noter que si demain Android venait a equiper drsquoautres biens de consomma-tion courante (ex televiseurs refrigerateurs etc) les parties prenantes (et donc lesconclusions de cette etude) ne seraient pas fondamentalement differentes

132 Securite du systeme Android

Fabricants de materiels Les fabricants de materiels vivent dans un monde extremementconcurrentiel et doivent minimiser le cout de developpement de leurs produits pourque lrsquooperateur puisse au final proposer son telephone a 1 Par ailleurs ils doiventegalement minimiser le time to market un telephone portable se demode tresvite la duree de vie commerciale drsquoun systeme est de lrsquoordre de 6 mois

En consequence logique les developpements sont bacles Les systemes pousses enproduction sont a peine testes et les fonctions de debogage restent souvent activees(comme en temoigne le shell root disponible sur le port TCP12345 des series HTCEvo et HTC Hero commercialisees par Sprint 16)

En regle generale aucun support technique nrsquoest offert apres la sortie drsquountelephone Les mises a jour officielles de firmware sont rarissimes dans le domaine dela telephonie mobile - a lrsquoexception notable drsquoApple qui propose des mises a jourpour le systeme iOS dans la fenetre de support de ses equipements a savoir 21

2ans

Ceci conduit a la proliferation de firmwares non officiels dont lrsquoinnocuite et la stabilitene peuvent pas etre garantis

Dans le cas tres precis de mon telephone LG GW620 livre sous Android 15 LGFrance 17 a promis une mise a jour vers Android 16 pendant plus drsquoun an avant definalement se retracter Des firmwares Android 21 et 22 drsquoexcellente facture ndash maisnon officiels ndash ont donc ete developpes par des amateurs 18 Sous la pression de sesutilisateurs LG a fini par sortir un firmware officiel mais trop tard

Fabricants de logiciels La concurrence fait rage dans le domaine des systemesdrsquoexploitation pour ordiphones

Des lors les editeurs de systemes drsquoexploitation doivent seduire tous les autresacteurs quitte a diminuer les contraintes de securite

ndash Pour seduire les utilisateurs il semble necessaire de disposer du plus grandnombre drsquoapplications dans sa MarketPlaceBien qursquoon puisse questionner cette logique (ne serait-il pas plus interessant dedisposer drsquoapplications utiles fiables et bien realisees ) la guerre des chiffresest neanmoins lancee

ndash Pour seduire les developpeurs drsquoapplications il est necessaire de leur faciliter letravail au maximumLe choix du langage Java et la mise a disposition drsquoun SDK gratuit pour Eclipseva dans ce sens Mais Google va meme plus loin en mettant a disposition un SDK

16 httpwwwunrevokedcomrootwikidokuphppublicunrevoked1_disclosure

17 httptwittercomlg_blog_france

18 httpopenetnacomopenetna

N Ruff 133

visuel pour les gens nrsquoayant aucune notion de developpement 19 On peutse poser des questions sur la securite (et la qualite en general) des applicationsqui en sortirontLa signature drsquoapplications fut egalement pendant longtemps une pierre drsquoachop-pement Lors du lancement du programme Symbian Signed on a pu lireque Symbian voulait tuer les developpeurs independants HeureusementlrsquoAppStore a depuis prouve le contraire et Android nrsquoa eu aucun mal a imposerla signature des sa genese

ndash Seduire les fabricants de materiels est assez simple il suffit de produire unsysteme gratuit et drsquoen assurer une bonne partie du support Ajoutez a celaune forte demande du marche et tout est en place pour garantir le succes

Circuits de distribution Lrsquoessentiel des ordiphones sont commercialises par lesoperateurs de telephonie mobile (Google ayant drsquoailleurs essuye un echec commercialsur la vente en direct du Nexus One)

Comme la plupart des acteurs de la chaine les operateurs cherchent a maximiserleurs revenus parfois au detriment de la securite

ndash Les operateurs personnalisent les systemes drsquoexploitation en y ajoutant desbogues

ndash Les operateurs tentent de rendre payantes des fonctions natives incitant de cefait les utilisateurs au piratage

Parmi les inventions geniales du marketing on peut citer le bridage du tethering(utilisation du telephone comme modem 3G) la geolocalisation payante (alors que letelephone dispose drsquoun GPS integre) lrsquoimpossibilite de regarder la tele ou drsquoecouterde la musique sur un lien WiFi (mais pas sur un lien 3G) etc

Des lors les utilisateurs sont tentes de debrider leur telephone (jailbreaking)drsquoinstaller des applications tierce partie douteuses voire drsquoinstaller des systemes nonofficiels sans garantie drsquoinnocuite

Developpeurs drsquoapplications Lrsquoun des moyens les plus efficaces pour seduire lesdeveloppements est de leur promettre des revenus consequents Pas facile dans unmonde ou la plupart des applications sont gratuites ou dont le prix nrsquoexcede pas 1

Tout drsquoabord le processus drsquoachat drsquoapplications est relativement simple grace aGoogle Checkout lorsque lrsquooperateur ne fournit pas lui-meme le service de facturationau travers de sa MarketPlace Pour les applications financees par la publicite lareputation de Google dans le domaine nrsquoest plus a faire (surtout depuis le rachat dela societe AdMob specialisee dans le domaine de la publicite sur mobiles)

19 httpappinventorgooglelabscomabout

134 Securite du systeme Android

Contrairement a ce qursquoon pourrait croire les deux methodes generent des reve-nus comparables comme le revele lrsquoauteur drsquoune application inutile mais pourtanttelechargee presque 100 000 fois a savoir Advanced Task Manager 20

Les developpeurs attires par des revenus encore plus rapides pourront etre tentespar le cote obscur de la telephonie mobile appels et SMS surtaxes vol (et revente)du carnet drsquoadresses collecte de lrsquohistorique du navigateur etc

Ce phenomene est loin drsquoetre marginal certaines applications etant clairementmalveillantes ndash comme SMSAndroidOSFakePlayera ou les applications editeespar 09Droid qui se font passer pour des applications bancaires officielles ndash drsquoautresetant simplement a la limite du marketing agressif ndash comme celles de lrsquoediteur francaisZeuzz

Plusieurs etudes soulignent la dangerosite des MarketPlaces generalement fi-nancees par les editeurs antivirus ces etudes ne sont toutefois pas drsquoune qualitescientifique suffisante pour etre citees ici Le risque semble neanmoins reel puisqueGoogle a retire en urgence des dizaines drsquoapplications de la MarketPlace dans le cadrede lrsquoaffaire DroidDream (nous y reviendrons)

42 Failles logicielles

Etat des lieux Compte-tenu de lrsquoutilisation massive de code Open Source dans lesysteme Android les failles drsquoimplementation logicielle sont faciles a identifier il suffitde suivre les alertes de securite des principaux projets Lorsqursquoils sont disponibles cequi nrsquoest pas forcement le cas pour le noyau Linux

Les vecteurs principaux (en termes de nombre de lignes de code et drsquoexposition)sont le systeme Linux et le navigateur Web (et particulierement le moteur WebKitcommun avec Safari)

Il ne faut pas oublier non plus qursquoAndroid integre Flash Player et vit avec lesmemes failles 21

Failles navigateur Comme dans tout navigateur Web de complexite importanteles failles sont nombreuses Ces failles nrsquoen restent pas moins dangereuses car ellesont ete demontrees exploitables sur Android 22 23

Lrsquoune drsquoentre elles est meme disponible dans Metasploit 24 Il srsquoagit drsquoune faillerelativement grave qui permet de lire nrsquoimporte quel fichier du telephone accessible

20 httparronlacom201008android-revenue-advanced-task-manager

21 httpwwwtheinquirernetinquirernews2034092android-smartphones-attack-flash-player-hackers

22 httpwwwexploit-dbcomexploits15423

23 httpwwwexploit-dbcomexploits16974

24 httpblogmetasploitcom201101mobile-device-security-and-android-filehtml

N Ruff 135

au processus navigateur - ce qui inclut lrsquointegralite de la carte SD puisque celle-ci estformatee en FAT (donc sans aucun controle drsquoacces)

On notera dans cette attaque lrsquoutilisation de lrsquoURL contentcomandroid

htmlfileproviderltfilenamegt qui permet de lire nrsquoimporte quel fichier du telephoneau travers drsquoun Content Provider 25 ndash une notion specifique a Android qui prometdrsquoetre encore source de nombreuses failles vu la surface drsquoattaque exposee

Par ailleurs outre les schemas traditionnels (file http etc) Androidsupporte par defaut des schemas plus specifiques et donc moins testes

Parmi les schemas supportes on peut citer content (qui permet de com-muniquer avec un Content Provider) market (qui permet drsquointeragir avec laMarketPlace comme par exemple marketdetailsid=ltpackagegt) ou android

resource (qui permet drsquoacceder a une ressource dans un paquet comme parexemple androidresourceltpaquetgtltressourcegt)

Failles systeme Les failles systeme ne sont pas legion mais ont toutes un impactcritique sur la securite du systeme

Parmi les failles les plus connues (car les plus exploitees dans la nature ) onpeut citer les failles publiees sur le site xSports 26 a savoir

ndash Exploid faille udev bien connue des administrateurs Linux CVE-2009-1185

ndash Rage Against The Cage faille liee au mauvais comportement du processusadb lorsque RLIMIT NPROC a ete atteint 27 - lrsquoappel a setuid() echoue mais leprocessus nrsquoen tient pas compte et continue son execution son lrsquoidentite root

ndash Killing In The Name Of faille permettant de modifier la valeur de la constanteglobale (normalement en lecture seule) rosecure en jouant sur une erreurdrsquoimplementation de devashmem Cette constante definie a la compilationdu systeme indique au processus adb srsquoil doit srsquoexecuter sous lrsquoidentite root 28

Les applications legitimes (comme VISIONary+ 29) ou malveillantes (la pluscelebre ayant probablement ete DroidDream [20] ) ne se privent pas drsquoexploiter cesfailles dans la nature

Il faut toutefois noter qursquoil existe une difference subtile entre obtenir un accesroot et obtenir un acces root persistant au redemarrage du telephone En effetbien qursquoil soit virtuellement possible drsquoecrire dans le repertoire system (au traversde la commande adb remount ou drsquoun remount rw a lrsquointerieur du terminal) un

25 httpdeveloperandroidcomguidetopicsproviderscontent-providershtml

26 httpstealthopenwallnetxSports

27 httpdtorsorg20100825reversing-latest-exploid-release

28 httpsourceandroidcomportingbuild_systemhtml

29 httpandroidmodacocomcontentsoftware32035019-nov-r14-visionary-one-click-root

136 Securite du systeme Android

certain nombre de telephones modernes disposent drsquoune protection contre le reflashageintempestif de la partition systeme Cette protection est souvent liee a lrsquoutilisationdrsquoun composant memoire capable de verifier une signature cryptographique (parexemple un composant eMMC 30)

Dans le jargon on dit que la possibilite de reflasher la partition systeme avecun firmware non signe necessite un telephone en mode S-OFF Sur de nombreuxtelephones de marque HTC 31 le mode courant (S-ON ou S-OFF) peut etre obtenuen appuyant sur la touche Volume Down au demarrage du telephone

Failles logiques Il existe une categorie de failles difficiles a detecter et pourtantdevastatrices les failles logiques

Lrsquoun des exemples les plus fameux est le deblocage du telephone en utilisant soncompte Google Dans certains cas de corruption de donnees ce processus peut echouercomme documente officiellement par Google 32

Dans ce cas le telephone doit normalement etre reinitialise en configuration drsquousine(lorsque crsquoest possible ndash la procedure exacte depend du constructeur) Heureusementil srsquoavere que le mot de passe null est toujours accepte comme valide

Un autre bogue celebre affecte le Motorola Droid et potentiellement drsquoautresLorsque le telephone est verrouille mais qursquoun appel entrant arrive il est possibledrsquoappuyer sur le bouton Back et ainsi drsquoarriver a lrsquoecran drsquoaccueil du telephone 33

Enfin une superbe faille logique a ete decouverte sur le site httpsmarket

androidcom qui permet drsquoinstaller a distance des applications sur un telephoneAndroid Grace a une faille de type XSS persistant sur ce site 34 il etait possible defaire installer une application puis de lrsquoexecuter automatiquement sur le telephonede nrsquoimporte quel utilisateur Un utilisateur pouvait etre victime de cette attaque encliquant sur un lien depuis son telephone ou son PC (sous reserve drsquoetre logue sousson compte Google)

La technique utilisee pour executer automatiquement lrsquoapplication apres soninstallation merite drsquoetre soulignee elle consiste a declarer dans le manifeste delrsquoapplication que celle-ci supporte un nouveau schema drsquoURI (par exemple trigger

) puis a invoquer un lien trigger depuis la page Web drsquoorigine

Que peut-on faire Compte-tenu de la quantite de code C embarque dans lesysteme Android il existe et il existera des bogues drsquoimplementation dans ce systeme

30 httpenwikipediaorgwikiMultiMediaCardeMMC

31 Un site de reference pour les telephones de marque HTC httpunrevokedcom32 httpcodegooglecompandroidissuesdetailid=3006

33 httptechcrunchcom20100111verizon-droid-security-bug

34 httpjonoberheideorgblog20110307how-i-almost-won-pwn2own-via-xss

N Ruff 137

conduisant pour certains a des failles de securite WebKit et le systeme Linux sontdes cibles de choix compte-tenu de la surface drsquoattaque exposee

Toutefois et contrairement a un systeme classique la mise a jour a grandeechelle srsquoavere extremement problematique pour plusieurs raisons

ndash Le facteur drsquoechelle (plusieurs millions drsquounites en circulation rien qursquoen France)ndash La diversite et le haut degre de personnalisation des plateformes materielles et

logiciellesndash La propriete du terminal (lorsqursquoil a ete achete par lrsquoutilisateur)ndash Les risques commerciaux en cas de blocage definitif du terminal (brick)On peut raisonnablement considerer qursquoen dehors du geek moyen aucun utilisateur

de smartphone sous Android nrsquoa jamais mis a jour son systemeLes statistiques officielles de Google sur la repartition des ordiphones par version

drsquoAndroid permettent de se faire une idee objective sur la vitesse de renouvellementdu parc 35 A lrsquoheure ou jrsquoecris ces lignes malgre la disponibilite du systeme Android23 la majorite du parc se compose encore de systemes Android 21 et 22 ndash sanscompter sur les irreductibles 6 qui disposent drsquoune version anterieure Je laisseaux statisticiens le soin de produire une etude plus detaillee qui sera neanmoinsbiaisee par le fait que les donnees mondiales sont agregees tandis que les politiquesde renouvellement des operateurs sont tres variables drsquoun pays a lrsquoautre

Dans ces conditions il est loin le moment ou un operateur mobile fera du NAC-NAP sur son reseau pour interdire la connexion de ordiphones qui ne sont pas a jourdes correctifs

Techniquement le protocole FOTA (Firmware Over-The-Air) permet toutefoisde mettre a jour a distance des terminaux Ce protocole a deja ete utilise a grandeechelle lorsqursquoune backdoor (exploitable a distance) a ete decouverte sur certainstelephones HTC de modele Hero et Evo

5 Audit drsquoapplications Android

51 Auditer pourquoi

Lrsquoaudit securite drsquoapplications tierces est une activite vieille comme le conseil ensecurite Toutefois le circuit de distribution logicielle etant assez different entre lemonde du logiciel drsquoentreprise et les MarketPlaces pour mobiles il est vrai que laquestion merite drsquoetre posee a nouveau

A lrsquoheure ou jrsquoecris ces lignes Google nrsquoeffectue aucune verification de securite surles applications publiees dans lrsquoAndroid Market Cet etat de fait pourrait changer

35 httpdeveloperandroidcomresourcesdashboardplatform-versionshtml

138 Securite du systeme Android

compte-tenu de la proliferation drsquoapplications malveillantes de plus en plus agressiveset sophistiquees

Parmi tous les risques lies aux terminaux mobiles (vol de lrsquoequipement intrusionvia une faille du navigateur etc) on constate dans les faits que le risque principalaujourdrsquohui est la proliferation drsquoapplications malveillantes La malveillance estune notion assez floue et certaines applications peuvent se situer dans une zone grise - comme lrsquoapplication de voix sur IP Viber 36 qui duplique tous les contactsde lrsquoutilisateur sur un serveur central faisant office drsquoannuaire telephonique Maisdrsquoautres applications font lrsquounanimite contre elles comme les applications utilisant desfailles systeme pour elever leurs privileges vers root etou envoyer des SMS surtaxessans le consentement de lrsquoutilisateur Ces applications sont drsquoailleurs tuees parGoogle une fois identifiees car elles violent clairement les regles drsquoutilisation delrsquoAndroid Market

Les circuits qui conduisent a lrsquoapparition drsquoune application malveillante sontmultiples

ndash Malveillance deliberee de lrsquoauteur qui veut gagner de lrsquoargent rapidement Crsquoestle cas le plus simple Un scenario courant consiste a cloner une applicationen vogue tout en y ajoutant du code malveillant

ndash Compromission drsquoun editeur drsquoapplications a son insu Crsquoest la ligne de defenseadoptee par plusieurs editeurs drsquoapplications apres avoir ete pointe du doigtCette defense est malheureusement credible car la plupart des developpeurs sontdes individus isoles ou des micro-entreprises attirees par les success stories a laAngry Birds et bien souvent sans aucune securite dans les developpements

ndash Integration de librairies tierce partie malveillantes dans un programme sainLrsquoauteur drsquoune application populaire (a savoir Tank Hero ) a ainsi an-nonce avoir ete contacte par un fournisseur drsquoapplications probablementmalveillantes qui lui proposait un accord commercial 37

Mais lrsquoidentification des applications malveillantes nrsquoest pas la seule raison quipeut conduire a auditer une application Android Parmi drsquoautres raisons legitimes on peut citer

ndash Verifier que lrsquoapplication fait bien ce qursquoelle pretend faire Ce point est parti-culierement critique pour les applications de securite qui mettent en œuvre duchiffrement ou de la gestion de mots de passe par exemple Dans le domaineles surprises sont nombreuses drsquoautant que les applications mobiles nrsquoont pasencore la maturite des applications bureautiques et que les contraintes

36 httpwwwvibercom

37 httpwwwredditcomrAndroidcommentsfm3cuspyware_company_wants_us_to_embed_

their_code_into

N Ruff 139

du monde embarque se font sentir (puissance de calcul sources drsquoentropieremanence de lrsquoallocateur memoire Java etc)

ndash Recherche des failles de securite Et oui les applications Android sont aussivulnerables aux buffer overflows lorsqursquoelles utilisent du code natif (compileavec le NDK) et meme des injections SQL (meme si SQLite nrsquoimplemente pasdrsquoequivalent a xp cmdshell) Il existe par ailleurs des attaques specifiques aumonde Android comme les BroadcastReceiver qui ne verifieraient pas la sourcedes messages recus

Le probleme principal avec lrsquoaudit drsquoapplications Android nrsquoest pas techniqueLe probleme crsquoest lrsquoeuphorie du marche proliferation drsquoapplications et mises a jourfrequentes qui obligent a automatiser et industrialiser les audits 38

52 Auditer comment

Lrsquoaudit securite est une tache difficile a modeliser car elle tire parti de la creativitede lrsquoauditeur On peut toutefois identifier les grandes lignes suivantes

1 Recuperer lrsquoapplication

2 Decompresser les ressources

3 Desassembler le bytecode

4 Decompiler le bytecode (lorsque crsquoest possible)

5 Desassembler le code natif

6 Deboguer lrsquoapplication en cours drsquoexecution (sur un telephone reel ou danslrsquoemulateur)

Cette methodologie nrsquoest pas exhaustive elle ne donne pas acces au contenutelecharge ulterieurement (par exemple au travers des publicites integrees) Voyonsles methodes et les difficultes associees a chaque etape

Recuperer lrsquoapplication Cette etape nrsquoest pas trop compliquee pour qui est preta installer lrsquoapplication cible sur son telephone Apres installation le fichier APK estconserve dans le repertoire dataapp Selon les permissions appliquees au systeme defichiers il nrsquoest pas necessairement possible de lister le contenu de ce repertoire maisles paquets restent lisibles par lrsquooutil adb et le nom de paquet peut etre determinedepuis la MarketPlace ou le menu parametres du telephone (le nom exact estpaquet-Napk ou N vaut generalement 1)

38 httpwwwappanalysisorg

140 Securite du systeme Android

Toute autre methode est complexe et probablement illegale Parmi les methodespossibles on peut citer lrsquoinstallation de lrsquoapplication MarketPlace dans un emulateurou le reverse engineering de lrsquoapplication MarketPlace a des fins de reimplementation(cette derniere etant toutefois volumineuse donc complexe a analyser)

Depuis la version 22 du systeme Android et si lrsquoapplication lrsquoautorise il estpossible drsquoinstaller une application sur la carte SD Mais lrsquoapplication est alorsstockee dans un fichier asec chiffre Ce fichier est inexploitable jusqursquoa ce quele mecanisme et la cle de chiffrement soient connus

On peut imaginer qursquoune application extremement malveillante pourrait exploiterune faille des lrsquoinstallation pour elever ses privileges vers root et dissimuler ses traces(ie se rendre inaccessible de lrsquoexterieur) Ce cas ne srsquoest pas encore produit dansla nature a lrsquoheure ou jrsquoecris ces lignes mais srsquoavere techniquement faisable

Il faut noter que la MarketPlace de Google nrsquoest pas la seule disponible maisqursquoil existe egalement des MarketPlaces drsquooperateurs ou de tiers ainsi Amazoncommercialise desormais des applications Android 39 Cette proliferation complexifiedrsquoautant la tache drsquoanalyse des MarketPlaces La methode la plus universelle pourrecuperer la source drsquoinstallation drsquoune application reste donc de lrsquoinstaller sur untelephone

Un utilisateur peut installer des applications depuis des sources externes a laMarketPlace si lrsquooption autoriser les sources inconnues est cochee dans lesparametres de configuration Il existe des applications legitimes accessibles en dehorsdes MarketPlaces mais il existe egalement des bases drsquoapplications piratees surInternet dont lrsquoinnocuite ne peut pas etre garantie

Notons que certaines applications meme parmi celles disponibles sur les Market-Places officielles exigent au prealable un acces root au telephone

Decompresser les ressources Les fichiers places a lrsquointerieur drsquoun paquet APKsont optimises drsquoune maniere ou drsquoune autre avant drsquoetre compresses Ceci srsquoappliqueaussi bien au bytecode qursquoaux ressources textuelles (comme les fichiers XML)

Lrsquoune des optimisations principales est la deduplication de donnees Ainsi ilnrsquoexiste qursquoune seule instance de chaque chaine de caracteres dans un fichier DEXDifferents encodages optimises sont egalement utilises tel que LEB128 pourla representation des entiers (Little Endian Base 128 aussi utilise dans le formatDWARF)

Toutes ces optimisations nrsquoont pas pour but la protection logicielle et sont parfai-tement reversibles Lrsquooutil aapt fourni avec le SDK officiel permet ainsi drsquoexplorerle contenu du manifeste drsquoun paquet APK Les techniques drsquooptimisation ont ete

39 httpwwwamazoncomappstore

N Ruff 141

analysees et documentees par des tiers ce qui a permis la production drsquooutils dedecompression comme apktool 40

Desassembler le bytecode Avec le SDK officiel est fourni lrsquooutil dexdump quipermet de lister le bytecode contenu dans un fichier CLASSESDEX

Le format de fichier DEX a ete lui aussi analyse et documente 41 ce qui a permisla production de desassembleurs tiers comme baksmali

Le code genere suit la syntaxe Jasmin 42 bien connue dans le monde Java tra-ditionnel Cette syntaxe peut sembler obscure de prime abord mais elle est par-faitement reguliere donc finalement tres simple a apprehender Prenons un exempleissu drsquoune application reelle voici ci-dessous le code drsquoune methode appeleeemptyResult telle que produit par baksmali

method protected static emptyResult(LjavalangString )Z

locals 1

parameter result

prologue

line 306

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Toutes les directives commencent par un point Leur nom est relativement explicitelocals 1 va par exemple indiquer la presence drsquoune seule variable locale Le nomassigne aux opcodes de la machine virtuelle est egalement assez parlant

pN represente lrsquoargument numero N passe a la methode vN represente le re-gistre numero N (Dalvik est une machine virtuelle a registres et non a pile)

Munis de ces informations decortiquons la seule operation reellement complexeeffectuee dans cet extrait de code

40 httpcodegooglecompandroid-apktool

41 httpwwwnetmitecomandroidmydroiddalvikdocsdex-formathtml

42 httpjasminsourceforgenet

142 Securite du systeme Android

invoke-static Invoque une methode sta-tique Il existe egalementun opcode invoke-virtual

pour les methodes virtuellesinvoke-super pour la methodede la superclasse etc

p0 La methode appelee prend unseul argument La valeur de cetargument provient du premierargument passe a la methodeemptyResult

LcomutilsStringUtils-gtisEmpty Invoque la methode isEmpty de laclasse comutilsStringUtils L est un prefixe accole a tousles litteraux

(LjavalangString) Le premier (et seul) argument estde type javalangString

Z La methode retourne un booleen

A titre de reference voici les differents types natifs disponibles dans Jasmin

Z BooleenB OctetC CaractereS Entier court (16 bits)I Entier (32 bits)J Entier long (64 bits)F Flottant (32 bits)D Double (64 bits)

Lrsquoavantage majeur de lrsquooutil tiers apktool est la possibilite de modifier le bytecodeou les ressources drsquoune application puis de la recompiler dans une version fonctionnelleCeci permet drsquoutiliser une technique drsquoanalyse aussi ancienne que lrsquoinformatiqueappelee printf debugging

Dans le monde Android lrsquoutilisation de Systemout doit etre remplacee parandroidutilLog Cette classe definit plusieurs methodes ndash respectivement v d iw e et wtf ndash qui correspondent chacune a un niveau de verbosite ndash et dont lesarguments sont enregistres dans le journal systeme (sauf le niveau debug) Cejournal peut etre consulte a lrsquoaide de la commande adb logcat apparait en temps

N Ruff 143

reel dans lrsquooutil DDMS et peut egalement etre consulte par toute application quidispose de la permission READ LOGS

Si lrsquoon souhaite connaitre lrsquoargument passe a la methode emptyResult danslrsquoexemple precedent il suffit alors drsquoajouter un appel a nrsquoimporte quelle methode dela classe Log de la maniere suivante

method protected static emptyResult(LjavalangString )Z

locals 2

parameter result

prologue

line 306

const -string v1 PrintfDebuggingStyle

invoke -static v1 p0 LandroidutilLog-gtd(LjavalangStringLjavalang

String )I

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Une variable locale v1 a ete ajoutee contenant une chaine de caracteres fixe Lamethode d() est ensuite invoquee Cette modification est equivalente au code Javasuivant

Logd(PrintfDebuggingStyle ltp0 gt)

On peut constater experimentalement que de nombreuses applications de laMarketPlace font usage de lrsquoAPI Log ce qui permet de collecter des donnees defonctionnement parfois tres (trop) interessantes

Le journal systeme peut etre collecte a distance par un developpeur lors ducrash de son application si lrsquoutilisateur lrsquoautorise Cette technique a ete presenteepar Renaud Lifchitz lors de la conference 27c3 pour espionner les deplacements drsquounutilisateur 43

Decompiler le bytecode Comme avec tout bytecode de haut niveau (ex JavaNET) la semantique de lrsquoapplication est conservee

Il est donc possible de decompiler du bytecode Dalvik et de reconstruire le codeJava drsquoorigine (sans les commentaires ndash seule information perdue a la compilation) Lepremier outil public capable drsquoune telle operation fut undx 44 de Marc Schoenefeld Cetoutil est toutefois bogue et non maintenu par son auteur Le meilleur outil disponibleactuellement est lrsquooutil dex2jar 45 qui reconstruit du bytecode Java a partir du

43 httpeventscccdecongress2010Fahrplanevents4151enhtml

44 httpwwwillegalaccessorgundxhtml

45 httpcodegooglecompdex2jar

144 Securite du systeme Android

bytecode Dalvik Les outils classiques de decompilation Java 46 47 srsquoappliquentalors

Compte-tenu de la facilite deconcertante avec laquelle il est possible drsquoanalyserles applications Android (et donc de les craquer entre autres) Google a mis adisposition des developpeurs une bibliotheque tres complete de gestion des licences enligne Licensing Verification Library (LVL) 48 Toutes les versions de cette bibliothequeont malheureusement ete craquees elles aussi a lrsquoheure ou jrsquoecris ces lignes

Une autre contre-mesure mise en place par Google consiste a integrer un obfusca-teur de bytecode dans la chaine de compilation ProGuard 49 Cet outil relativementpuissant est configurable par le developpeur au travers du fichier proguardcfg toutefois le fichier de configuration par defaut (reproduit ci-apres) nrsquoopere que lerenommage des classes et methodes invisibles a lrsquoexterieur de lrsquoapplication ce qui estpeu efficace face a un attaquant determine

-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontpreverify

-verbose

-optimizations codesimplificationarithmetic field classmerging

-keep public class extends androidappActivity

-keep public class extends androidappApplication

-keep public class extends androidappService

-keep public class extends androidcontentBroadcastReceiver

-keep public class extends androidcontentContentProvider

-keep public class extends androidappbackupBackupAgentHelper

-keep public class extends androidpreferencePreference

-keep public class comandroidvendinglicensingILicensingService

-keepclasseswithmembernames class

native ltmethods gt

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet)

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet int)

-keepclassmembers enum

public static [] values ()

public static valueOf(javalangString)

46 httpmembersfortunecitycomneshkovdjhtml

47 httpjavadecompilerfreefr

48 httpdeveloperandroidcomguidepublishinglicensinghtml

49 httpdeveloperandroidcomguidedevelopingtoolsproguardhtml

N Ruff 145

-keep class implements androidosParcelable

public static final androidosParcelable$Creator

Au vu des resultats obtenus on peut considerer que lrsquoobfuscation de bytecode Javadans le monde Android est en retard sur lrsquoobfuscation de code x86 dans le monde PCLes techniques de complexification du flot de controle ou de construction dynamiquedes constantes ne sont pas encore repandues dans les applications commerciales pourAndroid Afin de combler ce manque des projets paralleles (comme AndroGuard 50)fleurissent - mais on peut supposer que la solution integree au SDK fourni par Googlerestera la solution majoritairement utilisee par les applications (pour des raisons desimplicite evidentes)

Desassembler du code natif Lors de lrsquoaudit drsquoune application Android il estpossible de rencontrer du code natif dans deux cas

1 Lrsquoapplication contient des bibliotheques natives compilees avec le NDK

2 Lrsquoapplication contient des applications natives ou srsquoavere etre elle-meme uneapplication native Ce cas est courant avec les applications malveillantes quiembarquent du code natif pour exploiter des failles noyau 51

Dans les deux cas Android ne presente aucune specificite par rapport a unLinuxARM classique Les fichiers natifs sont au format ELF La chaine de compilationnative est construite autour du compilateur GCC Tous les outils sont disponiblesdepuis longtemps pour analyser des tels binaires (ex IDA Pro Hex-Rays DecompilerARM etc)

Deboguer lrsquoapplication Une application Java compilee en mode debug peutetre deboguee a distance au travers du protocole standard Java Debug Wire Protocol(JDWP) defini dans le cadre de Java Platform Debugger Architecture (JPDA)

Les environnements de developpement Java classiques (comme Eclipse) per-mettent ainsi de deboguer une application a distance une fois celle-ci installee sur letelephone

Il est egalement possible drsquoutiliser le venerable JDB (fourni avec le SDK Java 52)bien que cet outil nrsquoait jamais depasse le statut de preuve de concept a mon avis

Lrsquooutil DDMS fourni avec le SDK Android repose egalement sur JPDA Cetoutil ne permet toutefois pas le debogage drsquoapplications mais seulement lrsquoanalyse deperformance

50 httpcodegooglecompandroguard

51 httpstealthopenwallnetxSports

52 httpdownloadoraclecomjavase142docstooldocssolarisjdbhtml

146 Securite du systeme Android

La liste des applications pouvant etre deboguees sur un systeme Android srsquoobtientavec la commande adb jdwp

Le vrai probleme se pose pour les applications qui nrsquoont pas ete compilees enmode debug Ceci implique que le manifeste de lrsquoapplication ne contient pasdrsquoentree ltapplication androiddebuggable=truegt De plus la plupart des outilsde debogage Java necessitent que le bytecode contienne des indications sur les numerosde lignes dans le code source drsquoorigine (il srsquoagit drsquoune limitation arbitraire qui nesrsquoapplique pas a lrsquooutil JavaSnoop 53 par exemple)

Fort heureusement il est possible de desassembler ces applications puis de lesreassembler en mode debug avec lrsquooutil apktool 54 Le processus est complexe etle resultat peu convivial mais il a le merite drsquoexister

Pour reinstaller lrsquoapplication modifiee sur un equipement reel il est necessairede la signer a nouveau La procedure est simple et parfaitement documentee parGoogle

Il faut drsquoabord generer une cle personnelle autosignee a duree de vie extremementlongue

$ keytool -genkey -v -keystore mykeykeystore -alias nom_alias -keyalg RSA -

keysize 2048 -validity 10000

Il faut ensuite signer le nouvel APK avec les outils du SDK Java

$ jarsigner -verbose -keystore mykeykeystore nom_applicationapk nom_alias

Enfin il est recommande drsquoaligner le code sur un multiple de 4 octets pour desraisons de performance

$ zipalign -v 4 nom_applicationapk nom_application_finalapk

Instrumentation Il est possible drsquoinstrumenter une application Java a lrsquoaide declasses specifiques a Android (androidappInstrumentation 55) Cette methodefournit des resultats detailles et personnalisables sur le fonctionnement interne drsquouneapplication elle necessite toutefois une decompilation et une modification prealablede lrsquoapplication a auditer

A lrsquoheure ou jrsquoecris ces lignes il nrsquoexiste pas (a ma connaissance) drsquooutil permettantde generaliser et drsquoautomatiser le processus a tout fichier APK Cette voie de recherchepourrait toutefois donner des resultats interessants

53 httpwwwaspectsecuritycomtoolsjavasnoop

54 httpcodegooglecompandroid-apktoolwikiSmaliDebugging

55 httpdeveloperandroidcomreferenceandroidappInstrumentationhtml

N Ruff 147

Outils specifiques Les outils disponibles actuellement dans le monde Android sontrudimentaires quoi que suffisants

Toutefois on peut raisonnablement estimer que la quantite et la qualite des outilsdisponibles va croitre de concert avec la popularite du systeme Android

A lrsquoheure ou jrsquoecris ces lignes la version 61 du logiciel IDA Pro 56 vient de sortirCette version ajoute le support du format DEX et du bytecode Dalvik ainsi que ledebogage a distance des applications Android natives

On peut supposer que drsquoautres outils couramment utilises par les auditeurs ensecurite vont etre mis a jour pour srsquoadapter au monde Android

6 Conclusion

Le systeme Android nrsquoa malheureusement pas profite de lrsquoopportunite unique quilui etait donnee repartir de la feuille blanche et creer un systeme drsquoexploitation sur par conception

A cause drsquoun heritage logiciel peu fiable ainsi que des contraintes materielles etcommerciales issues du monde de la telephonie mobile le systeme resultant est uncompromis qui laisse une large place a la creativite des attaquants

Celle-ci est drsquoautant plus exacerbee que la telephonie mobile est un phenomene demasse (il y a plus de telephones mobiles que drsquoordinateurs dans le monde) et que letelephone mobile est par conception un systeme de paiement (ce que nrsquoest pas un PCtraditionnel)

A ce tableau vient srsquoajouter 30 ans drsquoexperience dans le domaine des attaqueslogicielles appliquees a un ecosysteme applicatif qui nrsquoexistait pas il y a 5 ans

Toutes les conditions sont donc reunies pour que des attaques de grande ampleurmotivees par lrsquoargent se produisent contre les materiels grand public equipes dusysteme Android (telephones tablettes televisions )

La bonne nouvelle pour lrsquoexpert en securite crsquoest qursquoil est encore temps de srsquoymettre Android est suffisamment jeune et accessible aux nouveaux entrants ce quinrsquoest plus le cas de la plateforme PC ou les techniques drsquoattaque (ex exploitationdrsquoun heap overflow) et de defense (ex obfuscation logicielle) ont atteint des sommetsde raffinement desormais accessibles aux seuls experts les plus pointus du domaine

7 Sites et outils

71 Sites officiels

ndash Android portail officiel httpwwwandroidcom

56 httpwwwhex-rayscomidapro

148 Securite du systeme Android

ndash Android MarketPlace officielle httpsmarketandroidcomndash Android reference des developpeurs httpdeveloperandroidcom

72 Sites non officiels

ndash Reference de la machine virtuelle Dalvik httpdalvikvmcom

73 Outils tiers

ndash Google Android Debugging Utilities httpsitesgooglecomsiteortegaalfredoandroid

ndash Undx httpwwwillegalaccessorgundxhtmlndash SmaliBaksmali httpcodegooglecompsmalindash Dedexer httpdedexersourceforgenetndash Dex2Jar httpcodegooglecompdex2jarndash TaintDroid httpwwwappanalysisorg

ndash AndroGuard httpandroguardblogspotcom

References

1 Benjamin Morin Modele de securite drsquoAndroid MISC 51 2010

2 K Chen Reversing and exploiting an apple firmware update httpwwwblackhatcom

presentationsbh-usa-09CHENBHUSA09-Chen-RevAppleFirm-PAPERpdf BlackHat 2009

3 Alexandre Gazet Sticky fingers amp KBC Custom Shop httpwwwssticorg2011presentation

sticky_fingers_and_kbc_custom_shop SSTIC 2011

4 Loıc Duflot and Yves-Alexis Perez Quelques elements en matiere de securite des cartes reseau http

wwwssticorg2010presentationPeut_on_faire_confiance_aux_cartes_reseau SSTIC 2010

5 Alexander Tereshkin and Rafal Wojtczuk Introducing Ring -3 Rootkits httpwwwblackhat

compresentationsbh-usa-09TERESHKINBHUSA09-Tereshkin-Ring3Rootkit-SLIDESpdf Black-Hat USA 2009

6 Loıc Duflot Yves-Alexis Perez and Benjamin Morin Run-time firmware integrity verification what ifyou canrsquot trust your network card CanSecWest 2011

7 Ralf-Philipp Weinmann All Your Baseband Are Belong To Us httpeventscccdecongress

2010Fahrplanevents4090enhtml CCC 2010

8 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Formal Model to Analyzethe Permission Authorization and Enforcement in the Android Framework SecureComrsquo10

9 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Small but Non-negligibleFlaw in the Android Permission Scheme Wook Shin Sanghoon Kwak Shinsaku Kiyomoto KazuhideFukushima et Toshiaki Tanaka IEEE POLICY 2010

10 Marc Schonefled Reconstructing Dalvik Applications httpcansecwestcomcsw09

csw09-schoenefeldpdf CanSecWest 2009

N Ruff 149

11 Sergio Alvarez The Smart-Phones Nightmare (iPhone-oriented parts about Android) http

cansecwestcomcsw09csw09-alvarezpdf CanSecWest 2009

12 Nicolas Economou Alfredo Ortega Smartphone (in)security httpcansecwestcomcsw09

csw09-ortega-economoupdf CanSecWest 2009

13 Jesse Burns Exploratory Android Surgery httpwwwblackhatcompresentationsbh-usa-09

BURNSBHUSA09-Burns-AndroidSurgery-SLIDESpdf BlackHat USA 2009

14 Kevin Mahaffey John Hering App Attack httpsmediablackhatcombh-us-10presentations

Mahaffey_HeringBlackhat-USA-2010-Mahaffey-Hering-Lookout-App-Genome-slidespdf Black-Hat USA 2010

15 Nils The Risk you carry in your Pocket httpsmediablackhatcombh-ad-10Nils

Black-Hat-AD-2010-android-sandcastle-slidespdf BlackHat Abu Dhabi 2010

16 Raphael Rigo Android Reverse Engineering and Forensics httpsdeepsecnetdocsspeaker

htmlPSLOT45 DeepSec 2010

17 Itzhak Avraham Popping Shell on A(ndroid)RM Devices httpsmediablackhatcombh-dc-11

AvrahamBlackHat_DC_2011_Avraham-Popping_Android_Devices-Slidespdf BlackHat DC 2011

18 Jon Oberheide httpjonoberheideorgblog20100625remote-kill-and-install-on-google-android

19 Jon Oberheide httpjonoberheideorgblog20100628a-peek-inside-the-gtalkservice-connection

20 httpwwwandroidpolicecom20110301the-mother-of-all-android-

malware-has-arrived-stolen-apps-released-to-the-market-that-root-

your-phone-steal-your-data-and-open-backdoor

  • Seacutecuriteacute du systegraveme Android
  • N Ruff

126 Securite du systeme Android

Plus proche du telephone la compromission du baseband a ete demontree possiblerecemment [7] La securite de la plateforme ne peut pas srsquoenvisager sans la securitedes composants materiels qui la compose

5 Les interfaces avec le systeme drsquoexploitation ne sont pas celles de Linux

On peut meme raisonnablement affirmer que lrsquoAPI Java exposee aux applicationsest radicalement differente de celle utilisee dans la programmation Unix tradition-nelle Lrsquointerface graphique nrsquoest pas X11 (heureusement ) Les communicationsinter-processus doivent passer par un mecanisme specifique appele Binder Denombreux concepts drsquoexecution adaptes aux contraintes drsquoun smartphone ont etemodelises (ex processus de type Activity Service Broadcast Receiver ou ContentProvider)

33 Developpement drsquoapplications

Le developpement sous Android srsquoeffectue majoritairement en langage Java ce quicontribue a la popularite de la plateforme aupres des developpeurs Un SDK est fournigratuitement par Google pour les trois systemes drsquoexploitation majeurs (WindowsMac OS X et Linux) Ce SDK peut srsquointegrer dans lrsquoIDE bien connu Eclipse oufonctionner en ligne de commande Il dispose drsquoun emulateur (base sur QEmu) ainsique drsquooutils de mise au point puissants (comme DDMS)

Apres compilation lrsquoutilitaire DX (fourni dans le SDK) permet de convertir lebytecode Java en bytecode Dalvik Lrsquooperation inverse nrsquoest pas possible avec lesoutils du SDK officiel

Lrsquoapplication installable sur le telephone est empaquetee dans un fichier APK quiinclut le bytecode de lrsquoapplication elle-meme (fichier CLASSESDEX) le manifestedrsquoapplication ses ressources et les signatures numeriques Le concept est identique acelui des fichiers JAR ndash les fichiers APK sont drsquoailleurs eux-memes des archives ZIP

Le developpement drsquoapplications est un peu deroutant de prime abord - lrsquoapplica-tion ne disposant pas drsquoun point drsquoentree fixe (de type main()) mais srsquoenregistrantplutot aupres du systeme pour repondre a des evenements appeles Intents dans ladocumentation officielle

Il est egalement possible drsquointegrer du code natif dans une application Java parune interface JNI et le kit de developpement officiel appele NDK (Native DevelopmentKit) De nombreuses applications cryptographiques exploitent cette opportunite pourameliorer les performances des algorithmes gourmands et assurer la securite deselements cryptographiques en memoire (le mecanisme de garbage collector de Javaetant difficilement compatible avec lrsquoeffacement securise de donnees en memoire)

Il nrsquoest pas possible de developper une application 100 native et de la mettre adisposition sur une MarketPlace Il reste assez simple de compiler une application

N Ruff 127

100 native mais un code Open Source existant pour Linux ne va pas necessairementrecompiler et fonctionner sans modification sur une plateforme Android Lrsquoabsence debinsh et de etcpasswd sont par exemple deux ecueils auxquels jrsquoai ete confrontes

Lrsquoobjectif nrsquoest pas ici drsquoecrire un tutoriel pour le developpement drsquoapplicationsAndroid drsquoautant que la documentation Google est tres bien faite 8

34 Modele de securite

Le modele de securite Android nrsquoa guere evolue depuis ses origines il a donc dejaete abondamment commente [1] Son etude reste neanmoins un prealable obligatoirea toute analyse de risques sur cette plateforme

Signature numerique Les applications sont signees numeriquement Ceci est sourcede confusion dans lrsquoesprit du grand public et meme des informaticiens qui associentgeneralement la presence drsquoun certificat a celle drsquoune securite inviolable probablementa cause de la propagande realisee par les acteurs du e-commerce autour du protocoleHTTPS (les fameuses vertus du cadenas jaune et plus recemment de la barre drsquoadresseverte)

En pratique tous les systemes de signature numerique apparus recemment dansles marches grand public (ex programme Symbian Signed signature des appli-cations iPhone signature des pilotes Windows 64 bits) nrsquooffrent aucune securite apriori Le cout drsquoacquisition drsquoun certificat est marginal et les verifications opereesquasiment nulles Le certificat sert essentiellement drsquoidentifiant unique pour permettrela revocation a posteriori

Afin drsquoeviter les problemes drsquoexpiration et de renouvellement des cles Googleimpose meme lrsquoutilisation de certificats de signature dont la date drsquoexpiration depassele 22 octobre 2033 9

Cloisonnement A lrsquoinstallation chaque application se voit attribuer un compteUnix (uid) Lrsquoisolation entre applications est rendue possible par les mecanismes desecurite natifs du systeme Unix

Lrsquoensemble des applications signees par le meme certificat srsquoexecutent sous la memeidentite de groupe Unix (gid) Les interactions possibles entre applications signeespar le meme certificat sont nombreuses 10 ndash elles peuvent ainsi partager le memeuid 11 ce qui ouvre la voie a la creation drsquoapplications malveillantes k-aires chaque

8 httpdeveloperandroidcom

9 httpdeveloperandroidcomguidepublishingapp-signinghtml

10 httpdeveloperandroidcomguidetopicssecuritysecurityhtml

11 httpdeveloperandroidcomreferenceandroidRattrhtmlsharedUserId

128 Securite du systeme Android

application ne possedant qursquoun jeu limite de permissions (jugees peu dangereusesindividuellement) mais la combinaison de toutes ces applications dans le memeprocessus formant une super application pouvant par exemple exfiltrer toutes lesdonnees du telephone

Revocation Compte-tenu de lrsquoaccroissement du nombre drsquoapplications malveillantessur la MarketPlace officielle Google fait un usage de plus en plus frequent dukill switch 12 ndash fonction qui permet drsquoeliminer a distance toutes les instances drsquouneapplication identifiee par son certificat

Pour ceux que cette fonction intrigue je signale que le mecanisme sous-jacent adeja ete decortique en detail [1819] Le cœur du mecanisme repose sur le processusGTalkService qui recoit et traite les messages REMOVE ASSET (et INSTALL ASSET) Laconclusion en est que toute personne en position drsquoeffectuer un man-in-the-middleSSL avec un certificat valide peut emettre de tels messages La liste des autorites deconfiance du systeme se trouve dans le fichier systemetcsecuritycacertsbkset ne peut pas facilement etre modifiee 13 Toutefois cette liste contient (sur montelephone) 58 autorites de nature variee (entreprises gouvernements etc) De plusune application malveillante ayant eleve ses privileges vers root pourrait probablementbloquer lrsquoutilisation du kill switch sur un equipement donne une fois les mecanismessous-jacents connus et documentes

Par le passe la securite basee sur la revocation a montre ses limites 14 En effetcela suppose que lrsquoequipement cible dispose drsquoune connexion a un reseau de donneeset qursquoil soit configure pour en faire usage Ce sont des hypotheses assez fortes

35 Les permissions

Considerations generales Le modele de securite des applications tierce partieest essentiellement declaratif Un fichier de manifeste decrit les permissionsmaximales requises par lrsquoapplication Google definit une centaine de permissionspossibles par defaut 15 mais les constructeurs sont libres drsquoen ajouter egalement cequi peut engendrer des risques specifiques a un modele de telephone donne

La commande de base permettant de manipuler les permissions sur le telephonesrsquoappelle pm Voici les options qursquoelle offre

$ adb shell pm

12 httpandroid-developersblogspotcom201006exercising-our-remote-applicationhtml

13 httpwwwmcbsyscomtechblog201012android-certificates

14 httpwwwf-securecomweblogarchives00001918html

15 httpdeveloperandroidcomreferenceandroidManifestpermissionhtml

N Ruff 129

usage pm [list|path|install|uninstall]

pm list packages [-f]

pm list permission -groups

pm list permissions [-g] [-f] [-d] [-u] [GROUP]

pm list instrumentation [-f] [TARGET -PACKAGE]

pm list features

pm path PACKAGE

pm install [-l] [-r] [-t] [-i INSTALLER_PACKAGE_NAME] [-s] [-f] PATH

pm uninstall [-k] PACKAGE

pm enable PACKAGE_OR_COMPONENT

pm disable PACKAGE_OR_COMPONENT

pm setInstallLocation [0 auto] [1 internal] [2 external]

()

A titre drsquoexemple voici les permissions definies par HTC sur lrsquoune de mes plate-formes de test

$ adb shell pm list permissions | grep htc

permissioncomhtcandroidmailpermissionREAD_MAIL

permissioncomhtcManifestpermissionBROADCAST_KEYIN_EVENT

permissioncomhtcManifestpermissionBROADCAST_MOTION_EVENT

permissioncomhtcManifestpermissionBLOCK_KEYBOARD_EVENT

permissioncomhtcandroidmailpermissionWRITE_ACCOUNT

permissioncomhtcandroidmailpermissionREAD_ACCOUNT

permissioncomhtchtctwitterpermissionuseprovider

permissioncomhtcManifestpermissionBROADCAST_TRACKBALL_EVENT

permissioncomhtcinternalpermissionHTC_APP_PMEM

permissioncomhtcandroidmailpermissionWRITE_MAIL

On notera egalement que cette plateforme contient des permissions a priorispecifiques a lrsquooperateur (americain) Sprint - alors qursquoil srsquoagit drsquoun telephone acheteen France sans abonnement

$ adb shell pm list permissions | grep sprint

permissioncomsprintinternalpermissionSLOT0

permissioncomsprintinternalpermissionPLATFORM

permissioncomsprintinternalpermissionSYSTEMPROPERTIES_WRITE

permissioncomsprintinternalpermissionSYSTEMPROPERTIES

permissioncomsprintinternalpermissionCONNECTIONMANAGER

permissioncomsprintinternalpermissionOMADM

permissioncomsprintandroidpermissionDISABLE_HDMI

Lrsquoutilisateur est libre drsquoaccepter ou de refuser lrsquoapplication mais il ne peut pasmodifier la liste des permissions demandees (sauf a modifier lrsquoapplication et a lare-signer avec sa propre cle comme nous le verrons plus tard)

On peut raisonnablement estimer que la plupart des utilisateurs ne sont pas enmesure drsquoeffectuer un choix eclaire a ce stade

130 Securite du systeme Android

Securite theorique Lrsquoune des questions qursquoon peut se poser sur le systeme depermissions tel qursquoil a ete defini est lrsquoexistence (ou non) drsquoun modele theorique sous-jacent coherent [98] Est-ce que chaque permission correspond bien a un ensemble detaches uniques et strictement delimitees Crsquoest la meme question qui se pose avec lemodele des capabilities sous Linux et dans ce deuxieme cas la reponse est non CAP SYS MODULE permet par exemple de charger des modules noyau arbitraires etdonc de compromettre entierement lrsquointegrite du noyau

Dans le cas drsquoAndroid on peut suspecter que la permission SYSTEMPROPERTIES WRITE

definie par lrsquooperateur Sprint (vue precedemment) a probablement une intersectionnon nulle avec la permission WRITE SETTINGS definie par Google tout en etantprobablement inconnue des outils drsquoanalyse automatique drsquoinnocuite

Lrsquointeret pratique drsquoune etude mathematique sur les permissions Android esttoutefois limite En effet les deux risques majeurs rencontres dans la nature sont

ndash Des applications malveillantes qui demandent des permissions excessivementlarges et abusent de la confiance des utilisateurs

ndash Des applications malveillantes sans aucune permission qui exploitent des faillessysteme pour obtenir lrsquoacces au compte root et contourner entierement lemodele de securite

Ces risques sont partages avec tous les autres modeles de securite en usage danslrsquoindustrie (SELinux sous Linux UAC sous Windows etc)

ndash Ces modeles se heurtent a lrsquoergonomie des interfaces et a la prise de decisioneclairee par les utilisateurs finaux

ndash Lrsquoimplementation de ces modeles exige un effort de conception important tandisque les attaquants les contournent entierement en violant les hypotheses deconception (en particulier lrsquohypothese que le noyau du systeme drsquoexploitationest exempt de bogues)

Autres limites du modele Presque toutes les applications existantes exigent unacces illimite au reseau tres souvent pour recuperer du contenu publicitaire Enpratique cela signifie que le risque pose par une application ne se limite pas a unensemble de permissions statiques par exemple un contenu malveillant pourra etreenvoye a tout moment au moteur de rendu WebKit a travers le canal publicitaire etprovoquer ainsi la prise de controle drsquoun telephone donne au travers une applicationa priori saine

Les permissions demandees peuvent changer a lrsquooccasion drsquoune mise a jour Orla plupart des utilisateurs font confiance aux applications qursquoils ont deja installeesDepuis la version 22 drsquoAndroid lrsquoutilisateur peut autoriser les applications a semettre a jour automatiquement Fort heureusement la mise a jour automatique est

N Ruff 131

bloquee si les permissions demandees par lrsquoapplication changent De mon point devue le mecanisme de mise a jour automatique peut donc etre considere comme plutotbenefique pour lrsquoecosysteme

Enfin le code natif attache a une application (dans le cas drsquoutilisation du NDK)est essentiellement non verifiable contrairement au bytecode Dalvik Le modelede securite Unix vient donc srsquoajouter au modele de permissions Android

4 Panorama des risques

Jrsquoidentifie trois risques de securite majeurs applicables aux ordiphones mo-dernes

1 La structuration du marche de la telephonie

2 Les failles logicielles

3 Les applications tierce partie

Nous allons passer en revue ces trois risques Le troisieme risque est plus specifique alrsquoecosysteme Android dans lequel le role de chaque acteur est bien separe fournisseurde materiel fournisseur de logiciel fournisseur de service

Il se verifie moins dans des ecosystemes comme celui de lrsquoiPhone et du BlackBerrydans lesquels les fournisseurs du materiel et du logiciel sont les memes

41 Marche de la telephonie

Plusieurs acteurs majeurs interviennent dans le marche de la telephonie mobile

1 Les fabricants de materiels

2 Les fabricants de logiciels (en lrsquooccurrence Google)

3 Les circuits de distribution (pour lrsquoinstant les operateurs de telephonie mobile)

4 Les developpeurs drsquoapplications

5 Les fournisseurs de contenus et de services (regies publicitaires services en ligneetc)

Nous allons passer en revue les interets de ces acteurs et le role qursquoils jouent dansla securite de la plateforme a lrsquoexception des derniers qui sont trop divers et varies

Il faut noter que si demain Android venait a equiper drsquoautres biens de consomma-tion courante (ex televiseurs refrigerateurs etc) les parties prenantes (et donc lesconclusions de cette etude) ne seraient pas fondamentalement differentes

132 Securite du systeme Android

Fabricants de materiels Les fabricants de materiels vivent dans un monde extremementconcurrentiel et doivent minimiser le cout de developpement de leurs produits pourque lrsquooperateur puisse au final proposer son telephone a 1 Par ailleurs ils doiventegalement minimiser le time to market un telephone portable se demode tresvite la duree de vie commerciale drsquoun systeme est de lrsquoordre de 6 mois

En consequence logique les developpements sont bacles Les systemes pousses enproduction sont a peine testes et les fonctions de debogage restent souvent activees(comme en temoigne le shell root disponible sur le port TCP12345 des series HTCEvo et HTC Hero commercialisees par Sprint 16)

En regle generale aucun support technique nrsquoest offert apres la sortie drsquountelephone Les mises a jour officielles de firmware sont rarissimes dans le domaine dela telephonie mobile - a lrsquoexception notable drsquoApple qui propose des mises a jourpour le systeme iOS dans la fenetre de support de ses equipements a savoir 21

2ans

Ceci conduit a la proliferation de firmwares non officiels dont lrsquoinnocuite et la stabilitene peuvent pas etre garantis

Dans le cas tres precis de mon telephone LG GW620 livre sous Android 15 LGFrance 17 a promis une mise a jour vers Android 16 pendant plus drsquoun an avant definalement se retracter Des firmwares Android 21 et 22 drsquoexcellente facture ndash maisnon officiels ndash ont donc ete developpes par des amateurs 18 Sous la pression de sesutilisateurs LG a fini par sortir un firmware officiel mais trop tard

Fabricants de logiciels La concurrence fait rage dans le domaine des systemesdrsquoexploitation pour ordiphones

Des lors les editeurs de systemes drsquoexploitation doivent seduire tous les autresacteurs quitte a diminuer les contraintes de securite

ndash Pour seduire les utilisateurs il semble necessaire de disposer du plus grandnombre drsquoapplications dans sa MarketPlaceBien qursquoon puisse questionner cette logique (ne serait-il pas plus interessant dedisposer drsquoapplications utiles fiables et bien realisees ) la guerre des chiffresest neanmoins lancee

ndash Pour seduire les developpeurs drsquoapplications il est necessaire de leur faciliter letravail au maximumLe choix du langage Java et la mise a disposition drsquoun SDK gratuit pour Eclipseva dans ce sens Mais Google va meme plus loin en mettant a disposition un SDK

16 httpwwwunrevokedcomrootwikidokuphppublicunrevoked1_disclosure

17 httptwittercomlg_blog_france

18 httpopenetnacomopenetna

N Ruff 133

visuel pour les gens nrsquoayant aucune notion de developpement 19 On peutse poser des questions sur la securite (et la qualite en general) des applicationsqui en sortirontLa signature drsquoapplications fut egalement pendant longtemps une pierre drsquoachop-pement Lors du lancement du programme Symbian Signed on a pu lireque Symbian voulait tuer les developpeurs independants HeureusementlrsquoAppStore a depuis prouve le contraire et Android nrsquoa eu aucun mal a imposerla signature des sa genese

ndash Seduire les fabricants de materiels est assez simple il suffit de produire unsysteme gratuit et drsquoen assurer une bonne partie du support Ajoutez a celaune forte demande du marche et tout est en place pour garantir le succes

Circuits de distribution Lrsquoessentiel des ordiphones sont commercialises par lesoperateurs de telephonie mobile (Google ayant drsquoailleurs essuye un echec commercialsur la vente en direct du Nexus One)

Comme la plupart des acteurs de la chaine les operateurs cherchent a maximiserleurs revenus parfois au detriment de la securite

ndash Les operateurs personnalisent les systemes drsquoexploitation en y ajoutant desbogues

ndash Les operateurs tentent de rendre payantes des fonctions natives incitant de cefait les utilisateurs au piratage

Parmi les inventions geniales du marketing on peut citer le bridage du tethering(utilisation du telephone comme modem 3G) la geolocalisation payante (alors que letelephone dispose drsquoun GPS integre) lrsquoimpossibilite de regarder la tele ou drsquoecouterde la musique sur un lien WiFi (mais pas sur un lien 3G) etc

Des lors les utilisateurs sont tentes de debrider leur telephone (jailbreaking)drsquoinstaller des applications tierce partie douteuses voire drsquoinstaller des systemes nonofficiels sans garantie drsquoinnocuite

Developpeurs drsquoapplications Lrsquoun des moyens les plus efficaces pour seduire lesdeveloppements est de leur promettre des revenus consequents Pas facile dans unmonde ou la plupart des applications sont gratuites ou dont le prix nrsquoexcede pas 1

Tout drsquoabord le processus drsquoachat drsquoapplications est relativement simple grace aGoogle Checkout lorsque lrsquooperateur ne fournit pas lui-meme le service de facturationau travers de sa MarketPlace Pour les applications financees par la publicite lareputation de Google dans le domaine nrsquoest plus a faire (surtout depuis le rachat dela societe AdMob specialisee dans le domaine de la publicite sur mobiles)

19 httpappinventorgooglelabscomabout

134 Securite du systeme Android

Contrairement a ce qursquoon pourrait croire les deux methodes generent des reve-nus comparables comme le revele lrsquoauteur drsquoune application inutile mais pourtanttelechargee presque 100 000 fois a savoir Advanced Task Manager 20

Les developpeurs attires par des revenus encore plus rapides pourront etre tentespar le cote obscur de la telephonie mobile appels et SMS surtaxes vol (et revente)du carnet drsquoadresses collecte de lrsquohistorique du navigateur etc

Ce phenomene est loin drsquoetre marginal certaines applications etant clairementmalveillantes ndash comme SMSAndroidOSFakePlayera ou les applications editeespar 09Droid qui se font passer pour des applications bancaires officielles ndash drsquoautresetant simplement a la limite du marketing agressif ndash comme celles de lrsquoediteur francaisZeuzz

Plusieurs etudes soulignent la dangerosite des MarketPlaces generalement fi-nancees par les editeurs antivirus ces etudes ne sont toutefois pas drsquoune qualitescientifique suffisante pour etre citees ici Le risque semble neanmoins reel puisqueGoogle a retire en urgence des dizaines drsquoapplications de la MarketPlace dans le cadrede lrsquoaffaire DroidDream (nous y reviendrons)

42 Failles logicielles

Etat des lieux Compte-tenu de lrsquoutilisation massive de code Open Source dans lesysteme Android les failles drsquoimplementation logicielle sont faciles a identifier il suffitde suivre les alertes de securite des principaux projets Lorsqursquoils sont disponibles cequi nrsquoest pas forcement le cas pour le noyau Linux

Les vecteurs principaux (en termes de nombre de lignes de code et drsquoexposition)sont le systeme Linux et le navigateur Web (et particulierement le moteur WebKitcommun avec Safari)

Il ne faut pas oublier non plus qursquoAndroid integre Flash Player et vit avec lesmemes failles 21

Failles navigateur Comme dans tout navigateur Web de complexite importanteles failles sont nombreuses Ces failles nrsquoen restent pas moins dangereuses car ellesont ete demontrees exploitables sur Android 22 23

Lrsquoune drsquoentre elles est meme disponible dans Metasploit 24 Il srsquoagit drsquoune faillerelativement grave qui permet de lire nrsquoimporte quel fichier du telephone accessible

20 httparronlacom201008android-revenue-advanced-task-manager

21 httpwwwtheinquirernetinquirernews2034092android-smartphones-attack-flash-player-hackers

22 httpwwwexploit-dbcomexploits15423

23 httpwwwexploit-dbcomexploits16974

24 httpblogmetasploitcom201101mobile-device-security-and-android-filehtml

N Ruff 135

au processus navigateur - ce qui inclut lrsquointegralite de la carte SD puisque celle-ci estformatee en FAT (donc sans aucun controle drsquoacces)

On notera dans cette attaque lrsquoutilisation de lrsquoURL contentcomandroid

htmlfileproviderltfilenamegt qui permet de lire nrsquoimporte quel fichier du telephoneau travers drsquoun Content Provider 25 ndash une notion specifique a Android qui prometdrsquoetre encore source de nombreuses failles vu la surface drsquoattaque exposee

Par ailleurs outre les schemas traditionnels (file http etc) Androidsupporte par defaut des schemas plus specifiques et donc moins testes

Parmi les schemas supportes on peut citer content (qui permet de com-muniquer avec un Content Provider) market (qui permet drsquointeragir avec laMarketPlace comme par exemple marketdetailsid=ltpackagegt) ou android

resource (qui permet drsquoacceder a une ressource dans un paquet comme parexemple androidresourceltpaquetgtltressourcegt)

Failles systeme Les failles systeme ne sont pas legion mais ont toutes un impactcritique sur la securite du systeme

Parmi les failles les plus connues (car les plus exploitees dans la nature ) onpeut citer les failles publiees sur le site xSports 26 a savoir

ndash Exploid faille udev bien connue des administrateurs Linux CVE-2009-1185

ndash Rage Against The Cage faille liee au mauvais comportement du processusadb lorsque RLIMIT NPROC a ete atteint 27 - lrsquoappel a setuid() echoue mais leprocessus nrsquoen tient pas compte et continue son execution son lrsquoidentite root

ndash Killing In The Name Of faille permettant de modifier la valeur de la constanteglobale (normalement en lecture seule) rosecure en jouant sur une erreurdrsquoimplementation de devashmem Cette constante definie a la compilationdu systeme indique au processus adb srsquoil doit srsquoexecuter sous lrsquoidentite root 28

Les applications legitimes (comme VISIONary+ 29) ou malveillantes (la pluscelebre ayant probablement ete DroidDream [20] ) ne se privent pas drsquoexploiter cesfailles dans la nature

Il faut toutefois noter qursquoil existe une difference subtile entre obtenir un accesroot et obtenir un acces root persistant au redemarrage du telephone En effetbien qursquoil soit virtuellement possible drsquoecrire dans le repertoire system (au traversde la commande adb remount ou drsquoun remount rw a lrsquointerieur du terminal) un

25 httpdeveloperandroidcomguidetopicsproviderscontent-providershtml

26 httpstealthopenwallnetxSports

27 httpdtorsorg20100825reversing-latest-exploid-release

28 httpsourceandroidcomportingbuild_systemhtml

29 httpandroidmodacocomcontentsoftware32035019-nov-r14-visionary-one-click-root

136 Securite du systeme Android

certain nombre de telephones modernes disposent drsquoune protection contre le reflashageintempestif de la partition systeme Cette protection est souvent liee a lrsquoutilisationdrsquoun composant memoire capable de verifier une signature cryptographique (parexemple un composant eMMC 30)

Dans le jargon on dit que la possibilite de reflasher la partition systeme avecun firmware non signe necessite un telephone en mode S-OFF Sur de nombreuxtelephones de marque HTC 31 le mode courant (S-ON ou S-OFF) peut etre obtenuen appuyant sur la touche Volume Down au demarrage du telephone

Failles logiques Il existe une categorie de failles difficiles a detecter et pourtantdevastatrices les failles logiques

Lrsquoun des exemples les plus fameux est le deblocage du telephone en utilisant soncompte Google Dans certains cas de corruption de donnees ce processus peut echouercomme documente officiellement par Google 32

Dans ce cas le telephone doit normalement etre reinitialise en configuration drsquousine(lorsque crsquoest possible ndash la procedure exacte depend du constructeur) Heureusementil srsquoavere que le mot de passe null est toujours accepte comme valide

Un autre bogue celebre affecte le Motorola Droid et potentiellement drsquoautresLorsque le telephone est verrouille mais qursquoun appel entrant arrive il est possibledrsquoappuyer sur le bouton Back et ainsi drsquoarriver a lrsquoecran drsquoaccueil du telephone 33

Enfin une superbe faille logique a ete decouverte sur le site httpsmarket

androidcom qui permet drsquoinstaller a distance des applications sur un telephoneAndroid Grace a une faille de type XSS persistant sur ce site 34 il etait possible defaire installer une application puis de lrsquoexecuter automatiquement sur le telephonede nrsquoimporte quel utilisateur Un utilisateur pouvait etre victime de cette attaque encliquant sur un lien depuis son telephone ou son PC (sous reserve drsquoetre logue sousson compte Google)

La technique utilisee pour executer automatiquement lrsquoapplication apres soninstallation merite drsquoetre soulignee elle consiste a declarer dans le manifeste delrsquoapplication que celle-ci supporte un nouveau schema drsquoURI (par exemple trigger

) puis a invoquer un lien trigger depuis la page Web drsquoorigine

Que peut-on faire Compte-tenu de la quantite de code C embarque dans lesysteme Android il existe et il existera des bogues drsquoimplementation dans ce systeme

30 httpenwikipediaorgwikiMultiMediaCardeMMC

31 Un site de reference pour les telephones de marque HTC httpunrevokedcom32 httpcodegooglecompandroidissuesdetailid=3006

33 httptechcrunchcom20100111verizon-droid-security-bug

34 httpjonoberheideorgblog20110307how-i-almost-won-pwn2own-via-xss

N Ruff 137

conduisant pour certains a des failles de securite WebKit et le systeme Linux sontdes cibles de choix compte-tenu de la surface drsquoattaque exposee

Toutefois et contrairement a un systeme classique la mise a jour a grandeechelle srsquoavere extremement problematique pour plusieurs raisons

ndash Le facteur drsquoechelle (plusieurs millions drsquounites en circulation rien qursquoen France)ndash La diversite et le haut degre de personnalisation des plateformes materielles et

logiciellesndash La propriete du terminal (lorsqursquoil a ete achete par lrsquoutilisateur)ndash Les risques commerciaux en cas de blocage definitif du terminal (brick)On peut raisonnablement considerer qursquoen dehors du geek moyen aucun utilisateur

de smartphone sous Android nrsquoa jamais mis a jour son systemeLes statistiques officielles de Google sur la repartition des ordiphones par version

drsquoAndroid permettent de se faire une idee objective sur la vitesse de renouvellementdu parc 35 A lrsquoheure ou jrsquoecris ces lignes malgre la disponibilite du systeme Android23 la majorite du parc se compose encore de systemes Android 21 et 22 ndash sanscompter sur les irreductibles 6 qui disposent drsquoune version anterieure Je laisseaux statisticiens le soin de produire une etude plus detaillee qui sera neanmoinsbiaisee par le fait que les donnees mondiales sont agregees tandis que les politiquesde renouvellement des operateurs sont tres variables drsquoun pays a lrsquoautre

Dans ces conditions il est loin le moment ou un operateur mobile fera du NAC-NAP sur son reseau pour interdire la connexion de ordiphones qui ne sont pas a jourdes correctifs

Techniquement le protocole FOTA (Firmware Over-The-Air) permet toutefoisde mettre a jour a distance des terminaux Ce protocole a deja ete utilise a grandeechelle lorsqursquoune backdoor (exploitable a distance) a ete decouverte sur certainstelephones HTC de modele Hero et Evo

5 Audit drsquoapplications Android

51 Auditer pourquoi

Lrsquoaudit securite drsquoapplications tierces est une activite vieille comme le conseil ensecurite Toutefois le circuit de distribution logicielle etant assez different entre lemonde du logiciel drsquoentreprise et les MarketPlaces pour mobiles il est vrai que laquestion merite drsquoetre posee a nouveau

A lrsquoheure ou jrsquoecris ces lignes Google nrsquoeffectue aucune verification de securite surles applications publiees dans lrsquoAndroid Market Cet etat de fait pourrait changer

35 httpdeveloperandroidcomresourcesdashboardplatform-versionshtml

138 Securite du systeme Android

compte-tenu de la proliferation drsquoapplications malveillantes de plus en plus agressiveset sophistiquees

Parmi tous les risques lies aux terminaux mobiles (vol de lrsquoequipement intrusionvia une faille du navigateur etc) on constate dans les faits que le risque principalaujourdrsquohui est la proliferation drsquoapplications malveillantes La malveillance estune notion assez floue et certaines applications peuvent se situer dans une zone grise - comme lrsquoapplication de voix sur IP Viber 36 qui duplique tous les contactsde lrsquoutilisateur sur un serveur central faisant office drsquoannuaire telephonique Maisdrsquoautres applications font lrsquounanimite contre elles comme les applications utilisant desfailles systeme pour elever leurs privileges vers root etou envoyer des SMS surtaxessans le consentement de lrsquoutilisateur Ces applications sont drsquoailleurs tuees parGoogle une fois identifiees car elles violent clairement les regles drsquoutilisation delrsquoAndroid Market

Les circuits qui conduisent a lrsquoapparition drsquoune application malveillante sontmultiples

ndash Malveillance deliberee de lrsquoauteur qui veut gagner de lrsquoargent rapidement Crsquoestle cas le plus simple Un scenario courant consiste a cloner une applicationen vogue tout en y ajoutant du code malveillant

ndash Compromission drsquoun editeur drsquoapplications a son insu Crsquoest la ligne de defenseadoptee par plusieurs editeurs drsquoapplications apres avoir ete pointe du doigtCette defense est malheureusement credible car la plupart des developpeurs sontdes individus isoles ou des micro-entreprises attirees par les success stories a laAngry Birds et bien souvent sans aucune securite dans les developpements

ndash Integration de librairies tierce partie malveillantes dans un programme sainLrsquoauteur drsquoune application populaire (a savoir Tank Hero ) a ainsi an-nonce avoir ete contacte par un fournisseur drsquoapplications probablementmalveillantes qui lui proposait un accord commercial 37

Mais lrsquoidentification des applications malveillantes nrsquoest pas la seule raison quipeut conduire a auditer une application Android Parmi drsquoautres raisons legitimes on peut citer

ndash Verifier que lrsquoapplication fait bien ce qursquoelle pretend faire Ce point est parti-culierement critique pour les applications de securite qui mettent en œuvre duchiffrement ou de la gestion de mots de passe par exemple Dans le domaineles surprises sont nombreuses drsquoautant que les applications mobiles nrsquoont pasencore la maturite des applications bureautiques et que les contraintes

36 httpwwwvibercom

37 httpwwwredditcomrAndroidcommentsfm3cuspyware_company_wants_us_to_embed_

their_code_into

N Ruff 139

du monde embarque se font sentir (puissance de calcul sources drsquoentropieremanence de lrsquoallocateur memoire Java etc)

ndash Recherche des failles de securite Et oui les applications Android sont aussivulnerables aux buffer overflows lorsqursquoelles utilisent du code natif (compileavec le NDK) et meme des injections SQL (meme si SQLite nrsquoimplemente pasdrsquoequivalent a xp cmdshell) Il existe par ailleurs des attaques specifiques aumonde Android comme les BroadcastReceiver qui ne verifieraient pas la sourcedes messages recus

Le probleme principal avec lrsquoaudit drsquoapplications Android nrsquoest pas techniqueLe probleme crsquoest lrsquoeuphorie du marche proliferation drsquoapplications et mises a jourfrequentes qui obligent a automatiser et industrialiser les audits 38

52 Auditer comment

Lrsquoaudit securite est une tache difficile a modeliser car elle tire parti de la creativitede lrsquoauditeur On peut toutefois identifier les grandes lignes suivantes

1 Recuperer lrsquoapplication

2 Decompresser les ressources

3 Desassembler le bytecode

4 Decompiler le bytecode (lorsque crsquoest possible)

5 Desassembler le code natif

6 Deboguer lrsquoapplication en cours drsquoexecution (sur un telephone reel ou danslrsquoemulateur)

Cette methodologie nrsquoest pas exhaustive elle ne donne pas acces au contenutelecharge ulterieurement (par exemple au travers des publicites integrees) Voyonsles methodes et les difficultes associees a chaque etape

Recuperer lrsquoapplication Cette etape nrsquoest pas trop compliquee pour qui est preta installer lrsquoapplication cible sur son telephone Apres installation le fichier APK estconserve dans le repertoire dataapp Selon les permissions appliquees au systeme defichiers il nrsquoest pas necessairement possible de lister le contenu de ce repertoire maisles paquets restent lisibles par lrsquooutil adb et le nom de paquet peut etre determinedepuis la MarketPlace ou le menu parametres du telephone (le nom exact estpaquet-Napk ou N vaut generalement 1)

38 httpwwwappanalysisorg

140 Securite du systeme Android

Toute autre methode est complexe et probablement illegale Parmi les methodespossibles on peut citer lrsquoinstallation de lrsquoapplication MarketPlace dans un emulateurou le reverse engineering de lrsquoapplication MarketPlace a des fins de reimplementation(cette derniere etant toutefois volumineuse donc complexe a analyser)

Depuis la version 22 du systeme Android et si lrsquoapplication lrsquoautorise il estpossible drsquoinstaller une application sur la carte SD Mais lrsquoapplication est alorsstockee dans un fichier asec chiffre Ce fichier est inexploitable jusqursquoa ce quele mecanisme et la cle de chiffrement soient connus

On peut imaginer qursquoune application extremement malveillante pourrait exploiterune faille des lrsquoinstallation pour elever ses privileges vers root et dissimuler ses traces(ie se rendre inaccessible de lrsquoexterieur) Ce cas ne srsquoest pas encore produit dansla nature a lrsquoheure ou jrsquoecris ces lignes mais srsquoavere techniquement faisable

Il faut noter que la MarketPlace de Google nrsquoest pas la seule disponible maisqursquoil existe egalement des MarketPlaces drsquooperateurs ou de tiers ainsi Amazoncommercialise desormais des applications Android 39 Cette proliferation complexifiedrsquoautant la tache drsquoanalyse des MarketPlaces La methode la plus universelle pourrecuperer la source drsquoinstallation drsquoune application reste donc de lrsquoinstaller sur untelephone

Un utilisateur peut installer des applications depuis des sources externes a laMarketPlace si lrsquooption autoriser les sources inconnues est cochee dans lesparametres de configuration Il existe des applications legitimes accessibles en dehorsdes MarketPlaces mais il existe egalement des bases drsquoapplications piratees surInternet dont lrsquoinnocuite ne peut pas etre garantie

Notons que certaines applications meme parmi celles disponibles sur les Market-Places officielles exigent au prealable un acces root au telephone

Decompresser les ressources Les fichiers places a lrsquointerieur drsquoun paquet APKsont optimises drsquoune maniere ou drsquoune autre avant drsquoetre compresses Ceci srsquoappliqueaussi bien au bytecode qursquoaux ressources textuelles (comme les fichiers XML)

Lrsquoune des optimisations principales est la deduplication de donnees Ainsi ilnrsquoexiste qursquoune seule instance de chaque chaine de caracteres dans un fichier DEXDifferents encodages optimises sont egalement utilises tel que LEB128 pourla representation des entiers (Little Endian Base 128 aussi utilise dans le formatDWARF)

Toutes ces optimisations nrsquoont pas pour but la protection logicielle et sont parfai-tement reversibles Lrsquooutil aapt fourni avec le SDK officiel permet ainsi drsquoexplorerle contenu du manifeste drsquoun paquet APK Les techniques drsquooptimisation ont ete

39 httpwwwamazoncomappstore

N Ruff 141

analysees et documentees par des tiers ce qui a permis la production drsquooutils dedecompression comme apktool 40

Desassembler le bytecode Avec le SDK officiel est fourni lrsquooutil dexdump quipermet de lister le bytecode contenu dans un fichier CLASSESDEX

Le format de fichier DEX a ete lui aussi analyse et documente 41 ce qui a permisla production de desassembleurs tiers comme baksmali

Le code genere suit la syntaxe Jasmin 42 bien connue dans le monde Java tra-ditionnel Cette syntaxe peut sembler obscure de prime abord mais elle est par-faitement reguliere donc finalement tres simple a apprehender Prenons un exempleissu drsquoune application reelle voici ci-dessous le code drsquoune methode appeleeemptyResult telle que produit par baksmali

method protected static emptyResult(LjavalangString )Z

locals 1

parameter result

prologue

line 306

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Toutes les directives commencent par un point Leur nom est relativement explicitelocals 1 va par exemple indiquer la presence drsquoune seule variable locale Le nomassigne aux opcodes de la machine virtuelle est egalement assez parlant

pN represente lrsquoargument numero N passe a la methode vN represente le re-gistre numero N (Dalvik est une machine virtuelle a registres et non a pile)

Munis de ces informations decortiquons la seule operation reellement complexeeffectuee dans cet extrait de code

40 httpcodegooglecompandroid-apktool

41 httpwwwnetmitecomandroidmydroiddalvikdocsdex-formathtml

42 httpjasminsourceforgenet

142 Securite du systeme Android

invoke-static Invoque une methode sta-tique Il existe egalementun opcode invoke-virtual

pour les methodes virtuellesinvoke-super pour la methodede la superclasse etc

p0 La methode appelee prend unseul argument La valeur de cetargument provient du premierargument passe a la methodeemptyResult

LcomutilsStringUtils-gtisEmpty Invoque la methode isEmpty de laclasse comutilsStringUtils L est un prefixe accole a tousles litteraux

(LjavalangString) Le premier (et seul) argument estde type javalangString

Z La methode retourne un booleen

A titre de reference voici les differents types natifs disponibles dans Jasmin

Z BooleenB OctetC CaractereS Entier court (16 bits)I Entier (32 bits)J Entier long (64 bits)F Flottant (32 bits)D Double (64 bits)

Lrsquoavantage majeur de lrsquooutil tiers apktool est la possibilite de modifier le bytecodeou les ressources drsquoune application puis de la recompiler dans une version fonctionnelleCeci permet drsquoutiliser une technique drsquoanalyse aussi ancienne que lrsquoinformatiqueappelee printf debugging

Dans le monde Android lrsquoutilisation de Systemout doit etre remplacee parandroidutilLog Cette classe definit plusieurs methodes ndash respectivement v d iw e et wtf ndash qui correspondent chacune a un niveau de verbosite ndash et dont lesarguments sont enregistres dans le journal systeme (sauf le niveau debug) Cejournal peut etre consulte a lrsquoaide de la commande adb logcat apparait en temps

N Ruff 143

reel dans lrsquooutil DDMS et peut egalement etre consulte par toute application quidispose de la permission READ LOGS

Si lrsquoon souhaite connaitre lrsquoargument passe a la methode emptyResult danslrsquoexemple precedent il suffit alors drsquoajouter un appel a nrsquoimporte quelle methode dela classe Log de la maniere suivante

method protected static emptyResult(LjavalangString )Z

locals 2

parameter result

prologue

line 306

const -string v1 PrintfDebuggingStyle

invoke -static v1 p0 LandroidutilLog-gtd(LjavalangStringLjavalang

String )I

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Une variable locale v1 a ete ajoutee contenant une chaine de caracteres fixe Lamethode d() est ensuite invoquee Cette modification est equivalente au code Javasuivant

Logd(PrintfDebuggingStyle ltp0 gt)

On peut constater experimentalement que de nombreuses applications de laMarketPlace font usage de lrsquoAPI Log ce qui permet de collecter des donnees defonctionnement parfois tres (trop) interessantes

Le journal systeme peut etre collecte a distance par un developpeur lors ducrash de son application si lrsquoutilisateur lrsquoautorise Cette technique a ete presenteepar Renaud Lifchitz lors de la conference 27c3 pour espionner les deplacements drsquounutilisateur 43

Decompiler le bytecode Comme avec tout bytecode de haut niveau (ex JavaNET) la semantique de lrsquoapplication est conservee

Il est donc possible de decompiler du bytecode Dalvik et de reconstruire le codeJava drsquoorigine (sans les commentaires ndash seule information perdue a la compilation) Lepremier outil public capable drsquoune telle operation fut undx 44 de Marc Schoenefeld Cetoutil est toutefois bogue et non maintenu par son auteur Le meilleur outil disponibleactuellement est lrsquooutil dex2jar 45 qui reconstruit du bytecode Java a partir du

43 httpeventscccdecongress2010Fahrplanevents4151enhtml

44 httpwwwillegalaccessorgundxhtml

45 httpcodegooglecompdex2jar

144 Securite du systeme Android

bytecode Dalvik Les outils classiques de decompilation Java 46 47 srsquoappliquentalors

Compte-tenu de la facilite deconcertante avec laquelle il est possible drsquoanalyserles applications Android (et donc de les craquer entre autres) Google a mis adisposition des developpeurs une bibliotheque tres complete de gestion des licences enligne Licensing Verification Library (LVL) 48 Toutes les versions de cette bibliothequeont malheureusement ete craquees elles aussi a lrsquoheure ou jrsquoecris ces lignes

Une autre contre-mesure mise en place par Google consiste a integrer un obfusca-teur de bytecode dans la chaine de compilation ProGuard 49 Cet outil relativementpuissant est configurable par le developpeur au travers du fichier proguardcfg toutefois le fichier de configuration par defaut (reproduit ci-apres) nrsquoopere que lerenommage des classes et methodes invisibles a lrsquoexterieur de lrsquoapplication ce qui estpeu efficace face a un attaquant determine

-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontpreverify

-verbose

-optimizations codesimplificationarithmetic field classmerging

-keep public class extends androidappActivity

-keep public class extends androidappApplication

-keep public class extends androidappService

-keep public class extends androidcontentBroadcastReceiver

-keep public class extends androidcontentContentProvider

-keep public class extends androidappbackupBackupAgentHelper

-keep public class extends androidpreferencePreference

-keep public class comandroidvendinglicensingILicensingService

-keepclasseswithmembernames class

native ltmethods gt

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet)

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet int)

-keepclassmembers enum

public static [] values ()

public static valueOf(javalangString)

46 httpmembersfortunecitycomneshkovdjhtml

47 httpjavadecompilerfreefr

48 httpdeveloperandroidcomguidepublishinglicensinghtml

49 httpdeveloperandroidcomguidedevelopingtoolsproguardhtml

N Ruff 145

-keep class implements androidosParcelable

public static final androidosParcelable$Creator

Au vu des resultats obtenus on peut considerer que lrsquoobfuscation de bytecode Javadans le monde Android est en retard sur lrsquoobfuscation de code x86 dans le monde PCLes techniques de complexification du flot de controle ou de construction dynamiquedes constantes ne sont pas encore repandues dans les applications commerciales pourAndroid Afin de combler ce manque des projets paralleles (comme AndroGuard 50)fleurissent - mais on peut supposer que la solution integree au SDK fourni par Googlerestera la solution majoritairement utilisee par les applications (pour des raisons desimplicite evidentes)

Desassembler du code natif Lors de lrsquoaudit drsquoune application Android il estpossible de rencontrer du code natif dans deux cas

1 Lrsquoapplication contient des bibliotheques natives compilees avec le NDK

2 Lrsquoapplication contient des applications natives ou srsquoavere etre elle-meme uneapplication native Ce cas est courant avec les applications malveillantes quiembarquent du code natif pour exploiter des failles noyau 51

Dans les deux cas Android ne presente aucune specificite par rapport a unLinuxARM classique Les fichiers natifs sont au format ELF La chaine de compilationnative est construite autour du compilateur GCC Tous les outils sont disponiblesdepuis longtemps pour analyser des tels binaires (ex IDA Pro Hex-Rays DecompilerARM etc)

Deboguer lrsquoapplication Une application Java compilee en mode debug peutetre deboguee a distance au travers du protocole standard Java Debug Wire Protocol(JDWP) defini dans le cadre de Java Platform Debugger Architecture (JPDA)

Les environnements de developpement Java classiques (comme Eclipse) per-mettent ainsi de deboguer une application a distance une fois celle-ci installee sur letelephone

Il est egalement possible drsquoutiliser le venerable JDB (fourni avec le SDK Java 52)bien que cet outil nrsquoait jamais depasse le statut de preuve de concept a mon avis

Lrsquooutil DDMS fourni avec le SDK Android repose egalement sur JPDA Cetoutil ne permet toutefois pas le debogage drsquoapplications mais seulement lrsquoanalyse deperformance

50 httpcodegooglecompandroguard

51 httpstealthopenwallnetxSports

52 httpdownloadoraclecomjavase142docstooldocssolarisjdbhtml

146 Securite du systeme Android

La liste des applications pouvant etre deboguees sur un systeme Android srsquoobtientavec la commande adb jdwp

Le vrai probleme se pose pour les applications qui nrsquoont pas ete compilees enmode debug Ceci implique que le manifeste de lrsquoapplication ne contient pasdrsquoentree ltapplication androiddebuggable=truegt De plus la plupart des outilsde debogage Java necessitent que le bytecode contienne des indications sur les numerosde lignes dans le code source drsquoorigine (il srsquoagit drsquoune limitation arbitraire qui nesrsquoapplique pas a lrsquooutil JavaSnoop 53 par exemple)

Fort heureusement il est possible de desassembler ces applications puis de lesreassembler en mode debug avec lrsquooutil apktool 54 Le processus est complexe etle resultat peu convivial mais il a le merite drsquoexister

Pour reinstaller lrsquoapplication modifiee sur un equipement reel il est necessairede la signer a nouveau La procedure est simple et parfaitement documentee parGoogle

Il faut drsquoabord generer une cle personnelle autosignee a duree de vie extremementlongue

$ keytool -genkey -v -keystore mykeykeystore -alias nom_alias -keyalg RSA -

keysize 2048 -validity 10000

Il faut ensuite signer le nouvel APK avec les outils du SDK Java

$ jarsigner -verbose -keystore mykeykeystore nom_applicationapk nom_alias

Enfin il est recommande drsquoaligner le code sur un multiple de 4 octets pour desraisons de performance

$ zipalign -v 4 nom_applicationapk nom_application_finalapk

Instrumentation Il est possible drsquoinstrumenter une application Java a lrsquoaide declasses specifiques a Android (androidappInstrumentation 55) Cette methodefournit des resultats detailles et personnalisables sur le fonctionnement interne drsquouneapplication elle necessite toutefois une decompilation et une modification prealablede lrsquoapplication a auditer

A lrsquoheure ou jrsquoecris ces lignes il nrsquoexiste pas (a ma connaissance) drsquooutil permettantde generaliser et drsquoautomatiser le processus a tout fichier APK Cette voie de recherchepourrait toutefois donner des resultats interessants

53 httpwwwaspectsecuritycomtoolsjavasnoop

54 httpcodegooglecompandroid-apktoolwikiSmaliDebugging

55 httpdeveloperandroidcomreferenceandroidappInstrumentationhtml

N Ruff 147

Outils specifiques Les outils disponibles actuellement dans le monde Android sontrudimentaires quoi que suffisants

Toutefois on peut raisonnablement estimer que la quantite et la qualite des outilsdisponibles va croitre de concert avec la popularite du systeme Android

A lrsquoheure ou jrsquoecris ces lignes la version 61 du logiciel IDA Pro 56 vient de sortirCette version ajoute le support du format DEX et du bytecode Dalvik ainsi que ledebogage a distance des applications Android natives

On peut supposer que drsquoautres outils couramment utilises par les auditeurs ensecurite vont etre mis a jour pour srsquoadapter au monde Android

6 Conclusion

Le systeme Android nrsquoa malheureusement pas profite de lrsquoopportunite unique quilui etait donnee repartir de la feuille blanche et creer un systeme drsquoexploitation sur par conception

A cause drsquoun heritage logiciel peu fiable ainsi que des contraintes materielles etcommerciales issues du monde de la telephonie mobile le systeme resultant est uncompromis qui laisse une large place a la creativite des attaquants

Celle-ci est drsquoautant plus exacerbee que la telephonie mobile est un phenomene demasse (il y a plus de telephones mobiles que drsquoordinateurs dans le monde) et que letelephone mobile est par conception un systeme de paiement (ce que nrsquoest pas un PCtraditionnel)

A ce tableau vient srsquoajouter 30 ans drsquoexperience dans le domaine des attaqueslogicielles appliquees a un ecosysteme applicatif qui nrsquoexistait pas il y a 5 ans

Toutes les conditions sont donc reunies pour que des attaques de grande ampleurmotivees par lrsquoargent se produisent contre les materiels grand public equipes dusysteme Android (telephones tablettes televisions )

La bonne nouvelle pour lrsquoexpert en securite crsquoest qursquoil est encore temps de srsquoymettre Android est suffisamment jeune et accessible aux nouveaux entrants ce quinrsquoest plus le cas de la plateforme PC ou les techniques drsquoattaque (ex exploitationdrsquoun heap overflow) et de defense (ex obfuscation logicielle) ont atteint des sommetsde raffinement desormais accessibles aux seuls experts les plus pointus du domaine

7 Sites et outils

71 Sites officiels

ndash Android portail officiel httpwwwandroidcom

56 httpwwwhex-rayscomidapro

148 Securite du systeme Android

ndash Android MarketPlace officielle httpsmarketandroidcomndash Android reference des developpeurs httpdeveloperandroidcom

72 Sites non officiels

ndash Reference de la machine virtuelle Dalvik httpdalvikvmcom

73 Outils tiers

ndash Google Android Debugging Utilities httpsitesgooglecomsiteortegaalfredoandroid

ndash Undx httpwwwillegalaccessorgundxhtmlndash SmaliBaksmali httpcodegooglecompsmalindash Dedexer httpdedexersourceforgenetndash Dex2Jar httpcodegooglecompdex2jarndash TaintDroid httpwwwappanalysisorg

ndash AndroGuard httpandroguardblogspotcom

References

1 Benjamin Morin Modele de securite drsquoAndroid MISC 51 2010

2 K Chen Reversing and exploiting an apple firmware update httpwwwblackhatcom

presentationsbh-usa-09CHENBHUSA09-Chen-RevAppleFirm-PAPERpdf BlackHat 2009

3 Alexandre Gazet Sticky fingers amp KBC Custom Shop httpwwwssticorg2011presentation

sticky_fingers_and_kbc_custom_shop SSTIC 2011

4 Loıc Duflot and Yves-Alexis Perez Quelques elements en matiere de securite des cartes reseau http

wwwssticorg2010presentationPeut_on_faire_confiance_aux_cartes_reseau SSTIC 2010

5 Alexander Tereshkin and Rafal Wojtczuk Introducing Ring -3 Rootkits httpwwwblackhat

compresentationsbh-usa-09TERESHKINBHUSA09-Tereshkin-Ring3Rootkit-SLIDESpdf Black-Hat USA 2009

6 Loıc Duflot Yves-Alexis Perez and Benjamin Morin Run-time firmware integrity verification what ifyou canrsquot trust your network card CanSecWest 2011

7 Ralf-Philipp Weinmann All Your Baseband Are Belong To Us httpeventscccdecongress

2010Fahrplanevents4090enhtml CCC 2010

8 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Formal Model to Analyzethe Permission Authorization and Enforcement in the Android Framework SecureComrsquo10

9 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Small but Non-negligibleFlaw in the Android Permission Scheme Wook Shin Sanghoon Kwak Shinsaku Kiyomoto KazuhideFukushima et Toshiaki Tanaka IEEE POLICY 2010

10 Marc Schonefled Reconstructing Dalvik Applications httpcansecwestcomcsw09

csw09-schoenefeldpdf CanSecWest 2009

N Ruff 149

11 Sergio Alvarez The Smart-Phones Nightmare (iPhone-oriented parts about Android) http

cansecwestcomcsw09csw09-alvarezpdf CanSecWest 2009

12 Nicolas Economou Alfredo Ortega Smartphone (in)security httpcansecwestcomcsw09

csw09-ortega-economoupdf CanSecWest 2009

13 Jesse Burns Exploratory Android Surgery httpwwwblackhatcompresentationsbh-usa-09

BURNSBHUSA09-Burns-AndroidSurgery-SLIDESpdf BlackHat USA 2009

14 Kevin Mahaffey John Hering App Attack httpsmediablackhatcombh-us-10presentations

Mahaffey_HeringBlackhat-USA-2010-Mahaffey-Hering-Lookout-App-Genome-slidespdf Black-Hat USA 2010

15 Nils The Risk you carry in your Pocket httpsmediablackhatcombh-ad-10Nils

Black-Hat-AD-2010-android-sandcastle-slidespdf BlackHat Abu Dhabi 2010

16 Raphael Rigo Android Reverse Engineering and Forensics httpsdeepsecnetdocsspeaker

htmlPSLOT45 DeepSec 2010

17 Itzhak Avraham Popping Shell on A(ndroid)RM Devices httpsmediablackhatcombh-dc-11

AvrahamBlackHat_DC_2011_Avraham-Popping_Android_Devices-Slidespdf BlackHat DC 2011

18 Jon Oberheide httpjonoberheideorgblog20100625remote-kill-and-install-on-google-android

19 Jon Oberheide httpjonoberheideorgblog20100628a-peek-inside-the-gtalkservice-connection

20 httpwwwandroidpolicecom20110301the-mother-of-all-android-

malware-has-arrived-stolen-apps-released-to-the-market-that-root-

your-phone-steal-your-data-and-open-backdoor

  • Seacutecuriteacute du systegraveme Android
  • N Ruff

N Ruff 127

100 native mais un code Open Source existant pour Linux ne va pas necessairementrecompiler et fonctionner sans modification sur une plateforme Android Lrsquoabsence debinsh et de etcpasswd sont par exemple deux ecueils auxquels jrsquoai ete confrontes

Lrsquoobjectif nrsquoest pas ici drsquoecrire un tutoriel pour le developpement drsquoapplicationsAndroid drsquoautant que la documentation Google est tres bien faite 8

34 Modele de securite

Le modele de securite Android nrsquoa guere evolue depuis ses origines il a donc dejaete abondamment commente [1] Son etude reste neanmoins un prealable obligatoirea toute analyse de risques sur cette plateforme

Signature numerique Les applications sont signees numeriquement Ceci est sourcede confusion dans lrsquoesprit du grand public et meme des informaticiens qui associentgeneralement la presence drsquoun certificat a celle drsquoune securite inviolable probablementa cause de la propagande realisee par les acteurs du e-commerce autour du protocoleHTTPS (les fameuses vertus du cadenas jaune et plus recemment de la barre drsquoadresseverte)

En pratique tous les systemes de signature numerique apparus recemment dansles marches grand public (ex programme Symbian Signed signature des appli-cations iPhone signature des pilotes Windows 64 bits) nrsquooffrent aucune securite apriori Le cout drsquoacquisition drsquoun certificat est marginal et les verifications opereesquasiment nulles Le certificat sert essentiellement drsquoidentifiant unique pour permettrela revocation a posteriori

Afin drsquoeviter les problemes drsquoexpiration et de renouvellement des cles Googleimpose meme lrsquoutilisation de certificats de signature dont la date drsquoexpiration depassele 22 octobre 2033 9

Cloisonnement A lrsquoinstallation chaque application se voit attribuer un compteUnix (uid) Lrsquoisolation entre applications est rendue possible par les mecanismes desecurite natifs du systeme Unix

Lrsquoensemble des applications signees par le meme certificat srsquoexecutent sous la memeidentite de groupe Unix (gid) Les interactions possibles entre applications signeespar le meme certificat sont nombreuses 10 ndash elles peuvent ainsi partager le memeuid 11 ce qui ouvre la voie a la creation drsquoapplications malveillantes k-aires chaque

8 httpdeveloperandroidcom

9 httpdeveloperandroidcomguidepublishingapp-signinghtml

10 httpdeveloperandroidcomguidetopicssecuritysecurityhtml

11 httpdeveloperandroidcomreferenceandroidRattrhtmlsharedUserId

128 Securite du systeme Android

application ne possedant qursquoun jeu limite de permissions (jugees peu dangereusesindividuellement) mais la combinaison de toutes ces applications dans le memeprocessus formant une super application pouvant par exemple exfiltrer toutes lesdonnees du telephone

Revocation Compte-tenu de lrsquoaccroissement du nombre drsquoapplications malveillantessur la MarketPlace officielle Google fait un usage de plus en plus frequent dukill switch 12 ndash fonction qui permet drsquoeliminer a distance toutes les instances drsquouneapplication identifiee par son certificat

Pour ceux que cette fonction intrigue je signale que le mecanisme sous-jacent adeja ete decortique en detail [1819] Le cœur du mecanisme repose sur le processusGTalkService qui recoit et traite les messages REMOVE ASSET (et INSTALL ASSET) Laconclusion en est que toute personne en position drsquoeffectuer un man-in-the-middleSSL avec un certificat valide peut emettre de tels messages La liste des autorites deconfiance du systeme se trouve dans le fichier systemetcsecuritycacertsbkset ne peut pas facilement etre modifiee 13 Toutefois cette liste contient (sur montelephone) 58 autorites de nature variee (entreprises gouvernements etc) De plusune application malveillante ayant eleve ses privileges vers root pourrait probablementbloquer lrsquoutilisation du kill switch sur un equipement donne une fois les mecanismessous-jacents connus et documentes

Par le passe la securite basee sur la revocation a montre ses limites 14 En effetcela suppose que lrsquoequipement cible dispose drsquoune connexion a un reseau de donneeset qursquoil soit configure pour en faire usage Ce sont des hypotheses assez fortes

35 Les permissions

Considerations generales Le modele de securite des applications tierce partieest essentiellement declaratif Un fichier de manifeste decrit les permissionsmaximales requises par lrsquoapplication Google definit une centaine de permissionspossibles par defaut 15 mais les constructeurs sont libres drsquoen ajouter egalement cequi peut engendrer des risques specifiques a un modele de telephone donne

La commande de base permettant de manipuler les permissions sur le telephonesrsquoappelle pm Voici les options qursquoelle offre

$ adb shell pm

12 httpandroid-developersblogspotcom201006exercising-our-remote-applicationhtml

13 httpwwwmcbsyscomtechblog201012android-certificates

14 httpwwwf-securecomweblogarchives00001918html

15 httpdeveloperandroidcomreferenceandroidManifestpermissionhtml

N Ruff 129

usage pm [list|path|install|uninstall]

pm list packages [-f]

pm list permission -groups

pm list permissions [-g] [-f] [-d] [-u] [GROUP]

pm list instrumentation [-f] [TARGET -PACKAGE]

pm list features

pm path PACKAGE

pm install [-l] [-r] [-t] [-i INSTALLER_PACKAGE_NAME] [-s] [-f] PATH

pm uninstall [-k] PACKAGE

pm enable PACKAGE_OR_COMPONENT

pm disable PACKAGE_OR_COMPONENT

pm setInstallLocation [0 auto] [1 internal] [2 external]

()

A titre drsquoexemple voici les permissions definies par HTC sur lrsquoune de mes plate-formes de test

$ adb shell pm list permissions | grep htc

permissioncomhtcandroidmailpermissionREAD_MAIL

permissioncomhtcManifestpermissionBROADCAST_KEYIN_EVENT

permissioncomhtcManifestpermissionBROADCAST_MOTION_EVENT

permissioncomhtcManifestpermissionBLOCK_KEYBOARD_EVENT

permissioncomhtcandroidmailpermissionWRITE_ACCOUNT

permissioncomhtcandroidmailpermissionREAD_ACCOUNT

permissioncomhtchtctwitterpermissionuseprovider

permissioncomhtcManifestpermissionBROADCAST_TRACKBALL_EVENT

permissioncomhtcinternalpermissionHTC_APP_PMEM

permissioncomhtcandroidmailpermissionWRITE_MAIL

On notera egalement que cette plateforme contient des permissions a priorispecifiques a lrsquooperateur (americain) Sprint - alors qursquoil srsquoagit drsquoun telephone acheteen France sans abonnement

$ adb shell pm list permissions | grep sprint

permissioncomsprintinternalpermissionSLOT0

permissioncomsprintinternalpermissionPLATFORM

permissioncomsprintinternalpermissionSYSTEMPROPERTIES_WRITE

permissioncomsprintinternalpermissionSYSTEMPROPERTIES

permissioncomsprintinternalpermissionCONNECTIONMANAGER

permissioncomsprintinternalpermissionOMADM

permissioncomsprintandroidpermissionDISABLE_HDMI

Lrsquoutilisateur est libre drsquoaccepter ou de refuser lrsquoapplication mais il ne peut pasmodifier la liste des permissions demandees (sauf a modifier lrsquoapplication et a lare-signer avec sa propre cle comme nous le verrons plus tard)

On peut raisonnablement estimer que la plupart des utilisateurs ne sont pas enmesure drsquoeffectuer un choix eclaire a ce stade

130 Securite du systeme Android

Securite theorique Lrsquoune des questions qursquoon peut se poser sur le systeme depermissions tel qursquoil a ete defini est lrsquoexistence (ou non) drsquoun modele theorique sous-jacent coherent [98] Est-ce que chaque permission correspond bien a un ensemble detaches uniques et strictement delimitees Crsquoest la meme question qui se pose avec lemodele des capabilities sous Linux et dans ce deuxieme cas la reponse est non CAP SYS MODULE permet par exemple de charger des modules noyau arbitraires etdonc de compromettre entierement lrsquointegrite du noyau

Dans le cas drsquoAndroid on peut suspecter que la permission SYSTEMPROPERTIES WRITE

definie par lrsquooperateur Sprint (vue precedemment) a probablement une intersectionnon nulle avec la permission WRITE SETTINGS definie par Google tout en etantprobablement inconnue des outils drsquoanalyse automatique drsquoinnocuite

Lrsquointeret pratique drsquoune etude mathematique sur les permissions Android esttoutefois limite En effet les deux risques majeurs rencontres dans la nature sont

ndash Des applications malveillantes qui demandent des permissions excessivementlarges et abusent de la confiance des utilisateurs

ndash Des applications malveillantes sans aucune permission qui exploitent des faillessysteme pour obtenir lrsquoacces au compte root et contourner entierement lemodele de securite

Ces risques sont partages avec tous les autres modeles de securite en usage danslrsquoindustrie (SELinux sous Linux UAC sous Windows etc)

ndash Ces modeles se heurtent a lrsquoergonomie des interfaces et a la prise de decisioneclairee par les utilisateurs finaux

ndash Lrsquoimplementation de ces modeles exige un effort de conception important tandisque les attaquants les contournent entierement en violant les hypotheses deconception (en particulier lrsquohypothese que le noyau du systeme drsquoexploitationest exempt de bogues)

Autres limites du modele Presque toutes les applications existantes exigent unacces illimite au reseau tres souvent pour recuperer du contenu publicitaire Enpratique cela signifie que le risque pose par une application ne se limite pas a unensemble de permissions statiques par exemple un contenu malveillant pourra etreenvoye a tout moment au moteur de rendu WebKit a travers le canal publicitaire etprovoquer ainsi la prise de controle drsquoun telephone donne au travers une applicationa priori saine

Les permissions demandees peuvent changer a lrsquooccasion drsquoune mise a jour Orla plupart des utilisateurs font confiance aux applications qursquoils ont deja installeesDepuis la version 22 drsquoAndroid lrsquoutilisateur peut autoriser les applications a semettre a jour automatiquement Fort heureusement la mise a jour automatique est

N Ruff 131

bloquee si les permissions demandees par lrsquoapplication changent De mon point devue le mecanisme de mise a jour automatique peut donc etre considere comme plutotbenefique pour lrsquoecosysteme

Enfin le code natif attache a une application (dans le cas drsquoutilisation du NDK)est essentiellement non verifiable contrairement au bytecode Dalvik Le modelede securite Unix vient donc srsquoajouter au modele de permissions Android

4 Panorama des risques

Jrsquoidentifie trois risques de securite majeurs applicables aux ordiphones mo-dernes

1 La structuration du marche de la telephonie

2 Les failles logicielles

3 Les applications tierce partie

Nous allons passer en revue ces trois risques Le troisieme risque est plus specifique alrsquoecosysteme Android dans lequel le role de chaque acteur est bien separe fournisseurde materiel fournisseur de logiciel fournisseur de service

Il se verifie moins dans des ecosystemes comme celui de lrsquoiPhone et du BlackBerrydans lesquels les fournisseurs du materiel et du logiciel sont les memes

41 Marche de la telephonie

Plusieurs acteurs majeurs interviennent dans le marche de la telephonie mobile

1 Les fabricants de materiels

2 Les fabricants de logiciels (en lrsquooccurrence Google)

3 Les circuits de distribution (pour lrsquoinstant les operateurs de telephonie mobile)

4 Les developpeurs drsquoapplications

5 Les fournisseurs de contenus et de services (regies publicitaires services en ligneetc)

Nous allons passer en revue les interets de ces acteurs et le role qursquoils jouent dansla securite de la plateforme a lrsquoexception des derniers qui sont trop divers et varies

Il faut noter que si demain Android venait a equiper drsquoautres biens de consomma-tion courante (ex televiseurs refrigerateurs etc) les parties prenantes (et donc lesconclusions de cette etude) ne seraient pas fondamentalement differentes

132 Securite du systeme Android

Fabricants de materiels Les fabricants de materiels vivent dans un monde extremementconcurrentiel et doivent minimiser le cout de developpement de leurs produits pourque lrsquooperateur puisse au final proposer son telephone a 1 Par ailleurs ils doiventegalement minimiser le time to market un telephone portable se demode tresvite la duree de vie commerciale drsquoun systeme est de lrsquoordre de 6 mois

En consequence logique les developpements sont bacles Les systemes pousses enproduction sont a peine testes et les fonctions de debogage restent souvent activees(comme en temoigne le shell root disponible sur le port TCP12345 des series HTCEvo et HTC Hero commercialisees par Sprint 16)

En regle generale aucun support technique nrsquoest offert apres la sortie drsquountelephone Les mises a jour officielles de firmware sont rarissimes dans le domaine dela telephonie mobile - a lrsquoexception notable drsquoApple qui propose des mises a jourpour le systeme iOS dans la fenetre de support de ses equipements a savoir 21

2ans

Ceci conduit a la proliferation de firmwares non officiels dont lrsquoinnocuite et la stabilitene peuvent pas etre garantis

Dans le cas tres precis de mon telephone LG GW620 livre sous Android 15 LGFrance 17 a promis une mise a jour vers Android 16 pendant plus drsquoun an avant definalement se retracter Des firmwares Android 21 et 22 drsquoexcellente facture ndash maisnon officiels ndash ont donc ete developpes par des amateurs 18 Sous la pression de sesutilisateurs LG a fini par sortir un firmware officiel mais trop tard

Fabricants de logiciels La concurrence fait rage dans le domaine des systemesdrsquoexploitation pour ordiphones

Des lors les editeurs de systemes drsquoexploitation doivent seduire tous les autresacteurs quitte a diminuer les contraintes de securite

ndash Pour seduire les utilisateurs il semble necessaire de disposer du plus grandnombre drsquoapplications dans sa MarketPlaceBien qursquoon puisse questionner cette logique (ne serait-il pas plus interessant dedisposer drsquoapplications utiles fiables et bien realisees ) la guerre des chiffresest neanmoins lancee

ndash Pour seduire les developpeurs drsquoapplications il est necessaire de leur faciliter letravail au maximumLe choix du langage Java et la mise a disposition drsquoun SDK gratuit pour Eclipseva dans ce sens Mais Google va meme plus loin en mettant a disposition un SDK

16 httpwwwunrevokedcomrootwikidokuphppublicunrevoked1_disclosure

17 httptwittercomlg_blog_france

18 httpopenetnacomopenetna

N Ruff 133

visuel pour les gens nrsquoayant aucune notion de developpement 19 On peutse poser des questions sur la securite (et la qualite en general) des applicationsqui en sortirontLa signature drsquoapplications fut egalement pendant longtemps une pierre drsquoachop-pement Lors du lancement du programme Symbian Signed on a pu lireque Symbian voulait tuer les developpeurs independants HeureusementlrsquoAppStore a depuis prouve le contraire et Android nrsquoa eu aucun mal a imposerla signature des sa genese

ndash Seduire les fabricants de materiels est assez simple il suffit de produire unsysteme gratuit et drsquoen assurer une bonne partie du support Ajoutez a celaune forte demande du marche et tout est en place pour garantir le succes

Circuits de distribution Lrsquoessentiel des ordiphones sont commercialises par lesoperateurs de telephonie mobile (Google ayant drsquoailleurs essuye un echec commercialsur la vente en direct du Nexus One)

Comme la plupart des acteurs de la chaine les operateurs cherchent a maximiserleurs revenus parfois au detriment de la securite

ndash Les operateurs personnalisent les systemes drsquoexploitation en y ajoutant desbogues

ndash Les operateurs tentent de rendre payantes des fonctions natives incitant de cefait les utilisateurs au piratage

Parmi les inventions geniales du marketing on peut citer le bridage du tethering(utilisation du telephone comme modem 3G) la geolocalisation payante (alors que letelephone dispose drsquoun GPS integre) lrsquoimpossibilite de regarder la tele ou drsquoecouterde la musique sur un lien WiFi (mais pas sur un lien 3G) etc

Des lors les utilisateurs sont tentes de debrider leur telephone (jailbreaking)drsquoinstaller des applications tierce partie douteuses voire drsquoinstaller des systemes nonofficiels sans garantie drsquoinnocuite

Developpeurs drsquoapplications Lrsquoun des moyens les plus efficaces pour seduire lesdeveloppements est de leur promettre des revenus consequents Pas facile dans unmonde ou la plupart des applications sont gratuites ou dont le prix nrsquoexcede pas 1

Tout drsquoabord le processus drsquoachat drsquoapplications est relativement simple grace aGoogle Checkout lorsque lrsquooperateur ne fournit pas lui-meme le service de facturationau travers de sa MarketPlace Pour les applications financees par la publicite lareputation de Google dans le domaine nrsquoest plus a faire (surtout depuis le rachat dela societe AdMob specialisee dans le domaine de la publicite sur mobiles)

19 httpappinventorgooglelabscomabout

134 Securite du systeme Android

Contrairement a ce qursquoon pourrait croire les deux methodes generent des reve-nus comparables comme le revele lrsquoauteur drsquoune application inutile mais pourtanttelechargee presque 100 000 fois a savoir Advanced Task Manager 20

Les developpeurs attires par des revenus encore plus rapides pourront etre tentespar le cote obscur de la telephonie mobile appels et SMS surtaxes vol (et revente)du carnet drsquoadresses collecte de lrsquohistorique du navigateur etc

Ce phenomene est loin drsquoetre marginal certaines applications etant clairementmalveillantes ndash comme SMSAndroidOSFakePlayera ou les applications editeespar 09Droid qui se font passer pour des applications bancaires officielles ndash drsquoautresetant simplement a la limite du marketing agressif ndash comme celles de lrsquoediteur francaisZeuzz

Plusieurs etudes soulignent la dangerosite des MarketPlaces generalement fi-nancees par les editeurs antivirus ces etudes ne sont toutefois pas drsquoune qualitescientifique suffisante pour etre citees ici Le risque semble neanmoins reel puisqueGoogle a retire en urgence des dizaines drsquoapplications de la MarketPlace dans le cadrede lrsquoaffaire DroidDream (nous y reviendrons)

42 Failles logicielles

Etat des lieux Compte-tenu de lrsquoutilisation massive de code Open Source dans lesysteme Android les failles drsquoimplementation logicielle sont faciles a identifier il suffitde suivre les alertes de securite des principaux projets Lorsqursquoils sont disponibles cequi nrsquoest pas forcement le cas pour le noyau Linux

Les vecteurs principaux (en termes de nombre de lignes de code et drsquoexposition)sont le systeme Linux et le navigateur Web (et particulierement le moteur WebKitcommun avec Safari)

Il ne faut pas oublier non plus qursquoAndroid integre Flash Player et vit avec lesmemes failles 21

Failles navigateur Comme dans tout navigateur Web de complexite importanteles failles sont nombreuses Ces failles nrsquoen restent pas moins dangereuses car ellesont ete demontrees exploitables sur Android 22 23

Lrsquoune drsquoentre elles est meme disponible dans Metasploit 24 Il srsquoagit drsquoune faillerelativement grave qui permet de lire nrsquoimporte quel fichier du telephone accessible

20 httparronlacom201008android-revenue-advanced-task-manager

21 httpwwwtheinquirernetinquirernews2034092android-smartphones-attack-flash-player-hackers

22 httpwwwexploit-dbcomexploits15423

23 httpwwwexploit-dbcomexploits16974

24 httpblogmetasploitcom201101mobile-device-security-and-android-filehtml

N Ruff 135

au processus navigateur - ce qui inclut lrsquointegralite de la carte SD puisque celle-ci estformatee en FAT (donc sans aucun controle drsquoacces)

On notera dans cette attaque lrsquoutilisation de lrsquoURL contentcomandroid

htmlfileproviderltfilenamegt qui permet de lire nrsquoimporte quel fichier du telephoneau travers drsquoun Content Provider 25 ndash une notion specifique a Android qui prometdrsquoetre encore source de nombreuses failles vu la surface drsquoattaque exposee

Par ailleurs outre les schemas traditionnels (file http etc) Androidsupporte par defaut des schemas plus specifiques et donc moins testes

Parmi les schemas supportes on peut citer content (qui permet de com-muniquer avec un Content Provider) market (qui permet drsquointeragir avec laMarketPlace comme par exemple marketdetailsid=ltpackagegt) ou android

resource (qui permet drsquoacceder a une ressource dans un paquet comme parexemple androidresourceltpaquetgtltressourcegt)

Failles systeme Les failles systeme ne sont pas legion mais ont toutes un impactcritique sur la securite du systeme

Parmi les failles les plus connues (car les plus exploitees dans la nature ) onpeut citer les failles publiees sur le site xSports 26 a savoir

ndash Exploid faille udev bien connue des administrateurs Linux CVE-2009-1185

ndash Rage Against The Cage faille liee au mauvais comportement du processusadb lorsque RLIMIT NPROC a ete atteint 27 - lrsquoappel a setuid() echoue mais leprocessus nrsquoen tient pas compte et continue son execution son lrsquoidentite root

ndash Killing In The Name Of faille permettant de modifier la valeur de la constanteglobale (normalement en lecture seule) rosecure en jouant sur une erreurdrsquoimplementation de devashmem Cette constante definie a la compilationdu systeme indique au processus adb srsquoil doit srsquoexecuter sous lrsquoidentite root 28

Les applications legitimes (comme VISIONary+ 29) ou malveillantes (la pluscelebre ayant probablement ete DroidDream [20] ) ne se privent pas drsquoexploiter cesfailles dans la nature

Il faut toutefois noter qursquoil existe une difference subtile entre obtenir un accesroot et obtenir un acces root persistant au redemarrage du telephone En effetbien qursquoil soit virtuellement possible drsquoecrire dans le repertoire system (au traversde la commande adb remount ou drsquoun remount rw a lrsquointerieur du terminal) un

25 httpdeveloperandroidcomguidetopicsproviderscontent-providershtml

26 httpstealthopenwallnetxSports

27 httpdtorsorg20100825reversing-latest-exploid-release

28 httpsourceandroidcomportingbuild_systemhtml

29 httpandroidmodacocomcontentsoftware32035019-nov-r14-visionary-one-click-root

136 Securite du systeme Android

certain nombre de telephones modernes disposent drsquoune protection contre le reflashageintempestif de la partition systeme Cette protection est souvent liee a lrsquoutilisationdrsquoun composant memoire capable de verifier une signature cryptographique (parexemple un composant eMMC 30)

Dans le jargon on dit que la possibilite de reflasher la partition systeme avecun firmware non signe necessite un telephone en mode S-OFF Sur de nombreuxtelephones de marque HTC 31 le mode courant (S-ON ou S-OFF) peut etre obtenuen appuyant sur la touche Volume Down au demarrage du telephone

Failles logiques Il existe une categorie de failles difficiles a detecter et pourtantdevastatrices les failles logiques

Lrsquoun des exemples les plus fameux est le deblocage du telephone en utilisant soncompte Google Dans certains cas de corruption de donnees ce processus peut echouercomme documente officiellement par Google 32

Dans ce cas le telephone doit normalement etre reinitialise en configuration drsquousine(lorsque crsquoest possible ndash la procedure exacte depend du constructeur) Heureusementil srsquoavere que le mot de passe null est toujours accepte comme valide

Un autre bogue celebre affecte le Motorola Droid et potentiellement drsquoautresLorsque le telephone est verrouille mais qursquoun appel entrant arrive il est possibledrsquoappuyer sur le bouton Back et ainsi drsquoarriver a lrsquoecran drsquoaccueil du telephone 33

Enfin une superbe faille logique a ete decouverte sur le site httpsmarket

androidcom qui permet drsquoinstaller a distance des applications sur un telephoneAndroid Grace a une faille de type XSS persistant sur ce site 34 il etait possible defaire installer une application puis de lrsquoexecuter automatiquement sur le telephonede nrsquoimporte quel utilisateur Un utilisateur pouvait etre victime de cette attaque encliquant sur un lien depuis son telephone ou son PC (sous reserve drsquoetre logue sousson compte Google)

La technique utilisee pour executer automatiquement lrsquoapplication apres soninstallation merite drsquoetre soulignee elle consiste a declarer dans le manifeste delrsquoapplication que celle-ci supporte un nouveau schema drsquoURI (par exemple trigger

) puis a invoquer un lien trigger depuis la page Web drsquoorigine

Que peut-on faire Compte-tenu de la quantite de code C embarque dans lesysteme Android il existe et il existera des bogues drsquoimplementation dans ce systeme

30 httpenwikipediaorgwikiMultiMediaCardeMMC

31 Un site de reference pour les telephones de marque HTC httpunrevokedcom32 httpcodegooglecompandroidissuesdetailid=3006

33 httptechcrunchcom20100111verizon-droid-security-bug

34 httpjonoberheideorgblog20110307how-i-almost-won-pwn2own-via-xss

N Ruff 137

conduisant pour certains a des failles de securite WebKit et le systeme Linux sontdes cibles de choix compte-tenu de la surface drsquoattaque exposee

Toutefois et contrairement a un systeme classique la mise a jour a grandeechelle srsquoavere extremement problematique pour plusieurs raisons

ndash Le facteur drsquoechelle (plusieurs millions drsquounites en circulation rien qursquoen France)ndash La diversite et le haut degre de personnalisation des plateformes materielles et

logiciellesndash La propriete du terminal (lorsqursquoil a ete achete par lrsquoutilisateur)ndash Les risques commerciaux en cas de blocage definitif du terminal (brick)On peut raisonnablement considerer qursquoen dehors du geek moyen aucun utilisateur

de smartphone sous Android nrsquoa jamais mis a jour son systemeLes statistiques officielles de Google sur la repartition des ordiphones par version

drsquoAndroid permettent de se faire une idee objective sur la vitesse de renouvellementdu parc 35 A lrsquoheure ou jrsquoecris ces lignes malgre la disponibilite du systeme Android23 la majorite du parc se compose encore de systemes Android 21 et 22 ndash sanscompter sur les irreductibles 6 qui disposent drsquoune version anterieure Je laisseaux statisticiens le soin de produire une etude plus detaillee qui sera neanmoinsbiaisee par le fait que les donnees mondiales sont agregees tandis que les politiquesde renouvellement des operateurs sont tres variables drsquoun pays a lrsquoautre

Dans ces conditions il est loin le moment ou un operateur mobile fera du NAC-NAP sur son reseau pour interdire la connexion de ordiphones qui ne sont pas a jourdes correctifs

Techniquement le protocole FOTA (Firmware Over-The-Air) permet toutefoisde mettre a jour a distance des terminaux Ce protocole a deja ete utilise a grandeechelle lorsqursquoune backdoor (exploitable a distance) a ete decouverte sur certainstelephones HTC de modele Hero et Evo

5 Audit drsquoapplications Android

51 Auditer pourquoi

Lrsquoaudit securite drsquoapplications tierces est une activite vieille comme le conseil ensecurite Toutefois le circuit de distribution logicielle etant assez different entre lemonde du logiciel drsquoentreprise et les MarketPlaces pour mobiles il est vrai que laquestion merite drsquoetre posee a nouveau

A lrsquoheure ou jrsquoecris ces lignes Google nrsquoeffectue aucune verification de securite surles applications publiees dans lrsquoAndroid Market Cet etat de fait pourrait changer

35 httpdeveloperandroidcomresourcesdashboardplatform-versionshtml

138 Securite du systeme Android

compte-tenu de la proliferation drsquoapplications malveillantes de plus en plus agressiveset sophistiquees

Parmi tous les risques lies aux terminaux mobiles (vol de lrsquoequipement intrusionvia une faille du navigateur etc) on constate dans les faits que le risque principalaujourdrsquohui est la proliferation drsquoapplications malveillantes La malveillance estune notion assez floue et certaines applications peuvent se situer dans une zone grise - comme lrsquoapplication de voix sur IP Viber 36 qui duplique tous les contactsde lrsquoutilisateur sur un serveur central faisant office drsquoannuaire telephonique Maisdrsquoautres applications font lrsquounanimite contre elles comme les applications utilisant desfailles systeme pour elever leurs privileges vers root etou envoyer des SMS surtaxessans le consentement de lrsquoutilisateur Ces applications sont drsquoailleurs tuees parGoogle une fois identifiees car elles violent clairement les regles drsquoutilisation delrsquoAndroid Market

Les circuits qui conduisent a lrsquoapparition drsquoune application malveillante sontmultiples

ndash Malveillance deliberee de lrsquoauteur qui veut gagner de lrsquoargent rapidement Crsquoestle cas le plus simple Un scenario courant consiste a cloner une applicationen vogue tout en y ajoutant du code malveillant

ndash Compromission drsquoun editeur drsquoapplications a son insu Crsquoest la ligne de defenseadoptee par plusieurs editeurs drsquoapplications apres avoir ete pointe du doigtCette defense est malheureusement credible car la plupart des developpeurs sontdes individus isoles ou des micro-entreprises attirees par les success stories a laAngry Birds et bien souvent sans aucune securite dans les developpements

ndash Integration de librairies tierce partie malveillantes dans un programme sainLrsquoauteur drsquoune application populaire (a savoir Tank Hero ) a ainsi an-nonce avoir ete contacte par un fournisseur drsquoapplications probablementmalveillantes qui lui proposait un accord commercial 37

Mais lrsquoidentification des applications malveillantes nrsquoest pas la seule raison quipeut conduire a auditer une application Android Parmi drsquoautres raisons legitimes on peut citer

ndash Verifier que lrsquoapplication fait bien ce qursquoelle pretend faire Ce point est parti-culierement critique pour les applications de securite qui mettent en œuvre duchiffrement ou de la gestion de mots de passe par exemple Dans le domaineles surprises sont nombreuses drsquoautant que les applications mobiles nrsquoont pasencore la maturite des applications bureautiques et que les contraintes

36 httpwwwvibercom

37 httpwwwredditcomrAndroidcommentsfm3cuspyware_company_wants_us_to_embed_

their_code_into

N Ruff 139

du monde embarque se font sentir (puissance de calcul sources drsquoentropieremanence de lrsquoallocateur memoire Java etc)

ndash Recherche des failles de securite Et oui les applications Android sont aussivulnerables aux buffer overflows lorsqursquoelles utilisent du code natif (compileavec le NDK) et meme des injections SQL (meme si SQLite nrsquoimplemente pasdrsquoequivalent a xp cmdshell) Il existe par ailleurs des attaques specifiques aumonde Android comme les BroadcastReceiver qui ne verifieraient pas la sourcedes messages recus

Le probleme principal avec lrsquoaudit drsquoapplications Android nrsquoest pas techniqueLe probleme crsquoest lrsquoeuphorie du marche proliferation drsquoapplications et mises a jourfrequentes qui obligent a automatiser et industrialiser les audits 38

52 Auditer comment

Lrsquoaudit securite est une tache difficile a modeliser car elle tire parti de la creativitede lrsquoauditeur On peut toutefois identifier les grandes lignes suivantes

1 Recuperer lrsquoapplication

2 Decompresser les ressources

3 Desassembler le bytecode

4 Decompiler le bytecode (lorsque crsquoest possible)

5 Desassembler le code natif

6 Deboguer lrsquoapplication en cours drsquoexecution (sur un telephone reel ou danslrsquoemulateur)

Cette methodologie nrsquoest pas exhaustive elle ne donne pas acces au contenutelecharge ulterieurement (par exemple au travers des publicites integrees) Voyonsles methodes et les difficultes associees a chaque etape

Recuperer lrsquoapplication Cette etape nrsquoest pas trop compliquee pour qui est preta installer lrsquoapplication cible sur son telephone Apres installation le fichier APK estconserve dans le repertoire dataapp Selon les permissions appliquees au systeme defichiers il nrsquoest pas necessairement possible de lister le contenu de ce repertoire maisles paquets restent lisibles par lrsquooutil adb et le nom de paquet peut etre determinedepuis la MarketPlace ou le menu parametres du telephone (le nom exact estpaquet-Napk ou N vaut generalement 1)

38 httpwwwappanalysisorg

140 Securite du systeme Android

Toute autre methode est complexe et probablement illegale Parmi les methodespossibles on peut citer lrsquoinstallation de lrsquoapplication MarketPlace dans un emulateurou le reverse engineering de lrsquoapplication MarketPlace a des fins de reimplementation(cette derniere etant toutefois volumineuse donc complexe a analyser)

Depuis la version 22 du systeme Android et si lrsquoapplication lrsquoautorise il estpossible drsquoinstaller une application sur la carte SD Mais lrsquoapplication est alorsstockee dans un fichier asec chiffre Ce fichier est inexploitable jusqursquoa ce quele mecanisme et la cle de chiffrement soient connus

On peut imaginer qursquoune application extremement malveillante pourrait exploiterune faille des lrsquoinstallation pour elever ses privileges vers root et dissimuler ses traces(ie se rendre inaccessible de lrsquoexterieur) Ce cas ne srsquoest pas encore produit dansla nature a lrsquoheure ou jrsquoecris ces lignes mais srsquoavere techniquement faisable

Il faut noter que la MarketPlace de Google nrsquoest pas la seule disponible maisqursquoil existe egalement des MarketPlaces drsquooperateurs ou de tiers ainsi Amazoncommercialise desormais des applications Android 39 Cette proliferation complexifiedrsquoautant la tache drsquoanalyse des MarketPlaces La methode la plus universelle pourrecuperer la source drsquoinstallation drsquoune application reste donc de lrsquoinstaller sur untelephone

Un utilisateur peut installer des applications depuis des sources externes a laMarketPlace si lrsquooption autoriser les sources inconnues est cochee dans lesparametres de configuration Il existe des applications legitimes accessibles en dehorsdes MarketPlaces mais il existe egalement des bases drsquoapplications piratees surInternet dont lrsquoinnocuite ne peut pas etre garantie

Notons que certaines applications meme parmi celles disponibles sur les Market-Places officielles exigent au prealable un acces root au telephone

Decompresser les ressources Les fichiers places a lrsquointerieur drsquoun paquet APKsont optimises drsquoune maniere ou drsquoune autre avant drsquoetre compresses Ceci srsquoappliqueaussi bien au bytecode qursquoaux ressources textuelles (comme les fichiers XML)

Lrsquoune des optimisations principales est la deduplication de donnees Ainsi ilnrsquoexiste qursquoune seule instance de chaque chaine de caracteres dans un fichier DEXDifferents encodages optimises sont egalement utilises tel que LEB128 pourla representation des entiers (Little Endian Base 128 aussi utilise dans le formatDWARF)

Toutes ces optimisations nrsquoont pas pour but la protection logicielle et sont parfai-tement reversibles Lrsquooutil aapt fourni avec le SDK officiel permet ainsi drsquoexplorerle contenu du manifeste drsquoun paquet APK Les techniques drsquooptimisation ont ete

39 httpwwwamazoncomappstore

N Ruff 141

analysees et documentees par des tiers ce qui a permis la production drsquooutils dedecompression comme apktool 40

Desassembler le bytecode Avec le SDK officiel est fourni lrsquooutil dexdump quipermet de lister le bytecode contenu dans un fichier CLASSESDEX

Le format de fichier DEX a ete lui aussi analyse et documente 41 ce qui a permisla production de desassembleurs tiers comme baksmali

Le code genere suit la syntaxe Jasmin 42 bien connue dans le monde Java tra-ditionnel Cette syntaxe peut sembler obscure de prime abord mais elle est par-faitement reguliere donc finalement tres simple a apprehender Prenons un exempleissu drsquoune application reelle voici ci-dessous le code drsquoune methode appeleeemptyResult telle que produit par baksmali

method protected static emptyResult(LjavalangString )Z

locals 1

parameter result

prologue

line 306

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Toutes les directives commencent par un point Leur nom est relativement explicitelocals 1 va par exemple indiquer la presence drsquoune seule variable locale Le nomassigne aux opcodes de la machine virtuelle est egalement assez parlant

pN represente lrsquoargument numero N passe a la methode vN represente le re-gistre numero N (Dalvik est une machine virtuelle a registres et non a pile)

Munis de ces informations decortiquons la seule operation reellement complexeeffectuee dans cet extrait de code

40 httpcodegooglecompandroid-apktool

41 httpwwwnetmitecomandroidmydroiddalvikdocsdex-formathtml

42 httpjasminsourceforgenet

142 Securite du systeme Android

invoke-static Invoque une methode sta-tique Il existe egalementun opcode invoke-virtual

pour les methodes virtuellesinvoke-super pour la methodede la superclasse etc

p0 La methode appelee prend unseul argument La valeur de cetargument provient du premierargument passe a la methodeemptyResult

LcomutilsStringUtils-gtisEmpty Invoque la methode isEmpty de laclasse comutilsStringUtils L est un prefixe accole a tousles litteraux

(LjavalangString) Le premier (et seul) argument estde type javalangString

Z La methode retourne un booleen

A titre de reference voici les differents types natifs disponibles dans Jasmin

Z BooleenB OctetC CaractereS Entier court (16 bits)I Entier (32 bits)J Entier long (64 bits)F Flottant (32 bits)D Double (64 bits)

Lrsquoavantage majeur de lrsquooutil tiers apktool est la possibilite de modifier le bytecodeou les ressources drsquoune application puis de la recompiler dans une version fonctionnelleCeci permet drsquoutiliser une technique drsquoanalyse aussi ancienne que lrsquoinformatiqueappelee printf debugging

Dans le monde Android lrsquoutilisation de Systemout doit etre remplacee parandroidutilLog Cette classe definit plusieurs methodes ndash respectivement v d iw e et wtf ndash qui correspondent chacune a un niveau de verbosite ndash et dont lesarguments sont enregistres dans le journal systeme (sauf le niveau debug) Cejournal peut etre consulte a lrsquoaide de la commande adb logcat apparait en temps

N Ruff 143

reel dans lrsquooutil DDMS et peut egalement etre consulte par toute application quidispose de la permission READ LOGS

Si lrsquoon souhaite connaitre lrsquoargument passe a la methode emptyResult danslrsquoexemple precedent il suffit alors drsquoajouter un appel a nrsquoimporte quelle methode dela classe Log de la maniere suivante

method protected static emptyResult(LjavalangString )Z

locals 2

parameter result

prologue

line 306

const -string v1 PrintfDebuggingStyle

invoke -static v1 p0 LandroidutilLog-gtd(LjavalangStringLjavalang

String )I

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Une variable locale v1 a ete ajoutee contenant une chaine de caracteres fixe Lamethode d() est ensuite invoquee Cette modification est equivalente au code Javasuivant

Logd(PrintfDebuggingStyle ltp0 gt)

On peut constater experimentalement que de nombreuses applications de laMarketPlace font usage de lrsquoAPI Log ce qui permet de collecter des donnees defonctionnement parfois tres (trop) interessantes

Le journal systeme peut etre collecte a distance par un developpeur lors ducrash de son application si lrsquoutilisateur lrsquoautorise Cette technique a ete presenteepar Renaud Lifchitz lors de la conference 27c3 pour espionner les deplacements drsquounutilisateur 43

Decompiler le bytecode Comme avec tout bytecode de haut niveau (ex JavaNET) la semantique de lrsquoapplication est conservee

Il est donc possible de decompiler du bytecode Dalvik et de reconstruire le codeJava drsquoorigine (sans les commentaires ndash seule information perdue a la compilation) Lepremier outil public capable drsquoune telle operation fut undx 44 de Marc Schoenefeld Cetoutil est toutefois bogue et non maintenu par son auteur Le meilleur outil disponibleactuellement est lrsquooutil dex2jar 45 qui reconstruit du bytecode Java a partir du

43 httpeventscccdecongress2010Fahrplanevents4151enhtml

44 httpwwwillegalaccessorgundxhtml

45 httpcodegooglecompdex2jar

144 Securite du systeme Android

bytecode Dalvik Les outils classiques de decompilation Java 46 47 srsquoappliquentalors

Compte-tenu de la facilite deconcertante avec laquelle il est possible drsquoanalyserles applications Android (et donc de les craquer entre autres) Google a mis adisposition des developpeurs une bibliotheque tres complete de gestion des licences enligne Licensing Verification Library (LVL) 48 Toutes les versions de cette bibliothequeont malheureusement ete craquees elles aussi a lrsquoheure ou jrsquoecris ces lignes

Une autre contre-mesure mise en place par Google consiste a integrer un obfusca-teur de bytecode dans la chaine de compilation ProGuard 49 Cet outil relativementpuissant est configurable par le developpeur au travers du fichier proguardcfg toutefois le fichier de configuration par defaut (reproduit ci-apres) nrsquoopere que lerenommage des classes et methodes invisibles a lrsquoexterieur de lrsquoapplication ce qui estpeu efficace face a un attaquant determine

-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontpreverify

-verbose

-optimizations codesimplificationarithmetic field classmerging

-keep public class extends androidappActivity

-keep public class extends androidappApplication

-keep public class extends androidappService

-keep public class extends androidcontentBroadcastReceiver

-keep public class extends androidcontentContentProvider

-keep public class extends androidappbackupBackupAgentHelper

-keep public class extends androidpreferencePreference

-keep public class comandroidvendinglicensingILicensingService

-keepclasseswithmembernames class

native ltmethods gt

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet)

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet int)

-keepclassmembers enum

public static [] values ()

public static valueOf(javalangString)

46 httpmembersfortunecitycomneshkovdjhtml

47 httpjavadecompilerfreefr

48 httpdeveloperandroidcomguidepublishinglicensinghtml

49 httpdeveloperandroidcomguidedevelopingtoolsproguardhtml

N Ruff 145

-keep class implements androidosParcelable

public static final androidosParcelable$Creator

Au vu des resultats obtenus on peut considerer que lrsquoobfuscation de bytecode Javadans le monde Android est en retard sur lrsquoobfuscation de code x86 dans le monde PCLes techniques de complexification du flot de controle ou de construction dynamiquedes constantes ne sont pas encore repandues dans les applications commerciales pourAndroid Afin de combler ce manque des projets paralleles (comme AndroGuard 50)fleurissent - mais on peut supposer que la solution integree au SDK fourni par Googlerestera la solution majoritairement utilisee par les applications (pour des raisons desimplicite evidentes)

Desassembler du code natif Lors de lrsquoaudit drsquoune application Android il estpossible de rencontrer du code natif dans deux cas

1 Lrsquoapplication contient des bibliotheques natives compilees avec le NDK

2 Lrsquoapplication contient des applications natives ou srsquoavere etre elle-meme uneapplication native Ce cas est courant avec les applications malveillantes quiembarquent du code natif pour exploiter des failles noyau 51

Dans les deux cas Android ne presente aucune specificite par rapport a unLinuxARM classique Les fichiers natifs sont au format ELF La chaine de compilationnative est construite autour du compilateur GCC Tous les outils sont disponiblesdepuis longtemps pour analyser des tels binaires (ex IDA Pro Hex-Rays DecompilerARM etc)

Deboguer lrsquoapplication Une application Java compilee en mode debug peutetre deboguee a distance au travers du protocole standard Java Debug Wire Protocol(JDWP) defini dans le cadre de Java Platform Debugger Architecture (JPDA)

Les environnements de developpement Java classiques (comme Eclipse) per-mettent ainsi de deboguer une application a distance une fois celle-ci installee sur letelephone

Il est egalement possible drsquoutiliser le venerable JDB (fourni avec le SDK Java 52)bien que cet outil nrsquoait jamais depasse le statut de preuve de concept a mon avis

Lrsquooutil DDMS fourni avec le SDK Android repose egalement sur JPDA Cetoutil ne permet toutefois pas le debogage drsquoapplications mais seulement lrsquoanalyse deperformance

50 httpcodegooglecompandroguard

51 httpstealthopenwallnetxSports

52 httpdownloadoraclecomjavase142docstooldocssolarisjdbhtml

146 Securite du systeme Android

La liste des applications pouvant etre deboguees sur un systeme Android srsquoobtientavec la commande adb jdwp

Le vrai probleme se pose pour les applications qui nrsquoont pas ete compilees enmode debug Ceci implique que le manifeste de lrsquoapplication ne contient pasdrsquoentree ltapplication androiddebuggable=truegt De plus la plupart des outilsde debogage Java necessitent que le bytecode contienne des indications sur les numerosde lignes dans le code source drsquoorigine (il srsquoagit drsquoune limitation arbitraire qui nesrsquoapplique pas a lrsquooutil JavaSnoop 53 par exemple)

Fort heureusement il est possible de desassembler ces applications puis de lesreassembler en mode debug avec lrsquooutil apktool 54 Le processus est complexe etle resultat peu convivial mais il a le merite drsquoexister

Pour reinstaller lrsquoapplication modifiee sur un equipement reel il est necessairede la signer a nouveau La procedure est simple et parfaitement documentee parGoogle

Il faut drsquoabord generer une cle personnelle autosignee a duree de vie extremementlongue

$ keytool -genkey -v -keystore mykeykeystore -alias nom_alias -keyalg RSA -

keysize 2048 -validity 10000

Il faut ensuite signer le nouvel APK avec les outils du SDK Java

$ jarsigner -verbose -keystore mykeykeystore nom_applicationapk nom_alias

Enfin il est recommande drsquoaligner le code sur un multiple de 4 octets pour desraisons de performance

$ zipalign -v 4 nom_applicationapk nom_application_finalapk

Instrumentation Il est possible drsquoinstrumenter une application Java a lrsquoaide declasses specifiques a Android (androidappInstrumentation 55) Cette methodefournit des resultats detailles et personnalisables sur le fonctionnement interne drsquouneapplication elle necessite toutefois une decompilation et une modification prealablede lrsquoapplication a auditer

A lrsquoheure ou jrsquoecris ces lignes il nrsquoexiste pas (a ma connaissance) drsquooutil permettantde generaliser et drsquoautomatiser le processus a tout fichier APK Cette voie de recherchepourrait toutefois donner des resultats interessants

53 httpwwwaspectsecuritycomtoolsjavasnoop

54 httpcodegooglecompandroid-apktoolwikiSmaliDebugging

55 httpdeveloperandroidcomreferenceandroidappInstrumentationhtml

N Ruff 147

Outils specifiques Les outils disponibles actuellement dans le monde Android sontrudimentaires quoi que suffisants

Toutefois on peut raisonnablement estimer que la quantite et la qualite des outilsdisponibles va croitre de concert avec la popularite du systeme Android

A lrsquoheure ou jrsquoecris ces lignes la version 61 du logiciel IDA Pro 56 vient de sortirCette version ajoute le support du format DEX et du bytecode Dalvik ainsi que ledebogage a distance des applications Android natives

On peut supposer que drsquoautres outils couramment utilises par les auditeurs ensecurite vont etre mis a jour pour srsquoadapter au monde Android

6 Conclusion

Le systeme Android nrsquoa malheureusement pas profite de lrsquoopportunite unique quilui etait donnee repartir de la feuille blanche et creer un systeme drsquoexploitation sur par conception

A cause drsquoun heritage logiciel peu fiable ainsi que des contraintes materielles etcommerciales issues du monde de la telephonie mobile le systeme resultant est uncompromis qui laisse une large place a la creativite des attaquants

Celle-ci est drsquoautant plus exacerbee que la telephonie mobile est un phenomene demasse (il y a plus de telephones mobiles que drsquoordinateurs dans le monde) et que letelephone mobile est par conception un systeme de paiement (ce que nrsquoest pas un PCtraditionnel)

A ce tableau vient srsquoajouter 30 ans drsquoexperience dans le domaine des attaqueslogicielles appliquees a un ecosysteme applicatif qui nrsquoexistait pas il y a 5 ans

Toutes les conditions sont donc reunies pour que des attaques de grande ampleurmotivees par lrsquoargent se produisent contre les materiels grand public equipes dusysteme Android (telephones tablettes televisions )

La bonne nouvelle pour lrsquoexpert en securite crsquoest qursquoil est encore temps de srsquoymettre Android est suffisamment jeune et accessible aux nouveaux entrants ce quinrsquoest plus le cas de la plateforme PC ou les techniques drsquoattaque (ex exploitationdrsquoun heap overflow) et de defense (ex obfuscation logicielle) ont atteint des sommetsde raffinement desormais accessibles aux seuls experts les plus pointus du domaine

7 Sites et outils

71 Sites officiels

ndash Android portail officiel httpwwwandroidcom

56 httpwwwhex-rayscomidapro

148 Securite du systeme Android

ndash Android MarketPlace officielle httpsmarketandroidcomndash Android reference des developpeurs httpdeveloperandroidcom

72 Sites non officiels

ndash Reference de la machine virtuelle Dalvik httpdalvikvmcom

73 Outils tiers

ndash Google Android Debugging Utilities httpsitesgooglecomsiteortegaalfredoandroid

ndash Undx httpwwwillegalaccessorgundxhtmlndash SmaliBaksmali httpcodegooglecompsmalindash Dedexer httpdedexersourceforgenetndash Dex2Jar httpcodegooglecompdex2jarndash TaintDroid httpwwwappanalysisorg

ndash AndroGuard httpandroguardblogspotcom

References

1 Benjamin Morin Modele de securite drsquoAndroid MISC 51 2010

2 K Chen Reversing and exploiting an apple firmware update httpwwwblackhatcom

presentationsbh-usa-09CHENBHUSA09-Chen-RevAppleFirm-PAPERpdf BlackHat 2009

3 Alexandre Gazet Sticky fingers amp KBC Custom Shop httpwwwssticorg2011presentation

sticky_fingers_and_kbc_custom_shop SSTIC 2011

4 Loıc Duflot and Yves-Alexis Perez Quelques elements en matiere de securite des cartes reseau http

wwwssticorg2010presentationPeut_on_faire_confiance_aux_cartes_reseau SSTIC 2010

5 Alexander Tereshkin and Rafal Wojtczuk Introducing Ring -3 Rootkits httpwwwblackhat

compresentationsbh-usa-09TERESHKINBHUSA09-Tereshkin-Ring3Rootkit-SLIDESpdf Black-Hat USA 2009

6 Loıc Duflot Yves-Alexis Perez and Benjamin Morin Run-time firmware integrity verification what ifyou canrsquot trust your network card CanSecWest 2011

7 Ralf-Philipp Weinmann All Your Baseband Are Belong To Us httpeventscccdecongress

2010Fahrplanevents4090enhtml CCC 2010

8 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Formal Model to Analyzethe Permission Authorization and Enforcement in the Android Framework SecureComrsquo10

9 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Small but Non-negligibleFlaw in the Android Permission Scheme Wook Shin Sanghoon Kwak Shinsaku Kiyomoto KazuhideFukushima et Toshiaki Tanaka IEEE POLICY 2010

10 Marc Schonefled Reconstructing Dalvik Applications httpcansecwestcomcsw09

csw09-schoenefeldpdf CanSecWest 2009

N Ruff 149

11 Sergio Alvarez The Smart-Phones Nightmare (iPhone-oriented parts about Android) http

cansecwestcomcsw09csw09-alvarezpdf CanSecWest 2009

12 Nicolas Economou Alfredo Ortega Smartphone (in)security httpcansecwestcomcsw09

csw09-ortega-economoupdf CanSecWest 2009

13 Jesse Burns Exploratory Android Surgery httpwwwblackhatcompresentationsbh-usa-09

BURNSBHUSA09-Burns-AndroidSurgery-SLIDESpdf BlackHat USA 2009

14 Kevin Mahaffey John Hering App Attack httpsmediablackhatcombh-us-10presentations

Mahaffey_HeringBlackhat-USA-2010-Mahaffey-Hering-Lookout-App-Genome-slidespdf Black-Hat USA 2010

15 Nils The Risk you carry in your Pocket httpsmediablackhatcombh-ad-10Nils

Black-Hat-AD-2010-android-sandcastle-slidespdf BlackHat Abu Dhabi 2010

16 Raphael Rigo Android Reverse Engineering and Forensics httpsdeepsecnetdocsspeaker

htmlPSLOT45 DeepSec 2010

17 Itzhak Avraham Popping Shell on A(ndroid)RM Devices httpsmediablackhatcombh-dc-11

AvrahamBlackHat_DC_2011_Avraham-Popping_Android_Devices-Slidespdf BlackHat DC 2011

18 Jon Oberheide httpjonoberheideorgblog20100625remote-kill-and-install-on-google-android

19 Jon Oberheide httpjonoberheideorgblog20100628a-peek-inside-the-gtalkservice-connection

20 httpwwwandroidpolicecom20110301the-mother-of-all-android-

malware-has-arrived-stolen-apps-released-to-the-market-that-root-

your-phone-steal-your-data-and-open-backdoor

  • Seacutecuriteacute du systegraveme Android
  • N Ruff

128 Securite du systeme Android

application ne possedant qursquoun jeu limite de permissions (jugees peu dangereusesindividuellement) mais la combinaison de toutes ces applications dans le memeprocessus formant une super application pouvant par exemple exfiltrer toutes lesdonnees du telephone

Revocation Compte-tenu de lrsquoaccroissement du nombre drsquoapplications malveillantessur la MarketPlace officielle Google fait un usage de plus en plus frequent dukill switch 12 ndash fonction qui permet drsquoeliminer a distance toutes les instances drsquouneapplication identifiee par son certificat

Pour ceux que cette fonction intrigue je signale que le mecanisme sous-jacent adeja ete decortique en detail [1819] Le cœur du mecanisme repose sur le processusGTalkService qui recoit et traite les messages REMOVE ASSET (et INSTALL ASSET) Laconclusion en est que toute personne en position drsquoeffectuer un man-in-the-middleSSL avec un certificat valide peut emettre de tels messages La liste des autorites deconfiance du systeme se trouve dans le fichier systemetcsecuritycacertsbkset ne peut pas facilement etre modifiee 13 Toutefois cette liste contient (sur montelephone) 58 autorites de nature variee (entreprises gouvernements etc) De plusune application malveillante ayant eleve ses privileges vers root pourrait probablementbloquer lrsquoutilisation du kill switch sur un equipement donne une fois les mecanismessous-jacents connus et documentes

Par le passe la securite basee sur la revocation a montre ses limites 14 En effetcela suppose que lrsquoequipement cible dispose drsquoune connexion a un reseau de donneeset qursquoil soit configure pour en faire usage Ce sont des hypotheses assez fortes

35 Les permissions

Considerations generales Le modele de securite des applications tierce partieest essentiellement declaratif Un fichier de manifeste decrit les permissionsmaximales requises par lrsquoapplication Google definit une centaine de permissionspossibles par defaut 15 mais les constructeurs sont libres drsquoen ajouter egalement cequi peut engendrer des risques specifiques a un modele de telephone donne

La commande de base permettant de manipuler les permissions sur le telephonesrsquoappelle pm Voici les options qursquoelle offre

$ adb shell pm

12 httpandroid-developersblogspotcom201006exercising-our-remote-applicationhtml

13 httpwwwmcbsyscomtechblog201012android-certificates

14 httpwwwf-securecomweblogarchives00001918html

15 httpdeveloperandroidcomreferenceandroidManifestpermissionhtml

N Ruff 129

usage pm [list|path|install|uninstall]

pm list packages [-f]

pm list permission -groups

pm list permissions [-g] [-f] [-d] [-u] [GROUP]

pm list instrumentation [-f] [TARGET -PACKAGE]

pm list features

pm path PACKAGE

pm install [-l] [-r] [-t] [-i INSTALLER_PACKAGE_NAME] [-s] [-f] PATH

pm uninstall [-k] PACKAGE

pm enable PACKAGE_OR_COMPONENT

pm disable PACKAGE_OR_COMPONENT

pm setInstallLocation [0 auto] [1 internal] [2 external]

()

A titre drsquoexemple voici les permissions definies par HTC sur lrsquoune de mes plate-formes de test

$ adb shell pm list permissions | grep htc

permissioncomhtcandroidmailpermissionREAD_MAIL

permissioncomhtcManifestpermissionBROADCAST_KEYIN_EVENT

permissioncomhtcManifestpermissionBROADCAST_MOTION_EVENT

permissioncomhtcManifestpermissionBLOCK_KEYBOARD_EVENT

permissioncomhtcandroidmailpermissionWRITE_ACCOUNT

permissioncomhtcandroidmailpermissionREAD_ACCOUNT

permissioncomhtchtctwitterpermissionuseprovider

permissioncomhtcManifestpermissionBROADCAST_TRACKBALL_EVENT

permissioncomhtcinternalpermissionHTC_APP_PMEM

permissioncomhtcandroidmailpermissionWRITE_MAIL

On notera egalement que cette plateforme contient des permissions a priorispecifiques a lrsquooperateur (americain) Sprint - alors qursquoil srsquoagit drsquoun telephone acheteen France sans abonnement

$ adb shell pm list permissions | grep sprint

permissioncomsprintinternalpermissionSLOT0

permissioncomsprintinternalpermissionPLATFORM

permissioncomsprintinternalpermissionSYSTEMPROPERTIES_WRITE

permissioncomsprintinternalpermissionSYSTEMPROPERTIES

permissioncomsprintinternalpermissionCONNECTIONMANAGER

permissioncomsprintinternalpermissionOMADM

permissioncomsprintandroidpermissionDISABLE_HDMI

Lrsquoutilisateur est libre drsquoaccepter ou de refuser lrsquoapplication mais il ne peut pasmodifier la liste des permissions demandees (sauf a modifier lrsquoapplication et a lare-signer avec sa propre cle comme nous le verrons plus tard)

On peut raisonnablement estimer que la plupart des utilisateurs ne sont pas enmesure drsquoeffectuer un choix eclaire a ce stade

130 Securite du systeme Android

Securite theorique Lrsquoune des questions qursquoon peut se poser sur le systeme depermissions tel qursquoil a ete defini est lrsquoexistence (ou non) drsquoun modele theorique sous-jacent coherent [98] Est-ce que chaque permission correspond bien a un ensemble detaches uniques et strictement delimitees Crsquoest la meme question qui se pose avec lemodele des capabilities sous Linux et dans ce deuxieme cas la reponse est non CAP SYS MODULE permet par exemple de charger des modules noyau arbitraires etdonc de compromettre entierement lrsquointegrite du noyau

Dans le cas drsquoAndroid on peut suspecter que la permission SYSTEMPROPERTIES WRITE

definie par lrsquooperateur Sprint (vue precedemment) a probablement une intersectionnon nulle avec la permission WRITE SETTINGS definie par Google tout en etantprobablement inconnue des outils drsquoanalyse automatique drsquoinnocuite

Lrsquointeret pratique drsquoune etude mathematique sur les permissions Android esttoutefois limite En effet les deux risques majeurs rencontres dans la nature sont

ndash Des applications malveillantes qui demandent des permissions excessivementlarges et abusent de la confiance des utilisateurs

ndash Des applications malveillantes sans aucune permission qui exploitent des faillessysteme pour obtenir lrsquoacces au compte root et contourner entierement lemodele de securite

Ces risques sont partages avec tous les autres modeles de securite en usage danslrsquoindustrie (SELinux sous Linux UAC sous Windows etc)

ndash Ces modeles se heurtent a lrsquoergonomie des interfaces et a la prise de decisioneclairee par les utilisateurs finaux

ndash Lrsquoimplementation de ces modeles exige un effort de conception important tandisque les attaquants les contournent entierement en violant les hypotheses deconception (en particulier lrsquohypothese que le noyau du systeme drsquoexploitationest exempt de bogues)

Autres limites du modele Presque toutes les applications existantes exigent unacces illimite au reseau tres souvent pour recuperer du contenu publicitaire Enpratique cela signifie que le risque pose par une application ne se limite pas a unensemble de permissions statiques par exemple un contenu malveillant pourra etreenvoye a tout moment au moteur de rendu WebKit a travers le canal publicitaire etprovoquer ainsi la prise de controle drsquoun telephone donne au travers une applicationa priori saine

Les permissions demandees peuvent changer a lrsquooccasion drsquoune mise a jour Orla plupart des utilisateurs font confiance aux applications qursquoils ont deja installeesDepuis la version 22 drsquoAndroid lrsquoutilisateur peut autoriser les applications a semettre a jour automatiquement Fort heureusement la mise a jour automatique est

N Ruff 131

bloquee si les permissions demandees par lrsquoapplication changent De mon point devue le mecanisme de mise a jour automatique peut donc etre considere comme plutotbenefique pour lrsquoecosysteme

Enfin le code natif attache a une application (dans le cas drsquoutilisation du NDK)est essentiellement non verifiable contrairement au bytecode Dalvik Le modelede securite Unix vient donc srsquoajouter au modele de permissions Android

4 Panorama des risques

Jrsquoidentifie trois risques de securite majeurs applicables aux ordiphones mo-dernes

1 La structuration du marche de la telephonie

2 Les failles logicielles

3 Les applications tierce partie

Nous allons passer en revue ces trois risques Le troisieme risque est plus specifique alrsquoecosysteme Android dans lequel le role de chaque acteur est bien separe fournisseurde materiel fournisseur de logiciel fournisseur de service

Il se verifie moins dans des ecosystemes comme celui de lrsquoiPhone et du BlackBerrydans lesquels les fournisseurs du materiel et du logiciel sont les memes

41 Marche de la telephonie

Plusieurs acteurs majeurs interviennent dans le marche de la telephonie mobile

1 Les fabricants de materiels

2 Les fabricants de logiciels (en lrsquooccurrence Google)

3 Les circuits de distribution (pour lrsquoinstant les operateurs de telephonie mobile)

4 Les developpeurs drsquoapplications

5 Les fournisseurs de contenus et de services (regies publicitaires services en ligneetc)

Nous allons passer en revue les interets de ces acteurs et le role qursquoils jouent dansla securite de la plateforme a lrsquoexception des derniers qui sont trop divers et varies

Il faut noter que si demain Android venait a equiper drsquoautres biens de consomma-tion courante (ex televiseurs refrigerateurs etc) les parties prenantes (et donc lesconclusions de cette etude) ne seraient pas fondamentalement differentes

132 Securite du systeme Android

Fabricants de materiels Les fabricants de materiels vivent dans un monde extremementconcurrentiel et doivent minimiser le cout de developpement de leurs produits pourque lrsquooperateur puisse au final proposer son telephone a 1 Par ailleurs ils doiventegalement minimiser le time to market un telephone portable se demode tresvite la duree de vie commerciale drsquoun systeme est de lrsquoordre de 6 mois

En consequence logique les developpements sont bacles Les systemes pousses enproduction sont a peine testes et les fonctions de debogage restent souvent activees(comme en temoigne le shell root disponible sur le port TCP12345 des series HTCEvo et HTC Hero commercialisees par Sprint 16)

En regle generale aucun support technique nrsquoest offert apres la sortie drsquountelephone Les mises a jour officielles de firmware sont rarissimes dans le domaine dela telephonie mobile - a lrsquoexception notable drsquoApple qui propose des mises a jourpour le systeme iOS dans la fenetre de support de ses equipements a savoir 21

2ans

Ceci conduit a la proliferation de firmwares non officiels dont lrsquoinnocuite et la stabilitene peuvent pas etre garantis

Dans le cas tres precis de mon telephone LG GW620 livre sous Android 15 LGFrance 17 a promis une mise a jour vers Android 16 pendant plus drsquoun an avant definalement se retracter Des firmwares Android 21 et 22 drsquoexcellente facture ndash maisnon officiels ndash ont donc ete developpes par des amateurs 18 Sous la pression de sesutilisateurs LG a fini par sortir un firmware officiel mais trop tard

Fabricants de logiciels La concurrence fait rage dans le domaine des systemesdrsquoexploitation pour ordiphones

Des lors les editeurs de systemes drsquoexploitation doivent seduire tous les autresacteurs quitte a diminuer les contraintes de securite

ndash Pour seduire les utilisateurs il semble necessaire de disposer du plus grandnombre drsquoapplications dans sa MarketPlaceBien qursquoon puisse questionner cette logique (ne serait-il pas plus interessant dedisposer drsquoapplications utiles fiables et bien realisees ) la guerre des chiffresest neanmoins lancee

ndash Pour seduire les developpeurs drsquoapplications il est necessaire de leur faciliter letravail au maximumLe choix du langage Java et la mise a disposition drsquoun SDK gratuit pour Eclipseva dans ce sens Mais Google va meme plus loin en mettant a disposition un SDK

16 httpwwwunrevokedcomrootwikidokuphppublicunrevoked1_disclosure

17 httptwittercomlg_blog_france

18 httpopenetnacomopenetna

N Ruff 133

visuel pour les gens nrsquoayant aucune notion de developpement 19 On peutse poser des questions sur la securite (et la qualite en general) des applicationsqui en sortirontLa signature drsquoapplications fut egalement pendant longtemps une pierre drsquoachop-pement Lors du lancement du programme Symbian Signed on a pu lireque Symbian voulait tuer les developpeurs independants HeureusementlrsquoAppStore a depuis prouve le contraire et Android nrsquoa eu aucun mal a imposerla signature des sa genese

ndash Seduire les fabricants de materiels est assez simple il suffit de produire unsysteme gratuit et drsquoen assurer une bonne partie du support Ajoutez a celaune forte demande du marche et tout est en place pour garantir le succes

Circuits de distribution Lrsquoessentiel des ordiphones sont commercialises par lesoperateurs de telephonie mobile (Google ayant drsquoailleurs essuye un echec commercialsur la vente en direct du Nexus One)

Comme la plupart des acteurs de la chaine les operateurs cherchent a maximiserleurs revenus parfois au detriment de la securite

ndash Les operateurs personnalisent les systemes drsquoexploitation en y ajoutant desbogues

ndash Les operateurs tentent de rendre payantes des fonctions natives incitant de cefait les utilisateurs au piratage

Parmi les inventions geniales du marketing on peut citer le bridage du tethering(utilisation du telephone comme modem 3G) la geolocalisation payante (alors que letelephone dispose drsquoun GPS integre) lrsquoimpossibilite de regarder la tele ou drsquoecouterde la musique sur un lien WiFi (mais pas sur un lien 3G) etc

Des lors les utilisateurs sont tentes de debrider leur telephone (jailbreaking)drsquoinstaller des applications tierce partie douteuses voire drsquoinstaller des systemes nonofficiels sans garantie drsquoinnocuite

Developpeurs drsquoapplications Lrsquoun des moyens les plus efficaces pour seduire lesdeveloppements est de leur promettre des revenus consequents Pas facile dans unmonde ou la plupart des applications sont gratuites ou dont le prix nrsquoexcede pas 1

Tout drsquoabord le processus drsquoachat drsquoapplications est relativement simple grace aGoogle Checkout lorsque lrsquooperateur ne fournit pas lui-meme le service de facturationau travers de sa MarketPlace Pour les applications financees par la publicite lareputation de Google dans le domaine nrsquoest plus a faire (surtout depuis le rachat dela societe AdMob specialisee dans le domaine de la publicite sur mobiles)

19 httpappinventorgooglelabscomabout

134 Securite du systeme Android

Contrairement a ce qursquoon pourrait croire les deux methodes generent des reve-nus comparables comme le revele lrsquoauteur drsquoune application inutile mais pourtanttelechargee presque 100 000 fois a savoir Advanced Task Manager 20

Les developpeurs attires par des revenus encore plus rapides pourront etre tentespar le cote obscur de la telephonie mobile appels et SMS surtaxes vol (et revente)du carnet drsquoadresses collecte de lrsquohistorique du navigateur etc

Ce phenomene est loin drsquoetre marginal certaines applications etant clairementmalveillantes ndash comme SMSAndroidOSFakePlayera ou les applications editeespar 09Droid qui se font passer pour des applications bancaires officielles ndash drsquoautresetant simplement a la limite du marketing agressif ndash comme celles de lrsquoediteur francaisZeuzz

Plusieurs etudes soulignent la dangerosite des MarketPlaces generalement fi-nancees par les editeurs antivirus ces etudes ne sont toutefois pas drsquoune qualitescientifique suffisante pour etre citees ici Le risque semble neanmoins reel puisqueGoogle a retire en urgence des dizaines drsquoapplications de la MarketPlace dans le cadrede lrsquoaffaire DroidDream (nous y reviendrons)

42 Failles logicielles

Etat des lieux Compte-tenu de lrsquoutilisation massive de code Open Source dans lesysteme Android les failles drsquoimplementation logicielle sont faciles a identifier il suffitde suivre les alertes de securite des principaux projets Lorsqursquoils sont disponibles cequi nrsquoest pas forcement le cas pour le noyau Linux

Les vecteurs principaux (en termes de nombre de lignes de code et drsquoexposition)sont le systeme Linux et le navigateur Web (et particulierement le moteur WebKitcommun avec Safari)

Il ne faut pas oublier non plus qursquoAndroid integre Flash Player et vit avec lesmemes failles 21

Failles navigateur Comme dans tout navigateur Web de complexite importanteles failles sont nombreuses Ces failles nrsquoen restent pas moins dangereuses car ellesont ete demontrees exploitables sur Android 22 23

Lrsquoune drsquoentre elles est meme disponible dans Metasploit 24 Il srsquoagit drsquoune faillerelativement grave qui permet de lire nrsquoimporte quel fichier du telephone accessible

20 httparronlacom201008android-revenue-advanced-task-manager

21 httpwwwtheinquirernetinquirernews2034092android-smartphones-attack-flash-player-hackers

22 httpwwwexploit-dbcomexploits15423

23 httpwwwexploit-dbcomexploits16974

24 httpblogmetasploitcom201101mobile-device-security-and-android-filehtml

N Ruff 135

au processus navigateur - ce qui inclut lrsquointegralite de la carte SD puisque celle-ci estformatee en FAT (donc sans aucun controle drsquoacces)

On notera dans cette attaque lrsquoutilisation de lrsquoURL contentcomandroid

htmlfileproviderltfilenamegt qui permet de lire nrsquoimporte quel fichier du telephoneau travers drsquoun Content Provider 25 ndash une notion specifique a Android qui prometdrsquoetre encore source de nombreuses failles vu la surface drsquoattaque exposee

Par ailleurs outre les schemas traditionnels (file http etc) Androidsupporte par defaut des schemas plus specifiques et donc moins testes

Parmi les schemas supportes on peut citer content (qui permet de com-muniquer avec un Content Provider) market (qui permet drsquointeragir avec laMarketPlace comme par exemple marketdetailsid=ltpackagegt) ou android

resource (qui permet drsquoacceder a une ressource dans un paquet comme parexemple androidresourceltpaquetgtltressourcegt)

Failles systeme Les failles systeme ne sont pas legion mais ont toutes un impactcritique sur la securite du systeme

Parmi les failles les plus connues (car les plus exploitees dans la nature ) onpeut citer les failles publiees sur le site xSports 26 a savoir

ndash Exploid faille udev bien connue des administrateurs Linux CVE-2009-1185

ndash Rage Against The Cage faille liee au mauvais comportement du processusadb lorsque RLIMIT NPROC a ete atteint 27 - lrsquoappel a setuid() echoue mais leprocessus nrsquoen tient pas compte et continue son execution son lrsquoidentite root

ndash Killing In The Name Of faille permettant de modifier la valeur de la constanteglobale (normalement en lecture seule) rosecure en jouant sur une erreurdrsquoimplementation de devashmem Cette constante definie a la compilationdu systeme indique au processus adb srsquoil doit srsquoexecuter sous lrsquoidentite root 28

Les applications legitimes (comme VISIONary+ 29) ou malveillantes (la pluscelebre ayant probablement ete DroidDream [20] ) ne se privent pas drsquoexploiter cesfailles dans la nature

Il faut toutefois noter qursquoil existe une difference subtile entre obtenir un accesroot et obtenir un acces root persistant au redemarrage du telephone En effetbien qursquoil soit virtuellement possible drsquoecrire dans le repertoire system (au traversde la commande adb remount ou drsquoun remount rw a lrsquointerieur du terminal) un

25 httpdeveloperandroidcomguidetopicsproviderscontent-providershtml

26 httpstealthopenwallnetxSports

27 httpdtorsorg20100825reversing-latest-exploid-release

28 httpsourceandroidcomportingbuild_systemhtml

29 httpandroidmodacocomcontentsoftware32035019-nov-r14-visionary-one-click-root

136 Securite du systeme Android

certain nombre de telephones modernes disposent drsquoune protection contre le reflashageintempestif de la partition systeme Cette protection est souvent liee a lrsquoutilisationdrsquoun composant memoire capable de verifier une signature cryptographique (parexemple un composant eMMC 30)

Dans le jargon on dit que la possibilite de reflasher la partition systeme avecun firmware non signe necessite un telephone en mode S-OFF Sur de nombreuxtelephones de marque HTC 31 le mode courant (S-ON ou S-OFF) peut etre obtenuen appuyant sur la touche Volume Down au demarrage du telephone

Failles logiques Il existe une categorie de failles difficiles a detecter et pourtantdevastatrices les failles logiques

Lrsquoun des exemples les plus fameux est le deblocage du telephone en utilisant soncompte Google Dans certains cas de corruption de donnees ce processus peut echouercomme documente officiellement par Google 32

Dans ce cas le telephone doit normalement etre reinitialise en configuration drsquousine(lorsque crsquoest possible ndash la procedure exacte depend du constructeur) Heureusementil srsquoavere que le mot de passe null est toujours accepte comme valide

Un autre bogue celebre affecte le Motorola Droid et potentiellement drsquoautresLorsque le telephone est verrouille mais qursquoun appel entrant arrive il est possibledrsquoappuyer sur le bouton Back et ainsi drsquoarriver a lrsquoecran drsquoaccueil du telephone 33

Enfin une superbe faille logique a ete decouverte sur le site httpsmarket

androidcom qui permet drsquoinstaller a distance des applications sur un telephoneAndroid Grace a une faille de type XSS persistant sur ce site 34 il etait possible defaire installer une application puis de lrsquoexecuter automatiquement sur le telephonede nrsquoimporte quel utilisateur Un utilisateur pouvait etre victime de cette attaque encliquant sur un lien depuis son telephone ou son PC (sous reserve drsquoetre logue sousson compte Google)

La technique utilisee pour executer automatiquement lrsquoapplication apres soninstallation merite drsquoetre soulignee elle consiste a declarer dans le manifeste delrsquoapplication que celle-ci supporte un nouveau schema drsquoURI (par exemple trigger

) puis a invoquer un lien trigger depuis la page Web drsquoorigine

Que peut-on faire Compte-tenu de la quantite de code C embarque dans lesysteme Android il existe et il existera des bogues drsquoimplementation dans ce systeme

30 httpenwikipediaorgwikiMultiMediaCardeMMC

31 Un site de reference pour les telephones de marque HTC httpunrevokedcom32 httpcodegooglecompandroidissuesdetailid=3006

33 httptechcrunchcom20100111verizon-droid-security-bug

34 httpjonoberheideorgblog20110307how-i-almost-won-pwn2own-via-xss

N Ruff 137

conduisant pour certains a des failles de securite WebKit et le systeme Linux sontdes cibles de choix compte-tenu de la surface drsquoattaque exposee

Toutefois et contrairement a un systeme classique la mise a jour a grandeechelle srsquoavere extremement problematique pour plusieurs raisons

ndash Le facteur drsquoechelle (plusieurs millions drsquounites en circulation rien qursquoen France)ndash La diversite et le haut degre de personnalisation des plateformes materielles et

logiciellesndash La propriete du terminal (lorsqursquoil a ete achete par lrsquoutilisateur)ndash Les risques commerciaux en cas de blocage definitif du terminal (brick)On peut raisonnablement considerer qursquoen dehors du geek moyen aucun utilisateur

de smartphone sous Android nrsquoa jamais mis a jour son systemeLes statistiques officielles de Google sur la repartition des ordiphones par version

drsquoAndroid permettent de se faire une idee objective sur la vitesse de renouvellementdu parc 35 A lrsquoheure ou jrsquoecris ces lignes malgre la disponibilite du systeme Android23 la majorite du parc se compose encore de systemes Android 21 et 22 ndash sanscompter sur les irreductibles 6 qui disposent drsquoune version anterieure Je laisseaux statisticiens le soin de produire une etude plus detaillee qui sera neanmoinsbiaisee par le fait que les donnees mondiales sont agregees tandis que les politiquesde renouvellement des operateurs sont tres variables drsquoun pays a lrsquoautre

Dans ces conditions il est loin le moment ou un operateur mobile fera du NAC-NAP sur son reseau pour interdire la connexion de ordiphones qui ne sont pas a jourdes correctifs

Techniquement le protocole FOTA (Firmware Over-The-Air) permet toutefoisde mettre a jour a distance des terminaux Ce protocole a deja ete utilise a grandeechelle lorsqursquoune backdoor (exploitable a distance) a ete decouverte sur certainstelephones HTC de modele Hero et Evo

5 Audit drsquoapplications Android

51 Auditer pourquoi

Lrsquoaudit securite drsquoapplications tierces est une activite vieille comme le conseil ensecurite Toutefois le circuit de distribution logicielle etant assez different entre lemonde du logiciel drsquoentreprise et les MarketPlaces pour mobiles il est vrai que laquestion merite drsquoetre posee a nouveau

A lrsquoheure ou jrsquoecris ces lignes Google nrsquoeffectue aucune verification de securite surles applications publiees dans lrsquoAndroid Market Cet etat de fait pourrait changer

35 httpdeveloperandroidcomresourcesdashboardplatform-versionshtml

138 Securite du systeme Android

compte-tenu de la proliferation drsquoapplications malveillantes de plus en plus agressiveset sophistiquees

Parmi tous les risques lies aux terminaux mobiles (vol de lrsquoequipement intrusionvia une faille du navigateur etc) on constate dans les faits que le risque principalaujourdrsquohui est la proliferation drsquoapplications malveillantes La malveillance estune notion assez floue et certaines applications peuvent se situer dans une zone grise - comme lrsquoapplication de voix sur IP Viber 36 qui duplique tous les contactsde lrsquoutilisateur sur un serveur central faisant office drsquoannuaire telephonique Maisdrsquoautres applications font lrsquounanimite contre elles comme les applications utilisant desfailles systeme pour elever leurs privileges vers root etou envoyer des SMS surtaxessans le consentement de lrsquoutilisateur Ces applications sont drsquoailleurs tuees parGoogle une fois identifiees car elles violent clairement les regles drsquoutilisation delrsquoAndroid Market

Les circuits qui conduisent a lrsquoapparition drsquoune application malveillante sontmultiples

ndash Malveillance deliberee de lrsquoauteur qui veut gagner de lrsquoargent rapidement Crsquoestle cas le plus simple Un scenario courant consiste a cloner une applicationen vogue tout en y ajoutant du code malveillant

ndash Compromission drsquoun editeur drsquoapplications a son insu Crsquoest la ligne de defenseadoptee par plusieurs editeurs drsquoapplications apres avoir ete pointe du doigtCette defense est malheureusement credible car la plupart des developpeurs sontdes individus isoles ou des micro-entreprises attirees par les success stories a laAngry Birds et bien souvent sans aucune securite dans les developpements

ndash Integration de librairies tierce partie malveillantes dans un programme sainLrsquoauteur drsquoune application populaire (a savoir Tank Hero ) a ainsi an-nonce avoir ete contacte par un fournisseur drsquoapplications probablementmalveillantes qui lui proposait un accord commercial 37

Mais lrsquoidentification des applications malveillantes nrsquoest pas la seule raison quipeut conduire a auditer une application Android Parmi drsquoautres raisons legitimes on peut citer

ndash Verifier que lrsquoapplication fait bien ce qursquoelle pretend faire Ce point est parti-culierement critique pour les applications de securite qui mettent en œuvre duchiffrement ou de la gestion de mots de passe par exemple Dans le domaineles surprises sont nombreuses drsquoautant que les applications mobiles nrsquoont pasencore la maturite des applications bureautiques et que les contraintes

36 httpwwwvibercom

37 httpwwwredditcomrAndroidcommentsfm3cuspyware_company_wants_us_to_embed_

their_code_into

N Ruff 139

du monde embarque se font sentir (puissance de calcul sources drsquoentropieremanence de lrsquoallocateur memoire Java etc)

ndash Recherche des failles de securite Et oui les applications Android sont aussivulnerables aux buffer overflows lorsqursquoelles utilisent du code natif (compileavec le NDK) et meme des injections SQL (meme si SQLite nrsquoimplemente pasdrsquoequivalent a xp cmdshell) Il existe par ailleurs des attaques specifiques aumonde Android comme les BroadcastReceiver qui ne verifieraient pas la sourcedes messages recus

Le probleme principal avec lrsquoaudit drsquoapplications Android nrsquoest pas techniqueLe probleme crsquoest lrsquoeuphorie du marche proliferation drsquoapplications et mises a jourfrequentes qui obligent a automatiser et industrialiser les audits 38

52 Auditer comment

Lrsquoaudit securite est une tache difficile a modeliser car elle tire parti de la creativitede lrsquoauditeur On peut toutefois identifier les grandes lignes suivantes

1 Recuperer lrsquoapplication

2 Decompresser les ressources

3 Desassembler le bytecode

4 Decompiler le bytecode (lorsque crsquoest possible)

5 Desassembler le code natif

6 Deboguer lrsquoapplication en cours drsquoexecution (sur un telephone reel ou danslrsquoemulateur)

Cette methodologie nrsquoest pas exhaustive elle ne donne pas acces au contenutelecharge ulterieurement (par exemple au travers des publicites integrees) Voyonsles methodes et les difficultes associees a chaque etape

Recuperer lrsquoapplication Cette etape nrsquoest pas trop compliquee pour qui est preta installer lrsquoapplication cible sur son telephone Apres installation le fichier APK estconserve dans le repertoire dataapp Selon les permissions appliquees au systeme defichiers il nrsquoest pas necessairement possible de lister le contenu de ce repertoire maisles paquets restent lisibles par lrsquooutil adb et le nom de paquet peut etre determinedepuis la MarketPlace ou le menu parametres du telephone (le nom exact estpaquet-Napk ou N vaut generalement 1)

38 httpwwwappanalysisorg

140 Securite du systeme Android

Toute autre methode est complexe et probablement illegale Parmi les methodespossibles on peut citer lrsquoinstallation de lrsquoapplication MarketPlace dans un emulateurou le reverse engineering de lrsquoapplication MarketPlace a des fins de reimplementation(cette derniere etant toutefois volumineuse donc complexe a analyser)

Depuis la version 22 du systeme Android et si lrsquoapplication lrsquoautorise il estpossible drsquoinstaller une application sur la carte SD Mais lrsquoapplication est alorsstockee dans un fichier asec chiffre Ce fichier est inexploitable jusqursquoa ce quele mecanisme et la cle de chiffrement soient connus

On peut imaginer qursquoune application extremement malveillante pourrait exploiterune faille des lrsquoinstallation pour elever ses privileges vers root et dissimuler ses traces(ie se rendre inaccessible de lrsquoexterieur) Ce cas ne srsquoest pas encore produit dansla nature a lrsquoheure ou jrsquoecris ces lignes mais srsquoavere techniquement faisable

Il faut noter que la MarketPlace de Google nrsquoest pas la seule disponible maisqursquoil existe egalement des MarketPlaces drsquooperateurs ou de tiers ainsi Amazoncommercialise desormais des applications Android 39 Cette proliferation complexifiedrsquoautant la tache drsquoanalyse des MarketPlaces La methode la plus universelle pourrecuperer la source drsquoinstallation drsquoune application reste donc de lrsquoinstaller sur untelephone

Un utilisateur peut installer des applications depuis des sources externes a laMarketPlace si lrsquooption autoriser les sources inconnues est cochee dans lesparametres de configuration Il existe des applications legitimes accessibles en dehorsdes MarketPlaces mais il existe egalement des bases drsquoapplications piratees surInternet dont lrsquoinnocuite ne peut pas etre garantie

Notons que certaines applications meme parmi celles disponibles sur les Market-Places officielles exigent au prealable un acces root au telephone

Decompresser les ressources Les fichiers places a lrsquointerieur drsquoun paquet APKsont optimises drsquoune maniere ou drsquoune autre avant drsquoetre compresses Ceci srsquoappliqueaussi bien au bytecode qursquoaux ressources textuelles (comme les fichiers XML)

Lrsquoune des optimisations principales est la deduplication de donnees Ainsi ilnrsquoexiste qursquoune seule instance de chaque chaine de caracteres dans un fichier DEXDifferents encodages optimises sont egalement utilises tel que LEB128 pourla representation des entiers (Little Endian Base 128 aussi utilise dans le formatDWARF)

Toutes ces optimisations nrsquoont pas pour but la protection logicielle et sont parfai-tement reversibles Lrsquooutil aapt fourni avec le SDK officiel permet ainsi drsquoexplorerle contenu du manifeste drsquoun paquet APK Les techniques drsquooptimisation ont ete

39 httpwwwamazoncomappstore

N Ruff 141

analysees et documentees par des tiers ce qui a permis la production drsquooutils dedecompression comme apktool 40

Desassembler le bytecode Avec le SDK officiel est fourni lrsquooutil dexdump quipermet de lister le bytecode contenu dans un fichier CLASSESDEX

Le format de fichier DEX a ete lui aussi analyse et documente 41 ce qui a permisla production de desassembleurs tiers comme baksmali

Le code genere suit la syntaxe Jasmin 42 bien connue dans le monde Java tra-ditionnel Cette syntaxe peut sembler obscure de prime abord mais elle est par-faitement reguliere donc finalement tres simple a apprehender Prenons un exempleissu drsquoune application reelle voici ci-dessous le code drsquoune methode appeleeemptyResult telle que produit par baksmali

method protected static emptyResult(LjavalangString )Z

locals 1

parameter result

prologue

line 306

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Toutes les directives commencent par un point Leur nom est relativement explicitelocals 1 va par exemple indiquer la presence drsquoune seule variable locale Le nomassigne aux opcodes de la machine virtuelle est egalement assez parlant

pN represente lrsquoargument numero N passe a la methode vN represente le re-gistre numero N (Dalvik est une machine virtuelle a registres et non a pile)

Munis de ces informations decortiquons la seule operation reellement complexeeffectuee dans cet extrait de code

40 httpcodegooglecompandroid-apktool

41 httpwwwnetmitecomandroidmydroiddalvikdocsdex-formathtml

42 httpjasminsourceforgenet

142 Securite du systeme Android

invoke-static Invoque une methode sta-tique Il existe egalementun opcode invoke-virtual

pour les methodes virtuellesinvoke-super pour la methodede la superclasse etc

p0 La methode appelee prend unseul argument La valeur de cetargument provient du premierargument passe a la methodeemptyResult

LcomutilsStringUtils-gtisEmpty Invoque la methode isEmpty de laclasse comutilsStringUtils L est un prefixe accole a tousles litteraux

(LjavalangString) Le premier (et seul) argument estde type javalangString

Z La methode retourne un booleen

A titre de reference voici les differents types natifs disponibles dans Jasmin

Z BooleenB OctetC CaractereS Entier court (16 bits)I Entier (32 bits)J Entier long (64 bits)F Flottant (32 bits)D Double (64 bits)

Lrsquoavantage majeur de lrsquooutil tiers apktool est la possibilite de modifier le bytecodeou les ressources drsquoune application puis de la recompiler dans une version fonctionnelleCeci permet drsquoutiliser une technique drsquoanalyse aussi ancienne que lrsquoinformatiqueappelee printf debugging

Dans le monde Android lrsquoutilisation de Systemout doit etre remplacee parandroidutilLog Cette classe definit plusieurs methodes ndash respectivement v d iw e et wtf ndash qui correspondent chacune a un niveau de verbosite ndash et dont lesarguments sont enregistres dans le journal systeme (sauf le niveau debug) Cejournal peut etre consulte a lrsquoaide de la commande adb logcat apparait en temps

N Ruff 143

reel dans lrsquooutil DDMS et peut egalement etre consulte par toute application quidispose de la permission READ LOGS

Si lrsquoon souhaite connaitre lrsquoargument passe a la methode emptyResult danslrsquoexemple precedent il suffit alors drsquoajouter un appel a nrsquoimporte quelle methode dela classe Log de la maniere suivante

method protected static emptyResult(LjavalangString )Z

locals 2

parameter result

prologue

line 306

const -string v1 PrintfDebuggingStyle

invoke -static v1 p0 LandroidutilLog-gtd(LjavalangStringLjavalang

String )I

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Une variable locale v1 a ete ajoutee contenant une chaine de caracteres fixe Lamethode d() est ensuite invoquee Cette modification est equivalente au code Javasuivant

Logd(PrintfDebuggingStyle ltp0 gt)

On peut constater experimentalement que de nombreuses applications de laMarketPlace font usage de lrsquoAPI Log ce qui permet de collecter des donnees defonctionnement parfois tres (trop) interessantes

Le journal systeme peut etre collecte a distance par un developpeur lors ducrash de son application si lrsquoutilisateur lrsquoautorise Cette technique a ete presenteepar Renaud Lifchitz lors de la conference 27c3 pour espionner les deplacements drsquounutilisateur 43

Decompiler le bytecode Comme avec tout bytecode de haut niveau (ex JavaNET) la semantique de lrsquoapplication est conservee

Il est donc possible de decompiler du bytecode Dalvik et de reconstruire le codeJava drsquoorigine (sans les commentaires ndash seule information perdue a la compilation) Lepremier outil public capable drsquoune telle operation fut undx 44 de Marc Schoenefeld Cetoutil est toutefois bogue et non maintenu par son auteur Le meilleur outil disponibleactuellement est lrsquooutil dex2jar 45 qui reconstruit du bytecode Java a partir du

43 httpeventscccdecongress2010Fahrplanevents4151enhtml

44 httpwwwillegalaccessorgundxhtml

45 httpcodegooglecompdex2jar

144 Securite du systeme Android

bytecode Dalvik Les outils classiques de decompilation Java 46 47 srsquoappliquentalors

Compte-tenu de la facilite deconcertante avec laquelle il est possible drsquoanalyserles applications Android (et donc de les craquer entre autres) Google a mis adisposition des developpeurs une bibliotheque tres complete de gestion des licences enligne Licensing Verification Library (LVL) 48 Toutes les versions de cette bibliothequeont malheureusement ete craquees elles aussi a lrsquoheure ou jrsquoecris ces lignes

Une autre contre-mesure mise en place par Google consiste a integrer un obfusca-teur de bytecode dans la chaine de compilation ProGuard 49 Cet outil relativementpuissant est configurable par le developpeur au travers du fichier proguardcfg toutefois le fichier de configuration par defaut (reproduit ci-apres) nrsquoopere que lerenommage des classes et methodes invisibles a lrsquoexterieur de lrsquoapplication ce qui estpeu efficace face a un attaquant determine

-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontpreverify

-verbose

-optimizations codesimplificationarithmetic field classmerging

-keep public class extends androidappActivity

-keep public class extends androidappApplication

-keep public class extends androidappService

-keep public class extends androidcontentBroadcastReceiver

-keep public class extends androidcontentContentProvider

-keep public class extends androidappbackupBackupAgentHelper

-keep public class extends androidpreferencePreference

-keep public class comandroidvendinglicensingILicensingService

-keepclasseswithmembernames class

native ltmethods gt

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet)

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet int)

-keepclassmembers enum

public static [] values ()

public static valueOf(javalangString)

46 httpmembersfortunecitycomneshkovdjhtml

47 httpjavadecompilerfreefr

48 httpdeveloperandroidcomguidepublishinglicensinghtml

49 httpdeveloperandroidcomguidedevelopingtoolsproguardhtml

N Ruff 145

-keep class implements androidosParcelable

public static final androidosParcelable$Creator

Au vu des resultats obtenus on peut considerer que lrsquoobfuscation de bytecode Javadans le monde Android est en retard sur lrsquoobfuscation de code x86 dans le monde PCLes techniques de complexification du flot de controle ou de construction dynamiquedes constantes ne sont pas encore repandues dans les applications commerciales pourAndroid Afin de combler ce manque des projets paralleles (comme AndroGuard 50)fleurissent - mais on peut supposer que la solution integree au SDK fourni par Googlerestera la solution majoritairement utilisee par les applications (pour des raisons desimplicite evidentes)

Desassembler du code natif Lors de lrsquoaudit drsquoune application Android il estpossible de rencontrer du code natif dans deux cas

1 Lrsquoapplication contient des bibliotheques natives compilees avec le NDK

2 Lrsquoapplication contient des applications natives ou srsquoavere etre elle-meme uneapplication native Ce cas est courant avec les applications malveillantes quiembarquent du code natif pour exploiter des failles noyau 51

Dans les deux cas Android ne presente aucune specificite par rapport a unLinuxARM classique Les fichiers natifs sont au format ELF La chaine de compilationnative est construite autour du compilateur GCC Tous les outils sont disponiblesdepuis longtemps pour analyser des tels binaires (ex IDA Pro Hex-Rays DecompilerARM etc)

Deboguer lrsquoapplication Une application Java compilee en mode debug peutetre deboguee a distance au travers du protocole standard Java Debug Wire Protocol(JDWP) defini dans le cadre de Java Platform Debugger Architecture (JPDA)

Les environnements de developpement Java classiques (comme Eclipse) per-mettent ainsi de deboguer une application a distance une fois celle-ci installee sur letelephone

Il est egalement possible drsquoutiliser le venerable JDB (fourni avec le SDK Java 52)bien que cet outil nrsquoait jamais depasse le statut de preuve de concept a mon avis

Lrsquooutil DDMS fourni avec le SDK Android repose egalement sur JPDA Cetoutil ne permet toutefois pas le debogage drsquoapplications mais seulement lrsquoanalyse deperformance

50 httpcodegooglecompandroguard

51 httpstealthopenwallnetxSports

52 httpdownloadoraclecomjavase142docstooldocssolarisjdbhtml

146 Securite du systeme Android

La liste des applications pouvant etre deboguees sur un systeme Android srsquoobtientavec la commande adb jdwp

Le vrai probleme se pose pour les applications qui nrsquoont pas ete compilees enmode debug Ceci implique que le manifeste de lrsquoapplication ne contient pasdrsquoentree ltapplication androiddebuggable=truegt De plus la plupart des outilsde debogage Java necessitent que le bytecode contienne des indications sur les numerosde lignes dans le code source drsquoorigine (il srsquoagit drsquoune limitation arbitraire qui nesrsquoapplique pas a lrsquooutil JavaSnoop 53 par exemple)

Fort heureusement il est possible de desassembler ces applications puis de lesreassembler en mode debug avec lrsquooutil apktool 54 Le processus est complexe etle resultat peu convivial mais il a le merite drsquoexister

Pour reinstaller lrsquoapplication modifiee sur un equipement reel il est necessairede la signer a nouveau La procedure est simple et parfaitement documentee parGoogle

Il faut drsquoabord generer une cle personnelle autosignee a duree de vie extremementlongue

$ keytool -genkey -v -keystore mykeykeystore -alias nom_alias -keyalg RSA -

keysize 2048 -validity 10000

Il faut ensuite signer le nouvel APK avec les outils du SDK Java

$ jarsigner -verbose -keystore mykeykeystore nom_applicationapk nom_alias

Enfin il est recommande drsquoaligner le code sur un multiple de 4 octets pour desraisons de performance

$ zipalign -v 4 nom_applicationapk nom_application_finalapk

Instrumentation Il est possible drsquoinstrumenter une application Java a lrsquoaide declasses specifiques a Android (androidappInstrumentation 55) Cette methodefournit des resultats detailles et personnalisables sur le fonctionnement interne drsquouneapplication elle necessite toutefois une decompilation et une modification prealablede lrsquoapplication a auditer

A lrsquoheure ou jrsquoecris ces lignes il nrsquoexiste pas (a ma connaissance) drsquooutil permettantde generaliser et drsquoautomatiser le processus a tout fichier APK Cette voie de recherchepourrait toutefois donner des resultats interessants

53 httpwwwaspectsecuritycomtoolsjavasnoop

54 httpcodegooglecompandroid-apktoolwikiSmaliDebugging

55 httpdeveloperandroidcomreferenceandroidappInstrumentationhtml

N Ruff 147

Outils specifiques Les outils disponibles actuellement dans le monde Android sontrudimentaires quoi que suffisants

Toutefois on peut raisonnablement estimer que la quantite et la qualite des outilsdisponibles va croitre de concert avec la popularite du systeme Android

A lrsquoheure ou jrsquoecris ces lignes la version 61 du logiciel IDA Pro 56 vient de sortirCette version ajoute le support du format DEX et du bytecode Dalvik ainsi que ledebogage a distance des applications Android natives

On peut supposer que drsquoautres outils couramment utilises par les auditeurs ensecurite vont etre mis a jour pour srsquoadapter au monde Android

6 Conclusion

Le systeme Android nrsquoa malheureusement pas profite de lrsquoopportunite unique quilui etait donnee repartir de la feuille blanche et creer un systeme drsquoexploitation sur par conception

A cause drsquoun heritage logiciel peu fiable ainsi que des contraintes materielles etcommerciales issues du monde de la telephonie mobile le systeme resultant est uncompromis qui laisse une large place a la creativite des attaquants

Celle-ci est drsquoautant plus exacerbee que la telephonie mobile est un phenomene demasse (il y a plus de telephones mobiles que drsquoordinateurs dans le monde) et que letelephone mobile est par conception un systeme de paiement (ce que nrsquoest pas un PCtraditionnel)

A ce tableau vient srsquoajouter 30 ans drsquoexperience dans le domaine des attaqueslogicielles appliquees a un ecosysteme applicatif qui nrsquoexistait pas il y a 5 ans

Toutes les conditions sont donc reunies pour que des attaques de grande ampleurmotivees par lrsquoargent se produisent contre les materiels grand public equipes dusysteme Android (telephones tablettes televisions )

La bonne nouvelle pour lrsquoexpert en securite crsquoest qursquoil est encore temps de srsquoymettre Android est suffisamment jeune et accessible aux nouveaux entrants ce quinrsquoest plus le cas de la plateforme PC ou les techniques drsquoattaque (ex exploitationdrsquoun heap overflow) et de defense (ex obfuscation logicielle) ont atteint des sommetsde raffinement desormais accessibles aux seuls experts les plus pointus du domaine

7 Sites et outils

71 Sites officiels

ndash Android portail officiel httpwwwandroidcom

56 httpwwwhex-rayscomidapro

148 Securite du systeme Android

ndash Android MarketPlace officielle httpsmarketandroidcomndash Android reference des developpeurs httpdeveloperandroidcom

72 Sites non officiels

ndash Reference de la machine virtuelle Dalvik httpdalvikvmcom

73 Outils tiers

ndash Google Android Debugging Utilities httpsitesgooglecomsiteortegaalfredoandroid

ndash Undx httpwwwillegalaccessorgundxhtmlndash SmaliBaksmali httpcodegooglecompsmalindash Dedexer httpdedexersourceforgenetndash Dex2Jar httpcodegooglecompdex2jarndash TaintDroid httpwwwappanalysisorg

ndash AndroGuard httpandroguardblogspotcom

References

1 Benjamin Morin Modele de securite drsquoAndroid MISC 51 2010

2 K Chen Reversing and exploiting an apple firmware update httpwwwblackhatcom

presentationsbh-usa-09CHENBHUSA09-Chen-RevAppleFirm-PAPERpdf BlackHat 2009

3 Alexandre Gazet Sticky fingers amp KBC Custom Shop httpwwwssticorg2011presentation

sticky_fingers_and_kbc_custom_shop SSTIC 2011

4 Loıc Duflot and Yves-Alexis Perez Quelques elements en matiere de securite des cartes reseau http

wwwssticorg2010presentationPeut_on_faire_confiance_aux_cartes_reseau SSTIC 2010

5 Alexander Tereshkin and Rafal Wojtczuk Introducing Ring -3 Rootkits httpwwwblackhat

compresentationsbh-usa-09TERESHKINBHUSA09-Tereshkin-Ring3Rootkit-SLIDESpdf Black-Hat USA 2009

6 Loıc Duflot Yves-Alexis Perez and Benjamin Morin Run-time firmware integrity verification what ifyou canrsquot trust your network card CanSecWest 2011

7 Ralf-Philipp Weinmann All Your Baseband Are Belong To Us httpeventscccdecongress

2010Fahrplanevents4090enhtml CCC 2010

8 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Formal Model to Analyzethe Permission Authorization and Enforcement in the Android Framework SecureComrsquo10

9 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Small but Non-negligibleFlaw in the Android Permission Scheme Wook Shin Sanghoon Kwak Shinsaku Kiyomoto KazuhideFukushima et Toshiaki Tanaka IEEE POLICY 2010

10 Marc Schonefled Reconstructing Dalvik Applications httpcansecwestcomcsw09

csw09-schoenefeldpdf CanSecWest 2009

N Ruff 149

11 Sergio Alvarez The Smart-Phones Nightmare (iPhone-oriented parts about Android) http

cansecwestcomcsw09csw09-alvarezpdf CanSecWest 2009

12 Nicolas Economou Alfredo Ortega Smartphone (in)security httpcansecwestcomcsw09

csw09-ortega-economoupdf CanSecWest 2009

13 Jesse Burns Exploratory Android Surgery httpwwwblackhatcompresentationsbh-usa-09

BURNSBHUSA09-Burns-AndroidSurgery-SLIDESpdf BlackHat USA 2009

14 Kevin Mahaffey John Hering App Attack httpsmediablackhatcombh-us-10presentations

Mahaffey_HeringBlackhat-USA-2010-Mahaffey-Hering-Lookout-App-Genome-slidespdf Black-Hat USA 2010

15 Nils The Risk you carry in your Pocket httpsmediablackhatcombh-ad-10Nils

Black-Hat-AD-2010-android-sandcastle-slidespdf BlackHat Abu Dhabi 2010

16 Raphael Rigo Android Reverse Engineering and Forensics httpsdeepsecnetdocsspeaker

htmlPSLOT45 DeepSec 2010

17 Itzhak Avraham Popping Shell on A(ndroid)RM Devices httpsmediablackhatcombh-dc-11

AvrahamBlackHat_DC_2011_Avraham-Popping_Android_Devices-Slidespdf BlackHat DC 2011

18 Jon Oberheide httpjonoberheideorgblog20100625remote-kill-and-install-on-google-android

19 Jon Oberheide httpjonoberheideorgblog20100628a-peek-inside-the-gtalkservice-connection

20 httpwwwandroidpolicecom20110301the-mother-of-all-android-

malware-has-arrived-stolen-apps-released-to-the-market-that-root-

your-phone-steal-your-data-and-open-backdoor

  • Seacutecuriteacute du systegraveme Android
  • N Ruff

N Ruff 129

usage pm [list|path|install|uninstall]

pm list packages [-f]

pm list permission -groups

pm list permissions [-g] [-f] [-d] [-u] [GROUP]

pm list instrumentation [-f] [TARGET -PACKAGE]

pm list features

pm path PACKAGE

pm install [-l] [-r] [-t] [-i INSTALLER_PACKAGE_NAME] [-s] [-f] PATH

pm uninstall [-k] PACKAGE

pm enable PACKAGE_OR_COMPONENT

pm disable PACKAGE_OR_COMPONENT

pm setInstallLocation [0 auto] [1 internal] [2 external]

()

A titre drsquoexemple voici les permissions definies par HTC sur lrsquoune de mes plate-formes de test

$ adb shell pm list permissions | grep htc

permissioncomhtcandroidmailpermissionREAD_MAIL

permissioncomhtcManifestpermissionBROADCAST_KEYIN_EVENT

permissioncomhtcManifestpermissionBROADCAST_MOTION_EVENT

permissioncomhtcManifestpermissionBLOCK_KEYBOARD_EVENT

permissioncomhtcandroidmailpermissionWRITE_ACCOUNT

permissioncomhtcandroidmailpermissionREAD_ACCOUNT

permissioncomhtchtctwitterpermissionuseprovider

permissioncomhtcManifestpermissionBROADCAST_TRACKBALL_EVENT

permissioncomhtcinternalpermissionHTC_APP_PMEM

permissioncomhtcandroidmailpermissionWRITE_MAIL

On notera egalement que cette plateforme contient des permissions a priorispecifiques a lrsquooperateur (americain) Sprint - alors qursquoil srsquoagit drsquoun telephone acheteen France sans abonnement

$ adb shell pm list permissions | grep sprint

permissioncomsprintinternalpermissionSLOT0

permissioncomsprintinternalpermissionPLATFORM

permissioncomsprintinternalpermissionSYSTEMPROPERTIES_WRITE

permissioncomsprintinternalpermissionSYSTEMPROPERTIES

permissioncomsprintinternalpermissionCONNECTIONMANAGER

permissioncomsprintinternalpermissionOMADM

permissioncomsprintandroidpermissionDISABLE_HDMI

Lrsquoutilisateur est libre drsquoaccepter ou de refuser lrsquoapplication mais il ne peut pasmodifier la liste des permissions demandees (sauf a modifier lrsquoapplication et a lare-signer avec sa propre cle comme nous le verrons plus tard)

On peut raisonnablement estimer que la plupart des utilisateurs ne sont pas enmesure drsquoeffectuer un choix eclaire a ce stade

130 Securite du systeme Android

Securite theorique Lrsquoune des questions qursquoon peut se poser sur le systeme depermissions tel qursquoil a ete defini est lrsquoexistence (ou non) drsquoun modele theorique sous-jacent coherent [98] Est-ce que chaque permission correspond bien a un ensemble detaches uniques et strictement delimitees Crsquoest la meme question qui se pose avec lemodele des capabilities sous Linux et dans ce deuxieme cas la reponse est non CAP SYS MODULE permet par exemple de charger des modules noyau arbitraires etdonc de compromettre entierement lrsquointegrite du noyau

Dans le cas drsquoAndroid on peut suspecter que la permission SYSTEMPROPERTIES WRITE

definie par lrsquooperateur Sprint (vue precedemment) a probablement une intersectionnon nulle avec la permission WRITE SETTINGS definie par Google tout en etantprobablement inconnue des outils drsquoanalyse automatique drsquoinnocuite

Lrsquointeret pratique drsquoune etude mathematique sur les permissions Android esttoutefois limite En effet les deux risques majeurs rencontres dans la nature sont

ndash Des applications malveillantes qui demandent des permissions excessivementlarges et abusent de la confiance des utilisateurs

ndash Des applications malveillantes sans aucune permission qui exploitent des faillessysteme pour obtenir lrsquoacces au compte root et contourner entierement lemodele de securite

Ces risques sont partages avec tous les autres modeles de securite en usage danslrsquoindustrie (SELinux sous Linux UAC sous Windows etc)

ndash Ces modeles se heurtent a lrsquoergonomie des interfaces et a la prise de decisioneclairee par les utilisateurs finaux

ndash Lrsquoimplementation de ces modeles exige un effort de conception important tandisque les attaquants les contournent entierement en violant les hypotheses deconception (en particulier lrsquohypothese que le noyau du systeme drsquoexploitationest exempt de bogues)

Autres limites du modele Presque toutes les applications existantes exigent unacces illimite au reseau tres souvent pour recuperer du contenu publicitaire Enpratique cela signifie que le risque pose par une application ne se limite pas a unensemble de permissions statiques par exemple un contenu malveillant pourra etreenvoye a tout moment au moteur de rendu WebKit a travers le canal publicitaire etprovoquer ainsi la prise de controle drsquoun telephone donne au travers une applicationa priori saine

Les permissions demandees peuvent changer a lrsquooccasion drsquoune mise a jour Orla plupart des utilisateurs font confiance aux applications qursquoils ont deja installeesDepuis la version 22 drsquoAndroid lrsquoutilisateur peut autoriser les applications a semettre a jour automatiquement Fort heureusement la mise a jour automatique est

N Ruff 131

bloquee si les permissions demandees par lrsquoapplication changent De mon point devue le mecanisme de mise a jour automatique peut donc etre considere comme plutotbenefique pour lrsquoecosysteme

Enfin le code natif attache a une application (dans le cas drsquoutilisation du NDK)est essentiellement non verifiable contrairement au bytecode Dalvik Le modelede securite Unix vient donc srsquoajouter au modele de permissions Android

4 Panorama des risques

Jrsquoidentifie trois risques de securite majeurs applicables aux ordiphones mo-dernes

1 La structuration du marche de la telephonie

2 Les failles logicielles

3 Les applications tierce partie

Nous allons passer en revue ces trois risques Le troisieme risque est plus specifique alrsquoecosysteme Android dans lequel le role de chaque acteur est bien separe fournisseurde materiel fournisseur de logiciel fournisseur de service

Il se verifie moins dans des ecosystemes comme celui de lrsquoiPhone et du BlackBerrydans lesquels les fournisseurs du materiel et du logiciel sont les memes

41 Marche de la telephonie

Plusieurs acteurs majeurs interviennent dans le marche de la telephonie mobile

1 Les fabricants de materiels

2 Les fabricants de logiciels (en lrsquooccurrence Google)

3 Les circuits de distribution (pour lrsquoinstant les operateurs de telephonie mobile)

4 Les developpeurs drsquoapplications

5 Les fournisseurs de contenus et de services (regies publicitaires services en ligneetc)

Nous allons passer en revue les interets de ces acteurs et le role qursquoils jouent dansla securite de la plateforme a lrsquoexception des derniers qui sont trop divers et varies

Il faut noter que si demain Android venait a equiper drsquoautres biens de consomma-tion courante (ex televiseurs refrigerateurs etc) les parties prenantes (et donc lesconclusions de cette etude) ne seraient pas fondamentalement differentes

132 Securite du systeme Android

Fabricants de materiels Les fabricants de materiels vivent dans un monde extremementconcurrentiel et doivent minimiser le cout de developpement de leurs produits pourque lrsquooperateur puisse au final proposer son telephone a 1 Par ailleurs ils doiventegalement minimiser le time to market un telephone portable se demode tresvite la duree de vie commerciale drsquoun systeme est de lrsquoordre de 6 mois

En consequence logique les developpements sont bacles Les systemes pousses enproduction sont a peine testes et les fonctions de debogage restent souvent activees(comme en temoigne le shell root disponible sur le port TCP12345 des series HTCEvo et HTC Hero commercialisees par Sprint 16)

En regle generale aucun support technique nrsquoest offert apres la sortie drsquountelephone Les mises a jour officielles de firmware sont rarissimes dans le domaine dela telephonie mobile - a lrsquoexception notable drsquoApple qui propose des mises a jourpour le systeme iOS dans la fenetre de support de ses equipements a savoir 21

2ans

Ceci conduit a la proliferation de firmwares non officiels dont lrsquoinnocuite et la stabilitene peuvent pas etre garantis

Dans le cas tres precis de mon telephone LG GW620 livre sous Android 15 LGFrance 17 a promis une mise a jour vers Android 16 pendant plus drsquoun an avant definalement se retracter Des firmwares Android 21 et 22 drsquoexcellente facture ndash maisnon officiels ndash ont donc ete developpes par des amateurs 18 Sous la pression de sesutilisateurs LG a fini par sortir un firmware officiel mais trop tard

Fabricants de logiciels La concurrence fait rage dans le domaine des systemesdrsquoexploitation pour ordiphones

Des lors les editeurs de systemes drsquoexploitation doivent seduire tous les autresacteurs quitte a diminuer les contraintes de securite

ndash Pour seduire les utilisateurs il semble necessaire de disposer du plus grandnombre drsquoapplications dans sa MarketPlaceBien qursquoon puisse questionner cette logique (ne serait-il pas plus interessant dedisposer drsquoapplications utiles fiables et bien realisees ) la guerre des chiffresest neanmoins lancee

ndash Pour seduire les developpeurs drsquoapplications il est necessaire de leur faciliter letravail au maximumLe choix du langage Java et la mise a disposition drsquoun SDK gratuit pour Eclipseva dans ce sens Mais Google va meme plus loin en mettant a disposition un SDK

16 httpwwwunrevokedcomrootwikidokuphppublicunrevoked1_disclosure

17 httptwittercomlg_blog_france

18 httpopenetnacomopenetna

N Ruff 133

visuel pour les gens nrsquoayant aucune notion de developpement 19 On peutse poser des questions sur la securite (et la qualite en general) des applicationsqui en sortirontLa signature drsquoapplications fut egalement pendant longtemps une pierre drsquoachop-pement Lors du lancement du programme Symbian Signed on a pu lireque Symbian voulait tuer les developpeurs independants HeureusementlrsquoAppStore a depuis prouve le contraire et Android nrsquoa eu aucun mal a imposerla signature des sa genese

ndash Seduire les fabricants de materiels est assez simple il suffit de produire unsysteme gratuit et drsquoen assurer une bonne partie du support Ajoutez a celaune forte demande du marche et tout est en place pour garantir le succes

Circuits de distribution Lrsquoessentiel des ordiphones sont commercialises par lesoperateurs de telephonie mobile (Google ayant drsquoailleurs essuye un echec commercialsur la vente en direct du Nexus One)

Comme la plupart des acteurs de la chaine les operateurs cherchent a maximiserleurs revenus parfois au detriment de la securite

ndash Les operateurs personnalisent les systemes drsquoexploitation en y ajoutant desbogues

ndash Les operateurs tentent de rendre payantes des fonctions natives incitant de cefait les utilisateurs au piratage

Parmi les inventions geniales du marketing on peut citer le bridage du tethering(utilisation du telephone comme modem 3G) la geolocalisation payante (alors que letelephone dispose drsquoun GPS integre) lrsquoimpossibilite de regarder la tele ou drsquoecouterde la musique sur un lien WiFi (mais pas sur un lien 3G) etc

Des lors les utilisateurs sont tentes de debrider leur telephone (jailbreaking)drsquoinstaller des applications tierce partie douteuses voire drsquoinstaller des systemes nonofficiels sans garantie drsquoinnocuite

Developpeurs drsquoapplications Lrsquoun des moyens les plus efficaces pour seduire lesdeveloppements est de leur promettre des revenus consequents Pas facile dans unmonde ou la plupart des applications sont gratuites ou dont le prix nrsquoexcede pas 1

Tout drsquoabord le processus drsquoachat drsquoapplications est relativement simple grace aGoogle Checkout lorsque lrsquooperateur ne fournit pas lui-meme le service de facturationau travers de sa MarketPlace Pour les applications financees par la publicite lareputation de Google dans le domaine nrsquoest plus a faire (surtout depuis le rachat dela societe AdMob specialisee dans le domaine de la publicite sur mobiles)

19 httpappinventorgooglelabscomabout

134 Securite du systeme Android

Contrairement a ce qursquoon pourrait croire les deux methodes generent des reve-nus comparables comme le revele lrsquoauteur drsquoune application inutile mais pourtanttelechargee presque 100 000 fois a savoir Advanced Task Manager 20

Les developpeurs attires par des revenus encore plus rapides pourront etre tentespar le cote obscur de la telephonie mobile appels et SMS surtaxes vol (et revente)du carnet drsquoadresses collecte de lrsquohistorique du navigateur etc

Ce phenomene est loin drsquoetre marginal certaines applications etant clairementmalveillantes ndash comme SMSAndroidOSFakePlayera ou les applications editeespar 09Droid qui se font passer pour des applications bancaires officielles ndash drsquoautresetant simplement a la limite du marketing agressif ndash comme celles de lrsquoediteur francaisZeuzz

Plusieurs etudes soulignent la dangerosite des MarketPlaces generalement fi-nancees par les editeurs antivirus ces etudes ne sont toutefois pas drsquoune qualitescientifique suffisante pour etre citees ici Le risque semble neanmoins reel puisqueGoogle a retire en urgence des dizaines drsquoapplications de la MarketPlace dans le cadrede lrsquoaffaire DroidDream (nous y reviendrons)

42 Failles logicielles

Etat des lieux Compte-tenu de lrsquoutilisation massive de code Open Source dans lesysteme Android les failles drsquoimplementation logicielle sont faciles a identifier il suffitde suivre les alertes de securite des principaux projets Lorsqursquoils sont disponibles cequi nrsquoest pas forcement le cas pour le noyau Linux

Les vecteurs principaux (en termes de nombre de lignes de code et drsquoexposition)sont le systeme Linux et le navigateur Web (et particulierement le moteur WebKitcommun avec Safari)

Il ne faut pas oublier non plus qursquoAndroid integre Flash Player et vit avec lesmemes failles 21

Failles navigateur Comme dans tout navigateur Web de complexite importanteles failles sont nombreuses Ces failles nrsquoen restent pas moins dangereuses car ellesont ete demontrees exploitables sur Android 22 23

Lrsquoune drsquoentre elles est meme disponible dans Metasploit 24 Il srsquoagit drsquoune faillerelativement grave qui permet de lire nrsquoimporte quel fichier du telephone accessible

20 httparronlacom201008android-revenue-advanced-task-manager

21 httpwwwtheinquirernetinquirernews2034092android-smartphones-attack-flash-player-hackers

22 httpwwwexploit-dbcomexploits15423

23 httpwwwexploit-dbcomexploits16974

24 httpblogmetasploitcom201101mobile-device-security-and-android-filehtml

N Ruff 135

au processus navigateur - ce qui inclut lrsquointegralite de la carte SD puisque celle-ci estformatee en FAT (donc sans aucun controle drsquoacces)

On notera dans cette attaque lrsquoutilisation de lrsquoURL contentcomandroid

htmlfileproviderltfilenamegt qui permet de lire nrsquoimporte quel fichier du telephoneau travers drsquoun Content Provider 25 ndash une notion specifique a Android qui prometdrsquoetre encore source de nombreuses failles vu la surface drsquoattaque exposee

Par ailleurs outre les schemas traditionnels (file http etc) Androidsupporte par defaut des schemas plus specifiques et donc moins testes

Parmi les schemas supportes on peut citer content (qui permet de com-muniquer avec un Content Provider) market (qui permet drsquointeragir avec laMarketPlace comme par exemple marketdetailsid=ltpackagegt) ou android

resource (qui permet drsquoacceder a une ressource dans un paquet comme parexemple androidresourceltpaquetgtltressourcegt)

Failles systeme Les failles systeme ne sont pas legion mais ont toutes un impactcritique sur la securite du systeme

Parmi les failles les plus connues (car les plus exploitees dans la nature ) onpeut citer les failles publiees sur le site xSports 26 a savoir

ndash Exploid faille udev bien connue des administrateurs Linux CVE-2009-1185

ndash Rage Against The Cage faille liee au mauvais comportement du processusadb lorsque RLIMIT NPROC a ete atteint 27 - lrsquoappel a setuid() echoue mais leprocessus nrsquoen tient pas compte et continue son execution son lrsquoidentite root

ndash Killing In The Name Of faille permettant de modifier la valeur de la constanteglobale (normalement en lecture seule) rosecure en jouant sur une erreurdrsquoimplementation de devashmem Cette constante definie a la compilationdu systeme indique au processus adb srsquoil doit srsquoexecuter sous lrsquoidentite root 28

Les applications legitimes (comme VISIONary+ 29) ou malveillantes (la pluscelebre ayant probablement ete DroidDream [20] ) ne se privent pas drsquoexploiter cesfailles dans la nature

Il faut toutefois noter qursquoil existe une difference subtile entre obtenir un accesroot et obtenir un acces root persistant au redemarrage du telephone En effetbien qursquoil soit virtuellement possible drsquoecrire dans le repertoire system (au traversde la commande adb remount ou drsquoun remount rw a lrsquointerieur du terminal) un

25 httpdeveloperandroidcomguidetopicsproviderscontent-providershtml

26 httpstealthopenwallnetxSports

27 httpdtorsorg20100825reversing-latest-exploid-release

28 httpsourceandroidcomportingbuild_systemhtml

29 httpandroidmodacocomcontentsoftware32035019-nov-r14-visionary-one-click-root

136 Securite du systeme Android

certain nombre de telephones modernes disposent drsquoune protection contre le reflashageintempestif de la partition systeme Cette protection est souvent liee a lrsquoutilisationdrsquoun composant memoire capable de verifier une signature cryptographique (parexemple un composant eMMC 30)

Dans le jargon on dit que la possibilite de reflasher la partition systeme avecun firmware non signe necessite un telephone en mode S-OFF Sur de nombreuxtelephones de marque HTC 31 le mode courant (S-ON ou S-OFF) peut etre obtenuen appuyant sur la touche Volume Down au demarrage du telephone

Failles logiques Il existe une categorie de failles difficiles a detecter et pourtantdevastatrices les failles logiques

Lrsquoun des exemples les plus fameux est le deblocage du telephone en utilisant soncompte Google Dans certains cas de corruption de donnees ce processus peut echouercomme documente officiellement par Google 32

Dans ce cas le telephone doit normalement etre reinitialise en configuration drsquousine(lorsque crsquoest possible ndash la procedure exacte depend du constructeur) Heureusementil srsquoavere que le mot de passe null est toujours accepte comme valide

Un autre bogue celebre affecte le Motorola Droid et potentiellement drsquoautresLorsque le telephone est verrouille mais qursquoun appel entrant arrive il est possibledrsquoappuyer sur le bouton Back et ainsi drsquoarriver a lrsquoecran drsquoaccueil du telephone 33

Enfin une superbe faille logique a ete decouverte sur le site httpsmarket

androidcom qui permet drsquoinstaller a distance des applications sur un telephoneAndroid Grace a une faille de type XSS persistant sur ce site 34 il etait possible defaire installer une application puis de lrsquoexecuter automatiquement sur le telephonede nrsquoimporte quel utilisateur Un utilisateur pouvait etre victime de cette attaque encliquant sur un lien depuis son telephone ou son PC (sous reserve drsquoetre logue sousson compte Google)

La technique utilisee pour executer automatiquement lrsquoapplication apres soninstallation merite drsquoetre soulignee elle consiste a declarer dans le manifeste delrsquoapplication que celle-ci supporte un nouveau schema drsquoURI (par exemple trigger

) puis a invoquer un lien trigger depuis la page Web drsquoorigine

Que peut-on faire Compte-tenu de la quantite de code C embarque dans lesysteme Android il existe et il existera des bogues drsquoimplementation dans ce systeme

30 httpenwikipediaorgwikiMultiMediaCardeMMC

31 Un site de reference pour les telephones de marque HTC httpunrevokedcom32 httpcodegooglecompandroidissuesdetailid=3006

33 httptechcrunchcom20100111verizon-droid-security-bug

34 httpjonoberheideorgblog20110307how-i-almost-won-pwn2own-via-xss

N Ruff 137

conduisant pour certains a des failles de securite WebKit et le systeme Linux sontdes cibles de choix compte-tenu de la surface drsquoattaque exposee

Toutefois et contrairement a un systeme classique la mise a jour a grandeechelle srsquoavere extremement problematique pour plusieurs raisons

ndash Le facteur drsquoechelle (plusieurs millions drsquounites en circulation rien qursquoen France)ndash La diversite et le haut degre de personnalisation des plateformes materielles et

logiciellesndash La propriete du terminal (lorsqursquoil a ete achete par lrsquoutilisateur)ndash Les risques commerciaux en cas de blocage definitif du terminal (brick)On peut raisonnablement considerer qursquoen dehors du geek moyen aucun utilisateur

de smartphone sous Android nrsquoa jamais mis a jour son systemeLes statistiques officielles de Google sur la repartition des ordiphones par version

drsquoAndroid permettent de se faire une idee objective sur la vitesse de renouvellementdu parc 35 A lrsquoheure ou jrsquoecris ces lignes malgre la disponibilite du systeme Android23 la majorite du parc se compose encore de systemes Android 21 et 22 ndash sanscompter sur les irreductibles 6 qui disposent drsquoune version anterieure Je laisseaux statisticiens le soin de produire une etude plus detaillee qui sera neanmoinsbiaisee par le fait que les donnees mondiales sont agregees tandis que les politiquesde renouvellement des operateurs sont tres variables drsquoun pays a lrsquoautre

Dans ces conditions il est loin le moment ou un operateur mobile fera du NAC-NAP sur son reseau pour interdire la connexion de ordiphones qui ne sont pas a jourdes correctifs

Techniquement le protocole FOTA (Firmware Over-The-Air) permet toutefoisde mettre a jour a distance des terminaux Ce protocole a deja ete utilise a grandeechelle lorsqursquoune backdoor (exploitable a distance) a ete decouverte sur certainstelephones HTC de modele Hero et Evo

5 Audit drsquoapplications Android

51 Auditer pourquoi

Lrsquoaudit securite drsquoapplications tierces est une activite vieille comme le conseil ensecurite Toutefois le circuit de distribution logicielle etant assez different entre lemonde du logiciel drsquoentreprise et les MarketPlaces pour mobiles il est vrai que laquestion merite drsquoetre posee a nouveau

A lrsquoheure ou jrsquoecris ces lignes Google nrsquoeffectue aucune verification de securite surles applications publiees dans lrsquoAndroid Market Cet etat de fait pourrait changer

35 httpdeveloperandroidcomresourcesdashboardplatform-versionshtml

138 Securite du systeme Android

compte-tenu de la proliferation drsquoapplications malveillantes de plus en plus agressiveset sophistiquees

Parmi tous les risques lies aux terminaux mobiles (vol de lrsquoequipement intrusionvia une faille du navigateur etc) on constate dans les faits que le risque principalaujourdrsquohui est la proliferation drsquoapplications malveillantes La malveillance estune notion assez floue et certaines applications peuvent se situer dans une zone grise - comme lrsquoapplication de voix sur IP Viber 36 qui duplique tous les contactsde lrsquoutilisateur sur un serveur central faisant office drsquoannuaire telephonique Maisdrsquoautres applications font lrsquounanimite contre elles comme les applications utilisant desfailles systeme pour elever leurs privileges vers root etou envoyer des SMS surtaxessans le consentement de lrsquoutilisateur Ces applications sont drsquoailleurs tuees parGoogle une fois identifiees car elles violent clairement les regles drsquoutilisation delrsquoAndroid Market

Les circuits qui conduisent a lrsquoapparition drsquoune application malveillante sontmultiples

ndash Malveillance deliberee de lrsquoauteur qui veut gagner de lrsquoargent rapidement Crsquoestle cas le plus simple Un scenario courant consiste a cloner une applicationen vogue tout en y ajoutant du code malveillant

ndash Compromission drsquoun editeur drsquoapplications a son insu Crsquoest la ligne de defenseadoptee par plusieurs editeurs drsquoapplications apres avoir ete pointe du doigtCette defense est malheureusement credible car la plupart des developpeurs sontdes individus isoles ou des micro-entreprises attirees par les success stories a laAngry Birds et bien souvent sans aucune securite dans les developpements

ndash Integration de librairies tierce partie malveillantes dans un programme sainLrsquoauteur drsquoune application populaire (a savoir Tank Hero ) a ainsi an-nonce avoir ete contacte par un fournisseur drsquoapplications probablementmalveillantes qui lui proposait un accord commercial 37

Mais lrsquoidentification des applications malveillantes nrsquoest pas la seule raison quipeut conduire a auditer une application Android Parmi drsquoautres raisons legitimes on peut citer

ndash Verifier que lrsquoapplication fait bien ce qursquoelle pretend faire Ce point est parti-culierement critique pour les applications de securite qui mettent en œuvre duchiffrement ou de la gestion de mots de passe par exemple Dans le domaineles surprises sont nombreuses drsquoautant que les applications mobiles nrsquoont pasencore la maturite des applications bureautiques et que les contraintes

36 httpwwwvibercom

37 httpwwwredditcomrAndroidcommentsfm3cuspyware_company_wants_us_to_embed_

their_code_into

N Ruff 139

du monde embarque se font sentir (puissance de calcul sources drsquoentropieremanence de lrsquoallocateur memoire Java etc)

ndash Recherche des failles de securite Et oui les applications Android sont aussivulnerables aux buffer overflows lorsqursquoelles utilisent du code natif (compileavec le NDK) et meme des injections SQL (meme si SQLite nrsquoimplemente pasdrsquoequivalent a xp cmdshell) Il existe par ailleurs des attaques specifiques aumonde Android comme les BroadcastReceiver qui ne verifieraient pas la sourcedes messages recus

Le probleme principal avec lrsquoaudit drsquoapplications Android nrsquoest pas techniqueLe probleme crsquoest lrsquoeuphorie du marche proliferation drsquoapplications et mises a jourfrequentes qui obligent a automatiser et industrialiser les audits 38

52 Auditer comment

Lrsquoaudit securite est une tache difficile a modeliser car elle tire parti de la creativitede lrsquoauditeur On peut toutefois identifier les grandes lignes suivantes

1 Recuperer lrsquoapplication

2 Decompresser les ressources

3 Desassembler le bytecode

4 Decompiler le bytecode (lorsque crsquoest possible)

5 Desassembler le code natif

6 Deboguer lrsquoapplication en cours drsquoexecution (sur un telephone reel ou danslrsquoemulateur)

Cette methodologie nrsquoest pas exhaustive elle ne donne pas acces au contenutelecharge ulterieurement (par exemple au travers des publicites integrees) Voyonsles methodes et les difficultes associees a chaque etape

Recuperer lrsquoapplication Cette etape nrsquoest pas trop compliquee pour qui est preta installer lrsquoapplication cible sur son telephone Apres installation le fichier APK estconserve dans le repertoire dataapp Selon les permissions appliquees au systeme defichiers il nrsquoest pas necessairement possible de lister le contenu de ce repertoire maisles paquets restent lisibles par lrsquooutil adb et le nom de paquet peut etre determinedepuis la MarketPlace ou le menu parametres du telephone (le nom exact estpaquet-Napk ou N vaut generalement 1)

38 httpwwwappanalysisorg

140 Securite du systeme Android

Toute autre methode est complexe et probablement illegale Parmi les methodespossibles on peut citer lrsquoinstallation de lrsquoapplication MarketPlace dans un emulateurou le reverse engineering de lrsquoapplication MarketPlace a des fins de reimplementation(cette derniere etant toutefois volumineuse donc complexe a analyser)

Depuis la version 22 du systeme Android et si lrsquoapplication lrsquoautorise il estpossible drsquoinstaller une application sur la carte SD Mais lrsquoapplication est alorsstockee dans un fichier asec chiffre Ce fichier est inexploitable jusqursquoa ce quele mecanisme et la cle de chiffrement soient connus

On peut imaginer qursquoune application extremement malveillante pourrait exploiterune faille des lrsquoinstallation pour elever ses privileges vers root et dissimuler ses traces(ie se rendre inaccessible de lrsquoexterieur) Ce cas ne srsquoest pas encore produit dansla nature a lrsquoheure ou jrsquoecris ces lignes mais srsquoavere techniquement faisable

Il faut noter que la MarketPlace de Google nrsquoest pas la seule disponible maisqursquoil existe egalement des MarketPlaces drsquooperateurs ou de tiers ainsi Amazoncommercialise desormais des applications Android 39 Cette proliferation complexifiedrsquoautant la tache drsquoanalyse des MarketPlaces La methode la plus universelle pourrecuperer la source drsquoinstallation drsquoune application reste donc de lrsquoinstaller sur untelephone

Un utilisateur peut installer des applications depuis des sources externes a laMarketPlace si lrsquooption autoriser les sources inconnues est cochee dans lesparametres de configuration Il existe des applications legitimes accessibles en dehorsdes MarketPlaces mais il existe egalement des bases drsquoapplications piratees surInternet dont lrsquoinnocuite ne peut pas etre garantie

Notons que certaines applications meme parmi celles disponibles sur les Market-Places officielles exigent au prealable un acces root au telephone

Decompresser les ressources Les fichiers places a lrsquointerieur drsquoun paquet APKsont optimises drsquoune maniere ou drsquoune autre avant drsquoetre compresses Ceci srsquoappliqueaussi bien au bytecode qursquoaux ressources textuelles (comme les fichiers XML)

Lrsquoune des optimisations principales est la deduplication de donnees Ainsi ilnrsquoexiste qursquoune seule instance de chaque chaine de caracteres dans un fichier DEXDifferents encodages optimises sont egalement utilises tel que LEB128 pourla representation des entiers (Little Endian Base 128 aussi utilise dans le formatDWARF)

Toutes ces optimisations nrsquoont pas pour but la protection logicielle et sont parfai-tement reversibles Lrsquooutil aapt fourni avec le SDK officiel permet ainsi drsquoexplorerle contenu du manifeste drsquoun paquet APK Les techniques drsquooptimisation ont ete

39 httpwwwamazoncomappstore

N Ruff 141

analysees et documentees par des tiers ce qui a permis la production drsquooutils dedecompression comme apktool 40

Desassembler le bytecode Avec le SDK officiel est fourni lrsquooutil dexdump quipermet de lister le bytecode contenu dans un fichier CLASSESDEX

Le format de fichier DEX a ete lui aussi analyse et documente 41 ce qui a permisla production de desassembleurs tiers comme baksmali

Le code genere suit la syntaxe Jasmin 42 bien connue dans le monde Java tra-ditionnel Cette syntaxe peut sembler obscure de prime abord mais elle est par-faitement reguliere donc finalement tres simple a apprehender Prenons un exempleissu drsquoune application reelle voici ci-dessous le code drsquoune methode appeleeemptyResult telle que produit par baksmali

method protected static emptyResult(LjavalangString )Z

locals 1

parameter result

prologue

line 306

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Toutes les directives commencent par un point Leur nom est relativement explicitelocals 1 va par exemple indiquer la presence drsquoune seule variable locale Le nomassigne aux opcodes de la machine virtuelle est egalement assez parlant

pN represente lrsquoargument numero N passe a la methode vN represente le re-gistre numero N (Dalvik est une machine virtuelle a registres et non a pile)

Munis de ces informations decortiquons la seule operation reellement complexeeffectuee dans cet extrait de code

40 httpcodegooglecompandroid-apktool

41 httpwwwnetmitecomandroidmydroiddalvikdocsdex-formathtml

42 httpjasminsourceforgenet

142 Securite du systeme Android

invoke-static Invoque une methode sta-tique Il existe egalementun opcode invoke-virtual

pour les methodes virtuellesinvoke-super pour la methodede la superclasse etc

p0 La methode appelee prend unseul argument La valeur de cetargument provient du premierargument passe a la methodeemptyResult

LcomutilsStringUtils-gtisEmpty Invoque la methode isEmpty de laclasse comutilsStringUtils L est un prefixe accole a tousles litteraux

(LjavalangString) Le premier (et seul) argument estde type javalangString

Z La methode retourne un booleen

A titre de reference voici les differents types natifs disponibles dans Jasmin

Z BooleenB OctetC CaractereS Entier court (16 bits)I Entier (32 bits)J Entier long (64 bits)F Flottant (32 bits)D Double (64 bits)

Lrsquoavantage majeur de lrsquooutil tiers apktool est la possibilite de modifier le bytecodeou les ressources drsquoune application puis de la recompiler dans une version fonctionnelleCeci permet drsquoutiliser une technique drsquoanalyse aussi ancienne que lrsquoinformatiqueappelee printf debugging

Dans le monde Android lrsquoutilisation de Systemout doit etre remplacee parandroidutilLog Cette classe definit plusieurs methodes ndash respectivement v d iw e et wtf ndash qui correspondent chacune a un niveau de verbosite ndash et dont lesarguments sont enregistres dans le journal systeme (sauf le niveau debug) Cejournal peut etre consulte a lrsquoaide de la commande adb logcat apparait en temps

N Ruff 143

reel dans lrsquooutil DDMS et peut egalement etre consulte par toute application quidispose de la permission READ LOGS

Si lrsquoon souhaite connaitre lrsquoargument passe a la methode emptyResult danslrsquoexemple precedent il suffit alors drsquoajouter un appel a nrsquoimporte quelle methode dela classe Log de la maniere suivante

method protected static emptyResult(LjavalangString )Z

locals 2

parameter result

prologue

line 306

const -string v1 PrintfDebuggingStyle

invoke -static v1 p0 LandroidutilLog-gtd(LjavalangStringLjavalang

String )I

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Une variable locale v1 a ete ajoutee contenant une chaine de caracteres fixe Lamethode d() est ensuite invoquee Cette modification est equivalente au code Javasuivant

Logd(PrintfDebuggingStyle ltp0 gt)

On peut constater experimentalement que de nombreuses applications de laMarketPlace font usage de lrsquoAPI Log ce qui permet de collecter des donnees defonctionnement parfois tres (trop) interessantes

Le journal systeme peut etre collecte a distance par un developpeur lors ducrash de son application si lrsquoutilisateur lrsquoautorise Cette technique a ete presenteepar Renaud Lifchitz lors de la conference 27c3 pour espionner les deplacements drsquounutilisateur 43

Decompiler le bytecode Comme avec tout bytecode de haut niveau (ex JavaNET) la semantique de lrsquoapplication est conservee

Il est donc possible de decompiler du bytecode Dalvik et de reconstruire le codeJava drsquoorigine (sans les commentaires ndash seule information perdue a la compilation) Lepremier outil public capable drsquoune telle operation fut undx 44 de Marc Schoenefeld Cetoutil est toutefois bogue et non maintenu par son auteur Le meilleur outil disponibleactuellement est lrsquooutil dex2jar 45 qui reconstruit du bytecode Java a partir du

43 httpeventscccdecongress2010Fahrplanevents4151enhtml

44 httpwwwillegalaccessorgundxhtml

45 httpcodegooglecompdex2jar

144 Securite du systeme Android

bytecode Dalvik Les outils classiques de decompilation Java 46 47 srsquoappliquentalors

Compte-tenu de la facilite deconcertante avec laquelle il est possible drsquoanalyserles applications Android (et donc de les craquer entre autres) Google a mis adisposition des developpeurs une bibliotheque tres complete de gestion des licences enligne Licensing Verification Library (LVL) 48 Toutes les versions de cette bibliothequeont malheureusement ete craquees elles aussi a lrsquoheure ou jrsquoecris ces lignes

Une autre contre-mesure mise en place par Google consiste a integrer un obfusca-teur de bytecode dans la chaine de compilation ProGuard 49 Cet outil relativementpuissant est configurable par le developpeur au travers du fichier proguardcfg toutefois le fichier de configuration par defaut (reproduit ci-apres) nrsquoopere que lerenommage des classes et methodes invisibles a lrsquoexterieur de lrsquoapplication ce qui estpeu efficace face a un attaquant determine

-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontpreverify

-verbose

-optimizations codesimplificationarithmetic field classmerging

-keep public class extends androidappActivity

-keep public class extends androidappApplication

-keep public class extends androidappService

-keep public class extends androidcontentBroadcastReceiver

-keep public class extends androidcontentContentProvider

-keep public class extends androidappbackupBackupAgentHelper

-keep public class extends androidpreferencePreference

-keep public class comandroidvendinglicensingILicensingService

-keepclasseswithmembernames class

native ltmethods gt

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet)

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet int)

-keepclassmembers enum

public static [] values ()

public static valueOf(javalangString)

46 httpmembersfortunecitycomneshkovdjhtml

47 httpjavadecompilerfreefr

48 httpdeveloperandroidcomguidepublishinglicensinghtml

49 httpdeveloperandroidcomguidedevelopingtoolsproguardhtml

N Ruff 145

-keep class implements androidosParcelable

public static final androidosParcelable$Creator

Au vu des resultats obtenus on peut considerer que lrsquoobfuscation de bytecode Javadans le monde Android est en retard sur lrsquoobfuscation de code x86 dans le monde PCLes techniques de complexification du flot de controle ou de construction dynamiquedes constantes ne sont pas encore repandues dans les applications commerciales pourAndroid Afin de combler ce manque des projets paralleles (comme AndroGuard 50)fleurissent - mais on peut supposer que la solution integree au SDK fourni par Googlerestera la solution majoritairement utilisee par les applications (pour des raisons desimplicite evidentes)

Desassembler du code natif Lors de lrsquoaudit drsquoune application Android il estpossible de rencontrer du code natif dans deux cas

1 Lrsquoapplication contient des bibliotheques natives compilees avec le NDK

2 Lrsquoapplication contient des applications natives ou srsquoavere etre elle-meme uneapplication native Ce cas est courant avec les applications malveillantes quiembarquent du code natif pour exploiter des failles noyau 51

Dans les deux cas Android ne presente aucune specificite par rapport a unLinuxARM classique Les fichiers natifs sont au format ELF La chaine de compilationnative est construite autour du compilateur GCC Tous les outils sont disponiblesdepuis longtemps pour analyser des tels binaires (ex IDA Pro Hex-Rays DecompilerARM etc)

Deboguer lrsquoapplication Une application Java compilee en mode debug peutetre deboguee a distance au travers du protocole standard Java Debug Wire Protocol(JDWP) defini dans le cadre de Java Platform Debugger Architecture (JPDA)

Les environnements de developpement Java classiques (comme Eclipse) per-mettent ainsi de deboguer une application a distance une fois celle-ci installee sur letelephone

Il est egalement possible drsquoutiliser le venerable JDB (fourni avec le SDK Java 52)bien que cet outil nrsquoait jamais depasse le statut de preuve de concept a mon avis

Lrsquooutil DDMS fourni avec le SDK Android repose egalement sur JPDA Cetoutil ne permet toutefois pas le debogage drsquoapplications mais seulement lrsquoanalyse deperformance

50 httpcodegooglecompandroguard

51 httpstealthopenwallnetxSports

52 httpdownloadoraclecomjavase142docstooldocssolarisjdbhtml

146 Securite du systeme Android

La liste des applications pouvant etre deboguees sur un systeme Android srsquoobtientavec la commande adb jdwp

Le vrai probleme se pose pour les applications qui nrsquoont pas ete compilees enmode debug Ceci implique que le manifeste de lrsquoapplication ne contient pasdrsquoentree ltapplication androiddebuggable=truegt De plus la plupart des outilsde debogage Java necessitent que le bytecode contienne des indications sur les numerosde lignes dans le code source drsquoorigine (il srsquoagit drsquoune limitation arbitraire qui nesrsquoapplique pas a lrsquooutil JavaSnoop 53 par exemple)

Fort heureusement il est possible de desassembler ces applications puis de lesreassembler en mode debug avec lrsquooutil apktool 54 Le processus est complexe etle resultat peu convivial mais il a le merite drsquoexister

Pour reinstaller lrsquoapplication modifiee sur un equipement reel il est necessairede la signer a nouveau La procedure est simple et parfaitement documentee parGoogle

Il faut drsquoabord generer une cle personnelle autosignee a duree de vie extremementlongue

$ keytool -genkey -v -keystore mykeykeystore -alias nom_alias -keyalg RSA -

keysize 2048 -validity 10000

Il faut ensuite signer le nouvel APK avec les outils du SDK Java

$ jarsigner -verbose -keystore mykeykeystore nom_applicationapk nom_alias

Enfin il est recommande drsquoaligner le code sur un multiple de 4 octets pour desraisons de performance

$ zipalign -v 4 nom_applicationapk nom_application_finalapk

Instrumentation Il est possible drsquoinstrumenter une application Java a lrsquoaide declasses specifiques a Android (androidappInstrumentation 55) Cette methodefournit des resultats detailles et personnalisables sur le fonctionnement interne drsquouneapplication elle necessite toutefois une decompilation et une modification prealablede lrsquoapplication a auditer

A lrsquoheure ou jrsquoecris ces lignes il nrsquoexiste pas (a ma connaissance) drsquooutil permettantde generaliser et drsquoautomatiser le processus a tout fichier APK Cette voie de recherchepourrait toutefois donner des resultats interessants

53 httpwwwaspectsecuritycomtoolsjavasnoop

54 httpcodegooglecompandroid-apktoolwikiSmaliDebugging

55 httpdeveloperandroidcomreferenceandroidappInstrumentationhtml

N Ruff 147

Outils specifiques Les outils disponibles actuellement dans le monde Android sontrudimentaires quoi que suffisants

Toutefois on peut raisonnablement estimer que la quantite et la qualite des outilsdisponibles va croitre de concert avec la popularite du systeme Android

A lrsquoheure ou jrsquoecris ces lignes la version 61 du logiciel IDA Pro 56 vient de sortirCette version ajoute le support du format DEX et du bytecode Dalvik ainsi que ledebogage a distance des applications Android natives

On peut supposer que drsquoautres outils couramment utilises par les auditeurs ensecurite vont etre mis a jour pour srsquoadapter au monde Android

6 Conclusion

Le systeme Android nrsquoa malheureusement pas profite de lrsquoopportunite unique quilui etait donnee repartir de la feuille blanche et creer un systeme drsquoexploitation sur par conception

A cause drsquoun heritage logiciel peu fiable ainsi que des contraintes materielles etcommerciales issues du monde de la telephonie mobile le systeme resultant est uncompromis qui laisse une large place a la creativite des attaquants

Celle-ci est drsquoautant plus exacerbee que la telephonie mobile est un phenomene demasse (il y a plus de telephones mobiles que drsquoordinateurs dans le monde) et que letelephone mobile est par conception un systeme de paiement (ce que nrsquoest pas un PCtraditionnel)

A ce tableau vient srsquoajouter 30 ans drsquoexperience dans le domaine des attaqueslogicielles appliquees a un ecosysteme applicatif qui nrsquoexistait pas il y a 5 ans

Toutes les conditions sont donc reunies pour que des attaques de grande ampleurmotivees par lrsquoargent se produisent contre les materiels grand public equipes dusysteme Android (telephones tablettes televisions )

La bonne nouvelle pour lrsquoexpert en securite crsquoest qursquoil est encore temps de srsquoymettre Android est suffisamment jeune et accessible aux nouveaux entrants ce quinrsquoest plus le cas de la plateforme PC ou les techniques drsquoattaque (ex exploitationdrsquoun heap overflow) et de defense (ex obfuscation logicielle) ont atteint des sommetsde raffinement desormais accessibles aux seuls experts les plus pointus du domaine

7 Sites et outils

71 Sites officiels

ndash Android portail officiel httpwwwandroidcom

56 httpwwwhex-rayscomidapro

148 Securite du systeme Android

ndash Android MarketPlace officielle httpsmarketandroidcomndash Android reference des developpeurs httpdeveloperandroidcom

72 Sites non officiels

ndash Reference de la machine virtuelle Dalvik httpdalvikvmcom

73 Outils tiers

ndash Google Android Debugging Utilities httpsitesgooglecomsiteortegaalfredoandroid

ndash Undx httpwwwillegalaccessorgundxhtmlndash SmaliBaksmali httpcodegooglecompsmalindash Dedexer httpdedexersourceforgenetndash Dex2Jar httpcodegooglecompdex2jarndash TaintDroid httpwwwappanalysisorg

ndash AndroGuard httpandroguardblogspotcom

References

1 Benjamin Morin Modele de securite drsquoAndroid MISC 51 2010

2 K Chen Reversing and exploiting an apple firmware update httpwwwblackhatcom

presentationsbh-usa-09CHENBHUSA09-Chen-RevAppleFirm-PAPERpdf BlackHat 2009

3 Alexandre Gazet Sticky fingers amp KBC Custom Shop httpwwwssticorg2011presentation

sticky_fingers_and_kbc_custom_shop SSTIC 2011

4 Loıc Duflot and Yves-Alexis Perez Quelques elements en matiere de securite des cartes reseau http

wwwssticorg2010presentationPeut_on_faire_confiance_aux_cartes_reseau SSTIC 2010

5 Alexander Tereshkin and Rafal Wojtczuk Introducing Ring -3 Rootkits httpwwwblackhat

compresentationsbh-usa-09TERESHKINBHUSA09-Tereshkin-Ring3Rootkit-SLIDESpdf Black-Hat USA 2009

6 Loıc Duflot Yves-Alexis Perez and Benjamin Morin Run-time firmware integrity verification what ifyou canrsquot trust your network card CanSecWest 2011

7 Ralf-Philipp Weinmann All Your Baseband Are Belong To Us httpeventscccdecongress

2010Fahrplanevents4090enhtml CCC 2010

8 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Formal Model to Analyzethe Permission Authorization and Enforcement in the Android Framework SecureComrsquo10

9 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Small but Non-negligibleFlaw in the Android Permission Scheme Wook Shin Sanghoon Kwak Shinsaku Kiyomoto KazuhideFukushima et Toshiaki Tanaka IEEE POLICY 2010

10 Marc Schonefled Reconstructing Dalvik Applications httpcansecwestcomcsw09

csw09-schoenefeldpdf CanSecWest 2009

N Ruff 149

11 Sergio Alvarez The Smart-Phones Nightmare (iPhone-oriented parts about Android) http

cansecwestcomcsw09csw09-alvarezpdf CanSecWest 2009

12 Nicolas Economou Alfredo Ortega Smartphone (in)security httpcansecwestcomcsw09

csw09-ortega-economoupdf CanSecWest 2009

13 Jesse Burns Exploratory Android Surgery httpwwwblackhatcompresentationsbh-usa-09

BURNSBHUSA09-Burns-AndroidSurgery-SLIDESpdf BlackHat USA 2009

14 Kevin Mahaffey John Hering App Attack httpsmediablackhatcombh-us-10presentations

Mahaffey_HeringBlackhat-USA-2010-Mahaffey-Hering-Lookout-App-Genome-slidespdf Black-Hat USA 2010

15 Nils The Risk you carry in your Pocket httpsmediablackhatcombh-ad-10Nils

Black-Hat-AD-2010-android-sandcastle-slidespdf BlackHat Abu Dhabi 2010

16 Raphael Rigo Android Reverse Engineering and Forensics httpsdeepsecnetdocsspeaker

htmlPSLOT45 DeepSec 2010

17 Itzhak Avraham Popping Shell on A(ndroid)RM Devices httpsmediablackhatcombh-dc-11

AvrahamBlackHat_DC_2011_Avraham-Popping_Android_Devices-Slidespdf BlackHat DC 2011

18 Jon Oberheide httpjonoberheideorgblog20100625remote-kill-and-install-on-google-android

19 Jon Oberheide httpjonoberheideorgblog20100628a-peek-inside-the-gtalkservice-connection

20 httpwwwandroidpolicecom20110301the-mother-of-all-android-

malware-has-arrived-stolen-apps-released-to-the-market-that-root-

your-phone-steal-your-data-and-open-backdoor

  • Seacutecuriteacute du systegraveme Android
  • N Ruff

130 Securite du systeme Android

Securite theorique Lrsquoune des questions qursquoon peut se poser sur le systeme depermissions tel qursquoil a ete defini est lrsquoexistence (ou non) drsquoun modele theorique sous-jacent coherent [98] Est-ce que chaque permission correspond bien a un ensemble detaches uniques et strictement delimitees Crsquoest la meme question qui se pose avec lemodele des capabilities sous Linux et dans ce deuxieme cas la reponse est non CAP SYS MODULE permet par exemple de charger des modules noyau arbitraires etdonc de compromettre entierement lrsquointegrite du noyau

Dans le cas drsquoAndroid on peut suspecter que la permission SYSTEMPROPERTIES WRITE

definie par lrsquooperateur Sprint (vue precedemment) a probablement une intersectionnon nulle avec la permission WRITE SETTINGS definie par Google tout en etantprobablement inconnue des outils drsquoanalyse automatique drsquoinnocuite

Lrsquointeret pratique drsquoune etude mathematique sur les permissions Android esttoutefois limite En effet les deux risques majeurs rencontres dans la nature sont

ndash Des applications malveillantes qui demandent des permissions excessivementlarges et abusent de la confiance des utilisateurs

ndash Des applications malveillantes sans aucune permission qui exploitent des faillessysteme pour obtenir lrsquoacces au compte root et contourner entierement lemodele de securite

Ces risques sont partages avec tous les autres modeles de securite en usage danslrsquoindustrie (SELinux sous Linux UAC sous Windows etc)

ndash Ces modeles se heurtent a lrsquoergonomie des interfaces et a la prise de decisioneclairee par les utilisateurs finaux

ndash Lrsquoimplementation de ces modeles exige un effort de conception important tandisque les attaquants les contournent entierement en violant les hypotheses deconception (en particulier lrsquohypothese que le noyau du systeme drsquoexploitationest exempt de bogues)

Autres limites du modele Presque toutes les applications existantes exigent unacces illimite au reseau tres souvent pour recuperer du contenu publicitaire Enpratique cela signifie que le risque pose par une application ne se limite pas a unensemble de permissions statiques par exemple un contenu malveillant pourra etreenvoye a tout moment au moteur de rendu WebKit a travers le canal publicitaire etprovoquer ainsi la prise de controle drsquoun telephone donne au travers une applicationa priori saine

Les permissions demandees peuvent changer a lrsquooccasion drsquoune mise a jour Orla plupart des utilisateurs font confiance aux applications qursquoils ont deja installeesDepuis la version 22 drsquoAndroid lrsquoutilisateur peut autoriser les applications a semettre a jour automatiquement Fort heureusement la mise a jour automatique est

N Ruff 131

bloquee si les permissions demandees par lrsquoapplication changent De mon point devue le mecanisme de mise a jour automatique peut donc etre considere comme plutotbenefique pour lrsquoecosysteme

Enfin le code natif attache a une application (dans le cas drsquoutilisation du NDK)est essentiellement non verifiable contrairement au bytecode Dalvik Le modelede securite Unix vient donc srsquoajouter au modele de permissions Android

4 Panorama des risques

Jrsquoidentifie trois risques de securite majeurs applicables aux ordiphones mo-dernes

1 La structuration du marche de la telephonie

2 Les failles logicielles

3 Les applications tierce partie

Nous allons passer en revue ces trois risques Le troisieme risque est plus specifique alrsquoecosysteme Android dans lequel le role de chaque acteur est bien separe fournisseurde materiel fournisseur de logiciel fournisseur de service

Il se verifie moins dans des ecosystemes comme celui de lrsquoiPhone et du BlackBerrydans lesquels les fournisseurs du materiel et du logiciel sont les memes

41 Marche de la telephonie

Plusieurs acteurs majeurs interviennent dans le marche de la telephonie mobile

1 Les fabricants de materiels

2 Les fabricants de logiciels (en lrsquooccurrence Google)

3 Les circuits de distribution (pour lrsquoinstant les operateurs de telephonie mobile)

4 Les developpeurs drsquoapplications

5 Les fournisseurs de contenus et de services (regies publicitaires services en ligneetc)

Nous allons passer en revue les interets de ces acteurs et le role qursquoils jouent dansla securite de la plateforme a lrsquoexception des derniers qui sont trop divers et varies

Il faut noter que si demain Android venait a equiper drsquoautres biens de consomma-tion courante (ex televiseurs refrigerateurs etc) les parties prenantes (et donc lesconclusions de cette etude) ne seraient pas fondamentalement differentes

132 Securite du systeme Android

Fabricants de materiels Les fabricants de materiels vivent dans un monde extremementconcurrentiel et doivent minimiser le cout de developpement de leurs produits pourque lrsquooperateur puisse au final proposer son telephone a 1 Par ailleurs ils doiventegalement minimiser le time to market un telephone portable se demode tresvite la duree de vie commerciale drsquoun systeme est de lrsquoordre de 6 mois

En consequence logique les developpements sont bacles Les systemes pousses enproduction sont a peine testes et les fonctions de debogage restent souvent activees(comme en temoigne le shell root disponible sur le port TCP12345 des series HTCEvo et HTC Hero commercialisees par Sprint 16)

En regle generale aucun support technique nrsquoest offert apres la sortie drsquountelephone Les mises a jour officielles de firmware sont rarissimes dans le domaine dela telephonie mobile - a lrsquoexception notable drsquoApple qui propose des mises a jourpour le systeme iOS dans la fenetre de support de ses equipements a savoir 21

2ans

Ceci conduit a la proliferation de firmwares non officiels dont lrsquoinnocuite et la stabilitene peuvent pas etre garantis

Dans le cas tres precis de mon telephone LG GW620 livre sous Android 15 LGFrance 17 a promis une mise a jour vers Android 16 pendant plus drsquoun an avant definalement se retracter Des firmwares Android 21 et 22 drsquoexcellente facture ndash maisnon officiels ndash ont donc ete developpes par des amateurs 18 Sous la pression de sesutilisateurs LG a fini par sortir un firmware officiel mais trop tard

Fabricants de logiciels La concurrence fait rage dans le domaine des systemesdrsquoexploitation pour ordiphones

Des lors les editeurs de systemes drsquoexploitation doivent seduire tous les autresacteurs quitte a diminuer les contraintes de securite

ndash Pour seduire les utilisateurs il semble necessaire de disposer du plus grandnombre drsquoapplications dans sa MarketPlaceBien qursquoon puisse questionner cette logique (ne serait-il pas plus interessant dedisposer drsquoapplications utiles fiables et bien realisees ) la guerre des chiffresest neanmoins lancee

ndash Pour seduire les developpeurs drsquoapplications il est necessaire de leur faciliter letravail au maximumLe choix du langage Java et la mise a disposition drsquoun SDK gratuit pour Eclipseva dans ce sens Mais Google va meme plus loin en mettant a disposition un SDK

16 httpwwwunrevokedcomrootwikidokuphppublicunrevoked1_disclosure

17 httptwittercomlg_blog_france

18 httpopenetnacomopenetna

N Ruff 133

visuel pour les gens nrsquoayant aucune notion de developpement 19 On peutse poser des questions sur la securite (et la qualite en general) des applicationsqui en sortirontLa signature drsquoapplications fut egalement pendant longtemps une pierre drsquoachop-pement Lors du lancement du programme Symbian Signed on a pu lireque Symbian voulait tuer les developpeurs independants HeureusementlrsquoAppStore a depuis prouve le contraire et Android nrsquoa eu aucun mal a imposerla signature des sa genese

ndash Seduire les fabricants de materiels est assez simple il suffit de produire unsysteme gratuit et drsquoen assurer une bonne partie du support Ajoutez a celaune forte demande du marche et tout est en place pour garantir le succes

Circuits de distribution Lrsquoessentiel des ordiphones sont commercialises par lesoperateurs de telephonie mobile (Google ayant drsquoailleurs essuye un echec commercialsur la vente en direct du Nexus One)

Comme la plupart des acteurs de la chaine les operateurs cherchent a maximiserleurs revenus parfois au detriment de la securite

ndash Les operateurs personnalisent les systemes drsquoexploitation en y ajoutant desbogues

ndash Les operateurs tentent de rendre payantes des fonctions natives incitant de cefait les utilisateurs au piratage

Parmi les inventions geniales du marketing on peut citer le bridage du tethering(utilisation du telephone comme modem 3G) la geolocalisation payante (alors que letelephone dispose drsquoun GPS integre) lrsquoimpossibilite de regarder la tele ou drsquoecouterde la musique sur un lien WiFi (mais pas sur un lien 3G) etc

Des lors les utilisateurs sont tentes de debrider leur telephone (jailbreaking)drsquoinstaller des applications tierce partie douteuses voire drsquoinstaller des systemes nonofficiels sans garantie drsquoinnocuite

Developpeurs drsquoapplications Lrsquoun des moyens les plus efficaces pour seduire lesdeveloppements est de leur promettre des revenus consequents Pas facile dans unmonde ou la plupart des applications sont gratuites ou dont le prix nrsquoexcede pas 1

Tout drsquoabord le processus drsquoachat drsquoapplications est relativement simple grace aGoogle Checkout lorsque lrsquooperateur ne fournit pas lui-meme le service de facturationau travers de sa MarketPlace Pour les applications financees par la publicite lareputation de Google dans le domaine nrsquoest plus a faire (surtout depuis le rachat dela societe AdMob specialisee dans le domaine de la publicite sur mobiles)

19 httpappinventorgooglelabscomabout

134 Securite du systeme Android

Contrairement a ce qursquoon pourrait croire les deux methodes generent des reve-nus comparables comme le revele lrsquoauteur drsquoune application inutile mais pourtanttelechargee presque 100 000 fois a savoir Advanced Task Manager 20

Les developpeurs attires par des revenus encore plus rapides pourront etre tentespar le cote obscur de la telephonie mobile appels et SMS surtaxes vol (et revente)du carnet drsquoadresses collecte de lrsquohistorique du navigateur etc

Ce phenomene est loin drsquoetre marginal certaines applications etant clairementmalveillantes ndash comme SMSAndroidOSFakePlayera ou les applications editeespar 09Droid qui se font passer pour des applications bancaires officielles ndash drsquoautresetant simplement a la limite du marketing agressif ndash comme celles de lrsquoediteur francaisZeuzz

Plusieurs etudes soulignent la dangerosite des MarketPlaces generalement fi-nancees par les editeurs antivirus ces etudes ne sont toutefois pas drsquoune qualitescientifique suffisante pour etre citees ici Le risque semble neanmoins reel puisqueGoogle a retire en urgence des dizaines drsquoapplications de la MarketPlace dans le cadrede lrsquoaffaire DroidDream (nous y reviendrons)

42 Failles logicielles

Etat des lieux Compte-tenu de lrsquoutilisation massive de code Open Source dans lesysteme Android les failles drsquoimplementation logicielle sont faciles a identifier il suffitde suivre les alertes de securite des principaux projets Lorsqursquoils sont disponibles cequi nrsquoest pas forcement le cas pour le noyau Linux

Les vecteurs principaux (en termes de nombre de lignes de code et drsquoexposition)sont le systeme Linux et le navigateur Web (et particulierement le moteur WebKitcommun avec Safari)

Il ne faut pas oublier non plus qursquoAndroid integre Flash Player et vit avec lesmemes failles 21

Failles navigateur Comme dans tout navigateur Web de complexite importanteles failles sont nombreuses Ces failles nrsquoen restent pas moins dangereuses car ellesont ete demontrees exploitables sur Android 22 23

Lrsquoune drsquoentre elles est meme disponible dans Metasploit 24 Il srsquoagit drsquoune faillerelativement grave qui permet de lire nrsquoimporte quel fichier du telephone accessible

20 httparronlacom201008android-revenue-advanced-task-manager

21 httpwwwtheinquirernetinquirernews2034092android-smartphones-attack-flash-player-hackers

22 httpwwwexploit-dbcomexploits15423

23 httpwwwexploit-dbcomexploits16974

24 httpblogmetasploitcom201101mobile-device-security-and-android-filehtml

N Ruff 135

au processus navigateur - ce qui inclut lrsquointegralite de la carte SD puisque celle-ci estformatee en FAT (donc sans aucun controle drsquoacces)

On notera dans cette attaque lrsquoutilisation de lrsquoURL contentcomandroid

htmlfileproviderltfilenamegt qui permet de lire nrsquoimporte quel fichier du telephoneau travers drsquoun Content Provider 25 ndash une notion specifique a Android qui prometdrsquoetre encore source de nombreuses failles vu la surface drsquoattaque exposee

Par ailleurs outre les schemas traditionnels (file http etc) Androidsupporte par defaut des schemas plus specifiques et donc moins testes

Parmi les schemas supportes on peut citer content (qui permet de com-muniquer avec un Content Provider) market (qui permet drsquointeragir avec laMarketPlace comme par exemple marketdetailsid=ltpackagegt) ou android

resource (qui permet drsquoacceder a une ressource dans un paquet comme parexemple androidresourceltpaquetgtltressourcegt)

Failles systeme Les failles systeme ne sont pas legion mais ont toutes un impactcritique sur la securite du systeme

Parmi les failles les plus connues (car les plus exploitees dans la nature ) onpeut citer les failles publiees sur le site xSports 26 a savoir

ndash Exploid faille udev bien connue des administrateurs Linux CVE-2009-1185

ndash Rage Against The Cage faille liee au mauvais comportement du processusadb lorsque RLIMIT NPROC a ete atteint 27 - lrsquoappel a setuid() echoue mais leprocessus nrsquoen tient pas compte et continue son execution son lrsquoidentite root

ndash Killing In The Name Of faille permettant de modifier la valeur de la constanteglobale (normalement en lecture seule) rosecure en jouant sur une erreurdrsquoimplementation de devashmem Cette constante definie a la compilationdu systeme indique au processus adb srsquoil doit srsquoexecuter sous lrsquoidentite root 28

Les applications legitimes (comme VISIONary+ 29) ou malveillantes (la pluscelebre ayant probablement ete DroidDream [20] ) ne se privent pas drsquoexploiter cesfailles dans la nature

Il faut toutefois noter qursquoil existe une difference subtile entre obtenir un accesroot et obtenir un acces root persistant au redemarrage du telephone En effetbien qursquoil soit virtuellement possible drsquoecrire dans le repertoire system (au traversde la commande adb remount ou drsquoun remount rw a lrsquointerieur du terminal) un

25 httpdeveloperandroidcomguidetopicsproviderscontent-providershtml

26 httpstealthopenwallnetxSports

27 httpdtorsorg20100825reversing-latest-exploid-release

28 httpsourceandroidcomportingbuild_systemhtml

29 httpandroidmodacocomcontentsoftware32035019-nov-r14-visionary-one-click-root

136 Securite du systeme Android

certain nombre de telephones modernes disposent drsquoune protection contre le reflashageintempestif de la partition systeme Cette protection est souvent liee a lrsquoutilisationdrsquoun composant memoire capable de verifier une signature cryptographique (parexemple un composant eMMC 30)

Dans le jargon on dit que la possibilite de reflasher la partition systeme avecun firmware non signe necessite un telephone en mode S-OFF Sur de nombreuxtelephones de marque HTC 31 le mode courant (S-ON ou S-OFF) peut etre obtenuen appuyant sur la touche Volume Down au demarrage du telephone

Failles logiques Il existe une categorie de failles difficiles a detecter et pourtantdevastatrices les failles logiques

Lrsquoun des exemples les plus fameux est le deblocage du telephone en utilisant soncompte Google Dans certains cas de corruption de donnees ce processus peut echouercomme documente officiellement par Google 32

Dans ce cas le telephone doit normalement etre reinitialise en configuration drsquousine(lorsque crsquoest possible ndash la procedure exacte depend du constructeur) Heureusementil srsquoavere que le mot de passe null est toujours accepte comme valide

Un autre bogue celebre affecte le Motorola Droid et potentiellement drsquoautresLorsque le telephone est verrouille mais qursquoun appel entrant arrive il est possibledrsquoappuyer sur le bouton Back et ainsi drsquoarriver a lrsquoecran drsquoaccueil du telephone 33

Enfin une superbe faille logique a ete decouverte sur le site httpsmarket

androidcom qui permet drsquoinstaller a distance des applications sur un telephoneAndroid Grace a une faille de type XSS persistant sur ce site 34 il etait possible defaire installer une application puis de lrsquoexecuter automatiquement sur le telephonede nrsquoimporte quel utilisateur Un utilisateur pouvait etre victime de cette attaque encliquant sur un lien depuis son telephone ou son PC (sous reserve drsquoetre logue sousson compte Google)

La technique utilisee pour executer automatiquement lrsquoapplication apres soninstallation merite drsquoetre soulignee elle consiste a declarer dans le manifeste delrsquoapplication que celle-ci supporte un nouveau schema drsquoURI (par exemple trigger

) puis a invoquer un lien trigger depuis la page Web drsquoorigine

Que peut-on faire Compte-tenu de la quantite de code C embarque dans lesysteme Android il existe et il existera des bogues drsquoimplementation dans ce systeme

30 httpenwikipediaorgwikiMultiMediaCardeMMC

31 Un site de reference pour les telephones de marque HTC httpunrevokedcom32 httpcodegooglecompandroidissuesdetailid=3006

33 httptechcrunchcom20100111verizon-droid-security-bug

34 httpjonoberheideorgblog20110307how-i-almost-won-pwn2own-via-xss

N Ruff 137

conduisant pour certains a des failles de securite WebKit et le systeme Linux sontdes cibles de choix compte-tenu de la surface drsquoattaque exposee

Toutefois et contrairement a un systeme classique la mise a jour a grandeechelle srsquoavere extremement problematique pour plusieurs raisons

ndash Le facteur drsquoechelle (plusieurs millions drsquounites en circulation rien qursquoen France)ndash La diversite et le haut degre de personnalisation des plateformes materielles et

logiciellesndash La propriete du terminal (lorsqursquoil a ete achete par lrsquoutilisateur)ndash Les risques commerciaux en cas de blocage definitif du terminal (brick)On peut raisonnablement considerer qursquoen dehors du geek moyen aucun utilisateur

de smartphone sous Android nrsquoa jamais mis a jour son systemeLes statistiques officielles de Google sur la repartition des ordiphones par version

drsquoAndroid permettent de se faire une idee objective sur la vitesse de renouvellementdu parc 35 A lrsquoheure ou jrsquoecris ces lignes malgre la disponibilite du systeme Android23 la majorite du parc se compose encore de systemes Android 21 et 22 ndash sanscompter sur les irreductibles 6 qui disposent drsquoune version anterieure Je laisseaux statisticiens le soin de produire une etude plus detaillee qui sera neanmoinsbiaisee par le fait que les donnees mondiales sont agregees tandis que les politiquesde renouvellement des operateurs sont tres variables drsquoun pays a lrsquoautre

Dans ces conditions il est loin le moment ou un operateur mobile fera du NAC-NAP sur son reseau pour interdire la connexion de ordiphones qui ne sont pas a jourdes correctifs

Techniquement le protocole FOTA (Firmware Over-The-Air) permet toutefoisde mettre a jour a distance des terminaux Ce protocole a deja ete utilise a grandeechelle lorsqursquoune backdoor (exploitable a distance) a ete decouverte sur certainstelephones HTC de modele Hero et Evo

5 Audit drsquoapplications Android

51 Auditer pourquoi

Lrsquoaudit securite drsquoapplications tierces est une activite vieille comme le conseil ensecurite Toutefois le circuit de distribution logicielle etant assez different entre lemonde du logiciel drsquoentreprise et les MarketPlaces pour mobiles il est vrai que laquestion merite drsquoetre posee a nouveau

A lrsquoheure ou jrsquoecris ces lignes Google nrsquoeffectue aucune verification de securite surles applications publiees dans lrsquoAndroid Market Cet etat de fait pourrait changer

35 httpdeveloperandroidcomresourcesdashboardplatform-versionshtml

138 Securite du systeme Android

compte-tenu de la proliferation drsquoapplications malveillantes de plus en plus agressiveset sophistiquees

Parmi tous les risques lies aux terminaux mobiles (vol de lrsquoequipement intrusionvia une faille du navigateur etc) on constate dans les faits que le risque principalaujourdrsquohui est la proliferation drsquoapplications malveillantes La malveillance estune notion assez floue et certaines applications peuvent se situer dans une zone grise - comme lrsquoapplication de voix sur IP Viber 36 qui duplique tous les contactsde lrsquoutilisateur sur un serveur central faisant office drsquoannuaire telephonique Maisdrsquoautres applications font lrsquounanimite contre elles comme les applications utilisant desfailles systeme pour elever leurs privileges vers root etou envoyer des SMS surtaxessans le consentement de lrsquoutilisateur Ces applications sont drsquoailleurs tuees parGoogle une fois identifiees car elles violent clairement les regles drsquoutilisation delrsquoAndroid Market

Les circuits qui conduisent a lrsquoapparition drsquoune application malveillante sontmultiples

ndash Malveillance deliberee de lrsquoauteur qui veut gagner de lrsquoargent rapidement Crsquoestle cas le plus simple Un scenario courant consiste a cloner une applicationen vogue tout en y ajoutant du code malveillant

ndash Compromission drsquoun editeur drsquoapplications a son insu Crsquoest la ligne de defenseadoptee par plusieurs editeurs drsquoapplications apres avoir ete pointe du doigtCette defense est malheureusement credible car la plupart des developpeurs sontdes individus isoles ou des micro-entreprises attirees par les success stories a laAngry Birds et bien souvent sans aucune securite dans les developpements

ndash Integration de librairies tierce partie malveillantes dans un programme sainLrsquoauteur drsquoune application populaire (a savoir Tank Hero ) a ainsi an-nonce avoir ete contacte par un fournisseur drsquoapplications probablementmalveillantes qui lui proposait un accord commercial 37

Mais lrsquoidentification des applications malveillantes nrsquoest pas la seule raison quipeut conduire a auditer une application Android Parmi drsquoautres raisons legitimes on peut citer

ndash Verifier que lrsquoapplication fait bien ce qursquoelle pretend faire Ce point est parti-culierement critique pour les applications de securite qui mettent en œuvre duchiffrement ou de la gestion de mots de passe par exemple Dans le domaineles surprises sont nombreuses drsquoautant que les applications mobiles nrsquoont pasencore la maturite des applications bureautiques et que les contraintes

36 httpwwwvibercom

37 httpwwwredditcomrAndroidcommentsfm3cuspyware_company_wants_us_to_embed_

their_code_into

N Ruff 139

du monde embarque se font sentir (puissance de calcul sources drsquoentropieremanence de lrsquoallocateur memoire Java etc)

ndash Recherche des failles de securite Et oui les applications Android sont aussivulnerables aux buffer overflows lorsqursquoelles utilisent du code natif (compileavec le NDK) et meme des injections SQL (meme si SQLite nrsquoimplemente pasdrsquoequivalent a xp cmdshell) Il existe par ailleurs des attaques specifiques aumonde Android comme les BroadcastReceiver qui ne verifieraient pas la sourcedes messages recus

Le probleme principal avec lrsquoaudit drsquoapplications Android nrsquoest pas techniqueLe probleme crsquoest lrsquoeuphorie du marche proliferation drsquoapplications et mises a jourfrequentes qui obligent a automatiser et industrialiser les audits 38

52 Auditer comment

Lrsquoaudit securite est une tache difficile a modeliser car elle tire parti de la creativitede lrsquoauditeur On peut toutefois identifier les grandes lignes suivantes

1 Recuperer lrsquoapplication

2 Decompresser les ressources

3 Desassembler le bytecode

4 Decompiler le bytecode (lorsque crsquoest possible)

5 Desassembler le code natif

6 Deboguer lrsquoapplication en cours drsquoexecution (sur un telephone reel ou danslrsquoemulateur)

Cette methodologie nrsquoest pas exhaustive elle ne donne pas acces au contenutelecharge ulterieurement (par exemple au travers des publicites integrees) Voyonsles methodes et les difficultes associees a chaque etape

Recuperer lrsquoapplication Cette etape nrsquoest pas trop compliquee pour qui est preta installer lrsquoapplication cible sur son telephone Apres installation le fichier APK estconserve dans le repertoire dataapp Selon les permissions appliquees au systeme defichiers il nrsquoest pas necessairement possible de lister le contenu de ce repertoire maisles paquets restent lisibles par lrsquooutil adb et le nom de paquet peut etre determinedepuis la MarketPlace ou le menu parametres du telephone (le nom exact estpaquet-Napk ou N vaut generalement 1)

38 httpwwwappanalysisorg

140 Securite du systeme Android

Toute autre methode est complexe et probablement illegale Parmi les methodespossibles on peut citer lrsquoinstallation de lrsquoapplication MarketPlace dans un emulateurou le reverse engineering de lrsquoapplication MarketPlace a des fins de reimplementation(cette derniere etant toutefois volumineuse donc complexe a analyser)

Depuis la version 22 du systeme Android et si lrsquoapplication lrsquoautorise il estpossible drsquoinstaller une application sur la carte SD Mais lrsquoapplication est alorsstockee dans un fichier asec chiffre Ce fichier est inexploitable jusqursquoa ce quele mecanisme et la cle de chiffrement soient connus

On peut imaginer qursquoune application extremement malveillante pourrait exploiterune faille des lrsquoinstallation pour elever ses privileges vers root et dissimuler ses traces(ie se rendre inaccessible de lrsquoexterieur) Ce cas ne srsquoest pas encore produit dansla nature a lrsquoheure ou jrsquoecris ces lignes mais srsquoavere techniquement faisable

Il faut noter que la MarketPlace de Google nrsquoest pas la seule disponible maisqursquoil existe egalement des MarketPlaces drsquooperateurs ou de tiers ainsi Amazoncommercialise desormais des applications Android 39 Cette proliferation complexifiedrsquoautant la tache drsquoanalyse des MarketPlaces La methode la plus universelle pourrecuperer la source drsquoinstallation drsquoune application reste donc de lrsquoinstaller sur untelephone

Un utilisateur peut installer des applications depuis des sources externes a laMarketPlace si lrsquooption autoriser les sources inconnues est cochee dans lesparametres de configuration Il existe des applications legitimes accessibles en dehorsdes MarketPlaces mais il existe egalement des bases drsquoapplications piratees surInternet dont lrsquoinnocuite ne peut pas etre garantie

Notons que certaines applications meme parmi celles disponibles sur les Market-Places officielles exigent au prealable un acces root au telephone

Decompresser les ressources Les fichiers places a lrsquointerieur drsquoun paquet APKsont optimises drsquoune maniere ou drsquoune autre avant drsquoetre compresses Ceci srsquoappliqueaussi bien au bytecode qursquoaux ressources textuelles (comme les fichiers XML)

Lrsquoune des optimisations principales est la deduplication de donnees Ainsi ilnrsquoexiste qursquoune seule instance de chaque chaine de caracteres dans un fichier DEXDifferents encodages optimises sont egalement utilises tel que LEB128 pourla representation des entiers (Little Endian Base 128 aussi utilise dans le formatDWARF)

Toutes ces optimisations nrsquoont pas pour but la protection logicielle et sont parfai-tement reversibles Lrsquooutil aapt fourni avec le SDK officiel permet ainsi drsquoexplorerle contenu du manifeste drsquoun paquet APK Les techniques drsquooptimisation ont ete

39 httpwwwamazoncomappstore

N Ruff 141

analysees et documentees par des tiers ce qui a permis la production drsquooutils dedecompression comme apktool 40

Desassembler le bytecode Avec le SDK officiel est fourni lrsquooutil dexdump quipermet de lister le bytecode contenu dans un fichier CLASSESDEX

Le format de fichier DEX a ete lui aussi analyse et documente 41 ce qui a permisla production de desassembleurs tiers comme baksmali

Le code genere suit la syntaxe Jasmin 42 bien connue dans le monde Java tra-ditionnel Cette syntaxe peut sembler obscure de prime abord mais elle est par-faitement reguliere donc finalement tres simple a apprehender Prenons un exempleissu drsquoune application reelle voici ci-dessous le code drsquoune methode appeleeemptyResult telle que produit par baksmali

method protected static emptyResult(LjavalangString )Z

locals 1

parameter result

prologue

line 306

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Toutes les directives commencent par un point Leur nom est relativement explicitelocals 1 va par exemple indiquer la presence drsquoune seule variable locale Le nomassigne aux opcodes de la machine virtuelle est egalement assez parlant

pN represente lrsquoargument numero N passe a la methode vN represente le re-gistre numero N (Dalvik est une machine virtuelle a registres et non a pile)

Munis de ces informations decortiquons la seule operation reellement complexeeffectuee dans cet extrait de code

40 httpcodegooglecompandroid-apktool

41 httpwwwnetmitecomandroidmydroiddalvikdocsdex-formathtml

42 httpjasminsourceforgenet

142 Securite du systeme Android

invoke-static Invoque une methode sta-tique Il existe egalementun opcode invoke-virtual

pour les methodes virtuellesinvoke-super pour la methodede la superclasse etc

p0 La methode appelee prend unseul argument La valeur de cetargument provient du premierargument passe a la methodeemptyResult

LcomutilsStringUtils-gtisEmpty Invoque la methode isEmpty de laclasse comutilsStringUtils L est un prefixe accole a tousles litteraux

(LjavalangString) Le premier (et seul) argument estde type javalangString

Z La methode retourne un booleen

A titre de reference voici les differents types natifs disponibles dans Jasmin

Z BooleenB OctetC CaractereS Entier court (16 bits)I Entier (32 bits)J Entier long (64 bits)F Flottant (32 bits)D Double (64 bits)

Lrsquoavantage majeur de lrsquooutil tiers apktool est la possibilite de modifier le bytecodeou les ressources drsquoune application puis de la recompiler dans une version fonctionnelleCeci permet drsquoutiliser une technique drsquoanalyse aussi ancienne que lrsquoinformatiqueappelee printf debugging

Dans le monde Android lrsquoutilisation de Systemout doit etre remplacee parandroidutilLog Cette classe definit plusieurs methodes ndash respectivement v d iw e et wtf ndash qui correspondent chacune a un niveau de verbosite ndash et dont lesarguments sont enregistres dans le journal systeme (sauf le niveau debug) Cejournal peut etre consulte a lrsquoaide de la commande adb logcat apparait en temps

N Ruff 143

reel dans lrsquooutil DDMS et peut egalement etre consulte par toute application quidispose de la permission READ LOGS

Si lrsquoon souhaite connaitre lrsquoargument passe a la methode emptyResult danslrsquoexemple precedent il suffit alors drsquoajouter un appel a nrsquoimporte quelle methode dela classe Log de la maniere suivante

method protected static emptyResult(LjavalangString )Z

locals 2

parameter result

prologue

line 306

const -string v1 PrintfDebuggingStyle

invoke -static v1 p0 LandroidutilLog-gtd(LjavalangStringLjavalang

String )I

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Une variable locale v1 a ete ajoutee contenant une chaine de caracteres fixe Lamethode d() est ensuite invoquee Cette modification est equivalente au code Javasuivant

Logd(PrintfDebuggingStyle ltp0 gt)

On peut constater experimentalement que de nombreuses applications de laMarketPlace font usage de lrsquoAPI Log ce qui permet de collecter des donnees defonctionnement parfois tres (trop) interessantes

Le journal systeme peut etre collecte a distance par un developpeur lors ducrash de son application si lrsquoutilisateur lrsquoautorise Cette technique a ete presenteepar Renaud Lifchitz lors de la conference 27c3 pour espionner les deplacements drsquounutilisateur 43

Decompiler le bytecode Comme avec tout bytecode de haut niveau (ex JavaNET) la semantique de lrsquoapplication est conservee

Il est donc possible de decompiler du bytecode Dalvik et de reconstruire le codeJava drsquoorigine (sans les commentaires ndash seule information perdue a la compilation) Lepremier outil public capable drsquoune telle operation fut undx 44 de Marc Schoenefeld Cetoutil est toutefois bogue et non maintenu par son auteur Le meilleur outil disponibleactuellement est lrsquooutil dex2jar 45 qui reconstruit du bytecode Java a partir du

43 httpeventscccdecongress2010Fahrplanevents4151enhtml

44 httpwwwillegalaccessorgundxhtml

45 httpcodegooglecompdex2jar

144 Securite du systeme Android

bytecode Dalvik Les outils classiques de decompilation Java 46 47 srsquoappliquentalors

Compte-tenu de la facilite deconcertante avec laquelle il est possible drsquoanalyserles applications Android (et donc de les craquer entre autres) Google a mis adisposition des developpeurs une bibliotheque tres complete de gestion des licences enligne Licensing Verification Library (LVL) 48 Toutes les versions de cette bibliothequeont malheureusement ete craquees elles aussi a lrsquoheure ou jrsquoecris ces lignes

Une autre contre-mesure mise en place par Google consiste a integrer un obfusca-teur de bytecode dans la chaine de compilation ProGuard 49 Cet outil relativementpuissant est configurable par le developpeur au travers du fichier proguardcfg toutefois le fichier de configuration par defaut (reproduit ci-apres) nrsquoopere que lerenommage des classes et methodes invisibles a lrsquoexterieur de lrsquoapplication ce qui estpeu efficace face a un attaquant determine

-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontpreverify

-verbose

-optimizations codesimplificationarithmetic field classmerging

-keep public class extends androidappActivity

-keep public class extends androidappApplication

-keep public class extends androidappService

-keep public class extends androidcontentBroadcastReceiver

-keep public class extends androidcontentContentProvider

-keep public class extends androidappbackupBackupAgentHelper

-keep public class extends androidpreferencePreference

-keep public class comandroidvendinglicensingILicensingService

-keepclasseswithmembernames class

native ltmethods gt

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet)

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet int)

-keepclassmembers enum

public static [] values ()

public static valueOf(javalangString)

46 httpmembersfortunecitycomneshkovdjhtml

47 httpjavadecompilerfreefr

48 httpdeveloperandroidcomguidepublishinglicensinghtml

49 httpdeveloperandroidcomguidedevelopingtoolsproguardhtml

N Ruff 145

-keep class implements androidosParcelable

public static final androidosParcelable$Creator

Au vu des resultats obtenus on peut considerer que lrsquoobfuscation de bytecode Javadans le monde Android est en retard sur lrsquoobfuscation de code x86 dans le monde PCLes techniques de complexification du flot de controle ou de construction dynamiquedes constantes ne sont pas encore repandues dans les applications commerciales pourAndroid Afin de combler ce manque des projets paralleles (comme AndroGuard 50)fleurissent - mais on peut supposer que la solution integree au SDK fourni par Googlerestera la solution majoritairement utilisee par les applications (pour des raisons desimplicite evidentes)

Desassembler du code natif Lors de lrsquoaudit drsquoune application Android il estpossible de rencontrer du code natif dans deux cas

1 Lrsquoapplication contient des bibliotheques natives compilees avec le NDK

2 Lrsquoapplication contient des applications natives ou srsquoavere etre elle-meme uneapplication native Ce cas est courant avec les applications malveillantes quiembarquent du code natif pour exploiter des failles noyau 51

Dans les deux cas Android ne presente aucune specificite par rapport a unLinuxARM classique Les fichiers natifs sont au format ELF La chaine de compilationnative est construite autour du compilateur GCC Tous les outils sont disponiblesdepuis longtemps pour analyser des tels binaires (ex IDA Pro Hex-Rays DecompilerARM etc)

Deboguer lrsquoapplication Une application Java compilee en mode debug peutetre deboguee a distance au travers du protocole standard Java Debug Wire Protocol(JDWP) defini dans le cadre de Java Platform Debugger Architecture (JPDA)

Les environnements de developpement Java classiques (comme Eclipse) per-mettent ainsi de deboguer une application a distance une fois celle-ci installee sur letelephone

Il est egalement possible drsquoutiliser le venerable JDB (fourni avec le SDK Java 52)bien que cet outil nrsquoait jamais depasse le statut de preuve de concept a mon avis

Lrsquooutil DDMS fourni avec le SDK Android repose egalement sur JPDA Cetoutil ne permet toutefois pas le debogage drsquoapplications mais seulement lrsquoanalyse deperformance

50 httpcodegooglecompandroguard

51 httpstealthopenwallnetxSports

52 httpdownloadoraclecomjavase142docstooldocssolarisjdbhtml

146 Securite du systeme Android

La liste des applications pouvant etre deboguees sur un systeme Android srsquoobtientavec la commande adb jdwp

Le vrai probleme se pose pour les applications qui nrsquoont pas ete compilees enmode debug Ceci implique que le manifeste de lrsquoapplication ne contient pasdrsquoentree ltapplication androiddebuggable=truegt De plus la plupart des outilsde debogage Java necessitent que le bytecode contienne des indications sur les numerosde lignes dans le code source drsquoorigine (il srsquoagit drsquoune limitation arbitraire qui nesrsquoapplique pas a lrsquooutil JavaSnoop 53 par exemple)

Fort heureusement il est possible de desassembler ces applications puis de lesreassembler en mode debug avec lrsquooutil apktool 54 Le processus est complexe etle resultat peu convivial mais il a le merite drsquoexister

Pour reinstaller lrsquoapplication modifiee sur un equipement reel il est necessairede la signer a nouveau La procedure est simple et parfaitement documentee parGoogle

Il faut drsquoabord generer une cle personnelle autosignee a duree de vie extremementlongue

$ keytool -genkey -v -keystore mykeykeystore -alias nom_alias -keyalg RSA -

keysize 2048 -validity 10000

Il faut ensuite signer le nouvel APK avec les outils du SDK Java

$ jarsigner -verbose -keystore mykeykeystore nom_applicationapk nom_alias

Enfin il est recommande drsquoaligner le code sur un multiple de 4 octets pour desraisons de performance

$ zipalign -v 4 nom_applicationapk nom_application_finalapk

Instrumentation Il est possible drsquoinstrumenter une application Java a lrsquoaide declasses specifiques a Android (androidappInstrumentation 55) Cette methodefournit des resultats detailles et personnalisables sur le fonctionnement interne drsquouneapplication elle necessite toutefois une decompilation et une modification prealablede lrsquoapplication a auditer

A lrsquoheure ou jrsquoecris ces lignes il nrsquoexiste pas (a ma connaissance) drsquooutil permettantde generaliser et drsquoautomatiser le processus a tout fichier APK Cette voie de recherchepourrait toutefois donner des resultats interessants

53 httpwwwaspectsecuritycomtoolsjavasnoop

54 httpcodegooglecompandroid-apktoolwikiSmaliDebugging

55 httpdeveloperandroidcomreferenceandroidappInstrumentationhtml

N Ruff 147

Outils specifiques Les outils disponibles actuellement dans le monde Android sontrudimentaires quoi que suffisants

Toutefois on peut raisonnablement estimer que la quantite et la qualite des outilsdisponibles va croitre de concert avec la popularite du systeme Android

A lrsquoheure ou jrsquoecris ces lignes la version 61 du logiciel IDA Pro 56 vient de sortirCette version ajoute le support du format DEX et du bytecode Dalvik ainsi que ledebogage a distance des applications Android natives

On peut supposer que drsquoautres outils couramment utilises par les auditeurs ensecurite vont etre mis a jour pour srsquoadapter au monde Android

6 Conclusion

Le systeme Android nrsquoa malheureusement pas profite de lrsquoopportunite unique quilui etait donnee repartir de la feuille blanche et creer un systeme drsquoexploitation sur par conception

A cause drsquoun heritage logiciel peu fiable ainsi que des contraintes materielles etcommerciales issues du monde de la telephonie mobile le systeme resultant est uncompromis qui laisse une large place a la creativite des attaquants

Celle-ci est drsquoautant plus exacerbee que la telephonie mobile est un phenomene demasse (il y a plus de telephones mobiles que drsquoordinateurs dans le monde) et que letelephone mobile est par conception un systeme de paiement (ce que nrsquoest pas un PCtraditionnel)

A ce tableau vient srsquoajouter 30 ans drsquoexperience dans le domaine des attaqueslogicielles appliquees a un ecosysteme applicatif qui nrsquoexistait pas il y a 5 ans

Toutes les conditions sont donc reunies pour que des attaques de grande ampleurmotivees par lrsquoargent se produisent contre les materiels grand public equipes dusysteme Android (telephones tablettes televisions )

La bonne nouvelle pour lrsquoexpert en securite crsquoest qursquoil est encore temps de srsquoymettre Android est suffisamment jeune et accessible aux nouveaux entrants ce quinrsquoest plus le cas de la plateforme PC ou les techniques drsquoattaque (ex exploitationdrsquoun heap overflow) et de defense (ex obfuscation logicielle) ont atteint des sommetsde raffinement desormais accessibles aux seuls experts les plus pointus du domaine

7 Sites et outils

71 Sites officiels

ndash Android portail officiel httpwwwandroidcom

56 httpwwwhex-rayscomidapro

148 Securite du systeme Android

ndash Android MarketPlace officielle httpsmarketandroidcomndash Android reference des developpeurs httpdeveloperandroidcom

72 Sites non officiels

ndash Reference de la machine virtuelle Dalvik httpdalvikvmcom

73 Outils tiers

ndash Google Android Debugging Utilities httpsitesgooglecomsiteortegaalfredoandroid

ndash Undx httpwwwillegalaccessorgundxhtmlndash SmaliBaksmali httpcodegooglecompsmalindash Dedexer httpdedexersourceforgenetndash Dex2Jar httpcodegooglecompdex2jarndash TaintDroid httpwwwappanalysisorg

ndash AndroGuard httpandroguardblogspotcom

References

1 Benjamin Morin Modele de securite drsquoAndroid MISC 51 2010

2 K Chen Reversing and exploiting an apple firmware update httpwwwblackhatcom

presentationsbh-usa-09CHENBHUSA09-Chen-RevAppleFirm-PAPERpdf BlackHat 2009

3 Alexandre Gazet Sticky fingers amp KBC Custom Shop httpwwwssticorg2011presentation

sticky_fingers_and_kbc_custom_shop SSTIC 2011

4 Loıc Duflot and Yves-Alexis Perez Quelques elements en matiere de securite des cartes reseau http

wwwssticorg2010presentationPeut_on_faire_confiance_aux_cartes_reseau SSTIC 2010

5 Alexander Tereshkin and Rafal Wojtczuk Introducing Ring -3 Rootkits httpwwwblackhat

compresentationsbh-usa-09TERESHKINBHUSA09-Tereshkin-Ring3Rootkit-SLIDESpdf Black-Hat USA 2009

6 Loıc Duflot Yves-Alexis Perez and Benjamin Morin Run-time firmware integrity verification what ifyou canrsquot trust your network card CanSecWest 2011

7 Ralf-Philipp Weinmann All Your Baseband Are Belong To Us httpeventscccdecongress

2010Fahrplanevents4090enhtml CCC 2010

8 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Formal Model to Analyzethe Permission Authorization and Enforcement in the Android Framework SecureComrsquo10

9 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Small but Non-negligibleFlaw in the Android Permission Scheme Wook Shin Sanghoon Kwak Shinsaku Kiyomoto KazuhideFukushima et Toshiaki Tanaka IEEE POLICY 2010

10 Marc Schonefled Reconstructing Dalvik Applications httpcansecwestcomcsw09

csw09-schoenefeldpdf CanSecWest 2009

N Ruff 149

11 Sergio Alvarez The Smart-Phones Nightmare (iPhone-oriented parts about Android) http

cansecwestcomcsw09csw09-alvarezpdf CanSecWest 2009

12 Nicolas Economou Alfredo Ortega Smartphone (in)security httpcansecwestcomcsw09

csw09-ortega-economoupdf CanSecWest 2009

13 Jesse Burns Exploratory Android Surgery httpwwwblackhatcompresentationsbh-usa-09

BURNSBHUSA09-Burns-AndroidSurgery-SLIDESpdf BlackHat USA 2009

14 Kevin Mahaffey John Hering App Attack httpsmediablackhatcombh-us-10presentations

Mahaffey_HeringBlackhat-USA-2010-Mahaffey-Hering-Lookout-App-Genome-slidespdf Black-Hat USA 2010

15 Nils The Risk you carry in your Pocket httpsmediablackhatcombh-ad-10Nils

Black-Hat-AD-2010-android-sandcastle-slidespdf BlackHat Abu Dhabi 2010

16 Raphael Rigo Android Reverse Engineering and Forensics httpsdeepsecnetdocsspeaker

htmlPSLOT45 DeepSec 2010

17 Itzhak Avraham Popping Shell on A(ndroid)RM Devices httpsmediablackhatcombh-dc-11

AvrahamBlackHat_DC_2011_Avraham-Popping_Android_Devices-Slidespdf BlackHat DC 2011

18 Jon Oberheide httpjonoberheideorgblog20100625remote-kill-and-install-on-google-android

19 Jon Oberheide httpjonoberheideorgblog20100628a-peek-inside-the-gtalkservice-connection

20 httpwwwandroidpolicecom20110301the-mother-of-all-android-

malware-has-arrived-stolen-apps-released-to-the-market-that-root-

your-phone-steal-your-data-and-open-backdoor

  • Seacutecuriteacute du systegraveme Android
  • N Ruff

N Ruff 131

bloquee si les permissions demandees par lrsquoapplication changent De mon point devue le mecanisme de mise a jour automatique peut donc etre considere comme plutotbenefique pour lrsquoecosysteme

Enfin le code natif attache a une application (dans le cas drsquoutilisation du NDK)est essentiellement non verifiable contrairement au bytecode Dalvik Le modelede securite Unix vient donc srsquoajouter au modele de permissions Android

4 Panorama des risques

Jrsquoidentifie trois risques de securite majeurs applicables aux ordiphones mo-dernes

1 La structuration du marche de la telephonie

2 Les failles logicielles

3 Les applications tierce partie

Nous allons passer en revue ces trois risques Le troisieme risque est plus specifique alrsquoecosysteme Android dans lequel le role de chaque acteur est bien separe fournisseurde materiel fournisseur de logiciel fournisseur de service

Il se verifie moins dans des ecosystemes comme celui de lrsquoiPhone et du BlackBerrydans lesquels les fournisseurs du materiel et du logiciel sont les memes

41 Marche de la telephonie

Plusieurs acteurs majeurs interviennent dans le marche de la telephonie mobile

1 Les fabricants de materiels

2 Les fabricants de logiciels (en lrsquooccurrence Google)

3 Les circuits de distribution (pour lrsquoinstant les operateurs de telephonie mobile)

4 Les developpeurs drsquoapplications

5 Les fournisseurs de contenus et de services (regies publicitaires services en ligneetc)

Nous allons passer en revue les interets de ces acteurs et le role qursquoils jouent dansla securite de la plateforme a lrsquoexception des derniers qui sont trop divers et varies

Il faut noter que si demain Android venait a equiper drsquoautres biens de consomma-tion courante (ex televiseurs refrigerateurs etc) les parties prenantes (et donc lesconclusions de cette etude) ne seraient pas fondamentalement differentes

132 Securite du systeme Android

Fabricants de materiels Les fabricants de materiels vivent dans un monde extremementconcurrentiel et doivent minimiser le cout de developpement de leurs produits pourque lrsquooperateur puisse au final proposer son telephone a 1 Par ailleurs ils doiventegalement minimiser le time to market un telephone portable se demode tresvite la duree de vie commerciale drsquoun systeme est de lrsquoordre de 6 mois

En consequence logique les developpements sont bacles Les systemes pousses enproduction sont a peine testes et les fonctions de debogage restent souvent activees(comme en temoigne le shell root disponible sur le port TCP12345 des series HTCEvo et HTC Hero commercialisees par Sprint 16)

En regle generale aucun support technique nrsquoest offert apres la sortie drsquountelephone Les mises a jour officielles de firmware sont rarissimes dans le domaine dela telephonie mobile - a lrsquoexception notable drsquoApple qui propose des mises a jourpour le systeme iOS dans la fenetre de support de ses equipements a savoir 21

2ans

Ceci conduit a la proliferation de firmwares non officiels dont lrsquoinnocuite et la stabilitene peuvent pas etre garantis

Dans le cas tres precis de mon telephone LG GW620 livre sous Android 15 LGFrance 17 a promis une mise a jour vers Android 16 pendant plus drsquoun an avant definalement se retracter Des firmwares Android 21 et 22 drsquoexcellente facture ndash maisnon officiels ndash ont donc ete developpes par des amateurs 18 Sous la pression de sesutilisateurs LG a fini par sortir un firmware officiel mais trop tard

Fabricants de logiciels La concurrence fait rage dans le domaine des systemesdrsquoexploitation pour ordiphones

Des lors les editeurs de systemes drsquoexploitation doivent seduire tous les autresacteurs quitte a diminuer les contraintes de securite

ndash Pour seduire les utilisateurs il semble necessaire de disposer du plus grandnombre drsquoapplications dans sa MarketPlaceBien qursquoon puisse questionner cette logique (ne serait-il pas plus interessant dedisposer drsquoapplications utiles fiables et bien realisees ) la guerre des chiffresest neanmoins lancee

ndash Pour seduire les developpeurs drsquoapplications il est necessaire de leur faciliter letravail au maximumLe choix du langage Java et la mise a disposition drsquoun SDK gratuit pour Eclipseva dans ce sens Mais Google va meme plus loin en mettant a disposition un SDK

16 httpwwwunrevokedcomrootwikidokuphppublicunrevoked1_disclosure

17 httptwittercomlg_blog_france

18 httpopenetnacomopenetna

N Ruff 133

visuel pour les gens nrsquoayant aucune notion de developpement 19 On peutse poser des questions sur la securite (et la qualite en general) des applicationsqui en sortirontLa signature drsquoapplications fut egalement pendant longtemps une pierre drsquoachop-pement Lors du lancement du programme Symbian Signed on a pu lireque Symbian voulait tuer les developpeurs independants HeureusementlrsquoAppStore a depuis prouve le contraire et Android nrsquoa eu aucun mal a imposerla signature des sa genese

ndash Seduire les fabricants de materiels est assez simple il suffit de produire unsysteme gratuit et drsquoen assurer une bonne partie du support Ajoutez a celaune forte demande du marche et tout est en place pour garantir le succes

Circuits de distribution Lrsquoessentiel des ordiphones sont commercialises par lesoperateurs de telephonie mobile (Google ayant drsquoailleurs essuye un echec commercialsur la vente en direct du Nexus One)

Comme la plupart des acteurs de la chaine les operateurs cherchent a maximiserleurs revenus parfois au detriment de la securite

ndash Les operateurs personnalisent les systemes drsquoexploitation en y ajoutant desbogues

ndash Les operateurs tentent de rendre payantes des fonctions natives incitant de cefait les utilisateurs au piratage

Parmi les inventions geniales du marketing on peut citer le bridage du tethering(utilisation du telephone comme modem 3G) la geolocalisation payante (alors que letelephone dispose drsquoun GPS integre) lrsquoimpossibilite de regarder la tele ou drsquoecouterde la musique sur un lien WiFi (mais pas sur un lien 3G) etc

Des lors les utilisateurs sont tentes de debrider leur telephone (jailbreaking)drsquoinstaller des applications tierce partie douteuses voire drsquoinstaller des systemes nonofficiels sans garantie drsquoinnocuite

Developpeurs drsquoapplications Lrsquoun des moyens les plus efficaces pour seduire lesdeveloppements est de leur promettre des revenus consequents Pas facile dans unmonde ou la plupart des applications sont gratuites ou dont le prix nrsquoexcede pas 1

Tout drsquoabord le processus drsquoachat drsquoapplications est relativement simple grace aGoogle Checkout lorsque lrsquooperateur ne fournit pas lui-meme le service de facturationau travers de sa MarketPlace Pour les applications financees par la publicite lareputation de Google dans le domaine nrsquoest plus a faire (surtout depuis le rachat dela societe AdMob specialisee dans le domaine de la publicite sur mobiles)

19 httpappinventorgooglelabscomabout

134 Securite du systeme Android

Contrairement a ce qursquoon pourrait croire les deux methodes generent des reve-nus comparables comme le revele lrsquoauteur drsquoune application inutile mais pourtanttelechargee presque 100 000 fois a savoir Advanced Task Manager 20

Les developpeurs attires par des revenus encore plus rapides pourront etre tentespar le cote obscur de la telephonie mobile appels et SMS surtaxes vol (et revente)du carnet drsquoadresses collecte de lrsquohistorique du navigateur etc

Ce phenomene est loin drsquoetre marginal certaines applications etant clairementmalveillantes ndash comme SMSAndroidOSFakePlayera ou les applications editeespar 09Droid qui se font passer pour des applications bancaires officielles ndash drsquoautresetant simplement a la limite du marketing agressif ndash comme celles de lrsquoediteur francaisZeuzz

Plusieurs etudes soulignent la dangerosite des MarketPlaces generalement fi-nancees par les editeurs antivirus ces etudes ne sont toutefois pas drsquoune qualitescientifique suffisante pour etre citees ici Le risque semble neanmoins reel puisqueGoogle a retire en urgence des dizaines drsquoapplications de la MarketPlace dans le cadrede lrsquoaffaire DroidDream (nous y reviendrons)

42 Failles logicielles

Etat des lieux Compte-tenu de lrsquoutilisation massive de code Open Source dans lesysteme Android les failles drsquoimplementation logicielle sont faciles a identifier il suffitde suivre les alertes de securite des principaux projets Lorsqursquoils sont disponibles cequi nrsquoest pas forcement le cas pour le noyau Linux

Les vecteurs principaux (en termes de nombre de lignes de code et drsquoexposition)sont le systeme Linux et le navigateur Web (et particulierement le moteur WebKitcommun avec Safari)

Il ne faut pas oublier non plus qursquoAndroid integre Flash Player et vit avec lesmemes failles 21

Failles navigateur Comme dans tout navigateur Web de complexite importanteles failles sont nombreuses Ces failles nrsquoen restent pas moins dangereuses car ellesont ete demontrees exploitables sur Android 22 23

Lrsquoune drsquoentre elles est meme disponible dans Metasploit 24 Il srsquoagit drsquoune faillerelativement grave qui permet de lire nrsquoimporte quel fichier du telephone accessible

20 httparronlacom201008android-revenue-advanced-task-manager

21 httpwwwtheinquirernetinquirernews2034092android-smartphones-attack-flash-player-hackers

22 httpwwwexploit-dbcomexploits15423

23 httpwwwexploit-dbcomexploits16974

24 httpblogmetasploitcom201101mobile-device-security-and-android-filehtml

N Ruff 135

au processus navigateur - ce qui inclut lrsquointegralite de la carte SD puisque celle-ci estformatee en FAT (donc sans aucun controle drsquoacces)

On notera dans cette attaque lrsquoutilisation de lrsquoURL contentcomandroid

htmlfileproviderltfilenamegt qui permet de lire nrsquoimporte quel fichier du telephoneau travers drsquoun Content Provider 25 ndash une notion specifique a Android qui prometdrsquoetre encore source de nombreuses failles vu la surface drsquoattaque exposee

Par ailleurs outre les schemas traditionnels (file http etc) Androidsupporte par defaut des schemas plus specifiques et donc moins testes

Parmi les schemas supportes on peut citer content (qui permet de com-muniquer avec un Content Provider) market (qui permet drsquointeragir avec laMarketPlace comme par exemple marketdetailsid=ltpackagegt) ou android

resource (qui permet drsquoacceder a une ressource dans un paquet comme parexemple androidresourceltpaquetgtltressourcegt)

Failles systeme Les failles systeme ne sont pas legion mais ont toutes un impactcritique sur la securite du systeme

Parmi les failles les plus connues (car les plus exploitees dans la nature ) onpeut citer les failles publiees sur le site xSports 26 a savoir

ndash Exploid faille udev bien connue des administrateurs Linux CVE-2009-1185

ndash Rage Against The Cage faille liee au mauvais comportement du processusadb lorsque RLIMIT NPROC a ete atteint 27 - lrsquoappel a setuid() echoue mais leprocessus nrsquoen tient pas compte et continue son execution son lrsquoidentite root

ndash Killing In The Name Of faille permettant de modifier la valeur de la constanteglobale (normalement en lecture seule) rosecure en jouant sur une erreurdrsquoimplementation de devashmem Cette constante definie a la compilationdu systeme indique au processus adb srsquoil doit srsquoexecuter sous lrsquoidentite root 28

Les applications legitimes (comme VISIONary+ 29) ou malveillantes (la pluscelebre ayant probablement ete DroidDream [20] ) ne se privent pas drsquoexploiter cesfailles dans la nature

Il faut toutefois noter qursquoil existe une difference subtile entre obtenir un accesroot et obtenir un acces root persistant au redemarrage du telephone En effetbien qursquoil soit virtuellement possible drsquoecrire dans le repertoire system (au traversde la commande adb remount ou drsquoun remount rw a lrsquointerieur du terminal) un

25 httpdeveloperandroidcomguidetopicsproviderscontent-providershtml

26 httpstealthopenwallnetxSports

27 httpdtorsorg20100825reversing-latest-exploid-release

28 httpsourceandroidcomportingbuild_systemhtml

29 httpandroidmodacocomcontentsoftware32035019-nov-r14-visionary-one-click-root

136 Securite du systeme Android

certain nombre de telephones modernes disposent drsquoune protection contre le reflashageintempestif de la partition systeme Cette protection est souvent liee a lrsquoutilisationdrsquoun composant memoire capable de verifier une signature cryptographique (parexemple un composant eMMC 30)

Dans le jargon on dit que la possibilite de reflasher la partition systeme avecun firmware non signe necessite un telephone en mode S-OFF Sur de nombreuxtelephones de marque HTC 31 le mode courant (S-ON ou S-OFF) peut etre obtenuen appuyant sur la touche Volume Down au demarrage du telephone

Failles logiques Il existe une categorie de failles difficiles a detecter et pourtantdevastatrices les failles logiques

Lrsquoun des exemples les plus fameux est le deblocage du telephone en utilisant soncompte Google Dans certains cas de corruption de donnees ce processus peut echouercomme documente officiellement par Google 32

Dans ce cas le telephone doit normalement etre reinitialise en configuration drsquousine(lorsque crsquoest possible ndash la procedure exacte depend du constructeur) Heureusementil srsquoavere que le mot de passe null est toujours accepte comme valide

Un autre bogue celebre affecte le Motorola Droid et potentiellement drsquoautresLorsque le telephone est verrouille mais qursquoun appel entrant arrive il est possibledrsquoappuyer sur le bouton Back et ainsi drsquoarriver a lrsquoecran drsquoaccueil du telephone 33

Enfin une superbe faille logique a ete decouverte sur le site httpsmarket

androidcom qui permet drsquoinstaller a distance des applications sur un telephoneAndroid Grace a une faille de type XSS persistant sur ce site 34 il etait possible defaire installer une application puis de lrsquoexecuter automatiquement sur le telephonede nrsquoimporte quel utilisateur Un utilisateur pouvait etre victime de cette attaque encliquant sur un lien depuis son telephone ou son PC (sous reserve drsquoetre logue sousson compte Google)

La technique utilisee pour executer automatiquement lrsquoapplication apres soninstallation merite drsquoetre soulignee elle consiste a declarer dans le manifeste delrsquoapplication que celle-ci supporte un nouveau schema drsquoURI (par exemple trigger

) puis a invoquer un lien trigger depuis la page Web drsquoorigine

Que peut-on faire Compte-tenu de la quantite de code C embarque dans lesysteme Android il existe et il existera des bogues drsquoimplementation dans ce systeme

30 httpenwikipediaorgwikiMultiMediaCardeMMC

31 Un site de reference pour les telephones de marque HTC httpunrevokedcom32 httpcodegooglecompandroidissuesdetailid=3006

33 httptechcrunchcom20100111verizon-droid-security-bug

34 httpjonoberheideorgblog20110307how-i-almost-won-pwn2own-via-xss

N Ruff 137

conduisant pour certains a des failles de securite WebKit et le systeme Linux sontdes cibles de choix compte-tenu de la surface drsquoattaque exposee

Toutefois et contrairement a un systeme classique la mise a jour a grandeechelle srsquoavere extremement problematique pour plusieurs raisons

ndash Le facteur drsquoechelle (plusieurs millions drsquounites en circulation rien qursquoen France)ndash La diversite et le haut degre de personnalisation des plateformes materielles et

logiciellesndash La propriete du terminal (lorsqursquoil a ete achete par lrsquoutilisateur)ndash Les risques commerciaux en cas de blocage definitif du terminal (brick)On peut raisonnablement considerer qursquoen dehors du geek moyen aucun utilisateur

de smartphone sous Android nrsquoa jamais mis a jour son systemeLes statistiques officielles de Google sur la repartition des ordiphones par version

drsquoAndroid permettent de se faire une idee objective sur la vitesse de renouvellementdu parc 35 A lrsquoheure ou jrsquoecris ces lignes malgre la disponibilite du systeme Android23 la majorite du parc se compose encore de systemes Android 21 et 22 ndash sanscompter sur les irreductibles 6 qui disposent drsquoune version anterieure Je laisseaux statisticiens le soin de produire une etude plus detaillee qui sera neanmoinsbiaisee par le fait que les donnees mondiales sont agregees tandis que les politiquesde renouvellement des operateurs sont tres variables drsquoun pays a lrsquoautre

Dans ces conditions il est loin le moment ou un operateur mobile fera du NAC-NAP sur son reseau pour interdire la connexion de ordiphones qui ne sont pas a jourdes correctifs

Techniquement le protocole FOTA (Firmware Over-The-Air) permet toutefoisde mettre a jour a distance des terminaux Ce protocole a deja ete utilise a grandeechelle lorsqursquoune backdoor (exploitable a distance) a ete decouverte sur certainstelephones HTC de modele Hero et Evo

5 Audit drsquoapplications Android

51 Auditer pourquoi

Lrsquoaudit securite drsquoapplications tierces est une activite vieille comme le conseil ensecurite Toutefois le circuit de distribution logicielle etant assez different entre lemonde du logiciel drsquoentreprise et les MarketPlaces pour mobiles il est vrai que laquestion merite drsquoetre posee a nouveau

A lrsquoheure ou jrsquoecris ces lignes Google nrsquoeffectue aucune verification de securite surles applications publiees dans lrsquoAndroid Market Cet etat de fait pourrait changer

35 httpdeveloperandroidcomresourcesdashboardplatform-versionshtml

138 Securite du systeme Android

compte-tenu de la proliferation drsquoapplications malveillantes de plus en plus agressiveset sophistiquees

Parmi tous les risques lies aux terminaux mobiles (vol de lrsquoequipement intrusionvia une faille du navigateur etc) on constate dans les faits que le risque principalaujourdrsquohui est la proliferation drsquoapplications malveillantes La malveillance estune notion assez floue et certaines applications peuvent se situer dans une zone grise - comme lrsquoapplication de voix sur IP Viber 36 qui duplique tous les contactsde lrsquoutilisateur sur un serveur central faisant office drsquoannuaire telephonique Maisdrsquoautres applications font lrsquounanimite contre elles comme les applications utilisant desfailles systeme pour elever leurs privileges vers root etou envoyer des SMS surtaxessans le consentement de lrsquoutilisateur Ces applications sont drsquoailleurs tuees parGoogle une fois identifiees car elles violent clairement les regles drsquoutilisation delrsquoAndroid Market

Les circuits qui conduisent a lrsquoapparition drsquoune application malveillante sontmultiples

ndash Malveillance deliberee de lrsquoauteur qui veut gagner de lrsquoargent rapidement Crsquoestle cas le plus simple Un scenario courant consiste a cloner une applicationen vogue tout en y ajoutant du code malveillant

ndash Compromission drsquoun editeur drsquoapplications a son insu Crsquoest la ligne de defenseadoptee par plusieurs editeurs drsquoapplications apres avoir ete pointe du doigtCette defense est malheureusement credible car la plupart des developpeurs sontdes individus isoles ou des micro-entreprises attirees par les success stories a laAngry Birds et bien souvent sans aucune securite dans les developpements

ndash Integration de librairies tierce partie malveillantes dans un programme sainLrsquoauteur drsquoune application populaire (a savoir Tank Hero ) a ainsi an-nonce avoir ete contacte par un fournisseur drsquoapplications probablementmalveillantes qui lui proposait un accord commercial 37

Mais lrsquoidentification des applications malveillantes nrsquoest pas la seule raison quipeut conduire a auditer une application Android Parmi drsquoautres raisons legitimes on peut citer

ndash Verifier que lrsquoapplication fait bien ce qursquoelle pretend faire Ce point est parti-culierement critique pour les applications de securite qui mettent en œuvre duchiffrement ou de la gestion de mots de passe par exemple Dans le domaineles surprises sont nombreuses drsquoautant que les applications mobiles nrsquoont pasencore la maturite des applications bureautiques et que les contraintes

36 httpwwwvibercom

37 httpwwwredditcomrAndroidcommentsfm3cuspyware_company_wants_us_to_embed_

their_code_into

N Ruff 139

du monde embarque se font sentir (puissance de calcul sources drsquoentropieremanence de lrsquoallocateur memoire Java etc)

ndash Recherche des failles de securite Et oui les applications Android sont aussivulnerables aux buffer overflows lorsqursquoelles utilisent du code natif (compileavec le NDK) et meme des injections SQL (meme si SQLite nrsquoimplemente pasdrsquoequivalent a xp cmdshell) Il existe par ailleurs des attaques specifiques aumonde Android comme les BroadcastReceiver qui ne verifieraient pas la sourcedes messages recus

Le probleme principal avec lrsquoaudit drsquoapplications Android nrsquoest pas techniqueLe probleme crsquoest lrsquoeuphorie du marche proliferation drsquoapplications et mises a jourfrequentes qui obligent a automatiser et industrialiser les audits 38

52 Auditer comment

Lrsquoaudit securite est une tache difficile a modeliser car elle tire parti de la creativitede lrsquoauditeur On peut toutefois identifier les grandes lignes suivantes

1 Recuperer lrsquoapplication

2 Decompresser les ressources

3 Desassembler le bytecode

4 Decompiler le bytecode (lorsque crsquoest possible)

5 Desassembler le code natif

6 Deboguer lrsquoapplication en cours drsquoexecution (sur un telephone reel ou danslrsquoemulateur)

Cette methodologie nrsquoest pas exhaustive elle ne donne pas acces au contenutelecharge ulterieurement (par exemple au travers des publicites integrees) Voyonsles methodes et les difficultes associees a chaque etape

Recuperer lrsquoapplication Cette etape nrsquoest pas trop compliquee pour qui est preta installer lrsquoapplication cible sur son telephone Apres installation le fichier APK estconserve dans le repertoire dataapp Selon les permissions appliquees au systeme defichiers il nrsquoest pas necessairement possible de lister le contenu de ce repertoire maisles paquets restent lisibles par lrsquooutil adb et le nom de paquet peut etre determinedepuis la MarketPlace ou le menu parametres du telephone (le nom exact estpaquet-Napk ou N vaut generalement 1)

38 httpwwwappanalysisorg

140 Securite du systeme Android

Toute autre methode est complexe et probablement illegale Parmi les methodespossibles on peut citer lrsquoinstallation de lrsquoapplication MarketPlace dans un emulateurou le reverse engineering de lrsquoapplication MarketPlace a des fins de reimplementation(cette derniere etant toutefois volumineuse donc complexe a analyser)

Depuis la version 22 du systeme Android et si lrsquoapplication lrsquoautorise il estpossible drsquoinstaller une application sur la carte SD Mais lrsquoapplication est alorsstockee dans un fichier asec chiffre Ce fichier est inexploitable jusqursquoa ce quele mecanisme et la cle de chiffrement soient connus

On peut imaginer qursquoune application extremement malveillante pourrait exploiterune faille des lrsquoinstallation pour elever ses privileges vers root et dissimuler ses traces(ie se rendre inaccessible de lrsquoexterieur) Ce cas ne srsquoest pas encore produit dansla nature a lrsquoheure ou jrsquoecris ces lignes mais srsquoavere techniquement faisable

Il faut noter que la MarketPlace de Google nrsquoest pas la seule disponible maisqursquoil existe egalement des MarketPlaces drsquooperateurs ou de tiers ainsi Amazoncommercialise desormais des applications Android 39 Cette proliferation complexifiedrsquoautant la tache drsquoanalyse des MarketPlaces La methode la plus universelle pourrecuperer la source drsquoinstallation drsquoune application reste donc de lrsquoinstaller sur untelephone

Un utilisateur peut installer des applications depuis des sources externes a laMarketPlace si lrsquooption autoriser les sources inconnues est cochee dans lesparametres de configuration Il existe des applications legitimes accessibles en dehorsdes MarketPlaces mais il existe egalement des bases drsquoapplications piratees surInternet dont lrsquoinnocuite ne peut pas etre garantie

Notons que certaines applications meme parmi celles disponibles sur les Market-Places officielles exigent au prealable un acces root au telephone

Decompresser les ressources Les fichiers places a lrsquointerieur drsquoun paquet APKsont optimises drsquoune maniere ou drsquoune autre avant drsquoetre compresses Ceci srsquoappliqueaussi bien au bytecode qursquoaux ressources textuelles (comme les fichiers XML)

Lrsquoune des optimisations principales est la deduplication de donnees Ainsi ilnrsquoexiste qursquoune seule instance de chaque chaine de caracteres dans un fichier DEXDifferents encodages optimises sont egalement utilises tel que LEB128 pourla representation des entiers (Little Endian Base 128 aussi utilise dans le formatDWARF)

Toutes ces optimisations nrsquoont pas pour but la protection logicielle et sont parfai-tement reversibles Lrsquooutil aapt fourni avec le SDK officiel permet ainsi drsquoexplorerle contenu du manifeste drsquoun paquet APK Les techniques drsquooptimisation ont ete

39 httpwwwamazoncomappstore

N Ruff 141

analysees et documentees par des tiers ce qui a permis la production drsquooutils dedecompression comme apktool 40

Desassembler le bytecode Avec le SDK officiel est fourni lrsquooutil dexdump quipermet de lister le bytecode contenu dans un fichier CLASSESDEX

Le format de fichier DEX a ete lui aussi analyse et documente 41 ce qui a permisla production de desassembleurs tiers comme baksmali

Le code genere suit la syntaxe Jasmin 42 bien connue dans le monde Java tra-ditionnel Cette syntaxe peut sembler obscure de prime abord mais elle est par-faitement reguliere donc finalement tres simple a apprehender Prenons un exempleissu drsquoune application reelle voici ci-dessous le code drsquoune methode appeleeemptyResult telle que produit par baksmali

method protected static emptyResult(LjavalangString )Z

locals 1

parameter result

prologue

line 306

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Toutes les directives commencent par un point Leur nom est relativement explicitelocals 1 va par exemple indiquer la presence drsquoune seule variable locale Le nomassigne aux opcodes de la machine virtuelle est egalement assez parlant

pN represente lrsquoargument numero N passe a la methode vN represente le re-gistre numero N (Dalvik est une machine virtuelle a registres et non a pile)

Munis de ces informations decortiquons la seule operation reellement complexeeffectuee dans cet extrait de code

40 httpcodegooglecompandroid-apktool

41 httpwwwnetmitecomandroidmydroiddalvikdocsdex-formathtml

42 httpjasminsourceforgenet

142 Securite du systeme Android

invoke-static Invoque une methode sta-tique Il existe egalementun opcode invoke-virtual

pour les methodes virtuellesinvoke-super pour la methodede la superclasse etc

p0 La methode appelee prend unseul argument La valeur de cetargument provient du premierargument passe a la methodeemptyResult

LcomutilsStringUtils-gtisEmpty Invoque la methode isEmpty de laclasse comutilsStringUtils L est un prefixe accole a tousles litteraux

(LjavalangString) Le premier (et seul) argument estde type javalangString

Z La methode retourne un booleen

A titre de reference voici les differents types natifs disponibles dans Jasmin

Z BooleenB OctetC CaractereS Entier court (16 bits)I Entier (32 bits)J Entier long (64 bits)F Flottant (32 bits)D Double (64 bits)

Lrsquoavantage majeur de lrsquooutil tiers apktool est la possibilite de modifier le bytecodeou les ressources drsquoune application puis de la recompiler dans une version fonctionnelleCeci permet drsquoutiliser une technique drsquoanalyse aussi ancienne que lrsquoinformatiqueappelee printf debugging

Dans le monde Android lrsquoutilisation de Systemout doit etre remplacee parandroidutilLog Cette classe definit plusieurs methodes ndash respectivement v d iw e et wtf ndash qui correspondent chacune a un niveau de verbosite ndash et dont lesarguments sont enregistres dans le journal systeme (sauf le niveau debug) Cejournal peut etre consulte a lrsquoaide de la commande adb logcat apparait en temps

N Ruff 143

reel dans lrsquooutil DDMS et peut egalement etre consulte par toute application quidispose de la permission READ LOGS

Si lrsquoon souhaite connaitre lrsquoargument passe a la methode emptyResult danslrsquoexemple precedent il suffit alors drsquoajouter un appel a nrsquoimporte quelle methode dela classe Log de la maniere suivante

method protected static emptyResult(LjavalangString )Z

locals 2

parameter result

prologue

line 306

const -string v1 PrintfDebuggingStyle

invoke -static v1 p0 LandroidutilLog-gtd(LjavalangStringLjavalang

String )I

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Une variable locale v1 a ete ajoutee contenant une chaine de caracteres fixe Lamethode d() est ensuite invoquee Cette modification est equivalente au code Javasuivant

Logd(PrintfDebuggingStyle ltp0 gt)

On peut constater experimentalement que de nombreuses applications de laMarketPlace font usage de lrsquoAPI Log ce qui permet de collecter des donnees defonctionnement parfois tres (trop) interessantes

Le journal systeme peut etre collecte a distance par un developpeur lors ducrash de son application si lrsquoutilisateur lrsquoautorise Cette technique a ete presenteepar Renaud Lifchitz lors de la conference 27c3 pour espionner les deplacements drsquounutilisateur 43

Decompiler le bytecode Comme avec tout bytecode de haut niveau (ex JavaNET) la semantique de lrsquoapplication est conservee

Il est donc possible de decompiler du bytecode Dalvik et de reconstruire le codeJava drsquoorigine (sans les commentaires ndash seule information perdue a la compilation) Lepremier outil public capable drsquoune telle operation fut undx 44 de Marc Schoenefeld Cetoutil est toutefois bogue et non maintenu par son auteur Le meilleur outil disponibleactuellement est lrsquooutil dex2jar 45 qui reconstruit du bytecode Java a partir du

43 httpeventscccdecongress2010Fahrplanevents4151enhtml

44 httpwwwillegalaccessorgundxhtml

45 httpcodegooglecompdex2jar

144 Securite du systeme Android

bytecode Dalvik Les outils classiques de decompilation Java 46 47 srsquoappliquentalors

Compte-tenu de la facilite deconcertante avec laquelle il est possible drsquoanalyserles applications Android (et donc de les craquer entre autres) Google a mis adisposition des developpeurs une bibliotheque tres complete de gestion des licences enligne Licensing Verification Library (LVL) 48 Toutes les versions de cette bibliothequeont malheureusement ete craquees elles aussi a lrsquoheure ou jrsquoecris ces lignes

Une autre contre-mesure mise en place par Google consiste a integrer un obfusca-teur de bytecode dans la chaine de compilation ProGuard 49 Cet outil relativementpuissant est configurable par le developpeur au travers du fichier proguardcfg toutefois le fichier de configuration par defaut (reproduit ci-apres) nrsquoopere que lerenommage des classes et methodes invisibles a lrsquoexterieur de lrsquoapplication ce qui estpeu efficace face a un attaquant determine

-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontpreverify

-verbose

-optimizations codesimplificationarithmetic field classmerging

-keep public class extends androidappActivity

-keep public class extends androidappApplication

-keep public class extends androidappService

-keep public class extends androidcontentBroadcastReceiver

-keep public class extends androidcontentContentProvider

-keep public class extends androidappbackupBackupAgentHelper

-keep public class extends androidpreferencePreference

-keep public class comandroidvendinglicensingILicensingService

-keepclasseswithmembernames class

native ltmethods gt

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet)

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet int)

-keepclassmembers enum

public static [] values ()

public static valueOf(javalangString)

46 httpmembersfortunecitycomneshkovdjhtml

47 httpjavadecompilerfreefr

48 httpdeveloperandroidcomguidepublishinglicensinghtml

49 httpdeveloperandroidcomguidedevelopingtoolsproguardhtml

N Ruff 145

-keep class implements androidosParcelable

public static final androidosParcelable$Creator

Au vu des resultats obtenus on peut considerer que lrsquoobfuscation de bytecode Javadans le monde Android est en retard sur lrsquoobfuscation de code x86 dans le monde PCLes techniques de complexification du flot de controle ou de construction dynamiquedes constantes ne sont pas encore repandues dans les applications commerciales pourAndroid Afin de combler ce manque des projets paralleles (comme AndroGuard 50)fleurissent - mais on peut supposer que la solution integree au SDK fourni par Googlerestera la solution majoritairement utilisee par les applications (pour des raisons desimplicite evidentes)

Desassembler du code natif Lors de lrsquoaudit drsquoune application Android il estpossible de rencontrer du code natif dans deux cas

1 Lrsquoapplication contient des bibliotheques natives compilees avec le NDK

2 Lrsquoapplication contient des applications natives ou srsquoavere etre elle-meme uneapplication native Ce cas est courant avec les applications malveillantes quiembarquent du code natif pour exploiter des failles noyau 51

Dans les deux cas Android ne presente aucune specificite par rapport a unLinuxARM classique Les fichiers natifs sont au format ELF La chaine de compilationnative est construite autour du compilateur GCC Tous les outils sont disponiblesdepuis longtemps pour analyser des tels binaires (ex IDA Pro Hex-Rays DecompilerARM etc)

Deboguer lrsquoapplication Une application Java compilee en mode debug peutetre deboguee a distance au travers du protocole standard Java Debug Wire Protocol(JDWP) defini dans le cadre de Java Platform Debugger Architecture (JPDA)

Les environnements de developpement Java classiques (comme Eclipse) per-mettent ainsi de deboguer une application a distance une fois celle-ci installee sur letelephone

Il est egalement possible drsquoutiliser le venerable JDB (fourni avec le SDK Java 52)bien que cet outil nrsquoait jamais depasse le statut de preuve de concept a mon avis

Lrsquooutil DDMS fourni avec le SDK Android repose egalement sur JPDA Cetoutil ne permet toutefois pas le debogage drsquoapplications mais seulement lrsquoanalyse deperformance

50 httpcodegooglecompandroguard

51 httpstealthopenwallnetxSports

52 httpdownloadoraclecomjavase142docstooldocssolarisjdbhtml

146 Securite du systeme Android

La liste des applications pouvant etre deboguees sur un systeme Android srsquoobtientavec la commande adb jdwp

Le vrai probleme se pose pour les applications qui nrsquoont pas ete compilees enmode debug Ceci implique que le manifeste de lrsquoapplication ne contient pasdrsquoentree ltapplication androiddebuggable=truegt De plus la plupart des outilsde debogage Java necessitent que le bytecode contienne des indications sur les numerosde lignes dans le code source drsquoorigine (il srsquoagit drsquoune limitation arbitraire qui nesrsquoapplique pas a lrsquooutil JavaSnoop 53 par exemple)

Fort heureusement il est possible de desassembler ces applications puis de lesreassembler en mode debug avec lrsquooutil apktool 54 Le processus est complexe etle resultat peu convivial mais il a le merite drsquoexister

Pour reinstaller lrsquoapplication modifiee sur un equipement reel il est necessairede la signer a nouveau La procedure est simple et parfaitement documentee parGoogle

Il faut drsquoabord generer une cle personnelle autosignee a duree de vie extremementlongue

$ keytool -genkey -v -keystore mykeykeystore -alias nom_alias -keyalg RSA -

keysize 2048 -validity 10000

Il faut ensuite signer le nouvel APK avec les outils du SDK Java

$ jarsigner -verbose -keystore mykeykeystore nom_applicationapk nom_alias

Enfin il est recommande drsquoaligner le code sur un multiple de 4 octets pour desraisons de performance

$ zipalign -v 4 nom_applicationapk nom_application_finalapk

Instrumentation Il est possible drsquoinstrumenter une application Java a lrsquoaide declasses specifiques a Android (androidappInstrumentation 55) Cette methodefournit des resultats detailles et personnalisables sur le fonctionnement interne drsquouneapplication elle necessite toutefois une decompilation et une modification prealablede lrsquoapplication a auditer

A lrsquoheure ou jrsquoecris ces lignes il nrsquoexiste pas (a ma connaissance) drsquooutil permettantde generaliser et drsquoautomatiser le processus a tout fichier APK Cette voie de recherchepourrait toutefois donner des resultats interessants

53 httpwwwaspectsecuritycomtoolsjavasnoop

54 httpcodegooglecompandroid-apktoolwikiSmaliDebugging

55 httpdeveloperandroidcomreferenceandroidappInstrumentationhtml

N Ruff 147

Outils specifiques Les outils disponibles actuellement dans le monde Android sontrudimentaires quoi que suffisants

Toutefois on peut raisonnablement estimer que la quantite et la qualite des outilsdisponibles va croitre de concert avec la popularite du systeme Android

A lrsquoheure ou jrsquoecris ces lignes la version 61 du logiciel IDA Pro 56 vient de sortirCette version ajoute le support du format DEX et du bytecode Dalvik ainsi que ledebogage a distance des applications Android natives

On peut supposer que drsquoautres outils couramment utilises par les auditeurs ensecurite vont etre mis a jour pour srsquoadapter au monde Android

6 Conclusion

Le systeme Android nrsquoa malheureusement pas profite de lrsquoopportunite unique quilui etait donnee repartir de la feuille blanche et creer un systeme drsquoexploitation sur par conception

A cause drsquoun heritage logiciel peu fiable ainsi que des contraintes materielles etcommerciales issues du monde de la telephonie mobile le systeme resultant est uncompromis qui laisse une large place a la creativite des attaquants

Celle-ci est drsquoautant plus exacerbee que la telephonie mobile est un phenomene demasse (il y a plus de telephones mobiles que drsquoordinateurs dans le monde) et que letelephone mobile est par conception un systeme de paiement (ce que nrsquoest pas un PCtraditionnel)

A ce tableau vient srsquoajouter 30 ans drsquoexperience dans le domaine des attaqueslogicielles appliquees a un ecosysteme applicatif qui nrsquoexistait pas il y a 5 ans

Toutes les conditions sont donc reunies pour que des attaques de grande ampleurmotivees par lrsquoargent se produisent contre les materiels grand public equipes dusysteme Android (telephones tablettes televisions )

La bonne nouvelle pour lrsquoexpert en securite crsquoest qursquoil est encore temps de srsquoymettre Android est suffisamment jeune et accessible aux nouveaux entrants ce quinrsquoest plus le cas de la plateforme PC ou les techniques drsquoattaque (ex exploitationdrsquoun heap overflow) et de defense (ex obfuscation logicielle) ont atteint des sommetsde raffinement desormais accessibles aux seuls experts les plus pointus du domaine

7 Sites et outils

71 Sites officiels

ndash Android portail officiel httpwwwandroidcom

56 httpwwwhex-rayscomidapro

148 Securite du systeme Android

ndash Android MarketPlace officielle httpsmarketandroidcomndash Android reference des developpeurs httpdeveloperandroidcom

72 Sites non officiels

ndash Reference de la machine virtuelle Dalvik httpdalvikvmcom

73 Outils tiers

ndash Google Android Debugging Utilities httpsitesgooglecomsiteortegaalfredoandroid

ndash Undx httpwwwillegalaccessorgundxhtmlndash SmaliBaksmali httpcodegooglecompsmalindash Dedexer httpdedexersourceforgenetndash Dex2Jar httpcodegooglecompdex2jarndash TaintDroid httpwwwappanalysisorg

ndash AndroGuard httpandroguardblogspotcom

References

1 Benjamin Morin Modele de securite drsquoAndroid MISC 51 2010

2 K Chen Reversing and exploiting an apple firmware update httpwwwblackhatcom

presentationsbh-usa-09CHENBHUSA09-Chen-RevAppleFirm-PAPERpdf BlackHat 2009

3 Alexandre Gazet Sticky fingers amp KBC Custom Shop httpwwwssticorg2011presentation

sticky_fingers_and_kbc_custom_shop SSTIC 2011

4 Loıc Duflot and Yves-Alexis Perez Quelques elements en matiere de securite des cartes reseau http

wwwssticorg2010presentationPeut_on_faire_confiance_aux_cartes_reseau SSTIC 2010

5 Alexander Tereshkin and Rafal Wojtczuk Introducing Ring -3 Rootkits httpwwwblackhat

compresentationsbh-usa-09TERESHKINBHUSA09-Tereshkin-Ring3Rootkit-SLIDESpdf Black-Hat USA 2009

6 Loıc Duflot Yves-Alexis Perez and Benjamin Morin Run-time firmware integrity verification what ifyou canrsquot trust your network card CanSecWest 2011

7 Ralf-Philipp Weinmann All Your Baseband Are Belong To Us httpeventscccdecongress

2010Fahrplanevents4090enhtml CCC 2010

8 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Formal Model to Analyzethe Permission Authorization and Enforcement in the Android Framework SecureComrsquo10

9 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Small but Non-negligibleFlaw in the Android Permission Scheme Wook Shin Sanghoon Kwak Shinsaku Kiyomoto KazuhideFukushima et Toshiaki Tanaka IEEE POLICY 2010

10 Marc Schonefled Reconstructing Dalvik Applications httpcansecwestcomcsw09

csw09-schoenefeldpdf CanSecWest 2009

N Ruff 149

11 Sergio Alvarez The Smart-Phones Nightmare (iPhone-oriented parts about Android) http

cansecwestcomcsw09csw09-alvarezpdf CanSecWest 2009

12 Nicolas Economou Alfredo Ortega Smartphone (in)security httpcansecwestcomcsw09

csw09-ortega-economoupdf CanSecWest 2009

13 Jesse Burns Exploratory Android Surgery httpwwwblackhatcompresentationsbh-usa-09

BURNSBHUSA09-Burns-AndroidSurgery-SLIDESpdf BlackHat USA 2009

14 Kevin Mahaffey John Hering App Attack httpsmediablackhatcombh-us-10presentations

Mahaffey_HeringBlackhat-USA-2010-Mahaffey-Hering-Lookout-App-Genome-slidespdf Black-Hat USA 2010

15 Nils The Risk you carry in your Pocket httpsmediablackhatcombh-ad-10Nils

Black-Hat-AD-2010-android-sandcastle-slidespdf BlackHat Abu Dhabi 2010

16 Raphael Rigo Android Reverse Engineering and Forensics httpsdeepsecnetdocsspeaker

htmlPSLOT45 DeepSec 2010

17 Itzhak Avraham Popping Shell on A(ndroid)RM Devices httpsmediablackhatcombh-dc-11

AvrahamBlackHat_DC_2011_Avraham-Popping_Android_Devices-Slidespdf BlackHat DC 2011

18 Jon Oberheide httpjonoberheideorgblog20100625remote-kill-and-install-on-google-android

19 Jon Oberheide httpjonoberheideorgblog20100628a-peek-inside-the-gtalkservice-connection

20 httpwwwandroidpolicecom20110301the-mother-of-all-android-

malware-has-arrived-stolen-apps-released-to-the-market-that-root-

your-phone-steal-your-data-and-open-backdoor

  • Seacutecuriteacute du systegraveme Android
  • N Ruff

132 Securite du systeme Android

Fabricants de materiels Les fabricants de materiels vivent dans un monde extremementconcurrentiel et doivent minimiser le cout de developpement de leurs produits pourque lrsquooperateur puisse au final proposer son telephone a 1 Par ailleurs ils doiventegalement minimiser le time to market un telephone portable se demode tresvite la duree de vie commerciale drsquoun systeme est de lrsquoordre de 6 mois

En consequence logique les developpements sont bacles Les systemes pousses enproduction sont a peine testes et les fonctions de debogage restent souvent activees(comme en temoigne le shell root disponible sur le port TCP12345 des series HTCEvo et HTC Hero commercialisees par Sprint 16)

En regle generale aucun support technique nrsquoest offert apres la sortie drsquountelephone Les mises a jour officielles de firmware sont rarissimes dans le domaine dela telephonie mobile - a lrsquoexception notable drsquoApple qui propose des mises a jourpour le systeme iOS dans la fenetre de support de ses equipements a savoir 21

2ans

Ceci conduit a la proliferation de firmwares non officiels dont lrsquoinnocuite et la stabilitene peuvent pas etre garantis

Dans le cas tres precis de mon telephone LG GW620 livre sous Android 15 LGFrance 17 a promis une mise a jour vers Android 16 pendant plus drsquoun an avant definalement se retracter Des firmwares Android 21 et 22 drsquoexcellente facture ndash maisnon officiels ndash ont donc ete developpes par des amateurs 18 Sous la pression de sesutilisateurs LG a fini par sortir un firmware officiel mais trop tard

Fabricants de logiciels La concurrence fait rage dans le domaine des systemesdrsquoexploitation pour ordiphones

Des lors les editeurs de systemes drsquoexploitation doivent seduire tous les autresacteurs quitte a diminuer les contraintes de securite

ndash Pour seduire les utilisateurs il semble necessaire de disposer du plus grandnombre drsquoapplications dans sa MarketPlaceBien qursquoon puisse questionner cette logique (ne serait-il pas plus interessant dedisposer drsquoapplications utiles fiables et bien realisees ) la guerre des chiffresest neanmoins lancee

ndash Pour seduire les developpeurs drsquoapplications il est necessaire de leur faciliter letravail au maximumLe choix du langage Java et la mise a disposition drsquoun SDK gratuit pour Eclipseva dans ce sens Mais Google va meme plus loin en mettant a disposition un SDK

16 httpwwwunrevokedcomrootwikidokuphppublicunrevoked1_disclosure

17 httptwittercomlg_blog_france

18 httpopenetnacomopenetna

N Ruff 133

visuel pour les gens nrsquoayant aucune notion de developpement 19 On peutse poser des questions sur la securite (et la qualite en general) des applicationsqui en sortirontLa signature drsquoapplications fut egalement pendant longtemps une pierre drsquoachop-pement Lors du lancement du programme Symbian Signed on a pu lireque Symbian voulait tuer les developpeurs independants HeureusementlrsquoAppStore a depuis prouve le contraire et Android nrsquoa eu aucun mal a imposerla signature des sa genese

ndash Seduire les fabricants de materiels est assez simple il suffit de produire unsysteme gratuit et drsquoen assurer une bonne partie du support Ajoutez a celaune forte demande du marche et tout est en place pour garantir le succes

Circuits de distribution Lrsquoessentiel des ordiphones sont commercialises par lesoperateurs de telephonie mobile (Google ayant drsquoailleurs essuye un echec commercialsur la vente en direct du Nexus One)

Comme la plupart des acteurs de la chaine les operateurs cherchent a maximiserleurs revenus parfois au detriment de la securite

ndash Les operateurs personnalisent les systemes drsquoexploitation en y ajoutant desbogues

ndash Les operateurs tentent de rendre payantes des fonctions natives incitant de cefait les utilisateurs au piratage

Parmi les inventions geniales du marketing on peut citer le bridage du tethering(utilisation du telephone comme modem 3G) la geolocalisation payante (alors que letelephone dispose drsquoun GPS integre) lrsquoimpossibilite de regarder la tele ou drsquoecouterde la musique sur un lien WiFi (mais pas sur un lien 3G) etc

Des lors les utilisateurs sont tentes de debrider leur telephone (jailbreaking)drsquoinstaller des applications tierce partie douteuses voire drsquoinstaller des systemes nonofficiels sans garantie drsquoinnocuite

Developpeurs drsquoapplications Lrsquoun des moyens les plus efficaces pour seduire lesdeveloppements est de leur promettre des revenus consequents Pas facile dans unmonde ou la plupart des applications sont gratuites ou dont le prix nrsquoexcede pas 1

Tout drsquoabord le processus drsquoachat drsquoapplications est relativement simple grace aGoogle Checkout lorsque lrsquooperateur ne fournit pas lui-meme le service de facturationau travers de sa MarketPlace Pour les applications financees par la publicite lareputation de Google dans le domaine nrsquoest plus a faire (surtout depuis le rachat dela societe AdMob specialisee dans le domaine de la publicite sur mobiles)

19 httpappinventorgooglelabscomabout

134 Securite du systeme Android

Contrairement a ce qursquoon pourrait croire les deux methodes generent des reve-nus comparables comme le revele lrsquoauteur drsquoune application inutile mais pourtanttelechargee presque 100 000 fois a savoir Advanced Task Manager 20

Les developpeurs attires par des revenus encore plus rapides pourront etre tentespar le cote obscur de la telephonie mobile appels et SMS surtaxes vol (et revente)du carnet drsquoadresses collecte de lrsquohistorique du navigateur etc

Ce phenomene est loin drsquoetre marginal certaines applications etant clairementmalveillantes ndash comme SMSAndroidOSFakePlayera ou les applications editeespar 09Droid qui se font passer pour des applications bancaires officielles ndash drsquoautresetant simplement a la limite du marketing agressif ndash comme celles de lrsquoediteur francaisZeuzz

Plusieurs etudes soulignent la dangerosite des MarketPlaces generalement fi-nancees par les editeurs antivirus ces etudes ne sont toutefois pas drsquoune qualitescientifique suffisante pour etre citees ici Le risque semble neanmoins reel puisqueGoogle a retire en urgence des dizaines drsquoapplications de la MarketPlace dans le cadrede lrsquoaffaire DroidDream (nous y reviendrons)

42 Failles logicielles

Etat des lieux Compte-tenu de lrsquoutilisation massive de code Open Source dans lesysteme Android les failles drsquoimplementation logicielle sont faciles a identifier il suffitde suivre les alertes de securite des principaux projets Lorsqursquoils sont disponibles cequi nrsquoest pas forcement le cas pour le noyau Linux

Les vecteurs principaux (en termes de nombre de lignes de code et drsquoexposition)sont le systeme Linux et le navigateur Web (et particulierement le moteur WebKitcommun avec Safari)

Il ne faut pas oublier non plus qursquoAndroid integre Flash Player et vit avec lesmemes failles 21

Failles navigateur Comme dans tout navigateur Web de complexite importanteles failles sont nombreuses Ces failles nrsquoen restent pas moins dangereuses car ellesont ete demontrees exploitables sur Android 22 23

Lrsquoune drsquoentre elles est meme disponible dans Metasploit 24 Il srsquoagit drsquoune faillerelativement grave qui permet de lire nrsquoimporte quel fichier du telephone accessible

20 httparronlacom201008android-revenue-advanced-task-manager

21 httpwwwtheinquirernetinquirernews2034092android-smartphones-attack-flash-player-hackers

22 httpwwwexploit-dbcomexploits15423

23 httpwwwexploit-dbcomexploits16974

24 httpblogmetasploitcom201101mobile-device-security-and-android-filehtml

N Ruff 135

au processus navigateur - ce qui inclut lrsquointegralite de la carte SD puisque celle-ci estformatee en FAT (donc sans aucun controle drsquoacces)

On notera dans cette attaque lrsquoutilisation de lrsquoURL contentcomandroid

htmlfileproviderltfilenamegt qui permet de lire nrsquoimporte quel fichier du telephoneau travers drsquoun Content Provider 25 ndash une notion specifique a Android qui prometdrsquoetre encore source de nombreuses failles vu la surface drsquoattaque exposee

Par ailleurs outre les schemas traditionnels (file http etc) Androidsupporte par defaut des schemas plus specifiques et donc moins testes

Parmi les schemas supportes on peut citer content (qui permet de com-muniquer avec un Content Provider) market (qui permet drsquointeragir avec laMarketPlace comme par exemple marketdetailsid=ltpackagegt) ou android

resource (qui permet drsquoacceder a une ressource dans un paquet comme parexemple androidresourceltpaquetgtltressourcegt)

Failles systeme Les failles systeme ne sont pas legion mais ont toutes un impactcritique sur la securite du systeme

Parmi les failles les plus connues (car les plus exploitees dans la nature ) onpeut citer les failles publiees sur le site xSports 26 a savoir

ndash Exploid faille udev bien connue des administrateurs Linux CVE-2009-1185

ndash Rage Against The Cage faille liee au mauvais comportement du processusadb lorsque RLIMIT NPROC a ete atteint 27 - lrsquoappel a setuid() echoue mais leprocessus nrsquoen tient pas compte et continue son execution son lrsquoidentite root

ndash Killing In The Name Of faille permettant de modifier la valeur de la constanteglobale (normalement en lecture seule) rosecure en jouant sur une erreurdrsquoimplementation de devashmem Cette constante definie a la compilationdu systeme indique au processus adb srsquoil doit srsquoexecuter sous lrsquoidentite root 28

Les applications legitimes (comme VISIONary+ 29) ou malveillantes (la pluscelebre ayant probablement ete DroidDream [20] ) ne se privent pas drsquoexploiter cesfailles dans la nature

Il faut toutefois noter qursquoil existe une difference subtile entre obtenir un accesroot et obtenir un acces root persistant au redemarrage du telephone En effetbien qursquoil soit virtuellement possible drsquoecrire dans le repertoire system (au traversde la commande adb remount ou drsquoun remount rw a lrsquointerieur du terminal) un

25 httpdeveloperandroidcomguidetopicsproviderscontent-providershtml

26 httpstealthopenwallnetxSports

27 httpdtorsorg20100825reversing-latest-exploid-release

28 httpsourceandroidcomportingbuild_systemhtml

29 httpandroidmodacocomcontentsoftware32035019-nov-r14-visionary-one-click-root

136 Securite du systeme Android

certain nombre de telephones modernes disposent drsquoune protection contre le reflashageintempestif de la partition systeme Cette protection est souvent liee a lrsquoutilisationdrsquoun composant memoire capable de verifier une signature cryptographique (parexemple un composant eMMC 30)

Dans le jargon on dit que la possibilite de reflasher la partition systeme avecun firmware non signe necessite un telephone en mode S-OFF Sur de nombreuxtelephones de marque HTC 31 le mode courant (S-ON ou S-OFF) peut etre obtenuen appuyant sur la touche Volume Down au demarrage du telephone

Failles logiques Il existe une categorie de failles difficiles a detecter et pourtantdevastatrices les failles logiques

Lrsquoun des exemples les plus fameux est le deblocage du telephone en utilisant soncompte Google Dans certains cas de corruption de donnees ce processus peut echouercomme documente officiellement par Google 32

Dans ce cas le telephone doit normalement etre reinitialise en configuration drsquousine(lorsque crsquoest possible ndash la procedure exacte depend du constructeur) Heureusementil srsquoavere que le mot de passe null est toujours accepte comme valide

Un autre bogue celebre affecte le Motorola Droid et potentiellement drsquoautresLorsque le telephone est verrouille mais qursquoun appel entrant arrive il est possibledrsquoappuyer sur le bouton Back et ainsi drsquoarriver a lrsquoecran drsquoaccueil du telephone 33

Enfin une superbe faille logique a ete decouverte sur le site httpsmarket

androidcom qui permet drsquoinstaller a distance des applications sur un telephoneAndroid Grace a une faille de type XSS persistant sur ce site 34 il etait possible defaire installer une application puis de lrsquoexecuter automatiquement sur le telephonede nrsquoimporte quel utilisateur Un utilisateur pouvait etre victime de cette attaque encliquant sur un lien depuis son telephone ou son PC (sous reserve drsquoetre logue sousson compte Google)

La technique utilisee pour executer automatiquement lrsquoapplication apres soninstallation merite drsquoetre soulignee elle consiste a declarer dans le manifeste delrsquoapplication que celle-ci supporte un nouveau schema drsquoURI (par exemple trigger

) puis a invoquer un lien trigger depuis la page Web drsquoorigine

Que peut-on faire Compte-tenu de la quantite de code C embarque dans lesysteme Android il existe et il existera des bogues drsquoimplementation dans ce systeme

30 httpenwikipediaorgwikiMultiMediaCardeMMC

31 Un site de reference pour les telephones de marque HTC httpunrevokedcom32 httpcodegooglecompandroidissuesdetailid=3006

33 httptechcrunchcom20100111verizon-droid-security-bug

34 httpjonoberheideorgblog20110307how-i-almost-won-pwn2own-via-xss

N Ruff 137

conduisant pour certains a des failles de securite WebKit et le systeme Linux sontdes cibles de choix compte-tenu de la surface drsquoattaque exposee

Toutefois et contrairement a un systeme classique la mise a jour a grandeechelle srsquoavere extremement problematique pour plusieurs raisons

ndash Le facteur drsquoechelle (plusieurs millions drsquounites en circulation rien qursquoen France)ndash La diversite et le haut degre de personnalisation des plateformes materielles et

logiciellesndash La propriete du terminal (lorsqursquoil a ete achete par lrsquoutilisateur)ndash Les risques commerciaux en cas de blocage definitif du terminal (brick)On peut raisonnablement considerer qursquoen dehors du geek moyen aucun utilisateur

de smartphone sous Android nrsquoa jamais mis a jour son systemeLes statistiques officielles de Google sur la repartition des ordiphones par version

drsquoAndroid permettent de se faire une idee objective sur la vitesse de renouvellementdu parc 35 A lrsquoheure ou jrsquoecris ces lignes malgre la disponibilite du systeme Android23 la majorite du parc se compose encore de systemes Android 21 et 22 ndash sanscompter sur les irreductibles 6 qui disposent drsquoune version anterieure Je laisseaux statisticiens le soin de produire une etude plus detaillee qui sera neanmoinsbiaisee par le fait que les donnees mondiales sont agregees tandis que les politiquesde renouvellement des operateurs sont tres variables drsquoun pays a lrsquoautre

Dans ces conditions il est loin le moment ou un operateur mobile fera du NAC-NAP sur son reseau pour interdire la connexion de ordiphones qui ne sont pas a jourdes correctifs

Techniquement le protocole FOTA (Firmware Over-The-Air) permet toutefoisde mettre a jour a distance des terminaux Ce protocole a deja ete utilise a grandeechelle lorsqursquoune backdoor (exploitable a distance) a ete decouverte sur certainstelephones HTC de modele Hero et Evo

5 Audit drsquoapplications Android

51 Auditer pourquoi

Lrsquoaudit securite drsquoapplications tierces est une activite vieille comme le conseil ensecurite Toutefois le circuit de distribution logicielle etant assez different entre lemonde du logiciel drsquoentreprise et les MarketPlaces pour mobiles il est vrai que laquestion merite drsquoetre posee a nouveau

A lrsquoheure ou jrsquoecris ces lignes Google nrsquoeffectue aucune verification de securite surles applications publiees dans lrsquoAndroid Market Cet etat de fait pourrait changer

35 httpdeveloperandroidcomresourcesdashboardplatform-versionshtml

138 Securite du systeme Android

compte-tenu de la proliferation drsquoapplications malveillantes de plus en plus agressiveset sophistiquees

Parmi tous les risques lies aux terminaux mobiles (vol de lrsquoequipement intrusionvia une faille du navigateur etc) on constate dans les faits que le risque principalaujourdrsquohui est la proliferation drsquoapplications malveillantes La malveillance estune notion assez floue et certaines applications peuvent se situer dans une zone grise - comme lrsquoapplication de voix sur IP Viber 36 qui duplique tous les contactsde lrsquoutilisateur sur un serveur central faisant office drsquoannuaire telephonique Maisdrsquoautres applications font lrsquounanimite contre elles comme les applications utilisant desfailles systeme pour elever leurs privileges vers root etou envoyer des SMS surtaxessans le consentement de lrsquoutilisateur Ces applications sont drsquoailleurs tuees parGoogle une fois identifiees car elles violent clairement les regles drsquoutilisation delrsquoAndroid Market

Les circuits qui conduisent a lrsquoapparition drsquoune application malveillante sontmultiples

ndash Malveillance deliberee de lrsquoauteur qui veut gagner de lrsquoargent rapidement Crsquoestle cas le plus simple Un scenario courant consiste a cloner une applicationen vogue tout en y ajoutant du code malveillant

ndash Compromission drsquoun editeur drsquoapplications a son insu Crsquoest la ligne de defenseadoptee par plusieurs editeurs drsquoapplications apres avoir ete pointe du doigtCette defense est malheureusement credible car la plupart des developpeurs sontdes individus isoles ou des micro-entreprises attirees par les success stories a laAngry Birds et bien souvent sans aucune securite dans les developpements

ndash Integration de librairies tierce partie malveillantes dans un programme sainLrsquoauteur drsquoune application populaire (a savoir Tank Hero ) a ainsi an-nonce avoir ete contacte par un fournisseur drsquoapplications probablementmalveillantes qui lui proposait un accord commercial 37

Mais lrsquoidentification des applications malveillantes nrsquoest pas la seule raison quipeut conduire a auditer une application Android Parmi drsquoautres raisons legitimes on peut citer

ndash Verifier que lrsquoapplication fait bien ce qursquoelle pretend faire Ce point est parti-culierement critique pour les applications de securite qui mettent en œuvre duchiffrement ou de la gestion de mots de passe par exemple Dans le domaineles surprises sont nombreuses drsquoautant que les applications mobiles nrsquoont pasencore la maturite des applications bureautiques et que les contraintes

36 httpwwwvibercom

37 httpwwwredditcomrAndroidcommentsfm3cuspyware_company_wants_us_to_embed_

their_code_into

N Ruff 139

du monde embarque se font sentir (puissance de calcul sources drsquoentropieremanence de lrsquoallocateur memoire Java etc)

ndash Recherche des failles de securite Et oui les applications Android sont aussivulnerables aux buffer overflows lorsqursquoelles utilisent du code natif (compileavec le NDK) et meme des injections SQL (meme si SQLite nrsquoimplemente pasdrsquoequivalent a xp cmdshell) Il existe par ailleurs des attaques specifiques aumonde Android comme les BroadcastReceiver qui ne verifieraient pas la sourcedes messages recus

Le probleme principal avec lrsquoaudit drsquoapplications Android nrsquoest pas techniqueLe probleme crsquoest lrsquoeuphorie du marche proliferation drsquoapplications et mises a jourfrequentes qui obligent a automatiser et industrialiser les audits 38

52 Auditer comment

Lrsquoaudit securite est une tache difficile a modeliser car elle tire parti de la creativitede lrsquoauditeur On peut toutefois identifier les grandes lignes suivantes

1 Recuperer lrsquoapplication

2 Decompresser les ressources

3 Desassembler le bytecode

4 Decompiler le bytecode (lorsque crsquoest possible)

5 Desassembler le code natif

6 Deboguer lrsquoapplication en cours drsquoexecution (sur un telephone reel ou danslrsquoemulateur)

Cette methodologie nrsquoest pas exhaustive elle ne donne pas acces au contenutelecharge ulterieurement (par exemple au travers des publicites integrees) Voyonsles methodes et les difficultes associees a chaque etape

Recuperer lrsquoapplication Cette etape nrsquoest pas trop compliquee pour qui est preta installer lrsquoapplication cible sur son telephone Apres installation le fichier APK estconserve dans le repertoire dataapp Selon les permissions appliquees au systeme defichiers il nrsquoest pas necessairement possible de lister le contenu de ce repertoire maisles paquets restent lisibles par lrsquooutil adb et le nom de paquet peut etre determinedepuis la MarketPlace ou le menu parametres du telephone (le nom exact estpaquet-Napk ou N vaut generalement 1)

38 httpwwwappanalysisorg

140 Securite du systeme Android

Toute autre methode est complexe et probablement illegale Parmi les methodespossibles on peut citer lrsquoinstallation de lrsquoapplication MarketPlace dans un emulateurou le reverse engineering de lrsquoapplication MarketPlace a des fins de reimplementation(cette derniere etant toutefois volumineuse donc complexe a analyser)

Depuis la version 22 du systeme Android et si lrsquoapplication lrsquoautorise il estpossible drsquoinstaller une application sur la carte SD Mais lrsquoapplication est alorsstockee dans un fichier asec chiffre Ce fichier est inexploitable jusqursquoa ce quele mecanisme et la cle de chiffrement soient connus

On peut imaginer qursquoune application extremement malveillante pourrait exploiterune faille des lrsquoinstallation pour elever ses privileges vers root et dissimuler ses traces(ie se rendre inaccessible de lrsquoexterieur) Ce cas ne srsquoest pas encore produit dansla nature a lrsquoheure ou jrsquoecris ces lignes mais srsquoavere techniquement faisable

Il faut noter que la MarketPlace de Google nrsquoest pas la seule disponible maisqursquoil existe egalement des MarketPlaces drsquooperateurs ou de tiers ainsi Amazoncommercialise desormais des applications Android 39 Cette proliferation complexifiedrsquoautant la tache drsquoanalyse des MarketPlaces La methode la plus universelle pourrecuperer la source drsquoinstallation drsquoune application reste donc de lrsquoinstaller sur untelephone

Un utilisateur peut installer des applications depuis des sources externes a laMarketPlace si lrsquooption autoriser les sources inconnues est cochee dans lesparametres de configuration Il existe des applications legitimes accessibles en dehorsdes MarketPlaces mais il existe egalement des bases drsquoapplications piratees surInternet dont lrsquoinnocuite ne peut pas etre garantie

Notons que certaines applications meme parmi celles disponibles sur les Market-Places officielles exigent au prealable un acces root au telephone

Decompresser les ressources Les fichiers places a lrsquointerieur drsquoun paquet APKsont optimises drsquoune maniere ou drsquoune autre avant drsquoetre compresses Ceci srsquoappliqueaussi bien au bytecode qursquoaux ressources textuelles (comme les fichiers XML)

Lrsquoune des optimisations principales est la deduplication de donnees Ainsi ilnrsquoexiste qursquoune seule instance de chaque chaine de caracteres dans un fichier DEXDifferents encodages optimises sont egalement utilises tel que LEB128 pourla representation des entiers (Little Endian Base 128 aussi utilise dans le formatDWARF)

Toutes ces optimisations nrsquoont pas pour but la protection logicielle et sont parfai-tement reversibles Lrsquooutil aapt fourni avec le SDK officiel permet ainsi drsquoexplorerle contenu du manifeste drsquoun paquet APK Les techniques drsquooptimisation ont ete

39 httpwwwamazoncomappstore

N Ruff 141

analysees et documentees par des tiers ce qui a permis la production drsquooutils dedecompression comme apktool 40

Desassembler le bytecode Avec le SDK officiel est fourni lrsquooutil dexdump quipermet de lister le bytecode contenu dans un fichier CLASSESDEX

Le format de fichier DEX a ete lui aussi analyse et documente 41 ce qui a permisla production de desassembleurs tiers comme baksmali

Le code genere suit la syntaxe Jasmin 42 bien connue dans le monde Java tra-ditionnel Cette syntaxe peut sembler obscure de prime abord mais elle est par-faitement reguliere donc finalement tres simple a apprehender Prenons un exempleissu drsquoune application reelle voici ci-dessous le code drsquoune methode appeleeemptyResult telle que produit par baksmali

method protected static emptyResult(LjavalangString )Z

locals 1

parameter result

prologue

line 306

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Toutes les directives commencent par un point Leur nom est relativement explicitelocals 1 va par exemple indiquer la presence drsquoune seule variable locale Le nomassigne aux opcodes de la machine virtuelle est egalement assez parlant

pN represente lrsquoargument numero N passe a la methode vN represente le re-gistre numero N (Dalvik est une machine virtuelle a registres et non a pile)

Munis de ces informations decortiquons la seule operation reellement complexeeffectuee dans cet extrait de code

40 httpcodegooglecompandroid-apktool

41 httpwwwnetmitecomandroidmydroiddalvikdocsdex-formathtml

42 httpjasminsourceforgenet

142 Securite du systeme Android

invoke-static Invoque une methode sta-tique Il existe egalementun opcode invoke-virtual

pour les methodes virtuellesinvoke-super pour la methodede la superclasse etc

p0 La methode appelee prend unseul argument La valeur de cetargument provient du premierargument passe a la methodeemptyResult

LcomutilsStringUtils-gtisEmpty Invoque la methode isEmpty de laclasse comutilsStringUtils L est un prefixe accole a tousles litteraux

(LjavalangString) Le premier (et seul) argument estde type javalangString

Z La methode retourne un booleen

A titre de reference voici les differents types natifs disponibles dans Jasmin

Z BooleenB OctetC CaractereS Entier court (16 bits)I Entier (32 bits)J Entier long (64 bits)F Flottant (32 bits)D Double (64 bits)

Lrsquoavantage majeur de lrsquooutil tiers apktool est la possibilite de modifier le bytecodeou les ressources drsquoune application puis de la recompiler dans une version fonctionnelleCeci permet drsquoutiliser une technique drsquoanalyse aussi ancienne que lrsquoinformatiqueappelee printf debugging

Dans le monde Android lrsquoutilisation de Systemout doit etre remplacee parandroidutilLog Cette classe definit plusieurs methodes ndash respectivement v d iw e et wtf ndash qui correspondent chacune a un niveau de verbosite ndash et dont lesarguments sont enregistres dans le journal systeme (sauf le niveau debug) Cejournal peut etre consulte a lrsquoaide de la commande adb logcat apparait en temps

N Ruff 143

reel dans lrsquooutil DDMS et peut egalement etre consulte par toute application quidispose de la permission READ LOGS

Si lrsquoon souhaite connaitre lrsquoargument passe a la methode emptyResult danslrsquoexemple precedent il suffit alors drsquoajouter un appel a nrsquoimporte quelle methode dela classe Log de la maniere suivante

method protected static emptyResult(LjavalangString )Z

locals 2

parameter result

prologue

line 306

const -string v1 PrintfDebuggingStyle

invoke -static v1 p0 LandroidutilLog-gtd(LjavalangStringLjavalang

String )I

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Une variable locale v1 a ete ajoutee contenant une chaine de caracteres fixe Lamethode d() est ensuite invoquee Cette modification est equivalente au code Javasuivant

Logd(PrintfDebuggingStyle ltp0 gt)

On peut constater experimentalement que de nombreuses applications de laMarketPlace font usage de lrsquoAPI Log ce qui permet de collecter des donnees defonctionnement parfois tres (trop) interessantes

Le journal systeme peut etre collecte a distance par un developpeur lors ducrash de son application si lrsquoutilisateur lrsquoautorise Cette technique a ete presenteepar Renaud Lifchitz lors de la conference 27c3 pour espionner les deplacements drsquounutilisateur 43

Decompiler le bytecode Comme avec tout bytecode de haut niveau (ex JavaNET) la semantique de lrsquoapplication est conservee

Il est donc possible de decompiler du bytecode Dalvik et de reconstruire le codeJava drsquoorigine (sans les commentaires ndash seule information perdue a la compilation) Lepremier outil public capable drsquoune telle operation fut undx 44 de Marc Schoenefeld Cetoutil est toutefois bogue et non maintenu par son auteur Le meilleur outil disponibleactuellement est lrsquooutil dex2jar 45 qui reconstruit du bytecode Java a partir du

43 httpeventscccdecongress2010Fahrplanevents4151enhtml

44 httpwwwillegalaccessorgundxhtml

45 httpcodegooglecompdex2jar

144 Securite du systeme Android

bytecode Dalvik Les outils classiques de decompilation Java 46 47 srsquoappliquentalors

Compte-tenu de la facilite deconcertante avec laquelle il est possible drsquoanalyserles applications Android (et donc de les craquer entre autres) Google a mis adisposition des developpeurs une bibliotheque tres complete de gestion des licences enligne Licensing Verification Library (LVL) 48 Toutes les versions de cette bibliothequeont malheureusement ete craquees elles aussi a lrsquoheure ou jrsquoecris ces lignes

Une autre contre-mesure mise en place par Google consiste a integrer un obfusca-teur de bytecode dans la chaine de compilation ProGuard 49 Cet outil relativementpuissant est configurable par le developpeur au travers du fichier proguardcfg toutefois le fichier de configuration par defaut (reproduit ci-apres) nrsquoopere que lerenommage des classes et methodes invisibles a lrsquoexterieur de lrsquoapplication ce qui estpeu efficace face a un attaquant determine

-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontpreverify

-verbose

-optimizations codesimplificationarithmetic field classmerging

-keep public class extends androidappActivity

-keep public class extends androidappApplication

-keep public class extends androidappService

-keep public class extends androidcontentBroadcastReceiver

-keep public class extends androidcontentContentProvider

-keep public class extends androidappbackupBackupAgentHelper

-keep public class extends androidpreferencePreference

-keep public class comandroidvendinglicensingILicensingService

-keepclasseswithmembernames class

native ltmethods gt

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet)

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet int)

-keepclassmembers enum

public static [] values ()

public static valueOf(javalangString)

46 httpmembersfortunecitycomneshkovdjhtml

47 httpjavadecompilerfreefr

48 httpdeveloperandroidcomguidepublishinglicensinghtml

49 httpdeveloperandroidcomguidedevelopingtoolsproguardhtml

N Ruff 145

-keep class implements androidosParcelable

public static final androidosParcelable$Creator

Au vu des resultats obtenus on peut considerer que lrsquoobfuscation de bytecode Javadans le monde Android est en retard sur lrsquoobfuscation de code x86 dans le monde PCLes techniques de complexification du flot de controle ou de construction dynamiquedes constantes ne sont pas encore repandues dans les applications commerciales pourAndroid Afin de combler ce manque des projets paralleles (comme AndroGuard 50)fleurissent - mais on peut supposer que la solution integree au SDK fourni par Googlerestera la solution majoritairement utilisee par les applications (pour des raisons desimplicite evidentes)

Desassembler du code natif Lors de lrsquoaudit drsquoune application Android il estpossible de rencontrer du code natif dans deux cas

1 Lrsquoapplication contient des bibliotheques natives compilees avec le NDK

2 Lrsquoapplication contient des applications natives ou srsquoavere etre elle-meme uneapplication native Ce cas est courant avec les applications malveillantes quiembarquent du code natif pour exploiter des failles noyau 51

Dans les deux cas Android ne presente aucune specificite par rapport a unLinuxARM classique Les fichiers natifs sont au format ELF La chaine de compilationnative est construite autour du compilateur GCC Tous les outils sont disponiblesdepuis longtemps pour analyser des tels binaires (ex IDA Pro Hex-Rays DecompilerARM etc)

Deboguer lrsquoapplication Une application Java compilee en mode debug peutetre deboguee a distance au travers du protocole standard Java Debug Wire Protocol(JDWP) defini dans le cadre de Java Platform Debugger Architecture (JPDA)

Les environnements de developpement Java classiques (comme Eclipse) per-mettent ainsi de deboguer une application a distance une fois celle-ci installee sur letelephone

Il est egalement possible drsquoutiliser le venerable JDB (fourni avec le SDK Java 52)bien que cet outil nrsquoait jamais depasse le statut de preuve de concept a mon avis

Lrsquooutil DDMS fourni avec le SDK Android repose egalement sur JPDA Cetoutil ne permet toutefois pas le debogage drsquoapplications mais seulement lrsquoanalyse deperformance

50 httpcodegooglecompandroguard

51 httpstealthopenwallnetxSports

52 httpdownloadoraclecomjavase142docstooldocssolarisjdbhtml

146 Securite du systeme Android

La liste des applications pouvant etre deboguees sur un systeme Android srsquoobtientavec la commande adb jdwp

Le vrai probleme se pose pour les applications qui nrsquoont pas ete compilees enmode debug Ceci implique que le manifeste de lrsquoapplication ne contient pasdrsquoentree ltapplication androiddebuggable=truegt De plus la plupart des outilsde debogage Java necessitent que le bytecode contienne des indications sur les numerosde lignes dans le code source drsquoorigine (il srsquoagit drsquoune limitation arbitraire qui nesrsquoapplique pas a lrsquooutil JavaSnoop 53 par exemple)

Fort heureusement il est possible de desassembler ces applications puis de lesreassembler en mode debug avec lrsquooutil apktool 54 Le processus est complexe etle resultat peu convivial mais il a le merite drsquoexister

Pour reinstaller lrsquoapplication modifiee sur un equipement reel il est necessairede la signer a nouveau La procedure est simple et parfaitement documentee parGoogle

Il faut drsquoabord generer une cle personnelle autosignee a duree de vie extremementlongue

$ keytool -genkey -v -keystore mykeykeystore -alias nom_alias -keyalg RSA -

keysize 2048 -validity 10000

Il faut ensuite signer le nouvel APK avec les outils du SDK Java

$ jarsigner -verbose -keystore mykeykeystore nom_applicationapk nom_alias

Enfin il est recommande drsquoaligner le code sur un multiple de 4 octets pour desraisons de performance

$ zipalign -v 4 nom_applicationapk nom_application_finalapk

Instrumentation Il est possible drsquoinstrumenter une application Java a lrsquoaide declasses specifiques a Android (androidappInstrumentation 55) Cette methodefournit des resultats detailles et personnalisables sur le fonctionnement interne drsquouneapplication elle necessite toutefois une decompilation et une modification prealablede lrsquoapplication a auditer

A lrsquoheure ou jrsquoecris ces lignes il nrsquoexiste pas (a ma connaissance) drsquooutil permettantde generaliser et drsquoautomatiser le processus a tout fichier APK Cette voie de recherchepourrait toutefois donner des resultats interessants

53 httpwwwaspectsecuritycomtoolsjavasnoop

54 httpcodegooglecompandroid-apktoolwikiSmaliDebugging

55 httpdeveloperandroidcomreferenceandroidappInstrumentationhtml

N Ruff 147

Outils specifiques Les outils disponibles actuellement dans le monde Android sontrudimentaires quoi que suffisants

Toutefois on peut raisonnablement estimer que la quantite et la qualite des outilsdisponibles va croitre de concert avec la popularite du systeme Android

A lrsquoheure ou jrsquoecris ces lignes la version 61 du logiciel IDA Pro 56 vient de sortirCette version ajoute le support du format DEX et du bytecode Dalvik ainsi que ledebogage a distance des applications Android natives

On peut supposer que drsquoautres outils couramment utilises par les auditeurs ensecurite vont etre mis a jour pour srsquoadapter au monde Android

6 Conclusion

Le systeme Android nrsquoa malheureusement pas profite de lrsquoopportunite unique quilui etait donnee repartir de la feuille blanche et creer un systeme drsquoexploitation sur par conception

A cause drsquoun heritage logiciel peu fiable ainsi que des contraintes materielles etcommerciales issues du monde de la telephonie mobile le systeme resultant est uncompromis qui laisse une large place a la creativite des attaquants

Celle-ci est drsquoautant plus exacerbee que la telephonie mobile est un phenomene demasse (il y a plus de telephones mobiles que drsquoordinateurs dans le monde) et que letelephone mobile est par conception un systeme de paiement (ce que nrsquoest pas un PCtraditionnel)

A ce tableau vient srsquoajouter 30 ans drsquoexperience dans le domaine des attaqueslogicielles appliquees a un ecosysteme applicatif qui nrsquoexistait pas il y a 5 ans

Toutes les conditions sont donc reunies pour que des attaques de grande ampleurmotivees par lrsquoargent se produisent contre les materiels grand public equipes dusysteme Android (telephones tablettes televisions )

La bonne nouvelle pour lrsquoexpert en securite crsquoest qursquoil est encore temps de srsquoymettre Android est suffisamment jeune et accessible aux nouveaux entrants ce quinrsquoest plus le cas de la plateforme PC ou les techniques drsquoattaque (ex exploitationdrsquoun heap overflow) et de defense (ex obfuscation logicielle) ont atteint des sommetsde raffinement desormais accessibles aux seuls experts les plus pointus du domaine

7 Sites et outils

71 Sites officiels

ndash Android portail officiel httpwwwandroidcom

56 httpwwwhex-rayscomidapro

148 Securite du systeme Android

ndash Android MarketPlace officielle httpsmarketandroidcomndash Android reference des developpeurs httpdeveloperandroidcom

72 Sites non officiels

ndash Reference de la machine virtuelle Dalvik httpdalvikvmcom

73 Outils tiers

ndash Google Android Debugging Utilities httpsitesgooglecomsiteortegaalfredoandroid

ndash Undx httpwwwillegalaccessorgundxhtmlndash SmaliBaksmali httpcodegooglecompsmalindash Dedexer httpdedexersourceforgenetndash Dex2Jar httpcodegooglecompdex2jarndash TaintDroid httpwwwappanalysisorg

ndash AndroGuard httpandroguardblogspotcom

References

1 Benjamin Morin Modele de securite drsquoAndroid MISC 51 2010

2 K Chen Reversing and exploiting an apple firmware update httpwwwblackhatcom

presentationsbh-usa-09CHENBHUSA09-Chen-RevAppleFirm-PAPERpdf BlackHat 2009

3 Alexandre Gazet Sticky fingers amp KBC Custom Shop httpwwwssticorg2011presentation

sticky_fingers_and_kbc_custom_shop SSTIC 2011

4 Loıc Duflot and Yves-Alexis Perez Quelques elements en matiere de securite des cartes reseau http

wwwssticorg2010presentationPeut_on_faire_confiance_aux_cartes_reseau SSTIC 2010

5 Alexander Tereshkin and Rafal Wojtczuk Introducing Ring -3 Rootkits httpwwwblackhat

compresentationsbh-usa-09TERESHKINBHUSA09-Tereshkin-Ring3Rootkit-SLIDESpdf Black-Hat USA 2009

6 Loıc Duflot Yves-Alexis Perez and Benjamin Morin Run-time firmware integrity verification what ifyou canrsquot trust your network card CanSecWest 2011

7 Ralf-Philipp Weinmann All Your Baseband Are Belong To Us httpeventscccdecongress

2010Fahrplanevents4090enhtml CCC 2010

8 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Formal Model to Analyzethe Permission Authorization and Enforcement in the Android Framework SecureComrsquo10

9 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Small but Non-negligibleFlaw in the Android Permission Scheme Wook Shin Sanghoon Kwak Shinsaku Kiyomoto KazuhideFukushima et Toshiaki Tanaka IEEE POLICY 2010

10 Marc Schonefled Reconstructing Dalvik Applications httpcansecwestcomcsw09

csw09-schoenefeldpdf CanSecWest 2009

N Ruff 149

11 Sergio Alvarez The Smart-Phones Nightmare (iPhone-oriented parts about Android) http

cansecwestcomcsw09csw09-alvarezpdf CanSecWest 2009

12 Nicolas Economou Alfredo Ortega Smartphone (in)security httpcansecwestcomcsw09

csw09-ortega-economoupdf CanSecWest 2009

13 Jesse Burns Exploratory Android Surgery httpwwwblackhatcompresentationsbh-usa-09

BURNSBHUSA09-Burns-AndroidSurgery-SLIDESpdf BlackHat USA 2009

14 Kevin Mahaffey John Hering App Attack httpsmediablackhatcombh-us-10presentations

Mahaffey_HeringBlackhat-USA-2010-Mahaffey-Hering-Lookout-App-Genome-slidespdf Black-Hat USA 2010

15 Nils The Risk you carry in your Pocket httpsmediablackhatcombh-ad-10Nils

Black-Hat-AD-2010-android-sandcastle-slidespdf BlackHat Abu Dhabi 2010

16 Raphael Rigo Android Reverse Engineering and Forensics httpsdeepsecnetdocsspeaker

htmlPSLOT45 DeepSec 2010

17 Itzhak Avraham Popping Shell on A(ndroid)RM Devices httpsmediablackhatcombh-dc-11

AvrahamBlackHat_DC_2011_Avraham-Popping_Android_Devices-Slidespdf BlackHat DC 2011

18 Jon Oberheide httpjonoberheideorgblog20100625remote-kill-and-install-on-google-android

19 Jon Oberheide httpjonoberheideorgblog20100628a-peek-inside-the-gtalkservice-connection

20 httpwwwandroidpolicecom20110301the-mother-of-all-android-

malware-has-arrived-stolen-apps-released-to-the-market-that-root-

your-phone-steal-your-data-and-open-backdoor

  • Seacutecuriteacute du systegraveme Android
  • N Ruff

N Ruff 133

visuel pour les gens nrsquoayant aucune notion de developpement 19 On peutse poser des questions sur la securite (et la qualite en general) des applicationsqui en sortirontLa signature drsquoapplications fut egalement pendant longtemps une pierre drsquoachop-pement Lors du lancement du programme Symbian Signed on a pu lireque Symbian voulait tuer les developpeurs independants HeureusementlrsquoAppStore a depuis prouve le contraire et Android nrsquoa eu aucun mal a imposerla signature des sa genese

ndash Seduire les fabricants de materiels est assez simple il suffit de produire unsysteme gratuit et drsquoen assurer une bonne partie du support Ajoutez a celaune forte demande du marche et tout est en place pour garantir le succes

Circuits de distribution Lrsquoessentiel des ordiphones sont commercialises par lesoperateurs de telephonie mobile (Google ayant drsquoailleurs essuye un echec commercialsur la vente en direct du Nexus One)

Comme la plupart des acteurs de la chaine les operateurs cherchent a maximiserleurs revenus parfois au detriment de la securite

ndash Les operateurs personnalisent les systemes drsquoexploitation en y ajoutant desbogues

ndash Les operateurs tentent de rendre payantes des fonctions natives incitant de cefait les utilisateurs au piratage

Parmi les inventions geniales du marketing on peut citer le bridage du tethering(utilisation du telephone comme modem 3G) la geolocalisation payante (alors que letelephone dispose drsquoun GPS integre) lrsquoimpossibilite de regarder la tele ou drsquoecouterde la musique sur un lien WiFi (mais pas sur un lien 3G) etc

Des lors les utilisateurs sont tentes de debrider leur telephone (jailbreaking)drsquoinstaller des applications tierce partie douteuses voire drsquoinstaller des systemes nonofficiels sans garantie drsquoinnocuite

Developpeurs drsquoapplications Lrsquoun des moyens les plus efficaces pour seduire lesdeveloppements est de leur promettre des revenus consequents Pas facile dans unmonde ou la plupart des applications sont gratuites ou dont le prix nrsquoexcede pas 1

Tout drsquoabord le processus drsquoachat drsquoapplications est relativement simple grace aGoogle Checkout lorsque lrsquooperateur ne fournit pas lui-meme le service de facturationau travers de sa MarketPlace Pour les applications financees par la publicite lareputation de Google dans le domaine nrsquoest plus a faire (surtout depuis le rachat dela societe AdMob specialisee dans le domaine de la publicite sur mobiles)

19 httpappinventorgooglelabscomabout

134 Securite du systeme Android

Contrairement a ce qursquoon pourrait croire les deux methodes generent des reve-nus comparables comme le revele lrsquoauteur drsquoune application inutile mais pourtanttelechargee presque 100 000 fois a savoir Advanced Task Manager 20

Les developpeurs attires par des revenus encore plus rapides pourront etre tentespar le cote obscur de la telephonie mobile appels et SMS surtaxes vol (et revente)du carnet drsquoadresses collecte de lrsquohistorique du navigateur etc

Ce phenomene est loin drsquoetre marginal certaines applications etant clairementmalveillantes ndash comme SMSAndroidOSFakePlayera ou les applications editeespar 09Droid qui se font passer pour des applications bancaires officielles ndash drsquoautresetant simplement a la limite du marketing agressif ndash comme celles de lrsquoediteur francaisZeuzz

Plusieurs etudes soulignent la dangerosite des MarketPlaces generalement fi-nancees par les editeurs antivirus ces etudes ne sont toutefois pas drsquoune qualitescientifique suffisante pour etre citees ici Le risque semble neanmoins reel puisqueGoogle a retire en urgence des dizaines drsquoapplications de la MarketPlace dans le cadrede lrsquoaffaire DroidDream (nous y reviendrons)

42 Failles logicielles

Etat des lieux Compte-tenu de lrsquoutilisation massive de code Open Source dans lesysteme Android les failles drsquoimplementation logicielle sont faciles a identifier il suffitde suivre les alertes de securite des principaux projets Lorsqursquoils sont disponibles cequi nrsquoest pas forcement le cas pour le noyau Linux

Les vecteurs principaux (en termes de nombre de lignes de code et drsquoexposition)sont le systeme Linux et le navigateur Web (et particulierement le moteur WebKitcommun avec Safari)

Il ne faut pas oublier non plus qursquoAndroid integre Flash Player et vit avec lesmemes failles 21

Failles navigateur Comme dans tout navigateur Web de complexite importanteles failles sont nombreuses Ces failles nrsquoen restent pas moins dangereuses car ellesont ete demontrees exploitables sur Android 22 23

Lrsquoune drsquoentre elles est meme disponible dans Metasploit 24 Il srsquoagit drsquoune faillerelativement grave qui permet de lire nrsquoimporte quel fichier du telephone accessible

20 httparronlacom201008android-revenue-advanced-task-manager

21 httpwwwtheinquirernetinquirernews2034092android-smartphones-attack-flash-player-hackers

22 httpwwwexploit-dbcomexploits15423

23 httpwwwexploit-dbcomexploits16974

24 httpblogmetasploitcom201101mobile-device-security-and-android-filehtml

N Ruff 135

au processus navigateur - ce qui inclut lrsquointegralite de la carte SD puisque celle-ci estformatee en FAT (donc sans aucun controle drsquoacces)

On notera dans cette attaque lrsquoutilisation de lrsquoURL contentcomandroid

htmlfileproviderltfilenamegt qui permet de lire nrsquoimporte quel fichier du telephoneau travers drsquoun Content Provider 25 ndash une notion specifique a Android qui prometdrsquoetre encore source de nombreuses failles vu la surface drsquoattaque exposee

Par ailleurs outre les schemas traditionnels (file http etc) Androidsupporte par defaut des schemas plus specifiques et donc moins testes

Parmi les schemas supportes on peut citer content (qui permet de com-muniquer avec un Content Provider) market (qui permet drsquointeragir avec laMarketPlace comme par exemple marketdetailsid=ltpackagegt) ou android

resource (qui permet drsquoacceder a une ressource dans un paquet comme parexemple androidresourceltpaquetgtltressourcegt)

Failles systeme Les failles systeme ne sont pas legion mais ont toutes un impactcritique sur la securite du systeme

Parmi les failles les plus connues (car les plus exploitees dans la nature ) onpeut citer les failles publiees sur le site xSports 26 a savoir

ndash Exploid faille udev bien connue des administrateurs Linux CVE-2009-1185

ndash Rage Against The Cage faille liee au mauvais comportement du processusadb lorsque RLIMIT NPROC a ete atteint 27 - lrsquoappel a setuid() echoue mais leprocessus nrsquoen tient pas compte et continue son execution son lrsquoidentite root

ndash Killing In The Name Of faille permettant de modifier la valeur de la constanteglobale (normalement en lecture seule) rosecure en jouant sur une erreurdrsquoimplementation de devashmem Cette constante definie a la compilationdu systeme indique au processus adb srsquoil doit srsquoexecuter sous lrsquoidentite root 28

Les applications legitimes (comme VISIONary+ 29) ou malveillantes (la pluscelebre ayant probablement ete DroidDream [20] ) ne se privent pas drsquoexploiter cesfailles dans la nature

Il faut toutefois noter qursquoil existe une difference subtile entre obtenir un accesroot et obtenir un acces root persistant au redemarrage du telephone En effetbien qursquoil soit virtuellement possible drsquoecrire dans le repertoire system (au traversde la commande adb remount ou drsquoun remount rw a lrsquointerieur du terminal) un

25 httpdeveloperandroidcomguidetopicsproviderscontent-providershtml

26 httpstealthopenwallnetxSports

27 httpdtorsorg20100825reversing-latest-exploid-release

28 httpsourceandroidcomportingbuild_systemhtml

29 httpandroidmodacocomcontentsoftware32035019-nov-r14-visionary-one-click-root

136 Securite du systeme Android

certain nombre de telephones modernes disposent drsquoune protection contre le reflashageintempestif de la partition systeme Cette protection est souvent liee a lrsquoutilisationdrsquoun composant memoire capable de verifier une signature cryptographique (parexemple un composant eMMC 30)

Dans le jargon on dit que la possibilite de reflasher la partition systeme avecun firmware non signe necessite un telephone en mode S-OFF Sur de nombreuxtelephones de marque HTC 31 le mode courant (S-ON ou S-OFF) peut etre obtenuen appuyant sur la touche Volume Down au demarrage du telephone

Failles logiques Il existe une categorie de failles difficiles a detecter et pourtantdevastatrices les failles logiques

Lrsquoun des exemples les plus fameux est le deblocage du telephone en utilisant soncompte Google Dans certains cas de corruption de donnees ce processus peut echouercomme documente officiellement par Google 32

Dans ce cas le telephone doit normalement etre reinitialise en configuration drsquousine(lorsque crsquoest possible ndash la procedure exacte depend du constructeur) Heureusementil srsquoavere que le mot de passe null est toujours accepte comme valide

Un autre bogue celebre affecte le Motorola Droid et potentiellement drsquoautresLorsque le telephone est verrouille mais qursquoun appel entrant arrive il est possibledrsquoappuyer sur le bouton Back et ainsi drsquoarriver a lrsquoecran drsquoaccueil du telephone 33

Enfin une superbe faille logique a ete decouverte sur le site httpsmarket

androidcom qui permet drsquoinstaller a distance des applications sur un telephoneAndroid Grace a une faille de type XSS persistant sur ce site 34 il etait possible defaire installer une application puis de lrsquoexecuter automatiquement sur le telephonede nrsquoimporte quel utilisateur Un utilisateur pouvait etre victime de cette attaque encliquant sur un lien depuis son telephone ou son PC (sous reserve drsquoetre logue sousson compte Google)

La technique utilisee pour executer automatiquement lrsquoapplication apres soninstallation merite drsquoetre soulignee elle consiste a declarer dans le manifeste delrsquoapplication que celle-ci supporte un nouveau schema drsquoURI (par exemple trigger

) puis a invoquer un lien trigger depuis la page Web drsquoorigine

Que peut-on faire Compte-tenu de la quantite de code C embarque dans lesysteme Android il existe et il existera des bogues drsquoimplementation dans ce systeme

30 httpenwikipediaorgwikiMultiMediaCardeMMC

31 Un site de reference pour les telephones de marque HTC httpunrevokedcom32 httpcodegooglecompandroidissuesdetailid=3006

33 httptechcrunchcom20100111verizon-droid-security-bug

34 httpjonoberheideorgblog20110307how-i-almost-won-pwn2own-via-xss

N Ruff 137

conduisant pour certains a des failles de securite WebKit et le systeme Linux sontdes cibles de choix compte-tenu de la surface drsquoattaque exposee

Toutefois et contrairement a un systeme classique la mise a jour a grandeechelle srsquoavere extremement problematique pour plusieurs raisons

ndash Le facteur drsquoechelle (plusieurs millions drsquounites en circulation rien qursquoen France)ndash La diversite et le haut degre de personnalisation des plateformes materielles et

logiciellesndash La propriete du terminal (lorsqursquoil a ete achete par lrsquoutilisateur)ndash Les risques commerciaux en cas de blocage definitif du terminal (brick)On peut raisonnablement considerer qursquoen dehors du geek moyen aucun utilisateur

de smartphone sous Android nrsquoa jamais mis a jour son systemeLes statistiques officielles de Google sur la repartition des ordiphones par version

drsquoAndroid permettent de se faire une idee objective sur la vitesse de renouvellementdu parc 35 A lrsquoheure ou jrsquoecris ces lignes malgre la disponibilite du systeme Android23 la majorite du parc se compose encore de systemes Android 21 et 22 ndash sanscompter sur les irreductibles 6 qui disposent drsquoune version anterieure Je laisseaux statisticiens le soin de produire une etude plus detaillee qui sera neanmoinsbiaisee par le fait que les donnees mondiales sont agregees tandis que les politiquesde renouvellement des operateurs sont tres variables drsquoun pays a lrsquoautre

Dans ces conditions il est loin le moment ou un operateur mobile fera du NAC-NAP sur son reseau pour interdire la connexion de ordiphones qui ne sont pas a jourdes correctifs

Techniquement le protocole FOTA (Firmware Over-The-Air) permet toutefoisde mettre a jour a distance des terminaux Ce protocole a deja ete utilise a grandeechelle lorsqursquoune backdoor (exploitable a distance) a ete decouverte sur certainstelephones HTC de modele Hero et Evo

5 Audit drsquoapplications Android

51 Auditer pourquoi

Lrsquoaudit securite drsquoapplications tierces est une activite vieille comme le conseil ensecurite Toutefois le circuit de distribution logicielle etant assez different entre lemonde du logiciel drsquoentreprise et les MarketPlaces pour mobiles il est vrai que laquestion merite drsquoetre posee a nouveau

A lrsquoheure ou jrsquoecris ces lignes Google nrsquoeffectue aucune verification de securite surles applications publiees dans lrsquoAndroid Market Cet etat de fait pourrait changer

35 httpdeveloperandroidcomresourcesdashboardplatform-versionshtml

138 Securite du systeme Android

compte-tenu de la proliferation drsquoapplications malveillantes de plus en plus agressiveset sophistiquees

Parmi tous les risques lies aux terminaux mobiles (vol de lrsquoequipement intrusionvia une faille du navigateur etc) on constate dans les faits que le risque principalaujourdrsquohui est la proliferation drsquoapplications malveillantes La malveillance estune notion assez floue et certaines applications peuvent se situer dans une zone grise - comme lrsquoapplication de voix sur IP Viber 36 qui duplique tous les contactsde lrsquoutilisateur sur un serveur central faisant office drsquoannuaire telephonique Maisdrsquoautres applications font lrsquounanimite contre elles comme les applications utilisant desfailles systeme pour elever leurs privileges vers root etou envoyer des SMS surtaxessans le consentement de lrsquoutilisateur Ces applications sont drsquoailleurs tuees parGoogle une fois identifiees car elles violent clairement les regles drsquoutilisation delrsquoAndroid Market

Les circuits qui conduisent a lrsquoapparition drsquoune application malveillante sontmultiples

ndash Malveillance deliberee de lrsquoauteur qui veut gagner de lrsquoargent rapidement Crsquoestle cas le plus simple Un scenario courant consiste a cloner une applicationen vogue tout en y ajoutant du code malveillant

ndash Compromission drsquoun editeur drsquoapplications a son insu Crsquoest la ligne de defenseadoptee par plusieurs editeurs drsquoapplications apres avoir ete pointe du doigtCette defense est malheureusement credible car la plupart des developpeurs sontdes individus isoles ou des micro-entreprises attirees par les success stories a laAngry Birds et bien souvent sans aucune securite dans les developpements

ndash Integration de librairies tierce partie malveillantes dans un programme sainLrsquoauteur drsquoune application populaire (a savoir Tank Hero ) a ainsi an-nonce avoir ete contacte par un fournisseur drsquoapplications probablementmalveillantes qui lui proposait un accord commercial 37

Mais lrsquoidentification des applications malveillantes nrsquoest pas la seule raison quipeut conduire a auditer une application Android Parmi drsquoautres raisons legitimes on peut citer

ndash Verifier que lrsquoapplication fait bien ce qursquoelle pretend faire Ce point est parti-culierement critique pour les applications de securite qui mettent en œuvre duchiffrement ou de la gestion de mots de passe par exemple Dans le domaineles surprises sont nombreuses drsquoautant que les applications mobiles nrsquoont pasencore la maturite des applications bureautiques et que les contraintes

36 httpwwwvibercom

37 httpwwwredditcomrAndroidcommentsfm3cuspyware_company_wants_us_to_embed_

their_code_into

N Ruff 139

du monde embarque se font sentir (puissance de calcul sources drsquoentropieremanence de lrsquoallocateur memoire Java etc)

ndash Recherche des failles de securite Et oui les applications Android sont aussivulnerables aux buffer overflows lorsqursquoelles utilisent du code natif (compileavec le NDK) et meme des injections SQL (meme si SQLite nrsquoimplemente pasdrsquoequivalent a xp cmdshell) Il existe par ailleurs des attaques specifiques aumonde Android comme les BroadcastReceiver qui ne verifieraient pas la sourcedes messages recus

Le probleme principal avec lrsquoaudit drsquoapplications Android nrsquoest pas techniqueLe probleme crsquoest lrsquoeuphorie du marche proliferation drsquoapplications et mises a jourfrequentes qui obligent a automatiser et industrialiser les audits 38

52 Auditer comment

Lrsquoaudit securite est une tache difficile a modeliser car elle tire parti de la creativitede lrsquoauditeur On peut toutefois identifier les grandes lignes suivantes

1 Recuperer lrsquoapplication

2 Decompresser les ressources

3 Desassembler le bytecode

4 Decompiler le bytecode (lorsque crsquoest possible)

5 Desassembler le code natif

6 Deboguer lrsquoapplication en cours drsquoexecution (sur un telephone reel ou danslrsquoemulateur)

Cette methodologie nrsquoest pas exhaustive elle ne donne pas acces au contenutelecharge ulterieurement (par exemple au travers des publicites integrees) Voyonsles methodes et les difficultes associees a chaque etape

Recuperer lrsquoapplication Cette etape nrsquoest pas trop compliquee pour qui est preta installer lrsquoapplication cible sur son telephone Apres installation le fichier APK estconserve dans le repertoire dataapp Selon les permissions appliquees au systeme defichiers il nrsquoest pas necessairement possible de lister le contenu de ce repertoire maisles paquets restent lisibles par lrsquooutil adb et le nom de paquet peut etre determinedepuis la MarketPlace ou le menu parametres du telephone (le nom exact estpaquet-Napk ou N vaut generalement 1)

38 httpwwwappanalysisorg

140 Securite du systeme Android

Toute autre methode est complexe et probablement illegale Parmi les methodespossibles on peut citer lrsquoinstallation de lrsquoapplication MarketPlace dans un emulateurou le reverse engineering de lrsquoapplication MarketPlace a des fins de reimplementation(cette derniere etant toutefois volumineuse donc complexe a analyser)

Depuis la version 22 du systeme Android et si lrsquoapplication lrsquoautorise il estpossible drsquoinstaller une application sur la carte SD Mais lrsquoapplication est alorsstockee dans un fichier asec chiffre Ce fichier est inexploitable jusqursquoa ce quele mecanisme et la cle de chiffrement soient connus

On peut imaginer qursquoune application extremement malveillante pourrait exploiterune faille des lrsquoinstallation pour elever ses privileges vers root et dissimuler ses traces(ie se rendre inaccessible de lrsquoexterieur) Ce cas ne srsquoest pas encore produit dansla nature a lrsquoheure ou jrsquoecris ces lignes mais srsquoavere techniquement faisable

Il faut noter que la MarketPlace de Google nrsquoest pas la seule disponible maisqursquoil existe egalement des MarketPlaces drsquooperateurs ou de tiers ainsi Amazoncommercialise desormais des applications Android 39 Cette proliferation complexifiedrsquoautant la tache drsquoanalyse des MarketPlaces La methode la plus universelle pourrecuperer la source drsquoinstallation drsquoune application reste donc de lrsquoinstaller sur untelephone

Un utilisateur peut installer des applications depuis des sources externes a laMarketPlace si lrsquooption autoriser les sources inconnues est cochee dans lesparametres de configuration Il existe des applications legitimes accessibles en dehorsdes MarketPlaces mais il existe egalement des bases drsquoapplications piratees surInternet dont lrsquoinnocuite ne peut pas etre garantie

Notons que certaines applications meme parmi celles disponibles sur les Market-Places officielles exigent au prealable un acces root au telephone

Decompresser les ressources Les fichiers places a lrsquointerieur drsquoun paquet APKsont optimises drsquoune maniere ou drsquoune autre avant drsquoetre compresses Ceci srsquoappliqueaussi bien au bytecode qursquoaux ressources textuelles (comme les fichiers XML)

Lrsquoune des optimisations principales est la deduplication de donnees Ainsi ilnrsquoexiste qursquoune seule instance de chaque chaine de caracteres dans un fichier DEXDifferents encodages optimises sont egalement utilises tel que LEB128 pourla representation des entiers (Little Endian Base 128 aussi utilise dans le formatDWARF)

Toutes ces optimisations nrsquoont pas pour but la protection logicielle et sont parfai-tement reversibles Lrsquooutil aapt fourni avec le SDK officiel permet ainsi drsquoexplorerle contenu du manifeste drsquoun paquet APK Les techniques drsquooptimisation ont ete

39 httpwwwamazoncomappstore

N Ruff 141

analysees et documentees par des tiers ce qui a permis la production drsquooutils dedecompression comme apktool 40

Desassembler le bytecode Avec le SDK officiel est fourni lrsquooutil dexdump quipermet de lister le bytecode contenu dans un fichier CLASSESDEX

Le format de fichier DEX a ete lui aussi analyse et documente 41 ce qui a permisla production de desassembleurs tiers comme baksmali

Le code genere suit la syntaxe Jasmin 42 bien connue dans le monde Java tra-ditionnel Cette syntaxe peut sembler obscure de prime abord mais elle est par-faitement reguliere donc finalement tres simple a apprehender Prenons un exempleissu drsquoune application reelle voici ci-dessous le code drsquoune methode appeleeemptyResult telle que produit par baksmali

method protected static emptyResult(LjavalangString )Z

locals 1

parameter result

prologue

line 306

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Toutes les directives commencent par un point Leur nom est relativement explicitelocals 1 va par exemple indiquer la presence drsquoune seule variable locale Le nomassigne aux opcodes de la machine virtuelle est egalement assez parlant

pN represente lrsquoargument numero N passe a la methode vN represente le re-gistre numero N (Dalvik est une machine virtuelle a registres et non a pile)

Munis de ces informations decortiquons la seule operation reellement complexeeffectuee dans cet extrait de code

40 httpcodegooglecompandroid-apktool

41 httpwwwnetmitecomandroidmydroiddalvikdocsdex-formathtml

42 httpjasminsourceforgenet

142 Securite du systeme Android

invoke-static Invoque une methode sta-tique Il existe egalementun opcode invoke-virtual

pour les methodes virtuellesinvoke-super pour la methodede la superclasse etc

p0 La methode appelee prend unseul argument La valeur de cetargument provient du premierargument passe a la methodeemptyResult

LcomutilsStringUtils-gtisEmpty Invoque la methode isEmpty de laclasse comutilsStringUtils L est un prefixe accole a tousles litteraux

(LjavalangString) Le premier (et seul) argument estde type javalangString

Z La methode retourne un booleen

A titre de reference voici les differents types natifs disponibles dans Jasmin

Z BooleenB OctetC CaractereS Entier court (16 bits)I Entier (32 bits)J Entier long (64 bits)F Flottant (32 bits)D Double (64 bits)

Lrsquoavantage majeur de lrsquooutil tiers apktool est la possibilite de modifier le bytecodeou les ressources drsquoune application puis de la recompiler dans une version fonctionnelleCeci permet drsquoutiliser une technique drsquoanalyse aussi ancienne que lrsquoinformatiqueappelee printf debugging

Dans le monde Android lrsquoutilisation de Systemout doit etre remplacee parandroidutilLog Cette classe definit plusieurs methodes ndash respectivement v d iw e et wtf ndash qui correspondent chacune a un niveau de verbosite ndash et dont lesarguments sont enregistres dans le journal systeme (sauf le niveau debug) Cejournal peut etre consulte a lrsquoaide de la commande adb logcat apparait en temps

N Ruff 143

reel dans lrsquooutil DDMS et peut egalement etre consulte par toute application quidispose de la permission READ LOGS

Si lrsquoon souhaite connaitre lrsquoargument passe a la methode emptyResult danslrsquoexemple precedent il suffit alors drsquoajouter un appel a nrsquoimporte quelle methode dela classe Log de la maniere suivante

method protected static emptyResult(LjavalangString )Z

locals 2

parameter result

prologue

line 306

const -string v1 PrintfDebuggingStyle

invoke -static v1 p0 LandroidutilLog-gtd(LjavalangStringLjavalang

String )I

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Une variable locale v1 a ete ajoutee contenant une chaine de caracteres fixe Lamethode d() est ensuite invoquee Cette modification est equivalente au code Javasuivant

Logd(PrintfDebuggingStyle ltp0 gt)

On peut constater experimentalement que de nombreuses applications de laMarketPlace font usage de lrsquoAPI Log ce qui permet de collecter des donnees defonctionnement parfois tres (trop) interessantes

Le journal systeme peut etre collecte a distance par un developpeur lors ducrash de son application si lrsquoutilisateur lrsquoautorise Cette technique a ete presenteepar Renaud Lifchitz lors de la conference 27c3 pour espionner les deplacements drsquounutilisateur 43

Decompiler le bytecode Comme avec tout bytecode de haut niveau (ex JavaNET) la semantique de lrsquoapplication est conservee

Il est donc possible de decompiler du bytecode Dalvik et de reconstruire le codeJava drsquoorigine (sans les commentaires ndash seule information perdue a la compilation) Lepremier outil public capable drsquoune telle operation fut undx 44 de Marc Schoenefeld Cetoutil est toutefois bogue et non maintenu par son auteur Le meilleur outil disponibleactuellement est lrsquooutil dex2jar 45 qui reconstruit du bytecode Java a partir du

43 httpeventscccdecongress2010Fahrplanevents4151enhtml

44 httpwwwillegalaccessorgundxhtml

45 httpcodegooglecompdex2jar

144 Securite du systeme Android

bytecode Dalvik Les outils classiques de decompilation Java 46 47 srsquoappliquentalors

Compte-tenu de la facilite deconcertante avec laquelle il est possible drsquoanalyserles applications Android (et donc de les craquer entre autres) Google a mis adisposition des developpeurs une bibliotheque tres complete de gestion des licences enligne Licensing Verification Library (LVL) 48 Toutes les versions de cette bibliothequeont malheureusement ete craquees elles aussi a lrsquoheure ou jrsquoecris ces lignes

Une autre contre-mesure mise en place par Google consiste a integrer un obfusca-teur de bytecode dans la chaine de compilation ProGuard 49 Cet outil relativementpuissant est configurable par le developpeur au travers du fichier proguardcfg toutefois le fichier de configuration par defaut (reproduit ci-apres) nrsquoopere que lerenommage des classes et methodes invisibles a lrsquoexterieur de lrsquoapplication ce qui estpeu efficace face a un attaquant determine

-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontpreverify

-verbose

-optimizations codesimplificationarithmetic field classmerging

-keep public class extends androidappActivity

-keep public class extends androidappApplication

-keep public class extends androidappService

-keep public class extends androidcontentBroadcastReceiver

-keep public class extends androidcontentContentProvider

-keep public class extends androidappbackupBackupAgentHelper

-keep public class extends androidpreferencePreference

-keep public class comandroidvendinglicensingILicensingService

-keepclasseswithmembernames class

native ltmethods gt

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet)

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet int)

-keepclassmembers enum

public static [] values ()

public static valueOf(javalangString)

46 httpmembersfortunecitycomneshkovdjhtml

47 httpjavadecompilerfreefr

48 httpdeveloperandroidcomguidepublishinglicensinghtml

49 httpdeveloperandroidcomguidedevelopingtoolsproguardhtml

N Ruff 145

-keep class implements androidosParcelable

public static final androidosParcelable$Creator

Au vu des resultats obtenus on peut considerer que lrsquoobfuscation de bytecode Javadans le monde Android est en retard sur lrsquoobfuscation de code x86 dans le monde PCLes techniques de complexification du flot de controle ou de construction dynamiquedes constantes ne sont pas encore repandues dans les applications commerciales pourAndroid Afin de combler ce manque des projets paralleles (comme AndroGuard 50)fleurissent - mais on peut supposer que la solution integree au SDK fourni par Googlerestera la solution majoritairement utilisee par les applications (pour des raisons desimplicite evidentes)

Desassembler du code natif Lors de lrsquoaudit drsquoune application Android il estpossible de rencontrer du code natif dans deux cas

1 Lrsquoapplication contient des bibliotheques natives compilees avec le NDK

2 Lrsquoapplication contient des applications natives ou srsquoavere etre elle-meme uneapplication native Ce cas est courant avec les applications malveillantes quiembarquent du code natif pour exploiter des failles noyau 51

Dans les deux cas Android ne presente aucune specificite par rapport a unLinuxARM classique Les fichiers natifs sont au format ELF La chaine de compilationnative est construite autour du compilateur GCC Tous les outils sont disponiblesdepuis longtemps pour analyser des tels binaires (ex IDA Pro Hex-Rays DecompilerARM etc)

Deboguer lrsquoapplication Une application Java compilee en mode debug peutetre deboguee a distance au travers du protocole standard Java Debug Wire Protocol(JDWP) defini dans le cadre de Java Platform Debugger Architecture (JPDA)

Les environnements de developpement Java classiques (comme Eclipse) per-mettent ainsi de deboguer une application a distance une fois celle-ci installee sur letelephone

Il est egalement possible drsquoutiliser le venerable JDB (fourni avec le SDK Java 52)bien que cet outil nrsquoait jamais depasse le statut de preuve de concept a mon avis

Lrsquooutil DDMS fourni avec le SDK Android repose egalement sur JPDA Cetoutil ne permet toutefois pas le debogage drsquoapplications mais seulement lrsquoanalyse deperformance

50 httpcodegooglecompandroguard

51 httpstealthopenwallnetxSports

52 httpdownloadoraclecomjavase142docstooldocssolarisjdbhtml

146 Securite du systeme Android

La liste des applications pouvant etre deboguees sur un systeme Android srsquoobtientavec la commande adb jdwp

Le vrai probleme se pose pour les applications qui nrsquoont pas ete compilees enmode debug Ceci implique que le manifeste de lrsquoapplication ne contient pasdrsquoentree ltapplication androiddebuggable=truegt De plus la plupart des outilsde debogage Java necessitent que le bytecode contienne des indications sur les numerosde lignes dans le code source drsquoorigine (il srsquoagit drsquoune limitation arbitraire qui nesrsquoapplique pas a lrsquooutil JavaSnoop 53 par exemple)

Fort heureusement il est possible de desassembler ces applications puis de lesreassembler en mode debug avec lrsquooutil apktool 54 Le processus est complexe etle resultat peu convivial mais il a le merite drsquoexister

Pour reinstaller lrsquoapplication modifiee sur un equipement reel il est necessairede la signer a nouveau La procedure est simple et parfaitement documentee parGoogle

Il faut drsquoabord generer une cle personnelle autosignee a duree de vie extremementlongue

$ keytool -genkey -v -keystore mykeykeystore -alias nom_alias -keyalg RSA -

keysize 2048 -validity 10000

Il faut ensuite signer le nouvel APK avec les outils du SDK Java

$ jarsigner -verbose -keystore mykeykeystore nom_applicationapk nom_alias

Enfin il est recommande drsquoaligner le code sur un multiple de 4 octets pour desraisons de performance

$ zipalign -v 4 nom_applicationapk nom_application_finalapk

Instrumentation Il est possible drsquoinstrumenter une application Java a lrsquoaide declasses specifiques a Android (androidappInstrumentation 55) Cette methodefournit des resultats detailles et personnalisables sur le fonctionnement interne drsquouneapplication elle necessite toutefois une decompilation et une modification prealablede lrsquoapplication a auditer

A lrsquoheure ou jrsquoecris ces lignes il nrsquoexiste pas (a ma connaissance) drsquooutil permettantde generaliser et drsquoautomatiser le processus a tout fichier APK Cette voie de recherchepourrait toutefois donner des resultats interessants

53 httpwwwaspectsecuritycomtoolsjavasnoop

54 httpcodegooglecompandroid-apktoolwikiSmaliDebugging

55 httpdeveloperandroidcomreferenceandroidappInstrumentationhtml

N Ruff 147

Outils specifiques Les outils disponibles actuellement dans le monde Android sontrudimentaires quoi que suffisants

Toutefois on peut raisonnablement estimer que la quantite et la qualite des outilsdisponibles va croitre de concert avec la popularite du systeme Android

A lrsquoheure ou jrsquoecris ces lignes la version 61 du logiciel IDA Pro 56 vient de sortirCette version ajoute le support du format DEX et du bytecode Dalvik ainsi que ledebogage a distance des applications Android natives

On peut supposer que drsquoautres outils couramment utilises par les auditeurs ensecurite vont etre mis a jour pour srsquoadapter au monde Android

6 Conclusion

Le systeme Android nrsquoa malheureusement pas profite de lrsquoopportunite unique quilui etait donnee repartir de la feuille blanche et creer un systeme drsquoexploitation sur par conception

A cause drsquoun heritage logiciel peu fiable ainsi que des contraintes materielles etcommerciales issues du monde de la telephonie mobile le systeme resultant est uncompromis qui laisse une large place a la creativite des attaquants

Celle-ci est drsquoautant plus exacerbee que la telephonie mobile est un phenomene demasse (il y a plus de telephones mobiles que drsquoordinateurs dans le monde) et que letelephone mobile est par conception un systeme de paiement (ce que nrsquoest pas un PCtraditionnel)

A ce tableau vient srsquoajouter 30 ans drsquoexperience dans le domaine des attaqueslogicielles appliquees a un ecosysteme applicatif qui nrsquoexistait pas il y a 5 ans

Toutes les conditions sont donc reunies pour que des attaques de grande ampleurmotivees par lrsquoargent se produisent contre les materiels grand public equipes dusysteme Android (telephones tablettes televisions )

La bonne nouvelle pour lrsquoexpert en securite crsquoest qursquoil est encore temps de srsquoymettre Android est suffisamment jeune et accessible aux nouveaux entrants ce quinrsquoest plus le cas de la plateforme PC ou les techniques drsquoattaque (ex exploitationdrsquoun heap overflow) et de defense (ex obfuscation logicielle) ont atteint des sommetsde raffinement desormais accessibles aux seuls experts les plus pointus du domaine

7 Sites et outils

71 Sites officiels

ndash Android portail officiel httpwwwandroidcom

56 httpwwwhex-rayscomidapro

148 Securite du systeme Android

ndash Android MarketPlace officielle httpsmarketandroidcomndash Android reference des developpeurs httpdeveloperandroidcom

72 Sites non officiels

ndash Reference de la machine virtuelle Dalvik httpdalvikvmcom

73 Outils tiers

ndash Google Android Debugging Utilities httpsitesgooglecomsiteortegaalfredoandroid

ndash Undx httpwwwillegalaccessorgundxhtmlndash SmaliBaksmali httpcodegooglecompsmalindash Dedexer httpdedexersourceforgenetndash Dex2Jar httpcodegooglecompdex2jarndash TaintDroid httpwwwappanalysisorg

ndash AndroGuard httpandroguardblogspotcom

References

1 Benjamin Morin Modele de securite drsquoAndroid MISC 51 2010

2 K Chen Reversing and exploiting an apple firmware update httpwwwblackhatcom

presentationsbh-usa-09CHENBHUSA09-Chen-RevAppleFirm-PAPERpdf BlackHat 2009

3 Alexandre Gazet Sticky fingers amp KBC Custom Shop httpwwwssticorg2011presentation

sticky_fingers_and_kbc_custom_shop SSTIC 2011

4 Loıc Duflot and Yves-Alexis Perez Quelques elements en matiere de securite des cartes reseau http

wwwssticorg2010presentationPeut_on_faire_confiance_aux_cartes_reseau SSTIC 2010

5 Alexander Tereshkin and Rafal Wojtczuk Introducing Ring -3 Rootkits httpwwwblackhat

compresentationsbh-usa-09TERESHKINBHUSA09-Tereshkin-Ring3Rootkit-SLIDESpdf Black-Hat USA 2009

6 Loıc Duflot Yves-Alexis Perez and Benjamin Morin Run-time firmware integrity verification what ifyou canrsquot trust your network card CanSecWest 2011

7 Ralf-Philipp Weinmann All Your Baseband Are Belong To Us httpeventscccdecongress

2010Fahrplanevents4090enhtml CCC 2010

8 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Formal Model to Analyzethe Permission Authorization and Enforcement in the Android Framework SecureComrsquo10

9 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Small but Non-negligibleFlaw in the Android Permission Scheme Wook Shin Sanghoon Kwak Shinsaku Kiyomoto KazuhideFukushima et Toshiaki Tanaka IEEE POLICY 2010

10 Marc Schonefled Reconstructing Dalvik Applications httpcansecwestcomcsw09

csw09-schoenefeldpdf CanSecWest 2009

N Ruff 149

11 Sergio Alvarez The Smart-Phones Nightmare (iPhone-oriented parts about Android) http

cansecwestcomcsw09csw09-alvarezpdf CanSecWest 2009

12 Nicolas Economou Alfredo Ortega Smartphone (in)security httpcansecwestcomcsw09

csw09-ortega-economoupdf CanSecWest 2009

13 Jesse Burns Exploratory Android Surgery httpwwwblackhatcompresentationsbh-usa-09

BURNSBHUSA09-Burns-AndroidSurgery-SLIDESpdf BlackHat USA 2009

14 Kevin Mahaffey John Hering App Attack httpsmediablackhatcombh-us-10presentations

Mahaffey_HeringBlackhat-USA-2010-Mahaffey-Hering-Lookout-App-Genome-slidespdf Black-Hat USA 2010

15 Nils The Risk you carry in your Pocket httpsmediablackhatcombh-ad-10Nils

Black-Hat-AD-2010-android-sandcastle-slidespdf BlackHat Abu Dhabi 2010

16 Raphael Rigo Android Reverse Engineering and Forensics httpsdeepsecnetdocsspeaker

htmlPSLOT45 DeepSec 2010

17 Itzhak Avraham Popping Shell on A(ndroid)RM Devices httpsmediablackhatcombh-dc-11

AvrahamBlackHat_DC_2011_Avraham-Popping_Android_Devices-Slidespdf BlackHat DC 2011

18 Jon Oberheide httpjonoberheideorgblog20100625remote-kill-and-install-on-google-android

19 Jon Oberheide httpjonoberheideorgblog20100628a-peek-inside-the-gtalkservice-connection

20 httpwwwandroidpolicecom20110301the-mother-of-all-android-

malware-has-arrived-stolen-apps-released-to-the-market-that-root-

your-phone-steal-your-data-and-open-backdoor

  • Seacutecuriteacute du systegraveme Android
  • N Ruff

134 Securite du systeme Android

Contrairement a ce qursquoon pourrait croire les deux methodes generent des reve-nus comparables comme le revele lrsquoauteur drsquoune application inutile mais pourtanttelechargee presque 100 000 fois a savoir Advanced Task Manager 20

Les developpeurs attires par des revenus encore plus rapides pourront etre tentespar le cote obscur de la telephonie mobile appels et SMS surtaxes vol (et revente)du carnet drsquoadresses collecte de lrsquohistorique du navigateur etc

Ce phenomene est loin drsquoetre marginal certaines applications etant clairementmalveillantes ndash comme SMSAndroidOSFakePlayera ou les applications editeespar 09Droid qui se font passer pour des applications bancaires officielles ndash drsquoautresetant simplement a la limite du marketing agressif ndash comme celles de lrsquoediteur francaisZeuzz

Plusieurs etudes soulignent la dangerosite des MarketPlaces generalement fi-nancees par les editeurs antivirus ces etudes ne sont toutefois pas drsquoune qualitescientifique suffisante pour etre citees ici Le risque semble neanmoins reel puisqueGoogle a retire en urgence des dizaines drsquoapplications de la MarketPlace dans le cadrede lrsquoaffaire DroidDream (nous y reviendrons)

42 Failles logicielles

Etat des lieux Compte-tenu de lrsquoutilisation massive de code Open Source dans lesysteme Android les failles drsquoimplementation logicielle sont faciles a identifier il suffitde suivre les alertes de securite des principaux projets Lorsqursquoils sont disponibles cequi nrsquoest pas forcement le cas pour le noyau Linux

Les vecteurs principaux (en termes de nombre de lignes de code et drsquoexposition)sont le systeme Linux et le navigateur Web (et particulierement le moteur WebKitcommun avec Safari)

Il ne faut pas oublier non plus qursquoAndroid integre Flash Player et vit avec lesmemes failles 21

Failles navigateur Comme dans tout navigateur Web de complexite importanteles failles sont nombreuses Ces failles nrsquoen restent pas moins dangereuses car ellesont ete demontrees exploitables sur Android 22 23

Lrsquoune drsquoentre elles est meme disponible dans Metasploit 24 Il srsquoagit drsquoune faillerelativement grave qui permet de lire nrsquoimporte quel fichier du telephone accessible

20 httparronlacom201008android-revenue-advanced-task-manager

21 httpwwwtheinquirernetinquirernews2034092android-smartphones-attack-flash-player-hackers

22 httpwwwexploit-dbcomexploits15423

23 httpwwwexploit-dbcomexploits16974

24 httpblogmetasploitcom201101mobile-device-security-and-android-filehtml

N Ruff 135

au processus navigateur - ce qui inclut lrsquointegralite de la carte SD puisque celle-ci estformatee en FAT (donc sans aucun controle drsquoacces)

On notera dans cette attaque lrsquoutilisation de lrsquoURL contentcomandroid

htmlfileproviderltfilenamegt qui permet de lire nrsquoimporte quel fichier du telephoneau travers drsquoun Content Provider 25 ndash une notion specifique a Android qui prometdrsquoetre encore source de nombreuses failles vu la surface drsquoattaque exposee

Par ailleurs outre les schemas traditionnels (file http etc) Androidsupporte par defaut des schemas plus specifiques et donc moins testes

Parmi les schemas supportes on peut citer content (qui permet de com-muniquer avec un Content Provider) market (qui permet drsquointeragir avec laMarketPlace comme par exemple marketdetailsid=ltpackagegt) ou android

resource (qui permet drsquoacceder a une ressource dans un paquet comme parexemple androidresourceltpaquetgtltressourcegt)

Failles systeme Les failles systeme ne sont pas legion mais ont toutes un impactcritique sur la securite du systeme

Parmi les failles les plus connues (car les plus exploitees dans la nature ) onpeut citer les failles publiees sur le site xSports 26 a savoir

ndash Exploid faille udev bien connue des administrateurs Linux CVE-2009-1185

ndash Rage Against The Cage faille liee au mauvais comportement du processusadb lorsque RLIMIT NPROC a ete atteint 27 - lrsquoappel a setuid() echoue mais leprocessus nrsquoen tient pas compte et continue son execution son lrsquoidentite root

ndash Killing In The Name Of faille permettant de modifier la valeur de la constanteglobale (normalement en lecture seule) rosecure en jouant sur une erreurdrsquoimplementation de devashmem Cette constante definie a la compilationdu systeme indique au processus adb srsquoil doit srsquoexecuter sous lrsquoidentite root 28

Les applications legitimes (comme VISIONary+ 29) ou malveillantes (la pluscelebre ayant probablement ete DroidDream [20] ) ne se privent pas drsquoexploiter cesfailles dans la nature

Il faut toutefois noter qursquoil existe une difference subtile entre obtenir un accesroot et obtenir un acces root persistant au redemarrage du telephone En effetbien qursquoil soit virtuellement possible drsquoecrire dans le repertoire system (au traversde la commande adb remount ou drsquoun remount rw a lrsquointerieur du terminal) un

25 httpdeveloperandroidcomguidetopicsproviderscontent-providershtml

26 httpstealthopenwallnetxSports

27 httpdtorsorg20100825reversing-latest-exploid-release

28 httpsourceandroidcomportingbuild_systemhtml

29 httpandroidmodacocomcontentsoftware32035019-nov-r14-visionary-one-click-root

136 Securite du systeme Android

certain nombre de telephones modernes disposent drsquoune protection contre le reflashageintempestif de la partition systeme Cette protection est souvent liee a lrsquoutilisationdrsquoun composant memoire capable de verifier une signature cryptographique (parexemple un composant eMMC 30)

Dans le jargon on dit que la possibilite de reflasher la partition systeme avecun firmware non signe necessite un telephone en mode S-OFF Sur de nombreuxtelephones de marque HTC 31 le mode courant (S-ON ou S-OFF) peut etre obtenuen appuyant sur la touche Volume Down au demarrage du telephone

Failles logiques Il existe une categorie de failles difficiles a detecter et pourtantdevastatrices les failles logiques

Lrsquoun des exemples les plus fameux est le deblocage du telephone en utilisant soncompte Google Dans certains cas de corruption de donnees ce processus peut echouercomme documente officiellement par Google 32

Dans ce cas le telephone doit normalement etre reinitialise en configuration drsquousine(lorsque crsquoest possible ndash la procedure exacte depend du constructeur) Heureusementil srsquoavere que le mot de passe null est toujours accepte comme valide

Un autre bogue celebre affecte le Motorola Droid et potentiellement drsquoautresLorsque le telephone est verrouille mais qursquoun appel entrant arrive il est possibledrsquoappuyer sur le bouton Back et ainsi drsquoarriver a lrsquoecran drsquoaccueil du telephone 33

Enfin une superbe faille logique a ete decouverte sur le site httpsmarket

androidcom qui permet drsquoinstaller a distance des applications sur un telephoneAndroid Grace a une faille de type XSS persistant sur ce site 34 il etait possible defaire installer une application puis de lrsquoexecuter automatiquement sur le telephonede nrsquoimporte quel utilisateur Un utilisateur pouvait etre victime de cette attaque encliquant sur un lien depuis son telephone ou son PC (sous reserve drsquoetre logue sousson compte Google)

La technique utilisee pour executer automatiquement lrsquoapplication apres soninstallation merite drsquoetre soulignee elle consiste a declarer dans le manifeste delrsquoapplication que celle-ci supporte un nouveau schema drsquoURI (par exemple trigger

) puis a invoquer un lien trigger depuis la page Web drsquoorigine

Que peut-on faire Compte-tenu de la quantite de code C embarque dans lesysteme Android il existe et il existera des bogues drsquoimplementation dans ce systeme

30 httpenwikipediaorgwikiMultiMediaCardeMMC

31 Un site de reference pour les telephones de marque HTC httpunrevokedcom32 httpcodegooglecompandroidissuesdetailid=3006

33 httptechcrunchcom20100111verizon-droid-security-bug

34 httpjonoberheideorgblog20110307how-i-almost-won-pwn2own-via-xss

N Ruff 137

conduisant pour certains a des failles de securite WebKit et le systeme Linux sontdes cibles de choix compte-tenu de la surface drsquoattaque exposee

Toutefois et contrairement a un systeme classique la mise a jour a grandeechelle srsquoavere extremement problematique pour plusieurs raisons

ndash Le facteur drsquoechelle (plusieurs millions drsquounites en circulation rien qursquoen France)ndash La diversite et le haut degre de personnalisation des plateformes materielles et

logiciellesndash La propriete du terminal (lorsqursquoil a ete achete par lrsquoutilisateur)ndash Les risques commerciaux en cas de blocage definitif du terminal (brick)On peut raisonnablement considerer qursquoen dehors du geek moyen aucun utilisateur

de smartphone sous Android nrsquoa jamais mis a jour son systemeLes statistiques officielles de Google sur la repartition des ordiphones par version

drsquoAndroid permettent de se faire une idee objective sur la vitesse de renouvellementdu parc 35 A lrsquoheure ou jrsquoecris ces lignes malgre la disponibilite du systeme Android23 la majorite du parc se compose encore de systemes Android 21 et 22 ndash sanscompter sur les irreductibles 6 qui disposent drsquoune version anterieure Je laisseaux statisticiens le soin de produire une etude plus detaillee qui sera neanmoinsbiaisee par le fait que les donnees mondiales sont agregees tandis que les politiquesde renouvellement des operateurs sont tres variables drsquoun pays a lrsquoautre

Dans ces conditions il est loin le moment ou un operateur mobile fera du NAC-NAP sur son reseau pour interdire la connexion de ordiphones qui ne sont pas a jourdes correctifs

Techniquement le protocole FOTA (Firmware Over-The-Air) permet toutefoisde mettre a jour a distance des terminaux Ce protocole a deja ete utilise a grandeechelle lorsqursquoune backdoor (exploitable a distance) a ete decouverte sur certainstelephones HTC de modele Hero et Evo

5 Audit drsquoapplications Android

51 Auditer pourquoi

Lrsquoaudit securite drsquoapplications tierces est une activite vieille comme le conseil ensecurite Toutefois le circuit de distribution logicielle etant assez different entre lemonde du logiciel drsquoentreprise et les MarketPlaces pour mobiles il est vrai que laquestion merite drsquoetre posee a nouveau

A lrsquoheure ou jrsquoecris ces lignes Google nrsquoeffectue aucune verification de securite surles applications publiees dans lrsquoAndroid Market Cet etat de fait pourrait changer

35 httpdeveloperandroidcomresourcesdashboardplatform-versionshtml

138 Securite du systeme Android

compte-tenu de la proliferation drsquoapplications malveillantes de plus en plus agressiveset sophistiquees

Parmi tous les risques lies aux terminaux mobiles (vol de lrsquoequipement intrusionvia une faille du navigateur etc) on constate dans les faits que le risque principalaujourdrsquohui est la proliferation drsquoapplications malveillantes La malveillance estune notion assez floue et certaines applications peuvent se situer dans une zone grise - comme lrsquoapplication de voix sur IP Viber 36 qui duplique tous les contactsde lrsquoutilisateur sur un serveur central faisant office drsquoannuaire telephonique Maisdrsquoautres applications font lrsquounanimite contre elles comme les applications utilisant desfailles systeme pour elever leurs privileges vers root etou envoyer des SMS surtaxessans le consentement de lrsquoutilisateur Ces applications sont drsquoailleurs tuees parGoogle une fois identifiees car elles violent clairement les regles drsquoutilisation delrsquoAndroid Market

Les circuits qui conduisent a lrsquoapparition drsquoune application malveillante sontmultiples

ndash Malveillance deliberee de lrsquoauteur qui veut gagner de lrsquoargent rapidement Crsquoestle cas le plus simple Un scenario courant consiste a cloner une applicationen vogue tout en y ajoutant du code malveillant

ndash Compromission drsquoun editeur drsquoapplications a son insu Crsquoest la ligne de defenseadoptee par plusieurs editeurs drsquoapplications apres avoir ete pointe du doigtCette defense est malheureusement credible car la plupart des developpeurs sontdes individus isoles ou des micro-entreprises attirees par les success stories a laAngry Birds et bien souvent sans aucune securite dans les developpements

ndash Integration de librairies tierce partie malveillantes dans un programme sainLrsquoauteur drsquoune application populaire (a savoir Tank Hero ) a ainsi an-nonce avoir ete contacte par un fournisseur drsquoapplications probablementmalveillantes qui lui proposait un accord commercial 37

Mais lrsquoidentification des applications malveillantes nrsquoest pas la seule raison quipeut conduire a auditer une application Android Parmi drsquoautres raisons legitimes on peut citer

ndash Verifier que lrsquoapplication fait bien ce qursquoelle pretend faire Ce point est parti-culierement critique pour les applications de securite qui mettent en œuvre duchiffrement ou de la gestion de mots de passe par exemple Dans le domaineles surprises sont nombreuses drsquoautant que les applications mobiles nrsquoont pasencore la maturite des applications bureautiques et que les contraintes

36 httpwwwvibercom

37 httpwwwredditcomrAndroidcommentsfm3cuspyware_company_wants_us_to_embed_

their_code_into

N Ruff 139

du monde embarque se font sentir (puissance de calcul sources drsquoentropieremanence de lrsquoallocateur memoire Java etc)

ndash Recherche des failles de securite Et oui les applications Android sont aussivulnerables aux buffer overflows lorsqursquoelles utilisent du code natif (compileavec le NDK) et meme des injections SQL (meme si SQLite nrsquoimplemente pasdrsquoequivalent a xp cmdshell) Il existe par ailleurs des attaques specifiques aumonde Android comme les BroadcastReceiver qui ne verifieraient pas la sourcedes messages recus

Le probleme principal avec lrsquoaudit drsquoapplications Android nrsquoest pas techniqueLe probleme crsquoest lrsquoeuphorie du marche proliferation drsquoapplications et mises a jourfrequentes qui obligent a automatiser et industrialiser les audits 38

52 Auditer comment

Lrsquoaudit securite est une tache difficile a modeliser car elle tire parti de la creativitede lrsquoauditeur On peut toutefois identifier les grandes lignes suivantes

1 Recuperer lrsquoapplication

2 Decompresser les ressources

3 Desassembler le bytecode

4 Decompiler le bytecode (lorsque crsquoest possible)

5 Desassembler le code natif

6 Deboguer lrsquoapplication en cours drsquoexecution (sur un telephone reel ou danslrsquoemulateur)

Cette methodologie nrsquoest pas exhaustive elle ne donne pas acces au contenutelecharge ulterieurement (par exemple au travers des publicites integrees) Voyonsles methodes et les difficultes associees a chaque etape

Recuperer lrsquoapplication Cette etape nrsquoest pas trop compliquee pour qui est preta installer lrsquoapplication cible sur son telephone Apres installation le fichier APK estconserve dans le repertoire dataapp Selon les permissions appliquees au systeme defichiers il nrsquoest pas necessairement possible de lister le contenu de ce repertoire maisles paquets restent lisibles par lrsquooutil adb et le nom de paquet peut etre determinedepuis la MarketPlace ou le menu parametres du telephone (le nom exact estpaquet-Napk ou N vaut generalement 1)

38 httpwwwappanalysisorg

140 Securite du systeme Android

Toute autre methode est complexe et probablement illegale Parmi les methodespossibles on peut citer lrsquoinstallation de lrsquoapplication MarketPlace dans un emulateurou le reverse engineering de lrsquoapplication MarketPlace a des fins de reimplementation(cette derniere etant toutefois volumineuse donc complexe a analyser)

Depuis la version 22 du systeme Android et si lrsquoapplication lrsquoautorise il estpossible drsquoinstaller une application sur la carte SD Mais lrsquoapplication est alorsstockee dans un fichier asec chiffre Ce fichier est inexploitable jusqursquoa ce quele mecanisme et la cle de chiffrement soient connus

On peut imaginer qursquoune application extremement malveillante pourrait exploiterune faille des lrsquoinstallation pour elever ses privileges vers root et dissimuler ses traces(ie se rendre inaccessible de lrsquoexterieur) Ce cas ne srsquoest pas encore produit dansla nature a lrsquoheure ou jrsquoecris ces lignes mais srsquoavere techniquement faisable

Il faut noter que la MarketPlace de Google nrsquoest pas la seule disponible maisqursquoil existe egalement des MarketPlaces drsquooperateurs ou de tiers ainsi Amazoncommercialise desormais des applications Android 39 Cette proliferation complexifiedrsquoautant la tache drsquoanalyse des MarketPlaces La methode la plus universelle pourrecuperer la source drsquoinstallation drsquoune application reste donc de lrsquoinstaller sur untelephone

Un utilisateur peut installer des applications depuis des sources externes a laMarketPlace si lrsquooption autoriser les sources inconnues est cochee dans lesparametres de configuration Il existe des applications legitimes accessibles en dehorsdes MarketPlaces mais il existe egalement des bases drsquoapplications piratees surInternet dont lrsquoinnocuite ne peut pas etre garantie

Notons que certaines applications meme parmi celles disponibles sur les Market-Places officielles exigent au prealable un acces root au telephone

Decompresser les ressources Les fichiers places a lrsquointerieur drsquoun paquet APKsont optimises drsquoune maniere ou drsquoune autre avant drsquoetre compresses Ceci srsquoappliqueaussi bien au bytecode qursquoaux ressources textuelles (comme les fichiers XML)

Lrsquoune des optimisations principales est la deduplication de donnees Ainsi ilnrsquoexiste qursquoune seule instance de chaque chaine de caracteres dans un fichier DEXDifferents encodages optimises sont egalement utilises tel que LEB128 pourla representation des entiers (Little Endian Base 128 aussi utilise dans le formatDWARF)

Toutes ces optimisations nrsquoont pas pour but la protection logicielle et sont parfai-tement reversibles Lrsquooutil aapt fourni avec le SDK officiel permet ainsi drsquoexplorerle contenu du manifeste drsquoun paquet APK Les techniques drsquooptimisation ont ete

39 httpwwwamazoncomappstore

N Ruff 141

analysees et documentees par des tiers ce qui a permis la production drsquooutils dedecompression comme apktool 40

Desassembler le bytecode Avec le SDK officiel est fourni lrsquooutil dexdump quipermet de lister le bytecode contenu dans un fichier CLASSESDEX

Le format de fichier DEX a ete lui aussi analyse et documente 41 ce qui a permisla production de desassembleurs tiers comme baksmali

Le code genere suit la syntaxe Jasmin 42 bien connue dans le monde Java tra-ditionnel Cette syntaxe peut sembler obscure de prime abord mais elle est par-faitement reguliere donc finalement tres simple a apprehender Prenons un exempleissu drsquoune application reelle voici ci-dessous le code drsquoune methode appeleeemptyResult telle que produit par baksmali

method protected static emptyResult(LjavalangString )Z

locals 1

parameter result

prologue

line 306

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Toutes les directives commencent par un point Leur nom est relativement explicitelocals 1 va par exemple indiquer la presence drsquoune seule variable locale Le nomassigne aux opcodes de la machine virtuelle est egalement assez parlant

pN represente lrsquoargument numero N passe a la methode vN represente le re-gistre numero N (Dalvik est une machine virtuelle a registres et non a pile)

Munis de ces informations decortiquons la seule operation reellement complexeeffectuee dans cet extrait de code

40 httpcodegooglecompandroid-apktool

41 httpwwwnetmitecomandroidmydroiddalvikdocsdex-formathtml

42 httpjasminsourceforgenet

142 Securite du systeme Android

invoke-static Invoque une methode sta-tique Il existe egalementun opcode invoke-virtual

pour les methodes virtuellesinvoke-super pour la methodede la superclasse etc

p0 La methode appelee prend unseul argument La valeur de cetargument provient du premierargument passe a la methodeemptyResult

LcomutilsStringUtils-gtisEmpty Invoque la methode isEmpty de laclasse comutilsStringUtils L est un prefixe accole a tousles litteraux

(LjavalangString) Le premier (et seul) argument estde type javalangString

Z La methode retourne un booleen

A titre de reference voici les differents types natifs disponibles dans Jasmin

Z BooleenB OctetC CaractereS Entier court (16 bits)I Entier (32 bits)J Entier long (64 bits)F Flottant (32 bits)D Double (64 bits)

Lrsquoavantage majeur de lrsquooutil tiers apktool est la possibilite de modifier le bytecodeou les ressources drsquoune application puis de la recompiler dans une version fonctionnelleCeci permet drsquoutiliser une technique drsquoanalyse aussi ancienne que lrsquoinformatiqueappelee printf debugging

Dans le monde Android lrsquoutilisation de Systemout doit etre remplacee parandroidutilLog Cette classe definit plusieurs methodes ndash respectivement v d iw e et wtf ndash qui correspondent chacune a un niveau de verbosite ndash et dont lesarguments sont enregistres dans le journal systeme (sauf le niveau debug) Cejournal peut etre consulte a lrsquoaide de la commande adb logcat apparait en temps

N Ruff 143

reel dans lrsquooutil DDMS et peut egalement etre consulte par toute application quidispose de la permission READ LOGS

Si lrsquoon souhaite connaitre lrsquoargument passe a la methode emptyResult danslrsquoexemple precedent il suffit alors drsquoajouter un appel a nrsquoimporte quelle methode dela classe Log de la maniere suivante

method protected static emptyResult(LjavalangString )Z

locals 2

parameter result

prologue

line 306

const -string v1 PrintfDebuggingStyle

invoke -static v1 p0 LandroidutilLog-gtd(LjavalangStringLjavalang

String )I

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Une variable locale v1 a ete ajoutee contenant une chaine de caracteres fixe Lamethode d() est ensuite invoquee Cette modification est equivalente au code Javasuivant

Logd(PrintfDebuggingStyle ltp0 gt)

On peut constater experimentalement que de nombreuses applications de laMarketPlace font usage de lrsquoAPI Log ce qui permet de collecter des donnees defonctionnement parfois tres (trop) interessantes

Le journal systeme peut etre collecte a distance par un developpeur lors ducrash de son application si lrsquoutilisateur lrsquoautorise Cette technique a ete presenteepar Renaud Lifchitz lors de la conference 27c3 pour espionner les deplacements drsquounutilisateur 43

Decompiler le bytecode Comme avec tout bytecode de haut niveau (ex JavaNET) la semantique de lrsquoapplication est conservee

Il est donc possible de decompiler du bytecode Dalvik et de reconstruire le codeJava drsquoorigine (sans les commentaires ndash seule information perdue a la compilation) Lepremier outil public capable drsquoune telle operation fut undx 44 de Marc Schoenefeld Cetoutil est toutefois bogue et non maintenu par son auteur Le meilleur outil disponibleactuellement est lrsquooutil dex2jar 45 qui reconstruit du bytecode Java a partir du

43 httpeventscccdecongress2010Fahrplanevents4151enhtml

44 httpwwwillegalaccessorgundxhtml

45 httpcodegooglecompdex2jar

144 Securite du systeme Android

bytecode Dalvik Les outils classiques de decompilation Java 46 47 srsquoappliquentalors

Compte-tenu de la facilite deconcertante avec laquelle il est possible drsquoanalyserles applications Android (et donc de les craquer entre autres) Google a mis adisposition des developpeurs une bibliotheque tres complete de gestion des licences enligne Licensing Verification Library (LVL) 48 Toutes les versions de cette bibliothequeont malheureusement ete craquees elles aussi a lrsquoheure ou jrsquoecris ces lignes

Une autre contre-mesure mise en place par Google consiste a integrer un obfusca-teur de bytecode dans la chaine de compilation ProGuard 49 Cet outil relativementpuissant est configurable par le developpeur au travers du fichier proguardcfg toutefois le fichier de configuration par defaut (reproduit ci-apres) nrsquoopere que lerenommage des classes et methodes invisibles a lrsquoexterieur de lrsquoapplication ce qui estpeu efficace face a un attaquant determine

-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontpreverify

-verbose

-optimizations codesimplificationarithmetic field classmerging

-keep public class extends androidappActivity

-keep public class extends androidappApplication

-keep public class extends androidappService

-keep public class extends androidcontentBroadcastReceiver

-keep public class extends androidcontentContentProvider

-keep public class extends androidappbackupBackupAgentHelper

-keep public class extends androidpreferencePreference

-keep public class comandroidvendinglicensingILicensingService

-keepclasseswithmembernames class

native ltmethods gt

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet)

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet int)

-keepclassmembers enum

public static [] values ()

public static valueOf(javalangString)

46 httpmembersfortunecitycomneshkovdjhtml

47 httpjavadecompilerfreefr

48 httpdeveloperandroidcomguidepublishinglicensinghtml

49 httpdeveloperandroidcomguidedevelopingtoolsproguardhtml

N Ruff 145

-keep class implements androidosParcelable

public static final androidosParcelable$Creator

Au vu des resultats obtenus on peut considerer que lrsquoobfuscation de bytecode Javadans le monde Android est en retard sur lrsquoobfuscation de code x86 dans le monde PCLes techniques de complexification du flot de controle ou de construction dynamiquedes constantes ne sont pas encore repandues dans les applications commerciales pourAndroid Afin de combler ce manque des projets paralleles (comme AndroGuard 50)fleurissent - mais on peut supposer que la solution integree au SDK fourni par Googlerestera la solution majoritairement utilisee par les applications (pour des raisons desimplicite evidentes)

Desassembler du code natif Lors de lrsquoaudit drsquoune application Android il estpossible de rencontrer du code natif dans deux cas

1 Lrsquoapplication contient des bibliotheques natives compilees avec le NDK

2 Lrsquoapplication contient des applications natives ou srsquoavere etre elle-meme uneapplication native Ce cas est courant avec les applications malveillantes quiembarquent du code natif pour exploiter des failles noyau 51

Dans les deux cas Android ne presente aucune specificite par rapport a unLinuxARM classique Les fichiers natifs sont au format ELF La chaine de compilationnative est construite autour du compilateur GCC Tous les outils sont disponiblesdepuis longtemps pour analyser des tels binaires (ex IDA Pro Hex-Rays DecompilerARM etc)

Deboguer lrsquoapplication Une application Java compilee en mode debug peutetre deboguee a distance au travers du protocole standard Java Debug Wire Protocol(JDWP) defini dans le cadre de Java Platform Debugger Architecture (JPDA)

Les environnements de developpement Java classiques (comme Eclipse) per-mettent ainsi de deboguer une application a distance une fois celle-ci installee sur letelephone

Il est egalement possible drsquoutiliser le venerable JDB (fourni avec le SDK Java 52)bien que cet outil nrsquoait jamais depasse le statut de preuve de concept a mon avis

Lrsquooutil DDMS fourni avec le SDK Android repose egalement sur JPDA Cetoutil ne permet toutefois pas le debogage drsquoapplications mais seulement lrsquoanalyse deperformance

50 httpcodegooglecompandroguard

51 httpstealthopenwallnetxSports

52 httpdownloadoraclecomjavase142docstooldocssolarisjdbhtml

146 Securite du systeme Android

La liste des applications pouvant etre deboguees sur un systeme Android srsquoobtientavec la commande adb jdwp

Le vrai probleme se pose pour les applications qui nrsquoont pas ete compilees enmode debug Ceci implique que le manifeste de lrsquoapplication ne contient pasdrsquoentree ltapplication androiddebuggable=truegt De plus la plupart des outilsde debogage Java necessitent que le bytecode contienne des indications sur les numerosde lignes dans le code source drsquoorigine (il srsquoagit drsquoune limitation arbitraire qui nesrsquoapplique pas a lrsquooutil JavaSnoop 53 par exemple)

Fort heureusement il est possible de desassembler ces applications puis de lesreassembler en mode debug avec lrsquooutil apktool 54 Le processus est complexe etle resultat peu convivial mais il a le merite drsquoexister

Pour reinstaller lrsquoapplication modifiee sur un equipement reel il est necessairede la signer a nouveau La procedure est simple et parfaitement documentee parGoogle

Il faut drsquoabord generer une cle personnelle autosignee a duree de vie extremementlongue

$ keytool -genkey -v -keystore mykeykeystore -alias nom_alias -keyalg RSA -

keysize 2048 -validity 10000

Il faut ensuite signer le nouvel APK avec les outils du SDK Java

$ jarsigner -verbose -keystore mykeykeystore nom_applicationapk nom_alias

Enfin il est recommande drsquoaligner le code sur un multiple de 4 octets pour desraisons de performance

$ zipalign -v 4 nom_applicationapk nom_application_finalapk

Instrumentation Il est possible drsquoinstrumenter une application Java a lrsquoaide declasses specifiques a Android (androidappInstrumentation 55) Cette methodefournit des resultats detailles et personnalisables sur le fonctionnement interne drsquouneapplication elle necessite toutefois une decompilation et une modification prealablede lrsquoapplication a auditer

A lrsquoheure ou jrsquoecris ces lignes il nrsquoexiste pas (a ma connaissance) drsquooutil permettantde generaliser et drsquoautomatiser le processus a tout fichier APK Cette voie de recherchepourrait toutefois donner des resultats interessants

53 httpwwwaspectsecuritycomtoolsjavasnoop

54 httpcodegooglecompandroid-apktoolwikiSmaliDebugging

55 httpdeveloperandroidcomreferenceandroidappInstrumentationhtml

N Ruff 147

Outils specifiques Les outils disponibles actuellement dans le monde Android sontrudimentaires quoi que suffisants

Toutefois on peut raisonnablement estimer que la quantite et la qualite des outilsdisponibles va croitre de concert avec la popularite du systeme Android

A lrsquoheure ou jrsquoecris ces lignes la version 61 du logiciel IDA Pro 56 vient de sortirCette version ajoute le support du format DEX et du bytecode Dalvik ainsi que ledebogage a distance des applications Android natives

On peut supposer que drsquoautres outils couramment utilises par les auditeurs ensecurite vont etre mis a jour pour srsquoadapter au monde Android

6 Conclusion

Le systeme Android nrsquoa malheureusement pas profite de lrsquoopportunite unique quilui etait donnee repartir de la feuille blanche et creer un systeme drsquoexploitation sur par conception

A cause drsquoun heritage logiciel peu fiable ainsi que des contraintes materielles etcommerciales issues du monde de la telephonie mobile le systeme resultant est uncompromis qui laisse une large place a la creativite des attaquants

Celle-ci est drsquoautant plus exacerbee que la telephonie mobile est un phenomene demasse (il y a plus de telephones mobiles que drsquoordinateurs dans le monde) et que letelephone mobile est par conception un systeme de paiement (ce que nrsquoest pas un PCtraditionnel)

A ce tableau vient srsquoajouter 30 ans drsquoexperience dans le domaine des attaqueslogicielles appliquees a un ecosysteme applicatif qui nrsquoexistait pas il y a 5 ans

Toutes les conditions sont donc reunies pour que des attaques de grande ampleurmotivees par lrsquoargent se produisent contre les materiels grand public equipes dusysteme Android (telephones tablettes televisions )

La bonne nouvelle pour lrsquoexpert en securite crsquoest qursquoil est encore temps de srsquoymettre Android est suffisamment jeune et accessible aux nouveaux entrants ce quinrsquoest plus le cas de la plateforme PC ou les techniques drsquoattaque (ex exploitationdrsquoun heap overflow) et de defense (ex obfuscation logicielle) ont atteint des sommetsde raffinement desormais accessibles aux seuls experts les plus pointus du domaine

7 Sites et outils

71 Sites officiels

ndash Android portail officiel httpwwwandroidcom

56 httpwwwhex-rayscomidapro

148 Securite du systeme Android

ndash Android MarketPlace officielle httpsmarketandroidcomndash Android reference des developpeurs httpdeveloperandroidcom

72 Sites non officiels

ndash Reference de la machine virtuelle Dalvik httpdalvikvmcom

73 Outils tiers

ndash Google Android Debugging Utilities httpsitesgooglecomsiteortegaalfredoandroid

ndash Undx httpwwwillegalaccessorgundxhtmlndash SmaliBaksmali httpcodegooglecompsmalindash Dedexer httpdedexersourceforgenetndash Dex2Jar httpcodegooglecompdex2jarndash TaintDroid httpwwwappanalysisorg

ndash AndroGuard httpandroguardblogspotcom

References

1 Benjamin Morin Modele de securite drsquoAndroid MISC 51 2010

2 K Chen Reversing and exploiting an apple firmware update httpwwwblackhatcom

presentationsbh-usa-09CHENBHUSA09-Chen-RevAppleFirm-PAPERpdf BlackHat 2009

3 Alexandre Gazet Sticky fingers amp KBC Custom Shop httpwwwssticorg2011presentation

sticky_fingers_and_kbc_custom_shop SSTIC 2011

4 Loıc Duflot and Yves-Alexis Perez Quelques elements en matiere de securite des cartes reseau http

wwwssticorg2010presentationPeut_on_faire_confiance_aux_cartes_reseau SSTIC 2010

5 Alexander Tereshkin and Rafal Wojtczuk Introducing Ring -3 Rootkits httpwwwblackhat

compresentationsbh-usa-09TERESHKINBHUSA09-Tereshkin-Ring3Rootkit-SLIDESpdf Black-Hat USA 2009

6 Loıc Duflot Yves-Alexis Perez and Benjamin Morin Run-time firmware integrity verification what ifyou canrsquot trust your network card CanSecWest 2011

7 Ralf-Philipp Weinmann All Your Baseband Are Belong To Us httpeventscccdecongress

2010Fahrplanevents4090enhtml CCC 2010

8 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Formal Model to Analyzethe Permission Authorization and Enforcement in the Android Framework SecureComrsquo10

9 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Small but Non-negligibleFlaw in the Android Permission Scheme Wook Shin Sanghoon Kwak Shinsaku Kiyomoto KazuhideFukushima et Toshiaki Tanaka IEEE POLICY 2010

10 Marc Schonefled Reconstructing Dalvik Applications httpcansecwestcomcsw09

csw09-schoenefeldpdf CanSecWest 2009

N Ruff 149

11 Sergio Alvarez The Smart-Phones Nightmare (iPhone-oriented parts about Android) http

cansecwestcomcsw09csw09-alvarezpdf CanSecWest 2009

12 Nicolas Economou Alfredo Ortega Smartphone (in)security httpcansecwestcomcsw09

csw09-ortega-economoupdf CanSecWest 2009

13 Jesse Burns Exploratory Android Surgery httpwwwblackhatcompresentationsbh-usa-09

BURNSBHUSA09-Burns-AndroidSurgery-SLIDESpdf BlackHat USA 2009

14 Kevin Mahaffey John Hering App Attack httpsmediablackhatcombh-us-10presentations

Mahaffey_HeringBlackhat-USA-2010-Mahaffey-Hering-Lookout-App-Genome-slidespdf Black-Hat USA 2010

15 Nils The Risk you carry in your Pocket httpsmediablackhatcombh-ad-10Nils

Black-Hat-AD-2010-android-sandcastle-slidespdf BlackHat Abu Dhabi 2010

16 Raphael Rigo Android Reverse Engineering and Forensics httpsdeepsecnetdocsspeaker

htmlPSLOT45 DeepSec 2010

17 Itzhak Avraham Popping Shell on A(ndroid)RM Devices httpsmediablackhatcombh-dc-11

AvrahamBlackHat_DC_2011_Avraham-Popping_Android_Devices-Slidespdf BlackHat DC 2011

18 Jon Oberheide httpjonoberheideorgblog20100625remote-kill-and-install-on-google-android

19 Jon Oberheide httpjonoberheideorgblog20100628a-peek-inside-the-gtalkservice-connection

20 httpwwwandroidpolicecom20110301the-mother-of-all-android-

malware-has-arrived-stolen-apps-released-to-the-market-that-root-

your-phone-steal-your-data-and-open-backdoor

  • Seacutecuriteacute du systegraveme Android
  • N Ruff

N Ruff 135

au processus navigateur - ce qui inclut lrsquointegralite de la carte SD puisque celle-ci estformatee en FAT (donc sans aucun controle drsquoacces)

On notera dans cette attaque lrsquoutilisation de lrsquoURL contentcomandroid

htmlfileproviderltfilenamegt qui permet de lire nrsquoimporte quel fichier du telephoneau travers drsquoun Content Provider 25 ndash une notion specifique a Android qui prometdrsquoetre encore source de nombreuses failles vu la surface drsquoattaque exposee

Par ailleurs outre les schemas traditionnels (file http etc) Androidsupporte par defaut des schemas plus specifiques et donc moins testes

Parmi les schemas supportes on peut citer content (qui permet de com-muniquer avec un Content Provider) market (qui permet drsquointeragir avec laMarketPlace comme par exemple marketdetailsid=ltpackagegt) ou android

resource (qui permet drsquoacceder a une ressource dans un paquet comme parexemple androidresourceltpaquetgtltressourcegt)

Failles systeme Les failles systeme ne sont pas legion mais ont toutes un impactcritique sur la securite du systeme

Parmi les failles les plus connues (car les plus exploitees dans la nature ) onpeut citer les failles publiees sur le site xSports 26 a savoir

ndash Exploid faille udev bien connue des administrateurs Linux CVE-2009-1185

ndash Rage Against The Cage faille liee au mauvais comportement du processusadb lorsque RLIMIT NPROC a ete atteint 27 - lrsquoappel a setuid() echoue mais leprocessus nrsquoen tient pas compte et continue son execution son lrsquoidentite root

ndash Killing In The Name Of faille permettant de modifier la valeur de la constanteglobale (normalement en lecture seule) rosecure en jouant sur une erreurdrsquoimplementation de devashmem Cette constante definie a la compilationdu systeme indique au processus adb srsquoil doit srsquoexecuter sous lrsquoidentite root 28

Les applications legitimes (comme VISIONary+ 29) ou malveillantes (la pluscelebre ayant probablement ete DroidDream [20] ) ne se privent pas drsquoexploiter cesfailles dans la nature

Il faut toutefois noter qursquoil existe une difference subtile entre obtenir un accesroot et obtenir un acces root persistant au redemarrage du telephone En effetbien qursquoil soit virtuellement possible drsquoecrire dans le repertoire system (au traversde la commande adb remount ou drsquoun remount rw a lrsquointerieur du terminal) un

25 httpdeveloperandroidcomguidetopicsproviderscontent-providershtml

26 httpstealthopenwallnetxSports

27 httpdtorsorg20100825reversing-latest-exploid-release

28 httpsourceandroidcomportingbuild_systemhtml

29 httpandroidmodacocomcontentsoftware32035019-nov-r14-visionary-one-click-root

136 Securite du systeme Android

certain nombre de telephones modernes disposent drsquoune protection contre le reflashageintempestif de la partition systeme Cette protection est souvent liee a lrsquoutilisationdrsquoun composant memoire capable de verifier une signature cryptographique (parexemple un composant eMMC 30)

Dans le jargon on dit que la possibilite de reflasher la partition systeme avecun firmware non signe necessite un telephone en mode S-OFF Sur de nombreuxtelephones de marque HTC 31 le mode courant (S-ON ou S-OFF) peut etre obtenuen appuyant sur la touche Volume Down au demarrage du telephone

Failles logiques Il existe une categorie de failles difficiles a detecter et pourtantdevastatrices les failles logiques

Lrsquoun des exemples les plus fameux est le deblocage du telephone en utilisant soncompte Google Dans certains cas de corruption de donnees ce processus peut echouercomme documente officiellement par Google 32

Dans ce cas le telephone doit normalement etre reinitialise en configuration drsquousine(lorsque crsquoest possible ndash la procedure exacte depend du constructeur) Heureusementil srsquoavere que le mot de passe null est toujours accepte comme valide

Un autre bogue celebre affecte le Motorola Droid et potentiellement drsquoautresLorsque le telephone est verrouille mais qursquoun appel entrant arrive il est possibledrsquoappuyer sur le bouton Back et ainsi drsquoarriver a lrsquoecran drsquoaccueil du telephone 33

Enfin une superbe faille logique a ete decouverte sur le site httpsmarket

androidcom qui permet drsquoinstaller a distance des applications sur un telephoneAndroid Grace a une faille de type XSS persistant sur ce site 34 il etait possible defaire installer une application puis de lrsquoexecuter automatiquement sur le telephonede nrsquoimporte quel utilisateur Un utilisateur pouvait etre victime de cette attaque encliquant sur un lien depuis son telephone ou son PC (sous reserve drsquoetre logue sousson compte Google)

La technique utilisee pour executer automatiquement lrsquoapplication apres soninstallation merite drsquoetre soulignee elle consiste a declarer dans le manifeste delrsquoapplication que celle-ci supporte un nouveau schema drsquoURI (par exemple trigger

) puis a invoquer un lien trigger depuis la page Web drsquoorigine

Que peut-on faire Compte-tenu de la quantite de code C embarque dans lesysteme Android il existe et il existera des bogues drsquoimplementation dans ce systeme

30 httpenwikipediaorgwikiMultiMediaCardeMMC

31 Un site de reference pour les telephones de marque HTC httpunrevokedcom32 httpcodegooglecompandroidissuesdetailid=3006

33 httptechcrunchcom20100111verizon-droid-security-bug

34 httpjonoberheideorgblog20110307how-i-almost-won-pwn2own-via-xss

N Ruff 137

conduisant pour certains a des failles de securite WebKit et le systeme Linux sontdes cibles de choix compte-tenu de la surface drsquoattaque exposee

Toutefois et contrairement a un systeme classique la mise a jour a grandeechelle srsquoavere extremement problematique pour plusieurs raisons

ndash Le facteur drsquoechelle (plusieurs millions drsquounites en circulation rien qursquoen France)ndash La diversite et le haut degre de personnalisation des plateformes materielles et

logiciellesndash La propriete du terminal (lorsqursquoil a ete achete par lrsquoutilisateur)ndash Les risques commerciaux en cas de blocage definitif du terminal (brick)On peut raisonnablement considerer qursquoen dehors du geek moyen aucun utilisateur

de smartphone sous Android nrsquoa jamais mis a jour son systemeLes statistiques officielles de Google sur la repartition des ordiphones par version

drsquoAndroid permettent de se faire une idee objective sur la vitesse de renouvellementdu parc 35 A lrsquoheure ou jrsquoecris ces lignes malgre la disponibilite du systeme Android23 la majorite du parc se compose encore de systemes Android 21 et 22 ndash sanscompter sur les irreductibles 6 qui disposent drsquoune version anterieure Je laisseaux statisticiens le soin de produire une etude plus detaillee qui sera neanmoinsbiaisee par le fait que les donnees mondiales sont agregees tandis que les politiquesde renouvellement des operateurs sont tres variables drsquoun pays a lrsquoautre

Dans ces conditions il est loin le moment ou un operateur mobile fera du NAC-NAP sur son reseau pour interdire la connexion de ordiphones qui ne sont pas a jourdes correctifs

Techniquement le protocole FOTA (Firmware Over-The-Air) permet toutefoisde mettre a jour a distance des terminaux Ce protocole a deja ete utilise a grandeechelle lorsqursquoune backdoor (exploitable a distance) a ete decouverte sur certainstelephones HTC de modele Hero et Evo

5 Audit drsquoapplications Android

51 Auditer pourquoi

Lrsquoaudit securite drsquoapplications tierces est une activite vieille comme le conseil ensecurite Toutefois le circuit de distribution logicielle etant assez different entre lemonde du logiciel drsquoentreprise et les MarketPlaces pour mobiles il est vrai que laquestion merite drsquoetre posee a nouveau

A lrsquoheure ou jrsquoecris ces lignes Google nrsquoeffectue aucune verification de securite surles applications publiees dans lrsquoAndroid Market Cet etat de fait pourrait changer

35 httpdeveloperandroidcomresourcesdashboardplatform-versionshtml

138 Securite du systeme Android

compte-tenu de la proliferation drsquoapplications malveillantes de plus en plus agressiveset sophistiquees

Parmi tous les risques lies aux terminaux mobiles (vol de lrsquoequipement intrusionvia une faille du navigateur etc) on constate dans les faits que le risque principalaujourdrsquohui est la proliferation drsquoapplications malveillantes La malveillance estune notion assez floue et certaines applications peuvent se situer dans une zone grise - comme lrsquoapplication de voix sur IP Viber 36 qui duplique tous les contactsde lrsquoutilisateur sur un serveur central faisant office drsquoannuaire telephonique Maisdrsquoautres applications font lrsquounanimite contre elles comme les applications utilisant desfailles systeme pour elever leurs privileges vers root etou envoyer des SMS surtaxessans le consentement de lrsquoutilisateur Ces applications sont drsquoailleurs tuees parGoogle une fois identifiees car elles violent clairement les regles drsquoutilisation delrsquoAndroid Market

Les circuits qui conduisent a lrsquoapparition drsquoune application malveillante sontmultiples

ndash Malveillance deliberee de lrsquoauteur qui veut gagner de lrsquoargent rapidement Crsquoestle cas le plus simple Un scenario courant consiste a cloner une applicationen vogue tout en y ajoutant du code malveillant

ndash Compromission drsquoun editeur drsquoapplications a son insu Crsquoest la ligne de defenseadoptee par plusieurs editeurs drsquoapplications apres avoir ete pointe du doigtCette defense est malheureusement credible car la plupart des developpeurs sontdes individus isoles ou des micro-entreprises attirees par les success stories a laAngry Birds et bien souvent sans aucune securite dans les developpements

ndash Integration de librairies tierce partie malveillantes dans un programme sainLrsquoauteur drsquoune application populaire (a savoir Tank Hero ) a ainsi an-nonce avoir ete contacte par un fournisseur drsquoapplications probablementmalveillantes qui lui proposait un accord commercial 37

Mais lrsquoidentification des applications malveillantes nrsquoest pas la seule raison quipeut conduire a auditer une application Android Parmi drsquoautres raisons legitimes on peut citer

ndash Verifier que lrsquoapplication fait bien ce qursquoelle pretend faire Ce point est parti-culierement critique pour les applications de securite qui mettent en œuvre duchiffrement ou de la gestion de mots de passe par exemple Dans le domaineles surprises sont nombreuses drsquoautant que les applications mobiles nrsquoont pasencore la maturite des applications bureautiques et que les contraintes

36 httpwwwvibercom

37 httpwwwredditcomrAndroidcommentsfm3cuspyware_company_wants_us_to_embed_

their_code_into

N Ruff 139

du monde embarque se font sentir (puissance de calcul sources drsquoentropieremanence de lrsquoallocateur memoire Java etc)

ndash Recherche des failles de securite Et oui les applications Android sont aussivulnerables aux buffer overflows lorsqursquoelles utilisent du code natif (compileavec le NDK) et meme des injections SQL (meme si SQLite nrsquoimplemente pasdrsquoequivalent a xp cmdshell) Il existe par ailleurs des attaques specifiques aumonde Android comme les BroadcastReceiver qui ne verifieraient pas la sourcedes messages recus

Le probleme principal avec lrsquoaudit drsquoapplications Android nrsquoest pas techniqueLe probleme crsquoest lrsquoeuphorie du marche proliferation drsquoapplications et mises a jourfrequentes qui obligent a automatiser et industrialiser les audits 38

52 Auditer comment

Lrsquoaudit securite est une tache difficile a modeliser car elle tire parti de la creativitede lrsquoauditeur On peut toutefois identifier les grandes lignes suivantes

1 Recuperer lrsquoapplication

2 Decompresser les ressources

3 Desassembler le bytecode

4 Decompiler le bytecode (lorsque crsquoest possible)

5 Desassembler le code natif

6 Deboguer lrsquoapplication en cours drsquoexecution (sur un telephone reel ou danslrsquoemulateur)

Cette methodologie nrsquoest pas exhaustive elle ne donne pas acces au contenutelecharge ulterieurement (par exemple au travers des publicites integrees) Voyonsles methodes et les difficultes associees a chaque etape

Recuperer lrsquoapplication Cette etape nrsquoest pas trop compliquee pour qui est preta installer lrsquoapplication cible sur son telephone Apres installation le fichier APK estconserve dans le repertoire dataapp Selon les permissions appliquees au systeme defichiers il nrsquoest pas necessairement possible de lister le contenu de ce repertoire maisles paquets restent lisibles par lrsquooutil adb et le nom de paquet peut etre determinedepuis la MarketPlace ou le menu parametres du telephone (le nom exact estpaquet-Napk ou N vaut generalement 1)

38 httpwwwappanalysisorg

140 Securite du systeme Android

Toute autre methode est complexe et probablement illegale Parmi les methodespossibles on peut citer lrsquoinstallation de lrsquoapplication MarketPlace dans un emulateurou le reverse engineering de lrsquoapplication MarketPlace a des fins de reimplementation(cette derniere etant toutefois volumineuse donc complexe a analyser)

Depuis la version 22 du systeme Android et si lrsquoapplication lrsquoautorise il estpossible drsquoinstaller une application sur la carte SD Mais lrsquoapplication est alorsstockee dans un fichier asec chiffre Ce fichier est inexploitable jusqursquoa ce quele mecanisme et la cle de chiffrement soient connus

On peut imaginer qursquoune application extremement malveillante pourrait exploiterune faille des lrsquoinstallation pour elever ses privileges vers root et dissimuler ses traces(ie se rendre inaccessible de lrsquoexterieur) Ce cas ne srsquoest pas encore produit dansla nature a lrsquoheure ou jrsquoecris ces lignes mais srsquoavere techniquement faisable

Il faut noter que la MarketPlace de Google nrsquoest pas la seule disponible maisqursquoil existe egalement des MarketPlaces drsquooperateurs ou de tiers ainsi Amazoncommercialise desormais des applications Android 39 Cette proliferation complexifiedrsquoautant la tache drsquoanalyse des MarketPlaces La methode la plus universelle pourrecuperer la source drsquoinstallation drsquoune application reste donc de lrsquoinstaller sur untelephone

Un utilisateur peut installer des applications depuis des sources externes a laMarketPlace si lrsquooption autoriser les sources inconnues est cochee dans lesparametres de configuration Il existe des applications legitimes accessibles en dehorsdes MarketPlaces mais il existe egalement des bases drsquoapplications piratees surInternet dont lrsquoinnocuite ne peut pas etre garantie

Notons que certaines applications meme parmi celles disponibles sur les Market-Places officielles exigent au prealable un acces root au telephone

Decompresser les ressources Les fichiers places a lrsquointerieur drsquoun paquet APKsont optimises drsquoune maniere ou drsquoune autre avant drsquoetre compresses Ceci srsquoappliqueaussi bien au bytecode qursquoaux ressources textuelles (comme les fichiers XML)

Lrsquoune des optimisations principales est la deduplication de donnees Ainsi ilnrsquoexiste qursquoune seule instance de chaque chaine de caracteres dans un fichier DEXDifferents encodages optimises sont egalement utilises tel que LEB128 pourla representation des entiers (Little Endian Base 128 aussi utilise dans le formatDWARF)

Toutes ces optimisations nrsquoont pas pour but la protection logicielle et sont parfai-tement reversibles Lrsquooutil aapt fourni avec le SDK officiel permet ainsi drsquoexplorerle contenu du manifeste drsquoun paquet APK Les techniques drsquooptimisation ont ete

39 httpwwwamazoncomappstore

N Ruff 141

analysees et documentees par des tiers ce qui a permis la production drsquooutils dedecompression comme apktool 40

Desassembler le bytecode Avec le SDK officiel est fourni lrsquooutil dexdump quipermet de lister le bytecode contenu dans un fichier CLASSESDEX

Le format de fichier DEX a ete lui aussi analyse et documente 41 ce qui a permisla production de desassembleurs tiers comme baksmali

Le code genere suit la syntaxe Jasmin 42 bien connue dans le monde Java tra-ditionnel Cette syntaxe peut sembler obscure de prime abord mais elle est par-faitement reguliere donc finalement tres simple a apprehender Prenons un exempleissu drsquoune application reelle voici ci-dessous le code drsquoune methode appeleeemptyResult telle que produit par baksmali

method protected static emptyResult(LjavalangString )Z

locals 1

parameter result

prologue

line 306

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Toutes les directives commencent par un point Leur nom est relativement explicitelocals 1 va par exemple indiquer la presence drsquoune seule variable locale Le nomassigne aux opcodes de la machine virtuelle est egalement assez parlant

pN represente lrsquoargument numero N passe a la methode vN represente le re-gistre numero N (Dalvik est une machine virtuelle a registres et non a pile)

Munis de ces informations decortiquons la seule operation reellement complexeeffectuee dans cet extrait de code

40 httpcodegooglecompandroid-apktool

41 httpwwwnetmitecomandroidmydroiddalvikdocsdex-formathtml

42 httpjasminsourceforgenet

142 Securite du systeme Android

invoke-static Invoque une methode sta-tique Il existe egalementun opcode invoke-virtual

pour les methodes virtuellesinvoke-super pour la methodede la superclasse etc

p0 La methode appelee prend unseul argument La valeur de cetargument provient du premierargument passe a la methodeemptyResult

LcomutilsStringUtils-gtisEmpty Invoque la methode isEmpty de laclasse comutilsStringUtils L est un prefixe accole a tousles litteraux

(LjavalangString) Le premier (et seul) argument estde type javalangString

Z La methode retourne un booleen

A titre de reference voici les differents types natifs disponibles dans Jasmin

Z BooleenB OctetC CaractereS Entier court (16 bits)I Entier (32 bits)J Entier long (64 bits)F Flottant (32 bits)D Double (64 bits)

Lrsquoavantage majeur de lrsquooutil tiers apktool est la possibilite de modifier le bytecodeou les ressources drsquoune application puis de la recompiler dans une version fonctionnelleCeci permet drsquoutiliser une technique drsquoanalyse aussi ancienne que lrsquoinformatiqueappelee printf debugging

Dans le monde Android lrsquoutilisation de Systemout doit etre remplacee parandroidutilLog Cette classe definit plusieurs methodes ndash respectivement v d iw e et wtf ndash qui correspondent chacune a un niveau de verbosite ndash et dont lesarguments sont enregistres dans le journal systeme (sauf le niveau debug) Cejournal peut etre consulte a lrsquoaide de la commande adb logcat apparait en temps

N Ruff 143

reel dans lrsquooutil DDMS et peut egalement etre consulte par toute application quidispose de la permission READ LOGS

Si lrsquoon souhaite connaitre lrsquoargument passe a la methode emptyResult danslrsquoexemple precedent il suffit alors drsquoajouter un appel a nrsquoimporte quelle methode dela classe Log de la maniere suivante

method protected static emptyResult(LjavalangString )Z

locals 2

parameter result

prologue

line 306

const -string v1 PrintfDebuggingStyle

invoke -static v1 p0 LandroidutilLog-gtd(LjavalangStringLjavalang

String )I

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Une variable locale v1 a ete ajoutee contenant une chaine de caracteres fixe Lamethode d() est ensuite invoquee Cette modification est equivalente au code Javasuivant

Logd(PrintfDebuggingStyle ltp0 gt)

On peut constater experimentalement que de nombreuses applications de laMarketPlace font usage de lrsquoAPI Log ce qui permet de collecter des donnees defonctionnement parfois tres (trop) interessantes

Le journal systeme peut etre collecte a distance par un developpeur lors ducrash de son application si lrsquoutilisateur lrsquoautorise Cette technique a ete presenteepar Renaud Lifchitz lors de la conference 27c3 pour espionner les deplacements drsquounutilisateur 43

Decompiler le bytecode Comme avec tout bytecode de haut niveau (ex JavaNET) la semantique de lrsquoapplication est conservee

Il est donc possible de decompiler du bytecode Dalvik et de reconstruire le codeJava drsquoorigine (sans les commentaires ndash seule information perdue a la compilation) Lepremier outil public capable drsquoune telle operation fut undx 44 de Marc Schoenefeld Cetoutil est toutefois bogue et non maintenu par son auteur Le meilleur outil disponibleactuellement est lrsquooutil dex2jar 45 qui reconstruit du bytecode Java a partir du

43 httpeventscccdecongress2010Fahrplanevents4151enhtml

44 httpwwwillegalaccessorgundxhtml

45 httpcodegooglecompdex2jar

144 Securite du systeme Android

bytecode Dalvik Les outils classiques de decompilation Java 46 47 srsquoappliquentalors

Compte-tenu de la facilite deconcertante avec laquelle il est possible drsquoanalyserles applications Android (et donc de les craquer entre autres) Google a mis adisposition des developpeurs une bibliotheque tres complete de gestion des licences enligne Licensing Verification Library (LVL) 48 Toutes les versions de cette bibliothequeont malheureusement ete craquees elles aussi a lrsquoheure ou jrsquoecris ces lignes

Une autre contre-mesure mise en place par Google consiste a integrer un obfusca-teur de bytecode dans la chaine de compilation ProGuard 49 Cet outil relativementpuissant est configurable par le developpeur au travers du fichier proguardcfg toutefois le fichier de configuration par defaut (reproduit ci-apres) nrsquoopere que lerenommage des classes et methodes invisibles a lrsquoexterieur de lrsquoapplication ce qui estpeu efficace face a un attaquant determine

-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontpreverify

-verbose

-optimizations codesimplificationarithmetic field classmerging

-keep public class extends androidappActivity

-keep public class extends androidappApplication

-keep public class extends androidappService

-keep public class extends androidcontentBroadcastReceiver

-keep public class extends androidcontentContentProvider

-keep public class extends androidappbackupBackupAgentHelper

-keep public class extends androidpreferencePreference

-keep public class comandroidvendinglicensingILicensingService

-keepclasseswithmembernames class

native ltmethods gt

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet)

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet int)

-keepclassmembers enum

public static [] values ()

public static valueOf(javalangString)

46 httpmembersfortunecitycomneshkovdjhtml

47 httpjavadecompilerfreefr

48 httpdeveloperandroidcomguidepublishinglicensinghtml

49 httpdeveloperandroidcomguidedevelopingtoolsproguardhtml

N Ruff 145

-keep class implements androidosParcelable

public static final androidosParcelable$Creator

Au vu des resultats obtenus on peut considerer que lrsquoobfuscation de bytecode Javadans le monde Android est en retard sur lrsquoobfuscation de code x86 dans le monde PCLes techniques de complexification du flot de controle ou de construction dynamiquedes constantes ne sont pas encore repandues dans les applications commerciales pourAndroid Afin de combler ce manque des projets paralleles (comme AndroGuard 50)fleurissent - mais on peut supposer que la solution integree au SDK fourni par Googlerestera la solution majoritairement utilisee par les applications (pour des raisons desimplicite evidentes)

Desassembler du code natif Lors de lrsquoaudit drsquoune application Android il estpossible de rencontrer du code natif dans deux cas

1 Lrsquoapplication contient des bibliotheques natives compilees avec le NDK

2 Lrsquoapplication contient des applications natives ou srsquoavere etre elle-meme uneapplication native Ce cas est courant avec les applications malveillantes quiembarquent du code natif pour exploiter des failles noyau 51

Dans les deux cas Android ne presente aucune specificite par rapport a unLinuxARM classique Les fichiers natifs sont au format ELF La chaine de compilationnative est construite autour du compilateur GCC Tous les outils sont disponiblesdepuis longtemps pour analyser des tels binaires (ex IDA Pro Hex-Rays DecompilerARM etc)

Deboguer lrsquoapplication Une application Java compilee en mode debug peutetre deboguee a distance au travers du protocole standard Java Debug Wire Protocol(JDWP) defini dans le cadre de Java Platform Debugger Architecture (JPDA)

Les environnements de developpement Java classiques (comme Eclipse) per-mettent ainsi de deboguer une application a distance une fois celle-ci installee sur letelephone

Il est egalement possible drsquoutiliser le venerable JDB (fourni avec le SDK Java 52)bien que cet outil nrsquoait jamais depasse le statut de preuve de concept a mon avis

Lrsquooutil DDMS fourni avec le SDK Android repose egalement sur JPDA Cetoutil ne permet toutefois pas le debogage drsquoapplications mais seulement lrsquoanalyse deperformance

50 httpcodegooglecompandroguard

51 httpstealthopenwallnetxSports

52 httpdownloadoraclecomjavase142docstooldocssolarisjdbhtml

146 Securite du systeme Android

La liste des applications pouvant etre deboguees sur un systeme Android srsquoobtientavec la commande adb jdwp

Le vrai probleme se pose pour les applications qui nrsquoont pas ete compilees enmode debug Ceci implique que le manifeste de lrsquoapplication ne contient pasdrsquoentree ltapplication androiddebuggable=truegt De plus la plupart des outilsde debogage Java necessitent que le bytecode contienne des indications sur les numerosde lignes dans le code source drsquoorigine (il srsquoagit drsquoune limitation arbitraire qui nesrsquoapplique pas a lrsquooutil JavaSnoop 53 par exemple)

Fort heureusement il est possible de desassembler ces applications puis de lesreassembler en mode debug avec lrsquooutil apktool 54 Le processus est complexe etle resultat peu convivial mais il a le merite drsquoexister

Pour reinstaller lrsquoapplication modifiee sur un equipement reel il est necessairede la signer a nouveau La procedure est simple et parfaitement documentee parGoogle

Il faut drsquoabord generer une cle personnelle autosignee a duree de vie extremementlongue

$ keytool -genkey -v -keystore mykeykeystore -alias nom_alias -keyalg RSA -

keysize 2048 -validity 10000

Il faut ensuite signer le nouvel APK avec les outils du SDK Java

$ jarsigner -verbose -keystore mykeykeystore nom_applicationapk nom_alias

Enfin il est recommande drsquoaligner le code sur un multiple de 4 octets pour desraisons de performance

$ zipalign -v 4 nom_applicationapk nom_application_finalapk

Instrumentation Il est possible drsquoinstrumenter une application Java a lrsquoaide declasses specifiques a Android (androidappInstrumentation 55) Cette methodefournit des resultats detailles et personnalisables sur le fonctionnement interne drsquouneapplication elle necessite toutefois une decompilation et une modification prealablede lrsquoapplication a auditer

A lrsquoheure ou jrsquoecris ces lignes il nrsquoexiste pas (a ma connaissance) drsquooutil permettantde generaliser et drsquoautomatiser le processus a tout fichier APK Cette voie de recherchepourrait toutefois donner des resultats interessants

53 httpwwwaspectsecuritycomtoolsjavasnoop

54 httpcodegooglecompandroid-apktoolwikiSmaliDebugging

55 httpdeveloperandroidcomreferenceandroidappInstrumentationhtml

N Ruff 147

Outils specifiques Les outils disponibles actuellement dans le monde Android sontrudimentaires quoi que suffisants

Toutefois on peut raisonnablement estimer que la quantite et la qualite des outilsdisponibles va croitre de concert avec la popularite du systeme Android

A lrsquoheure ou jrsquoecris ces lignes la version 61 du logiciel IDA Pro 56 vient de sortirCette version ajoute le support du format DEX et du bytecode Dalvik ainsi que ledebogage a distance des applications Android natives

On peut supposer que drsquoautres outils couramment utilises par les auditeurs ensecurite vont etre mis a jour pour srsquoadapter au monde Android

6 Conclusion

Le systeme Android nrsquoa malheureusement pas profite de lrsquoopportunite unique quilui etait donnee repartir de la feuille blanche et creer un systeme drsquoexploitation sur par conception

A cause drsquoun heritage logiciel peu fiable ainsi que des contraintes materielles etcommerciales issues du monde de la telephonie mobile le systeme resultant est uncompromis qui laisse une large place a la creativite des attaquants

Celle-ci est drsquoautant plus exacerbee que la telephonie mobile est un phenomene demasse (il y a plus de telephones mobiles que drsquoordinateurs dans le monde) et que letelephone mobile est par conception un systeme de paiement (ce que nrsquoest pas un PCtraditionnel)

A ce tableau vient srsquoajouter 30 ans drsquoexperience dans le domaine des attaqueslogicielles appliquees a un ecosysteme applicatif qui nrsquoexistait pas il y a 5 ans

Toutes les conditions sont donc reunies pour que des attaques de grande ampleurmotivees par lrsquoargent se produisent contre les materiels grand public equipes dusysteme Android (telephones tablettes televisions )

La bonne nouvelle pour lrsquoexpert en securite crsquoest qursquoil est encore temps de srsquoymettre Android est suffisamment jeune et accessible aux nouveaux entrants ce quinrsquoest plus le cas de la plateforme PC ou les techniques drsquoattaque (ex exploitationdrsquoun heap overflow) et de defense (ex obfuscation logicielle) ont atteint des sommetsde raffinement desormais accessibles aux seuls experts les plus pointus du domaine

7 Sites et outils

71 Sites officiels

ndash Android portail officiel httpwwwandroidcom

56 httpwwwhex-rayscomidapro

148 Securite du systeme Android

ndash Android MarketPlace officielle httpsmarketandroidcomndash Android reference des developpeurs httpdeveloperandroidcom

72 Sites non officiels

ndash Reference de la machine virtuelle Dalvik httpdalvikvmcom

73 Outils tiers

ndash Google Android Debugging Utilities httpsitesgooglecomsiteortegaalfredoandroid

ndash Undx httpwwwillegalaccessorgundxhtmlndash SmaliBaksmali httpcodegooglecompsmalindash Dedexer httpdedexersourceforgenetndash Dex2Jar httpcodegooglecompdex2jarndash TaintDroid httpwwwappanalysisorg

ndash AndroGuard httpandroguardblogspotcom

References

1 Benjamin Morin Modele de securite drsquoAndroid MISC 51 2010

2 K Chen Reversing and exploiting an apple firmware update httpwwwblackhatcom

presentationsbh-usa-09CHENBHUSA09-Chen-RevAppleFirm-PAPERpdf BlackHat 2009

3 Alexandre Gazet Sticky fingers amp KBC Custom Shop httpwwwssticorg2011presentation

sticky_fingers_and_kbc_custom_shop SSTIC 2011

4 Loıc Duflot and Yves-Alexis Perez Quelques elements en matiere de securite des cartes reseau http

wwwssticorg2010presentationPeut_on_faire_confiance_aux_cartes_reseau SSTIC 2010

5 Alexander Tereshkin and Rafal Wojtczuk Introducing Ring -3 Rootkits httpwwwblackhat

compresentationsbh-usa-09TERESHKINBHUSA09-Tereshkin-Ring3Rootkit-SLIDESpdf Black-Hat USA 2009

6 Loıc Duflot Yves-Alexis Perez and Benjamin Morin Run-time firmware integrity verification what ifyou canrsquot trust your network card CanSecWest 2011

7 Ralf-Philipp Weinmann All Your Baseband Are Belong To Us httpeventscccdecongress

2010Fahrplanevents4090enhtml CCC 2010

8 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Formal Model to Analyzethe Permission Authorization and Enforcement in the Android Framework SecureComrsquo10

9 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Small but Non-negligibleFlaw in the Android Permission Scheme Wook Shin Sanghoon Kwak Shinsaku Kiyomoto KazuhideFukushima et Toshiaki Tanaka IEEE POLICY 2010

10 Marc Schonefled Reconstructing Dalvik Applications httpcansecwestcomcsw09

csw09-schoenefeldpdf CanSecWest 2009

N Ruff 149

11 Sergio Alvarez The Smart-Phones Nightmare (iPhone-oriented parts about Android) http

cansecwestcomcsw09csw09-alvarezpdf CanSecWest 2009

12 Nicolas Economou Alfredo Ortega Smartphone (in)security httpcansecwestcomcsw09

csw09-ortega-economoupdf CanSecWest 2009

13 Jesse Burns Exploratory Android Surgery httpwwwblackhatcompresentationsbh-usa-09

BURNSBHUSA09-Burns-AndroidSurgery-SLIDESpdf BlackHat USA 2009

14 Kevin Mahaffey John Hering App Attack httpsmediablackhatcombh-us-10presentations

Mahaffey_HeringBlackhat-USA-2010-Mahaffey-Hering-Lookout-App-Genome-slidespdf Black-Hat USA 2010

15 Nils The Risk you carry in your Pocket httpsmediablackhatcombh-ad-10Nils

Black-Hat-AD-2010-android-sandcastle-slidespdf BlackHat Abu Dhabi 2010

16 Raphael Rigo Android Reverse Engineering and Forensics httpsdeepsecnetdocsspeaker

htmlPSLOT45 DeepSec 2010

17 Itzhak Avraham Popping Shell on A(ndroid)RM Devices httpsmediablackhatcombh-dc-11

AvrahamBlackHat_DC_2011_Avraham-Popping_Android_Devices-Slidespdf BlackHat DC 2011

18 Jon Oberheide httpjonoberheideorgblog20100625remote-kill-and-install-on-google-android

19 Jon Oberheide httpjonoberheideorgblog20100628a-peek-inside-the-gtalkservice-connection

20 httpwwwandroidpolicecom20110301the-mother-of-all-android-

malware-has-arrived-stolen-apps-released-to-the-market-that-root-

your-phone-steal-your-data-and-open-backdoor

  • Seacutecuriteacute du systegraveme Android
  • N Ruff

136 Securite du systeme Android

certain nombre de telephones modernes disposent drsquoune protection contre le reflashageintempestif de la partition systeme Cette protection est souvent liee a lrsquoutilisationdrsquoun composant memoire capable de verifier une signature cryptographique (parexemple un composant eMMC 30)

Dans le jargon on dit que la possibilite de reflasher la partition systeme avecun firmware non signe necessite un telephone en mode S-OFF Sur de nombreuxtelephones de marque HTC 31 le mode courant (S-ON ou S-OFF) peut etre obtenuen appuyant sur la touche Volume Down au demarrage du telephone

Failles logiques Il existe une categorie de failles difficiles a detecter et pourtantdevastatrices les failles logiques

Lrsquoun des exemples les plus fameux est le deblocage du telephone en utilisant soncompte Google Dans certains cas de corruption de donnees ce processus peut echouercomme documente officiellement par Google 32

Dans ce cas le telephone doit normalement etre reinitialise en configuration drsquousine(lorsque crsquoest possible ndash la procedure exacte depend du constructeur) Heureusementil srsquoavere que le mot de passe null est toujours accepte comme valide

Un autre bogue celebre affecte le Motorola Droid et potentiellement drsquoautresLorsque le telephone est verrouille mais qursquoun appel entrant arrive il est possibledrsquoappuyer sur le bouton Back et ainsi drsquoarriver a lrsquoecran drsquoaccueil du telephone 33

Enfin une superbe faille logique a ete decouverte sur le site httpsmarket

androidcom qui permet drsquoinstaller a distance des applications sur un telephoneAndroid Grace a une faille de type XSS persistant sur ce site 34 il etait possible defaire installer une application puis de lrsquoexecuter automatiquement sur le telephonede nrsquoimporte quel utilisateur Un utilisateur pouvait etre victime de cette attaque encliquant sur un lien depuis son telephone ou son PC (sous reserve drsquoetre logue sousson compte Google)

La technique utilisee pour executer automatiquement lrsquoapplication apres soninstallation merite drsquoetre soulignee elle consiste a declarer dans le manifeste delrsquoapplication que celle-ci supporte un nouveau schema drsquoURI (par exemple trigger

) puis a invoquer un lien trigger depuis la page Web drsquoorigine

Que peut-on faire Compte-tenu de la quantite de code C embarque dans lesysteme Android il existe et il existera des bogues drsquoimplementation dans ce systeme

30 httpenwikipediaorgwikiMultiMediaCardeMMC

31 Un site de reference pour les telephones de marque HTC httpunrevokedcom32 httpcodegooglecompandroidissuesdetailid=3006

33 httptechcrunchcom20100111verizon-droid-security-bug

34 httpjonoberheideorgblog20110307how-i-almost-won-pwn2own-via-xss

N Ruff 137

conduisant pour certains a des failles de securite WebKit et le systeme Linux sontdes cibles de choix compte-tenu de la surface drsquoattaque exposee

Toutefois et contrairement a un systeme classique la mise a jour a grandeechelle srsquoavere extremement problematique pour plusieurs raisons

ndash Le facteur drsquoechelle (plusieurs millions drsquounites en circulation rien qursquoen France)ndash La diversite et le haut degre de personnalisation des plateformes materielles et

logiciellesndash La propriete du terminal (lorsqursquoil a ete achete par lrsquoutilisateur)ndash Les risques commerciaux en cas de blocage definitif du terminal (brick)On peut raisonnablement considerer qursquoen dehors du geek moyen aucun utilisateur

de smartphone sous Android nrsquoa jamais mis a jour son systemeLes statistiques officielles de Google sur la repartition des ordiphones par version

drsquoAndroid permettent de se faire une idee objective sur la vitesse de renouvellementdu parc 35 A lrsquoheure ou jrsquoecris ces lignes malgre la disponibilite du systeme Android23 la majorite du parc se compose encore de systemes Android 21 et 22 ndash sanscompter sur les irreductibles 6 qui disposent drsquoune version anterieure Je laisseaux statisticiens le soin de produire une etude plus detaillee qui sera neanmoinsbiaisee par le fait que les donnees mondiales sont agregees tandis que les politiquesde renouvellement des operateurs sont tres variables drsquoun pays a lrsquoautre

Dans ces conditions il est loin le moment ou un operateur mobile fera du NAC-NAP sur son reseau pour interdire la connexion de ordiphones qui ne sont pas a jourdes correctifs

Techniquement le protocole FOTA (Firmware Over-The-Air) permet toutefoisde mettre a jour a distance des terminaux Ce protocole a deja ete utilise a grandeechelle lorsqursquoune backdoor (exploitable a distance) a ete decouverte sur certainstelephones HTC de modele Hero et Evo

5 Audit drsquoapplications Android

51 Auditer pourquoi

Lrsquoaudit securite drsquoapplications tierces est une activite vieille comme le conseil ensecurite Toutefois le circuit de distribution logicielle etant assez different entre lemonde du logiciel drsquoentreprise et les MarketPlaces pour mobiles il est vrai que laquestion merite drsquoetre posee a nouveau

A lrsquoheure ou jrsquoecris ces lignes Google nrsquoeffectue aucune verification de securite surles applications publiees dans lrsquoAndroid Market Cet etat de fait pourrait changer

35 httpdeveloperandroidcomresourcesdashboardplatform-versionshtml

138 Securite du systeme Android

compte-tenu de la proliferation drsquoapplications malveillantes de plus en plus agressiveset sophistiquees

Parmi tous les risques lies aux terminaux mobiles (vol de lrsquoequipement intrusionvia une faille du navigateur etc) on constate dans les faits que le risque principalaujourdrsquohui est la proliferation drsquoapplications malveillantes La malveillance estune notion assez floue et certaines applications peuvent se situer dans une zone grise - comme lrsquoapplication de voix sur IP Viber 36 qui duplique tous les contactsde lrsquoutilisateur sur un serveur central faisant office drsquoannuaire telephonique Maisdrsquoautres applications font lrsquounanimite contre elles comme les applications utilisant desfailles systeme pour elever leurs privileges vers root etou envoyer des SMS surtaxessans le consentement de lrsquoutilisateur Ces applications sont drsquoailleurs tuees parGoogle une fois identifiees car elles violent clairement les regles drsquoutilisation delrsquoAndroid Market

Les circuits qui conduisent a lrsquoapparition drsquoune application malveillante sontmultiples

ndash Malveillance deliberee de lrsquoauteur qui veut gagner de lrsquoargent rapidement Crsquoestle cas le plus simple Un scenario courant consiste a cloner une applicationen vogue tout en y ajoutant du code malveillant

ndash Compromission drsquoun editeur drsquoapplications a son insu Crsquoest la ligne de defenseadoptee par plusieurs editeurs drsquoapplications apres avoir ete pointe du doigtCette defense est malheureusement credible car la plupart des developpeurs sontdes individus isoles ou des micro-entreprises attirees par les success stories a laAngry Birds et bien souvent sans aucune securite dans les developpements

ndash Integration de librairies tierce partie malveillantes dans un programme sainLrsquoauteur drsquoune application populaire (a savoir Tank Hero ) a ainsi an-nonce avoir ete contacte par un fournisseur drsquoapplications probablementmalveillantes qui lui proposait un accord commercial 37

Mais lrsquoidentification des applications malveillantes nrsquoest pas la seule raison quipeut conduire a auditer une application Android Parmi drsquoautres raisons legitimes on peut citer

ndash Verifier que lrsquoapplication fait bien ce qursquoelle pretend faire Ce point est parti-culierement critique pour les applications de securite qui mettent en œuvre duchiffrement ou de la gestion de mots de passe par exemple Dans le domaineles surprises sont nombreuses drsquoautant que les applications mobiles nrsquoont pasencore la maturite des applications bureautiques et que les contraintes

36 httpwwwvibercom

37 httpwwwredditcomrAndroidcommentsfm3cuspyware_company_wants_us_to_embed_

their_code_into

N Ruff 139

du monde embarque se font sentir (puissance de calcul sources drsquoentropieremanence de lrsquoallocateur memoire Java etc)

ndash Recherche des failles de securite Et oui les applications Android sont aussivulnerables aux buffer overflows lorsqursquoelles utilisent du code natif (compileavec le NDK) et meme des injections SQL (meme si SQLite nrsquoimplemente pasdrsquoequivalent a xp cmdshell) Il existe par ailleurs des attaques specifiques aumonde Android comme les BroadcastReceiver qui ne verifieraient pas la sourcedes messages recus

Le probleme principal avec lrsquoaudit drsquoapplications Android nrsquoest pas techniqueLe probleme crsquoest lrsquoeuphorie du marche proliferation drsquoapplications et mises a jourfrequentes qui obligent a automatiser et industrialiser les audits 38

52 Auditer comment

Lrsquoaudit securite est une tache difficile a modeliser car elle tire parti de la creativitede lrsquoauditeur On peut toutefois identifier les grandes lignes suivantes

1 Recuperer lrsquoapplication

2 Decompresser les ressources

3 Desassembler le bytecode

4 Decompiler le bytecode (lorsque crsquoest possible)

5 Desassembler le code natif

6 Deboguer lrsquoapplication en cours drsquoexecution (sur un telephone reel ou danslrsquoemulateur)

Cette methodologie nrsquoest pas exhaustive elle ne donne pas acces au contenutelecharge ulterieurement (par exemple au travers des publicites integrees) Voyonsles methodes et les difficultes associees a chaque etape

Recuperer lrsquoapplication Cette etape nrsquoest pas trop compliquee pour qui est preta installer lrsquoapplication cible sur son telephone Apres installation le fichier APK estconserve dans le repertoire dataapp Selon les permissions appliquees au systeme defichiers il nrsquoest pas necessairement possible de lister le contenu de ce repertoire maisles paquets restent lisibles par lrsquooutil adb et le nom de paquet peut etre determinedepuis la MarketPlace ou le menu parametres du telephone (le nom exact estpaquet-Napk ou N vaut generalement 1)

38 httpwwwappanalysisorg

140 Securite du systeme Android

Toute autre methode est complexe et probablement illegale Parmi les methodespossibles on peut citer lrsquoinstallation de lrsquoapplication MarketPlace dans un emulateurou le reverse engineering de lrsquoapplication MarketPlace a des fins de reimplementation(cette derniere etant toutefois volumineuse donc complexe a analyser)

Depuis la version 22 du systeme Android et si lrsquoapplication lrsquoautorise il estpossible drsquoinstaller une application sur la carte SD Mais lrsquoapplication est alorsstockee dans un fichier asec chiffre Ce fichier est inexploitable jusqursquoa ce quele mecanisme et la cle de chiffrement soient connus

On peut imaginer qursquoune application extremement malveillante pourrait exploiterune faille des lrsquoinstallation pour elever ses privileges vers root et dissimuler ses traces(ie se rendre inaccessible de lrsquoexterieur) Ce cas ne srsquoest pas encore produit dansla nature a lrsquoheure ou jrsquoecris ces lignes mais srsquoavere techniquement faisable

Il faut noter que la MarketPlace de Google nrsquoest pas la seule disponible maisqursquoil existe egalement des MarketPlaces drsquooperateurs ou de tiers ainsi Amazoncommercialise desormais des applications Android 39 Cette proliferation complexifiedrsquoautant la tache drsquoanalyse des MarketPlaces La methode la plus universelle pourrecuperer la source drsquoinstallation drsquoune application reste donc de lrsquoinstaller sur untelephone

Un utilisateur peut installer des applications depuis des sources externes a laMarketPlace si lrsquooption autoriser les sources inconnues est cochee dans lesparametres de configuration Il existe des applications legitimes accessibles en dehorsdes MarketPlaces mais il existe egalement des bases drsquoapplications piratees surInternet dont lrsquoinnocuite ne peut pas etre garantie

Notons que certaines applications meme parmi celles disponibles sur les Market-Places officielles exigent au prealable un acces root au telephone

Decompresser les ressources Les fichiers places a lrsquointerieur drsquoun paquet APKsont optimises drsquoune maniere ou drsquoune autre avant drsquoetre compresses Ceci srsquoappliqueaussi bien au bytecode qursquoaux ressources textuelles (comme les fichiers XML)

Lrsquoune des optimisations principales est la deduplication de donnees Ainsi ilnrsquoexiste qursquoune seule instance de chaque chaine de caracteres dans un fichier DEXDifferents encodages optimises sont egalement utilises tel que LEB128 pourla representation des entiers (Little Endian Base 128 aussi utilise dans le formatDWARF)

Toutes ces optimisations nrsquoont pas pour but la protection logicielle et sont parfai-tement reversibles Lrsquooutil aapt fourni avec le SDK officiel permet ainsi drsquoexplorerle contenu du manifeste drsquoun paquet APK Les techniques drsquooptimisation ont ete

39 httpwwwamazoncomappstore

N Ruff 141

analysees et documentees par des tiers ce qui a permis la production drsquooutils dedecompression comme apktool 40

Desassembler le bytecode Avec le SDK officiel est fourni lrsquooutil dexdump quipermet de lister le bytecode contenu dans un fichier CLASSESDEX

Le format de fichier DEX a ete lui aussi analyse et documente 41 ce qui a permisla production de desassembleurs tiers comme baksmali

Le code genere suit la syntaxe Jasmin 42 bien connue dans le monde Java tra-ditionnel Cette syntaxe peut sembler obscure de prime abord mais elle est par-faitement reguliere donc finalement tres simple a apprehender Prenons un exempleissu drsquoune application reelle voici ci-dessous le code drsquoune methode appeleeemptyResult telle que produit par baksmali

method protected static emptyResult(LjavalangString )Z

locals 1

parameter result

prologue

line 306

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Toutes les directives commencent par un point Leur nom est relativement explicitelocals 1 va par exemple indiquer la presence drsquoune seule variable locale Le nomassigne aux opcodes de la machine virtuelle est egalement assez parlant

pN represente lrsquoargument numero N passe a la methode vN represente le re-gistre numero N (Dalvik est une machine virtuelle a registres et non a pile)

Munis de ces informations decortiquons la seule operation reellement complexeeffectuee dans cet extrait de code

40 httpcodegooglecompandroid-apktool

41 httpwwwnetmitecomandroidmydroiddalvikdocsdex-formathtml

42 httpjasminsourceforgenet

142 Securite du systeme Android

invoke-static Invoque une methode sta-tique Il existe egalementun opcode invoke-virtual

pour les methodes virtuellesinvoke-super pour la methodede la superclasse etc

p0 La methode appelee prend unseul argument La valeur de cetargument provient du premierargument passe a la methodeemptyResult

LcomutilsStringUtils-gtisEmpty Invoque la methode isEmpty de laclasse comutilsStringUtils L est un prefixe accole a tousles litteraux

(LjavalangString) Le premier (et seul) argument estde type javalangString

Z La methode retourne un booleen

A titre de reference voici les differents types natifs disponibles dans Jasmin

Z BooleenB OctetC CaractereS Entier court (16 bits)I Entier (32 bits)J Entier long (64 bits)F Flottant (32 bits)D Double (64 bits)

Lrsquoavantage majeur de lrsquooutil tiers apktool est la possibilite de modifier le bytecodeou les ressources drsquoune application puis de la recompiler dans une version fonctionnelleCeci permet drsquoutiliser une technique drsquoanalyse aussi ancienne que lrsquoinformatiqueappelee printf debugging

Dans le monde Android lrsquoutilisation de Systemout doit etre remplacee parandroidutilLog Cette classe definit plusieurs methodes ndash respectivement v d iw e et wtf ndash qui correspondent chacune a un niveau de verbosite ndash et dont lesarguments sont enregistres dans le journal systeme (sauf le niveau debug) Cejournal peut etre consulte a lrsquoaide de la commande adb logcat apparait en temps

N Ruff 143

reel dans lrsquooutil DDMS et peut egalement etre consulte par toute application quidispose de la permission READ LOGS

Si lrsquoon souhaite connaitre lrsquoargument passe a la methode emptyResult danslrsquoexemple precedent il suffit alors drsquoajouter un appel a nrsquoimporte quelle methode dela classe Log de la maniere suivante

method protected static emptyResult(LjavalangString )Z

locals 2

parameter result

prologue

line 306

const -string v1 PrintfDebuggingStyle

invoke -static v1 p0 LandroidutilLog-gtd(LjavalangStringLjavalang

String )I

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Une variable locale v1 a ete ajoutee contenant une chaine de caracteres fixe Lamethode d() est ensuite invoquee Cette modification est equivalente au code Javasuivant

Logd(PrintfDebuggingStyle ltp0 gt)

On peut constater experimentalement que de nombreuses applications de laMarketPlace font usage de lrsquoAPI Log ce qui permet de collecter des donnees defonctionnement parfois tres (trop) interessantes

Le journal systeme peut etre collecte a distance par un developpeur lors ducrash de son application si lrsquoutilisateur lrsquoautorise Cette technique a ete presenteepar Renaud Lifchitz lors de la conference 27c3 pour espionner les deplacements drsquounutilisateur 43

Decompiler le bytecode Comme avec tout bytecode de haut niveau (ex JavaNET) la semantique de lrsquoapplication est conservee

Il est donc possible de decompiler du bytecode Dalvik et de reconstruire le codeJava drsquoorigine (sans les commentaires ndash seule information perdue a la compilation) Lepremier outil public capable drsquoune telle operation fut undx 44 de Marc Schoenefeld Cetoutil est toutefois bogue et non maintenu par son auteur Le meilleur outil disponibleactuellement est lrsquooutil dex2jar 45 qui reconstruit du bytecode Java a partir du

43 httpeventscccdecongress2010Fahrplanevents4151enhtml

44 httpwwwillegalaccessorgundxhtml

45 httpcodegooglecompdex2jar

144 Securite du systeme Android

bytecode Dalvik Les outils classiques de decompilation Java 46 47 srsquoappliquentalors

Compte-tenu de la facilite deconcertante avec laquelle il est possible drsquoanalyserles applications Android (et donc de les craquer entre autres) Google a mis adisposition des developpeurs une bibliotheque tres complete de gestion des licences enligne Licensing Verification Library (LVL) 48 Toutes les versions de cette bibliothequeont malheureusement ete craquees elles aussi a lrsquoheure ou jrsquoecris ces lignes

Une autre contre-mesure mise en place par Google consiste a integrer un obfusca-teur de bytecode dans la chaine de compilation ProGuard 49 Cet outil relativementpuissant est configurable par le developpeur au travers du fichier proguardcfg toutefois le fichier de configuration par defaut (reproduit ci-apres) nrsquoopere que lerenommage des classes et methodes invisibles a lrsquoexterieur de lrsquoapplication ce qui estpeu efficace face a un attaquant determine

-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontpreverify

-verbose

-optimizations codesimplificationarithmetic field classmerging

-keep public class extends androidappActivity

-keep public class extends androidappApplication

-keep public class extends androidappService

-keep public class extends androidcontentBroadcastReceiver

-keep public class extends androidcontentContentProvider

-keep public class extends androidappbackupBackupAgentHelper

-keep public class extends androidpreferencePreference

-keep public class comandroidvendinglicensingILicensingService

-keepclasseswithmembernames class

native ltmethods gt

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet)

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet int)

-keepclassmembers enum

public static [] values ()

public static valueOf(javalangString)

46 httpmembersfortunecitycomneshkovdjhtml

47 httpjavadecompilerfreefr

48 httpdeveloperandroidcomguidepublishinglicensinghtml

49 httpdeveloperandroidcomguidedevelopingtoolsproguardhtml

N Ruff 145

-keep class implements androidosParcelable

public static final androidosParcelable$Creator

Au vu des resultats obtenus on peut considerer que lrsquoobfuscation de bytecode Javadans le monde Android est en retard sur lrsquoobfuscation de code x86 dans le monde PCLes techniques de complexification du flot de controle ou de construction dynamiquedes constantes ne sont pas encore repandues dans les applications commerciales pourAndroid Afin de combler ce manque des projets paralleles (comme AndroGuard 50)fleurissent - mais on peut supposer que la solution integree au SDK fourni par Googlerestera la solution majoritairement utilisee par les applications (pour des raisons desimplicite evidentes)

Desassembler du code natif Lors de lrsquoaudit drsquoune application Android il estpossible de rencontrer du code natif dans deux cas

1 Lrsquoapplication contient des bibliotheques natives compilees avec le NDK

2 Lrsquoapplication contient des applications natives ou srsquoavere etre elle-meme uneapplication native Ce cas est courant avec les applications malveillantes quiembarquent du code natif pour exploiter des failles noyau 51

Dans les deux cas Android ne presente aucune specificite par rapport a unLinuxARM classique Les fichiers natifs sont au format ELF La chaine de compilationnative est construite autour du compilateur GCC Tous les outils sont disponiblesdepuis longtemps pour analyser des tels binaires (ex IDA Pro Hex-Rays DecompilerARM etc)

Deboguer lrsquoapplication Une application Java compilee en mode debug peutetre deboguee a distance au travers du protocole standard Java Debug Wire Protocol(JDWP) defini dans le cadre de Java Platform Debugger Architecture (JPDA)

Les environnements de developpement Java classiques (comme Eclipse) per-mettent ainsi de deboguer une application a distance une fois celle-ci installee sur letelephone

Il est egalement possible drsquoutiliser le venerable JDB (fourni avec le SDK Java 52)bien que cet outil nrsquoait jamais depasse le statut de preuve de concept a mon avis

Lrsquooutil DDMS fourni avec le SDK Android repose egalement sur JPDA Cetoutil ne permet toutefois pas le debogage drsquoapplications mais seulement lrsquoanalyse deperformance

50 httpcodegooglecompandroguard

51 httpstealthopenwallnetxSports

52 httpdownloadoraclecomjavase142docstooldocssolarisjdbhtml

146 Securite du systeme Android

La liste des applications pouvant etre deboguees sur un systeme Android srsquoobtientavec la commande adb jdwp

Le vrai probleme se pose pour les applications qui nrsquoont pas ete compilees enmode debug Ceci implique que le manifeste de lrsquoapplication ne contient pasdrsquoentree ltapplication androiddebuggable=truegt De plus la plupart des outilsde debogage Java necessitent que le bytecode contienne des indications sur les numerosde lignes dans le code source drsquoorigine (il srsquoagit drsquoune limitation arbitraire qui nesrsquoapplique pas a lrsquooutil JavaSnoop 53 par exemple)

Fort heureusement il est possible de desassembler ces applications puis de lesreassembler en mode debug avec lrsquooutil apktool 54 Le processus est complexe etle resultat peu convivial mais il a le merite drsquoexister

Pour reinstaller lrsquoapplication modifiee sur un equipement reel il est necessairede la signer a nouveau La procedure est simple et parfaitement documentee parGoogle

Il faut drsquoabord generer une cle personnelle autosignee a duree de vie extremementlongue

$ keytool -genkey -v -keystore mykeykeystore -alias nom_alias -keyalg RSA -

keysize 2048 -validity 10000

Il faut ensuite signer le nouvel APK avec les outils du SDK Java

$ jarsigner -verbose -keystore mykeykeystore nom_applicationapk nom_alias

Enfin il est recommande drsquoaligner le code sur un multiple de 4 octets pour desraisons de performance

$ zipalign -v 4 nom_applicationapk nom_application_finalapk

Instrumentation Il est possible drsquoinstrumenter une application Java a lrsquoaide declasses specifiques a Android (androidappInstrumentation 55) Cette methodefournit des resultats detailles et personnalisables sur le fonctionnement interne drsquouneapplication elle necessite toutefois une decompilation et une modification prealablede lrsquoapplication a auditer

A lrsquoheure ou jrsquoecris ces lignes il nrsquoexiste pas (a ma connaissance) drsquooutil permettantde generaliser et drsquoautomatiser le processus a tout fichier APK Cette voie de recherchepourrait toutefois donner des resultats interessants

53 httpwwwaspectsecuritycomtoolsjavasnoop

54 httpcodegooglecompandroid-apktoolwikiSmaliDebugging

55 httpdeveloperandroidcomreferenceandroidappInstrumentationhtml

N Ruff 147

Outils specifiques Les outils disponibles actuellement dans le monde Android sontrudimentaires quoi que suffisants

Toutefois on peut raisonnablement estimer que la quantite et la qualite des outilsdisponibles va croitre de concert avec la popularite du systeme Android

A lrsquoheure ou jrsquoecris ces lignes la version 61 du logiciel IDA Pro 56 vient de sortirCette version ajoute le support du format DEX et du bytecode Dalvik ainsi que ledebogage a distance des applications Android natives

On peut supposer que drsquoautres outils couramment utilises par les auditeurs ensecurite vont etre mis a jour pour srsquoadapter au monde Android

6 Conclusion

Le systeme Android nrsquoa malheureusement pas profite de lrsquoopportunite unique quilui etait donnee repartir de la feuille blanche et creer un systeme drsquoexploitation sur par conception

A cause drsquoun heritage logiciel peu fiable ainsi que des contraintes materielles etcommerciales issues du monde de la telephonie mobile le systeme resultant est uncompromis qui laisse une large place a la creativite des attaquants

Celle-ci est drsquoautant plus exacerbee que la telephonie mobile est un phenomene demasse (il y a plus de telephones mobiles que drsquoordinateurs dans le monde) et que letelephone mobile est par conception un systeme de paiement (ce que nrsquoest pas un PCtraditionnel)

A ce tableau vient srsquoajouter 30 ans drsquoexperience dans le domaine des attaqueslogicielles appliquees a un ecosysteme applicatif qui nrsquoexistait pas il y a 5 ans

Toutes les conditions sont donc reunies pour que des attaques de grande ampleurmotivees par lrsquoargent se produisent contre les materiels grand public equipes dusysteme Android (telephones tablettes televisions )

La bonne nouvelle pour lrsquoexpert en securite crsquoest qursquoil est encore temps de srsquoymettre Android est suffisamment jeune et accessible aux nouveaux entrants ce quinrsquoest plus le cas de la plateforme PC ou les techniques drsquoattaque (ex exploitationdrsquoun heap overflow) et de defense (ex obfuscation logicielle) ont atteint des sommetsde raffinement desormais accessibles aux seuls experts les plus pointus du domaine

7 Sites et outils

71 Sites officiels

ndash Android portail officiel httpwwwandroidcom

56 httpwwwhex-rayscomidapro

148 Securite du systeme Android

ndash Android MarketPlace officielle httpsmarketandroidcomndash Android reference des developpeurs httpdeveloperandroidcom

72 Sites non officiels

ndash Reference de la machine virtuelle Dalvik httpdalvikvmcom

73 Outils tiers

ndash Google Android Debugging Utilities httpsitesgooglecomsiteortegaalfredoandroid

ndash Undx httpwwwillegalaccessorgundxhtmlndash SmaliBaksmali httpcodegooglecompsmalindash Dedexer httpdedexersourceforgenetndash Dex2Jar httpcodegooglecompdex2jarndash TaintDroid httpwwwappanalysisorg

ndash AndroGuard httpandroguardblogspotcom

References

1 Benjamin Morin Modele de securite drsquoAndroid MISC 51 2010

2 K Chen Reversing and exploiting an apple firmware update httpwwwblackhatcom

presentationsbh-usa-09CHENBHUSA09-Chen-RevAppleFirm-PAPERpdf BlackHat 2009

3 Alexandre Gazet Sticky fingers amp KBC Custom Shop httpwwwssticorg2011presentation

sticky_fingers_and_kbc_custom_shop SSTIC 2011

4 Loıc Duflot and Yves-Alexis Perez Quelques elements en matiere de securite des cartes reseau http

wwwssticorg2010presentationPeut_on_faire_confiance_aux_cartes_reseau SSTIC 2010

5 Alexander Tereshkin and Rafal Wojtczuk Introducing Ring -3 Rootkits httpwwwblackhat

compresentationsbh-usa-09TERESHKINBHUSA09-Tereshkin-Ring3Rootkit-SLIDESpdf Black-Hat USA 2009

6 Loıc Duflot Yves-Alexis Perez and Benjamin Morin Run-time firmware integrity verification what ifyou canrsquot trust your network card CanSecWest 2011

7 Ralf-Philipp Weinmann All Your Baseband Are Belong To Us httpeventscccdecongress

2010Fahrplanevents4090enhtml CCC 2010

8 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Formal Model to Analyzethe Permission Authorization and Enforcement in the Android Framework SecureComrsquo10

9 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Small but Non-negligibleFlaw in the Android Permission Scheme Wook Shin Sanghoon Kwak Shinsaku Kiyomoto KazuhideFukushima et Toshiaki Tanaka IEEE POLICY 2010

10 Marc Schonefled Reconstructing Dalvik Applications httpcansecwestcomcsw09

csw09-schoenefeldpdf CanSecWest 2009

N Ruff 149

11 Sergio Alvarez The Smart-Phones Nightmare (iPhone-oriented parts about Android) http

cansecwestcomcsw09csw09-alvarezpdf CanSecWest 2009

12 Nicolas Economou Alfredo Ortega Smartphone (in)security httpcansecwestcomcsw09

csw09-ortega-economoupdf CanSecWest 2009

13 Jesse Burns Exploratory Android Surgery httpwwwblackhatcompresentationsbh-usa-09

BURNSBHUSA09-Burns-AndroidSurgery-SLIDESpdf BlackHat USA 2009

14 Kevin Mahaffey John Hering App Attack httpsmediablackhatcombh-us-10presentations

Mahaffey_HeringBlackhat-USA-2010-Mahaffey-Hering-Lookout-App-Genome-slidespdf Black-Hat USA 2010

15 Nils The Risk you carry in your Pocket httpsmediablackhatcombh-ad-10Nils

Black-Hat-AD-2010-android-sandcastle-slidespdf BlackHat Abu Dhabi 2010

16 Raphael Rigo Android Reverse Engineering and Forensics httpsdeepsecnetdocsspeaker

htmlPSLOT45 DeepSec 2010

17 Itzhak Avraham Popping Shell on A(ndroid)RM Devices httpsmediablackhatcombh-dc-11

AvrahamBlackHat_DC_2011_Avraham-Popping_Android_Devices-Slidespdf BlackHat DC 2011

18 Jon Oberheide httpjonoberheideorgblog20100625remote-kill-and-install-on-google-android

19 Jon Oberheide httpjonoberheideorgblog20100628a-peek-inside-the-gtalkservice-connection

20 httpwwwandroidpolicecom20110301the-mother-of-all-android-

malware-has-arrived-stolen-apps-released-to-the-market-that-root-

your-phone-steal-your-data-and-open-backdoor

  • Seacutecuriteacute du systegraveme Android
  • N Ruff

N Ruff 137

conduisant pour certains a des failles de securite WebKit et le systeme Linux sontdes cibles de choix compte-tenu de la surface drsquoattaque exposee

Toutefois et contrairement a un systeme classique la mise a jour a grandeechelle srsquoavere extremement problematique pour plusieurs raisons

ndash Le facteur drsquoechelle (plusieurs millions drsquounites en circulation rien qursquoen France)ndash La diversite et le haut degre de personnalisation des plateformes materielles et

logiciellesndash La propriete du terminal (lorsqursquoil a ete achete par lrsquoutilisateur)ndash Les risques commerciaux en cas de blocage definitif du terminal (brick)On peut raisonnablement considerer qursquoen dehors du geek moyen aucun utilisateur

de smartphone sous Android nrsquoa jamais mis a jour son systemeLes statistiques officielles de Google sur la repartition des ordiphones par version

drsquoAndroid permettent de se faire une idee objective sur la vitesse de renouvellementdu parc 35 A lrsquoheure ou jrsquoecris ces lignes malgre la disponibilite du systeme Android23 la majorite du parc se compose encore de systemes Android 21 et 22 ndash sanscompter sur les irreductibles 6 qui disposent drsquoune version anterieure Je laisseaux statisticiens le soin de produire une etude plus detaillee qui sera neanmoinsbiaisee par le fait que les donnees mondiales sont agregees tandis que les politiquesde renouvellement des operateurs sont tres variables drsquoun pays a lrsquoautre

Dans ces conditions il est loin le moment ou un operateur mobile fera du NAC-NAP sur son reseau pour interdire la connexion de ordiphones qui ne sont pas a jourdes correctifs

Techniquement le protocole FOTA (Firmware Over-The-Air) permet toutefoisde mettre a jour a distance des terminaux Ce protocole a deja ete utilise a grandeechelle lorsqursquoune backdoor (exploitable a distance) a ete decouverte sur certainstelephones HTC de modele Hero et Evo

5 Audit drsquoapplications Android

51 Auditer pourquoi

Lrsquoaudit securite drsquoapplications tierces est une activite vieille comme le conseil ensecurite Toutefois le circuit de distribution logicielle etant assez different entre lemonde du logiciel drsquoentreprise et les MarketPlaces pour mobiles il est vrai que laquestion merite drsquoetre posee a nouveau

A lrsquoheure ou jrsquoecris ces lignes Google nrsquoeffectue aucune verification de securite surles applications publiees dans lrsquoAndroid Market Cet etat de fait pourrait changer

35 httpdeveloperandroidcomresourcesdashboardplatform-versionshtml

138 Securite du systeme Android

compte-tenu de la proliferation drsquoapplications malveillantes de plus en plus agressiveset sophistiquees

Parmi tous les risques lies aux terminaux mobiles (vol de lrsquoequipement intrusionvia une faille du navigateur etc) on constate dans les faits que le risque principalaujourdrsquohui est la proliferation drsquoapplications malveillantes La malveillance estune notion assez floue et certaines applications peuvent se situer dans une zone grise - comme lrsquoapplication de voix sur IP Viber 36 qui duplique tous les contactsde lrsquoutilisateur sur un serveur central faisant office drsquoannuaire telephonique Maisdrsquoautres applications font lrsquounanimite contre elles comme les applications utilisant desfailles systeme pour elever leurs privileges vers root etou envoyer des SMS surtaxessans le consentement de lrsquoutilisateur Ces applications sont drsquoailleurs tuees parGoogle une fois identifiees car elles violent clairement les regles drsquoutilisation delrsquoAndroid Market

Les circuits qui conduisent a lrsquoapparition drsquoune application malveillante sontmultiples

ndash Malveillance deliberee de lrsquoauteur qui veut gagner de lrsquoargent rapidement Crsquoestle cas le plus simple Un scenario courant consiste a cloner une applicationen vogue tout en y ajoutant du code malveillant

ndash Compromission drsquoun editeur drsquoapplications a son insu Crsquoest la ligne de defenseadoptee par plusieurs editeurs drsquoapplications apres avoir ete pointe du doigtCette defense est malheureusement credible car la plupart des developpeurs sontdes individus isoles ou des micro-entreprises attirees par les success stories a laAngry Birds et bien souvent sans aucune securite dans les developpements

ndash Integration de librairies tierce partie malveillantes dans un programme sainLrsquoauteur drsquoune application populaire (a savoir Tank Hero ) a ainsi an-nonce avoir ete contacte par un fournisseur drsquoapplications probablementmalveillantes qui lui proposait un accord commercial 37

Mais lrsquoidentification des applications malveillantes nrsquoest pas la seule raison quipeut conduire a auditer une application Android Parmi drsquoautres raisons legitimes on peut citer

ndash Verifier que lrsquoapplication fait bien ce qursquoelle pretend faire Ce point est parti-culierement critique pour les applications de securite qui mettent en œuvre duchiffrement ou de la gestion de mots de passe par exemple Dans le domaineles surprises sont nombreuses drsquoautant que les applications mobiles nrsquoont pasencore la maturite des applications bureautiques et que les contraintes

36 httpwwwvibercom

37 httpwwwredditcomrAndroidcommentsfm3cuspyware_company_wants_us_to_embed_

their_code_into

N Ruff 139

du monde embarque se font sentir (puissance de calcul sources drsquoentropieremanence de lrsquoallocateur memoire Java etc)

ndash Recherche des failles de securite Et oui les applications Android sont aussivulnerables aux buffer overflows lorsqursquoelles utilisent du code natif (compileavec le NDK) et meme des injections SQL (meme si SQLite nrsquoimplemente pasdrsquoequivalent a xp cmdshell) Il existe par ailleurs des attaques specifiques aumonde Android comme les BroadcastReceiver qui ne verifieraient pas la sourcedes messages recus

Le probleme principal avec lrsquoaudit drsquoapplications Android nrsquoest pas techniqueLe probleme crsquoest lrsquoeuphorie du marche proliferation drsquoapplications et mises a jourfrequentes qui obligent a automatiser et industrialiser les audits 38

52 Auditer comment

Lrsquoaudit securite est une tache difficile a modeliser car elle tire parti de la creativitede lrsquoauditeur On peut toutefois identifier les grandes lignes suivantes

1 Recuperer lrsquoapplication

2 Decompresser les ressources

3 Desassembler le bytecode

4 Decompiler le bytecode (lorsque crsquoest possible)

5 Desassembler le code natif

6 Deboguer lrsquoapplication en cours drsquoexecution (sur un telephone reel ou danslrsquoemulateur)

Cette methodologie nrsquoest pas exhaustive elle ne donne pas acces au contenutelecharge ulterieurement (par exemple au travers des publicites integrees) Voyonsles methodes et les difficultes associees a chaque etape

Recuperer lrsquoapplication Cette etape nrsquoest pas trop compliquee pour qui est preta installer lrsquoapplication cible sur son telephone Apres installation le fichier APK estconserve dans le repertoire dataapp Selon les permissions appliquees au systeme defichiers il nrsquoest pas necessairement possible de lister le contenu de ce repertoire maisles paquets restent lisibles par lrsquooutil adb et le nom de paquet peut etre determinedepuis la MarketPlace ou le menu parametres du telephone (le nom exact estpaquet-Napk ou N vaut generalement 1)

38 httpwwwappanalysisorg

140 Securite du systeme Android

Toute autre methode est complexe et probablement illegale Parmi les methodespossibles on peut citer lrsquoinstallation de lrsquoapplication MarketPlace dans un emulateurou le reverse engineering de lrsquoapplication MarketPlace a des fins de reimplementation(cette derniere etant toutefois volumineuse donc complexe a analyser)

Depuis la version 22 du systeme Android et si lrsquoapplication lrsquoautorise il estpossible drsquoinstaller une application sur la carte SD Mais lrsquoapplication est alorsstockee dans un fichier asec chiffre Ce fichier est inexploitable jusqursquoa ce quele mecanisme et la cle de chiffrement soient connus

On peut imaginer qursquoune application extremement malveillante pourrait exploiterune faille des lrsquoinstallation pour elever ses privileges vers root et dissimuler ses traces(ie se rendre inaccessible de lrsquoexterieur) Ce cas ne srsquoest pas encore produit dansla nature a lrsquoheure ou jrsquoecris ces lignes mais srsquoavere techniquement faisable

Il faut noter que la MarketPlace de Google nrsquoest pas la seule disponible maisqursquoil existe egalement des MarketPlaces drsquooperateurs ou de tiers ainsi Amazoncommercialise desormais des applications Android 39 Cette proliferation complexifiedrsquoautant la tache drsquoanalyse des MarketPlaces La methode la plus universelle pourrecuperer la source drsquoinstallation drsquoune application reste donc de lrsquoinstaller sur untelephone

Un utilisateur peut installer des applications depuis des sources externes a laMarketPlace si lrsquooption autoriser les sources inconnues est cochee dans lesparametres de configuration Il existe des applications legitimes accessibles en dehorsdes MarketPlaces mais il existe egalement des bases drsquoapplications piratees surInternet dont lrsquoinnocuite ne peut pas etre garantie

Notons que certaines applications meme parmi celles disponibles sur les Market-Places officielles exigent au prealable un acces root au telephone

Decompresser les ressources Les fichiers places a lrsquointerieur drsquoun paquet APKsont optimises drsquoune maniere ou drsquoune autre avant drsquoetre compresses Ceci srsquoappliqueaussi bien au bytecode qursquoaux ressources textuelles (comme les fichiers XML)

Lrsquoune des optimisations principales est la deduplication de donnees Ainsi ilnrsquoexiste qursquoune seule instance de chaque chaine de caracteres dans un fichier DEXDifferents encodages optimises sont egalement utilises tel que LEB128 pourla representation des entiers (Little Endian Base 128 aussi utilise dans le formatDWARF)

Toutes ces optimisations nrsquoont pas pour but la protection logicielle et sont parfai-tement reversibles Lrsquooutil aapt fourni avec le SDK officiel permet ainsi drsquoexplorerle contenu du manifeste drsquoun paquet APK Les techniques drsquooptimisation ont ete

39 httpwwwamazoncomappstore

N Ruff 141

analysees et documentees par des tiers ce qui a permis la production drsquooutils dedecompression comme apktool 40

Desassembler le bytecode Avec le SDK officiel est fourni lrsquooutil dexdump quipermet de lister le bytecode contenu dans un fichier CLASSESDEX

Le format de fichier DEX a ete lui aussi analyse et documente 41 ce qui a permisla production de desassembleurs tiers comme baksmali

Le code genere suit la syntaxe Jasmin 42 bien connue dans le monde Java tra-ditionnel Cette syntaxe peut sembler obscure de prime abord mais elle est par-faitement reguliere donc finalement tres simple a apprehender Prenons un exempleissu drsquoune application reelle voici ci-dessous le code drsquoune methode appeleeemptyResult telle que produit par baksmali

method protected static emptyResult(LjavalangString )Z

locals 1

parameter result

prologue

line 306

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Toutes les directives commencent par un point Leur nom est relativement explicitelocals 1 va par exemple indiquer la presence drsquoune seule variable locale Le nomassigne aux opcodes de la machine virtuelle est egalement assez parlant

pN represente lrsquoargument numero N passe a la methode vN represente le re-gistre numero N (Dalvik est une machine virtuelle a registres et non a pile)

Munis de ces informations decortiquons la seule operation reellement complexeeffectuee dans cet extrait de code

40 httpcodegooglecompandroid-apktool

41 httpwwwnetmitecomandroidmydroiddalvikdocsdex-formathtml

42 httpjasminsourceforgenet

142 Securite du systeme Android

invoke-static Invoque une methode sta-tique Il existe egalementun opcode invoke-virtual

pour les methodes virtuellesinvoke-super pour la methodede la superclasse etc

p0 La methode appelee prend unseul argument La valeur de cetargument provient du premierargument passe a la methodeemptyResult

LcomutilsStringUtils-gtisEmpty Invoque la methode isEmpty de laclasse comutilsStringUtils L est un prefixe accole a tousles litteraux

(LjavalangString) Le premier (et seul) argument estde type javalangString

Z La methode retourne un booleen

A titre de reference voici les differents types natifs disponibles dans Jasmin

Z BooleenB OctetC CaractereS Entier court (16 bits)I Entier (32 bits)J Entier long (64 bits)F Flottant (32 bits)D Double (64 bits)

Lrsquoavantage majeur de lrsquooutil tiers apktool est la possibilite de modifier le bytecodeou les ressources drsquoune application puis de la recompiler dans une version fonctionnelleCeci permet drsquoutiliser une technique drsquoanalyse aussi ancienne que lrsquoinformatiqueappelee printf debugging

Dans le monde Android lrsquoutilisation de Systemout doit etre remplacee parandroidutilLog Cette classe definit plusieurs methodes ndash respectivement v d iw e et wtf ndash qui correspondent chacune a un niveau de verbosite ndash et dont lesarguments sont enregistres dans le journal systeme (sauf le niveau debug) Cejournal peut etre consulte a lrsquoaide de la commande adb logcat apparait en temps

N Ruff 143

reel dans lrsquooutil DDMS et peut egalement etre consulte par toute application quidispose de la permission READ LOGS

Si lrsquoon souhaite connaitre lrsquoargument passe a la methode emptyResult danslrsquoexemple precedent il suffit alors drsquoajouter un appel a nrsquoimporte quelle methode dela classe Log de la maniere suivante

method protected static emptyResult(LjavalangString )Z

locals 2

parameter result

prologue

line 306

const -string v1 PrintfDebuggingStyle

invoke -static v1 p0 LandroidutilLog-gtd(LjavalangStringLjavalang

String )I

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Une variable locale v1 a ete ajoutee contenant une chaine de caracteres fixe Lamethode d() est ensuite invoquee Cette modification est equivalente au code Javasuivant

Logd(PrintfDebuggingStyle ltp0 gt)

On peut constater experimentalement que de nombreuses applications de laMarketPlace font usage de lrsquoAPI Log ce qui permet de collecter des donnees defonctionnement parfois tres (trop) interessantes

Le journal systeme peut etre collecte a distance par un developpeur lors ducrash de son application si lrsquoutilisateur lrsquoautorise Cette technique a ete presenteepar Renaud Lifchitz lors de la conference 27c3 pour espionner les deplacements drsquounutilisateur 43

Decompiler le bytecode Comme avec tout bytecode de haut niveau (ex JavaNET) la semantique de lrsquoapplication est conservee

Il est donc possible de decompiler du bytecode Dalvik et de reconstruire le codeJava drsquoorigine (sans les commentaires ndash seule information perdue a la compilation) Lepremier outil public capable drsquoune telle operation fut undx 44 de Marc Schoenefeld Cetoutil est toutefois bogue et non maintenu par son auteur Le meilleur outil disponibleactuellement est lrsquooutil dex2jar 45 qui reconstruit du bytecode Java a partir du

43 httpeventscccdecongress2010Fahrplanevents4151enhtml

44 httpwwwillegalaccessorgundxhtml

45 httpcodegooglecompdex2jar

144 Securite du systeme Android

bytecode Dalvik Les outils classiques de decompilation Java 46 47 srsquoappliquentalors

Compte-tenu de la facilite deconcertante avec laquelle il est possible drsquoanalyserles applications Android (et donc de les craquer entre autres) Google a mis adisposition des developpeurs une bibliotheque tres complete de gestion des licences enligne Licensing Verification Library (LVL) 48 Toutes les versions de cette bibliothequeont malheureusement ete craquees elles aussi a lrsquoheure ou jrsquoecris ces lignes

Une autre contre-mesure mise en place par Google consiste a integrer un obfusca-teur de bytecode dans la chaine de compilation ProGuard 49 Cet outil relativementpuissant est configurable par le developpeur au travers du fichier proguardcfg toutefois le fichier de configuration par defaut (reproduit ci-apres) nrsquoopere que lerenommage des classes et methodes invisibles a lrsquoexterieur de lrsquoapplication ce qui estpeu efficace face a un attaquant determine

-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontpreverify

-verbose

-optimizations codesimplificationarithmetic field classmerging

-keep public class extends androidappActivity

-keep public class extends androidappApplication

-keep public class extends androidappService

-keep public class extends androidcontentBroadcastReceiver

-keep public class extends androidcontentContentProvider

-keep public class extends androidappbackupBackupAgentHelper

-keep public class extends androidpreferencePreference

-keep public class comandroidvendinglicensingILicensingService

-keepclasseswithmembernames class

native ltmethods gt

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet)

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet int)

-keepclassmembers enum

public static [] values ()

public static valueOf(javalangString)

46 httpmembersfortunecitycomneshkovdjhtml

47 httpjavadecompilerfreefr

48 httpdeveloperandroidcomguidepublishinglicensinghtml

49 httpdeveloperandroidcomguidedevelopingtoolsproguardhtml

N Ruff 145

-keep class implements androidosParcelable

public static final androidosParcelable$Creator

Au vu des resultats obtenus on peut considerer que lrsquoobfuscation de bytecode Javadans le monde Android est en retard sur lrsquoobfuscation de code x86 dans le monde PCLes techniques de complexification du flot de controle ou de construction dynamiquedes constantes ne sont pas encore repandues dans les applications commerciales pourAndroid Afin de combler ce manque des projets paralleles (comme AndroGuard 50)fleurissent - mais on peut supposer que la solution integree au SDK fourni par Googlerestera la solution majoritairement utilisee par les applications (pour des raisons desimplicite evidentes)

Desassembler du code natif Lors de lrsquoaudit drsquoune application Android il estpossible de rencontrer du code natif dans deux cas

1 Lrsquoapplication contient des bibliotheques natives compilees avec le NDK

2 Lrsquoapplication contient des applications natives ou srsquoavere etre elle-meme uneapplication native Ce cas est courant avec les applications malveillantes quiembarquent du code natif pour exploiter des failles noyau 51

Dans les deux cas Android ne presente aucune specificite par rapport a unLinuxARM classique Les fichiers natifs sont au format ELF La chaine de compilationnative est construite autour du compilateur GCC Tous les outils sont disponiblesdepuis longtemps pour analyser des tels binaires (ex IDA Pro Hex-Rays DecompilerARM etc)

Deboguer lrsquoapplication Une application Java compilee en mode debug peutetre deboguee a distance au travers du protocole standard Java Debug Wire Protocol(JDWP) defini dans le cadre de Java Platform Debugger Architecture (JPDA)

Les environnements de developpement Java classiques (comme Eclipse) per-mettent ainsi de deboguer une application a distance une fois celle-ci installee sur letelephone

Il est egalement possible drsquoutiliser le venerable JDB (fourni avec le SDK Java 52)bien que cet outil nrsquoait jamais depasse le statut de preuve de concept a mon avis

Lrsquooutil DDMS fourni avec le SDK Android repose egalement sur JPDA Cetoutil ne permet toutefois pas le debogage drsquoapplications mais seulement lrsquoanalyse deperformance

50 httpcodegooglecompandroguard

51 httpstealthopenwallnetxSports

52 httpdownloadoraclecomjavase142docstooldocssolarisjdbhtml

146 Securite du systeme Android

La liste des applications pouvant etre deboguees sur un systeme Android srsquoobtientavec la commande adb jdwp

Le vrai probleme se pose pour les applications qui nrsquoont pas ete compilees enmode debug Ceci implique que le manifeste de lrsquoapplication ne contient pasdrsquoentree ltapplication androiddebuggable=truegt De plus la plupart des outilsde debogage Java necessitent que le bytecode contienne des indications sur les numerosde lignes dans le code source drsquoorigine (il srsquoagit drsquoune limitation arbitraire qui nesrsquoapplique pas a lrsquooutil JavaSnoop 53 par exemple)

Fort heureusement il est possible de desassembler ces applications puis de lesreassembler en mode debug avec lrsquooutil apktool 54 Le processus est complexe etle resultat peu convivial mais il a le merite drsquoexister

Pour reinstaller lrsquoapplication modifiee sur un equipement reel il est necessairede la signer a nouveau La procedure est simple et parfaitement documentee parGoogle

Il faut drsquoabord generer une cle personnelle autosignee a duree de vie extremementlongue

$ keytool -genkey -v -keystore mykeykeystore -alias nom_alias -keyalg RSA -

keysize 2048 -validity 10000

Il faut ensuite signer le nouvel APK avec les outils du SDK Java

$ jarsigner -verbose -keystore mykeykeystore nom_applicationapk nom_alias

Enfin il est recommande drsquoaligner le code sur un multiple de 4 octets pour desraisons de performance

$ zipalign -v 4 nom_applicationapk nom_application_finalapk

Instrumentation Il est possible drsquoinstrumenter une application Java a lrsquoaide declasses specifiques a Android (androidappInstrumentation 55) Cette methodefournit des resultats detailles et personnalisables sur le fonctionnement interne drsquouneapplication elle necessite toutefois une decompilation et une modification prealablede lrsquoapplication a auditer

A lrsquoheure ou jrsquoecris ces lignes il nrsquoexiste pas (a ma connaissance) drsquooutil permettantde generaliser et drsquoautomatiser le processus a tout fichier APK Cette voie de recherchepourrait toutefois donner des resultats interessants

53 httpwwwaspectsecuritycomtoolsjavasnoop

54 httpcodegooglecompandroid-apktoolwikiSmaliDebugging

55 httpdeveloperandroidcomreferenceandroidappInstrumentationhtml

N Ruff 147

Outils specifiques Les outils disponibles actuellement dans le monde Android sontrudimentaires quoi que suffisants

Toutefois on peut raisonnablement estimer que la quantite et la qualite des outilsdisponibles va croitre de concert avec la popularite du systeme Android

A lrsquoheure ou jrsquoecris ces lignes la version 61 du logiciel IDA Pro 56 vient de sortirCette version ajoute le support du format DEX et du bytecode Dalvik ainsi que ledebogage a distance des applications Android natives

On peut supposer que drsquoautres outils couramment utilises par les auditeurs ensecurite vont etre mis a jour pour srsquoadapter au monde Android

6 Conclusion

Le systeme Android nrsquoa malheureusement pas profite de lrsquoopportunite unique quilui etait donnee repartir de la feuille blanche et creer un systeme drsquoexploitation sur par conception

A cause drsquoun heritage logiciel peu fiable ainsi que des contraintes materielles etcommerciales issues du monde de la telephonie mobile le systeme resultant est uncompromis qui laisse une large place a la creativite des attaquants

Celle-ci est drsquoautant plus exacerbee que la telephonie mobile est un phenomene demasse (il y a plus de telephones mobiles que drsquoordinateurs dans le monde) et que letelephone mobile est par conception un systeme de paiement (ce que nrsquoest pas un PCtraditionnel)

A ce tableau vient srsquoajouter 30 ans drsquoexperience dans le domaine des attaqueslogicielles appliquees a un ecosysteme applicatif qui nrsquoexistait pas il y a 5 ans

Toutes les conditions sont donc reunies pour que des attaques de grande ampleurmotivees par lrsquoargent se produisent contre les materiels grand public equipes dusysteme Android (telephones tablettes televisions )

La bonne nouvelle pour lrsquoexpert en securite crsquoest qursquoil est encore temps de srsquoymettre Android est suffisamment jeune et accessible aux nouveaux entrants ce quinrsquoest plus le cas de la plateforme PC ou les techniques drsquoattaque (ex exploitationdrsquoun heap overflow) et de defense (ex obfuscation logicielle) ont atteint des sommetsde raffinement desormais accessibles aux seuls experts les plus pointus du domaine

7 Sites et outils

71 Sites officiels

ndash Android portail officiel httpwwwandroidcom

56 httpwwwhex-rayscomidapro

148 Securite du systeme Android

ndash Android MarketPlace officielle httpsmarketandroidcomndash Android reference des developpeurs httpdeveloperandroidcom

72 Sites non officiels

ndash Reference de la machine virtuelle Dalvik httpdalvikvmcom

73 Outils tiers

ndash Google Android Debugging Utilities httpsitesgooglecomsiteortegaalfredoandroid

ndash Undx httpwwwillegalaccessorgundxhtmlndash SmaliBaksmali httpcodegooglecompsmalindash Dedexer httpdedexersourceforgenetndash Dex2Jar httpcodegooglecompdex2jarndash TaintDroid httpwwwappanalysisorg

ndash AndroGuard httpandroguardblogspotcom

References

1 Benjamin Morin Modele de securite drsquoAndroid MISC 51 2010

2 K Chen Reversing and exploiting an apple firmware update httpwwwblackhatcom

presentationsbh-usa-09CHENBHUSA09-Chen-RevAppleFirm-PAPERpdf BlackHat 2009

3 Alexandre Gazet Sticky fingers amp KBC Custom Shop httpwwwssticorg2011presentation

sticky_fingers_and_kbc_custom_shop SSTIC 2011

4 Loıc Duflot and Yves-Alexis Perez Quelques elements en matiere de securite des cartes reseau http

wwwssticorg2010presentationPeut_on_faire_confiance_aux_cartes_reseau SSTIC 2010

5 Alexander Tereshkin and Rafal Wojtczuk Introducing Ring -3 Rootkits httpwwwblackhat

compresentationsbh-usa-09TERESHKINBHUSA09-Tereshkin-Ring3Rootkit-SLIDESpdf Black-Hat USA 2009

6 Loıc Duflot Yves-Alexis Perez and Benjamin Morin Run-time firmware integrity verification what ifyou canrsquot trust your network card CanSecWest 2011

7 Ralf-Philipp Weinmann All Your Baseband Are Belong To Us httpeventscccdecongress

2010Fahrplanevents4090enhtml CCC 2010

8 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Formal Model to Analyzethe Permission Authorization and Enforcement in the Android Framework SecureComrsquo10

9 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Small but Non-negligibleFlaw in the Android Permission Scheme Wook Shin Sanghoon Kwak Shinsaku Kiyomoto KazuhideFukushima et Toshiaki Tanaka IEEE POLICY 2010

10 Marc Schonefled Reconstructing Dalvik Applications httpcansecwestcomcsw09

csw09-schoenefeldpdf CanSecWest 2009

N Ruff 149

11 Sergio Alvarez The Smart-Phones Nightmare (iPhone-oriented parts about Android) http

cansecwestcomcsw09csw09-alvarezpdf CanSecWest 2009

12 Nicolas Economou Alfredo Ortega Smartphone (in)security httpcansecwestcomcsw09

csw09-ortega-economoupdf CanSecWest 2009

13 Jesse Burns Exploratory Android Surgery httpwwwblackhatcompresentationsbh-usa-09

BURNSBHUSA09-Burns-AndroidSurgery-SLIDESpdf BlackHat USA 2009

14 Kevin Mahaffey John Hering App Attack httpsmediablackhatcombh-us-10presentations

Mahaffey_HeringBlackhat-USA-2010-Mahaffey-Hering-Lookout-App-Genome-slidespdf Black-Hat USA 2010

15 Nils The Risk you carry in your Pocket httpsmediablackhatcombh-ad-10Nils

Black-Hat-AD-2010-android-sandcastle-slidespdf BlackHat Abu Dhabi 2010

16 Raphael Rigo Android Reverse Engineering and Forensics httpsdeepsecnetdocsspeaker

htmlPSLOT45 DeepSec 2010

17 Itzhak Avraham Popping Shell on A(ndroid)RM Devices httpsmediablackhatcombh-dc-11

AvrahamBlackHat_DC_2011_Avraham-Popping_Android_Devices-Slidespdf BlackHat DC 2011

18 Jon Oberheide httpjonoberheideorgblog20100625remote-kill-and-install-on-google-android

19 Jon Oberheide httpjonoberheideorgblog20100628a-peek-inside-the-gtalkservice-connection

20 httpwwwandroidpolicecom20110301the-mother-of-all-android-

malware-has-arrived-stolen-apps-released-to-the-market-that-root-

your-phone-steal-your-data-and-open-backdoor

  • Seacutecuriteacute du systegraveme Android
  • N Ruff

138 Securite du systeme Android

compte-tenu de la proliferation drsquoapplications malveillantes de plus en plus agressiveset sophistiquees

Parmi tous les risques lies aux terminaux mobiles (vol de lrsquoequipement intrusionvia une faille du navigateur etc) on constate dans les faits que le risque principalaujourdrsquohui est la proliferation drsquoapplications malveillantes La malveillance estune notion assez floue et certaines applications peuvent se situer dans une zone grise - comme lrsquoapplication de voix sur IP Viber 36 qui duplique tous les contactsde lrsquoutilisateur sur un serveur central faisant office drsquoannuaire telephonique Maisdrsquoautres applications font lrsquounanimite contre elles comme les applications utilisant desfailles systeme pour elever leurs privileges vers root etou envoyer des SMS surtaxessans le consentement de lrsquoutilisateur Ces applications sont drsquoailleurs tuees parGoogle une fois identifiees car elles violent clairement les regles drsquoutilisation delrsquoAndroid Market

Les circuits qui conduisent a lrsquoapparition drsquoune application malveillante sontmultiples

ndash Malveillance deliberee de lrsquoauteur qui veut gagner de lrsquoargent rapidement Crsquoestle cas le plus simple Un scenario courant consiste a cloner une applicationen vogue tout en y ajoutant du code malveillant

ndash Compromission drsquoun editeur drsquoapplications a son insu Crsquoest la ligne de defenseadoptee par plusieurs editeurs drsquoapplications apres avoir ete pointe du doigtCette defense est malheureusement credible car la plupart des developpeurs sontdes individus isoles ou des micro-entreprises attirees par les success stories a laAngry Birds et bien souvent sans aucune securite dans les developpements

ndash Integration de librairies tierce partie malveillantes dans un programme sainLrsquoauteur drsquoune application populaire (a savoir Tank Hero ) a ainsi an-nonce avoir ete contacte par un fournisseur drsquoapplications probablementmalveillantes qui lui proposait un accord commercial 37

Mais lrsquoidentification des applications malveillantes nrsquoest pas la seule raison quipeut conduire a auditer une application Android Parmi drsquoautres raisons legitimes on peut citer

ndash Verifier que lrsquoapplication fait bien ce qursquoelle pretend faire Ce point est parti-culierement critique pour les applications de securite qui mettent en œuvre duchiffrement ou de la gestion de mots de passe par exemple Dans le domaineles surprises sont nombreuses drsquoautant que les applications mobiles nrsquoont pasencore la maturite des applications bureautiques et que les contraintes

36 httpwwwvibercom

37 httpwwwredditcomrAndroidcommentsfm3cuspyware_company_wants_us_to_embed_

their_code_into

N Ruff 139

du monde embarque se font sentir (puissance de calcul sources drsquoentropieremanence de lrsquoallocateur memoire Java etc)

ndash Recherche des failles de securite Et oui les applications Android sont aussivulnerables aux buffer overflows lorsqursquoelles utilisent du code natif (compileavec le NDK) et meme des injections SQL (meme si SQLite nrsquoimplemente pasdrsquoequivalent a xp cmdshell) Il existe par ailleurs des attaques specifiques aumonde Android comme les BroadcastReceiver qui ne verifieraient pas la sourcedes messages recus

Le probleme principal avec lrsquoaudit drsquoapplications Android nrsquoest pas techniqueLe probleme crsquoest lrsquoeuphorie du marche proliferation drsquoapplications et mises a jourfrequentes qui obligent a automatiser et industrialiser les audits 38

52 Auditer comment

Lrsquoaudit securite est une tache difficile a modeliser car elle tire parti de la creativitede lrsquoauditeur On peut toutefois identifier les grandes lignes suivantes

1 Recuperer lrsquoapplication

2 Decompresser les ressources

3 Desassembler le bytecode

4 Decompiler le bytecode (lorsque crsquoest possible)

5 Desassembler le code natif

6 Deboguer lrsquoapplication en cours drsquoexecution (sur un telephone reel ou danslrsquoemulateur)

Cette methodologie nrsquoest pas exhaustive elle ne donne pas acces au contenutelecharge ulterieurement (par exemple au travers des publicites integrees) Voyonsles methodes et les difficultes associees a chaque etape

Recuperer lrsquoapplication Cette etape nrsquoest pas trop compliquee pour qui est preta installer lrsquoapplication cible sur son telephone Apres installation le fichier APK estconserve dans le repertoire dataapp Selon les permissions appliquees au systeme defichiers il nrsquoest pas necessairement possible de lister le contenu de ce repertoire maisles paquets restent lisibles par lrsquooutil adb et le nom de paquet peut etre determinedepuis la MarketPlace ou le menu parametres du telephone (le nom exact estpaquet-Napk ou N vaut generalement 1)

38 httpwwwappanalysisorg

140 Securite du systeme Android

Toute autre methode est complexe et probablement illegale Parmi les methodespossibles on peut citer lrsquoinstallation de lrsquoapplication MarketPlace dans un emulateurou le reverse engineering de lrsquoapplication MarketPlace a des fins de reimplementation(cette derniere etant toutefois volumineuse donc complexe a analyser)

Depuis la version 22 du systeme Android et si lrsquoapplication lrsquoautorise il estpossible drsquoinstaller une application sur la carte SD Mais lrsquoapplication est alorsstockee dans un fichier asec chiffre Ce fichier est inexploitable jusqursquoa ce quele mecanisme et la cle de chiffrement soient connus

On peut imaginer qursquoune application extremement malveillante pourrait exploiterune faille des lrsquoinstallation pour elever ses privileges vers root et dissimuler ses traces(ie se rendre inaccessible de lrsquoexterieur) Ce cas ne srsquoest pas encore produit dansla nature a lrsquoheure ou jrsquoecris ces lignes mais srsquoavere techniquement faisable

Il faut noter que la MarketPlace de Google nrsquoest pas la seule disponible maisqursquoil existe egalement des MarketPlaces drsquooperateurs ou de tiers ainsi Amazoncommercialise desormais des applications Android 39 Cette proliferation complexifiedrsquoautant la tache drsquoanalyse des MarketPlaces La methode la plus universelle pourrecuperer la source drsquoinstallation drsquoune application reste donc de lrsquoinstaller sur untelephone

Un utilisateur peut installer des applications depuis des sources externes a laMarketPlace si lrsquooption autoriser les sources inconnues est cochee dans lesparametres de configuration Il existe des applications legitimes accessibles en dehorsdes MarketPlaces mais il existe egalement des bases drsquoapplications piratees surInternet dont lrsquoinnocuite ne peut pas etre garantie

Notons que certaines applications meme parmi celles disponibles sur les Market-Places officielles exigent au prealable un acces root au telephone

Decompresser les ressources Les fichiers places a lrsquointerieur drsquoun paquet APKsont optimises drsquoune maniere ou drsquoune autre avant drsquoetre compresses Ceci srsquoappliqueaussi bien au bytecode qursquoaux ressources textuelles (comme les fichiers XML)

Lrsquoune des optimisations principales est la deduplication de donnees Ainsi ilnrsquoexiste qursquoune seule instance de chaque chaine de caracteres dans un fichier DEXDifferents encodages optimises sont egalement utilises tel que LEB128 pourla representation des entiers (Little Endian Base 128 aussi utilise dans le formatDWARF)

Toutes ces optimisations nrsquoont pas pour but la protection logicielle et sont parfai-tement reversibles Lrsquooutil aapt fourni avec le SDK officiel permet ainsi drsquoexplorerle contenu du manifeste drsquoun paquet APK Les techniques drsquooptimisation ont ete

39 httpwwwamazoncomappstore

N Ruff 141

analysees et documentees par des tiers ce qui a permis la production drsquooutils dedecompression comme apktool 40

Desassembler le bytecode Avec le SDK officiel est fourni lrsquooutil dexdump quipermet de lister le bytecode contenu dans un fichier CLASSESDEX

Le format de fichier DEX a ete lui aussi analyse et documente 41 ce qui a permisla production de desassembleurs tiers comme baksmali

Le code genere suit la syntaxe Jasmin 42 bien connue dans le monde Java tra-ditionnel Cette syntaxe peut sembler obscure de prime abord mais elle est par-faitement reguliere donc finalement tres simple a apprehender Prenons un exempleissu drsquoune application reelle voici ci-dessous le code drsquoune methode appeleeemptyResult telle que produit par baksmali

method protected static emptyResult(LjavalangString )Z

locals 1

parameter result

prologue

line 306

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Toutes les directives commencent par un point Leur nom est relativement explicitelocals 1 va par exemple indiquer la presence drsquoune seule variable locale Le nomassigne aux opcodes de la machine virtuelle est egalement assez parlant

pN represente lrsquoargument numero N passe a la methode vN represente le re-gistre numero N (Dalvik est une machine virtuelle a registres et non a pile)

Munis de ces informations decortiquons la seule operation reellement complexeeffectuee dans cet extrait de code

40 httpcodegooglecompandroid-apktool

41 httpwwwnetmitecomandroidmydroiddalvikdocsdex-formathtml

42 httpjasminsourceforgenet

142 Securite du systeme Android

invoke-static Invoque une methode sta-tique Il existe egalementun opcode invoke-virtual

pour les methodes virtuellesinvoke-super pour la methodede la superclasse etc

p0 La methode appelee prend unseul argument La valeur de cetargument provient du premierargument passe a la methodeemptyResult

LcomutilsStringUtils-gtisEmpty Invoque la methode isEmpty de laclasse comutilsStringUtils L est un prefixe accole a tousles litteraux

(LjavalangString) Le premier (et seul) argument estde type javalangString

Z La methode retourne un booleen

A titre de reference voici les differents types natifs disponibles dans Jasmin

Z BooleenB OctetC CaractereS Entier court (16 bits)I Entier (32 bits)J Entier long (64 bits)F Flottant (32 bits)D Double (64 bits)

Lrsquoavantage majeur de lrsquooutil tiers apktool est la possibilite de modifier le bytecodeou les ressources drsquoune application puis de la recompiler dans une version fonctionnelleCeci permet drsquoutiliser une technique drsquoanalyse aussi ancienne que lrsquoinformatiqueappelee printf debugging

Dans le monde Android lrsquoutilisation de Systemout doit etre remplacee parandroidutilLog Cette classe definit plusieurs methodes ndash respectivement v d iw e et wtf ndash qui correspondent chacune a un niveau de verbosite ndash et dont lesarguments sont enregistres dans le journal systeme (sauf le niveau debug) Cejournal peut etre consulte a lrsquoaide de la commande adb logcat apparait en temps

N Ruff 143

reel dans lrsquooutil DDMS et peut egalement etre consulte par toute application quidispose de la permission READ LOGS

Si lrsquoon souhaite connaitre lrsquoargument passe a la methode emptyResult danslrsquoexemple precedent il suffit alors drsquoajouter un appel a nrsquoimporte quelle methode dela classe Log de la maniere suivante

method protected static emptyResult(LjavalangString )Z

locals 2

parameter result

prologue

line 306

const -string v1 PrintfDebuggingStyle

invoke -static v1 p0 LandroidutilLog-gtd(LjavalangStringLjavalang

String )I

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Une variable locale v1 a ete ajoutee contenant une chaine de caracteres fixe Lamethode d() est ensuite invoquee Cette modification est equivalente au code Javasuivant

Logd(PrintfDebuggingStyle ltp0 gt)

On peut constater experimentalement que de nombreuses applications de laMarketPlace font usage de lrsquoAPI Log ce qui permet de collecter des donnees defonctionnement parfois tres (trop) interessantes

Le journal systeme peut etre collecte a distance par un developpeur lors ducrash de son application si lrsquoutilisateur lrsquoautorise Cette technique a ete presenteepar Renaud Lifchitz lors de la conference 27c3 pour espionner les deplacements drsquounutilisateur 43

Decompiler le bytecode Comme avec tout bytecode de haut niveau (ex JavaNET) la semantique de lrsquoapplication est conservee

Il est donc possible de decompiler du bytecode Dalvik et de reconstruire le codeJava drsquoorigine (sans les commentaires ndash seule information perdue a la compilation) Lepremier outil public capable drsquoune telle operation fut undx 44 de Marc Schoenefeld Cetoutil est toutefois bogue et non maintenu par son auteur Le meilleur outil disponibleactuellement est lrsquooutil dex2jar 45 qui reconstruit du bytecode Java a partir du

43 httpeventscccdecongress2010Fahrplanevents4151enhtml

44 httpwwwillegalaccessorgundxhtml

45 httpcodegooglecompdex2jar

144 Securite du systeme Android

bytecode Dalvik Les outils classiques de decompilation Java 46 47 srsquoappliquentalors

Compte-tenu de la facilite deconcertante avec laquelle il est possible drsquoanalyserles applications Android (et donc de les craquer entre autres) Google a mis adisposition des developpeurs une bibliotheque tres complete de gestion des licences enligne Licensing Verification Library (LVL) 48 Toutes les versions de cette bibliothequeont malheureusement ete craquees elles aussi a lrsquoheure ou jrsquoecris ces lignes

Une autre contre-mesure mise en place par Google consiste a integrer un obfusca-teur de bytecode dans la chaine de compilation ProGuard 49 Cet outil relativementpuissant est configurable par le developpeur au travers du fichier proguardcfg toutefois le fichier de configuration par defaut (reproduit ci-apres) nrsquoopere que lerenommage des classes et methodes invisibles a lrsquoexterieur de lrsquoapplication ce qui estpeu efficace face a un attaquant determine

-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontpreverify

-verbose

-optimizations codesimplificationarithmetic field classmerging

-keep public class extends androidappActivity

-keep public class extends androidappApplication

-keep public class extends androidappService

-keep public class extends androidcontentBroadcastReceiver

-keep public class extends androidcontentContentProvider

-keep public class extends androidappbackupBackupAgentHelper

-keep public class extends androidpreferencePreference

-keep public class comandroidvendinglicensingILicensingService

-keepclasseswithmembernames class

native ltmethods gt

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet)

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet int)

-keepclassmembers enum

public static [] values ()

public static valueOf(javalangString)

46 httpmembersfortunecitycomneshkovdjhtml

47 httpjavadecompilerfreefr

48 httpdeveloperandroidcomguidepublishinglicensinghtml

49 httpdeveloperandroidcomguidedevelopingtoolsproguardhtml

N Ruff 145

-keep class implements androidosParcelable

public static final androidosParcelable$Creator

Au vu des resultats obtenus on peut considerer que lrsquoobfuscation de bytecode Javadans le monde Android est en retard sur lrsquoobfuscation de code x86 dans le monde PCLes techniques de complexification du flot de controle ou de construction dynamiquedes constantes ne sont pas encore repandues dans les applications commerciales pourAndroid Afin de combler ce manque des projets paralleles (comme AndroGuard 50)fleurissent - mais on peut supposer que la solution integree au SDK fourni par Googlerestera la solution majoritairement utilisee par les applications (pour des raisons desimplicite evidentes)

Desassembler du code natif Lors de lrsquoaudit drsquoune application Android il estpossible de rencontrer du code natif dans deux cas

1 Lrsquoapplication contient des bibliotheques natives compilees avec le NDK

2 Lrsquoapplication contient des applications natives ou srsquoavere etre elle-meme uneapplication native Ce cas est courant avec les applications malveillantes quiembarquent du code natif pour exploiter des failles noyau 51

Dans les deux cas Android ne presente aucune specificite par rapport a unLinuxARM classique Les fichiers natifs sont au format ELF La chaine de compilationnative est construite autour du compilateur GCC Tous les outils sont disponiblesdepuis longtemps pour analyser des tels binaires (ex IDA Pro Hex-Rays DecompilerARM etc)

Deboguer lrsquoapplication Une application Java compilee en mode debug peutetre deboguee a distance au travers du protocole standard Java Debug Wire Protocol(JDWP) defini dans le cadre de Java Platform Debugger Architecture (JPDA)

Les environnements de developpement Java classiques (comme Eclipse) per-mettent ainsi de deboguer une application a distance une fois celle-ci installee sur letelephone

Il est egalement possible drsquoutiliser le venerable JDB (fourni avec le SDK Java 52)bien que cet outil nrsquoait jamais depasse le statut de preuve de concept a mon avis

Lrsquooutil DDMS fourni avec le SDK Android repose egalement sur JPDA Cetoutil ne permet toutefois pas le debogage drsquoapplications mais seulement lrsquoanalyse deperformance

50 httpcodegooglecompandroguard

51 httpstealthopenwallnetxSports

52 httpdownloadoraclecomjavase142docstooldocssolarisjdbhtml

146 Securite du systeme Android

La liste des applications pouvant etre deboguees sur un systeme Android srsquoobtientavec la commande adb jdwp

Le vrai probleme se pose pour les applications qui nrsquoont pas ete compilees enmode debug Ceci implique que le manifeste de lrsquoapplication ne contient pasdrsquoentree ltapplication androiddebuggable=truegt De plus la plupart des outilsde debogage Java necessitent que le bytecode contienne des indications sur les numerosde lignes dans le code source drsquoorigine (il srsquoagit drsquoune limitation arbitraire qui nesrsquoapplique pas a lrsquooutil JavaSnoop 53 par exemple)

Fort heureusement il est possible de desassembler ces applications puis de lesreassembler en mode debug avec lrsquooutil apktool 54 Le processus est complexe etle resultat peu convivial mais il a le merite drsquoexister

Pour reinstaller lrsquoapplication modifiee sur un equipement reel il est necessairede la signer a nouveau La procedure est simple et parfaitement documentee parGoogle

Il faut drsquoabord generer une cle personnelle autosignee a duree de vie extremementlongue

$ keytool -genkey -v -keystore mykeykeystore -alias nom_alias -keyalg RSA -

keysize 2048 -validity 10000

Il faut ensuite signer le nouvel APK avec les outils du SDK Java

$ jarsigner -verbose -keystore mykeykeystore nom_applicationapk nom_alias

Enfin il est recommande drsquoaligner le code sur un multiple de 4 octets pour desraisons de performance

$ zipalign -v 4 nom_applicationapk nom_application_finalapk

Instrumentation Il est possible drsquoinstrumenter une application Java a lrsquoaide declasses specifiques a Android (androidappInstrumentation 55) Cette methodefournit des resultats detailles et personnalisables sur le fonctionnement interne drsquouneapplication elle necessite toutefois une decompilation et une modification prealablede lrsquoapplication a auditer

A lrsquoheure ou jrsquoecris ces lignes il nrsquoexiste pas (a ma connaissance) drsquooutil permettantde generaliser et drsquoautomatiser le processus a tout fichier APK Cette voie de recherchepourrait toutefois donner des resultats interessants

53 httpwwwaspectsecuritycomtoolsjavasnoop

54 httpcodegooglecompandroid-apktoolwikiSmaliDebugging

55 httpdeveloperandroidcomreferenceandroidappInstrumentationhtml

N Ruff 147

Outils specifiques Les outils disponibles actuellement dans le monde Android sontrudimentaires quoi que suffisants

Toutefois on peut raisonnablement estimer que la quantite et la qualite des outilsdisponibles va croitre de concert avec la popularite du systeme Android

A lrsquoheure ou jrsquoecris ces lignes la version 61 du logiciel IDA Pro 56 vient de sortirCette version ajoute le support du format DEX et du bytecode Dalvik ainsi que ledebogage a distance des applications Android natives

On peut supposer que drsquoautres outils couramment utilises par les auditeurs ensecurite vont etre mis a jour pour srsquoadapter au monde Android

6 Conclusion

Le systeme Android nrsquoa malheureusement pas profite de lrsquoopportunite unique quilui etait donnee repartir de la feuille blanche et creer un systeme drsquoexploitation sur par conception

A cause drsquoun heritage logiciel peu fiable ainsi que des contraintes materielles etcommerciales issues du monde de la telephonie mobile le systeme resultant est uncompromis qui laisse une large place a la creativite des attaquants

Celle-ci est drsquoautant plus exacerbee que la telephonie mobile est un phenomene demasse (il y a plus de telephones mobiles que drsquoordinateurs dans le monde) et que letelephone mobile est par conception un systeme de paiement (ce que nrsquoest pas un PCtraditionnel)

A ce tableau vient srsquoajouter 30 ans drsquoexperience dans le domaine des attaqueslogicielles appliquees a un ecosysteme applicatif qui nrsquoexistait pas il y a 5 ans

Toutes les conditions sont donc reunies pour que des attaques de grande ampleurmotivees par lrsquoargent se produisent contre les materiels grand public equipes dusysteme Android (telephones tablettes televisions )

La bonne nouvelle pour lrsquoexpert en securite crsquoest qursquoil est encore temps de srsquoymettre Android est suffisamment jeune et accessible aux nouveaux entrants ce quinrsquoest plus le cas de la plateforme PC ou les techniques drsquoattaque (ex exploitationdrsquoun heap overflow) et de defense (ex obfuscation logicielle) ont atteint des sommetsde raffinement desormais accessibles aux seuls experts les plus pointus du domaine

7 Sites et outils

71 Sites officiels

ndash Android portail officiel httpwwwandroidcom

56 httpwwwhex-rayscomidapro

148 Securite du systeme Android

ndash Android MarketPlace officielle httpsmarketandroidcomndash Android reference des developpeurs httpdeveloperandroidcom

72 Sites non officiels

ndash Reference de la machine virtuelle Dalvik httpdalvikvmcom

73 Outils tiers

ndash Google Android Debugging Utilities httpsitesgooglecomsiteortegaalfredoandroid

ndash Undx httpwwwillegalaccessorgundxhtmlndash SmaliBaksmali httpcodegooglecompsmalindash Dedexer httpdedexersourceforgenetndash Dex2Jar httpcodegooglecompdex2jarndash TaintDroid httpwwwappanalysisorg

ndash AndroGuard httpandroguardblogspotcom

References

1 Benjamin Morin Modele de securite drsquoAndroid MISC 51 2010

2 K Chen Reversing and exploiting an apple firmware update httpwwwblackhatcom

presentationsbh-usa-09CHENBHUSA09-Chen-RevAppleFirm-PAPERpdf BlackHat 2009

3 Alexandre Gazet Sticky fingers amp KBC Custom Shop httpwwwssticorg2011presentation

sticky_fingers_and_kbc_custom_shop SSTIC 2011

4 Loıc Duflot and Yves-Alexis Perez Quelques elements en matiere de securite des cartes reseau http

wwwssticorg2010presentationPeut_on_faire_confiance_aux_cartes_reseau SSTIC 2010

5 Alexander Tereshkin and Rafal Wojtczuk Introducing Ring -3 Rootkits httpwwwblackhat

compresentationsbh-usa-09TERESHKINBHUSA09-Tereshkin-Ring3Rootkit-SLIDESpdf Black-Hat USA 2009

6 Loıc Duflot Yves-Alexis Perez and Benjamin Morin Run-time firmware integrity verification what ifyou canrsquot trust your network card CanSecWest 2011

7 Ralf-Philipp Weinmann All Your Baseband Are Belong To Us httpeventscccdecongress

2010Fahrplanevents4090enhtml CCC 2010

8 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Formal Model to Analyzethe Permission Authorization and Enforcement in the Android Framework SecureComrsquo10

9 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Small but Non-negligibleFlaw in the Android Permission Scheme Wook Shin Sanghoon Kwak Shinsaku Kiyomoto KazuhideFukushima et Toshiaki Tanaka IEEE POLICY 2010

10 Marc Schonefled Reconstructing Dalvik Applications httpcansecwestcomcsw09

csw09-schoenefeldpdf CanSecWest 2009

N Ruff 149

11 Sergio Alvarez The Smart-Phones Nightmare (iPhone-oriented parts about Android) http

cansecwestcomcsw09csw09-alvarezpdf CanSecWest 2009

12 Nicolas Economou Alfredo Ortega Smartphone (in)security httpcansecwestcomcsw09

csw09-ortega-economoupdf CanSecWest 2009

13 Jesse Burns Exploratory Android Surgery httpwwwblackhatcompresentationsbh-usa-09

BURNSBHUSA09-Burns-AndroidSurgery-SLIDESpdf BlackHat USA 2009

14 Kevin Mahaffey John Hering App Attack httpsmediablackhatcombh-us-10presentations

Mahaffey_HeringBlackhat-USA-2010-Mahaffey-Hering-Lookout-App-Genome-slidespdf Black-Hat USA 2010

15 Nils The Risk you carry in your Pocket httpsmediablackhatcombh-ad-10Nils

Black-Hat-AD-2010-android-sandcastle-slidespdf BlackHat Abu Dhabi 2010

16 Raphael Rigo Android Reverse Engineering and Forensics httpsdeepsecnetdocsspeaker

htmlPSLOT45 DeepSec 2010

17 Itzhak Avraham Popping Shell on A(ndroid)RM Devices httpsmediablackhatcombh-dc-11

AvrahamBlackHat_DC_2011_Avraham-Popping_Android_Devices-Slidespdf BlackHat DC 2011

18 Jon Oberheide httpjonoberheideorgblog20100625remote-kill-and-install-on-google-android

19 Jon Oberheide httpjonoberheideorgblog20100628a-peek-inside-the-gtalkservice-connection

20 httpwwwandroidpolicecom20110301the-mother-of-all-android-

malware-has-arrived-stolen-apps-released-to-the-market-that-root-

your-phone-steal-your-data-and-open-backdoor

  • Seacutecuriteacute du systegraveme Android
  • N Ruff

N Ruff 139

du monde embarque se font sentir (puissance de calcul sources drsquoentropieremanence de lrsquoallocateur memoire Java etc)

ndash Recherche des failles de securite Et oui les applications Android sont aussivulnerables aux buffer overflows lorsqursquoelles utilisent du code natif (compileavec le NDK) et meme des injections SQL (meme si SQLite nrsquoimplemente pasdrsquoequivalent a xp cmdshell) Il existe par ailleurs des attaques specifiques aumonde Android comme les BroadcastReceiver qui ne verifieraient pas la sourcedes messages recus

Le probleme principal avec lrsquoaudit drsquoapplications Android nrsquoest pas techniqueLe probleme crsquoest lrsquoeuphorie du marche proliferation drsquoapplications et mises a jourfrequentes qui obligent a automatiser et industrialiser les audits 38

52 Auditer comment

Lrsquoaudit securite est une tache difficile a modeliser car elle tire parti de la creativitede lrsquoauditeur On peut toutefois identifier les grandes lignes suivantes

1 Recuperer lrsquoapplication

2 Decompresser les ressources

3 Desassembler le bytecode

4 Decompiler le bytecode (lorsque crsquoest possible)

5 Desassembler le code natif

6 Deboguer lrsquoapplication en cours drsquoexecution (sur un telephone reel ou danslrsquoemulateur)

Cette methodologie nrsquoest pas exhaustive elle ne donne pas acces au contenutelecharge ulterieurement (par exemple au travers des publicites integrees) Voyonsles methodes et les difficultes associees a chaque etape

Recuperer lrsquoapplication Cette etape nrsquoest pas trop compliquee pour qui est preta installer lrsquoapplication cible sur son telephone Apres installation le fichier APK estconserve dans le repertoire dataapp Selon les permissions appliquees au systeme defichiers il nrsquoest pas necessairement possible de lister le contenu de ce repertoire maisles paquets restent lisibles par lrsquooutil adb et le nom de paquet peut etre determinedepuis la MarketPlace ou le menu parametres du telephone (le nom exact estpaquet-Napk ou N vaut generalement 1)

38 httpwwwappanalysisorg

140 Securite du systeme Android

Toute autre methode est complexe et probablement illegale Parmi les methodespossibles on peut citer lrsquoinstallation de lrsquoapplication MarketPlace dans un emulateurou le reverse engineering de lrsquoapplication MarketPlace a des fins de reimplementation(cette derniere etant toutefois volumineuse donc complexe a analyser)

Depuis la version 22 du systeme Android et si lrsquoapplication lrsquoautorise il estpossible drsquoinstaller une application sur la carte SD Mais lrsquoapplication est alorsstockee dans un fichier asec chiffre Ce fichier est inexploitable jusqursquoa ce quele mecanisme et la cle de chiffrement soient connus

On peut imaginer qursquoune application extremement malveillante pourrait exploiterune faille des lrsquoinstallation pour elever ses privileges vers root et dissimuler ses traces(ie se rendre inaccessible de lrsquoexterieur) Ce cas ne srsquoest pas encore produit dansla nature a lrsquoheure ou jrsquoecris ces lignes mais srsquoavere techniquement faisable

Il faut noter que la MarketPlace de Google nrsquoest pas la seule disponible maisqursquoil existe egalement des MarketPlaces drsquooperateurs ou de tiers ainsi Amazoncommercialise desormais des applications Android 39 Cette proliferation complexifiedrsquoautant la tache drsquoanalyse des MarketPlaces La methode la plus universelle pourrecuperer la source drsquoinstallation drsquoune application reste donc de lrsquoinstaller sur untelephone

Un utilisateur peut installer des applications depuis des sources externes a laMarketPlace si lrsquooption autoriser les sources inconnues est cochee dans lesparametres de configuration Il existe des applications legitimes accessibles en dehorsdes MarketPlaces mais il existe egalement des bases drsquoapplications piratees surInternet dont lrsquoinnocuite ne peut pas etre garantie

Notons que certaines applications meme parmi celles disponibles sur les Market-Places officielles exigent au prealable un acces root au telephone

Decompresser les ressources Les fichiers places a lrsquointerieur drsquoun paquet APKsont optimises drsquoune maniere ou drsquoune autre avant drsquoetre compresses Ceci srsquoappliqueaussi bien au bytecode qursquoaux ressources textuelles (comme les fichiers XML)

Lrsquoune des optimisations principales est la deduplication de donnees Ainsi ilnrsquoexiste qursquoune seule instance de chaque chaine de caracteres dans un fichier DEXDifferents encodages optimises sont egalement utilises tel que LEB128 pourla representation des entiers (Little Endian Base 128 aussi utilise dans le formatDWARF)

Toutes ces optimisations nrsquoont pas pour but la protection logicielle et sont parfai-tement reversibles Lrsquooutil aapt fourni avec le SDK officiel permet ainsi drsquoexplorerle contenu du manifeste drsquoun paquet APK Les techniques drsquooptimisation ont ete

39 httpwwwamazoncomappstore

N Ruff 141

analysees et documentees par des tiers ce qui a permis la production drsquooutils dedecompression comme apktool 40

Desassembler le bytecode Avec le SDK officiel est fourni lrsquooutil dexdump quipermet de lister le bytecode contenu dans un fichier CLASSESDEX

Le format de fichier DEX a ete lui aussi analyse et documente 41 ce qui a permisla production de desassembleurs tiers comme baksmali

Le code genere suit la syntaxe Jasmin 42 bien connue dans le monde Java tra-ditionnel Cette syntaxe peut sembler obscure de prime abord mais elle est par-faitement reguliere donc finalement tres simple a apprehender Prenons un exempleissu drsquoune application reelle voici ci-dessous le code drsquoune methode appeleeemptyResult telle que produit par baksmali

method protected static emptyResult(LjavalangString )Z

locals 1

parameter result

prologue

line 306

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Toutes les directives commencent par un point Leur nom est relativement explicitelocals 1 va par exemple indiquer la presence drsquoune seule variable locale Le nomassigne aux opcodes de la machine virtuelle est egalement assez parlant

pN represente lrsquoargument numero N passe a la methode vN represente le re-gistre numero N (Dalvik est une machine virtuelle a registres et non a pile)

Munis de ces informations decortiquons la seule operation reellement complexeeffectuee dans cet extrait de code

40 httpcodegooglecompandroid-apktool

41 httpwwwnetmitecomandroidmydroiddalvikdocsdex-formathtml

42 httpjasminsourceforgenet

142 Securite du systeme Android

invoke-static Invoque une methode sta-tique Il existe egalementun opcode invoke-virtual

pour les methodes virtuellesinvoke-super pour la methodede la superclasse etc

p0 La methode appelee prend unseul argument La valeur de cetargument provient du premierargument passe a la methodeemptyResult

LcomutilsStringUtils-gtisEmpty Invoque la methode isEmpty de laclasse comutilsStringUtils L est un prefixe accole a tousles litteraux

(LjavalangString) Le premier (et seul) argument estde type javalangString

Z La methode retourne un booleen

A titre de reference voici les differents types natifs disponibles dans Jasmin

Z BooleenB OctetC CaractereS Entier court (16 bits)I Entier (32 bits)J Entier long (64 bits)F Flottant (32 bits)D Double (64 bits)

Lrsquoavantage majeur de lrsquooutil tiers apktool est la possibilite de modifier le bytecodeou les ressources drsquoune application puis de la recompiler dans une version fonctionnelleCeci permet drsquoutiliser une technique drsquoanalyse aussi ancienne que lrsquoinformatiqueappelee printf debugging

Dans le monde Android lrsquoutilisation de Systemout doit etre remplacee parandroidutilLog Cette classe definit plusieurs methodes ndash respectivement v d iw e et wtf ndash qui correspondent chacune a un niveau de verbosite ndash et dont lesarguments sont enregistres dans le journal systeme (sauf le niveau debug) Cejournal peut etre consulte a lrsquoaide de la commande adb logcat apparait en temps

N Ruff 143

reel dans lrsquooutil DDMS et peut egalement etre consulte par toute application quidispose de la permission READ LOGS

Si lrsquoon souhaite connaitre lrsquoargument passe a la methode emptyResult danslrsquoexemple precedent il suffit alors drsquoajouter un appel a nrsquoimporte quelle methode dela classe Log de la maniere suivante

method protected static emptyResult(LjavalangString )Z

locals 2

parameter result

prologue

line 306

const -string v1 PrintfDebuggingStyle

invoke -static v1 p0 LandroidutilLog-gtd(LjavalangStringLjavalang

String )I

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Une variable locale v1 a ete ajoutee contenant une chaine de caracteres fixe Lamethode d() est ensuite invoquee Cette modification est equivalente au code Javasuivant

Logd(PrintfDebuggingStyle ltp0 gt)

On peut constater experimentalement que de nombreuses applications de laMarketPlace font usage de lrsquoAPI Log ce qui permet de collecter des donnees defonctionnement parfois tres (trop) interessantes

Le journal systeme peut etre collecte a distance par un developpeur lors ducrash de son application si lrsquoutilisateur lrsquoautorise Cette technique a ete presenteepar Renaud Lifchitz lors de la conference 27c3 pour espionner les deplacements drsquounutilisateur 43

Decompiler le bytecode Comme avec tout bytecode de haut niveau (ex JavaNET) la semantique de lrsquoapplication est conservee

Il est donc possible de decompiler du bytecode Dalvik et de reconstruire le codeJava drsquoorigine (sans les commentaires ndash seule information perdue a la compilation) Lepremier outil public capable drsquoune telle operation fut undx 44 de Marc Schoenefeld Cetoutil est toutefois bogue et non maintenu par son auteur Le meilleur outil disponibleactuellement est lrsquooutil dex2jar 45 qui reconstruit du bytecode Java a partir du

43 httpeventscccdecongress2010Fahrplanevents4151enhtml

44 httpwwwillegalaccessorgundxhtml

45 httpcodegooglecompdex2jar

144 Securite du systeme Android

bytecode Dalvik Les outils classiques de decompilation Java 46 47 srsquoappliquentalors

Compte-tenu de la facilite deconcertante avec laquelle il est possible drsquoanalyserles applications Android (et donc de les craquer entre autres) Google a mis adisposition des developpeurs une bibliotheque tres complete de gestion des licences enligne Licensing Verification Library (LVL) 48 Toutes les versions de cette bibliothequeont malheureusement ete craquees elles aussi a lrsquoheure ou jrsquoecris ces lignes

Une autre contre-mesure mise en place par Google consiste a integrer un obfusca-teur de bytecode dans la chaine de compilation ProGuard 49 Cet outil relativementpuissant est configurable par le developpeur au travers du fichier proguardcfg toutefois le fichier de configuration par defaut (reproduit ci-apres) nrsquoopere que lerenommage des classes et methodes invisibles a lrsquoexterieur de lrsquoapplication ce qui estpeu efficace face a un attaquant determine

-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontpreverify

-verbose

-optimizations codesimplificationarithmetic field classmerging

-keep public class extends androidappActivity

-keep public class extends androidappApplication

-keep public class extends androidappService

-keep public class extends androidcontentBroadcastReceiver

-keep public class extends androidcontentContentProvider

-keep public class extends androidappbackupBackupAgentHelper

-keep public class extends androidpreferencePreference

-keep public class comandroidvendinglicensingILicensingService

-keepclasseswithmembernames class

native ltmethods gt

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet)

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet int)

-keepclassmembers enum

public static [] values ()

public static valueOf(javalangString)

46 httpmembersfortunecitycomneshkovdjhtml

47 httpjavadecompilerfreefr

48 httpdeveloperandroidcomguidepublishinglicensinghtml

49 httpdeveloperandroidcomguidedevelopingtoolsproguardhtml

N Ruff 145

-keep class implements androidosParcelable

public static final androidosParcelable$Creator

Au vu des resultats obtenus on peut considerer que lrsquoobfuscation de bytecode Javadans le monde Android est en retard sur lrsquoobfuscation de code x86 dans le monde PCLes techniques de complexification du flot de controle ou de construction dynamiquedes constantes ne sont pas encore repandues dans les applications commerciales pourAndroid Afin de combler ce manque des projets paralleles (comme AndroGuard 50)fleurissent - mais on peut supposer que la solution integree au SDK fourni par Googlerestera la solution majoritairement utilisee par les applications (pour des raisons desimplicite evidentes)

Desassembler du code natif Lors de lrsquoaudit drsquoune application Android il estpossible de rencontrer du code natif dans deux cas

1 Lrsquoapplication contient des bibliotheques natives compilees avec le NDK

2 Lrsquoapplication contient des applications natives ou srsquoavere etre elle-meme uneapplication native Ce cas est courant avec les applications malveillantes quiembarquent du code natif pour exploiter des failles noyau 51

Dans les deux cas Android ne presente aucune specificite par rapport a unLinuxARM classique Les fichiers natifs sont au format ELF La chaine de compilationnative est construite autour du compilateur GCC Tous les outils sont disponiblesdepuis longtemps pour analyser des tels binaires (ex IDA Pro Hex-Rays DecompilerARM etc)

Deboguer lrsquoapplication Une application Java compilee en mode debug peutetre deboguee a distance au travers du protocole standard Java Debug Wire Protocol(JDWP) defini dans le cadre de Java Platform Debugger Architecture (JPDA)

Les environnements de developpement Java classiques (comme Eclipse) per-mettent ainsi de deboguer une application a distance une fois celle-ci installee sur letelephone

Il est egalement possible drsquoutiliser le venerable JDB (fourni avec le SDK Java 52)bien que cet outil nrsquoait jamais depasse le statut de preuve de concept a mon avis

Lrsquooutil DDMS fourni avec le SDK Android repose egalement sur JPDA Cetoutil ne permet toutefois pas le debogage drsquoapplications mais seulement lrsquoanalyse deperformance

50 httpcodegooglecompandroguard

51 httpstealthopenwallnetxSports

52 httpdownloadoraclecomjavase142docstooldocssolarisjdbhtml

146 Securite du systeme Android

La liste des applications pouvant etre deboguees sur un systeme Android srsquoobtientavec la commande adb jdwp

Le vrai probleme se pose pour les applications qui nrsquoont pas ete compilees enmode debug Ceci implique que le manifeste de lrsquoapplication ne contient pasdrsquoentree ltapplication androiddebuggable=truegt De plus la plupart des outilsde debogage Java necessitent que le bytecode contienne des indications sur les numerosde lignes dans le code source drsquoorigine (il srsquoagit drsquoune limitation arbitraire qui nesrsquoapplique pas a lrsquooutil JavaSnoop 53 par exemple)

Fort heureusement il est possible de desassembler ces applications puis de lesreassembler en mode debug avec lrsquooutil apktool 54 Le processus est complexe etle resultat peu convivial mais il a le merite drsquoexister

Pour reinstaller lrsquoapplication modifiee sur un equipement reel il est necessairede la signer a nouveau La procedure est simple et parfaitement documentee parGoogle

Il faut drsquoabord generer une cle personnelle autosignee a duree de vie extremementlongue

$ keytool -genkey -v -keystore mykeykeystore -alias nom_alias -keyalg RSA -

keysize 2048 -validity 10000

Il faut ensuite signer le nouvel APK avec les outils du SDK Java

$ jarsigner -verbose -keystore mykeykeystore nom_applicationapk nom_alias

Enfin il est recommande drsquoaligner le code sur un multiple de 4 octets pour desraisons de performance

$ zipalign -v 4 nom_applicationapk nom_application_finalapk

Instrumentation Il est possible drsquoinstrumenter une application Java a lrsquoaide declasses specifiques a Android (androidappInstrumentation 55) Cette methodefournit des resultats detailles et personnalisables sur le fonctionnement interne drsquouneapplication elle necessite toutefois une decompilation et une modification prealablede lrsquoapplication a auditer

A lrsquoheure ou jrsquoecris ces lignes il nrsquoexiste pas (a ma connaissance) drsquooutil permettantde generaliser et drsquoautomatiser le processus a tout fichier APK Cette voie de recherchepourrait toutefois donner des resultats interessants

53 httpwwwaspectsecuritycomtoolsjavasnoop

54 httpcodegooglecompandroid-apktoolwikiSmaliDebugging

55 httpdeveloperandroidcomreferenceandroidappInstrumentationhtml

N Ruff 147

Outils specifiques Les outils disponibles actuellement dans le monde Android sontrudimentaires quoi que suffisants

Toutefois on peut raisonnablement estimer que la quantite et la qualite des outilsdisponibles va croitre de concert avec la popularite du systeme Android

A lrsquoheure ou jrsquoecris ces lignes la version 61 du logiciel IDA Pro 56 vient de sortirCette version ajoute le support du format DEX et du bytecode Dalvik ainsi que ledebogage a distance des applications Android natives

On peut supposer que drsquoautres outils couramment utilises par les auditeurs ensecurite vont etre mis a jour pour srsquoadapter au monde Android

6 Conclusion

Le systeme Android nrsquoa malheureusement pas profite de lrsquoopportunite unique quilui etait donnee repartir de la feuille blanche et creer un systeme drsquoexploitation sur par conception

A cause drsquoun heritage logiciel peu fiable ainsi que des contraintes materielles etcommerciales issues du monde de la telephonie mobile le systeme resultant est uncompromis qui laisse une large place a la creativite des attaquants

Celle-ci est drsquoautant plus exacerbee que la telephonie mobile est un phenomene demasse (il y a plus de telephones mobiles que drsquoordinateurs dans le monde) et que letelephone mobile est par conception un systeme de paiement (ce que nrsquoest pas un PCtraditionnel)

A ce tableau vient srsquoajouter 30 ans drsquoexperience dans le domaine des attaqueslogicielles appliquees a un ecosysteme applicatif qui nrsquoexistait pas il y a 5 ans

Toutes les conditions sont donc reunies pour que des attaques de grande ampleurmotivees par lrsquoargent se produisent contre les materiels grand public equipes dusysteme Android (telephones tablettes televisions )

La bonne nouvelle pour lrsquoexpert en securite crsquoest qursquoil est encore temps de srsquoymettre Android est suffisamment jeune et accessible aux nouveaux entrants ce quinrsquoest plus le cas de la plateforme PC ou les techniques drsquoattaque (ex exploitationdrsquoun heap overflow) et de defense (ex obfuscation logicielle) ont atteint des sommetsde raffinement desormais accessibles aux seuls experts les plus pointus du domaine

7 Sites et outils

71 Sites officiels

ndash Android portail officiel httpwwwandroidcom

56 httpwwwhex-rayscomidapro

148 Securite du systeme Android

ndash Android MarketPlace officielle httpsmarketandroidcomndash Android reference des developpeurs httpdeveloperandroidcom

72 Sites non officiels

ndash Reference de la machine virtuelle Dalvik httpdalvikvmcom

73 Outils tiers

ndash Google Android Debugging Utilities httpsitesgooglecomsiteortegaalfredoandroid

ndash Undx httpwwwillegalaccessorgundxhtmlndash SmaliBaksmali httpcodegooglecompsmalindash Dedexer httpdedexersourceforgenetndash Dex2Jar httpcodegooglecompdex2jarndash TaintDroid httpwwwappanalysisorg

ndash AndroGuard httpandroguardblogspotcom

References

1 Benjamin Morin Modele de securite drsquoAndroid MISC 51 2010

2 K Chen Reversing and exploiting an apple firmware update httpwwwblackhatcom

presentationsbh-usa-09CHENBHUSA09-Chen-RevAppleFirm-PAPERpdf BlackHat 2009

3 Alexandre Gazet Sticky fingers amp KBC Custom Shop httpwwwssticorg2011presentation

sticky_fingers_and_kbc_custom_shop SSTIC 2011

4 Loıc Duflot and Yves-Alexis Perez Quelques elements en matiere de securite des cartes reseau http

wwwssticorg2010presentationPeut_on_faire_confiance_aux_cartes_reseau SSTIC 2010

5 Alexander Tereshkin and Rafal Wojtczuk Introducing Ring -3 Rootkits httpwwwblackhat

compresentationsbh-usa-09TERESHKINBHUSA09-Tereshkin-Ring3Rootkit-SLIDESpdf Black-Hat USA 2009

6 Loıc Duflot Yves-Alexis Perez and Benjamin Morin Run-time firmware integrity verification what ifyou canrsquot trust your network card CanSecWest 2011

7 Ralf-Philipp Weinmann All Your Baseband Are Belong To Us httpeventscccdecongress

2010Fahrplanevents4090enhtml CCC 2010

8 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Formal Model to Analyzethe Permission Authorization and Enforcement in the Android Framework SecureComrsquo10

9 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Small but Non-negligibleFlaw in the Android Permission Scheme Wook Shin Sanghoon Kwak Shinsaku Kiyomoto KazuhideFukushima et Toshiaki Tanaka IEEE POLICY 2010

10 Marc Schonefled Reconstructing Dalvik Applications httpcansecwestcomcsw09

csw09-schoenefeldpdf CanSecWest 2009

N Ruff 149

11 Sergio Alvarez The Smart-Phones Nightmare (iPhone-oriented parts about Android) http

cansecwestcomcsw09csw09-alvarezpdf CanSecWest 2009

12 Nicolas Economou Alfredo Ortega Smartphone (in)security httpcansecwestcomcsw09

csw09-ortega-economoupdf CanSecWest 2009

13 Jesse Burns Exploratory Android Surgery httpwwwblackhatcompresentationsbh-usa-09

BURNSBHUSA09-Burns-AndroidSurgery-SLIDESpdf BlackHat USA 2009

14 Kevin Mahaffey John Hering App Attack httpsmediablackhatcombh-us-10presentations

Mahaffey_HeringBlackhat-USA-2010-Mahaffey-Hering-Lookout-App-Genome-slidespdf Black-Hat USA 2010

15 Nils The Risk you carry in your Pocket httpsmediablackhatcombh-ad-10Nils

Black-Hat-AD-2010-android-sandcastle-slidespdf BlackHat Abu Dhabi 2010

16 Raphael Rigo Android Reverse Engineering and Forensics httpsdeepsecnetdocsspeaker

htmlPSLOT45 DeepSec 2010

17 Itzhak Avraham Popping Shell on A(ndroid)RM Devices httpsmediablackhatcombh-dc-11

AvrahamBlackHat_DC_2011_Avraham-Popping_Android_Devices-Slidespdf BlackHat DC 2011

18 Jon Oberheide httpjonoberheideorgblog20100625remote-kill-and-install-on-google-android

19 Jon Oberheide httpjonoberheideorgblog20100628a-peek-inside-the-gtalkservice-connection

20 httpwwwandroidpolicecom20110301the-mother-of-all-android-

malware-has-arrived-stolen-apps-released-to-the-market-that-root-

your-phone-steal-your-data-and-open-backdoor

  • Seacutecuriteacute du systegraveme Android
  • N Ruff

140 Securite du systeme Android

Toute autre methode est complexe et probablement illegale Parmi les methodespossibles on peut citer lrsquoinstallation de lrsquoapplication MarketPlace dans un emulateurou le reverse engineering de lrsquoapplication MarketPlace a des fins de reimplementation(cette derniere etant toutefois volumineuse donc complexe a analyser)

Depuis la version 22 du systeme Android et si lrsquoapplication lrsquoautorise il estpossible drsquoinstaller une application sur la carte SD Mais lrsquoapplication est alorsstockee dans un fichier asec chiffre Ce fichier est inexploitable jusqursquoa ce quele mecanisme et la cle de chiffrement soient connus

On peut imaginer qursquoune application extremement malveillante pourrait exploiterune faille des lrsquoinstallation pour elever ses privileges vers root et dissimuler ses traces(ie se rendre inaccessible de lrsquoexterieur) Ce cas ne srsquoest pas encore produit dansla nature a lrsquoheure ou jrsquoecris ces lignes mais srsquoavere techniquement faisable

Il faut noter que la MarketPlace de Google nrsquoest pas la seule disponible maisqursquoil existe egalement des MarketPlaces drsquooperateurs ou de tiers ainsi Amazoncommercialise desormais des applications Android 39 Cette proliferation complexifiedrsquoautant la tache drsquoanalyse des MarketPlaces La methode la plus universelle pourrecuperer la source drsquoinstallation drsquoune application reste donc de lrsquoinstaller sur untelephone

Un utilisateur peut installer des applications depuis des sources externes a laMarketPlace si lrsquooption autoriser les sources inconnues est cochee dans lesparametres de configuration Il existe des applications legitimes accessibles en dehorsdes MarketPlaces mais il existe egalement des bases drsquoapplications piratees surInternet dont lrsquoinnocuite ne peut pas etre garantie

Notons que certaines applications meme parmi celles disponibles sur les Market-Places officielles exigent au prealable un acces root au telephone

Decompresser les ressources Les fichiers places a lrsquointerieur drsquoun paquet APKsont optimises drsquoune maniere ou drsquoune autre avant drsquoetre compresses Ceci srsquoappliqueaussi bien au bytecode qursquoaux ressources textuelles (comme les fichiers XML)

Lrsquoune des optimisations principales est la deduplication de donnees Ainsi ilnrsquoexiste qursquoune seule instance de chaque chaine de caracteres dans un fichier DEXDifferents encodages optimises sont egalement utilises tel que LEB128 pourla representation des entiers (Little Endian Base 128 aussi utilise dans le formatDWARF)

Toutes ces optimisations nrsquoont pas pour but la protection logicielle et sont parfai-tement reversibles Lrsquooutil aapt fourni avec le SDK officiel permet ainsi drsquoexplorerle contenu du manifeste drsquoun paquet APK Les techniques drsquooptimisation ont ete

39 httpwwwamazoncomappstore

N Ruff 141

analysees et documentees par des tiers ce qui a permis la production drsquooutils dedecompression comme apktool 40

Desassembler le bytecode Avec le SDK officiel est fourni lrsquooutil dexdump quipermet de lister le bytecode contenu dans un fichier CLASSESDEX

Le format de fichier DEX a ete lui aussi analyse et documente 41 ce qui a permisla production de desassembleurs tiers comme baksmali

Le code genere suit la syntaxe Jasmin 42 bien connue dans le monde Java tra-ditionnel Cette syntaxe peut sembler obscure de prime abord mais elle est par-faitement reguliere donc finalement tres simple a apprehender Prenons un exempleissu drsquoune application reelle voici ci-dessous le code drsquoune methode appeleeemptyResult telle que produit par baksmali

method protected static emptyResult(LjavalangString )Z

locals 1

parameter result

prologue

line 306

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Toutes les directives commencent par un point Leur nom est relativement explicitelocals 1 va par exemple indiquer la presence drsquoune seule variable locale Le nomassigne aux opcodes de la machine virtuelle est egalement assez parlant

pN represente lrsquoargument numero N passe a la methode vN represente le re-gistre numero N (Dalvik est une machine virtuelle a registres et non a pile)

Munis de ces informations decortiquons la seule operation reellement complexeeffectuee dans cet extrait de code

40 httpcodegooglecompandroid-apktool

41 httpwwwnetmitecomandroidmydroiddalvikdocsdex-formathtml

42 httpjasminsourceforgenet

142 Securite du systeme Android

invoke-static Invoque une methode sta-tique Il existe egalementun opcode invoke-virtual

pour les methodes virtuellesinvoke-super pour la methodede la superclasse etc

p0 La methode appelee prend unseul argument La valeur de cetargument provient du premierargument passe a la methodeemptyResult

LcomutilsStringUtils-gtisEmpty Invoque la methode isEmpty de laclasse comutilsStringUtils L est un prefixe accole a tousles litteraux

(LjavalangString) Le premier (et seul) argument estde type javalangString

Z La methode retourne un booleen

A titre de reference voici les differents types natifs disponibles dans Jasmin

Z BooleenB OctetC CaractereS Entier court (16 bits)I Entier (32 bits)J Entier long (64 bits)F Flottant (32 bits)D Double (64 bits)

Lrsquoavantage majeur de lrsquooutil tiers apktool est la possibilite de modifier le bytecodeou les ressources drsquoune application puis de la recompiler dans une version fonctionnelleCeci permet drsquoutiliser une technique drsquoanalyse aussi ancienne que lrsquoinformatiqueappelee printf debugging

Dans le monde Android lrsquoutilisation de Systemout doit etre remplacee parandroidutilLog Cette classe definit plusieurs methodes ndash respectivement v d iw e et wtf ndash qui correspondent chacune a un niveau de verbosite ndash et dont lesarguments sont enregistres dans le journal systeme (sauf le niveau debug) Cejournal peut etre consulte a lrsquoaide de la commande adb logcat apparait en temps

N Ruff 143

reel dans lrsquooutil DDMS et peut egalement etre consulte par toute application quidispose de la permission READ LOGS

Si lrsquoon souhaite connaitre lrsquoargument passe a la methode emptyResult danslrsquoexemple precedent il suffit alors drsquoajouter un appel a nrsquoimporte quelle methode dela classe Log de la maniere suivante

method protected static emptyResult(LjavalangString )Z

locals 2

parameter result

prologue

line 306

const -string v1 PrintfDebuggingStyle

invoke -static v1 p0 LandroidutilLog-gtd(LjavalangStringLjavalang

String )I

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Une variable locale v1 a ete ajoutee contenant une chaine de caracteres fixe Lamethode d() est ensuite invoquee Cette modification est equivalente au code Javasuivant

Logd(PrintfDebuggingStyle ltp0 gt)

On peut constater experimentalement que de nombreuses applications de laMarketPlace font usage de lrsquoAPI Log ce qui permet de collecter des donnees defonctionnement parfois tres (trop) interessantes

Le journal systeme peut etre collecte a distance par un developpeur lors ducrash de son application si lrsquoutilisateur lrsquoautorise Cette technique a ete presenteepar Renaud Lifchitz lors de la conference 27c3 pour espionner les deplacements drsquounutilisateur 43

Decompiler le bytecode Comme avec tout bytecode de haut niveau (ex JavaNET) la semantique de lrsquoapplication est conservee

Il est donc possible de decompiler du bytecode Dalvik et de reconstruire le codeJava drsquoorigine (sans les commentaires ndash seule information perdue a la compilation) Lepremier outil public capable drsquoune telle operation fut undx 44 de Marc Schoenefeld Cetoutil est toutefois bogue et non maintenu par son auteur Le meilleur outil disponibleactuellement est lrsquooutil dex2jar 45 qui reconstruit du bytecode Java a partir du

43 httpeventscccdecongress2010Fahrplanevents4151enhtml

44 httpwwwillegalaccessorgundxhtml

45 httpcodegooglecompdex2jar

144 Securite du systeme Android

bytecode Dalvik Les outils classiques de decompilation Java 46 47 srsquoappliquentalors

Compte-tenu de la facilite deconcertante avec laquelle il est possible drsquoanalyserles applications Android (et donc de les craquer entre autres) Google a mis adisposition des developpeurs une bibliotheque tres complete de gestion des licences enligne Licensing Verification Library (LVL) 48 Toutes les versions de cette bibliothequeont malheureusement ete craquees elles aussi a lrsquoheure ou jrsquoecris ces lignes

Une autre contre-mesure mise en place par Google consiste a integrer un obfusca-teur de bytecode dans la chaine de compilation ProGuard 49 Cet outil relativementpuissant est configurable par le developpeur au travers du fichier proguardcfg toutefois le fichier de configuration par defaut (reproduit ci-apres) nrsquoopere que lerenommage des classes et methodes invisibles a lrsquoexterieur de lrsquoapplication ce qui estpeu efficace face a un attaquant determine

-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontpreverify

-verbose

-optimizations codesimplificationarithmetic field classmerging

-keep public class extends androidappActivity

-keep public class extends androidappApplication

-keep public class extends androidappService

-keep public class extends androidcontentBroadcastReceiver

-keep public class extends androidcontentContentProvider

-keep public class extends androidappbackupBackupAgentHelper

-keep public class extends androidpreferencePreference

-keep public class comandroidvendinglicensingILicensingService

-keepclasseswithmembernames class

native ltmethods gt

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet)

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet int)

-keepclassmembers enum

public static [] values ()

public static valueOf(javalangString)

46 httpmembersfortunecitycomneshkovdjhtml

47 httpjavadecompilerfreefr

48 httpdeveloperandroidcomguidepublishinglicensinghtml

49 httpdeveloperandroidcomguidedevelopingtoolsproguardhtml

N Ruff 145

-keep class implements androidosParcelable

public static final androidosParcelable$Creator

Au vu des resultats obtenus on peut considerer que lrsquoobfuscation de bytecode Javadans le monde Android est en retard sur lrsquoobfuscation de code x86 dans le monde PCLes techniques de complexification du flot de controle ou de construction dynamiquedes constantes ne sont pas encore repandues dans les applications commerciales pourAndroid Afin de combler ce manque des projets paralleles (comme AndroGuard 50)fleurissent - mais on peut supposer que la solution integree au SDK fourni par Googlerestera la solution majoritairement utilisee par les applications (pour des raisons desimplicite evidentes)

Desassembler du code natif Lors de lrsquoaudit drsquoune application Android il estpossible de rencontrer du code natif dans deux cas

1 Lrsquoapplication contient des bibliotheques natives compilees avec le NDK

2 Lrsquoapplication contient des applications natives ou srsquoavere etre elle-meme uneapplication native Ce cas est courant avec les applications malveillantes quiembarquent du code natif pour exploiter des failles noyau 51

Dans les deux cas Android ne presente aucune specificite par rapport a unLinuxARM classique Les fichiers natifs sont au format ELF La chaine de compilationnative est construite autour du compilateur GCC Tous les outils sont disponiblesdepuis longtemps pour analyser des tels binaires (ex IDA Pro Hex-Rays DecompilerARM etc)

Deboguer lrsquoapplication Une application Java compilee en mode debug peutetre deboguee a distance au travers du protocole standard Java Debug Wire Protocol(JDWP) defini dans le cadre de Java Platform Debugger Architecture (JPDA)

Les environnements de developpement Java classiques (comme Eclipse) per-mettent ainsi de deboguer une application a distance une fois celle-ci installee sur letelephone

Il est egalement possible drsquoutiliser le venerable JDB (fourni avec le SDK Java 52)bien que cet outil nrsquoait jamais depasse le statut de preuve de concept a mon avis

Lrsquooutil DDMS fourni avec le SDK Android repose egalement sur JPDA Cetoutil ne permet toutefois pas le debogage drsquoapplications mais seulement lrsquoanalyse deperformance

50 httpcodegooglecompandroguard

51 httpstealthopenwallnetxSports

52 httpdownloadoraclecomjavase142docstooldocssolarisjdbhtml

146 Securite du systeme Android

La liste des applications pouvant etre deboguees sur un systeme Android srsquoobtientavec la commande adb jdwp

Le vrai probleme se pose pour les applications qui nrsquoont pas ete compilees enmode debug Ceci implique que le manifeste de lrsquoapplication ne contient pasdrsquoentree ltapplication androiddebuggable=truegt De plus la plupart des outilsde debogage Java necessitent que le bytecode contienne des indications sur les numerosde lignes dans le code source drsquoorigine (il srsquoagit drsquoune limitation arbitraire qui nesrsquoapplique pas a lrsquooutil JavaSnoop 53 par exemple)

Fort heureusement il est possible de desassembler ces applications puis de lesreassembler en mode debug avec lrsquooutil apktool 54 Le processus est complexe etle resultat peu convivial mais il a le merite drsquoexister

Pour reinstaller lrsquoapplication modifiee sur un equipement reel il est necessairede la signer a nouveau La procedure est simple et parfaitement documentee parGoogle

Il faut drsquoabord generer une cle personnelle autosignee a duree de vie extremementlongue

$ keytool -genkey -v -keystore mykeykeystore -alias nom_alias -keyalg RSA -

keysize 2048 -validity 10000

Il faut ensuite signer le nouvel APK avec les outils du SDK Java

$ jarsigner -verbose -keystore mykeykeystore nom_applicationapk nom_alias

Enfin il est recommande drsquoaligner le code sur un multiple de 4 octets pour desraisons de performance

$ zipalign -v 4 nom_applicationapk nom_application_finalapk

Instrumentation Il est possible drsquoinstrumenter une application Java a lrsquoaide declasses specifiques a Android (androidappInstrumentation 55) Cette methodefournit des resultats detailles et personnalisables sur le fonctionnement interne drsquouneapplication elle necessite toutefois une decompilation et une modification prealablede lrsquoapplication a auditer

A lrsquoheure ou jrsquoecris ces lignes il nrsquoexiste pas (a ma connaissance) drsquooutil permettantde generaliser et drsquoautomatiser le processus a tout fichier APK Cette voie de recherchepourrait toutefois donner des resultats interessants

53 httpwwwaspectsecuritycomtoolsjavasnoop

54 httpcodegooglecompandroid-apktoolwikiSmaliDebugging

55 httpdeveloperandroidcomreferenceandroidappInstrumentationhtml

N Ruff 147

Outils specifiques Les outils disponibles actuellement dans le monde Android sontrudimentaires quoi que suffisants

Toutefois on peut raisonnablement estimer que la quantite et la qualite des outilsdisponibles va croitre de concert avec la popularite du systeme Android

A lrsquoheure ou jrsquoecris ces lignes la version 61 du logiciel IDA Pro 56 vient de sortirCette version ajoute le support du format DEX et du bytecode Dalvik ainsi que ledebogage a distance des applications Android natives

On peut supposer que drsquoautres outils couramment utilises par les auditeurs ensecurite vont etre mis a jour pour srsquoadapter au monde Android

6 Conclusion

Le systeme Android nrsquoa malheureusement pas profite de lrsquoopportunite unique quilui etait donnee repartir de la feuille blanche et creer un systeme drsquoexploitation sur par conception

A cause drsquoun heritage logiciel peu fiable ainsi que des contraintes materielles etcommerciales issues du monde de la telephonie mobile le systeme resultant est uncompromis qui laisse une large place a la creativite des attaquants

Celle-ci est drsquoautant plus exacerbee que la telephonie mobile est un phenomene demasse (il y a plus de telephones mobiles que drsquoordinateurs dans le monde) et que letelephone mobile est par conception un systeme de paiement (ce que nrsquoest pas un PCtraditionnel)

A ce tableau vient srsquoajouter 30 ans drsquoexperience dans le domaine des attaqueslogicielles appliquees a un ecosysteme applicatif qui nrsquoexistait pas il y a 5 ans

Toutes les conditions sont donc reunies pour que des attaques de grande ampleurmotivees par lrsquoargent se produisent contre les materiels grand public equipes dusysteme Android (telephones tablettes televisions )

La bonne nouvelle pour lrsquoexpert en securite crsquoest qursquoil est encore temps de srsquoymettre Android est suffisamment jeune et accessible aux nouveaux entrants ce quinrsquoest plus le cas de la plateforme PC ou les techniques drsquoattaque (ex exploitationdrsquoun heap overflow) et de defense (ex obfuscation logicielle) ont atteint des sommetsde raffinement desormais accessibles aux seuls experts les plus pointus du domaine

7 Sites et outils

71 Sites officiels

ndash Android portail officiel httpwwwandroidcom

56 httpwwwhex-rayscomidapro

148 Securite du systeme Android

ndash Android MarketPlace officielle httpsmarketandroidcomndash Android reference des developpeurs httpdeveloperandroidcom

72 Sites non officiels

ndash Reference de la machine virtuelle Dalvik httpdalvikvmcom

73 Outils tiers

ndash Google Android Debugging Utilities httpsitesgooglecomsiteortegaalfredoandroid

ndash Undx httpwwwillegalaccessorgundxhtmlndash SmaliBaksmali httpcodegooglecompsmalindash Dedexer httpdedexersourceforgenetndash Dex2Jar httpcodegooglecompdex2jarndash TaintDroid httpwwwappanalysisorg

ndash AndroGuard httpandroguardblogspotcom

References

1 Benjamin Morin Modele de securite drsquoAndroid MISC 51 2010

2 K Chen Reversing and exploiting an apple firmware update httpwwwblackhatcom

presentationsbh-usa-09CHENBHUSA09-Chen-RevAppleFirm-PAPERpdf BlackHat 2009

3 Alexandre Gazet Sticky fingers amp KBC Custom Shop httpwwwssticorg2011presentation

sticky_fingers_and_kbc_custom_shop SSTIC 2011

4 Loıc Duflot and Yves-Alexis Perez Quelques elements en matiere de securite des cartes reseau http

wwwssticorg2010presentationPeut_on_faire_confiance_aux_cartes_reseau SSTIC 2010

5 Alexander Tereshkin and Rafal Wojtczuk Introducing Ring -3 Rootkits httpwwwblackhat

compresentationsbh-usa-09TERESHKINBHUSA09-Tereshkin-Ring3Rootkit-SLIDESpdf Black-Hat USA 2009

6 Loıc Duflot Yves-Alexis Perez and Benjamin Morin Run-time firmware integrity verification what ifyou canrsquot trust your network card CanSecWest 2011

7 Ralf-Philipp Weinmann All Your Baseband Are Belong To Us httpeventscccdecongress

2010Fahrplanevents4090enhtml CCC 2010

8 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Formal Model to Analyzethe Permission Authorization and Enforcement in the Android Framework SecureComrsquo10

9 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Small but Non-negligibleFlaw in the Android Permission Scheme Wook Shin Sanghoon Kwak Shinsaku Kiyomoto KazuhideFukushima et Toshiaki Tanaka IEEE POLICY 2010

10 Marc Schonefled Reconstructing Dalvik Applications httpcansecwestcomcsw09

csw09-schoenefeldpdf CanSecWest 2009

N Ruff 149

11 Sergio Alvarez The Smart-Phones Nightmare (iPhone-oriented parts about Android) http

cansecwestcomcsw09csw09-alvarezpdf CanSecWest 2009

12 Nicolas Economou Alfredo Ortega Smartphone (in)security httpcansecwestcomcsw09

csw09-ortega-economoupdf CanSecWest 2009

13 Jesse Burns Exploratory Android Surgery httpwwwblackhatcompresentationsbh-usa-09

BURNSBHUSA09-Burns-AndroidSurgery-SLIDESpdf BlackHat USA 2009

14 Kevin Mahaffey John Hering App Attack httpsmediablackhatcombh-us-10presentations

Mahaffey_HeringBlackhat-USA-2010-Mahaffey-Hering-Lookout-App-Genome-slidespdf Black-Hat USA 2010

15 Nils The Risk you carry in your Pocket httpsmediablackhatcombh-ad-10Nils

Black-Hat-AD-2010-android-sandcastle-slidespdf BlackHat Abu Dhabi 2010

16 Raphael Rigo Android Reverse Engineering and Forensics httpsdeepsecnetdocsspeaker

htmlPSLOT45 DeepSec 2010

17 Itzhak Avraham Popping Shell on A(ndroid)RM Devices httpsmediablackhatcombh-dc-11

AvrahamBlackHat_DC_2011_Avraham-Popping_Android_Devices-Slidespdf BlackHat DC 2011

18 Jon Oberheide httpjonoberheideorgblog20100625remote-kill-and-install-on-google-android

19 Jon Oberheide httpjonoberheideorgblog20100628a-peek-inside-the-gtalkservice-connection

20 httpwwwandroidpolicecom20110301the-mother-of-all-android-

malware-has-arrived-stolen-apps-released-to-the-market-that-root-

your-phone-steal-your-data-and-open-backdoor

  • Seacutecuriteacute du systegraveme Android
  • N Ruff

N Ruff 141

analysees et documentees par des tiers ce qui a permis la production drsquooutils dedecompression comme apktool 40

Desassembler le bytecode Avec le SDK officiel est fourni lrsquooutil dexdump quipermet de lister le bytecode contenu dans un fichier CLASSESDEX

Le format de fichier DEX a ete lui aussi analyse et documente 41 ce qui a permisla production de desassembleurs tiers comme baksmali

Le code genere suit la syntaxe Jasmin 42 bien connue dans le monde Java tra-ditionnel Cette syntaxe peut sembler obscure de prime abord mais elle est par-faitement reguliere donc finalement tres simple a apprehender Prenons un exempleissu drsquoune application reelle voici ci-dessous le code drsquoune methode appeleeemptyResult telle que produit par baksmali

method protected static emptyResult(LjavalangString )Z

locals 1

parameter result

prologue

line 306

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Toutes les directives commencent par un point Leur nom est relativement explicitelocals 1 va par exemple indiquer la presence drsquoune seule variable locale Le nomassigne aux opcodes de la machine virtuelle est egalement assez parlant

pN represente lrsquoargument numero N passe a la methode vN represente le re-gistre numero N (Dalvik est une machine virtuelle a registres et non a pile)

Munis de ces informations decortiquons la seule operation reellement complexeeffectuee dans cet extrait de code

40 httpcodegooglecompandroid-apktool

41 httpwwwnetmitecomandroidmydroiddalvikdocsdex-formathtml

42 httpjasminsourceforgenet

142 Securite du systeme Android

invoke-static Invoque une methode sta-tique Il existe egalementun opcode invoke-virtual

pour les methodes virtuellesinvoke-super pour la methodede la superclasse etc

p0 La methode appelee prend unseul argument La valeur de cetargument provient du premierargument passe a la methodeemptyResult

LcomutilsStringUtils-gtisEmpty Invoque la methode isEmpty de laclasse comutilsStringUtils L est un prefixe accole a tousles litteraux

(LjavalangString) Le premier (et seul) argument estde type javalangString

Z La methode retourne un booleen

A titre de reference voici les differents types natifs disponibles dans Jasmin

Z BooleenB OctetC CaractereS Entier court (16 bits)I Entier (32 bits)J Entier long (64 bits)F Flottant (32 bits)D Double (64 bits)

Lrsquoavantage majeur de lrsquooutil tiers apktool est la possibilite de modifier le bytecodeou les ressources drsquoune application puis de la recompiler dans une version fonctionnelleCeci permet drsquoutiliser une technique drsquoanalyse aussi ancienne que lrsquoinformatiqueappelee printf debugging

Dans le monde Android lrsquoutilisation de Systemout doit etre remplacee parandroidutilLog Cette classe definit plusieurs methodes ndash respectivement v d iw e et wtf ndash qui correspondent chacune a un niveau de verbosite ndash et dont lesarguments sont enregistres dans le journal systeme (sauf le niveau debug) Cejournal peut etre consulte a lrsquoaide de la commande adb logcat apparait en temps

N Ruff 143

reel dans lrsquooutil DDMS et peut egalement etre consulte par toute application quidispose de la permission READ LOGS

Si lrsquoon souhaite connaitre lrsquoargument passe a la methode emptyResult danslrsquoexemple precedent il suffit alors drsquoajouter un appel a nrsquoimporte quelle methode dela classe Log de la maniere suivante

method protected static emptyResult(LjavalangString )Z

locals 2

parameter result

prologue

line 306

const -string v1 PrintfDebuggingStyle

invoke -static v1 p0 LandroidutilLog-gtd(LjavalangStringLjavalang

String )I

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Une variable locale v1 a ete ajoutee contenant une chaine de caracteres fixe Lamethode d() est ensuite invoquee Cette modification est equivalente au code Javasuivant

Logd(PrintfDebuggingStyle ltp0 gt)

On peut constater experimentalement que de nombreuses applications de laMarketPlace font usage de lrsquoAPI Log ce qui permet de collecter des donnees defonctionnement parfois tres (trop) interessantes

Le journal systeme peut etre collecte a distance par un developpeur lors ducrash de son application si lrsquoutilisateur lrsquoautorise Cette technique a ete presenteepar Renaud Lifchitz lors de la conference 27c3 pour espionner les deplacements drsquounutilisateur 43

Decompiler le bytecode Comme avec tout bytecode de haut niveau (ex JavaNET) la semantique de lrsquoapplication est conservee

Il est donc possible de decompiler du bytecode Dalvik et de reconstruire le codeJava drsquoorigine (sans les commentaires ndash seule information perdue a la compilation) Lepremier outil public capable drsquoune telle operation fut undx 44 de Marc Schoenefeld Cetoutil est toutefois bogue et non maintenu par son auteur Le meilleur outil disponibleactuellement est lrsquooutil dex2jar 45 qui reconstruit du bytecode Java a partir du

43 httpeventscccdecongress2010Fahrplanevents4151enhtml

44 httpwwwillegalaccessorgundxhtml

45 httpcodegooglecompdex2jar

144 Securite du systeme Android

bytecode Dalvik Les outils classiques de decompilation Java 46 47 srsquoappliquentalors

Compte-tenu de la facilite deconcertante avec laquelle il est possible drsquoanalyserles applications Android (et donc de les craquer entre autres) Google a mis adisposition des developpeurs une bibliotheque tres complete de gestion des licences enligne Licensing Verification Library (LVL) 48 Toutes les versions de cette bibliothequeont malheureusement ete craquees elles aussi a lrsquoheure ou jrsquoecris ces lignes

Une autre contre-mesure mise en place par Google consiste a integrer un obfusca-teur de bytecode dans la chaine de compilation ProGuard 49 Cet outil relativementpuissant est configurable par le developpeur au travers du fichier proguardcfg toutefois le fichier de configuration par defaut (reproduit ci-apres) nrsquoopere que lerenommage des classes et methodes invisibles a lrsquoexterieur de lrsquoapplication ce qui estpeu efficace face a un attaquant determine

-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontpreverify

-verbose

-optimizations codesimplificationarithmetic field classmerging

-keep public class extends androidappActivity

-keep public class extends androidappApplication

-keep public class extends androidappService

-keep public class extends androidcontentBroadcastReceiver

-keep public class extends androidcontentContentProvider

-keep public class extends androidappbackupBackupAgentHelper

-keep public class extends androidpreferencePreference

-keep public class comandroidvendinglicensingILicensingService

-keepclasseswithmembernames class

native ltmethods gt

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet)

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet int)

-keepclassmembers enum

public static [] values ()

public static valueOf(javalangString)

46 httpmembersfortunecitycomneshkovdjhtml

47 httpjavadecompilerfreefr

48 httpdeveloperandroidcomguidepublishinglicensinghtml

49 httpdeveloperandroidcomguidedevelopingtoolsproguardhtml

N Ruff 145

-keep class implements androidosParcelable

public static final androidosParcelable$Creator

Au vu des resultats obtenus on peut considerer que lrsquoobfuscation de bytecode Javadans le monde Android est en retard sur lrsquoobfuscation de code x86 dans le monde PCLes techniques de complexification du flot de controle ou de construction dynamiquedes constantes ne sont pas encore repandues dans les applications commerciales pourAndroid Afin de combler ce manque des projets paralleles (comme AndroGuard 50)fleurissent - mais on peut supposer que la solution integree au SDK fourni par Googlerestera la solution majoritairement utilisee par les applications (pour des raisons desimplicite evidentes)

Desassembler du code natif Lors de lrsquoaudit drsquoune application Android il estpossible de rencontrer du code natif dans deux cas

1 Lrsquoapplication contient des bibliotheques natives compilees avec le NDK

2 Lrsquoapplication contient des applications natives ou srsquoavere etre elle-meme uneapplication native Ce cas est courant avec les applications malveillantes quiembarquent du code natif pour exploiter des failles noyau 51

Dans les deux cas Android ne presente aucune specificite par rapport a unLinuxARM classique Les fichiers natifs sont au format ELF La chaine de compilationnative est construite autour du compilateur GCC Tous les outils sont disponiblesdepuis longtemps pour analyser des tels binaires (ex IDA Pro Hex-Rays DecompilerARM etc)

Deboguer lrsquoapplication Une application Java compilee en mode debug peutetre deboguee a distance au travers du protocole standard Java Debug Wire Protocol(JDWP) defini dans le cadre de Java Platform Debugger Architecture (JPDA)

Les environnements de developpement Java classiques (comme Eclipse) per-mettent ainsi de deboguer une application a distance une fois celle-ci installee sur letelephone

Il est egalement possible drsquoutiliser le venerable JDB (fourni avec le SDK Java 52)bien que cet outil nrsquoait jamais depasse le statut de preuve de concept a mon avis

Lrsquooutil DDMS fourni avec le SDK Android repose egalement sur JPDA Cetoutil ne permet toutefois pas le debogage drsquoapplications mais seulement lrsquoanalyse deperformance

50 httpcodegooglecompandroguard

51 httpstealthopenwallnetxSports

52 httpdownloadoraclecomjavase142docstooldocssolarisjdbhtml

146 Securite du systeme Android

La liste des applications pouvant etre deboguees sur un systeme Android srsquoobtientavec la commande adb jdwp

Le vrai probleme se pose pour les applications qui nrsquoont pas ete compilees enmode debug Ceci implique que le manifeste de lrsquoapplication ne contient pasdrsquoentree ltapplication androiddebuggable=truegt De plus la plupart des outilsde debogage Java necessitent que le bytecode contienne des indications sur les numerosde lignes dans le code source drsquoorigine (il srsquoagit drsquoune limitation arbitraire qui nesrsquoapplique pas a lrsquooutil JavaSnoop 53 par exemple)

Fort heureusement il est possible de desassembler ces applications puis de lesreassembler en mode debug avec lrsquooutil apktool 54 Le processus est complexe etle resultat peu convivial mais il a le merite drsquoexister

Pour reinstaller lrsquoapplication modifiee sur un equipement reel il est necessairede la signer a nouveau La procedure est simple et parfaitement documentee parGoogle

Il faut drsquoabord generer une cle personnelle autosignee a duree de vie extremementlongue

$ keytool -genkey -v -keystore mykeykeystore -alias nom_alias -keyalg RSA -

keysize 2048 -validity 10000

Il faut ensuite signer le nouvel APK avec les outils du SDK Java

$ jarsigner -verbose -keystore mykeykeystore nom_applicationapk nom_alias

Enfin il est recommande drsquoaligner le code sur un multiple de 4 octets pour desraisons de performance

$ zipalign -v 4 nom_applicationapk nom_application_finalapk

Instrumentation Il est possible drsquoinstrumenter une application Java a lrsquoaide declasses specifiques a Android (androidappInstrumentation 55) Cette methodefournit des resultats detailles et personnalisables sur le fonctionnement interne drsquouneapplication elle necessite toutefois une decompilation et une modification prealablede lrsquoapplication a auditer

A lrsquoheure ou jrsquoecris ces lignes il nrsquoexiste pas (a ma connaissance) drsquooutil permettantde generaliser et drsquoautomatiser le processus a tout fichier APK Cette voie de recherchepourrait toutefois donner des resultats interessants

53 httpwwwaspectsecuritycomtoolsjavasnoop

54 httpcodegooglecompandroid-apktoolwikiSmaliDebugging

55 httpdeveloperandroidcomreferenceandroidappInstrumentationhtml

N Ruff 147

Outils specifiques Les outils disponibles actuellement dans le monde Android sontrudimentaires quoi que suffisants

Toutefois on peut raisonnablement estimer que la quantite et la qualite des outilsdisponibles va croitre de concert avec la popularite du systeme Android

A lrsquoheure ou jrsquoecris ces lignes la version 61 du logiciel IDA Pro 56 vient de sortirCette version ajoute le support du format DEX et du bytecode Dalvik ainsi que ledebogage a distance des applications Android natives

On peut supposer que drsquoautres outils couramment utilises par les auditeurs ensecurite vont etre mis a jour pour srsquoadapter au monde Android

6 Conclusion

Le systeme Android nrsquoa malheureusement pas profite de lrsquoopportunite unique quilui etait donnee repartir de la feuille blanche et creer un systeme drsquoexploitation sur par conception

A cause drsquoun heritage logiciel peu fiable ainsi que des contraintes materielles etcommerciales issues du monde de la telephonie mobile le systeme resultant est uncompromis qui laisse une large place a la creativite des attaquants

Celle-ci est drsquoautant plus exacerbee que la telephonie mobile est un phenomene demasse (il y a plus de telephones mobiles que drsquoordinateurs dans le monde) et que letelephone mobile est par conception un systeme de paiement (ce que nrsquoest pas un PCtraditionnel)

A ce tableau vient srsquoajouter 30 ans drsquoexperience dans le domaine des attaqueslogicielles appliquees a un ecosysteme applicatif qui nrsquoexistait pas il y a 5 ans

Toutes les conditions sont donc reunies pour que des attaques de grande ampleurmotivees par lrsquoargent se produisent contre les materiels grand public equipes dusysteme Android (telephones tablettes televisions )

La bonne nouvelle pour lrsquoexpert en securite crsquoest qursquoil est encore temps de srsquoymettre Android est suffisamment jeune et accessible aux nouveaux entrants ce quinrsquoest plus le cas de la plateforme PC ou les techniques drsquoattaque (ex exploitationdrsquoun heap overflow) et de defense (ex obfuscation logicielle) ont atteint des sommetsde raffinement desormais accessibles aux seuls experts les plus pointus du domaine

7 Sites et outils

71 Sites officiels

ndash Android portail officiel httpwwwandroidcom

56 httpwwwhex-rayscomidapro

148 Securite du systeme Android

ndash Android MarketPlace officielle httpsmarketandroidcomndash Android reference des developpeurs httpdeveloperandroidcom

72 Sites non officiels

ndash Reference de la machine virtuelle Dalvik httpdalvikvmcom

73 Outils tiers

ndash Google Android Debugging Utilities httpsitesgooglecomsiteortegaalfredoandroid

ndash Undx httpwwwillegalaccessorgundxhtmlndash SmaliBaksmali httpcodegooglecompsmalindash Dedexer httpdedexersourceforgenetndash Dex2Jar httpcodegooglecompdex2jarndash TaintDroid httpwwwappanalysisorg

ndash AndroGuard httpandroguardblogspotcom

References

1 Benjamin Morin Modele de securite drsquoAndroid MISC 51 2010

2 K Chen Reversing and exploiting an apple firmware update httpwwwblackhatcom

presentationsbh-usa-09CHENBHUSA09-Chen-RevAppleFirm-PAPERpdf BlackHat 2009

3 Alexandre Gazet Sticky fingers amp KBC Custom Shop httpwwwssticorg2011presentation

sticky_fingers_and_kbc_custom_shop SSTIC 2011

4 Loıc Duflot and Yves-Alexis Perez Quelques elements en matiere de securite des cartes reseau http

wwwssticorg2010presentationPeut_on_faire_confiance_aux_cartes_reseau SSTIC 2010

5 Alexander Tereshkin and Rafal Wojtczuk Introducing Ring -3 Rootkits httpwwwblackhat

compresentationsbh-usa-09TERESHKINBHUSA09-Tereshkin-Ring3Rootkit-SLIDESpdf Black-Hat USA 2009

6 Loıc Duflot Yves-Alexis Perez and Benjamin Morin Run-time firmware integrity verification what ifyou canrsquot trust your network card CanSecWest 2011

7 Ralf-Philipp Weinmann All Your Baseband Are Belong To Us httpeventscccdecongress

2010Fahrplanevents4090enhtml CCC 2010

8 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Formal Model to Analyzethe Permission Authorization and Enforcement in the Android Framework SecureComrsquo10

9 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Small but Non-negligibleFlaw in the Android Permission Scheme Wook Shin Sanghoon Kwak Shinsaku Kiyomoto KazuhideFukushima et Toshiaki Tanaka IEEE POLICY 2010

10 Marc Schonefled Reconstructing Dalvik Applications httpcansecwestcomcsw09

csw09-schoenefeldpdf CanSecWest 2009

N Ruff 149

11 Sergio Alvarez The Smart-Phones Nightmare (iPhone-oriented parts about Android) http

cansecwestcomcsw09csw09-alvarezpdf CanSecWest 2009

12 Nicolas Economou Alfredo Ortega Smartphone (in)security httpcansecwestcomcsw09

csw09-ortega-economoupdf CanSecWest 2009

13 Jesse Burns Exploratory Android Surgery httpwwwblackhatcompresentationsbh-usa-09

BURNSBHUSA09-Burns-AndroidSurgery-SLIDESpdf BlackHat USA 2009

14 Kevin Mahaffey John Hering App Attack httpsmediablackhatcombh-us-10presentations

Mahaffey_HeringBlackhat-USA-2010-Mahaffey-Hering-Lookout-App-Genome-slidespdf Black-Hat USA 2010

15 Nils The Risk you carry in your Pocket httpsmediablackhatcombh-ad-10Nils

Black-Hat-AD-2010-android-sandcastle-slidespdf BlackHat Abu Dhabi 2010

16 Raphael Rigo Android Reverse Engineering and Forensics httpsdeepsecnetdocsspeaker

htmlPSLOT45 DeepSec 2010

17 Itzhak Avraham Popping Shell on A(ndroid)RM Devices httpsmediablackhatcombh-dc-11

AvrahamBlackHat_DC_2011_Avraham-Popping_Android_Devices-Slidespdf BlackHat DC 2011

18 Jon Oberheide httpjonoberheideorgblog20100625remote-kill-and-install-on-google-android

19 Jon Oberheide httpjonoberheideorgblog20100628a-peek-inside-the-gtalkservice-connection

20 httpwwwandroidpolicecom20110301the-mother-of-all-android-

malware-has-arrived-stolen-apps-released-to-the-market-that-root-

your-phone-steal-your-data-and-open-backdoor

  • Seacutecuriteacute du systegraveme Android
  • N Ruff

142 Securite du systeme Android

invoke-static Invoque une methode sta-tique Il existe egalementun opcode invoke-virtual

pour les methodes virtuellesinvoke-super pour la methodede la superclasse etc

p0 La methode appelee prend unseul argument La valeur de cetargument provient du premierargument passe a la methodeemptyResult

LcomutilsStringUtils-gtisEmpty Invoque la methode isEmpty de laclasse comutilsStringUtils L est un prefixe accole a tousles litteraux

(LjavalangString) Le premier (et seul) argument estde type javalangString

Z La methode retourne un booleen

A titre de reference voici les differents types natifs disponibles dans Jasmin

Z BooleenB OctetC CaractereS Entier court (16 bits)I Entier (32 bits)J Entier long (64 bits)F Flottant (32 bits)D Double (64 bits)

Lrsquoavantage majeur de lrsquooutil tiers apktool est la possibilite de modifier le bytecodeou les ressources drsquoune application puis de la recompiler dans une version fonctionnelleCeci permet drsquoutiliser une technique drsquoanalyse aussi ancienne que lrsquoinformatiqueappelee printf debugging

Dans le monde Android lrsquoutilisation de Systemout doit etre remplacee parandroidutilLog Cette classe definit plusieurs methodes ndash respectivement v d iw e et wtf ndash qui correspondent chacune a un niveau de verbosite ndash et dont lesarguments sont enregistres dans le journal systeme (sauf le niveau debug) Cejournal peut etre consulte a lrsquoaide de la commande adb logcat apparait en temps

N Ruff 143

reel dans lrsquooutil DDMS et peut egalement etre consulte par toute application quidispose de la permission READ LOGS

Si lrsquoon souhaite connaitre lrsquoargument passe a la methode emptyResult danslrsquoexemple precedent il suffit alors drsquoajouter un appel a nrsquoimporte quelle methode dela classe Log de la maniere suivante

method protected static emptyResult(LjavalangString )Z

locals 2

parameter result

prologue

line 306

const -string v1 PrintfDebuggingStyle

invoke -static v1 p0 LandroidutilLog-gtd(LjavalangStringLjavalang

String )I

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Une variable locale v1 a ete ajoutee contenant une chaine de caracteres fixe Lamethode d() est ensuite invoquee Cette modification est equivalente au code Javasuivant

Logd(PrintfDebuggingStyle ltp0 gt)

On peut constater experimentalement que de nombreuses applications de laMarketPlace font usage de lrsquoAPI Log ce qui permet de collecter des donnees defonctionnement parfois tres (trop) interessantes

Le journal systeme peut etre collecte a distance par un developpeur lors ducrash de son application si lrsquoutilisateur lrsquoautorise Cette technique a ete presenteepar Renaud Lifchitz lors de la conference 27c3 pour espionner les deplacements drsquounutilisateur 43

Decompiler le bytecode Comme avec tout bytecode de haut niveau (ex JavaNET) la semantique de lrsquoapplication est conservee

Il est donc possible de decompiler du bytecode Dalvik et de reconstruire le codeJava drsquoorigine (sans les commentaires ndash seule information perdue a la compilation) Lepremier outil public capable drsquoune telle operation fut undx 44 de Marc Schoenefeld Cetoutil est toutefois bogue et non maintenu par son auteur Le meilleur outil disponibleactuellement est lrsquooutil dex2jar 45 qui reconstruit du bytecode Java a partir du

43 httpeventscccdecongress2010Fahrplanevents4151enhtml

44 httpwwwillegalaccessorgundxhtml

45 httpcodegooglecompdex2jar

144 Securite du systeme Android

bytecode Dalvik Les outils classiques de decompilation Java 46 47 srsquoappliquentalors

Compte-tenu de la facilite deconcertante avec laquelle il est possible drsquoanalyserles applications Android (et donc de les craquer entre autres) Google a mis adisposition des developpeurs une bibliotheque tres complete de gestion des licences enligne Licensing Verification Library (LVL) 48 Toutes les versions de cette bibliothequeont malheureusement ete craquees elles aussi a lrsquoheure ou jrsquoecris ces lignes

Une autre contre-mesure mise en place par Google consiste a integrer un obfusca-teur de bytecode dans la chaine de compilation ProGuard 49 Cet outil relativementpuissant est configurable par le developpeur au travers du fichier proguardcfg toutefois le fichier de configuration par defaut (reproduit ci-apres) nrsquoopere que lerenommage des classes et methodes invisibles a lrsquoexterieur de lrsquoapplication ce qui estpeu efficace face a un attaquant determine

-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontpreverify

-verbose

-optimizations codesimplificationarithmetic field classmerging

-keep public class extends androidappActivity

-keep public class extends androidappApplication

-keep public class extends androidappService

-keep public class extends androidcontentBroadcastReceiver

-keep public class extends androidcontentContentProvider

-keep public class extends androidappbackupBackupAgentHelper

-keep public class extends androidpreferencePreference

-keep public class comandroidvendinglicensingILicensingService

-keepclasseswithmembernames class

native ltmethods gt

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet)

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet int)

-keepclassmembers enum

public static [] values ()

public static valueOf(javalangString)

46 httpmembersfortunecitycomneshkovdjhtml

47 httpjavadecompilerfreefr

48 httpdeveloperandroidcomguidepublishinglicensinghtml

49 httpdeveloperandroidcomguidedevelopingtoolsproguardhtml

N Ruff 145

-keep class implements androidosParcelable

public static final androidosParcelable$Creator

Au vu des resultats obtenus on peut considerer que lrsquoobfuscation de bytecode Javadans le monde Android est en retard sur lrsquoobfuscation de code x86 dans le monde PCLes techniques de complexification du flot de controle ou de construction dynamiquedes constantes ne sont pas encore repandues dans les applications commerciales pourAndroid Afin de combler ce manque des projets paralleles (comme AndroGuard 50)fleurissent - mais on peut supposer que la solution integree au SDK fourni par Googlerestera la solution majoritairement utilisee par les applications (pour des raisons desimplicite evidentes)

Desassembler du code natif Lors de lrsquoaudit drsquoune application Android il estpossible de rencontrer du code natif dans deux cas

1 Lrsquoapplication contient des bibliotheques natives compilees avec le NDK

2 Lrsquoapplication contient des applications natives ou srsquoavere etre elle-meme uneapplication native Ce cas est courant avec les applications malveillantes quiembarquent du code natif pour exploiter des failles noyau 51

Dans les deux cas Android ne presente aucune specificite par rapport a unLinuxARM classique Les fichiers natifs sont au format ELF La chaine de compilationnative est construite autour du compilateur GCC Tous les outils sont disponiblesdepuis longtemps pour analyser des tels binaires (ex IDA Pro Hex-Rays DecompilerARM etc)

Deboguer lrsquoapplication Une application Java compilee en mode debug peutetre deboguee a distance au travers du protocole standard Java Debug Wire Protocol(JDWP) defini dans le cadre de Java Platform Debugger Architecture (JPDA)

Les environnements de developpement Java classiques (comme Eclipse) per-mettent ainsi de deboguer une application a distance une fois celle-ci installee sur letelephone

Il est egalement possible drsquoutiliser le venerable JDB (fourni avec le SDK Java 52)bien que cet outil nrsquoait jamais depasse le statut de preuve de concept a mon avis

Lrsquooutil DDMS fourni avec le SDK Android repose egalement sur JPDA Cetoutil ne permet toutefois pas le debogage drsquoapplications mais seulement lrsquoanalyse deperformance

50 httpcodegooglecompandroguard

51 httpstealthopenwallnetxSports

52 httpdownloadoraclecomjavase142docstooldocssolarisjdbhtml

146 Securite du systeme Android

La liste des applications pouvant etre deboguees sur un systeme Android srsquoobtientavec la commande adb jdwp

Le vrai probleme se pose pour les applications qui nrsquoont pas ete compilees enmode debug Ceci implique que le manifeste de lrsquoapplication ne contient pasdrsquoentree ltapplication androiddebuggable=truegt De plus la plupart des outilsde debogage Java necessitent que le bytecode contienne des indications sur les numerosde lignes dans le code source drsquoorigine (il srsquoagit drsquoune limitation arbitraire qui nesrsquoapplique pas a lrsquooutil JavaSnoop 53 par exemple)

Fort heureusement il est possible de desassembler ces applications puis de lesreassembler en mode debug avec lrsquooutil apktool 54 Le processus est complexe etle resultat peu convivial mais il a le merite drsquoexister

Pour reinstaller lrsquoapplication modifiee sur un equipement reel il est necessairede la signer a nouveau La procedure est simple et parfaitement documentee parGoogle

Il faut drsquoabord generer une cle personnelle autosignee a duree de vie extremementlongue

$ keytool -genkey -v -keystore mykeykeystore -alias nom_alias -keyalg RSA -

keysize 2048 -validity 10000

Il faut ensuite signer le nouvel APK avec les outils du SDK Java

$ jarsigner -verbose -keystore mykeykeystore nom_applicationapk nom_alias

Enfin il est recommande drsquoaligner le code sur un multiple de 4 octets pour desraisons de performance

$ zipalign -v 4 nom_applicationapk nom_application_finalapk

Instrumentation Il est possible drsquoinstrumenter une application Java a lrsquoaide declasses specifiques a Android (androidappInstrumentation 55) Cette methodefournit des resultats detailles et personnalisables sur le fonctionnement interne drsquouneapplication elle necessite toutefois une decompilation et une modification prealablede lrsquoapplication a auditer

A lrsquoheure ou jrsquoecris ces lignes il nrsquoexiste pas (a ma connaissance) drsquooutil permettantde generaliser et drsquoautomatiser le processus a tout fichier APK Cette voie de recherchepourrait toutefois donner des resultats interessants

53 httpwwwaspectsecuritycomtoolsjavasnoop

54 httpcodegooglecompandroid-apktoolwikiSmaliDebugging

55 httpdeveloperandroidcomreferenceandroidappInstrumentationhtml

N Ruff 147

Outils specifiques Les outils disponibles actuellement dans le monde Android sontrudimentaires quoi que suffisants

Toutefois on peut raisonnablement estimer que la quantite et la qualite des outilsdisponibles va croitre de concert avec la popularite du systeme Android

A lrsquoheure ou jrsquoecris ces lignes la version 61 du logiciel IDA Pro 56 vient de sortirCette version ajoute le support du format DEX et du bytecode Dalvik ainsi que ledebogage a distance des applications Android natives

On peut supposer que drsquoautres outils couramment utilises par les auditeurs ensecurite vont etre mis a jour pour srsquoadapter au monde Android

6 Conclusion

Le systeme Android nrsquoa malheureusement pas profite de lrsquoopportunite unique quilui etait donnee repartir de la feuille blanche et creer un systeme drsquoexploitation sur par conception

A cause drsquoun heritage logiciel peu fiable ainsi que des contraintes materielles etcommerciales issues du monde de la telephonie mobile le systeme resultant est uncompromis qui laisse une large place a la creativite des attaquants

Celle-ci est drsquoautant plus exacerbee que la telephonie mobile est un phenomene demasse (il y a plus de telephones mobiles que drsquoordinateurs dans le monde) et que letelephone mobile est par conception un systeme de paiement (ce que nrsquoest pas un PCtraditionnel)

A ce tableau vient srsquoajouter 30 ans drsquoexperience dans le domaine des attaqueslogicielles appliquees a un ecosysteme applicatif qui nrsquoexistait pas il y a 5 ans

Toutes les conditions sont donc reunies pour que des attaques de grande ampleurmotivees par lrsquoargent se produisent contre les materiels grand public equipes dusysteme Android (telephones tablettes televisions )

La bonne nouvelle pour lrsquoexpert en securite crsquoest qursquoil est encore temps de srsquoymettre Android est suffisamment jeune et accessible aux nouveaux entrants ce quinrsquoest plus le cas de la plateforme PC ou les techniques drsquoattaque (ex exploitationdrsquoun heap overflow) et de defense (ex obfuscation logicielle) ont atteint des sommetsde raffinement desormais accessibles aux seuls experts les plus pointus du domaine

7 Sites et outils

71 Sites officiels

ndash Android portail officiel httpwwwandroidcom

56 httpwwwhex-rayscomidapro

148 Securite du systeme Android

ndash Android MarketPlace officielle httpsmarketandroidcomndash Android reference des developpeurs httpdeveloperandroidcom

72 Sites non officiels

ndash Reference de la machine virtuelle Dalvik httpdalvikvmcom

73 Outils tiers

ndash Google Android Debugging Utilities httpsitesgooglecomsiteortegaalfredoandroid

ndash Undx httpwwwillegalaccessorgundxhtmlndash SmaliBaksmali httpcodegooglecompsmalindash Dedexer httpdedexersourceforgenetndash Dex2Jar httpcodegooglecompdex2jarndash TaintDroid httpwwwappanalysisorg

ndash AndroGuard httpandroguardblogspotcom

References

1 Benjamin Morin Modele de securite drsquoAndroid MISC 51 2010

2 K Chen Reversing and exploiting an apple firmware update httpwwwblackhatcom

presentationsbh-usa-09CHENBHUSA09-Chen-RevAppleFirm-PAPERpdf BlackHat 2009

3 Alexandre Gazet Sticky fingers amp KBC Custom Shop httpwwwssticorg2011presentation

sticky_fingers_and_kbc_custom_shop SSTIC 2011

4 Loıc Duflot and Yves-Alexis Perez Quelques elements en matiere de securite des cartes reseau http

wwwssticorg2010presentationPeut_on_faire_confiance_aux_cartes_reseau SSTIC 2010

5 Alexander Tereshkin and Rafal Wojtczuk Introducing Ring -3 Rootkits httpwwwblackhat

compresentationsbh-usa-09TERESHKINBHUSA09-Tereshkin-Ring3Rootkit-SLIDESpdf Black-Hat USA 2009

6 Loıc Duflot Yves-Alexis Perez and Benjamin Morin Run-time firmware integrity verification what ifyou canrsquot trust your network card CanSecWest 2011

7 Ralf-Philipp Weinmann All Your Baseband Are Belong To Us httpeventscccdecongress

2010Fahrplanevents4090enhtml CCC 2010

8 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Formal Model to Analyzethe Permission Authorization and Enforcement in the Android Framework SecureComrsquo10

9 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Small but Non-negligibleFlaw in the Android Permission Scheme Wook Shin Sanghoon Kwak Shinsaku Kiyomoto KazuhideFukushima et Toshiaki Tanaka IEEE POLICY 2010

10 Marc Schonefled Reconstructing Dalvik Applications httpcansecwestcomcsw09

csw09-schoenefeldpdf CanSecWest 2009

N Ruff 149

11 Sergio Alvarez The Smart-Phones Nightmare (iPhone-oriented parts about Android) http

cansecwestcomcsw09csw09-alvarezpdf CanSecWest 2009

12 Nicolas Economou Alfredo Ortega Smartphone (in)security httpcansecwestcomcsw09

csw09-ortega-economoupdf CanSecWest 2009

13 Jesse Burns Exploratory Android Surgery httpwwwblackhatcompresentationsbh-usa-09

BURNSBHUSA09-Burns-AndroidSurgery-SLIDESpdf BlackHat USA 2009

14 Kevin Mahaffey John Hering App Attack httpsmediablackhatcombh-us-10presentations

Mahaffey_HeringBlackhat-USA-2010-Mahaffey-Hering-Lookout-App-Genome-slidespdf Black-Hat USA 2010

15 Nils The Risk you carry in your Pocket httpsmediablackhatcombh-ad-10Nils

Black-Hat-AD-2010-android-sandcastle-slidespdf BlackHat Abu Dhabi 2010

16 Raphael Rigo Android Reverse Engineering and Forensics httpsdeepsecnetdocsspeaker

htmlPSLOT45 DeepSec 2010

17 Itzhak Avraham Popping Shell on A(ndroid)RM Devices httpsmediablackhatcombh-dc-11

AvrahamBlackHat_DC_2011_Avraham-Popping_Android_Devices-Slidespdf BlackHat DC 2011

18 Jon Oberheide httpjonoberheideorgblog20100625remote-kill-and-install-on-google-android

19 Jon Oberheide httpjonoberheideorgblog20100628a-peek-inside-the-gtalkservice-connection

20 httpwwwandroidpolicecom20110301the-mother-of-all-android-

malware-has-arrived-stolen-apps-released-to-the-market-that-root-

your-phone-steal-your-data-and-open-backdoor

  • Seacutecuriteacute du systegraveme Android
  • N Ruff

N Ruff 143

reel dans lrsquooutil DDMS et peut egalement etre consulte par toute application quidispose de la permission READ LOGS

Si lrsquoon souhaite connaitre lrsquoargument passe a la methode emptyResult danslrsquoexemple precedent il suffit alors drsquoajouter un appel a nrsquoimporte quelle methode dela classe Log de la maniere suivante

method protected static emptyResult(LjavalangString )Z

locals 2

parameter result

prologue

line 306

const -string v1 PrintfDebuggingStyle

invoke -static v1 p0 LandroidutilLog-gtd(LjavalangStringLjavalang

String )I

invoke -static p0 LcomutilsStringUtils-gtisEmpty(LjavalangString )Z

move -result v0

return v0

end method

Une variable locale v1 a ete ajoutee contenant une chaine de caracteres fixe Lamethode d() est ensuite invoquee Cette modification est equivalente au code Javasuivant

Logd(PrintfDebuggingStyle ltp0 gt)

On peut constater experimentalement que de nombreuses applications de laMarketPlace font usage de lrsquoAPI Log ce qui permet de collecter des donnees defonctionnement parfois tres (trop) interessantes

Le journal systeme peut etre collecte a distance par un developpeur lors ducrash de son application si lrsquoutilisateur lrsquoautorise Cette technique a ete presenteepar Renaud Lifchitz lors de la conference 27c3 pour espionner les deplacements drsquounutilisateur 43

Decompiler le bytecode Comme avec tout bytecode de haut niveau (ex JavaNET) la semantique de lrsquoapplication est conservee

Il est donc possible de decompiler du bytecode Dalvik et de reconstruire le codeJava drsquoorigine (sans les commentaires ndash seule information perdue a la compilation) Lepremier outil public capable drsquoune telle operation fut undx 44 de Marc Schoenefeld Cetoutil est toutefois bogue et non maintenu par son auteur Le meilleur outil disponibleactuellement est lrsquooutil dex2jar 45 qui reconstruit du bytecode Java a partir du

43 httpeventscccdecongress2010Fahrplanevents4151enhtml

44 httpwwwillegalaccessorgundxhtml

45 httpcodegooglecompdex2jar

144 Securite du systeme Android

bytecode Dalvik Les outils classiques de decompilation Java 46 47 srsquoappliquentalors

Compte-tenu de la facilite deconcertante avec laquelle il est possible drsquoanalyserles applications Android (et donc de les craquer entre autres) Google a mis adisposition des developpeurs une bibliotheque tres complete de gestion des licences enligne Licensing Verification Library (LVL) 48 Toutes les versions de cette bibliothequeont malheureusement ete craquees elles aussi a lrsquoheure ou jrsquoecris ces lignes

Une autre contre-mesure mise en place par Google consiste a integrer un obfusca-teur de bytecode dans la chaine de compilation ProGuard 49 Cet outil relativementpuissant est configurable par le developpeur au travers du fichier proguardcfg toutefois le fichier de configuration par defaut (reproduit ci-apres) nrsquoopere que lerenommage des classes et methodes invisibles a lrsquoexterieur de lrsquoapplication ce qui estpeu efficace face a un attaquant determine

-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontpreverify

-verbose

-optimizations codesimplificationarithmetic field classmerging

-keep public class extends androidappActivity

-keep public class extends androidappApplication

-keep public class extends androidappService

-keep public class extends androidcontentBroadcastReceiver

-keep public class extends androidcontentContentProvider

-keep public class extends androidappbackupBackupAgentHelper

-keep public class extends androidpreferencePreference

-keep public class comandroidvendinglicensingILicensingService

-keepclasseswithmembernames class

native ltmethods gt

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet)

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet int)

-keepclassmembers enum

public static [] values ()

public static valueOf(javalangString)

46 httpmembersfortunecitycomneshkovdjhtml

47 httpjavadecompilerfreefr

48 httpdeveloperandroidcomguidepublishinglicensinghtml

49 httpdeveloperandroidcomguidedevelopingtoolsproguardhtml

N Ruff 145

-keep class implements androidosParcelable

public static final androidosParcelable$Creator

Au vu des resultats obtenus on peut considerer que lrsquoobfuscation de bytecode Javadans le monde Android est en retard sur lrsquoobfuscation de code x86 dans le monde PCLes techniques de complexification du flot de controle ou de construction dynamiquedes constantes ne sont pas encore repandues dans les applications commerciales pourAndroid Afin de combler ce manque des projets paralleles (comme AndroGuard 50)fleurissent - mais on peut supposer que la solution integree au SDK fourni par Googlerestera la solution majoritairement utilisee par les applications (pour des raisons desimplicite evidentes)

Desassembler du code natif Lors de lrsquoaudit drsquoune application Android il estpossible de rencontrer du code natif dans deux cas

1 Lrsquoapplication contient des bibliotheques natives compilees avec le NDK

2 Lrsquoapplication contient des applications natives ou srsquoavere etre elle-meme uneapplication native Ce cas est courant avec les applications malveillantes quiembarquent du code natif pour exploiter des failles noyau 51

Dans les deux cas Android ne presente aucune specificite par rapport a unLinuxARM classique Les fichiers natifs sont au format ELF La chaine de compilationnative est construite autour du compilateur GCC Tous les outils sont disponiblesdepuis longtemps pour analyser des tels binaires (ex IDA Pro Hex-Rays DecompilerARM etc)

Deboguer lrsquoapplication Une application Java compilee en mode debug peutetre deboguee a distance au travers du protocole standard Java Debug Wire Protocol(JDWP) defini dans le cadre de Java Platform Debugger Architecture (JPDA)

Les environnements de developpement Java classiques (comme Eclipse) per-mettent ainsi de deboguer une application a distance une fois celle-ci installee sur letelephone

Il est egalement possible drsquoutiliser le venerable JDB (fourni avec le SDK Java 52)bien que cet outil nrsquoait jamais depasse le statut de preuve de concept a mon avis

Lrsquooutil DDMS fourni avec le SDK Android repose egalement sur JPDA Cetoutil ne permet toutefois pas le debogage drsquoapplications mais seulement lrsquoanalyse deperformance

50 httpcodegooglecompandroguard

51 httpstealthopenwallnetxSports

52 httpdownloadoraclecomjavase142docstooldocssolarisjdbhtml

146 Securite du systeme Android

La liste des applications pouvant etre deboguees sur un systeme Android srsquoobtientavec la commande adb jdwp

Le vrai probleme se pose pour les applications qui nrsquoont pas ete compilees enmode debug Ceci implique que le manifeste de lrsquoapplication ne contient pasdrsquoentree ltapplication androiddebuggable=truegt De plus la plupart des outilsde debogage Java necessitent que le bytecode contienne des indications sur les numerosde lignes dans le code source drsquoorigine (il srsquoagit drsquoune limitation arbitraire qui nesrsquoapplique pas a lrsquooutil JavaSnoop 53 par exemple)

Fort heureusement il est possible de desassembler ces applications puis de lesreassembler en mode debug avec lrsquooutil apktool 54 Le processus est complexe etle resultat peu convivial mais il a le merite drsquoexister

Pour reinstaller lrsquoapplication modifiee sur un equipement reel il est necessairede la signer a nouveau La procedure est simple et parfaitement documentee parGoogle

Il faut drsquoabord generer une cle personnelle autosignee a duree de vie extremementlongue

$ keytool -genkey -v -keystore mykeykeystore -alias nom_alias -keyalg RSA -

keysize 2048 -validity 10000

Il faut ensuite signer le nouvel APK avec les outils du SDK Java

$ jarsigner -verbose -keystore mykeykeystore nom_applicationapk nom_alias

Enfin il est recommande drsquoaligner le code sur un multiple de 4 octets pour desraisons de performance

$ zipalign -v 4 nom_applicationapk nom_application_finalapk

Instrumentation Il est possible drsquoinstrumenter une application Java a lrsquoaide declasses specifiques a Android (androidappInstrumentation 55) Cette methodefournit des resultats detailles et personnalisables sur le fonctionnement interne drsquouneapplication elle necessite toutefois une decompilation et une modification prealablede lrsquoapplication a auditer

A lrsquoheure ou jrsquoecris ces lignes il nrsquoexiste pas (a ma connaissance) drsquooutil permettantde generaliser et drsquoautomatiser le processus a tout fichier APK Cette voie de recherchepourrait toutefois donner des resultats interessants

53 httpwwwaspectsecuritycomtoolsjavasnoop

54 httpcodegooglecompandroid-apktoolwikiSmaliDebugging

55 httpdeveloperandroidcomreferenceandroidappInstrumentationhtml

N Ruff 147

Outils specifiques Les outils disponibles actuellement dans le monde Android sontrudimentaires quoi que suffisants

Toutefois on peut raisonnablement estimer que la quantite et la qualite des outilsdisponibles va croitre de concert avec la popularite du systeme Android

A lrsquoheure ou jrsquoecris ces lignes la version 61 du logiciel IDA Pro 56 vient de sortirCette version ajoute le support du format DEX et du bytecode Dalvik ainsi que ledebogage a distance des applications Android natives

On peut supposer que drsquoautres outils couramment utilises par les auditeurs ensecurite vont etre mis a jour pour srsquoadapter au monde Android

6 Conclusion

Le systeme Android nrsquoa malheureusement pas profite de lrsquoopportunite unique quilui etait donnee repartir de la feuille blanche et creer un systeme drsquoexploitation sur par conception

A cause drsquoun heritage logiciel peu fiable ainsi que des contraintes materielles etcommerciales issues du monde de la telephonie mobile le systeme resultant est uncompromis qui laisse une large place a la creativite des attaquants

Celle-ci est drsquoautant plus exacerbee que la telephonie mobile est un phenomene demasse (il y a plus de telephones mobiles que drsquoordinateurs dans le monde) et que letelephone mobile est par conception un systeme de paiement (ce que nrsquoest pas un PCtraditionnel)

A ce tableau vient srsquoajouter 30 ans drsquoexperience dans le domaine des attaqueslogicielles appliquees a un ecosysteme applicatif qui nrsquoexistait pas il y a 5 ans

Toutes les conditions sont donc reunies pour que des attaques de grande ampleurmotivees par lrsquoargent se produisent contre les materiels grand public equipes dusysteme Android (telephones tablettes televisions )

La bonne nouvelle pour lrsquoexpert en securite crsquoest qursquoil est encore temps de srsquoymettre Android est suffisamment jeune et accessible aux nouveaux entrants ce quinrsquoest plus le cas de la plateforme PC ou les techniques drsquoattaque (ex exploitationdrsquoun heap overflow) et de defense (ex obfuscation logicielle) ont atteint des sommetsde raffinement desormais accessibles aux seuls experts les plus pointus du domaine

7 Sites et outils

71 Sites officiels

ndash Android portail officiel httpwwwandroidcom

56 httpwwwhex-rayscomidapro

148 Securite du systeme Android

ndash Android MarketPlace officielle httpsmarketandroidcomndash Android reference des developpeurs httpdeveloperandroidcom

72 Sites non officiels

ndash Reference de la machine virtuelle Dalvik httpdalvikvmcom

73 Outils tiers

ndash Google Android Debugging Utilities httpsitesgooglecomsiteortegaalfredoandroid

ndash Undx httpwwwillegalaccessorgundxhtmlndash SmaliBaksmali httpcodegooglecompsmalindash Dedexer httpdedexersourceforgenetndash Dex2Jar httpcodegooglecompdex2jarndash TaintDroid httpwwwappanalysisorg

ndash AndroGuard httpandroguardblogspotcom

References

1 Benjamin Morin Modele de securite drsquoAndroid MISC 51 2010

2 K Chen Reversing and exploiting an apple firmware update httpwwwblackhatcom

presentationsbh-usa-09CHENBHUSA09-Chen-RevAppleFirm-PAPERpdf BlackHat 2009

3 Alexandre Gazet Sticky fingers amp KBC Custom Shop httpwwwssticorg2011presentation

sticky_fingers_and_kbc_custom_shop SSTIC 2011

4 Loıc Duflot and Yves-Alexis Perez Quelques elements en matiere de securite des cartes reseau http

wwwssticorg2010presentationPeut_on_faire_confiance_aux_cartes_reseau SSTIC 2010

5 Alexander Tereshkin and Rafal Wojtczuk Introducing Ring -3 Rootkits httpwwwblackhat

compresentationsbh-usa-09TERESHKINBHUSA09-Tereshkin-Ring3Rootkit-SLIDESpdf Black-Hat USA 2009

6 Loıc Duflot Yves-Alexis Perez and Benjamin Morin Run-time firmware integrity verification what ifyou canrsquot trust your network card CanSecWest 2011

7 Ralf-Philipp Weinmann All Your Baseband Are Belong To Us httpeventscccdecongress

2010Fahrplanevents4090enhtml CCC 2010

8 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Formal Model to Analyzethe Permission Authorization and Enforcement in the Android Framework SecureComrsquo10

9 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Small but Non-negligibleFlaw in the Android Permission Scheme Wook Shin Sanghoon Kwak Shinsaku Kiyomoto KazuhideFukushima et Toshiaki Tanaka IEEE POLICY 2010

10 Marc Schonefled Reconstructing Dalvik Applications httpcansecwestcomcsw09

csw09-schoenefeldpdf CanSecWest 2009

N Ruff 149

11 Sergio Alvarez The Smart-Phones Nightmare (iPhone-oriented parts about Android) http

cansecwestcomcsw09csw09-alvarezpdf CanSecWest 2009

12 Nicolas Economou Alfredo Ortega Smartphone (in)security httpcansecwestcomcsw09

csw09-ortega-economoupdf CanSecWest 2009

13 Jesse Burns Exploratory Android Surgery httpwwwblackhatcompresentationsbh-usa-09

BURNSBHUSA09-Burns-AndroidSurgery-SLIDESpdf BlackHat USA 2009

14 Kevin Mahaffey John Hering App Attack httpsmediablackhatcombh-us-10presentations

Mahaffey_HeringBlackhat-USA-2010-Mahaffey-Hering-Lookout-App-Genome-slidespdf Black-Hat USA 2010

15 Nils The Risk you carry in your Pocket httpsmediablackhatcombh-ad-10Nils

Black-Hat-AD-2010-android-sandcastle-slidespdf BlackHat Abu Dhabi 2010

16 Raphael Rigo Android Reverse Engineering and Forensics httpsdeepsecnetdocsspeaker

htmlPSLOT45 DeepSec 2010

17 Itzhak Avraham Popping Shell on A(ndroid)RM Devices httpsmediablackhatcombh-dc-11

AvrahamBlackHat_DC_2011_Avraham-Popping_Android_Devices-Slidespdf BlackHat DC 2011

18 Jon Oberheide httpjonoberheideorgblog20100625remote-kill-and-install-on-google-android

19 Jon Oberheide httpjonoberheideorgblog20100628a-peek-inside-the-gtalkservice-connection

20 httpwwwandroidpolicecom20110301the-mother-of-all-android-

malware-has-arrived-stolen-apps-released-to-the-market-that-root-

your-phone-steal-your-data-and-open-backdoor

  • Seacutecuriteacute du systegraveme Android
  • N Ruff

144 Securite du systeme Android

bytecode Dalvik Les outils classiques de decompilation Java 46 47 srsquoappliquentalors

Compte-tenu de la facilite deconcertante avec laquelle il est possible drsquoanalyserles applications Android (et donc de les craquer entre autres) Google a mis adisposition des developpeurs une bibliotheque tres complete de gestion des licences enligne Licensing Verification Library (LVL) 48 Toutes les versions de cette bibliothequeont malheureusement ete craquees elles aussi a lrsquoheure ou jrsquoecris ces lignes

Une autre contre-mesure mise en place par Google consiste a integrer un obfusca-teur de bytecode dans la chaine de compilation ProGuard 49 Cet outil relativementpuissant est configurable par le developpeur au travers du fichier proguardcfg toutefois le fichier de configuration par defaut (reproduit ci-apres) nrsquoopere que lerenommage des classes et methodes invisibles a lrsquoexterieur de lrsquoapplication ce qui estpeu efficace face a un attaquant determine

-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontpreverify

-verbose

-optimizations codesimplificationarithmetic field classmerging

-keep public class extends androidappActivity

-keep public class extends androidappApplication

-keep public class extends androidappService

-keep public class extends androidcontentBroadcastReceiver

-keep public class extends androidcontentContentProvider

-keep public class extends androidappbackupBackupAgentHelper

-keep public class extends androidpreferencePreference

-keep public class comandroidvendinglicensingILicensingService

-keepclasseswithmembernames class

native ltmethods gt

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet)

-keepclasseswithmembernames class

public ltinit gt( androidcontentContext androidutilAttributeSet int)

-keepclassmembers enum

public static [] values ()

public static valueOf(javalangString)

46 httpmembersfortunecitycomneshkovdjhtml

47 httpjavadecompilerfreefr

48 httpdeveloperandroidcomguidepublishinglicensinghtml

49 httpdeveloperandroidcomguidedevelopingtoolsproguardhtml

N Ruff 145

-keep class implements androidosParcelable

public static final androidosParcelable$Creator

Au vu des resultats obtenus on peut considerer que lrsquoobfuscation de bytecode Javadans le monde Android est en retard sur lrsquoobfuscation de code x86 dans le monde PCLes techniques de complexification du flot de controle ou de construction dynamiquedes constantes ne sont pas encore repandues dans les applications commerciales pourAndroid Afin de combler ce manque des projets paralleles (comme AndroGuard 50)fleurissent - mais on peut supposer que la solution integree au SDK fourni par Googlerestera la solution majoritairement utilisee par les applications (pour des raisons desimplicite evidentes)

Desassembler du code natif Lors de lrsquoaudit drsquoune application Android il estpossible de rencontrer du code natif dans deux cas

1 Lrsquoapplication contient des bibliotheques natives compilees avec le NDK

2 Lrsquoapplication contient des applications natives ou srsquoavere etre elle-meme uneapplication native Ce cas est courant avec les applications malveillantes quiembarquent du code natif pour exploiter des failles noyau 51

Dans les deux cas Android ne presente aucune specificite par rapport a unLinuxARM classique Les fichiers natifs sont au format ELF La chaine de compilationnative est construite autour du compilateur GCC Tous les outils sont disponiblesdepuis longtemps pour analyser des tels binaires (ex IDA Pro Hex-Rays DecompilerARM etc)

Deboguer lrsquoapplication Une application Java compilee en mode debug peutetre deboguee a distance au travers du protocole standard Java Debug Wire Protocol(JDWP) defini dans le cadre de Java Platform Debugger Architecture (JPDA)

Les environnements de developpement Java classiques (comme Eclipse) per-mettent ainsi de deboguer une application a distance une fois celle-ci installee sur letelephone

Il est egalement possible drsquoutiliser le venerable JDB (fourni avec le SDK Java 52)bien que cet outil nrsquoait jamais depasse le statut de preuve de concept a mon avis

Lrsquooutil DDMS fourni avec le SDK Android repose egalement sur JPDA Cetoutil ne permet toutefois pas le debogage drsquoapplications mais seulement lrsquoanalyse deperformance

50 httpcodegooglecompandroguard

51 httpstealthopenwallnetxSports

52 httpdownloadoraclecomjavase142docstooldocssolarisjdbhtml

146 Securite du systeme Android

La liste des applications pouvant etre deboguees sur un systeme Android srsquoobtientavec la commande adb jdwp

Le vrai probleme se pose pour les applications qui nrsquoont pas ete compilees enmode debug Ceci implique que le manifeste de lrsquoapplication ne contient pasdrsquoentree ltapplication androiddebuggable=truegt De plus la plupart des outilsde debogage Java necessitent que le bytecode contienne des indications sur les numerosde lignes dans le code source drsquoorigine (il srsquoagit drsquoune limitation arbitraire qui nesrsquoapplique pas a lrsquooutil JavaSnoop 53 par exemple)

Fort heureusement il est possible de desassembler ces applications puis de lesreassembler en mode debug avec lrsquooutil apktool 54 Le processus est complexe etle resultat peu convivial mais il a le merite drsquoexister

Pour reinstaller lrsquoapplication modifiee sur un equipement reel il est necessairede la signer a nouveau La procedure est simple et parfaitement documentee parGoogle

Il faut drsquoabord generer une cle personnelle autosignee a duree de vie extremementlongue

$ keytool -genkey -v -keystore mykeykeystore -alias nom_alias -keyalg RSA -

keysize 2048 -validity 10000

Il faut ensuite signer le nouvel APK avec les outils du SDK Java

$ jarsigner -verbose -keystore mykeykeystore nom_applicationapk nom_alias

Enfin il est recommande drsquoaligner le code sur un multiple de 4 octets pour desraisons de performance

$ zipalign -v 4 nom_applicationapk nom_application_finalapk

Instrumentation Il est possible drsquoinstrumenter une application Java a lrsquoaide declasses specifiques a Android (androidappInstrumentation 55) Cette methodefournit des resultats detailles et personnalisables sur le fonctionnement interne drsquouneapplication elle necessite toutefois une decompilation et une modification prealablede lrsquoapplication a auditer

A lrsquoheure ou jrsquoecris ces lignes il nrsquoexiste pas (a ma connaissance) drsquooutil permettantde generaliser et drsquoautomatiser le processus a tout fichier APK Cette voie de recherchepourrait toutefois donner des resultats interessants

53 httpwwwaspectsecuritycomtoolsjavasnoop

54 httpcodegooglecompandroid-apktoolwikiSmaliDebugging

55 httpdeveloperandroidcomreferenceandroidappInstrumentationhtml

N Ruff 147

Outils specifiques Les outils disponibles actuellement dans le monde Android sontrudimentaires quoi que suffisants

Toutefois on peut raisonnablement estimer que la quantite et la qualite des outilsdisponibles va croitre de concert avec la popularite du systeme Android

A lrsquoheure ou jrsquoecris ces lignes la version 61 du logiciel IDA Pro 56 vient de sortirCette version ajoute le support du format DEX et du bytecode Dalvik ainsi que ledebogage a distance des applications Android natives

On peut supposer que drsquoautres outils couramment utilises par les auditeurs ensecurite vont etre mis a jour pour srsquoadapter au monde Android

6 Conclusion

Le systeme Android nrsquoa malheureusement pas profite de lrsquoopportunite unique quilui etait donnee repartir de la feuille blanche et creer un systeme drsquoexploitation sur par conception

A cause drsquoun heritage logiciel peu fiable ainsi que des contraintes materielles etcommerciales issues du monde de la telephonie mobile le systeme resultant est uncompromis qui laisse une large place a la creativite des attaquants

Celle-ci est drsquoautant plus exacerbee que la telephonie mobile est un phenomene demasse (il y a plus de telephones mobiles que drsquoordinateurs dans le monde) et que letelephone mobile est par conception un systeme de paiement (ce que nrsquoest pas un PCtraditionnel)

A ce tableau vient srsquoajouter 30 ans drsquoexperience dans le domaine des attaqueslogicielles appliquees a un ecosysteme applicatif qui nrsquoexistait pas il y a 5 ans

Toutes les conditions sont donc reunies pour que des attaques de grande ampleurmotivees par lrsquoargent se produisent contre les materiels grand public equipes dusysteme Android (telephones tablettes televisions )

La bonne nouvelle pour lrsquoexpert en securite crsquoest qursquoil est encore temps de srsquoymettre Android est suffisamment jeune et accessible aux nouveaux entrants ce quinrsquoest plus le cas de la plateforme PC ou les techniques drsquoattaque (ex exploitationdrsquoun heap overflow) et de defense (ex obfuscation logicielle) ont atteint des sommetsde raffinement desormais accessibles aux seuls experts les plus pointus du domaine

7 Sites et outils

71 Sites officiels

ndash Android portail officiel httpwwwandroidcom

56 httpwwwhex-rayscomidapro

148 Securite du systeme Android

ndash Android MarketPlace officielle httpsmarketandroidcomndash Android reference des developpeurs httpdeveloperandroidcom

72 Sites non officiels

ndash Reference de la machine virtuelle Dalvik httpdalvikvmcom

73 Outils tiers

ndash Google Android Debugging Utilities httpsitesgooglecomsiteortegaalfredoandroid

ndash Undx httpwwwillegalaccessorgundxhtmlndash SmaliBaksmali httpcodegooglecompsmalindash Dedexer httpdedexersourceforgenetndash Dex2Jar httpcodegooglecompdex2jarndash TaintDroid httpwwwappanalysisorg

ndash AndroGuard httpandroguardblogspotcom

References

1 Benjamin Morin Modele de securite drsquoAndroid MISC 51 2010

2 K Chen Reversing and exploiting an apple firmware update httpwwwblackhatcom

presentationsbh-usa-09CHENBHUSA09-Chen-RevAppleFirm-PAPERpdf BlackHat 2009

3 Alexandre Gazet Sticky fingers amp KBC Custom Shop httpwwwssticorg2011presentation

sticky_fingers_and_kbc_custom_shop SSTIC 2011

4 Loıc Duflot and Yves-Alexis Perez Quelques elements en matiere de securite des cartes reseau http

wwwssticorg2010presentationPeut_on_faire_confiance_aux_cartes_reseau SSTIC 2010

5 Alexander Tereshkin and Rafal Wojtczuk Introducing Ring -3 Rootkits httpwwwblackhat

compresentationsbh-usa-09TERESHKINBHUSA09-Tereshkin-Ring3Rootkit-SLIDESpdf Black-Hat USA 2009

6 Loıc Duflot Yves-Alexis Perez and Benjamin Morin Run-time firmware integrity verification what ifyou canrsquot trust your network card CanSecWest 2011

7 Ralf-Philipp Weinmann All Your Baseband Are Belong To Us httpeventscccdecongress

2010Fahrplanevents4090enhtml CCC 2010

8 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Formal Model to Analyzethe Permission Authorization and Enforcement in the Android Framework SecureComrsquo10

9 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Small but Non-negligibleFlaw in the Android Permission Scheme Wook Shin Sanghoon Kwak Shinsaku Kiyomoto KazuhideFukushima et Toshiaki Tanaka IEEE POLICY 2010

10 Marc Schonefled Reconstructing Dalvik Applications httpcansecwestcomcsw09

csw09-schoenefeldpdf CanSecWest 2009

N Ruff 149

11 Sergio Alvarez The Smart-Phones Nightmare (iPhone-oriented parts about Android) http

cansecwestcomcsw09csw09-alvarezpdf CanSecWest 2009

12 Nicolas Economou Alfredo Ortega Smartphone (in)security httpcansecwestcomcsw09

csw09-ortega-economoupdf CanSecWest 2009

13 Jesse Burns Exploratory Android Surgery httpwwwblackhatcompresentationsbh-usa-09

BURNSBHUSA09-Burns-AndroidSurgery-SLIDESpdf BlackHat USA 2009

14 Kevin Mahaffey John Hering App Attack httpsmediablackhatcombh-us-10presentations

Mahaffey_HeringBlackhat-USA-2010-Mahaffey-Hering-Lookout-App-Genome-slidespdf Black-Hat USA 2010

15 Nils The Risk you carry in your Pocket httpsmediablackhatcombh-ad-10Nils

Black-Hat-AD-2010-android-sandcastle-slidespdf BlackHat Abu Dhabi 2010

16 Raphael Rigo Android Reverse Engineering and Forensics httpsdeepsecnetdocsspeaker

htmlPSLOT45 DeepSec 2010

17 Itzhak Avraham Popping Shell on A(ndroid)RM Devices httpsmediablackhatcombh-dc-11

AvrahamBlackHat_DC_2011_Avraham-Popping_Android_Devices-Slidespdf BlackHat DC 2011

18 Jon Oberheide httpjonoberheideorgblog20100625remote-kill-and-install-on-google-android

19 Jon Oberheide httpjonoberheideorgblog20100628a-peek-inside-the-gtalkservice-connection

20 httpwwwandroidpolicecom20110301the-mother-of-all-android-

malware-has-arrived-stolen-apps-released-to-the-market-that-root-

your-phone-steal-your-data-and-open-backdoor

  • Seacutecuriteacute du systegraveme Android
  • N Ruff

N Ruff 145

-keep class implements androidosParcelable

public static final androidosParcelable$Creator

Au vu des resultats obtenus on peut considerer que lrsquoobfuscation de bytecode Javadans le monde Android est en retard sur lrsquoobfuscation de code x86 dans le monde PCLes techniques de complexification du flot de controle ou de construction dynamiquedes constantes ne sont pas encore repandues dans les applications commerciales pourAndroid Afin de combler ce manque des projets paralleles (comme AndroGuard 50)fleurissent - mais on peut supposer que la solution integree au SDK fourni par Googlerestera la solution majoritairement utilisee par les applications (pour des raisons desimplicite evidentes)

Desassembler du code natif Lors de lrsquoaudit drsquoune application Android il estpossible de rencontrer du code natif dans deux cas

1 Lrsquoapplication contient des bibliotheques natives compilees avec le NDK

2 Lrsquoapplication contient des applications natives ou srsquoavere etre elle-meme uneapplication native Ce cas est courant avec les applications malveillantes quiembarquent du code natif pour exploiter des failles noyau 51

Dans les deux cas Android ne presente aucune specificite par rapport a unLinuxARM classique Les fichiers natifs sont au format ELF La chaine de compilationnative est construite autour du compilateur GCC Tous les outils sont disponiblesdepuis longtemps pour analyser des tels binaires (ex IDA Pro Hex-Rays DecompilerARM etc)

Deboguer lrsquoapplication Une application Java compilee en mode debug peutetre deboguee a distance au travers du protocole standard Java Debug Wire Protocol(JDWP) defini dans le cadre de Java Platform Debugger Architecture (JPDA)

Les environnements de developpement Java classiques (comme Eclipse) per-mettent ainsi de deboguer une application a distance une fois celle-ci installee sur letelephone

Il est egalement possible drsquoutiliser le venerable JDB (fourni avec le SDK Java 52)bien que cet outil nrsquoait jamais depasse le statut de preuve de concept a mon avis

Lrsquooutil DDMS fourni avec le SDK Android repose egalement sur JPDA Cetoutil ne permet toutefois pas le debogage drsquoapplications mais seulement lrsquoanalyse deperformance

50 httpcodegooglecompandroguard

51 httpstealthopenwallnetxSports

52 httpdownloadoraclecomjavase142docstooldocssolarisjdbhtml

146 Securite du systeme Android

La liste des applications pouvant etre deboguees sur un systeme Android srsquoobtientavec la commande adb jdwp

Le vrai probleme se pose pour les applications qui nrsquoont pas ete compilees enmode debug Ceci implique que le manifeste de lrsquoapplication ne contient pasdrsquoentree ltapplication androiddebuggable=truegt De plus la plupart des outilsde debogage Java necessitent que le bytecode contienne des indications sur les numerosde lignes dans le code source drsquoorigine (il srsquoagit drsquoune limitation arbitraire qui nesrsquoapplique pas a lrsquooutil JavaSnoop 53 par exemple)

Fort heureusement il est possible de desassembler ces applications puis de lesreassembler en mode debug avec lrsquooutil apktool 54 Le processus est complexe etle resultat peu convivial mais il a le merite drsquoexister

Pour reinstaller lrsquoapplication modifiee sur un equipement reel il est necessairede la signer a nouveau La procedure est simple et parfaitement documentee parGoogle

Il faut drsquoabord generer une cle personnelle autosignee a duree de vie extremementlongue

$ keytool -genkey -v -keystore mykeykeystore -alias nom_alias -keyalg RSA -

keysize 2048 -validity 10000

Il faut ensuite signer le nouvel APK avec les outils du SDK Java

$ jarsigner -verbose -keystore mykeykeystore nom_applicationapk nom_alias

Enfin il est recommande drsquoaligner le code sur un multiple de 4 octets pour desraisons de performance

$ zipalign -v 4 nom_applicationapk nom_application_finalapk

Instrumentation Il est possible drsquoinstrumenter une application Java a lrsquoaide declasses specifiques a Android (androidappInstrumentation 55) Cette methodefournit des resultats detailles et personnalisables sur le fonctionnement interne drsquouneapplication elle necessite toutefois une decompilation et une modification prealablede lrsquoapplication a auditer

A lrsquoheure ou jrsquoecris ces lignes il nrsquoexiste pas (a ma connaissance) drsquooutil permettantde generaliser et drsquoautomatiser le processus a tout fichier APK Cette voie de recherchepourrait toutefois donner des resultats interessants

53 httpwwwaspectsecuritycomtoolsjavasnoop

54 httpcodegooglecompandroid-apktoolwikiSmaliDebugging

55 httpdeveloperandroidcomreferenceandroidappInstrumentationhtml

N Ruff 147

Outils specifiques Les outils disponibles actuellement dans le monde Android sontrudimentaires quoi que suffisants

Toutefois on peut raisonnablement estimer que la quantite et la qualite des outilsdisponibles va croitre de concert avec la popularite du systeme Android

A lrsquoheure ou jrsquoecris ces lignes la version 61 du logiciel IDA Pro 56 vient de sortirCette version ajoute le support du format DEX et du bytecode Dalvik ainsi que ledebogage a distance des applications Android natives

On peut supposer que drsquoautres outils couramment utilises par les auditeurs ensecurite vont etre mis a jour pour srsquoadapter au monde Android

6 Conclusion

Le systeme Android nrsquoa malheureusement pas profite de lrsquoopportunite unique quilui etait donnee repartir de la feuille blanche et creer un systeme drsquoexploitation sur par conception

A cause drsquoun heritage logiciel peu fiable ainsi que des contraintes materielles etcommerciales issues du monde de la telephonie mobile le systeme resultant est uncompromis qui laisse une large place a la creativite des attaquants

Celle-ci est drsquoautant plus exacerbee que la telephonie mobile est un phenomene demasse (il y a plus de telephones mobiles que drsquoordinateurs dans le monde) et que letelephone mobile est par conception un systeme de paiement (ce que nrsquoest pas un PCtraditionnel)

A ce tableau vient srsquoajouter 30 ans drsquoexperience dans le domaine des attaqueslogicielles appliquees a un ecosysteme applicatif qui nrsquoexistait pas il y a 5 ans

Toutes les conditions sont donc reunies pour que des attaques de grande ampleurmotivees par lrsquoargent se produisent contre les materiels grand public equipes dusysteme Android (telephones tablettes televisions )

La bonne nouvelle pour lrsquoexpert en securite crsquoest qursquoil est encore temps de srsquoymettre Android est suffisamment jeune et accessible aux nouveaux entrants ce quinrsquoest plus le cas de la plateforme PC ou les techniques drsquoattaque (ex exploitationdrsquoun heap overflow) et de defense (ex obfuscation logicielle) ont atteint des sommetsde raffinement desormais accessibles aux seuls experts les plus pointus du domaine

7 Sites et outils

71 Sites officiels

ndash Android portail officiel httpwwwandroidcom

56 httpwwwhex-rayscomidapro

148 Securite du systeme Android

ndash Android MarketPlace officielle httpsmarketandroidcomndash Android reference des developpeurs httpdeveloperandroidcom

72 Sites non officiels

ndash Reference de la machine virtuelle Dalvik httpdalvikvmcom

73 Outils tiers

ndash Google Android Debugging Utilities httpsitesgooglecomsiteortegaalfredoandroid

ndash Undx httpwwwillegalaccessorgundxhtmlndash SmaliBaksmali httpcodegooglecompsmalindash Dedexer httpdedexersourceforgenetndash Dex2Jar httpcodegooglecompdex2jarndash TaintDroid httpwwwappanalysisorg

ndash AndroGuard httpandroguardblogspotcom

References

1 Benjamin Morin Modele de securite drsquoAndroid MISC 51 2010

2 K Chen Reversing and exploiting an apple firmware update httpwwwblackhatcom

presentationsbh-usa-09CHENBHUSA09-Chen-RevAppleFirm-PAPERpdf BlackHat 2009

3 Alexandre Gazet Sticky fingers amp KBC Custom Shop httpwwwssticorg2011presentation

sticky_fingers_and_kbc_custom_shop SSTIC 2011

4 Loıc Duflot and Yves-Alexis Perez Quelques elements en matiere de securite des cartes reseau http

wwwssticorg2010presentationPeut_on_faire_confiance_aux_cartes_reseau SSTIC 2010

5 Alexander Tereshkin and Rafal Wojtczuk Introducing Ring -3 Rootkits httpwwwblackhat

compresentationsbh-usa-09TERESHKINBHUSA09-Tereshkin-Ring3Rootkit-SLIDESpdf Black-Hat USA 2009

6 Loıc Duflot Yves-Alexis Perez and Benjamin Morin Run-time firmware integrity verification what ifyou canrsquot trust your network card CanSecWest 2011

7 Ralf-Philipp Weinmann All Your Baseband Are Belong To Us httpeventscccdecongress

2010Fahrplanevents4090enhtml CCC 2010

8 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Formal Model to Analyzethe Permission Authorization and Enforcement in the Android Framework SecureComrsquo10

9 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Small but Non-negligibleFlaw in the Android Permission Scheme Wook Shin Sanghoon Kwak Shinsaku Kiyomoto KazuhideFukushima et Toshiaki Tanaka IEEE POLICY 2010

10 Marc Schonefled Reconstructing Dalvik Applications httpcansecwestcomcsw09

csw09-schoenefeldpdf CanSecWest 2009

N Ruff 149

11 Sergio Alvarez The Smart-Phones Nightmare (iPhone-oriented parts about Android) http

cansecwestcomcsw09csw09-alvarezpdf CanSecWest 2009

12 Nicolas Economou Alfredo Ortega Smartphone (in)security httpcansecwestcomcsw09

csw09-ortega-economoupdf CanSecWest 2009

13 Jesse Burns Exploratory Android Surgery httpwwwblackhatcompresentationsbh-usa-09

BURNSBHUSA09-Burns-AndroidSurgery-SLIDESpdf BlackHat USA 2009

14 Kevin Mahaffey John Hering App Attack httpsmediablackhatcombh-us-10presentations

Mahaffey_HeringBlackhat-USA-2010-Mahaffey-Hering-Lookout-App-Genome-slidespdf Black-Hat USA 2010

15 Nils The Risk you carry in your Pocket httpsmediablackhatcombh-ad-10Nils

Black-Hat-AD-2010-android-sandcastle-slidespdf BlackHat Abu Dhabi 2010

16 Raphael Rigo Android Reverse Engineering and Forensics httpsdeepsecnetdocsspeaker

htmlPSLOT45 DeepSec 2010

17 Itzhak Avraham Popping Shell on A(ndroid)RM Devices httpsmediablackhatcombh-dc-11

AvrahamBlackHat_DC_2011_Avraham-Popping_Android_Devices-Slidespdf BlackHat DC 2011

18 Jon Oberheide httpjonoberheideorgblog20100625remote-kill-and-install-on-google-android

19 Jon Oberheide httpjonoberheideorgblog20100628a-peek-inside-the-gtalkservice-connection

20 httpwwwandroidpolicecom20110301the-mother-of-all-android-

malware-has-arrived-stolen-apps-released-to-the-market-that-root-

your-phone-steal-your-data-and-open-backdoor

  • Seacutecuriteacute du systegraveme Android
  • N Ruff

146 Securite du systeme Android

La liste des applications pouvant etre deboguees sur un systeme Android srsquoobtientavec la commande adb jdwp

Le vrai probleme se pose pour les applications qui nrsquoont pas ete compilees enmode debug Ceci implique que le manifeste de lrsquoapplication ne contient pasdrsquoentree ltapplication androiddebuggable=truegt De plus la plupart des outilsde debogage Java necessitent que le bytecode contienne des indications sur les numerosde lignes dans le code source drsquoorigine (il srsquoagit drsquoune limitation arbitraire qui nesrsquoapplique pas a lrsquooutil JavaSnoop 53 par exemple)

Fort heureusement il est possible de desassembler ces applications puis de lesreassembler en mode debug avec lrsquooutil apktool 54 Le processus est complexe etle resultat peu convivial mais il a le merite drsquoexister

Pour reinstaller lrsquoapplication modifiee sur un equipement reel il est necessairede la signer a nouveau La procedure est simple et parfaitement documentee parGoogle

Il faut drsquoabord generer une cle personnelle autosignee a duree de vie extremementlongue

$ keytool -genkey -v -keystore mykeykeystore -alias nom_alias -keyalg RSA -

keysize 2048 -validity 10000

Il faut ensuite signer le nouvel APK avec les outils du SDK Java

$ jarsigner -verbose -keystore mykeykeystore nom_applicationapk nom_alias

Enfin il est recommande drsquoaligner le code sur un multiple de 4 octets pour desraisons de performance

$ zipalign -v 4 nom_applicationapk nom_application_finalapk

Instrumentation Il est possible drsquoinstrumenter une application Java a lrsquoaide declasses specifiques a Android (androidappInstrumentation 55) Cette methodefournit des resultats detailles et personnalisables sur le fonctionnement interne drsquouneapplication elle necessite toutefois une decompilation et une modification prealablede lrsquoapplication a auditer

A lrsquoheure ou jrsquoecris ces lignes il nrsquoexiste pas (a ma connaissance) drsquooutil permettantde generaliser et drsquoautomatiser le processus a tout fichier APK Cette voie de recherchepourrait toutefois donner des resultats interessants

53 httpwwwaspectsecuritycomtoolsjavasnoop

54 httpcodegooglecompandroid-apktoolwikiSmaliDebugging

55 httpdeveloperandroidcomreferenceandroidappInstrumentationhtml

N Ruff 147

Outils specifiques Les outils disponibles actuellement dans le monde Android sontrudimentaires quoi que suffisants

Toutefois on peut raisonnablement estimer que la quantite et la qualite des outilsdisponibles va croitre de concert avec la popularite du systeme Android

A lrsquoheure ou jrsquoecris ces lignes la version 61 du logiciel IDA Pro 56 vient de sortirCette version ajoute le support du format DEX et du bytecode Dalvik ainsi que ledebogage a distance des applications Android natives

On peut supposer que drsquoautres outils couramment utilises par les auditeurs ensecurite vont etre mis a jour pour srsquoadapter au monde Android

6 Conclusion

Le systeme Android nrsquoa malheureusement pas profite de lrsquoopportunite unique quilui etait donnee repartir de la feuille blanche et creer un systeme drsquoexploitation sur par conception

A cause drsquoun heritage logiciel peu fiable ainsi que des contraintes materielles etcommerciales issues du monde de la telephonie mobile le systeme resultant est uncompromis qui laisse une large place a la creativite des attaquants

Celle-ci est drsquoautant plus exacerbee que la telephonie mobile est un phenomene demasse (il y a plus de telephones mobiles que drsquoordinateurs dans le monde) et que letelephone mobile est par conception un systeme de paiement (ce que nrsquoest pas un PCtraditionnel)

A ce tableau vient srsquoajouter 30 ans drsquoexperience dans le domaine des attaqueslogicielles appliquees a un ecosysteme applicatif qui nrsquoexistait pas il y a 5 ans

Toutes les conditions sont donc reunies pour que des attaques de grande ampleurmotivees par lrsquoargent se produisent contre les materiels grand public equipes dusysteme Android (telephones tablettes televisions )

La bonne nouvelle pour lrsquoexpert en securite crsquoest qursquoil est encore temps de srsquoymettre Android est suffisamment jeune et accessible aux nouveaux entrants ce quinrsquoest plus le cas de la plateforme PC ou les techniques drsquoattaque (ex exploitationdrsquoun heap overflow) et de defense (ex obfuscation logicielle) ont atteint des sommetsde raffinement desormais accessibles aux seuls experts les plus pointus du domaine

7 Sites et outils

71 Sites officiels

ndash Android portail officiel httpwwwandroidcom

56 httpwwwhex-rayscomidapro

148 Securite du systeme Android

ndash Android MarketPlace officielle httpsmarketandroidcomndash Android reference des developpeurs httpdeveloperandroidcom

72 Sites non officiels

ndash Reference de la machine virtuelle Dalvik httpdalvikvmcom

73 Outils tiers

ndash Google Android Debugging Utilities httpsitesgooglecomsiteortegaalfredoandroid

ndash Undx httpwwwillegalaccessorgundxhtmlndash SmaliBaksmali httpcodegooglecompsmalindash Dedexer httpdedexersourceforgenetndash Dex2Jar httpcodegooglecompdex2jarndash TaintDroid httpwwwappanalysisorg

ndash AndroGuard httpandroguardblogspotcom

References

1 Benjamin Morin Modele de securite drsquoAndroid MISC 51 2010

2 K Chen Reversing and exploiting an apple firmware update httpwwwblackhatcom

presentationsbh-usa-09CHENBHUSA09-Chen-RevAppleFirm-PAPERpdf BlackHat 2009

3 Alexandre Gazet Sticky fingers amp KBC Custom Shop httpwwwssticorg2011presentation

sticky_fingers_and_kbc_custom_shop SSTIC 2011

4 Loıc Duflot and Yves-Alexis Perez Quelques elements en matiere de securite des cartes reseau http

wwwssticorg2010presentationPeut_on_faire_confiance_aux_cartes_reseau SSTIC 2010

5 Alexander Tereshkin and Rafal Wojtczuk Introducing Ring -3 Rootkits httpwwwblackhat

compresentationsbh-usa-09TERESHKINBHUSA09-Tereshkin-Ring3Rootkit-SLIDESpdf Black-Hat USA 2009

6 Loıc Duflot Yves-Alexis Perez and Benjamin Morin Run-time firmware integrity verification what ifyou canrsquot trust your network card CanSecWest 2011

7 Ralf-Philipp Weinmann All Your Baseband Are Belong To Us httpeventscccdecongress

2010Fahrplanevents4090enhtml CCC 2010

8 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Formal Model to Analyzethe Permission Authorization and Enforcement in the Android Framework SecureComrsquo10

9 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Small but Non-negligibleFlaw in the Android Permission Scheme Wook Shin Sanghoon Kwak Shinsaku Kiyomoto KazuhideFukushima et Toshiaki Tanaka IEEE POLICY 2010

10 Marc Schonefled Reconstructing Dalvik Applications httpcansecwestcomcsw09

csw09-schoenefeldpdf CanSecWest 2009

N Ruff 149

11 Sergio Alvarez The Smart-Phones Nightmare (iPhone-oriented parts about Android) http

cansecwestcomcsw09csw09-alvarezpdf CanSecWest 2009

12 Nicolas Economou Alfredo Ortega Smartphone (in)security httpcansecwestcomcsw09

csw09-ortega-economoupdf CanSecWest 2009

13 Jesse Burns Exploratory Android Surgery httpwwwblackhatcompresentationsbh-usa-09

BURNSBHUSA09-Burns-AndroidSurgery-SLIDESpdf BlackHat USA 2009

14 Kevin Mahaffey John Hering App Attack httpsmediablackhatcombh-us-10presentations

Mahaffey_HeringBlackhat-USA-2010-Mahaffey-Hering-Lookout-App-Genome-slidespdf Black-Hat USA 2010

15 Nils The Risk you carry in your Pocket httpsmediablackhatcombh-ad-10Nils

Black-Hat-AD-2010-android-sandcastle-slidespdf BlackHat Abu Dhabi 2010

16 Raphael Rigo Android Reverse Engineering and Forensics httpsdeepsecnetdocsspeaker

htmlPSLOT45 DeepSec 2010

17 Itzhak Avraham Popping Shell on A(ndroid)RM Devices httpsmediablackhatcombh-dc-11

AvrahamBlackHat_DC_2011_Avraham-Popping_Android_Devices-Slidespdf BlackHat DC 2011

18 Jon Oberheide httpjonoberheideorgblog20100625remote-kill-and-install-on-google-android

19 Jon Oberheide httpjonoberheideorgblog20100628a-peek-inside-the-gtalkservice-connection

20 httpwwwandroidpolicecom20110301the-mother-of-all-android-

malware-has-arrived-stolen-apps-released-to-the-market-that-root-

your-phone-steal-your-data-and-open-backdoor

  • Seacutecuriteacute du systegraveme Android
  • N Ruff

N Ruff 147

Outils specifiques Les outils disponibles actuellement dans le monde Android sontrudimentaires quoi que suffisants

Toutefois on peut raisonnablement estimer que la quantite et la qualite des outilsdisponibles va croitre de concert avec la popularite du systeme Android

A lrsquoheure ou jrsquoecris ces lignes la version 61 du logiciel IDA Pro 56 vient de sortirCette version ajoute le support du format DEX et du bytecode Dalvik ainsi que ledebogage a distance des applications Android natives

On peut supposer que drsquoautres outils couramment utilises par les auditeurs ensecurite vont etre mis a jour pour srsquoadapter au monde Android

6 Conclusion

Le systeme Android nrsquoa malheureusement pas profite de lrsquoopportunite unique quilui etait donnee repartir de la feuille blanche et creer un systeme drsquoexploitation sur par conception

A cause drsquoun heritage logiciel peu fiable ainsi que des contraintes materielles etcommerciales issues du monde de la telephonie mobile le systeme resultant est uncompromis qui laisse une large place a la creativite des attaquants

Celle-ci est drsquoautant plus exacerbee que la telephonie mobile est un phenomene demasse (il y a plus de telephones mobiles que drsquoordinateurs dans le monde) et que letelephone mobile est par conception un systeme de paiement (ce que nrsquoest pas un PCtraditionnel)

A ce tableau vient srsquoajouter 30 ans drsquoexperience dans le domaine des attaqueslogicielles appliquees a un ecosysteme applicatif qui nrsquoexistait pas il y a 5 ans

Toutes les conditions sont donc reunies pour que des attaques de grande ampleurmotivees par lrsquoargent se produisent contre les materiels grand public equipes dusysteme Android (telephones tablettes televisions )

La bonne nouvelle pour lrsquoexpert en securite crsquoest qursquoil est encore temps de srsquoymettre Android est suffisamment jeune et accessible aux nouveaux entrants ce quinrsquoest plus le cas de la plateforme PC ou les techniques drsquoattaque (ex exploitationdrsquoun heap overflow) et de defense (ex obfuscation logicielle) ont atteint des sommetsde raffinement desormais accessibles aux seuls experts les plus pointus du domaine

7 Sites et outils

71 Sites officiels

ndash Android portail officiel httpwwwandroidcom

56 httpwwwhex-rayscomidapro

148 Securite du systeme Android

ndash Android MarketPlace officielle httpsmarketandroidcomndash Android reference des developpeurs httpdeveloperandroidcom

72 Sites non officiels

ndash Reference de la machine virtuelle Dalvik httpdalvikvmcom

73 Outils tiers

ndash Google Android Debugging Utilities httpsitesgooglecomsiteortegaalfredoandroid

ndash Undx httpwwwillegalaccessorgundxhtmlndash SmaliBaksmali httpcodegooglecompsmalindash Dedexer httpdedexersourceforgenetndash Dex2Jar httpcodegooglecompdex2jarndash TaintDroid httpwwwappanalysisorg

ndash AndroGuard httpandroguardblogspotcom

References

1 Benjamin Morin Modele de securite drsquoAndroid MISC 51 2010

2 K Chen Reversing and exploiting an apple firmware update httpwwwblackhatcom

presentationsbh-usa-09CHENBHUSA09-Chen-RevAppleFirm-PAPERpdf BlackHat 2009

3 Alexandre Gazet Sticky fingers amp KBC Custom Shop httpwwwssticorg2011presentation

sticky_fingers_and_kbc_custom_shop SSTIC 2011

4 Loıc Duflot and Yves-Alexis Perez Quelques elements en matiere de securite des cartes reseau http

wwwssticorg2010presentationPeut_on_faire_confiance_aux_cartes_reseau SSTIC 2010

5 Alexander Tereshkin and Rafal Wojtczuk Introducing Ring -3 Rootkits httpwwwblackhat

compresentationsbh-usa-09TERESHKINBHUSA09-Tereshkin-Ring3Rootkit-SLIDESpdf Black-Hat USA 2009

6 Loıc Duflot Yves-Alexis Perez and Benjamin Morin Run-time firmware integrity verification what ifyou canrsquot trust your network card CanSecWest 2011

7 Ralf-Philipp Weinmann All Your Baseband Are Belong To Us httpeventscccdecongress

2010Fahrplanevents4090enhtml CCC 2010

8 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Formal Model to Analyzethe Permission Authorization and Enforcement in the Android Framework SecureComrsquo10

9 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Small but Non-negligibleFlaw in the Android Permission Scheme Wook Shin Sanghoon Kwak Shinsaku Kiyomoto KazuhideFukushima et Toshiaki Tanaka IEEE POLICY 2010

10 Marc Schonefled Reconstructing Dalvik Applications httpcansecwestcomcsw09

csw09-schoenefeldpdf CanSecWest 2009

N Ruff 149

11 Sergio Alvarez The Smart-Phones Nightmare (iPhone-oriented parts about Android) http

cansecwestcomcsw09csw09-alvarezpdf CanSecWest 2009

12 Nicolas Economou Alfredo Ortega Smartphone (in)security httpcansecwestcomcsw09

csw09-ortega-economoupdf CanSecWest 2009

13 Jesse Burns Exploratory Android Surgery httpwwwblackhatcompresentationsbh-usa-09

BURNSBHUSA09-Burns-AndroidSurgery-SLIDESpdf BlackHat USA 2009

14 Kevin Mahaffey John Hering App Attack httpsmediablackhatcombh-us-10presentations

Mahaffey_HeringBlackhat-USA-2010-Mahaffey-Hering-Lookout-App-Genome-slidespdf Black-Hat USA 2010

15 Nils The Risk you carry in your Pocket httpsmediablackhatcombh-ad-10Nils

Black-Hat-AD-2010-android-sandcastle-slidespdf BlackHat Abu Dhabi 2010

16 Raphael Rigo Android Reverse Engineering and Forensics httpsdeepsecnetdocsspeaker

htmlPSLOT45 DeepSec 2010

17 Itzhak Avraham Popping Shell on A(ndroid)RM Devices httpsmediablackhatcombh-dc-11

AvrahamBlackHat_DC_2011_Avraham-Popping_Android_Devices-Slidespdf BlackHat DC 2011

18 Jon Oberheide httpjonoberheideorgblog20100625remote-kill-and-install-on-google-android

19 Jon Oberheide httpjonoberheideorgblog20100628a-peek-inside-the-gtalkservice-connection

20 httpwwwandroidpolicecom20110301the-mother-of-all-android-

malware-has-arrived-stolen-apps-released-to-the-market-that-root-

your-phone-steal-your-data-and-open-backdoor

  • Seacutecuriteacute du systegraveme Android
  • N Ruff

148 Securite du systeme Android

ndash Android MarketPlace officielle httpsmarketandroidcomndash Android reference des developpeurs httpdeveloperandroidcom

72 Sites non officiels

ndash Reference de la machine virtuelle Dalvik httpdalvikvmcom

73 Outils tiers

ndash Google Android Debugging Utilities httpsitesgooglecomsiteortegaalfredoandroid

ndash Undx httpwwwillegalaccessorgundxhtmlndash SmaliBaksmali httpcodegooglecompsmalindash Dedexer httpdedexersourceforgenetndash Dex2Jar httpcodegooglecompdex2jarndash TaintDroid httpwwwappanalysisorg

ndash AndroGuard httpandroguardblogspotcom

References

1 Benjamin Morin Modele de securite drsquoAndroid MISC 51 2010

2 K Chen Reversing and exploiting an apple firmware update httpwwwblackhatcom

presentationsbh-usa-09CHENBHUSA09-Chen-RevAppleFirm-PAPERpdf BlackHat 2009

3 Alexandre Gazet Sticky fingers amp KBC Custom Shop httpwwwssticorg2011presentation

sticky_fingers_and_kbc_custom_shop SSTIC 2011

4 Loıc Duflot and Yves-Alexis Perez Quelques elements en matiere de securite des cartes reseau http

wwwssticorg2010presentationPeut_on_faire_confiance_aux_cartes_reseau SSTIC 2010

5 Alexander Tereshkin and Rafal Wojtczuk Introducing Ring -3 Rootkits httpwwwblackhat

compresentationsbh-usa-09TERESHKINBHUSA09-Tereshkin-Ring3Rootkit-SLIDESpdf Black-Hat USA 2009

6 Loıc Duflot Yves-Alexis Perez and Benjamin Morin Run-time firmware integrity verification what ifyou canrsquot trust your network card CanSecWest 2011

7 Ralf-Philipp Weinmann All Your Baseband Are Belong To Us httpeventscccdecongress

2010Fahrplanevents4090enhtml CCC 2010

8 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Formal Model to Analyzethe Permission Authorization and Enforcement in the Android Framework SecureComrsquo10

9 Wook Shin Shinsaku Kiyomoto Kazuhide Fukushima et Toshiaki Tanaka A Small but Non-negligibleFlaw in the Android Permission Scheme Wook Shin Sanghoon Kwak Shinsaku Kiyomoto KazuhideFukushima et Toshiaki Tanaka IEEE POLICY 2010

10 Marc Schonefled Reconstructing Dalvik Applications httpcansecwestcomcsw09

csw09-schoenefeldpdf CanSecWest 2009

N Ruff 149

11 Sergio Alvarez The Smart-Phones Nightmare (iPhone-oriented parts about Android) http

cansecwestcomcsw09csw09-alvarezpdf CanSecWest 2009

12 Nicolas Economou Alfredo Ortega Smartphone (in)security httpcansecwestcomcsw09

csw09-ortega-economoupdf CanSecWest 2009

13 Jesse Burns Exploratory Android Surgery httpwwwblackhatcompresentationsbh-usa-09

BURNSBHUSA09-Burns-AndroidSurgery-SLIDESpdf BlackHat USA 2009

14 Kevin Mahaffey John Hering App Attack httpsmediablackhatcombh-us-10presentations

Mahaffey_HeringBlackhat-USA-2010-Mahaffey-Hering-Lookout-App-Genome-slidespdf Black-Hat USA 2010

15 Nils The Risk you carry in your Pocket httpsmediablackhatcombh-ad-10Nils

Black-Hat-AD-2010-android-sandcastle-slidespdf BlackHat Abu Dhabi 2010

16 Raphael Rigo Android Reverse Engineering and Forensics httpsdeepsecnetdocsspeaker

htmlPSLOT45 DeepSec 2010

17 Itzhak Avraham Popping Shell on A(ndroid)RM Devices httpsmediablackhatcombh-dc-11

AvrahamBlackHat_DC_2011_Avraham-Popping_Android_Devices-Slidespdf BlackHat DC 2011

18 Jon Oberheide httpjonoberheideorgblog20100625remote-kill-and-install-on-google-android

19 Jon Oberheide httpjonoberheideorgblog20100628a-peek-inside-the-gtalkservice-connection

20 httpwwwandroidpolicecom20110301the-mother-of-all-android-

malware-has-arrived-stolen-apps-released-to-the-market-that-root-

your-phone-steal-your-data-and-open-backdoor

  • Seacutecuriteacute du systegraveme Android
  • N Ruff

N Ruff 149

11 Sergio Alvarez The Smart-Phones Nightmare (iPhone-oriented parts about Android) http

cansecwestcomcsw09csw09-alvarezpdf CanSecWest 2009

12 Nicolas Economou Alfredo Ortega Smartphone (in)security httpcansecwestcomcsw09

csw09-ortega-economoupdf CanSecWest 2009

13 Jesse Burns Exploratory Android Surgery httpwwwblackhatcompresentationsbh-usa-09

BURNSBHUSA09-Burns-AndroidSurgery-SLIDESpdf BlackHat USA 2009

14 Kevin Mahaffey John Hering App Attack httpsmediablackhatcombh-us-10presentations

Mahaffey_HeringBlackhat-USA-2010-Mahaffey-Hering-Lookout-App-Genome-slidespdf Black-Hat USA 2010

15 Nils The Risk you carry in your Pocket httpsmediablackhatcombh-ad-10Nils

Black-Hat-AD-2010-android-sandcastle-slidespdf BlackHat Abu Dhabi 2010

16 Raphael Rigo Android Reverse Engineering and Forensics httpsdeepsecnetdocsspeaker

htmlPSLOT45 DeepSec 2010

17 Itzhak Avraham Popping Shell on A(ndroid)RM Devices httpsmediablackhatcombh-dc-11

AvrahamBlackHat_DC_2011_Avraham-Popping_Android_Devices-Slidespdf BlackHat DC 2011

18 Jon Oberheide httpjonoberheideorgblog20100625remote-kill-and-install-on-google-android

19 Jon Oberheide httpjonoberheideorgblog20100628a-peek-inside-the-gtalkservice-connection

20 httpwwwandroidpolicecom20110301the-mother-of-all-android-

malware-has-arrived-stolen-apps-released-to-the-market-that-root-

your-phone-steal-your-data-and-open-backdoor

  • Seacutecuriteacute du systegraveme Android
  • N Ruff