Comment protéger les applications mobiles?
-
Upload
marie-claire-willig -
Category
Technology
-
view
9.805 -
download
0
Transcript of Comment protéger les applications mobiles?
Comment protéger les applications mobiles?
Marie-Claire Willig
Moi
Icon made by Freepik from www.flaticon.com
Table des matières
Vulnérabilités communes
iOS
Android
Cas pratiques
Checklist
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
Stockage non sécuritaire des données
Obtention de données sensibles dans les fichiers d’application
Stockage non sécuritaire des données
.plist
Stockage non sécuritaire des données
Stockage non sécuritaire des données
NSUserDefaults
Stockage non sécuritaire des données
Stockage non sécuritaire des données
Stockage non sécuritaire des données
Stockage non sécuritaire des données
Stockage non sécuritaire des données
Vol de données par une autre application
Énumération des users
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
Stockage non sécuritaire des données
Chiffrer les données en utilisant la librairie ’javax.crypto’ (cf. Mauvaise gestion de la cryptographie)
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
Fuite de donnéesOù spécifiquement?
Mise en arrière-plan de l’application
Fuite de donnéesOù spécifiquement?
Mise en arrière-plan de l’application
Fuite de donnéesOù spécifiquement?
Cache copier/coller
http://www.cis.syr.edu/~wedu/Research/paper/clipboard_attack_dimva2014.pdf
Fuite de donnéesOù spécifiquement?
Cache copier/coller: manipulation
http://www.cis.syr.edu/~wedu/Research/paper/clipboard_attack_dimva2014.pdf
Fuite de donnéesOù spécifiquement?
Cache copier/coller: vol de données
Fuite de données
Fuite de données
Fuite de donnéesOù spécifiquement?
Cache URL
Fuite de donnéesOù spécifiquement?
Cache presse-papiers
UITextField *textField = [ [ UITextField alloc ] initWithFrame: frame ]; textField.autocorrectionType = UITextAutocorrectionTypeNo;
Fuite de donnéesOù spécifiquement?
Journalisation Stockage des données HTML5 Cookie Données envoyées à des applications tierces
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
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
Mauvaise gestion de la cryptographie
Mauvaise gestion de la cryptographie
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
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….
Injection côté client
Bypass du login
Injection côté clientAttaque XSS: vol de données
Injection côté clientAttaque XSS: vol de données
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)
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
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
Décisions de sécurité avec des entrées non approuvées
Lecture_donnees
Ecriture_donnees
IPC (Inter Process Communication)
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:
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
Décisions de sécurité avec des entrées non approuvées
IPC effectuée via l’interface Binder et les Intent
Décisions de sécurité avec des entrées non approuvées
Décisions de sécurité avec des entrées non approuvées
Décisions de sécurité avec des entrées non approuvées
Décisions de sécurité avec des entrées non approuvées
Décisions de sécurité avec des entrées non approuvées
Hijack d’activités: implicit intent
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
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
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
Manque de protection du binaireRétro-ingénierie: dex2jar
Manque de protection du binaireRétro-ingénierie: IDA
Manque de protection du binaireAnalyse en temps réel: ADB
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
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
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
Contrôle faible côté serveur
Protection insuffisante des données en transit
Mauvaise gestion de la session
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
Contrôle faible côté serveurBurp
Protection insuffisante des données en transit
Non protection du trafic réseau
SSL/TLS
Vol de données: cookies, données sensibles…
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
Mauvaise gestion de la sessionRésulte à de l’usurpation d’identité
Hi Glen
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
Ma checklist
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?
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?
Ma boite à outils
iExplorer
PhoneView
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