Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

Moi Icon made by Freepik from www.flaticon.com

Slide 3

Slide 3 text

Table des matières Vulnérabilités communes iOS Android Cas pratiques Checklist

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

Stockage non sécuritaire des données Obtention de données sensibles dans les fichiers d’application

Slide 7

Slide 7 text

Stockage non sécuritaire des données .plist

Slide 8

Slide 8 text

Stockage non sécuritaire des données

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

Stockage non sécuritaire des données NSUserDefaults

Slide 11

Slide 11 text

Stockage non sécuritaire des données

Slide 12

Slide 12 text

Stockage non sécuritaire des données

Slide 13

Slide 13 text

Stockage non sécuritaire des données

Slide 14

Slide 14 text

Stockage non sécuritaire des données

Slide 15

Slide 15 text

Stockage non sécuritaire des données Vol de données par une autre application Énumération des users

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

Fuite de données Obtention de données sensibles par l’intermédiaire d’autres applications malicieuses En lien avec l’OS, le framework, l’environnement de compilation

Slide 19

Slide 19 text

Fuite de données Où spécifiquement? Mise en arrière-plan de l’application

Slide 20

Slide 20 text

Fuite de données Où spécifiquement? Mise en arrière-plan de l’application

Slide 21

Slide 21 text

Fuite de données Où spécifiquement? Cache copier/coller http:/ /www.cis.syr.edu/~wedu/Research/paper/clipboard_attack_dimva2014.pdf

Slide 22

Slide 22 text

Fuite de données Où spécifiquement? Cache copier/coller: manipulation http:/ /www.cis.syr.edu/~wedu/Research/paper/clipboard_attack_dimva2014.pdf

Slide 23

Slide 23 text

Fuite de données Où spécifiquement? Cache copier/coller: vol de données

Slide 24

Slide 24 text

Fuite de données

Slide 25

Slide 25 text

Fuite de données

Slide 26

Slide 26 text

Fuite de données Où spécifiquement? Cache URL

Slide 27

Slide 27 text

Fuite de données Où spécifiquement? Cache presse-papiers UITextField *textField = [ [ UITextField alloc ] initWithFrame: frame ]; textField.autocorrectionType = UITextAutocorrectionTypeNo;

Slide 28

Slide 28 text

Fuite de données Où spécifiquement? Journalisation Stockage des données HTML5 Cookie Données envoyées à des applications tierces

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

Mauvaise gestion de la cryptographie

Slide 32

Slide 32 text

Mauvaise gestion de la cryptographie

Slide 33

Slide 33 text

Mauvaise gestion de la cryptographie Mitigation Ne pas stocker des clés sur l’application binaire Utiliser des algorithmes approuvés et sécuritaires http:/ /www.nist.gov/customcf/get_pdf.cfm?pub_id=910342 DES MD5 AES 256 SHA512

Slide 34

Slide 34 text

Injection côté client Donné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….

Slide 35

Slide 35 text

Injection côté client Bypass du login

Slide 36

Slide 36 text

Injection côté client Attaque XSS: vol de données

Slide 37

Slide 37 text

Injection côté client Attaque XSS: vol de données

Slide 38

Slide 38 text

Injection côté client Attaque via script entre application: injection de code malicieux Injection du binaire pendant l’exécution (cf. Manque de protection du binaire)

Slide 39

Slide 39 text

Injection côté client Mitigation 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

Slide 40

Slide 40 text

Injection côté client Mitigation mWebView.getSettings().setAllowFileAccess(false); Valider toutes les entrées utilisateurs pour les appels NSFileManager Inclusion de fichiers locaux (/etc/passwd) Injection XML: Utiliser libXML2

Slide 41

Slide 41 text

Décisions de sécurité avec des entrées non approuvées Lecture_donnees Ecriture_donnees IPC (Inter Process Communication)

Slide 42

Slide 42 text

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:

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

Décisions de sécurité avec des entrées non approuvées IPC effectuée via l’interface Binder et les Intent

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

Décisions de sécurité avec des entrées non approuvées Hijack d’activités: implicit intent

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

Manque de protection du binaire Problé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

Slide 53

Slide 53 text

Manque de protection du binaire Rétro-ingénierie: dex2jar

Slide 54

Slide 54 text

Manque de protection du binaire Rétro-ingénierie: IDA

Slide 55

Slide 55 text

Manque de protection du binaire Analyse en temps réel: ADB

Slide 56

Slide 56 text

Manque de protection du binaire Analyse 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

Slide 57

Slide 57 text

Manque de protection du binaire Mitigation 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

Slide 58

Slide 58 text

Manque de protection du binaire Mitigation 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

Slide 59

Slide 59 text

Contrôle faible côté serveur Protection insuffisante des données en transit Mauvaise gestion de la session

Slide 60

Slide 60 text

Contrôle faible côté serveur Insertion de contenu malicieux via l’interface mobile https:/ /www.owasp.org/index.php/ Category:OWASP_Top_Ten_Project#tab=OWASP_Top_10_for_2013

Slide 61

Slide 61 text

Contrôle faible côté serveur Burp

Slide 62

Slide 62 text

Protection insuffisante des données en transit Non protection du trafic réseau SSL/TLS Vol de données: cookies, données sensibles…

Slide 63

Slide 63 text

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

Slide 64

Slide 64 text

Mauvaise gestion de la session Résulte à de l’usurpation d’identité Hi Glen

Slide 65

Slide 65 text

Mauvaise gestion de la session Mitigation 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ée Créer des jetons aléatoires et non prévisibles

Slide 66

Slide 66 text

Ma checklist

Slide 67

Slide 67 text

Est-ce que mon application stocke des données sensibles en clair? Est-ce que d’autres applications peuvent voler/modifier des 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?

Slide 68

Slide 68 text

Est-ce que mon serveur gère correctement les entrées du mobile? Es t-ce q ue me s do n née s transitent en clair? Est-ce que mon serveur gère adéquatement les sessions?

Slide 69

Slide 69 text

Ma boite à outils

Slide 70

Slide 70 text

iExplorer PhoneView

Slide 71

Slide 71 text

Références OWASP 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

Slide 72

Slide 72 text

@mcwww_nz http:/ /www.slideshare.net/MarieClaireWillig