Catégorie : Sécurité informatique

  • Sécu­rité sur le web avec HTTPS ? des clous !

    Le problème commence à être connu et il est malheu­reu­se­ment non résolu : Tout le modèle de sécu­ri­sa­tion des sites web par HTTPS (chif­frage SSL/TLS) est à revoir.

    Il était déjà bancal dès le départ en instau­rant des auto­ri­tés de confiance qui n’ont qu’un rôle de rentier et qui taxent tous les utili­sa­teurs, mais leur multi­pli­ca­tion et leur manque de sécu­ri­sa­tion rend tota­le­ment vide de sens la sécu­rité du système.

    En fait c’est assez simple :

    • Nous avons au grand mini­mum une compro­mis­sion d’au­to­rité de certi­fi­ca­tion par mois, et chacune permet d’usur­per n’im­porte quel site auprès de n’im­porte quel navi­ga­teur.
    • Certaines auto­ri­tés sont contrô­lées par ou en colla­bo­ra­tion avec des états, y compris auto­ri­taires ou non démo­cra­tiques, ces états ayant alors la capa­cité d’es­pion­ner ou d’in­ter­cep­ter les commu­ni­ca­tions chif­frées vers n’im­porte quel site sans que cela ne se voit.
    • L’opa­cité totale des auto­ri­tés de certi­fi­ca­tion rend impos­sible de connaître la plupart des dégâts ou des risques en jeu.

    Il est d’ailleurs impor­tant de noter qu’on ne parle pas de ques­tions théo­riques mais de procé­dés concrets qui ont été mis en jeu. On parle de certi­fi­cats illé­gi­times au nom de Google, de Yahoo ou de banques qui ont été émis pour trom­per les navi­ga­teurs, et de maté­riels qui sont réali­sés pour inter­cep­ter et espion­ner les commu­ni­ca­tions TLS pour qui (états) a des certi­fi­cats maitres à sa dispo­si­tion.

    Le fait même d’avoir mis en place un système centra­lisé me semble avoir été une erreur énorme, mais il est temps d’ar­rê­ter les frais. Il est plus que temps de passer à un modèle décen­tra­lisé qui n’aura pas toutes les quali­tés théo­riques du modèle actuel, mais qui ne sera pas autant troué. Cela demande toute­fois que les états acceptent de ne plus être en capa­cité de contrô­ler ce qu’il se passe, même indi­rec­te­ment. Mon côté para­noïaque m’en fait douter.

    Entre temps, sur Mozilla Fire­fox vous permet d’ini­tier le mouve­ment à l’aide de quelques exten­sions.

  • Authen­ti­fi­ca­tion forte

    Une authen­ti­fi­ca­tion par mot de passe sur le web est vite problé­ma­tique. Avec la multi­pli­ca­tion des sites web, chacun avec son compte, on a vite fait d’uti­li­ser le même mot de passe pour un même type de site, voire le même mot de passe partout. Tôt où tard on finit par s’au­then­ti­fier sur une machine publique, chez un voisin, sur un wifi public, ou alors un des services finit par avoir une faille de sécu­rité, voire quelqu’un a posé un spyware sur notre machine habi­tuelle.

    Problé­ma­tique simple : Je veux que personne ne puisse s’au­then­ti­fier sur mes comptes frau­du­leu­se­ment, et le mot de passe n’est pas la solu­tion.

    Mots de passes uniques

    Pallia­tif simple : Je génère un mot de passe par site. Je l’ai fait un temps, mais on atteint vite les limite de ce qu’on peut rete­nir de tête, même en utili­sant une astuce pour déter­mi­ner le mot de passe en fonc­tion du site (genre faire chan­ger une partie du mot de passe en fonc­tion du site). Au final la faci­lité reprend le dessus et on utilise trop souvent le même, ou des trop proches.

    C’est encore plus vrai pour les mots de passe « sensibles » (comptes mails prin­ci­paux, machines perso, machine pro) où le mot de passe devrait être complexe, diffé­rent à chaque fois, et renou­velé au mini­mum à chaque chan­ge­ment de société ou de pres­ta­taire. Jusqu’à quatre mots de passe forts c’est encore gérable, après ça devient ingé­rable, surtout si certains sont peu utili­sés (donc vite oubliés).

    Géné­ra­teurs auto­ma­tiques de mots de passe

    Dans la même lignée on peut utili­ser un système auto­ma­tique pour géné­rer un mot de passe à partir du nom ou de l’URL du service, ou aléa­toi­re­ment en tenant à jour une liste de mots de passe. C’est mieux, mais on reste dépen­dant de cet algo­rithme. Si je suis à l’ex­té­rieur, je risque de ne plus y avoir accès. Ensuite ça ne pallie qu’une partie du problème : ça n’em­pêche pas le mot de passe de se diffu­ser, et d’être utilisé frau­du­leu­se­ment par un tiers. Ça limite juste les dégâts si c’est le service tiers qui a un problème de sécu­rité.

    OpenID

    OpenID c’est une manière de résoudre le problème par l’autre bout. On centra­lise la gestion de l’au­then­ti­fi­ca­tion sur un seul site, et tous peuvent ensuite y faire appel. Du coup je n’ai aucun seul mot de passe à rete­nir : celui de mon compte openid. Je peux faire en sorte qu’il soit complexe, trans­mis sur une connexion sécu­ri­sée, et je ne crains pas les failles appli­ca­tives des services tiers.

    Ça résout certaines ques­tions, mais en pose d’autres : Comment est-ce que je m’au­then­ti­fie sur le serveur OpenId ? si c’est un mot de passe alors j’ai un risque d’au­tant plus grand s’il est décou­vert. Tous mes services en dépendent.

    RSA SecurID

    SecurID c’est le système clas­sique en entre­prise. On vous donne une sorte de porte clef person­nel qui génère un mot de passe unique toutes les 15 secondes. Natu­rel­le­ment chaque porte clef est initia­lisé diffé­rem­ment donc seul le votre donne accès à votre compte. Le mot de passe est à usage unique, et tota­le­ment sans inté­rêt passé une minute. Les risques d’ac­cès frau­du­leux sont donc forte­ment limi­tés.

    Malheu­reu­se­ment ça ne semble pas vrai­ment conve­nir à un usage person­nel courant. Tout d’abord je n’ai qu’un seul support physique, et aucun accès de secours. Si je perds mon accès, je dois me repo­ser sur un admi­nis­tra­teur tiers qui me redonne un nouveau support et le lie à mon compte.

    En vacances, ou simple­ment si je n’ai pas ma veste avec moi, il peut arri­ver que je n’ai pas mon support. Sous réserve que je consi­dère mon accès comme « sans risques » je souhaite pouvoir passer sans le jeton d’au­then­ti­fi­ca­tion forte. Là je n’avais pas ce choix.

    Ensuite le jeton repose sur un système de clefs et de secrets qui est détenu par Veri­sign. C’est un point qui est sensible pour moi, d’au­tant qu’il y a eu une faille chez eux récem­ment et qu’on se demande si les secrets n’ont pas été divul­gués. Un système open source sans serveur tiers me semble indis­pen­sable.

    Enfin, pour éviter qu’il suffise de voler le porte clef plas­tique pour avoir accès à mon compte, je devais ajou­ter un PIN de quatre chiffres. Ce qui m’étonne c’est que ce PIN n’est pas à saisir sur le porte clef, mais à côté du jeton d’au­then­ti­fi­ca­tion, dans le formu­laire web. Quiconque regarde mon clavier, écoute sur le réseau, ou a réussi à poser un spyware sur ma machine connai­tra ce PIN. Bref, il n’est pas si secret que ça.

    Pour ma société, voire pour l’ac­cès à mon compte en banque (et encore), pourquoi pas. Pour le reste, bof bof.

    Google 2 steps veri­fi­ca­tion

    Le système Google est pour moi un peu plus souple déjà. Il utilise une appli­ca­tion sur mon smart­phone et pas un porte clef tiers mais le système semble simi­laire. Ca n’a l’air de rien mais le télé­phone a beau­coup plus de chances d’être avec moi. Il inter­vient après l’au­then­ti­fi­ca­tion par mot de passe (d’où le nom de « deux étapes ») et on peut forcer la seconde étape à ne pas être rede­man­dée à chaque fois pour la même machine qu’on sait « sûre ».

    Pour autant je ne suis pas toujours avec mon télé­phone, et il peut tomber hors batte­rie. Dans ces condi­tions, et si j’ai confiance dans le poste et la connexion sur lesquels je suis, j’au­rai aimé pouvoir saisir un mot de passe spéci­fique qui zappe l’au­then­ti­fi­ca­tion forte. Ça fonc­tionne tant que c’est excep­tion­nel mais Google ne me le propose pas. Google me propose par contre de géné­rer une série de mots de passe à usage unique. Malheu­reu­se­ment l’usage unique est poten­tiel­le­ment gênant et surtout ça implique de les noter quelque part, avec le risque de les perdre ou de se les faire voler. Bref, on peut mieux faire même si j’ap­pré­cie l’in­ten­tion.

    Pour ne pas risquer de perdre des accès et comme il n’y a pas d’ad­mi­nis­tra­teur humain tiers, je peux propo­ser à Google un second numéro de télé­phone qui sert en backup, si jamais je perds le premier. Là aussi c’est posi­tif. Main­te­nant person­nel­le­ment j’ai un télé­phone perso, un de boulot, je risque parfois d’avoir l’un et pas l’autre. J’au­rai aimé auto­ri­ser les deux à me servir pour l’au­then­ti­fi­ca­tion forte et ce n’est pas proposé.

    Point posi­tif, google garde une compa­ti­bi­lité avec toutes les appli­ca­tions qui conti­nuent à utili­ser un simple mot de passe comme inter­face. Je peux faire géné­rer autant de mot de passe que je veux (ils sont longs et complexes) et les affec­ter à des appli­ca­tions. J’ai ensuite la liste des appli­ca­tions dans mon inter­face d’ad­mi­nis­tra­tion et je peux en ajou­ter ou en reti­rer à la volée. Le résul­tat c’est que je peux vali­der ou refu­ser chaque appli­ca­tion indé­pen­dam­ment, sans secret partagé entre toutes.

    Côté sécu­rité, rien ne m’in­dique qu’il est impos­sible de copier le logi­ciel présent sur mon télé­phone portable (ou les mots de passe à usage unique que j’ai en backup) et l’uti­li­ser sans que je ne le sache. Tech­nique­ment ça ne prend pas long­temps pour quelqu’un qui a accès à mon télé­phone, 10 minutes au plus. J’au­rai aimé un système qui détecte que deux télé­phones distincts utilisent la même clef et me l’in­dique. Si c’est présent Google n’en parle pas.

    Enfin, tout ça est « google-only ». Je peux certes utili­ser google en openid, mais ça reste centra­lisé. J’au­rai aimé quelque chose d’uti­li­sable partout, y compris sur mes serveurs.

    Clefs SSH

    En rédi­geant tout ça je me suis rendu compte que j’uti­li­sais déjà un système assez ressem­blant : les clefs SSH. Pour me connec­ter à mes serveurs j’uti­lise des clefs privées. J’ai une clef par source, toutes diffé­rentes. Je peux auto­ri­ser faci­le­ment une nouvelle source, ou en griller une exis­tante, sans mettre à jour. J’ai aussi un mot de passe de secours que je peux utili­ser quand je suis à l’ex­té­rieur.

    Malheu­reu­se­ment là c’est unique­ment pour ssh, et mes authen­ti­fi­ca­tions se font à 90% sur des formu­laires web. Ca demande aussi d’avoir ses clefs ssh sur soi, or le scéna­rio d’au­then­ti­fi­ca­tion forte est surtout utile juste­ment quand je suis ailleurs que chez moi, ou avec une machine qui n’est pas une machine de confiance.

    Je n’ai non plus aucun système qui m’as­sure que ma clef n’a pas été copiée et utili­sée par un tiers.

    Et vous ? Qu’a­vez-vous pour vos authen­ti­fi­ca­tions fortes ?

    En regar­dant j’ai­me­rai :

    • Authen­ti­fi­ca­tion par un système de clefs privée/publique géré par une appli sur mon télé­phone portable
      • Possi­bi­lité de gérer une liste de clefs auto­ri­sées (une par télé­phone portable) pour ajou­ter/reti­rer faci­le­ment un accès
      • Le jeton renvoyé par le télé­phone est obtenu par une combi­nai­son d’un mot de passe ou PIN et de la clef (il faut les deux, et donc le mot de passe n’est pas saisit sur le PC public mais sur mon propre télé­phone)
      • Un système de numéro incré­men­tal est asso­cié au jeton d’ac­cès afin de repé­rer si un tiers utilise une de mes clefs après l’avoir copiée (si le numéro est égal ou plus faible que la dernière fois le serveur refuse l’ac­cès, je saurai donc que quelqu’un utilise ma clef ailleurs et je pour­rai la suppri­mer des auto­ri­sa­tions)
    • Authen­ti­fi­ca­tion alter­na­tive par un mot de passe que je choi­sis moi, pour quand je n’ai pas mes télé­phones et que je suis prêt à prendre le risque
    • Authen­ti­fi­ca­tion alter­na­tive par mot de passe pour les API, logi­ciels, etc. (mot de passe généré, long/complexe)
      • Possi­bi­lité de gérer une liste de mots de passe auto­ri­sés (un par appli­ca­tion/API) pour ajou­ter/reti­rer faci­le­ment un accès