Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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.

OWASP Montréal

May 18, 2016
Tweet

More Decks by OWASP Montréal

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

  4. View Slide

  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

    View Slide

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

    View Slide

  7. Stockage non sécuritaire des
    données
    .plist

    View Slide

  8. Stockage non sécuritaire des
    données

    View Slide

  9. View Slide

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

    View Slide

  11. Stockage non sécuritaire des
    données

    View Slide

  12. Stockage non sécuritaire des
    données

    View Slide

  13. Stockage non sécuritaire des
    données

    View Slide

  14. Stockage non sécuritaire des
    données

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  24. Fuite de données

    View Slide

  25. Fuite de données

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

  31. Mauvaise gestion de la
    cryptographie

    View Slide

  32. Mauvaise gestion de la
    cryptographie

    View Slide

  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

    View Slide

  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….

    View Slide

  35. Injection côté client
    Bypass du login

    View Slide

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

    View Slide

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

    View Slide

  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)

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

  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:

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide

  61. Contrôle faible côté serveur
    Burp

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide

  66. Ma checklist

    View Slide

  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?

    View Slide

  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?

    View Slide

  69. Ma boite à outils

    View Slide

  70. iExplorer
    PhoneView

    View Slide

  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

    View Slide

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

    View Slide