Retrouvez-moi sur Medium (fin du blog)

Inutile de faire de longs discours : Medium est la plateforme de contenu rédactionnel la plus riche à ce jour.

En plein développement, elle est ma source d’inspiration quotidienne. Et j’espère qu’elle le sera également pour vous.

Je vous propose donc de me retrouver sur Medium dès aujourd’hui. Une première publication est en cours de préparation pour ce week-end.

Mon profil Medium : @florentmorin

La page Morin Innovation : https://medium.com/morin-innovation

A bientôt 🙂

Pinning SSL avec TrustKit

Le pinning SSL « maison », c’est un peu compliqué parfois.

Heureusement, l’excellente équipe de Data Theorem est là.

Ils fournissent depuis plusieurs années la solution TrustKit sur iOS, tvOS, macOS et watchOS qui permet de mettre en place le pinning SSL en 2 temps 3 mouvements.

Ils fournissent maintenant une version Android de TrustKit compatible avec les API 15+.

Pour ceux qui ne connaissent pas le fonctionnement de TrustKit, c’est franchement simple.

En gros,  il faut déterminer ce que l’on va pinner dans la chaîne de confiance, à l’instar de HPKP :

  • le certificat de l’autorité de certification (CA)
  • le certificat de l’autorité de certification intermédiaire (ies)
  • le certificat du serveur (EE, leaf)

À partir de là, on peut calculer les clés publiques actuelles. Il est fortement conseillé d’utiliser une clé de secours. Et, enfin, on peut ajouter une date d’expiration.

En gros, si les clés sont validées, ça passe. Sinon, on regarde côté clé de secours. Et, passé la date d’expiration, on ne fait plus de pinning.

Et ensuite : TrustKit fait le job. Et ça, c’est top.

Statistiques des OS mobiles

Apple vient de publier les nouveaux chiffres, issus des données de l’App Store :

  • 79 % des utilisateurs sont sur iOS 10 (fin 2016)
  • 16 % sont sur iOS 9 (fin 2015)
  • 5 % sont sur une des versions antérieures

Soit 95 % de iOS 9+. Un score plutôt honorable.

Mixpanel voit des chiffres plus hauts, au-delà de l’App Store :

  • 90 % sur iOS 10
  • 8 % sur iOS 9
  • 2 % sur des versions antérieures

Soit 98 % de iOS 9+.

En parallèle, 1,2 % des utilisateurs utilisent Android 7 (fin 2016). Et 30,7 % sont sur Android 6 (fin 2015). Ce qui fait 31,9 % sur Android 6+.

Il faut remonter à Android 4.2 (fin 2012) pour passer la barre des 90 %.

Selon Mixpanel, Android 7 serait à 3 % et Android 6 à 46 %. Android 6+ serait donc à 49 % du parc.

Mieux vaut développer plutôt sur iOS 9+ et sur Android 4.2+ si vous souhaitez avoir un bon équilibre entre le nombre d’utilisateurs actifs et la stabilité de l’app.

Si vous misez sur la sécurité, optez plutôt pour iOS 10 (ATS présent depuis iOS 9 mais surtout jailbreak plus difficile donc accès au binaire limité) et Android 6.0 (l’API 23 introduit network_security_config.xml qui est un équivalent de ATS avec le pinning SSL en plus).

Pourquoi le pinning SSL ne suffit pas toujours

Pour rappel, le pinning SSL permet de sécuriser une connexion SSL afin d’éviter les attaques MITM.

Le truc, c’est que ça ne suffit pas pour protéger son code, même si cela évite la très grande majorité des attaques.

Pourquoi ?

Autant mettre ma source, cela ira plus vite : http://fr.slideshare.net/anantshri/ssl-pinning-and-bypasses-android-and-ios

En résumé, l’idée est :

  • sur iOS, de casser la sécurité de l’app chiffrée (via jailbreak, etc) et patcher l’app de sorte à modifier le comportement du SSL pour que tous les appels soient valides
  • sur Android, c’est le même procédé, sauf que l’app n’est pas chiffrée, ce qui simplifie grandement le travail.

Que faire ?

Pour les informations sensibles (mot de passe) : les chiffrer, de sortes à avoir un niveau de protection supplémentaire.

Mais si l’app est crackée, le chiffrage ne sert pas à grand-chose.

Sinon, sur iOS, le mieux est de bloquer – si possible – l’exécution de l’app sur un système jailbreaké.

Sur Android, c’est un peu plus compliqué à sécurisé.

Éventuellement, l’alternative est d’intégrer les appels SSL directement dans son code, via OpenSSL par exemple. Avec le NDK dans Android. Mais cela peut toujours être détourné.

Globalement, le problème vient du système d’exploitation. Il faut surtout espérer qu’une solution soit trouvée de ce côté-là.

En intégrant le pinning SSL directement dans le système d’exploitation, l’ensemble serait sécurisé de manière automatique.

Le pinning SSL : comment on fait ?

Le pinning SSL permet de s’assurer, lors d’une connexion HTTPS, que celui qui utilise un certificat SSL est bien celui qu’il prétend être. Sinon, on lui coupe le sifflet !

Le pinning SSL et ses outils

Pour faire du pinning SSL, il y a diverses stratégies. Inutile de s’étendre sur le sujet. OWASP a déjà rédigé un article bien complet là-dessus.

Même plusieurs articles.

Mais comment ils font les autres ?

C’est bien le coeur du problème. Connaître la technique est une chose. Savoir mettre en place la technique en est une autre.

Le pinning de clé publique, c’est assez cool, mais c’est un peu trickie comme approche et parfois complexe.

Le plus simple est certainement le pinning du certificat en lui-même.

Ha oui, mais si le certificat change ?

Une faille comme Heartbleed peut en effet forcer à révoquer les certificats.

Qui dit certificat changé dit pinning cassé.

Donc autant ne pas faire de pinning SSL ?

Chiffrer les données au-delà du HTTPS

L’avantage des technologies modernes, c’est qu’on peut chiffrer certaines données. Sans nécessairement passer par HTTPS.

Par exemple, on peut imaginer un serveur utilisé uniquement en cas d’incident. Par exemple, quand la clé enregistrée dans l’app ne fonctionne plus et qu’il faut en enregistrer une autre.

On effectue alors une requête précise sans pinning sur le service web. Avec un système de jeton unique qui ne peut être généré quand connaissant un algorithme particulier. Ce jeton inclue une clé valable temporairement partagée entre le client et le serveur. Cette clé permet d’obtenir une autre clé qui servira à chiffrer l’information avec encore une autre clé, également partagée entre client et serveur et d’une durée temporaire.

Le client reçoit l’information. La déchiffre avec la clé aléatoire qu’il a généré + la clé partagée. Là, il a la nouvelle empreinte permettant d’effectuer le pinning sur le nouveau certificat.

La clé partagée entre le client et le serveur sera chiffrée sur iOS. Aucun soucis.

Sur Android, la mauvaise idée est de la mettre dans les préférences. Ou de la mettre en dur dans le code. Heureusement, il y a le NDK qui permet de compiler des informations. Evidemment, ce code peut-être décompilé. Mais on peut aussi obfusquer le code du NDK. Et là, c’est moins cool à décompiler et comprendre. Surtout s’il y a en plus du fake code avec une bonne obfuscation du code Java en lui-même.

Bref. En attendant la mise à jour de l’app, c’est une solution de secours qui évite l’interruption de service.

Ça peut aussi être utile pour les identifiants d’accès aux services web externes (Facebook, Google, Cloudinary, etc).

Ha ouais, c’est cool

Bah ouais. Maintenant, faut s’y mettre. Avec un peu de bonne volonté, tout est possible.

 

Les apps de banques non sécurisées (ultimatum allégé inside)

Si j’ai choisi une image un peu kitch, c’est pour essayer d’attirer le regard insouciant de nos établissements bancaires. Oui oui : ceux pour qui la sécurité est le mot d’ordre.

Je ne vais pas rentrer dans les détails. Histoire de ne pas donner de mauvaises idées. Du moins, pas pour le moment.

Tout ce que je peux dire, c’est qu’en quelques minutes (secondes), j’ai réussi à duper mon propre smartphone et voir paraître sous mes yeux le mot de passe de mon app bancaire et toutes les informations associées. Ainsi que toutes les informations consultées (relevés de banque, etc). Bref. Niveau débutant.

Sachant qu’en quelques heures on peut pirater un réseau WiFi, surtout s’il est public : autant dire que les informations de tous les clients sont à la merci des hackers.

Je ne dévoilerai pas aujourd’hui la technique employée ni la solution, tellement le tout est simpliste. Je vais attendre une semaine (14 février, jour de la Saint Valentin) attendre la fin du 1er semestre 2017 (suite à demande de délai, voir si dessous) avant de diffuser la technique et la solution.

Ça fait des mois que j’essaye de signaler ces problèmes de sécurité (qui touchent aussi les assurances soit dit en passant) : et tout le monde assume pleinement cette légèreté alors que les clients donnent leur confiance.

Si les établissements concernés souhaitent en savoir plus, qu’ils me contactent. En espérant que ma banque soit juste une exception.

Je ne souhaite pas faire de chantage ou quoi que ce soit. Je trouve juste anormal que la sécurité – même basique – sur des sujets aussi sensibles soit laissée de côté.

Rendez-vous dans une semaine. 🙂

[ Première mise à jour du 8 février 8h46 (ça commence..) ]

Non, je ne veux pas faire chanter les banques. Je m’en fous comme de l’an 40. J’ai un boulot honnête qui me suffit.

Mon seul intérêt est citoyen : les informations privées concernant mes contemporains et moi-même doivent être protégées. Et je ferai le nécessaire pour ça.

C’est pas compliqué : un email (formulaire de contact), une validation que vous êtes bien un responsable sérieux de l’établissement (et pas le stagiaire qui veut faire une blague), et je vous envoie les infos. C’est corrigé (en moins de 24h chez Apple pour une MAJ urgente) et on n’en parle plus. L’article sera obsolète à sa sortie et tout le monde sera content.

Et non, je ne fournirai aucune information, même contre de l’argent ou quelque rétribution que ce soit, afin de permettre l’accès aux informations sensibles de qui que ce soit. Le piratage, c’est pas bien. Si vous voulez dégommer vos concurrents, soyez meilleurs qu’eux, c’est tout. Et voler de l’argent via un détournement de smartphone, ce n’est pas bien non plus. Et voler l’identité de quelqu’un, c’est pas très beau.

Ce sont les premières clarifications. Pour l’instant, aucun établissement ne m’a contacté et j’ai peu d’espoir.

Même si, par le passé, j’ai déjà contacté un établissement pour des problèmes de sécurité. Qui m’a reçu, poliment. Considère que les informations contenues dans les apps ne sont pas très sensibles. Mais au moins est au courant de ses faiblesses et connait les solutions. Après, je ne porte pas de jugement. J’éviterai juste d’être client. (et non, vous ne saurez pas qui c’est car cela pourrait nuire à l’image de l’établissement)

Et il y a aussi eu beaucoup d’emails, contacts Twitter et Facebook pour savoir quelles informations pouvaient être accessibles de la part de particuliers inquiets. Ils ne sont pas plus rassurés, mais sont au moins informés.

Encore une fois, on ne peut pas jeter la pierre aux banques. La sécurité, ce n’est pas leur métier. C’est la faute des prestataires ou qui sais-je. Cela n’a pas vraiment d’importance à leurs yeux. Et ils ne peuvent pas savoir qu’un simple échantillon de données est une brèche de sécurité dans un système plus global. Mais bon, ça les concerne quand même un peu.

Donc je fais le job et les informe : vu qu’en privé, je ne réussis pas à les contacter (malgré des mois de tentatives), je suis obligé de prendre un canal de communication plus élargi. C’est juste un problème de communication interne, on ne peut pas leur en vouloir.

Merci d’avance pour la sécurité de nos informations personnelles.

[ Mise à jour 2 : 08/02 14h24 ]

Ça avance : une première banque m’a contacté. J’ai retrouvé la foi.

[ Mise à jour 3 : 09/02 17h17 ]

J’ai été contacté par un établissement qui s’engage à faire le nécessaire dans le 1er semestre 2017. Pas avant parce que c’est compliqué. Plus compliqué qu’il n’y parait.

Sauf qu’à un moment ça va poser problème. M’enfin. C’est comme ça.

Rendez-vous le 30 juin 2017. (ou avant, en cas de miracle)

[ Mise à jour 4 : 10/02 18h53 ]

Un autre établissement est rentré en contact avec moi. C’est formidable. 🙂

[ Mise à jour 5 : 14/02 17h46 ]

Le second établissement a échangé avec moi. Même discours : ils sont déjà au courant, mais c’est long à mettre en place.

De manière générale, le risque de perdre quelques utilisateurs est mis en face du risque côté sécurité. Une problématique assez complexe. Vite réglée quand il y a un incident.

En tout cas, la mise en place d’une sécurité renforcée est le choix pour le premier trimestre 2017 pour cet établissement. Quitte à laisser quelques utilisateurs non précautionneux sur le bord de la route (en redirigeant vers la version web malgré tout). Un choix courageux et intelligent.

Dessines-moi un mouton… comme Picasso

Si l’exemple donné n’est pas le meilleur, on voit clairement aujourd’hui que la machine imite l’homme de mieux en mieux.

À partir de simples photos, on peut aujourd’hui imaginer comme des artistes auraient pu représenter leur environnement.

Évidemment, la démonstration n’est que technique. Mais elle n’en est pas moins une certaines représentation de la réalité. Et cela en dit long sur l’avenir de l’apprentissage par les machines (Machine Learning).

Pour en savoir plus, voici l’outil que j’ai utilisé :

https://github.com/lengstrom/fast-style-transfer

J’ai testé plusieurs représentations de Niort que vous pouvez découvrir ci-dessous.

1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4

Le télétravail pendant plus de 8 ans : ça fonctionne

Quand on parle télétravail, on tombe vite dans le cliché et dans l’exceptionnel. Comme si le télétravail n’était pas un vrai travail. Ou bien seulement lorsque les enfants sont malades. Bref, les bons vieux clichés rétrogrades.

Cela fait 8 ans que je travaille à 99 % de chez moi : je pense que l’expérience est validée.

On ne peut pas travailler chez soi

On peut travailler chez soi comme n’importe où. Il suffit de se discipliner.

L’erreur est de considérer le télétravail comme une tâche que l’on fait pendant que l’on est chez soi. Comme tondre la pelouse, s’occuper du chien ou que sais-je.

Lorsque l’on télé-travaille, seul le bureau change.

On est moins efficace

Au contraire : personne ne vient vous déranger chez vous si vous avez organisé votre espace de travail pour le travail.

Vous avez une productivité optimale. Personne ne vous oblige à regarder bêtement votre écran quand vous êtes fatigué (peut-on appeler ça du travail ?). Et, quand vous êtes productif, personne ne vient empiéter sur votre temps de productivité.

En travaillant chez soi (ou ailleurs), on est forcément plus efficace. Du moment que l’on est bien organisé.

Les clients n’aiment pas ça

Je fais fonctionner mon entreprise ainsi depuis 8 ans. J’ai du aller en régie 2 fois. Et seulement pour quelques jours, car au final j’étais plus productif dans mon environnement.

Il faut juste convaincre ses clients.

On n’a plus de vie personnelle

C’est encore une fois une question d’organisation.

Pour ma part, j’arrête de travailler pour mes clients vers 18h00 – 19h00 en règle générale. Le midi, je déjeune à un horaire normal, de 12h30 à 14h00. Et le matin, je commence vers 8h30 – 9h00.

Si je déborde, c’est parce que je le veut bien et c’est en général pour des projets personnels.

Mais il m’arrive très très rarement de déborder sur des projets professionnelles. Déjà parce que j’ai une vie sociale mais aussi parce que pour bien travailler il faut bien dormir. J’aurai du mal à caser mes 8h00 de sommeil si je termine tous les soirs à minuit.

On ne voit plus personne

Encore une fois, c’est faux. Même si la sociabilité n’a jamais été ma plus grande qualité, je n’en reste pas moins un citoyen qui va voter, un cinéphile passionné, le maître d’un chiot à l’éducation fastidieuse dont le besoin de vie sociale doit être comblé, un amoureux de ma ville et un bistronome averti.

On ne peut pas travailler en équipe

Les outils de travail en équipe sont nombreux :

  • Skype
  • Slack
  • Trello
  • Dropbox
  • GitHub
  • Office 365…

Tout est une question d’organisation. Je n’ai jamais vu un projet d’équipe ne pas fonctionner à cause du télétravail.

La conclusion

Après plus de 8 ans de télétravail, je suis entièrement satisfait et j’aimerais pousser encore plus loin l’expérience.

Le télétravail est une chance car il permet de travailler de façon optimale et ainsi mieux profiter de chaque instant.

Comme je l’ai dit à plusieurs reprises, cela nécessite une discipline personnelle importante. Les tentations sont grandes.

Mais, quand on voit les bénéfices que l’on peut en tirer, il est certain que le jeu en vaut la chandelle. Que ce soit pour nous ou pour nos clients / partenaires.

Car, en télétravail, on ne triche pas : seul le résultat compte.

Le télétravail ne doit pas être considéré comme une situation temporaire ou de seconde zone. J’ai pu réaliser de gros projets en télétravail, sans réunion chronophage, sans toutes les contraintes d’un bureau.

N’hésitez plus : lancez-vous !

App Store : 76 % pour iOS 10

Les chiffres officiels d’Apple sont tombés.

76 % des utilisateurs utilisent iOS 10 (fin 2016). Soit une progression de 13 % en 2 mois. 18 % sont sur iOS 9 (fin 2015). Et seulement 6 % sont sur une version inférieure.

En étant compatible iOS 9 et supérieurs, vous pouvez atteindre 94 % des utilisateurs.

Mais, objectivement, 76 % est aussi très bien si vous souhaitez utiliser des fonctionnalités récentes !

Une nouvelle toujours réjouissante pour les développeurs. 🙂

À titre de comparaison du côté Android, si vous souhaitez être compatible avec 60,7 % des utilisateurs, vous devez fonctionner sur les versions 5 (mi-2015) et supérieures. Pour passer au-delà des 75 %, il faudra accepter d’être compatible Android 4.4 (fin 2013). Et pour passer au-delà des 90 %, il faudra passer à la version Android 4.2 (fin 2012). La dernière version (7) sortie fin 2016 est présente sur 0,4 % des appareils. Et si on veut les deux dernières versions (6 et 7), on atteindra au mieux 26,7 % des utilisateurs.

Ce qui est pénalisant côté développement mobile l’est également pour la partie web. Les versions inférieures à Android 4.4 ayant par défaut un navigateur obsolète.

Mais bon. Côté iOS, on reste au top technologiquement. Et ça, c’est une super nouvelle !

Source : https://developer.apple.com/support/app-store/

Les bots Facebook Messenger

Les bots sont des petits programmes qui effectuent automatiquement des actions à partir des ordres données.

Dans le cas de Facebook Messenger, à partir du message envoyé, on peut imaginer plein d’interactions.

Un exemple très basique vous est proposé sur la page Facebook de Morin Innovation.

Envoyez un message privé à Morin Innovation et vous aurez cette réponse :

morin_innovation_-_messages

C’est (très) basique mais rudement efficace.

On peut aller beaucoup plus loin, comme le fait par exemple la SNCF en vous proposant de réserver un voyage directement via leur bot.

voyages-sncf_com_bot_-_messages

Les bots peuvent également vous solliciter après l’échange.

C’est vraiment une automatisation du processus de communication qui laisse la porte ouverte à plein de supers idées !