ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger
-
Upload
application-security-forum-western-switzerland -
Category
Documents
-
view
503 -
download
2
description
Transcript of ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger
![Page 1: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/1.jpg)
Application Security Forum - 2012 Western Switzerland
7-8 novembre 2012 - Y-Parc / Yverdon-les-Bains https://www.appsec-forum.ch
Développement sécurisé Android
Johan Leuenberger
Software Security Engineer
![Page 2: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/2.jpg)
Bio
Software security engineer chez ELCA
Spécialisé dans le développement Android
Réalisation d’elcardm Android
– Solution d’authentification forte sur smartphone
« Android Fanboy »
2
![Page 3: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/3.jpg)
Agenda
Android
Menaces
Protections
Conclusion
3
![Page 4: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/4.jpg)
Android facts
4
http://developer.android.com/about/index.html
1 million de nouveaux appareils Android chaque jour.
1.5 milliard d’applications téléchargées chaque mois
700’000 applications disponibles
https://www.lookout.com/resources/reports/state-of-mobile-security-2012
![Page 5: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/5.jpg)
Applications en tous genres
5
Jeux
Divers
Finances
![Page 6: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/6.jpg)
Applications en tous genres
6
Jeux
Divers
Finances
![Page 7: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/7.jpg)
Applications en tous genres
7
Jeux
Divers
Finances
![Page 8: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/8.jpg)
Applications en tous genres
8
Jeux
Divers
Finances
![Page 9: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/9.jpg)
Agenda
Android
Menaces
Protections
Conclusion
9
![Page 10: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/10.jpg)
Menaces
Reverse engineering
Abus du Google Play Store
Copie de l’application
Vol d’informations (mot de passe, etc)
10
![Page 11: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/11.jpg)
Scénario
1) Récupération d’une application existante et décompilation
2) Ajout de fonctionnalités
3) Packaging de la nouvelle application
4) Publication de l’application sur le Google Play Store
11
![Page 12: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/12.jpg)
Reverse engineering - outils
12
adb communication avec un appareil Android
dex2jar Java Decompiler ~ .java
apktool .smali
APK – Android Application Package File
classes.dex classes compilées
resources.arsc + res resources
AndroidManifest.xml fichier décrivant l’application
…
Outils
![Page 13: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/13.jpg)
Reverse engineering - smali
13
.class public LHelloWorld;
.super Ljava/lang/Object;
.method public static main([Ljava/lang/String;)V
.registers 2
sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
const-string v1, "Hello World!"
invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
return-void
.end method
![Page 14: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/14.jpg)
Reverse engineering - Demo
Modification d’une application afin de récupérer le compte et le mot de passe d’un utilisateur
14
![Page 15: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/15.jpg)
Reverse engineering – SMS Receiver
AndroidManifest.xml
15
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<receiver android:name="ch.elca.appsec.SmsReceiver" android:enabled="true"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver>
![Page 16: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/16.jpg)
Reverse engineering – SMS Receiver
SmsReceiver
16
public class SmsReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Bundle pudsBundle = intent.getExtras(); Object[] pdus = (Object[]) pudsBundle.get("pdus"); SmsMessage messages = SmsMessage.createFromPdu((byte[]) pdus[0]); String smsText = messages.getMessageBody(); forwardToServer(smsText); }
![Page 17: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/17.jpg)
Abus du Google Play Store
Les applications sont «self-signed»
Publication aisée
Validation pré-publication
– Google Bouncer (BH2012 Bypassing Google’s Bouncer)
Retrait post-publication
– Remote removal
17
![Page 18: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/18.jpg)
Vol de données
Pas de keystore
Application sandbox
– Faillible au root
Carte SD
18
![Page 19: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/19.jpg)
Agenda
Android
Menaces
Protections
Conclusion
19
![Page 20: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/20.jpg)
Protections
20
obfuscation module natif
externe clé
dynamique
reverse engineering
exposition Store
copie de l’application
données
![Page 21: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/21.jpg)
Pas de solution miracle!
– Rendons la vie difficile!
Etape 0 – Activer Proguard
21
proguard.config=default_proguard.cfg
10 sec
Reverse engineering
![Page 22: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/22.jpg)
Proguard (avec / sans)
22
![Page 23: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/23.jpg)
Module natif
Android NDK (Native Development Kit)
– Code natif exécutable sous Android
– Basé sur JNI (Java Native Interface)
– Code accessible sous forme binaire uniquement
– Code binaire peut également être obfusqué
Comment ca marche?
– Code écrit en C / C++
– Compilé via les outils fournis par Google (ndk-build)
=> libMyModule.so
23
![Page 24: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/24.jpg)
Java
24
Android NDK - Exemple
C 0110101
![Page 25: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/25.jpg)
Android NDK C
25
jbyteArray Java_ch_elca_appsec_NativeCaller_decrypt(JNIEnv* env, jobject this, jobject context, jbyteArray data) { ... deviceId = getDeviceId(context); ... clearData = decrypt(deviceId, data); jbyteArray result = (*env)->NewByteArray(env, len); (*env)->SetByteArrayRegion(env, result, 0, len, clearData); return result; } jstring getDeviceId(JNIEnv* env, jobject context) { jstring device_id; jmethodID mid = (*env)->GetMethodID(env, (*env)->GetObjectClass(env,context), "getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;"); jobject telephony_manager = (*env)->CallObjectMethod(env, context, mid, (*env)->NewStringUTF(env,"phone")); mid = (*env)->GetMethodID(env,(*env)->GetObjectClass(env,telephony_manager), "getDeviceId", "()Ljava/lang/String;"); device_id = (jstring)(*env)->CallObjectMethod(env,telephony_manager,mid); return device_id; }
C 0110101
![Page 26: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/26.jpg)
La librairie est chargée lors de l’exécution
Elle n’a pas besoin d’être packagée dans l’application
Uniquement disponible aux utilisateurs légitimes
26
Module natif externe
![Page 27: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/27.jpg)
Séparation de l’application
27
coquille
module externe
- Publié sur le Store - Contient le minimum de logique - Contient l’UI
- Téléchargé durant l’exécution de l’application - Compilé à la volée sur un serveur - Unique par utilisateur et par appareil
![Page 28: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/28.jpg)
28
!(Reverse engineering + copie)
Empreinte hardware
Compilation
Obfuscation Module (format binaire)
Installation du module
Mot de passe utilisateur Génération du module
![Page 29: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/29.jpg)
Clé dynamique anti-copie
29
Client Serveur Secret initial partagé: s0
r0 = random() f(r0, s0) = s1 encrypt(m1,s1) = c1
r0, c1 f(r0, s0) = s1 decrypt(c1, s1) = m1
r1 = random() f(r1, s1) = s2 encrypt(m2,s2) = c2
r1, c2
f(r1, s1) = s2 decrypt(c2, s2) = m2
![Page 30: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/30.jpg)
Clé dynamique anti-copie
30
Client Serveur Client copié
s1 s1
s1 s2 s2
![Page 31: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/31.jpg)
Clé dynamique anti-copie
31
Client Serveur Client copié
s1 s1 s1
s2 s2 s1
ERROR
![Page 32: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/32.jpg)
Protections
32
obfuscation module natif
externe clé
dynamique
reverse engineering
exposition Store
copie de l’application
données
![Page 33: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/33.jpg)
Conclusion
Beaucoup de possibilités
– QR Code
– Push GCM
– GPS
– Etc.
Android évolue constamment
– Chaque version essaie de corriger certaines vulnérabilités
33
![Page 34: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/34.jpg)
Conclusion
Le port d’une application sur Android n’est généralement pas direct (par exemple à partir d’une application iPhone) un certain raisonnement est nécessaire
Le développement d’applications sécurisées demande du temps et de l’effort
34
![Page 36: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger](https://reader034.fdocument.pub/reader034/viewer/2022052619/555a86e1d8b42a98568b515e/html5/thumbnails/36.jpg)
Merci/Thank you!
Contact:
http://www.secutalk.ch
Slides: http://slideshare.net/ASF-WS/presentations
36