mardi 20 mars 2012
Une application Android étrange
Par Sylvain SARMEJEANNE, mardi 20 mars 2012 à 16:04 :: General
Le CERT-LEXSI a développé une plateforme d'analyse automatisée d'applications Android pour différents besoins, dont celui consistant à extraire d'un flux de milliers d'applications les quelques applications suspectes méritant une analyse manuelle plus poussée. En voici un exemple.
Aperçu de l'application
L'alerte remontée par la plateforme est la suivante :

On remarque effectivement les activités suivantes :
- de nombreuses chaines de caractères suspectes ont été extraites de l'exécution dont certaines d'entre elles peuvent être la conséquence d'une élévation de privilèges vers root, comme le remontage d'une partition read/write afin de compromettre la partition système ; l'analyse n'a cependant pas montré que les droits root avaient été effectivement acquis par l'application via l'exploitation d'une vulnérabilité
- l'utilisation de permissions liées à l'envoi de SMS (android.permission.SEND_SMS) et aux appels téléphoniques (android.permission.CALL_PHONE) utilisées par certains troyens générateurs de revenus
- le fait que l'application impose une priorité élevée sur la réception des SMS, comme le font les troyens bancaires mobiles comme Zitmo (Zeus in the mobile) ou Spitmo (Spyeye in the mobile) pour recevoir les OTP SMS avant les autres applications
A ce niveau de l'analyse, la plateforme automatisée a bien fait de générer une alerte et une étude plus poussée est nécessaire pour déterminer s'il s'agit d'une application malveillante ou simplement d'un faux positif.
Exécution manuelle
Il s'agit d'une application issue d'un market chinois permettant à première vue de personnaliser son téléphone (fonds d'écran, sonneries, etc) et d'envoyer des MMS à ses contacts :

Sans même avoir validé quoi que ce soit dans l'application, on remarque que l'écran de réception d'appel a déjà été personnalisé. Rien de bien méchant, mais un peu intrusif quand même :

L'exécution ne nous en apprendra pas plus, passons maintenant à l'analyse statique.
Analyse statique
La décompilation du bytecode Dalvik commence très fort puisqu'on y voit la présence d'une bibliothèque RootTools :

Il s'agit d'une bibliothèque exposant une API permettant de lancer des commandes en tant que root si le téléphone le permet ; en d'autres termes, elle ne roote pas le téléphone mais permet d'utiliser le root s'il est disponible. Son code source est public. Cela explique donc la présence de chaines suspectes dans l'alerte initiale sans pour autant qu'une élévation de privilèges ait eu lieu.
La version de RootTools embarquée dans notre application ne semblant pas avoir été modifiée, nous allons rechercher les appels à des fonctions de cette API. Deux classes correspondent :
- utility/My
- utility/RootUtil
Dans la classe My, seule la fonction installCcPhoneProcess() fait appel à RootTools. Elle commence par vérifier la version d'Android installée via la constante Build.VERSION.SDK_INT ; si la version n'est pas au moins la 9, soit Gingerbread (2.3), le saut n'est pas pris et la fonction retourne :

Pour les versions Gingerbread et supérieures, la fonction vérifie ensuite si le root est disponible via un appel à RootTools.isRootAvailable() (cette vérification ne se base que sur la présence du binaire su). En cas d'échec, la fonction termine en loggant le message d'erreur ERROR_CODE_ROOT_PROCESS. En cas de réussite, le tableau contenant la liste des commandes à exécuter en root est créé par l'appel à la fonction RootUtil.createCmds() (plus lisible en regardant la décompilation) :

L'appel suivant à RootUtil.execCmdsHaveResult() va donc remonter la partition système read/write et y copier l'APK cc_phone.apk (depuis les ressources de l'APK original). Cet APK sera automatiquement détecté par le Package Manager d'Android et, comme il a été copié dans la partition système, reconnu comme une application système ce qui lui permettra d'obtenir des droits supplémentaires. En effet, alors que l'installation de l'application ne génère pas d'erreur sous Android 2.2, le message suivant apparait dans les logs lors de l'installation sous Android 2.3 :
W/PackageManager( 75): Not granting permission android.permission.MODIFY_PHONE_STATE to package xxx.xxx (protectionLevel=3 flags=0xbe44)
Par défaut, l'application n'a donc pas obtenu sur Gingerbread tous les privilèges voulus. Après une rapide recherche, on constate en effet qu'il s'agit d'un problème connu : Google a modifié l'API liée à la téléphonie et l'accès aux fonctions permettant de changer l'état d'un appel (prendre l'appel automatiquement via answerRingingCall() ou raccrocher automatiquement via endCall()) est désormais restreint aux applications système.
Reste maintenant à savoir à quel moment la fonction My.installCcPhoneProcess() est appelée. On obtient les références suivantes :

La première référence ne donne rien de pertinent ; la fonction onClick() de l'activité Settings appelle cette fonction lors de l'interaction avec le contrôle cb_to_obtain :

La fonction initView() nous informe que ce contrôle a pour identifiant 2131361991 (0x7f0a00c7) et qu'une zone est justement rendue invisible pour les versions avant 2.3 :

On observe effectivement une différence entre l'écran Settings entre Android 2.2 et 2.3 où un bouton apparait :

Voici la traduction des labels :
- 授权设置 : Authorization settings
- 2.3获取授权 : 2.3 to obtain authorization
- 设置 : install
Un clic sur ce bouton nous confirme via les logs qu'il s'agit bien du contrôle cb_to_obtain. Toujours dans l'écran Settings, l'un des contrôles se nomme sp_ChoiceAutoAnswer et on fait alors le lien avec le changement d'API dans Gingerbread mentionné ci-dessus. Ce contrôle a pour label 来电自动接听 ("Call Auto Answer") et en le changeant à une autre valeur que celle par défaut et en émettant un appel entrant, on ne remarque aucun problème dans les logs sous Android 2.2 alors que la version 2.3 émet le message suivant :
W/System.err( 398): java.lang.SecurityException: Neither user 10034 nor current process has android.permission.MODIFY_PHONE_STATE.
Cette fois-ci, la boucle est bouclée : l'application utilise bien les droits root, s'ils sont disponibles, mais simplement afin de contourner une protection présente à partir d'Android 2.3 dans l'API de téléphonie, afin de maintenir la fonctionnalité de répondeur automatique. L'application n'est donc pas malveillante et on peut même la trouver sur le market officiel 

Nous nous sommes récemment intéressés au dernier venu dans le monde des malwares bancaires : Citadel. La publication du code source du malware Zeus a rendu possible la création de nouveaux malwares bancaires, et Citadel fait partie de ceux-ci. L'une de ses particularités est la 



DERNIERE MINUTE :




Ca bouge au pays du .fr(omage) : l'AFNIC, registre en charge de l'extension ".fr" continue sa révolution, suite à la loi du 22 mars et son décret paru le 1er août 2011.
Les plugins SpyEye, c'est un peu comme les pokemons, il y en a beaucoup, tous ne sont pas utiles, mais on a envie de tous les collectionner.













L'outil Htran a récemment été utilisé dans plusieurs cyberattaques, dont 











Depuis maintenant près d'un an, il est apparu que certains groupes utilisant le malware bancaire ZeuS infectaient également les mobiles de leurs victimes, afin de leur dérober les SMS de confirmation envoyés par la banque en cas de tentative de virement. Les premières versions impactaient Symbian et Blackberry, puis Windows Mobile. Le malware mobile a été baptisé ZITMO, pour Zeus In The MObile.

Une des différences les plus connues entre les systèmes de fichiers EXT2 et EXT3 est que ce dernier utilise un journal pour stocker ses transactions, facilitant grandement la récupération du système de fichiers en cas, par exemple, de coupure électrique. Dans le cadre de la