Cyber sécurité

La cyber sécurité est une forme d'antagonisme humain.  L'ingénierie, la médecine et autres activités scientifiques et techniques n'ont pas cet aspect d'antagonisme humain: ils essayent de résoudre un problème avec des moyens techniques et partent de l'hypothèse que la difficulté à affronter est neutre vis à vis de la stratégie de solution, c'est à dire, que le problème n'essaie pas d'éviter la solution.  Si un médecin est confronté au problème de guérir une jambe cassée, il suppose que s'il trouve une façon de le faire, le "problème de la jambe cassée" ne va pas tout faire pour trouver un moyen d'éviter que sa solution marche.

 Avec la cyber sécurité, c'est différent.  C'est une forme de guerre.  Dans la guerre, il n'y a pas de règles.  C'est une guerre sans violence physique aux humains (dans la plupart des cas) mais c'est néanmoins une guerre.  C'est pour cela qu'il n'y a pas de solution technique définitive à la cyber sécurité.  Il n'y a pas de systèmes sûrs (dans le sens qu'ils seraient parfaitement sûrs sur le plan de la sécurité informatique).  Et si un tel système existait aujourd'hui, demain quelqu'un trouvera un moyen de l'attaquer.

La cyber sécurité est basée sur la distinction d'êtres humains: ceux qui sont supposés de travailler avec l'équipement, ont accès à cet équipement et son contenu et ont la permission de l'utiliser, de le modifier comme ils l'entendent, et puis "tous les autres", qui sont supposés être gardés hors des équipements et leur contenu, même s'ils essaient très fort de pouvoir faire ce que les premiers peuvent faire.  Nous appelons les deux groupes respectivement les utilisateurs et les attaquants du système.  Le but de la cyber sécurité est de permettre au premier groupe d'accéder au système tout en interdisant la même chose au deuxième groupe.  Les utilisateurs sont supposés pouvoir lire des fichiers, créer et modifier des fichiers, effacer des fichiers, utiliser la webcam, installer des logiciels, modifier le système, reconfigurer le système, utiliser des ressources du réseau etc., tandis que les attaquants veulent pouvoir faire la même chose et sont supposés être déniés ces privilèges.

La vulnérabilité fondamentale est donc que le système est construit de telle façon de permettre aux utilisateurs de faire ce qu'on veut à tout prix dénier aux attaquants.  Si un attaquant peut faire croire au système qu'il est un utilisateur légitime, ou modifier le système un peu pour que le système ait une distinction autre entre utilisateur et attaquant que voulu par l'utilisateur, l'attaquant aura réussi son exploit.   Il est impossible de s'assurer avec certitude qu'une telle subtilité ne pourra pas être décelée par un attaquant, car des systèmes informatiques sont des systèmes complexes composés de parties matérielles (hardware), de micrologiciel (firmware) et de logiciels (software), conçus et fabriqués par beaucoup de personnes différentes avec lesquelles une relation de confiance n'est pas garantie, où il est, vu la complexité, quasiment sûr qu'il existent des erreurs critiques quelque part et, donné la complexité des systèmes, les utilisateurs ne se rendent pas toujours compte qu'ils ont transféré leur droits à un attaquant.

En d'autres termes, s'il fallait concevoir un système informatique afin de garantir qu'il soit sûr, il ne pourrait en aucun cas être fonctionnel.  La seule façon d'avoir un système informatique fonctionnel, est d'accepter qu'il y ait la possibilité de failles sur le plan de la sécurité.  C'est le compromis général: sécurité versus utilité.  Un système parfaitement sûr n'est pas fonctionnel.  Ne pas avoir un système informatique est la seule façon sûre de ne pas être exposée à une attaque.  Cette option mérite plus d'attention que la boutade qu'elle ne semble être.

Cyber sécurité et cryptographie.

IIl y a une relation double entre la cyber sécurité et la cryptographie: la cyber sécurité est nécessaire pour que la cryptographie ait un sens, et la cryptographie est utilisé pour renforcer la cyber sécurité.   Les deux domaines ont un élément commun: ce sont des modèles dans lesquels il y a de l'antagonisme humain.  Cryptographie divise l'humanité en deux camps: les amis et les ennemis, où la distinction se fait par la connaissance ou non d'une information (la clé).  La cyber sécurité divise l'humanité aussi en deux camps: les utilisateurs légitimes et les attaquants d'un système.

Là où la cryptographie traite de l'information, la cyber sécurité à affaire avec des installations concrètes physiques et les données qu'ils contiennent.  Mais comme quasi toute cryptographie est faite avec des systèmes informatiques, la relation est évidente.

Comme la cryptographie fait une distinction essentielle entre amis et ennemis basés sur l'accès à une donnée (la clé secrète), forcément si le système contenant cette clé est compromis, alors le système cryptographique est cassé (car maintenant, des ennemis possèdent la clé aussi et ne peuvent plus être distingués d'amis).   D'un autre coté, la cryptographie peut être utilisé pour distinguer des utilisateurs d'attaquants, en supposant que les utilisateurs possèdent une clé que les attaquants ignorent.  La version la plus simple est bien sûr de demander un mot de passe avant de donner accès au système.

La vérité évidente et simple de ceci est souvent oublié.  Faire de la cryptographie sur un système dont la sécurité est compromise, est inutile.  Et un système qui dépend, pour sa sécurité, d'un système cryptographique cassé, n'est plus sûr non plus.  Il ne sert à rien d'avoir un système cryptographique sophistiqué sur un système sur lequel la sécurité la plus élémentaire est défaillante.  Il ne sert à rien de garder votre clé de votre masque jetable sur votre compte Facebook, et de penser que comme mathématiquement le masque jetable est absolument sûr, que personne ne pourra jamais lire vos secrets.

Modèle de la menace

Comme la cyber sécurité est la guerre, il faut connaître son ennemi, selon  Sun Tzu.  Les enseignements de Sun Tzu sont extrêmement précieux pour la cyber sécurité. La stratégie de base est de trouver quel prix un attaquant est prêt à payer pour une attaque réussie, combien de dégâts une telle attaque peut vous causer, combien d'effort, d'argent et de temps vous êtes prêts à dépenser pour éviter cela, tout en sachant que tout système peut potentiellement être compromis.  La stratégie de base est donc de rendre une attaque réussie tellement chère pour l'attaquant, qu'il y ait des chances qu'il abandonne car ça n'en vaut pas la chandelle.

Est-ce que cela veut dire que certains systèmes n'ont pas besoin d'aucune protection car il n'y a rien à en tirer par un attaquant ?  La réponse est non.  Il y a toujours deux aspects d'intérêt à un système informatique pour un attaquant. Le premier aspect est "amusement".  Il peut être amusant d'attaquer un système.  Le vandalisme peut être amusant.  Mais cela est une menace mineure: un vandale n'est pas très motivé et n'est pas prêt à investir beaucoup de ressources en une telle attaque.  Il n'est donc pas difficile de garder les vandales dehors: il suffit d'augmenter la difficulté.  Mais un deuxième aspect de tout système est bien plus intéressant que de s'amuser: un système compromis dans les mains d'attaquants devient une base d'attaque pour des attaques ultérieures sur d'autres systèmes.  Ainsi, votre système vaut ce que vaudra l'attaque faite à partir de votre système, ce qui peut être un prix élevé.  Mais là aussi, il suffit de rendre l'attaque de votre système plus coûteuse que l'attaque du système de votre voisin pour éviter l'attaque (chez vous).  Un système, compromis par un attaquant, pour devenir une base d'attaque d'un autre système, est appelé un système zombie.  Une grande collection de zombies attaquant une cible est un botnet.  La façon exacte d'organiser un botnet peut être très différente d'un botnet à un autre, mais il y a quelques exemples célèbres de botnets obtenus par une infection par virus.  Sans doute le plus spectaculaire est la famille des vers conflicker.  Le ver se propage bien sûr de façon autonome, mais la partie intéressante, ce qui en fait un constructeur de botnet, est qu'il demande régulièrement des mises à jour et des instructions de ses "maîtres" via des adresses IP générés de façon cryptographique.   Cela permet au ver d'être utilisé à des fins variables et pas encore décidés au moment de la propagation, et permet de s'adapter à des défenses contre le ver en question.  A son apogée, ce ver avait infecté à peu près 15 millions d'ordinateurs, et il n'est toujours pas éradiqué.   Un ver semblable volait des informations bancaires: le zeus rootkit qui était un ver plus ancien qui volait des informations sur des comptes en banque, mais n'était pas vraiment un botnet, a été combiné avec le système peer-to-peer de conflicker pour former GameOverZeus, un botnet spécialisé dans le vol des informations bancaires qui peut recevoir des mises à jour et des instructions particulières.

Les attaquants ne sont pas toujours des criminels dans le sens légal.  En fait, la plus grosse menace de cyber sécurité peut venir souvent d'attaquants sponsorisés par des états.  L'exemple le plus spectaculaire est sans doute stuxnet. Stuxnet était une véritable cyber arme qui se propageait à travers beaucoup d'ordinateurs innocents pour vandaliser (c'est à dire, détruire physiquement) de l'équipement industriel étranger.   Heureusement, les créateurs de stuxnet (sans doute des services secrets Américains avec de l'aide de l'état d'Israel) ont pris soin de confiner les dégâts à des systèmes bien spécifiques de telle façon que la plupart des ordinateurs infectés qui n'étaient pas la cible n'ont subi très peu de dégâts et ne servaient que de zombies pour transmettre l'attaque.

Vous voulez que votre système ne soit pas utilisé pour mener une attaque contre un autre système, même si vous pensez que cela vous importe peu. Il se peut en effet que vous aurez des problèmes d'ordre légal si l'attaque de l'autre système est retracée vers vous, et il vous faudra alors prouver que l'attaquant, ce n'est pas vous.  Vous ne voulez pas que tous vous systèmes soient embarqués par la police judiciaire pour analyse.  Si vous êtes une entreprise, vous pouvez manquer une telle publicité.

Ainsi, tout système à une menace, même des systèmes dont, à première vue, un attaquant ne peut rien tirer et qu'une telle attaque ne vous coûte pas grand chose.  De toute façon, il faudra faire en sorte que vos systèmes soient au moins aussi sûr que ceux de votre voisin.

Il n'y a donc pas de systèmes qui n'ont besoin d'aucune sécurité.  Le PC publique dans le hall de réception qui ne contient aucune information de l'entreprise ou privée, et qui se trouve là pour permettre aux hôtes de surfer sur internet, doit avoir un bon niveau de sécurité aussi, car c'est le zombie idéal.  Il y a une menace générale qu'on peut appeler "menace filet de pêche" qui n'en a pas particulièrement après vous, mais qui est une opportunité avec suffisamment de bénéfices pour les attaquants qu'ils sont prêts à mettre un peu d'effort afin de collectionner les plus vulnérables.

Nous avons vu que deux menaces "filet de pêche" sont le vandalisme, et la recherche de zombies.  Mais il y a un troisième élément qui peut motiver un attaquant opportuniste, même si vous pensez de n'avoir rien à cacher: de l'information personnelle.  Même si vous pouvez penser que l'information personnelle n'est pas un secret, suffisamment d'information personnelle peut être utilisée pour voler votre identité.  De la négociation commerciale est plus facile quand vous savez plus sur votre partenaire que lui, sur vous.  Même si nous sommes tous nés à poil, devoir négocier dans son slip avec des hommes en costume noir et des lunettes de soleil, vous met dans une situation difficile.  Il n'y a pas de raison pour négliger la protection d'information personnelle, même si cela ne semble pas être un "secret".

La plupart des systèmes contiennent de l'information confidentielle.  Il faut se poser les questions suivantes pour chaque morceau d'information confidentielle:

  • quel est le coût pour moi si cette information tombait dans les mains d'autres ?  Coût en termes de dégâts d'image (l'information même, et le fait que ce n'était pas protégé), embarras (images où vous, le CEO, avez trop bu sur une fête, rapports internes pleins de fautes de grammaire....), responsabilité légale devant des clients (information confidentielle de clients qui n'apprécieront pas la fuite), perte d'avantage compétitif (plans stratégiques, offres de prix...), fuite de résultats de recherche et développement, fuite d'informations bancaires et les risques que cela comporte.  On peut aussi inclure: risque vis à vis de la justice si l'information peut prouver ou indiquer le non-respect de certaines lois que vous préférez cacher.
  • Qui peut être intéressé dans cette information ?  La concurrence, des anciens collaborateurs ou salariés mécontents, des états étrangers (de l'espionnage industriel et économique), des politiques qui ne vous aiment pas pour une ou autre raison, des syndicats, des groupes d'activistes qui ne vous aiment pas, et puis des hackers qui veulent obtenir cette information pour pouvoir la vendre au plus offrant, des ennemis de vos clients, des voleurs qui veulent vider votre compte en banque, la justice qui cherche des preuves pour des activités illégales...
  • A quel point sont-ils intéressés ?  Combien d'effort veulent-ils mettre dans l'obtention de ces informations ?  Combien de coûts peuvent-ils se permettre d'engager pour les obtenir ?
  • Est-ce que l'attaquant veut à tout prix éviter d'être identifié ou non ?  La plupart du temps, un attaquant veut éviter que son identité soit découverte.  Si continuer son attaque risque de l'exposer, il pourrait abandonner.  Est-ce que j'ai une protection légale contre l'attaquant, ou est-ce que l'attaquant a une protection légale pendant son attaque (par exemple, des agences secrètes) ?

Il y a finalement une autre question qu'il faut se poser.  Bien que la plupart des cyber attaques ont affaire avec du vol d'information, la menace peut simplement résider dans l'accès de vos systèmes, et non pour l'information qu'ils peuvent contenir, mais pour ce qu'on peut faire au système même.  Une attaque peut endommager le système, ou les installations qui sont contrôlés par le système, comme une ligne de production dans une usine (on pense à Stuxnet).  Si votre système contrôle une usine chimique, elle peut être une cible de terrorisme (d'état ?) en prenant contrôle de ce système.  Il y a donc aussi:

  • A part voler de l'information, qu'est-ce qu'un attaquant peut encore faire s'il a le contrôle de mon système ?
  • Qui pourrait être intéressé de faire cela ?
  • A quel point est-il intéressé ?
  • Est-ce que l'attaquant voudra éviter à tout prix d'être identifié ou non ?

Il faut donner suffisamment d'attention à toutes ces questions.   Leur réponse constitue le modèle de la menace.

Les types de surface d'attaque

Suivons encore les conseils précieux de Sun Tzu: il faut connaître ces propres faiblesses.

La surface d'attaque a les parties suivantes:

  • matériel (hardware)
  • micrologiciel (firmware)
  • réseau
  • logiciel
  • humain

Chaque partie montrera des vulnérabilités, c'est à dire, des façons potentielles de permettre une attaque réussie.  Dans le même ordre, nous avons la difficulté et le coût de l'attaque qui diminue, la probabilité d'être découvert qui augmente, et la popularité qui augmente, comme règle générale, bien qu'il y ait des exceptions.

Construire et vous vendre de la hardware compromise ou compromettre le matériel en transition avant qu'elle vous soit livrée (ou chez vous) est une attaque très difficile à mettre en place.  Ce genre d'attaque et le coût et la difficulté associées en font souvent un privilège pour des attaques sponsorisés par des états, ou des grandes organisations criminelles.  Mais l'attaque est très efficace.  Quand vous possédez du matériel compromis, il est extrêmement difficile de vous en rendre compte, et il n'y a pas grand-chose à faire.  Si les processeurs de Intel ont une porte dérobée, que pouvez-vous faire ?  Comment vous en rendre compte ?  Vous pouvez le voir, éventuellement, par une activité réseau bizarre quand l'attaquant utilise sa porte dérobée, mais c'est quasi impossible de le constater en dehors.

Le niveau suivant est la corruption du micrologiciel (firmware).  Firmware est du logiciel, mais qui est gardé en ROM dans l'électronique et n'est pas sensé d'être modifié souvent.  Le BIOS (ou l'UEFI) de l'ordinateur est un exemple de micrologiciel, mais beaucoup de sous-systèmes ont des contrôleurs qui font des tâches bas-niveau, programmés en micrologiciel.  Même une clé USB possède du micrologiciel pour le contrôleur qu'il contient.  Dans l'ancien temps, ce micrologiciel était vraiment "dure", c'est à dire, il fallait intervenir sur le matériel (changer un composant ou brancher un programmeur sur un connecteur sur la carte électronique), pour pouvoir le modifier.  Malheureusement, aujourd'hui la plupart du micrologiciel est stockée dans de la mémoire FLASH qui peut être ré-écrite, et la plupart de ces mémoires peuvent être reprogrammés par le système même avec des instructions logicielles.  Cela rend cette firmware vulnérable, car elle peut être modifié par tout accès au système.  La corruption du micrologiciel est, ces jours-ci, le plus grand casse-tête de la cyber sécurité.  Encore limité, les attaques en utilisant la corruption de micrologiciel gagnent en popularité, car la logistique nécessaire pour corrompre le micrologiciel est moins onéreuse et compliquée que la corruption du matériel même et son effet est aussi dévastateur. 

La corruption du micrologiciel est actuellement la surface d'attaque la plus dangereuse, contre laquelle les défenses sont encore très faibles et inefficaces.  Ça reste une attaque difficile et sophistiquée à mettre en place, mais le progrès dans le domaine est important.  Je prédis un future brillant dans les années à venir pour les attaques micrologiciel.

Attaquer votre réseau, ou vos connections réseau, est une surface d'attaque bien plus classique.  La corruption de vos connections hors de votre périmètre est hors de votre contrôle et peut accéder à tout ce que vous faites sur ces connections.  L'attaque la plus classique est une attaque "homme au milieu", ainsi que l'imposture DNS.  Dans la mesure où le réseau externe peut accéder à votre système, ou dans la mesure où vous envoyez de l'information confidentielle vers l'extérieur, toute corruption du réseau extérieur peut engendrer le vol de ces données ou l'accès à vos systèmes.

Le réseau intérieur est sous votre contrôle, mais l'accès à ce réseau est bien plus dangereux.  Effectivement, autant qu'une politique de sécurité va limiter les dégâts et contrôler les accès de l'extérieur, une fois à l'intérieur les mesures de sécurité sont souvent beaucoup moins importantes.  La vulnérabilité de vos systèmes vis à vis d'un attaquant sur votre réseau interne sont beaucoup plus nombreuses que vis à vis d'un attaquant venant du réseau externe.

L'attaque standard est bien sûr le logiciel.  Il peut s'agir de logiciels système ou d'applications spécifiques.  La surface d'attaque peut être: du logiciel corrompu, du logiciel malveillant (un logiciel malveillant est un logiciel conçu dans le seul but d'attaquer votre système) ou des erreurs de programmation.  Une attaque réussie contre (ou avec) un logiciel corrompu fait alors sur votre système ce que l'attaquant voudrait: lui envoyer des informations, entreprendre des actions sur votre système (faire exploser votre usine chimique), ou mener une attaque à partir de votre machine contre une autre cible.

Mais l'attaque la plus répandue n'a rien de technique: il s'agit de tromper l'utilisateur légitime et de lui faire faire ce que veut l'attaquant sans qu'il s'en rend compte.  Cette attaque est appelée de l'ingénierie sociale.   Il peut s'agir de "demander" à l'utilisateur d'envoyer les données confidentielles à l'attaquant lui-même, ou d'installer un logiciel malveillant lui-même.  A part éduquer l'utilisateur, il y a peu de défenses techniques contre cette forme d'attaque relativement facile avec des utilisateurs crédules.  C'est l'équivalent numérique de l'appel téléphonique où vous vous faites passer pour le banquier de la victime, pour qu'il vous donne le numéro de sa carte bancaire et son code secret.

Vecteurs d'attaque

Par quels moyens l'attaquant peut atteindre votre système ?  Pour pouvoir exécuter une attaque, il faut bien que l'attaquant doit entrer en contact avec votre système d'une façon ou d'une autre.  Ce moyen d'entrer en contact est appelé le vecteur d'attaque.   Heureusement, plus efficace le vecteur d'attaque, plus difficile il est à utiliser et moins de personnes ont la possibilité potentielle de la porter.  Aussi, plus efficace est le vecteur d'attaque, plus grande est la probabilité pour l'attaquant de se faire prendre.

Les différents vecteurs d'attaque sont:

  • L'Internet.  Sans surprise.  C'est bien sûr le vecteur d'attaque le plus populaire, mais ce n'est pas nécessairement le plus dangereux.  En fait, l'erreur est de croire que c'est le seul vecteur d'attaque.
  • L'accès sans fil.  Depuis le déploiement généralisé des réseaux locaux sans fil,  l'accès à ces réseaux souvent vulnérables est devenu une attaque de choix.  Comme l'accès à ce réseau peut se faire en dehors de votre propriété (dans la rue, chez le voisin, ...), son accès n'est pas si difficile.  Mais comme il faut une proximité physique, le nombre d'attaquants potentiels est fortement réduit. 
  • Réseau câblé (externe ou interne).  Ceci devient plus difficile.  Il faut accéder physiquement à un branchement réseau (une imprimante, un router dans une armoire...), un câble.  Ceci limite sérieusement le nombre de personnes pouvant exécuter une telle attaque et augmente fortement la probabilité de se faire prendre.  Cependant, c'est plus facile d'accéder au réseau qu'à un ordinateur sans générer de la suspicion: un électricien de maintenance travaillant sur des câbles est moins suspect que le plombier ouvrant une session console sur un terminal dans la salle serveur...
  • Accès à la console d'une machine, ou à des ports physiques (ports USB par exemple).  Beaucoup de systèmes deviennent beaucoup plus vulnérables quand l'attaquant a accès à la console, ou quand il peut brancher un appareil malveillant.  Dans beaucoup de cas, ce sont des vulnérabilités par conception.
  • Accès à l'électronique.  Si un attaquant peut ouvrir le boîtier et accéder au matériel électronique, il peut corrompre le matériel ou le micrologiciel.
  • Accès au système avant livraison sur place.  On peut modifier le système, matériel, micrologiciel, ... comme on veut.
  • Vol ou confiscation du système.  Si un attaquant peut emporter le système, pour analyse détaillée autant qu'il le veut, la plupart des systèmes vont livrer tous leurs secrets.

 Il faut analyser à quel point vous allez rendre facile ou difficile chaque vecteur d'attaque.  En fonction du modèle de menaces, il faut estimer si un vecteur d'attaque est susceptible d'être tenté ou non.  Par exemple, si vous avez un PC dans l'entrée de votre magasin qui n'est pas toujours sous surveillance, ou vous avez une imprimante à coté des toilettes, l'attaque par accès physique à la machine ou au réseau est bien plus facile que si vous aviez enfermé ces machines dans un local avec une porte fermée à clé sauf quand il y a du personnel de l'entreprise présent.  La probabilité qu'il y ait quelqu'un qui branche une clé USB dans une machine de bureau dépend de la facilité avec laquelle un inconnu peut se promener près d'un ordinateur de bureau.

Il ne faut pas nécessairement se protéger contre ces vecteurs d'attaque, mais il faut y réfléchir en fonction du modèle de menace.

Vulnérabilités

Les vecteurs d'attaque servent à atteindre une vulnérabilité.  Les vulnérabilités peuvent se laisser classer en trois types:

  1. Des vulnérabilités par conception
  2. Des erreurs (bugs)
  3. Des portes dérobés

Les vulnérabilités par conception sont connues et acceptés dans les décisions de conception d'un aspect du système ou protocole, dans le cadre du compromis nécessaire entre fonctionnalité et sécurité, où on a en connaissance de cause, opté pour la fonctionnalité.  Par exemple, quand on accède physiquement à la machine, il est possible de formater tous ses disques durs, et d'installer un nouveau système avec du nouveau logiciel et nouveaux codes d'accès, même si on n'a pas les codes d'accès de l'ancien système (si on n'est pas un utilisateur de l'ancien système).  La conception de la machine est tel que ceci est une procédure bien documentée et que la possibilité de pouvoir faire cela est estimée plus importante que d'être dans l'impossibilité de le faire.   Par exemple, il faut pouvoir réutiliser un ordinateur laissé par un ancien collaborateur.  Il se peut aussi que la difficulté technique pour l'empêcher est telle qu'on préfère ne pas se lancer dans cette aventure.

Une autre vulnérabilité par conception est: être capable de réécrire le micrologiciel du BIOS, même si on n'a pas accès à l'ancien système d'exploitation et si les disques sont encryptés.  Une autre est de pouvoir lire tout sur les disques non-encryptés, même si on n'a aucun accès au système d'exploitation: il suffit de redémarrer sur un système externe (par exemple une clé USB) et de monter les disques d'origine dans le système qui vient de démarrer.   Il n'y a quasi aucune trace d'une telle intrusion, mais c'est aussi très pratique de pouvoir faire cela si le système d'origine est défaillant.  Ainsi, on a fait le choix de permettre cela pour avoir la possibilité de réparer une machine dont le système est totalement confus et où il n'est plus possible, pour une ou autre raison, de se connecter comme utilisateur légitime.

Encore un autre exemple de vulnérabilité par conception est le protocole internet: vous ne maîtrisez absolument pas où vont vos paquets et tout le monde le long du chemin peut les voir, peut voir d'où ils viennent, peut voir où ils vont et peut les modifier.  Le protocole internet n'a pas été conçu avec la sécurité comme priorité, ni l'anonymat.

Il faut être conscient des vulnérabilités par conception, et il faut les protéger du vecteur d'attaque adéquat par un autre moyen.  Il faut par exemple protéger physiquement un ordinateur de bureau, et il faut utiliser des techniques cryptographiques d'identification, de vérification authenticité et de chiffrement si on utilise le protocole internet.

Cependant, la plupart des vulnérabilités "intéressantes" sont des bogues.   Des systèmes complexes de logiciel contiennent beaucoup de bogues et certains impliquent que le logiciel ne va se comporter comme prévu si un attaquant présente des données d'entrée (parfois très bizarres).   Il se peut que la réaction erronée du logiciel donne des droits non prévues à l'attaquant: dans ce cas, c'est une vulnérabilité.   Mais pour pouvoir profiter d'une vulnérabilité, l'attaquant doit atteindre le logiciel contenant le bogue en question à travers un vecteur d'attaque.   Ce vecteur est souvent l'internet.  Il se peut que l'accès est voulu par le propriétaire, par exemple, un service web.  Il se peut que l'accès est ouvert, mais que l'idée n'est pas que tout le monde l'utilise: un port internet ouvert pour usage interne.  Mais l'accès (voulu, par erreur, ou inévitable) par l'Internet à un logiciel contenant une vulnérabilité est une façon des plus classiques pour attaquer un système.

Finalement, il peut y avoir un accès conçu et voulu par le concepteur d'un logiciel, mais gardé secret pour l'utilisateur et non-documenté: c'est une porte dérobée.  En principe, le concepteur et tout le monde qui est au courant, peuvent accéder comme conçu à votre système à travers ce logiciel s'il y a un vecteur d'attaque, comme une connexion réseau.  Ces portes dérobés peuvent avoir beaucoup de raisons: des détendeurs de droits qui veulent pouvoir vérifier sur votre système si vous ne violez pas leurs droits, des entreprises commerciales qui veulent voler des informations personnelles pour des raisons d'analyse de données à grande échelle, des organismes d'espionnage qui veulent vous espionner.  Les portes dérobées peuvent être imposés par la loi pour pouvoir détecter à grande échelle des comportements qui violent des lois, ou trouver des gens qui ont des idées qui ne sont pas politiquement corrects (surveillance globale)...

La meilleure, sinon la seule façon de se protéger en principe contre des portes dérobées est du logiciel open source.  Il est extrêmement difficile de cacher une porte dérobée si le code source est public.  Il y a eu des portes dérobées dans du logiciel open source, mais seulement dans quelques cas, comme socal c'était un contributeur  qui l'avait mise dedans.  Dans la plupart des cas de porte dérobée dans un logiciel open source, en compromettant les serveurs du code.  Une indication que des portes dérobées sont bien plus probables, et bien plus protégés de découverte, est le débâcle de la Borland database.  Borland (oui, la compagnie qui fait aussi des compilateurs Pascal) avait mis une porte dérobée dans son propre produit en 1994, qui est restée cachée et vendue à beaucoup de clients.  Quand Borland a rendu le projet "open source" la porte dérobée a été trouvée en 6 mois de temps par des gens lisant le code.  La porte dérobée était assez basique: un login supplémentaire avec nom d'utilisateur "politically" et mot de passe "correct"...

Dans quelques cas, des compilateurs ont été compromis  de telle façon qu'ils mettaient une porte dérobée dans chaque code qu'ils produisaient.  Un exemple spectaculaire et récent est  la corruption de XCode dans la sphère Apple.  Effectivement, il reste la vulnérabilité que du code open source, on peut inspecter le code source, mais le code compilé avec un compilateur qui introduit une porte dérobée ne peut pas être détecté en lisant le code source.  Une solution à ce casse-tête est présentée ici.

Stratégies d'attaque

Un attaquant utilisera différentes stratégies, avec les vecteurs d'attaque à sa disposition, et en utilisant différents types de surface d'attaque, pour atteindre son but.  La stratégie peut être complexe parce qu'un seul vecteur d'attaque sur une seule surface d'attaque peut ne pas permettre d'attendre le but de l'attaquant.  Une stratégie consiste à mettre en place une séquence d'attaques où des systèmes sont compromis et servent comme zombies pour attaquer d'autres systèmes, qui à leur tour deviennent des zombies, jusqu'à ce que le but final est atteint (sans se faire prendre).

Exemple de stratégie d'attaque hypothétique dans un exemple hypothétique (un peu inspiré par stuxnet):

Supposez que la compagnie X possède une usine chimique dans un pays lointain où des mélanges chimiques sont fabriqués sur mesure pour des clients.  Le directeur de l'usine Y va produire des produits chimiques pour un client donné avec une composition donnée seulement sur ordre du CEO de X, qui signera de façon cryptographique l'ordre de production.  Le directeur Y vérifiera la signature de chaque ordre donnée qu'il reçoit et exécutera les instructions si la signature est bonne.  Le CEO est conscient de l'importance de sa clé cryptographique privée qui peut produire les signatures, et pour cela, il garde cette clé sur un ordinateur spécial qui ne sert qu'à signer des ordres, dans un coffre fort, sans connexion réseau.  En fait, le CEO tape son ordre sur son portable de bureau, sauvegarde son document sur une clé USB, prend son ordinateur spécial du coffre fort, y met la clé USB, signe le document à partir de l'ordinateur sur la clé, et range l'ordinateur spécial de nouveau dans le coffre fort.  Ensuite, il lit le document signé de sa clé sur son portable normal, et envoie celui-ci au directeur de Y.

Cette procédure semble totalement étanche à toute attaque.

Imaginons maintenant que la compagnie X est sur le point de signer un très gros contrat avec la grosse entreprise Z, mais avant de s'engager, Z veut analyser la qualité de la production de X.  Une entité W voudrait empêcher la signature du contrat.  Le plan est de faire signer une production mauvaise par Y, pour que Z perde confiance en X et ne signe pas le contrat.  Mais il faut donc envoyer de fausses instructions à Y pour qu'ils produisent les mauvais mélanges, en utilisant la clé secrète dans l'ordinateur dans le coffre fort.

Comment voler la clé secrète ?

Une stratégie pourrait être de compromettre le portable du CEO de X dans lequel il met la clé USB avec les documents à signer.  Si le portable corrompu peut installer une variante de BadUSB pour modifier le micrologiciel de la clé USB, alors la prochaine fois que le CEO va mettre cette clé dans l'ordinateur avec la clé secrète, le micrologiciel dans la clé USB peut installer un petit malware sur la machine qui trouvera la clé et l'enverra à la clé, qui va la stocker dans le micrologiciel.

De retour sur le portable du CEO, la clé USB va maintenant émettre la clé secrète qu'elle a reçue à une adresse inconnue quelque part sur un serveur web de l'autre coté du monde.  L'attaquant peut récupérer son fichier du site web, fermer le site, et ni vu ni connu.   Au moment où le CEO de X va se rendre compte que sa clé USB a du micrologiciel compromis (ce qui est, en soi, difficile à constater), il n'y aura plus aucune trace à suivre.  L'attaquant peut même restaurer la clé, et effacer toute malware qu'il avait mis en place, une fois la clé secrète récupérée.

Avec la clé volée, l'attaquant peut maintenant signer des documents au nom du CEO au directeur de Y, pour faire une production chimique totalement ratée.   Quand le produit sera livré à Z, et se plaindra de la mauvaise qualité, après investigation on se rendra peut-être compte ce qui c'est passé, mais en tout cas, Z considérera X comme un partenaire à éviter.  Mission accomplie pour l'attaquant.

C'est bien sûr plus facilement dit que fait.  Il faut déjà connaître le système et le logiciel utilisé qui contient la clé secrète pour signer les documents.  Mais une fois connue, il suffit de copier les fichiers contenant la clé (sans doute encryptée elle-même avec un mot de passe), et d'installer un espion de clavier pour saisir le mot de passe qui déverrouille la clé encryptée.  L'attaquant peut, s'il connaît la configuration de ce système, tester son malware chez lui jusqu'à ce qu'il soit parfaitement opérationnel dans tous les cas de figure.

Ensuite, l'autre difficulté est de compromettre le portable du CEO.  C'est là qu'on voit qu'il faut appliquer une stratégie.  On peut par exemple essayer de l'ingénierie sociale sur un membre du personnel qui a un ordinateur sur le réseau interne de l'entreprise.  Si l'attaquant peut transformer cet ordinateur en zombie, comme il est maintenant sur le même réseau que le portable du CEO, cela le rend plus vulnérable.

L'attaque proposée est très ambitieuse, mais elle montre que même un système qu'on pourrait croire parfaitement sûr, avec de gros enjeux, peut être attaqué.  Si l'enjeu est gros, on peut investir des moyens dans l'attaque.

Comme déjà mentionné, cette attaque est un peu du style de  l'attaque stuxnet sur les installations d'enrichissement d'uranium Iraniennes.

Bogues comme vulnérabilités et divulgation

L'erreur conceptuelle que je commettais moi-même avant de m'intéresser d'avantage à la cyber sécurité, était de penser que oui, il y a beaucoup de bogues dans les logiciels d'un système, qui peuvent potentiellement être des vulnérabilités, mais que seulement une poignée d'attaquants fort compétents pouvaient les utiliser.  Effectivement il n'est pas facile du tout de transformer la connaissance de l'existence d'un bogue en quelque chose qui vous permet d'attaquer avec succès un système, car bien sûr le bogue n'était pas fait pour permettre cela (s'il ne s'agit pas d'une porte dérobée).  Si vous vous mettez dans la peau d'un attaquant "nu", la simple connaissance de l'existence du bogue demande beaucoup de connaissances pointues pour en faire une attaque exploitable.  Ma fausse idée était que seulement une poignée de personnes avaient les connaissances pour exploiter "correctement" un bug et que la probabilité que cette poignée de gens voulaient perdre leur temps en me prenant pour cible était infime.Rien n'était plus loin de la vérité.  Bien qu'il soit vrai que trouver des bogues "utilisables" est extrêmement difficile, et effectivement, trouver des moyens de les transformer en attaque réussie peut être encore plus difficile et effectivement, il n'y a pas beaucoup de gens qui ont ces capacités, les vulnérabilités connues sont rendues publics et souvent, du logiciel qui utilise la vulnérabilité pour mener une attaque, est donné avec.  Donc vous ne devez pas trouver les bogues vous-même, et souvent, vous ne devez même pas écrire un logiciel qui les exploite.  Vous pouvez utiliser ce qui est publiquement disponible.  Cela élargit la quantité d'attaquants potentiels bien sûr.  Il y a des logiciels libres et commerciales qui vont même intégrer des milliers de codes d'attaque de vulnérabilités, qui peuvent essayer par tous les moyens de trouver une faille dans un système sous attaque.  C'est une toute autre image que le génie solitaire et malicieux qui à trouvé, après dure labeur, un bogue et il va utiliser cette connaissance contre 3 systèmes victime.... Non, des milliers de gens ont à leur disposition des logiciels libres qui contiennent le savoir de milliers de bogues et des façons pour les exploiter pendant une attaque !

Un peu de terminologie:

  • un bout de logiciel ou une technique qui rend utile une vulnérabilité pour donner une forme ou autre d'accès du système est un exploit.
  • un exploit ou/et la vulnérabilité en question peut être connue publiquement, ou ne peut être connu par certains attaquants.  Dans le dernier cas, nous appelons cet exploit, un exploit de zéro jours (elle est connue, on a travaillé pour blinder contre son attaque depuis maintenant... zéro jours).
  • La réaction normale quand une vulnérabilité est connue par le public, est de produire une mise à jour du logiciel en question, dans laquelle l'erreur est réparée. 

Il y a trois attitudes différentes possibles vis à vis les exploits zéro jour:

  1.  divulgation totale.  Du moment où on découvre un exploit zéro jours (et on n'a pas l'intention de l'utiliser soi-même comme attaquant), on divulgue tout de suite tout ce que l'on sait.  Ainsi, tout le monde connaît la vulnérabilité et peut prendre des mesures, mais aussi, tous les attaquants potentiels apprennent qu'il y ait cette possibilité.
  2. divulgation coordonnée (parfois appelé divulgation responsable).  A partir du moment où on découvre un exploit zéro jours, on informe seulement le distributeur du logiciel en question, pour lui permettre de trouver un remède et mettre à disposition une mise à jour.  Après un délai fixé on divulgue la vulnérabilité au public.  Il peut y avoir une négociation avec le distributeur du logiciel concerné pour attendre la mise à jour, mais pas infiniment.
  3. non-divulgation.  Vous êtes un attaquant, et les exploits zéro jour sont un jus précieux.  Vous les utilisez vous-même, ou vous les vendez pour beaucoup d'argent à ceux voulant les acheter (comme des agences de renseignement).  Ou vous êtes une personne naïve et prétentieuse qui pense que vous seul êtes capable de trouver un tel bogue, et si vous ne le dites à personne, jamais un attaquant ne le découvrira de lui-même, donc il vaut mieux garder le secret.

Les arguments en faveur de la divulgation totale et immédiate sont l'inverse de ceci: si vous êtes capable d'avoir trouvé ce bogue, il y a sans doute déjà des attaquants qui l'ont trouvé avant vous, et plus vite que tout le monde soit au courant, mieux que cela ne vaut, car tout personne qui gère un système sensible peut alors, en toute connaissance de cause, prendre des mesures (comme arrêter le système jusqu’à ce qu'il y ait une solution) et on ne le laisse pas dans l'ignorance.  En tout cas, cela met la pression maximale sur le distributeur du logiciel concerné pour faire quelque chose rapidement.  Les arguments pour une divulgation coordonnée sont les mêmes, sauf qu'il n'y a pas nécessairement une relation proche de la découverte du bogue par un attaquant et par vous.  Si l'attaquant l'a déjà découvert il  y a 6 mois, quelques semaines de plus ou de moins ne changent pas grand chose, et il vaut mieux divulguer un bogue que quand une mise à jour normale de sécurité ait déjà résolu le problème.  L'argument principal contre la divulgation coordonnée et pour la divulgation totale est la pression que l'on met sur le distributeur de logiciel.  Il y a une guerre quasi-religieuse entre les deux écoles, mais il semble que c'est souvent la divulgation coordonnée qui est utilisée en pratique.

Mais quoi qu'il arrive, cela implique quelque chose de très pratique: des mises  à jour de sécurité doivent être appliqués très vite et systématiquement !