OCTO - DroidCon - PKI Android : Installer, gérer, sécuriser et utiliser un secret
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

OCTO - DroidCon - PKI Android : Installer, gérer, sécuriser et utiliser un secret

on

  • 2,270 views

Comment installer, gérer, sécuriser et utiliser une clef privée ? Comment partager une clef privée entres applications? Comment résister au vol du téléphone? Via des API cachées, des ...

Comment installer, gérer, sécuriser et utiliser une clef privée ? Comment partager une clef privée entres applications? Comment résister au vol du téléphone? Via des API cachées, des scénarios originaux et autres subtilités.

Statistics

Views

Total Views
2,270
Views on SlideShare
1,511
Embed Views
759

Actions

Likes
0
Downloads
14
Comments
0

6 Embeds 759

http://blog.appaloosa-store.com 744
http://apaloosa.fr 10
http://cloud.feedly.com 2
https://twitter.com 1
http://www.ranksit.com 1
http://www.apaloosa.fr 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

OCTO - DroidCon - PKI Android : Installer, gérer, sécuriser et utiliser un secret Presentation Transcript

  • 1. 1Tél : +33 (0)1 58 56 10 00Fax : +33 (0)1 58 56 10 01www.octo.com© OCTO 201350, avenue des Champs-Elysées75008 Paris - FRANCEPhilippe PradosAurélien Rambaux17 Juin 2013Installer, gérer, sécuriser et utiliserune clef privée dans Android
  • 2. 2Infrastructure à clés publiquesSauvegarder un certificatPartager un certificatUn scénario possible chez un clientAu menu
  • 3. 3Tél : +33 (0)1 58 56 10 00Fax : +33 (0)1 58 56 10 01www.octo.com© OCTO 201350, avenue des Champs-Elysées75008 Paris - FRANCEQu’est-ce ?Infrastructure à clés publiques (PKI)
  • 4. 4Fichier signé numériquement par une autoritéEquivalent à une carte d’identitéAuthentification sur le mode « je possède »Considéré comme plus sécurisé qu’un mot de passeSert de preuve juridiqueSignature basé sur du chiffrement asymétriqueQu’est-ce qu’un certificat numérique ?
  • 5. 5Ce que je chiffre avec l’un…… je le déchiffre avec l’autreUne clé privée liée à une clé publique
  • 6. 6Objectif d’une PKI :Authentification mutuelle forteConfidentialitéNon-répudiationPour les mobiles :Gérer l’accès à un intranetGérer le vol de mobileInfrastructure à clés publiques (PKI)
  • 7. 7Comment sauver un certificat dans un espace sécurisé dutéléphone ?Comment résister au vol du téléphone ?Comment contrôler l’accès au certificat aux seules applicationsautorisées ?Comment distribuer le certificat aux terminauxDans cette session
  • 8. 8Tél : +33 (0)1 58 56 10 00Fax : +33 (0)1 58 56 10 01www.octo.com© OCTO 201350, avenue des Champs-Elysées75008 Paris - FRANCEComment sauvegarder un secret dans unespace sécurisé du téléphone ?Sauver un secret
  • 9. 9Approche traditionnelleSecure Element (SE)Chiffrement du disqueConteneur de certificats clients AndroidKeyChainKeystoreApproche mise en œuvre en missionComment sauvegarder un secret ?
  • 10. 10Sauvegarder le certificat :Non chiffré sur disqueExploitable par analyse statique de disqueChiffré sur disqueMot de passe à demander encore et encoreUtiliser onSaveIntanceState() ou un extra de l’IntentGestion lourde« Accessible » sur le disqueChiffrer le disque du terminalPas garantiApproche traditionnelle
  • 11. 11SE : composant électronique communiquant via des tramesbinairesDisponible dans le terminal et/ou dans la carte SIMAvantage d’un SE :Mémorise clefs privées, accès VPN, générateurs de mots de passeà usage unique…Résiste aux attaques physiquesImplémente matériellement les algorithmes standards decryptographie (DES, AES, RSA)Secure Element (SE) 1/2
  • 12. 12Accessible via la couche NFC mais …… impossible d’installer des application dans le SE… impossible de communiquer avec par une application classiqueUtilisé par Google WalletSecure Element (SE) 2/2
  • 13. 13Limité à l’identification VPN et Wifi (< sdk 14)Installation depuis la carte SDL’effacement du certificat n’est pas physique !Utilise le KeyStore AndroidConteneur de certificats clients
  • 14. 14Pour les version d’Android supérieur à 14Permet d’exploiter les certificats clients du terminalApproche officielle : KeyChainKeyChain.choosePrivateKeyAlias(this,new KeyChainCallBack() {@Overridepublic void alias(String alias) {mAlias=alias;}},new String[] {"RSA"}, // List of acceptable key types. null for anynull, // issuer, null for any"internal.example.com", // host name of server requesting the cert443, // port of server requesting the cert, -1 if// unavailablenull); // alias to preselect, null if unavailable
  • 15. 15La callback retourne le nom du certificat etautorise l’application à l’utiliserKeyChain…KeyChain.getCertificateChain(this, mAlias);KeyChain.getPrivateKey(this, mAlias);
  • 16. 16Installation via APIKeyChainIntent intent = KeyChain.createInstallIntent();// Controle le nom du certificatintent.putExtra(KeyChain.EXTRA_NAME, CERT_NAME);intent.putExtra(KeyChain.EXTRA_PKCS12, out.toByteArray());startActivityForResult(intent, RESULT_CODE);
  • 17. 17KeyStoreProtégé par un mot de passe utilisateur(version antérieure à 3.x)Lié au verrouillage du téléphone (à partirde la version 3.x)Mais pas d’API officielle !Ça n’empêche pas de jouer avec…
  • 18. 18Récupérer la classe android.security.KeyStoreChanger le nom du packagePour le débloquer :Comment utiliser le KeyStoreput(), get(), byte[]if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {context.startActivity(new Intent("android.credentials.UNLOCK"));} else {context.startActivity(new Intent("com.android.credentials.UNLOCK"));}
  • 19. 19Simulation des API du KeyChain pour les versions antérieures(sdk < 14)Sur GithubLes certificats ne peuvent être partagées entre applicationsExploite le KeyStore https://github.com/pprados/android-keychain-backporthttps://github.com/pprados/android-keychain-backport-androlibandroid-keychain-backport
  • 20. 20Tél : +33 (0)1 58 56 10 00Fax : +33 (0)1 58 56 10 01www.octo.com© OCTO 201350, avenue des Champs-Elysées75008 Paris - FRANCEVia AccountAuthenticatorPartager un certificat
  • 21. 21Proposer un Account pour l’intranetIl porte et distribue la clé privée auxapplications de confianceLe besoin
  • 22. 22<serviceandroid:name=".CertificateAuthenticationService"android:exported="true" ><intent-filter><action android:name="android.accounts.AccountAuthenticator" /></intent-filter><meta-dataandroid:name="android.accounts.AccountAuthenticator"android:resource="@xml/certificate_authenticator" /></service>Le service…
  • 23. 23<account-authenticatorxmlns:android="http://schemas.android.com/apk/res/android"android:accountType="fr.prados.android.account.certificate"android:icon="@drawable/ic_launcher"android:smallIcon="@drawable/ic_launcher"android:label="@string/authenticator_certificate_label“/>La description du compte…
  • 24. 24Normalement utilisé pour du OAuth…… détourné pour communiquer le certificat par lamAccountManagerCallbackUtilisation…mAccountManager.invalidateAuthToken(mAccountType, mAuthToken);mAccountManager.getAuthToken(mAccount, // Account retrieved using getAccountsByType()mAuthTokenType, // Auth scopemOptions, // Authenticator-specific optionsthis, // Your activitymAccountManagerCallback, // CallbackmHandler); // Callback called if an error occursHttpsURLConnection.setDefaultSSLSocketFactory(mSocketFactory);
  • 25. 25Dans getAuthPrivilège de l’appelantpublic static final String KEY_CALLER_UID =(VERSION.SDK_INT>=VERSION_CODES.HONEYCOMB) ?AccountManager.KEY_CALLER_UID : "callerUid";public static final String KEY_CALLER_PID =(VERSION.SDK_INT>=VERSION_CODES.HONEYCOMB) ?AccountManager.KEY_CALLER_PID : "callerPid";if (options == null)return errorDenied();int pid = options.getInt(KEY_CALLER_PID);int uid = options.getInt(KEY_CALLER_UID);if (mContext.checkPermission(PERMISSION, pid, uid) ==PackageManager.PERMISSION_DENIED)return errorDenied();}
  • 26. 26Tél : +33 (0)1 58 56 10 00Fax : +33 (0)1 58 56 10 01www.octo.com© OCTO 201350, avenue des Champs-Elysées75008 Paris - FRANCEUn scénario possible
  • 27. 27Enrôlement de quelques centaines de terminauxGestion des CDDGestion d’oubli des terminauxGrande facilité et souplesse de déploiement sans sacrifier lasécuritéL’expérience utilisateur doit être la plus simple possible !Contraintes de sécurité : un certificat pour un tripletEmployéTéléphone (IMEI)SIMObjectif de la mission
  • 28. 28Enregistrement des triplets dans le SIL’utilisateur saisi son identifiant sur leterminalC’est tout !Il récupère son certificat (clés privée etpublique)Il est protégé et partagé dans le terminalNotre approche
  • 29. 29Requête vers le serveur avec l’identité de l’utilisateurLe serveur génère le certificat et le chiffre avec <IMEI> +<random><random> est envoyé par SMSLe téléphone capable de déchiffrer prouve son identité (le tripletest résolu)Processus d’enrôlement
  • 30. 30Expérience utilisateur simpleSeulement 2 écrans
  • 31. 31La durée de vie du certificat peut être courte (CDD)Facilité de déploiementEn cas de vol, ajout du certificat client dans la CRLUn utilisateur peut avoir plusieurs devicesEn cas d’oubli, génération d’un certificat temporairePas chère !Adaptable à la dernière version de ChromeAvantages de la solution
  • 32. 32Tél : +33 (0)1 58 56 10 00Fax : +33 (0)1 58 56 10 01www.octo.com© OCTO 201350, avenue des Champs-Elysées75008 Paris - FRANCEMerci ! Des question ?Philippe PradosAurélien RambauxG+ http://goo.gl/xljZSarambaux@octo.com
  • 33. 33Technologies de sauvegardedes SecretsRemarquesSauvegarde dans le contexte delapplication.Les données ne sont pas chiffrées. Elles sontvulnérables au vol du téléphone.SE dans la carte à puce Inaccessible aux applicationsSE dans le terminal Inaccessible aux applicationsChiffrement du disque Non obligatoire. Ne protège pas de vulnérabilitésdes applications ou du téléphone allumé.KeyStore Conteneur sécurisé mais non officiel. Il peut êtremodifié dans les prochaines versions dAndroid.À ce jour, le meilleur endroit où sauver les secrets.KeyChain Gestion officielle de gestion des certificats clients.Non disponible avant lAPI 14. Nous proposonsune librairie de compatibilité pour les versionscomprise entre 7 et 14.