Maux de passe (dernière partie)

Sam 23 janvier 2010

Ce qui suit est la troisième et dernière partie de la nouvelle Polar Geek "Maux de passe". Pour info :

Je sentais qu'il fallait reprendre à la base.

"Quenya.
- Quenya...
- Oui, le langage des elfes de Tolkien, vous savez, le Seigneur des Anneaux, tout ça...
- Oui, je connais, j'ai vu le film.
- Oui, ben dans le film ils parlent Sindarin, qui a des racines communes, mais...
- M'en fiche de la linguistique tolkiennienne. La culture geek, ça m'emmerde. Vous comprenez ce qu'il répète tout le temps ?
- Des bribes. J'ai pris des notes, je pourrais bientôt vous communiquer le résultat, dès que j'aurai fini de vérifier.
- Vous pensez que son mot de passe est en... Quenya ?
- Possible. Mais on ne saura que lorsque nous aurons percé le mystère de ce script Perl. Je bosse dessus aussi. D'ailleurs, à ce propos, vous allez recevoir une facture pour l'achat d'une bécane toute neuve."

Il a tranquillement écouté le résumé de mon histoire et n'a pas paru étonné.

"Je me doutais bien que Merriault avait piégé ce script. J'avais moi-même soigneusement évité de le lancer.
- Oui ben moi j'aurais bien aimé évité aussi, mais ce qui est fait est fait."

Et je me redirigeais vers le bureau. La porte était déverrouillée. Jenny pas là. C'était la pause-déjeuner. Méfiance. Dans les films, c'est le moment que choisit l'enquêteur pour défourailler son P38. Tout ce que j'avais dans la poche intérieure de mon blouson, c'était une barette de RAM de 2Go.

Globalement inoffensive.

Je poussais la porte qui grinça. Même pas surpris de voir que mon fauteuil était occupé par un type qui aurait pu ressembler à HUGH. Mais en plus gros et plus blond.

"Excusez-moi. Je me suis permis d'entrer. Vos accès ne sont pas du tout sécurisés."

Tout ça sans quitter l'écran des yeux. J'étais fixé. Cet air hautain et supérieur : HUGH, tout craché. J'avançais et me carrais dans le fauteuil de l'invité. Intérieurement, j'enrageais un peu. Je m'étais bien emmerdé à coder tous ces bots qui devaient signaler son activité, et il se trouvait tranquillement face à moi en train de faire je ne sais quoi sur mon ordi.

"Vous avez dû trouver mon stratagème un peu cavalier...
- Certes. Mais je sais que je suis difficilement joignable, alors ça ne m'a pas vexé.
- Tant mieux. Vous voulez savoir pourquoi j'ai essayé de vous pinguer ?
- Vous pouvez essayer de m'expliquer, mais je présume que c'est le cas Merriault qui vous préoccupe ?"

Scié, j'étais. Scié, j'essayais de ne pas paraître. Il montra la clé USB ; quel con ! J'aurais dû la garder avec moi.

"Le script sur cette clé, si j'ai bien pigé... il détruit intégralement un disque tout en s'attaquant aux composants un à un en les faisant finalement fondre ?
- Oui, globalement, c'est ça. Il a crashé ma machine de test, qui n'était heureusement pas reliée au réseau.
- Sage décision. Vous croyez qu'il y a plus que ça derrière ce 'virus' écrit en Perl ?"

Je marquai un temps. Déjà, si HUGH avait réussi à deviner sans le lancer que ce script Perl était une machine à tuer les UC, il était un bon candidat pour décoder le passe de Merriault :

"Que savez-vous du 'cas Merriault', comme vous avez dit ?
- Il a eu un accident, et est dans le coma.
- Comment le savez-vous ?
- Merriault et moi n'étions pas spécialement... proches... mais nous correspondions régulièrement sur les newsgroups de sécurité. Bien entendu, il ne sait pas qui je suis.
- Ça ne m'explique pas comment ?...
- Pas de mail depuis quelques jours, pas d'activité sur IRC, ni Facebook et... sur un de ses serveurs trois patches de sécurité n'ont pas été appliqués en moins de douze heures. J'en ai déduit qu'il avait un soucis. Quant à savoir où il se trouve... j'ai mes sources.
- Ok. Ben mon petit secret à moi, c'est qu'il est sorti du coma."

Il fit un ACK de l'information par un hochement de tête.

"Et il a parlé ?
- Oui. Mais dans une langue...
- Klingon ?
- Non. Quenya"

Petit ricanement. Je lui tendis mon carnet de notes, confiant. Après quelques secondes :

"On peut traduire ça par 'Il n'y a pas de mot de passe', ou du moins, dans le contexte, c'est comme ça que je le comprends. Et maintenant je comprends pourquoi vous avez besoin de moi. Vous n'avez pas son mot de passe root.
- Implacable déduction, Sherlock.
- Vous croyez que le mot de passe se trouve dans ce script Perl ?
- C'est une hypothèse. Mais s'il n'arrête pas de répéter qu'il n'y a pas de mot de passe, je me demande s'il ne suffit pas d'appuyer sur 'enter' pour accéder à son root.
- Bollocks.
- ... Oui, sûrement. Je ne sais pas si son employeur a déjà essayé. Bon. Vous voulez nous aider ou pas ?

Pause. Un cycle de CPU plus tard.

"Vous avez quoi à me proposer en échange ?"

Il fallait l'appâter, mais HUGH ne roule pas pour l'argent. Il lui fallait autre chose :

"Vous décodez ce qu'apparemment personne ne peut décoder, et ça prouve une fois de plus que vous êtes plus malin que Merriault.
- Foutage de gueule. C'est vrai que le challenge intellectuel paraît séduisant, mais ce ne sont que des miettes. Quoi d'autre ?
- Du temps de CPU sur un cluster. Deux heures.
- Pah. J'ai déjà les mots de passe d'une demi-douzaine d'administrateurs système dont les UC pourraient faire un excellent cluster.
- Oui, mais aucun n'est basé à Weta Workshop."

Scié il était. Scié il essayait de ne pas paraître.

"Je préfère ne pas demander comment vous pouvez avoir un accès à Weta. Mais j'aimerais être sûr avant de dire oui.
- Un ami me doit un service. Je peux fournir une adresse e-mail pour vérifier. Avec signature GPG."

Il me regarda longuement. Une lueur brillait dans ses yeux. Il entrevoyait déjà ce que deux heures pouvaient donner à pleine puissance sur ces monstres.

Une fois qu'il était parti, j'envoyais un SMS à mon commanditaire pour lui demander d'essayer de mettre un mot de passe vide. Le SMS que je reçus en retour suggérait que je les prenais pour un n00b, lui et Merriault et qu'il s'attendait à plus de professionalisme de ma part. Mais pas dans ces termes. Quelque chose de moins poli.

Jenny étant revenue de sa pause déjeuner, je l'invitais à changer tous les mots de passe du réseau, et d'aller chercher de nouvelles serrures pour la porte d'entrée.

Maintenant que HUGH était sur le coup, je n'avais plus qu'à noyer le poisson et attendre patiemment qu'il fasse cracher le mot de passe à ce script Perl.

Il m'a fallu attendre trois jours. Je m'étais mis en mode économie d'énergie depuis une heure quand mon mobile sonna. La voix de HUGH.

"Ne cherchez pas à noter le numéro de ce mobile, il ne me servira qu'une fois. Je pense avoir trouvé. Mais pour être sûr il faudrait que je puisse accéder au mainframe.
- Une fois que j'aurais l'autorisation, comment je vous le fais savoir ?
- Vous postez un statut Twitter: Il pleut, merde. Je vous rejoindrai."

Le jour J.

J'avais posté le statut depuis mon mobile, en 3G. Deux minutes après, HUGH arrivait. Teint en roux, casquette des New-Yorkers et gros sac de toile en bandoulière. Il me serra la main, et me balança, en anglais, avec un accent Gallois à couper au couteau :

"Hé bien, mec, on peut dire que tes trains ont une fâcheuse tendance à être en décalage horaire par rapport à l'UTC. Deux heures de retard sur un voyage de quatre. Bastards."

Mouais. Je comprenais qu'il n'avait pas envie qu'on sache qui il était, mais de là à se transformer en une réincarnation d'Alan Cox il poussait un peu.

On arrivait au mainframe. Il sortit son portable. Une bête de combat. Branchement au réseau. Quelques cycles DHCP plus tard, il se trouvait face au :

login: nmerriault
password:

Un temps. Le client était là, anxieux. Sa boîte était sujette à toutes les rumeurs et il n'en pouvait plus de balancer des communiqués de presse en pleine crise. Les dévs n'en pouvaient plus non plus de mouler sur IRC/Facebook/Twitter à longueur de temps. Le chômage technique, pourquoi pas, mais le chômage des neurones, ça donnait des envies de démission à plus d'un.

HUGH tapa simplement sur la touche "ENTER" ; je tremblais. On m'avait déjà assez sonné les cloches, j'avais pas besoin de prendre un savon sous les yeux du hacker.

Incorrect login. Retry.

HUGH décocha un juron en Gallois (ou du moins je devinais que c'était un juron, et le manque évident de voyelles dans la locution ne laissait aucun doute sur son origine). Le client fulminait :

"Vous vous foutez de moi ? Merriault n'aurait jamais utilisé ce mot de passe vide à la con. Même un élève ingénieur en première année ne fait pas ce genre de conneries !"

HUGH répondit, dans un anglais à moitié correct, à moitié gallois :

"Tu peux dire à ton client de la fermer ? J'ai besoin de calme pour me concentrer"

Sous mes yeux, HUGH tapa, en détachant bien chaque lettre pour qu'on puisse refaire le passe après :

il n'y a pas de mot de passe<ENTER>

C'est dans ces moments-là que le temps se rallonge. Et là l'écran s'est mis à balbutier une tralée d'infos. On était dedans !

HUGH se retourna vers le client, l'air satisfait du gars qui a joué un joli tour à un prof d'algorithme et structure de données.

"How the fuck did you find out?
- I'll send you an email when I'm logged on to the Weta machines."

Le DSI se jeta sur le clavier pour se connecter au serveur de sauvegardes sur lequel étaient les fichiers cryptés. Le même mot de passe déchiffra les sauvegardes sans problème. Victoire totale. HUGH rulez. Il demanda, très poliment :

"Je peux aller pisser un bock ? c'est où vos chiottes ?"

Et il disparut. Je n'étais pas étonné. Il avait laissé là son PC portable, que je pris une fois avoir pris congés de mon client (il n'y a pas de petit profit - un reformat et ça repart). Cinq jours plus tard, je reçus un email dont l'expéditeur était rms@fsf.org.

Salut,

Ce script m'a vraiment foutu les jetons. Un peu plus et je me demandais si j'allais un jour réussir à le déplomber. J'ai essayé plusieurs méthodes, en intervertissant quelques lignes les unes avec les autres, en supprimant les routines les plus dangereuses pour mon système, etc. Rien n'y faisait. Imbittable. Ce Merriault avait apparamment trouvé le moyen de protéger son mot de passe root de la manière la plus obscure qui soit.

J'ai fait quelques recherches sur lui, son école, son passé. À part le fait que sa prof d'anglais lui reprochait d'avoir appris le mot "cunt" à ses petits camarades, rien de bien folichon.

Et puis il y a quelques jours, alors que je me demandais vraiment comment annoncer que j'allais renoncer à mon temps de CPU chez Weta, je me suis posé la question qui tue :

Pourquoi au beau milieu de ce script on voyait des commentaires ? Et surtout, pourquoi ces commentaires étaient aussi cryptiques que le code ?

Ça n'avait aucun sens. Quand on obscurcit son code, on ne met pas de commentaires, c'est idiot. Même si ces commentaires sont illisibles. C'est alors que je me suis dit que Merriault devait avoir vraiment l'esprit tordu, le cerveau flingué pour faire ce genre de choses.

Cerveau flingué : Brain-Fucked. Brainfuck.

Ce qu'on avait pris pour un script perl n'était en fait qu'un script en BF, ce bon vieux langage Turing-compatible. Des points, des plus et des moins, des crochets etc. Si on "nettoyait" la partie "perl" du script, on avait ni plus ni moins qu'une machine de Turing qui me donna le mot de passe, en Français :

"Il n'y a pas de mot de passe"

Si Merriault disait ça en Quenya depuis son lit d'hôpital, c'est que ses neurones en avaient pris un coup, mais il nous donnait, dans son délire, la clé du coffre.

Au fait, merci pour les deux heures de CPU. Je vous promets que je les ai bien utilisées.

C'était donc ça. Du BF déguisé en Perl. Ce mail me fit sourire. Mais pas autant que le chèque du client qui était arrivé, la veille.


Pièce jointe :

devant la liesse générale, je te joins, au cas où, le code Brainfuck qui génère le fameux mot de passe de Merriault :

++++++++++[>++++++++++>+++>+++++++++++>++++++++++++>+++++++++
>+<<<<<<-]>+++++.+++.>++.>.<+++++++.>>+.<<-------.>>>+++++++.
<<<.>++.>>.<<+++.<.<--------.+.>.<++++++++.>>----.+++++.<.<--
-------.+.>.>----.>>.<<+++..<<.>>>>>.