S ecurit e du syst eme Android - sstic.org 2010, on peut citer par exemple la publication de...
Transcript of S ecurit e du syst eme Android - sstic.org 2010, on peut citer par exemple la publication de...
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
-