Cette présentation vous présentera les vulnérabilités les plus communes sur les appareils mobiles. Elle détaillera entre autres comment stocker sécuritairement les données de l’application mobile en transport et stockage ainsi que protéger l’application au mieux des attaques externes. Des outils simples vous seront donnés pour détecter ces vulnérabilités.
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
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
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
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….
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
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
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
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
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
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
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?