J'ai le souvenir d'avoir vu (il y
a longtemps) un dessin humoristique qui montrait un passager sur un
siège d'avion, avec son portable ouvert devant lui, et qui regardait
avec un air terrifié l'écran de ce portable qui affichait quelque
chose comme nouveau périphérique BlueTooth détecté :
.
[Ajout : apparemment ce dessin (dont l'original,
allemand, est ci-contre) est
de Ritsch & Renn — même si
je ne peux pas vraiment vérifier vu que leur site tout en Flash est
tout cassé chez moi.]Airbus
A310
; autoconfigurer ? OK / annuler
Je mentionne ça parce que j'ai entendu quelques échos d'une histoire selon laquelle un expert en sécurité informatique (Chris Roberts) aurait réussi à plusieurs reprises à émettre des commandes en direction du système de pilotage d'avions commerciaux en vol en se branchant simplement au niveau du système d'in-flight entertainment [je ne sais pas comment on dit ça en français : je veux dire le système qui vous propose de voir des films, d'écouter de la musique, de voir la position de l'avion sur une carte, etc.]. C'est du moins ce qu'il a lui-même déclaré dans un tweet, puis expliqué au FBI qui l'a interrogé, comme il résulte d'un affidavit du FBI (les deux sont liés depuis l'article d'Ars Technica vers lequel je viens de pointer).
Je ne sais pas si ces affirmations sont vraies (je dois dire que si
je crois vaguement qu'il aurait pu envoyer une commande pour lâcher
les masques à oxygène, j'ai du mal à croire qu'il aurait pu passer une
commande climb
au système de navigation : je
serais déjà surpris, en fait, qu'il existât une telle commande — que
ce soit entre les commandes du cockpit et le pilote automatique, ou
entre le pilote automatique et l'avionique, les commandes doivent
probablement refléter soit l'interface côté cockpit soit les
mouvements de bas niveau des différentes parties de l'avion, et je ne
vois pas à quel niveau on dirait à l'avion grimpe
, mais bon).
Comme le dit quelqu'un dans un autre tweet cité par Ars
Technica, soit Chris Roberts a menti, soit il a vraiment joué
avec un avion en vol, et dans les deux cas c'est irresponsable pour un
expert en sécurité informatique. Je suis d'accord avec ce jugement,
mais ça n'empêche pas qu'on ait envie de se pencher sur la question de
savoir si ce serait possible. Une autre question est de savoir si une
attaque serait
possible depuis le Wifi de bord, ou en utilisant celui-ci pour
monter l'attaque depuis le sol (ce qui serait encore plus
terrifiant).
Le problème, c'est que je doute que nous obtenions une réponse claire et publique de la part d'Airbus ou Boeing (ou d'autres concernés) : je soupçonne qu'ils n'ont pas compris que la seule approche qui marche un peu pour la sécurité informatique, c'est la transparence. Et en l'occurrence, j'aimerais bien avoir confirmation du fait qu'ils ont suivi des principes qui me semblent aller complètement de soi, tels que :
- la séparation absolue et complète au niveau des câbles (et pas simplement logicielle) entre les circuits de communication servant (A) au pilotage de l'avion (depuis le niveau le plus bas de contrôle des capteurs et moteurs jusqu'au niveau le plus haut présenté aux pilotes), (B) à la sécurité et au contrôle de la cabine (tout ce qui concerne l'équipage de cabine), et (C) à l'in-flight entertainment et au Wifi de bord, et
- le placement des câbles servant à (A) à un endroit où il est invraisemblable de les atteindre depuis la cabine sans attirer énormément d'attention (par exemple en commençant à utiliser une perceuse, ce qui va sans doute se remarquer).
Est-ce le cas ? Je l'ignore. En principe, il devrait
être possible de faire quelque chose de sûr où les câbles (A), (B)
et (C) seraient interconnectés, mais
vue notre incapacité
(où nous
= l'espèce humaine) à écrire du code informatique sûr
même pour des choses très simples, je n'aurais vraiment pas envie de
me risquer dans un avion où un simple switch sépare les commandes de
vol et la diffusion des films dans la cabine. Même si
un switch
est probablement ce qu'on a le plus de chances d'arriver à programmer
de façon totalement sûre (interdire tout paquet passant dans un
certain sens, même un chimpanzé relativement réveillé doit réussir à
programmer ça si on lui propose une banane suffisamment juteuse), je
me méfierais quand même des attaques
de déni
de service (risque-t-on de pouvoir flooder le switch ?), y compris
au niveau physique (risque-t-on de pouvoir griller le switch depuis un
port de façon à l'empêcher de fonctionner depuis d'autres ?). Je me
sentirais plus à l'aise de savoir que les signaux sont totalement
séparés (d'ailleurs, je me sentirais aussi plus à l'aise de savoir que
les commandes de vol, à tous les niveaux, utilisent non pas Ethernet
mais quelque chose qui garantit des canaux à bande passante fixe,
comme une forme de bus série blindé — peut-être
que David
Monniaux saura nous en dire plus).
Remarquez que si la séparation dont je parle peut sembler de simple bon sens, elle a des conséquences non évidentes : par exemple, s'il ne doit y avoir une séparation absolue entre les commandes de vol et tout ce qui concerne la cabine, ceci signifie que l'affichage fait aux passagers de la position actuelle, vitesse et altitude de l'avion doit venir d'un GPS (par exemple) différent de celui qui assiste le pilotage, puisque la transmission d'informations de ce dernier vers la cabine, même à sens unique juste pour les afficher, violerait la séparation que je propose. Bon, à défaut d'un second GPS juste pour afficher la position aux passagers (enfin, c'est pas comme si un GPS coûtait cher, par rapport à un avion, mais c'est vrai que si c'est pour un usage aéronautique, tous les prix sont multipliés par un zillion, même les sièges coûtent les yeux de la tête), on peut imaginer capter le signal émis par le transpondeur de l'avion lui-même, comme le fait FlightRadar (si vous ne connaissez pas, suivez ce lien, c'est fascinant — d'ailleurs, mon poussinet est totalement accroc). Mais en tout cas, ce n'est pas totalement évident. Et il y a probablement d'autres choses qu'il faudrait penser intelligemment comme ça.
(Dans le genre, il me semble comprendre que toutes les agences de services de renseignements ont deux ordinateur dans chaque bureau — typiquement repérés par un code de couleur, genre blanc et noir —, l'un étant connecté à Internet, l'autre étant connecté au réseau interne sécurisé, et il n'y a tout simplement aucune connexion entre les deux. J'imagine qu'ils ont des règles très strictes pour passer quand même de temps en temps des informations de l'un à l'autre : peut-être graver un DVD avec des fichiers sous un format précis et très contrôlé, et insérer le disque dans l'autre ordinateur où il sera soigneusement validé avant quelque usage que ce soit.)
[Mise à jour
() : on me signale
que Bruce
Schneier a
écrit une
entrée de blog sur le sujet, où il affirme
explicitement : Newer planes such as the Boeing 787
Dreamliner and the Airbus A350 and A380 have a single network that is
used both by pilots to fly the plane and passengers for their Wi-Fi
connections.
Mais
comment a-t-on pu autoriser ça ‽ (Par ailleurs, sur le fond,
Schneier a le même avis que moi.) • Pour ce qui est des services de
renseignement ou autres agences sensibles, je propose que le transfert
se fasse par média optique plutôt que par clé USB, parce
qu'une clé USB contient une puce qui a un firmware, et
qu'on dont on peut donc
potentiellement prendre
le contrôle, donc c'est une mauvaise idée. (Après, je suis aussi
persuadé que l'immense majorité des secrets
des services
secrets sont totalement bidon, donc je m'en fous un peu, mais
bon.)]
Je répète que je ne sais pas ce qu'il en est pour ce qui est de l'éventuelle connexion des avions. Mais le simple fait qu'on peut avoir à se poser la question n'est pas très rassurant. Je pourrais me moquer de l'aviation, une industrie qui comme beaucoup d'autres continue à penser la sécurité en terme d'obscurité plutôt que de transparence (pour donner un exemple : quand j'étais à l'ENS, le laboratoire d'analyse statique était très fier de ce que leur analyseur statique, Astrée, avait réussi, en partenariat avec Airbus, à analyser et valider le système de commande de vol principal de l'Airbus A340 ; mais une question à laquelle je n'ai pas eu de réponse est : pourquoi ce logiciel de commande de vol n'est-il pas rendu public, au juste ?, ce qui permettrait à d'autres gens de faire des analyseurs statiques capables de l'étudier, ou simplement de l'examiner avec des yeux d'humains ; étant donné que le business d'Airbus est de vendre des avions, pas du logiciel, pourquoi les sources de toutes les parties logicielles de leurs avions ne sont-elles pas publiées ? ce n'est pas comme si leurs concurrents pouvaient les exploiter sur des avions différents avec des technologies différentes — et de toute façon je suis sûr que les espions industriels sont assez bons pour que Boeing ait déjà le code utilisé par Airbus et réciproquement, donc l'enjeu est juste de savoir si le public, lui, l'aura). L'avion est, par ailleurs, un milieu où on continue à mesurer la hauteur des avions en multiples de la longueur du pied de je ne sais quel roi anglo-saxon : c'est-à-dire, un monde complètement enfermé dans ses habitudes absurdes et incapable d'évoluer. (Je pourrais aussi raconter que les systèmes de réservation des places des compagnies aériennes sont, encore de nos jours, écrits en assembleur IBM/360 et échangent des données en EBCDIC. Ça va très bien avec l'usage du pied et du mille comme unités de mesure pour démontrer l'état d'esprit de tout le milieu.) Bref, je ne sais pas si je fais confiance aux constructeurs d'avions pour avoir fait les choses correctement au départ en ce qui concerne la sécurité informatique, mais je suis persuadé d'une chose : s'ils n'ont pas fait les choses correctement au départ, alors ils vont tout faire pour le cacher, et surtout ne rien changer, nier le problème, menacer ceux qui en parlent de procès en diffamation, etc.
Mais bon, au-delà des petites turpitudes du monde de l'aviation, de
façon plus large, ceci doit nous inviter à méditer sur ce problème qui
se pose de façon de plus en plus aiguë : nous sommes incapables
d'écrire du code informatique sûr, et nous avons besoin de quantités
de plus en plus gigantesques de code informatique. Je ne sais pas où
nous allons au juste comme ça, mais c'est inquiétant, parce que dans
le monde de l'Internet des objets
, on devra se soucier en
permanence de la sécurité logicielle de chacun des objets qui nous
entourent — bof.