36
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

ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger

Embed Size (px)

DESCRIPTION

Les plateformes mobiles prolifèrent et sont maintenant utilisées pour accéder à toutes sortes de données, dont certaines assez sensibles (par exemple bancaires). Les Smartphones deviennent logiquement une cible pour les “hackers”. La plateforme Android largement majoritaire, n’a pas été initialement conçue en mettant en avant la sécurité, ce que Google tente peu à peu de corriger. Les menaces sur le système Android sont nombreuses. En particulier, les applications développées en Java puis ensuite distribuées sous forme de bytecode offrent peu de résistance au “reverse engineering” et les solutions d’obfuscation (comme Proguard) restent limitées. Dans le même temps, la publication d’applications sur le Google Play Store n’est pas soumise à validation comme par exemple dans l’Apple Store. Les applications mal intentionnées ne sont retirées qu’après coup. Dans ce contexte, les hackers peuvent alors tranquillement étudier le comportement interne d’une application, la copier, lui injecter du code malicieux, la republier puis attendre qu’elle opère jusqu’à ce qu’elle soit retirée. Si les mécanismes de sécurité Android sont encore incomplets, l’ouverture de la plateforme offre, en revanche, de nouvelles possibilités très intéressantes. En utilisant judicieusement ces dernières, il devient possible de diminuer drastiquement la surface d’attaque, notamment dans le contexte de la menace précitée. La présentation décrira et illustrera la liste de mesures que nous avons mises en oeuvre pour protéger notre application d’authentification forte. Nous montrerons dans notre exposé comment obtenir une application unique pour chaque utilisateur et comment la lier fortement au hardware de manière à rendre la copie et la modification fortement improbables. Les techniques que nous présenterons sont innovantes et encore peu utilisées… mis à part par certains malwares avancés.

Citation preview

Page 1: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger

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

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

Agenda

Android

Menaces

Protections

Conclusion

3

Page 4: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger

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

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

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

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

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

Agenda

Android

Menaces

Protections

Conclusion

9

Page 10: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger

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

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

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

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

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

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

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

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

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

Agenda

Android

Menaces

Protections

Conclusion

19

Page 20: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger

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

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

Proguard (avec / sans)

22

Page 23: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger

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

Java

24

Android NDK - Exemple

C 0110101

Page 25: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger

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

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

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

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

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

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

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

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

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

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 35: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger

Questions?

35

[email protected]

Page 36: ASFWS 2012 - Le développement d’applications sécurisées avec Android par Johan Leuenberger

Merci/Thank you!

Contact:

[email protected]

http://www.secutalk.ch

Slides: http://slideshare.net/ASF-WS/presentations

36