Comment protéger les applications mobiles?

72
Comment protéger les applications mobiles? Marie-Claire Willig

Transcript of Comment protéger les applications mobiles?

Page 1: Comment protéger les applications mobiles?

Comment protéger les applications mobiles?

Marie-Claire Willig

Page 2: Comment protéger les applications mobiles?

Moi

Icon made by Freepik from www.flaticon.com

Page 3: Comment protéger les applications mobiles?

Table des matières

Vulnérabilités communes

iOS

Android

Cas pratiques

Checklist

Page 4: Comment protéger les applications mobiles?
Page 5: Comment protéger les applications mobiles?

Stockage non sécuritaire de données

Fuite de données

Mauvaise gestion de la cryptographie

Injection côté client

Décisions de sécurité avec des entrées non approuvées

Manque de protection du binaire

Page 6: Comment protéger les applications mobiles?

Stockage non sécuritaire des données

Obtention de données sensibles dans les fichiers d’application

Page 7: Comment protéger les applications mobiles?

Stockage non sécuritaire des données

.plist

Page 8: Comment protéger les applications mobiles?

Stockage non sécuritaire des données

Page 9: Comment protéger les applications mobiles?
Page 10: Comment protéger les applications mobiles?

Stockage non sécuritaire des données

NSUserDefaults

Page 11: Comment protéger les applications mobiles?

Stockage non sécuritaire des données

Page 12: Comment protéger les applications mobiles?

Stockage non sécuritaire des données

Page 13: Comment protéger les applications mobiles?

Stockage non sécuritaire des données

Page 14: Comment protéger les applications mobiles?

Stockage non sécuritaire des données

Page 15: Comment protéger les applications mobiles?

Stockage non sécuritaire des données

Vol de données par une autre application

Énumération des users

Page 16: Comment protéger les applications mobiles?

Stockage non sécuritaire des données

Mitigation:Éviter de stocker des données confidentielles sur l’appareil mobile

Si obligatoire, chiffrer ces données

Utiliser le KeyChain

Utiliser SQLCipher for DB

Page 17: Comment protéger les applications mobiles?

Stockage non sécuritaire des données

Chiffrer les données en utilisant la librairie ’javax.crypto’ (cf. Mauvaise gestion de la cryptographie)

Page 18: Comment protéger les applications mobiles?

Fuite de donnéesObtention de données sensibles par l’intermédiaire d’autres applications malicieuses

En lien avec l’OS, le framework, l’environnement de compilation

Page 19: Comment protéger les applications mobiles?

Fuite de donnéesOù spécifiquement?

Mise en arrière-plan de l’application

Page 20: Comment protéger les applications mobiles?

Fuite de donnéesOù spécifiquement?

Mise en arrière-plan de l’application

Page 21: Comment protéger les applications mobiles?

Fuite de donnéesOù spécifiquement?

Cache copier/coller

http://www.cis.syr.edu/~wedu/Research/paper/clipboard_attack_dimva2014.pdf

Page 22: Comment protéger les applications mobiles?

Fuite de donnéesOù spécifiquement?

Cache copier/coller: manipulation

http://www.cis.syr.edu/~wedu/Research/paper/clipboard_attack_dimva2014.pdf

Page 23: Comment protéger les applications mobiles?

Fuite de donnéesOù spécifiquement?

Cache copier/coller: vol de données

Page 24: Comment protéger les applications mobiles?

Fuite de données

Page 25: Comment protéger les applications mobiles?

Fuite de données

Page 26: Comment protéger les applications mobiles?

Fuite de donnéesOù spécifiquement?

Cache URL

Page 27: Comment protéger les applications mobiles?

Fuite de donnéesOù spécifiquement?

Cache presse-papiers

UITextField *textField = [ [ UITextField alloc ] initWithFrame: frame ]; textField.autocorrectionType = UITextAutocorrectionTypeNo;

Page 28: Comment protéger les applications mobiles?

Fuite de donnéesOù spécifiquement?

Journalisation Stockage des données HTML5 Cookie Données envoyées à des applications tierces

Page 29: Comment protéger les applications mobiles?

Fuite de donnéesMitigation

Vérifier comment l’OS, framework… gère les données, particulièrement lorsqu’il s’agit de données sensibles

Page 30: Comment protéger les applications mobiles?

Mauvaise gestion de la cryptographie

Déchiffrement des données

Mauvaise gestion des clés de chiffrement

Clés disponibles à l’attaquant

Chiffrement maison

Algorithme de chiffrement précaire

Page 31: Comment protéger les applications mobiles?

Mauvaise gestion de la cryptographie

Page 32: Comment protéger les applications mobiles?

Mauvaise gestion de la cryptographie

Page 33: Comment protéger les applications mobiles?

Mauvaise gestion de la cryptographie

MitigationNe pas stocker des clés sur l’application binaireUtiliser des algorithmes approuvés et sécuritaireshttp://www.nist.gov/customcf/get_pdf.cfm?pub_id=910342

DES

MD5

AES 256

SHA512

Page 34: Comment protéger les applications mobiles?

Injection côté clientDonnées non validées envoyées afin de voler, modifier des données de l’application

Injection SQL

Injection de malware, vol de données….

Page 35: Comment protéger les applications mobiles?

Injection côté client

Bypass du login

Page 36: Comment protéger les applications mobiles?

Injection côté clientAttaque XSS: vol de données

Page 37: Comment protéger les applications mobiles?

Injection côté clientAttaque XSS: vol de données

Page 38: Comment protéger les applications mobiles?

Injection côté clientAttaque via script entre application: injection de code malicieux

Injection du binaire pendant l’exécution (cf. Manque de protection du binaire)

Page 39: Comment protéger les applications mobiles?

Injection côté clientMitigation

Injection JavaScript (XSS…):

Injection SQL: utilisation de requête paramétrée (prepared statement)

mWebView.getSettings().setJavaScriptEnabled(false);

Valider toutes les entrées utilisateurs pour les appels UIWebView

Page 40: Comment protéger les applications mobiles?

Injection côté clientMitigation

mWebView.getSettings().setAllowFileAccess(false);

Valider toutes les entrées utilisateurs pour les appels NSFileManager

Inclusion de fichiers locaux (/etc/passwd)

Injection XML:Utiliser libXML2

Page 41: Comment protéger les applications mobiles?

Décisions de sécurité avec des entrées non approuvées

Lecture_donnees

Ecriture_donnees

IPC (Inter Process Communication)

Page 42: Comment protéger les applications mobiles?

Décisions de sécurité avec des entrées non approuvées

(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url

URLScheme App

mailto:

maps:

sms:

fb:

skype:

Page 43: Comment protéger les applications mobiles?

Décisions de sécurité avec des entrées non approuvées

En 2010, il était possible de forcer des appels arbitraires

skype://5140001337?call

handleOpenURL est obsolète à partir de iOS 4.2

Page 44: Comment protéger les applications mobiles?

Décisions de sécurité avec des entrées non approuvées

IPC effectuée via l’interface Binder et les Intent

Page 45: Comment protéger les applications mobiles?

Décisions de sécurité avec des entrées non approuvées

Page 46: Comment protéger les applications mobiles?

Décisions de sécurité avec des entrées non approuvées

Page 47: Comment protéger les applications mobiles?

Décisions de sécurité avec des entrées non approuvées

Page 48: Comment protéger les applications mobiles?

Décisions de sécurité avec des entrées non approuvées

Page 49: Comment protéger les applications mobiles?

Décisions de sécurité avec des entrées non approuvées

Hijack d’activités: implicit intent

Page 50: Comment protéger les applications mobiles?

Décisions de sécurité avec des entrées non approuvées

Mitigation

Utiliser openURL:sourceApplication:annotation

Ne pas utiliser handleOpenURL

Valider les applications via une liste blanche

Ne pas utiliser iOS Pasteboard car susceptible d’être lue par les autres applications

Page 51: Comment protéger les applications mobiles?

Décisions de sécurité avec des entrées non approuvées

Mitigation

android:exported=false dans le Manifest

Ne pas utiliser des broadcast intent si données sensibles

Page 52: Comment protéger les applications mobiles?

Manque de protection du binaireProblématique

Rétro-ingénierie de l’application

Modification de l’application pour utilisation de fonctionnalités cachées

Vol de données Vol de propriété intellectuelle

Page 53: Comment protéger les applications mobiles?

Manque de protection du binaireRétro-ingénierie: dex2jar

Page 54: Comment protéger les applications mobiles?

Manque de protection du binaireRétro-ingénierie: IDA

Page 55: Comment protéger les applications mobiles?

Manque de protection du binaireAnalyse en temps réel: ADB

Page 56: Comment protéger les applications mobiles?

Manque de protection du binaireAnalyse en temps réel: GDB

Changer le code durant l’exécution de l’application

Accéder à des fonctions cachées

Escalade de privilèges

Page 57: Comment protéger les applications mobiles?

Manque de protection du binaireMitigation

Contrôle pour le checksum de l’application

Contrôle de détection de jailbreak

Contrôle pour le ‘pinning’ du certificat

Contrôle pour la détection du mode debug

Page 58: Comment protéger les applications mobiles?

Manque de protection du binaireMitigation

Intégrer des mécanismes d’intégrité de l’application

Protéger le code pour éviter le vol de propriété intellectuelle: obfuscation par exemple

Page 59: Comment protéger les applications mobiles?

Contrôle faible côté serveur

Protection insuffisante des données en transit

Mauvaise gestion de la session

Page 60: Comment protéger les applications mobiles?

Contrôle faible côté serveurInsertion de contenu malicieux via l’interface mobile

https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project#tab=OWASP_Top_10_for_2013

Page 61: Comment protéger les applications mobiles?

Contrôle faible côté serveurBurp

Page 62: Comment protéger les applications mobiles?

Protection insuffisante des données en transit

Non protection du trafic réseau

SSL/TLS

Vol de données: cookies, données sensibles…

Page 63: Comment protéger les applications mobiles?

Protection insuffisante des données en transit

Mitigation

Utiliser des certificats signés par une autorité de confiance

Utiliser SSL/TLS pour toutes les communications

Avertir l’utilisateur si certificat invalide

Page 64: Comment protéger les applications mobiles?

Mauvaise gestion de la sessionRésulte à de l’usurpation d’identité

Hi Glen

Page 65: Comment protéger les applications mobiles?

Mauvaise gestion de la sessionMitigation

Configurer une désactivation de la session après une durée adéquate (entre 15 min et 1h)

Invalider la session du côté mobile ET côté serveur

Un cookie d’une ancienne session ne peut plus être réutiliséeCréer des jetons aléatoires et non prévisibles

Page 66: Comment protéger les applications mobiles?

Ma checklist

Page 67: Comment protéger les applications mobiles?

Est-ce que mon application stocke des données sensibles en clair?

Est-ce que d’autres applications peu vent vo le r/modifier de s données de mon application?

Est-ce que mon application utiliser des algorithmes de chiffrement sécuritaires?

Est-ce que mon application est vulnérable aux injections?

Est-ce que mon application possède des mécanismes de protection niveau binaire?

Page 68: Comment protéger les applications mobiles?

Est-ce que mon serveur gère correctement les entrées du mobile?

Es t- c e q u e me s d o n née s transitent en clair?

Est-ce que mon serveur gère adéquatement les sessions?

Page 69: Comment protéger les applications mobiles?

Ma boite à outils

Page 70: Comment protéger les applications mobiles?

iExplorer

PhoneView

Page 71: Comment protéger les applications mobiles?

RéférencesOWASP Mobile Security Project: https://www.owasp.org/index.php/OWASP_Mobile_Security_Project#tab=Top_10_Mobile_Risks

https://www.nowsecure.com/resources/secure-mobile-development/

http://www.irongeek.com/i.php?page=videos/bsideslasvegas2014/pg10-ios-url-schemes-omg-guillaume-k-ross

Page 72: Comment protéger les applications mobiles?

@mcwww_nz

http://www.slideshare.net/MarieClaireWillig