Comment protéger les applications mobiles

Comment protéger les applications mobiles

Dans le cadre des Midis Conférence à l'Espace Desjardins, l'équipe OWASP Montréal vous invite à assister à une présentation sur les vulnérabilités les plus communes associées aux appareils mobiles. Marie-Claire Willig détaillera entre autres comment stocker de façon sécuritaire les données de l’application mobile ainsi que protéger l’application contre des attaques externes. Des outils simples vous seront dévoilés pour détecter ces vulnérabilités. Marie-Claire est une professionnelle d'expérience en sécurité appliquée. Une grande partie de son intérêt professionnel réside actuellement dans un domaine assez niche, soit la revue de code sécuritaire, un fondement important de tout cycle de développement sécuritaire en entreprise. Au sein de l'équipe de sécurité technologique Desjardins, elle est, en autre, responsable de former les développeurs (Java et .NET principalement) afin de les sensibiliser aux meilleures pratiques de développement sécuritaire. Également, elle est une professionnelle des tests d'intrusion sur les applications web, les applications mobiles ainsi que l'infrastructure réseau.

09905cce02942fb076f958f4b69fd8f6?s=128

OWASP Montréal

May 18, 2016
Tweet

Transcript

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

  2. Moi Icon made by Freepik from www.flaticon.com

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

  4. None
  5. 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
  6. Stockage non sécuritaire des données Obtention de données sensibles dans

    les fichiers d’application
  7. Stockage non sécuritaire des données .plist

  8. Stockage non sécuritaire des données

  9. None
  10. Stockage non sécuritaire des données NSUserDefaults

  11. Stockage non sécuritaire des données

  12. Stockage non sécuritaire des données

  13. Stockage non sécuritaire des données

  14. Stockage non sécuritaire des données

  15. Stockage non sécuritaire des données Vol de données par une

    autre application Énumération des users
  16. 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
  17. Stockage non sécuritaire des données Chiffrer les données en utilisant

    la librairie ’javax.crypto’ (cf. Mauvaise gestion de la cryptographie)
  18. 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
  19. Fuite de données Où spécifiquement? Mise en arrière-plan de l’application

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

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

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

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

  24. Fuite de données

  25. Fuite de données

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

  27. Fuite de données Où spécifiquement? Cache presse-papiers UITextField *textField =

    [ [ UITextField alloc ] initWithFrame: frame ]; textField.autocorrectionType = UITextAutocorrectionTypeNo;
  28. Fuite de données Où spécifiquement? Journalisation Stockage des données HTML5

    Cookie Données envoyées à des applications tierces
  29. 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
  30. 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
  31. Mauvaise gestion de la cryptographie

  32. Mauvaise gestion de la cryptographie

  33. 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
  34. 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….
  35. Injection côté client Bypass du login

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

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

  38. 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)
  39. 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
  40. 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
  41. Décisions de sécurité avec des entrées non approuvées Lecture_donnees Ecriture_donnees

    IPC (Inter Process Communication)
  42. 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:
  43. 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
  44. Décisions de sécurité avec des entrées non approuvées IPC effectuée

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

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

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

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

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

    implicit intent
  50. 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
  51. 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
  52. 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
  53. Manque de protection du binaire Rétro-ingénierie: dex2jar

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

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

  56. 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
  57. 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
  58. 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
  59. Contrôle faible côté serveur Protection insuffisante des données en transit

    Mauvaise gestion de la session
  60. 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
  61. Contrôle faible côté serveur Burp

  62. Protection insuffisante des données en transit Non protection du trafic

    réseau SSL/TLS Vol de données: cookies, données sensibles…
  63. 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
  64. Mauvaise gestion de la session Résulte à de l’usurpation d’identité

    Hi Glen
  65. 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
  66. Ma checklist

  67. 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?
  68. 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?
  69. Ma boite à outils

  70. iExplorer PhoneView

  71. 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
  72. @mcwww_nz http:/ /www.slideshare.net/MarieClaireWillig