==Phrack Inc.==
Volume 0x0b, Issue 0x39, Phile #0x0a of 0x12
|=------------=[ Contre le système : Les robots attaquent ]=-------------=|
|=-----------------------------------------------------------------------=|
|=-=[ (C)Copyright 2001 by Michal Zalewski <lcamtuf@bos.bindview.com> ]=-=|
-- [1] Introduction -------------------------------------------------------
"[...] la grande différence entre le Web et les moyens de communication
traditionnels est qu'il n'y a pratiquement aucun contrôle de qui met quoi
sur le Web. Couplez cette facilité de publication avec l'énorme influence
des moteurs de recherche dans le routage du trafic, et les sociétés qui
décident d'utiliser ceux-ci pour leur propre bénéfice peuvent poser un
problème sérieux."
-- Sergey Brin, Lawrence Page (cf références, [A])
Imaginez une faille exploitée à distance et permettant de compromettre un
système sans qu'aucune ligne de code ne soit directement envoyée à la
victime. Imaginez une exploit qui créerait simplement un fichier en local
afin de compromettre des milliers d'ordinateurs, et qui n'implique aucune
source spécifique dans l'attaque. Bienvenue dans le monde des techniques
d'exploitation de bug zéro-effort ! Bienvenue dans le monde de
l'automatisation, bienvenue dans le monde de l'attaque anonyme, d'autant
plus difficile à éviter que la complexité d'Internet augmente.
Les exploits zéro-effort créent une 'wishlist', et la déposent quelque
part dans le cyberespace - voire sur un serveur hébergé chez leur
créateur, bref dans un endroit où d'autres peuvent les trouver. Ces
"autres", ce sont les travailleurs invisibles de l'Internet (cf
références, [D]). Ils sont des centaines à ne jamais dormir, infatigables
chenilles parcourant sans fin la toile mondiale : agentsintelligents,
moteurs de recherche... Ils viennent pour sélectionner cette information,
et - à leur insu - pour attaquer des victimes. Vous pouvez arrêter l'un
d'eux, mais ne pouvez pas les arrêter tous. Vous pouvez découvrir ce que
sont leurs commandes, mais vous ne pouvez pas deviner ce que ces commandes
seront demain, cachés qu'ils sont dans l'abîme toujours inexploré du
cyberespace.
Ils sont votre armée privée, vous les avez sous la main, prêts à obéir aux
commandes que vous aurez pris la peine de laisser sur leur chemin. Vous
les exploiterez sans devoir les compromettre. Ils font ce pour quoi ils
ont été conçus, et ils le font du mieux qu'ils le peuvent.
Bienvenue dans une nouvelle réalité, où nos machines, à l'intelligence
plus que jamais artificielle, peuvent se lever contre nous.
Imaginez un ver. Un ver qui ne fait rien. Il est porté et injecté par
d'autres - mais sans les infecter. Ce ver crée une "wishlist" - wishlist
de, par exemple, 10.000 adresses aléatoires. Puis il attend. Les agents
intelligents indexent cette liste, unissant leurs forces pour toutes les
attaquer. Imaginez qu'ils y réussissent avec, au pire, un taux de succès
de 0,1%. Dix nouveaux serveurs infectés. Sur chacun d'entre eux, le ver
fait exactement la même chose - et les agents reviennent, infectant alors
100 machines. L'infection se poursuit - ou continue à ramper, si vous
préférez.
Les travail des agents intelligents est quasi-invisible, et les gens se
sont habitués à leur présence un peu partout. Ils progressent lentement,
dans une boucle interminable. Ils fonctionnent méthodiquement, ne génèrent
pas de transferts de données excessifs - ils rampent, sans explosion
soudaine de leur activité. Semaine après semaine après semaine, ils
inspectent des machines nouvelles, soigneusement, sans surcharger le
réseau, ne produisant jamais le moindre trafic suspect, repoussant sans
cesse les frontières de leur exploration. Et s'ils transmettaient un virus
de type "worm", un ver, vous en rendriez-vous compte ? Peut-être... ou
peut-être pas.
-- [2] Un exemple ---------------------------------------------------------
Quand cette idée m'est venue à l'esprit, j'ai décidé de faire un essai
très simple, simplement pour vérifier mon raisonnement. J'ai visé, si tant
est que le mot soit approprié, des moteurs de recherches et d'indexation
parmi les plus classiques et généraux sur le Web. J'ai créé une page HTML
très simple et je l'ai mise quelque part. Et puis j'ai attendu quelques
semaines. Et ils sont venus. Altavista, Lycos et des douzaines d'autres.
Ils ont trouvé ces nouveaux liens et les ont sélectionnés avec
enthousiasme, puis ont disparu pendant plusieurs jours.
bigip1-snat.sv.av.com:
GET /indexme.html HTTP/1.0
sjc-fe5-1.sjc.lycos.com:
GET /indexme.html HTTP/1.0
Ils sont revenus plus tard, pour voir ce que je leur avais donné à
analyser.
http://somehost/cgi-bin/script.pl?p1=../../../../attack
http://somehost/cgi-bin/script.pl?p1=;attack
http://somehost/cgi-bin/script.pl?p1=|attack
http://somehost/cgi-bin/script.pl?p1=`attack`
http://somehost/cgi-bin/script.pl?p1=$(attack)
http://somehost:54321/attack?`id`
http://somehost/AAAAAAAAAAAAAAAAAAAAA...
Les robots ont suivi les liens fournis, exploitant d'hypothétiques
vulnérabilités et compromettant ainsi des serveurs à distance :
sjc-fe6-1.sjc.lycos.com:
GET /cgi-bin/script.pl?p1=;attack HTTP/1.0
212.135.14.10:
GET /cgi-bin/script.pl?p1=$(attack) HTTP/1.0
bigip1-snat.sv.av.com:
GET /cgi-bin/script.pl?p1=../../../../attack HTTP/1.0
[...]
(BigIP est un célèbre "load balancer (équilibreur de charge)", basé
sur l'observation, de F5Labs). Les robots se sont ensuite joyeusement
connectés aux ports non-http que j'avais préparés à leur intention :
GET /attack?`id` HTTP/1.0
Host: somehost
Pragma: no-cache
Accept: text/*
User-Agent: Scooter/1.0
From: scooter@pa.dec.com
GET /attack?`id` HTTP/1.0
User-agent: Lycos_Spider_(T-Rex)
From: spider@lycos.com
Accept: */*
Connection: close
Host: somehost:54321
GET /attack?`id` HTTP/1.0
Host: somehost:54321
From: crawler@fast.no
Accept: */*
User-Agent: FAST-WebCrawler/2.2.6 (crawler@fast.no; [...])
Connection: close
[...]
La liste des moteurs de recherche pouvant servir d'agents ne se limite pas
à ceux qui sont connus et accessibles au public. Les moteurs d'alexa.com,
d'ecn.purdue.edu, de visual.com, de poly.edu, d'inria.fr, de
powerinter.net, de xyleme.com, et bien d'autres moteurs de recherche non
identifiés on trouvé cette page et l'ont appréciée. Certains robots n'ont
pas indexé toutes les URLs. Quelques agents, par exemple, n'indexent
absolument pas les scripts, d'autres n'utilisent pas les ports non
standard. Mais la majorité des moteurs, dont les plus puissants, le font
sans problème - et, dans le cas contraire, le filtrage insignifiant qui
est mis en place ne constitue pas une protection efficace : la plupart des
vulnérabilités de IIS peuvent être exploitées sans utiliser de script.
Que se passerait-il si la liste des serveurs à attaquer était choisie de
façon aléatoire parmi 10.000 IPs ou 10.000 noms de domaines en .com? Que
se passerait-il si le "script,pl" de mon exemple était remplacé par
l'utilisation de trois, quatre, cinq ou dix vulnérabilités de IIS ou de
célèbres scripts buggés sous Unixparmi plus populaires ? Et même si le
taux de succès n'était que d'1 machine compromise pour 2.000 tentatives ?
Et si le somehost:54321 de l'exemple ci-dessus était redirigé vers un
service vulnérable, exploitable par des variables utilisateur au sein de
requêtes HTTP ? (je considère que la majorité des services soi-disant
sécurisés qui ne déconnectent pas un utilisateur après la première
commande inexacte sont potentiellement vulnérables) Et si...
Il y a quelque part une veritable armée des robots, de différents types,
aux possibilités variables, plus ou moins intelligents. Et ces robots sont
prêts à faire tout ce que vous leur demanderez de faire. C'est effrayant.
--[3] Considérations sociales ---------------------------------------------
Qui est coupable lorsqu'un webcrawler compromet votre système ? La réponse
la plus évidente est : l'auteur de la page web que le moteur a visitée.
Mais il est difficile de tracer les auteurs de pages web, et le cycle
d'indexation d'un moteur de recherche prend des semaines. Il est difficile
de déterminer quand la page en question a été mise sur le Net - elles peut
avoir été indexée par différents moyens, avoir été modifiée par d'autres
robots plus tôt dans la chaine de selection; dans le protocole SMTP, comme
dans beaucoup d'autres, il n'y a pas de réelle possibilité de retrouver
une trace. D'ailleurs, beaucoup d'agents ne gardent pas la moindre trace
du cheminement suivi pour indéxer nouvelle URL. L'utilisation
d'indicateurs d'indexation, comme "noindex" sans l'option "nofollow", peut
causer quelques problèmes additionnels. Dans beaucoup de cas, l'identité
de l'auteur et l'origine de l'attaque ne seraient pas déterminées, alors
que de réelles intrusions auraient eu lieu.
Et si, pour finir, le but de l'auteur de la page n'était absolument pas de
la faire indéxer ? Pensez à tous ces articles à but "informatifs", etc.. -
les agents ne liraient pas l'avertissement et le message écrit en gras
"N'ESSAYEZ PAS CES LIENS"...
Par analogie avec d'autres cas, Napster par exemple, contraints de filtrer
leur contenu (ou de mettre fin à leur service) en raison d'informations
protégées par le CopyRight et distribuées par leurs utilisateurs, causant
ainsi des pertes économiques, il est raisonnable d'imaginer que des
responsables de moteurs de recherche soient forcés de mettre en
application des filtres spécifiques, ceci devant verser, dans le cas
contraire, d'énormes compensations aux victimes de l'utilisation abusive
de leurs robots.
D'un autre côté, il semble presque impossible de filtrer avec succès le
contenu du code malveillant, si on prend en compte nombre et la grande
variété des vulnérabilités connues. ...sans parler d'attaques qui
pourraient être tres ciblées (cf références, [B], pour plus d'information
sur les solutions propriétaires et leur insecurité). Ainsi le problème
demeurerait. Un autre paramètre à prendre en compte est que tous les
robots d'indexation ne sont pas forcément sous la juridiction des États
Unis, ce qui compléxifie encore les choses (dans beaucoup de pays,
l'approche de ce genre de problèmes est moins sujette à controverse qu'aux
des États-Unis).
-- [4] Défense ------------------------------------------------------------
Comme nous l'avons montré ci-dessus, les moyens de défense et les actions
possibles au niveau des moteurs de recherches sont très limitées, à cause
de la grande variété de vulnérabilités basées sur le Web. Une des défenses
les plus raisonnables consiste enl'utilisation de logiciels sécurisés et
correctement mis à jour, mais - évidemment - ce point de vue n'est pas
vraiment partagé de tous, et à raison : www.google.com avec le filtrage
de documents en place, retourne 62.100 enregistrements pour la requête :
"cgi vulnerability" (voir également : références, [D]).
Une autre ligne de défense possible contre les robots pourrait être
l'utilisation du mécanisme standard d'exclusion des robots / robots.txt
(voir références, [C], pour les caractéristiques). Le prix à payer étant
l'exclusion partielle ou complète de votre site des moteurs de recherche,
ce qui, dans la plupart des cas, ne peut être envisagé. En outre, quelques
robots sont mal développés et ne respectent pas le fichier robots.txt
quand ils suivent un lien direct vers un nouveau site web.
-- [5] Références --------------------------------------------------------
[A] "The Anatomy of a Large-Scale Hypertextual Web Search Engine"
Googlebot concept, Sergey Brin, Lawrence Page, Stanford University
http://www7.scu.edu.au/programme/fullpapers/1921/com1921.htm
[B] Proprietary web solutions security, Michal Zalewski
http://lcamtuf.coredump.cx/milpap.txt
[C] "A Standard for Robot Exclusion", Martijn Koster
http://info.webcrawler.com/mak/projects/robots/norobots.html
[D] "The Web Robots Database"
http://www.robotstxt.org/wc/active.html
http://www.robotstxt.org/wc/active/html/type.html
[E] "Web Security FAQ", Lincoln D. Stein
http://www.w3.org/Security/Faq/www-security-faq.html
-- [6] Notes du traducteur ------------------------------------------------
NDR : Extrait de Phrack #57, traduit et publié avec l'aimable autorisation
de Michal Zalewski, que nous remercions.