
                            The WORM is back,
                                  aka
                  la vie artificielle sur rseau TCP/IP :))
                par Professor Falken <prfalken@freeshell.org>


chtit Disclamer + prrequis:
***************************

Je ne suis pas responsable d'une utilisation des infos contenues dans cet
article a des fins malveillantes.
Pour moi, un worm est un fascinant exemple de "vie artificielle", et n'est
aucunement ddi  des fins destructrices, mais  des fins ducatives et
d'exprimentation.
Le fait de lacher un worm sur Internet ou tout autre rseau public peut
vous attirer de graves ennuis, que ce soit par le(s) gouvernement(s)
ou des organismes privs. Un worm tant avant tout un objet de recherche
exprimentale (comme un virus), son "utilisation" doit tre exclusivement
restreinte  un rseau priv.
Bon, voila, en disant a, je suis compltement dgag de toute responsabilit
si vous avez quand mme dcid d'essayer de lacher un worm dans la nature :))

Cet article se veut avant tout thorique, et vise  analyser le fonctionnement
des worms en gnral, dans le but de les comprendre et de pouvoir en
concevoir avec des outils existants, ou de pouvoir mttre en oeuvre les parades
pour les viter.


Intro:
*****

2 Novembre 1988, 18:00 et des peufs, Eastern Time:
    Rober Tippet Morris, fils d'un officiel de la NSA, et tudiant en
computer science, lance son fameux 'Internet Worm' sur un VAX de son
universit; celui-ci va se propager d'une faon incontrole sur le net,
le paralysant en l'espace de moins de 24 heures [soit dit en passant, c'est
pas le worm qui a directement paralys le net, mais le fait que beaucoup de
systmes aient t mis en quarantaine pour patcher les trous de scurit
et pour vrifier qu'une copie n'tait pas prsente; quoique la prsence
d'un worm sur un systme se traduisait souvent par un overload du systme].
C'est d'ailleurs  la suite de cet venement que le CERT fut cr.

Le worm de Morris est l'exemple le plus connu de ce type de progs, car il
a t l'une des principales motivations de la 'course  la scurit' qui a
fait que le hack est beaucoup moins vident aujourdhui que dans les annes 80.

Mais, la n'est pas la question, et j'en vois pas mal se demander,
"pourquoi il nous parle de worms prfalken ?? et d'abord, c'est quoi un worm ?"


C'est quoi un worm ?
******************

Un worm, c'est un programme qui peut tre comparable  un virus, c'est  dire
qu'il s'excute tout seul, qu'il volue tout seul, et peut se reproduire.
La diffrence avec un virus, c'est qu'au lieu de se propager dans des
fichiers, un worm se propage entre les hosts d'un rseau -dans le cas
de celui de Morris, c'tait Internet, mais des worms peuvent exister sur
tous les types de rseaux-, en exploitant les trous de scurit de ces hosts.
Un worm, si il ne se propage pas, est donc une sorte de bot, car il utilise
un ou des services rseaux donns, sans utilisateur qui le commande.
En fait, il n'existe pas UN worm, mais DES worms, tout comme il n'existe pas
qu'un seul virus.
Le terme worm que j'utiliserais par la suite dsigne les worms en gnral,
et les comportements que je citerais, loin d'etre les seuls, sont soit les
plus communs, soit les plus efficaces.


Ca sert  quoi un worm ?
**********************

Intrinsquement (a faisait longtemps que je voulais le placer celui-la :),
un worm ne sert pas  grand chose de plus qu'un virus, si ce n'est explorer
les capacits d'une forme d'IA primitive, ou, d'une manire plus stupide,
foutre le bordel sur des ordinateurs.
En 1988, Morris avait lanc son worm dans le but d'explorer le net.
Aujourd'hui, on peut encore explorer les rseaux avec un worm, les admins
peuvent les utiliser afin de vrifier la scurit de leurs rseaux face aux
attaques primitives, les hackers peuvent s'en servir pour pntrer des
systmes sans se fatiguer, et c'est un bon sujet de TP pour les tudiants
en info... en gros tout le monde est heureux... sauf quand le worm devient
incontrolable et qu'il paralyse un rseau, comme celui de Morris.
Bien sur, ya les paranos, qui voient dans les worms un nouveau moyen de foutre
le bordel facilement; c'est le meme genre de paranos qui font circuler des
fausses alertes aux virus sur le net, qui dpensent des fortunes en
anti-virus, et pour qui hacker == terroriste.
Mais c'est vrai qu'un worm, si il est mal control ou programm, peut vraiment
faire beaucoup de dgats !
Et aussi, pour ceux ayant des lectures cyberpunks, on peut se prendre 
dlirer sur le moyen de faire des 'constructs'  partir de worms =))))
[whoaa, je dlire trop moi !]


dissection d'un worm, bweerk =)
*******************************

Gnralement, un worm se dcompose en deux parties:
    * le vecteur, ou bootstrap, est la partie "active" du worm. C'est cette
partie qui va faire tout le job, de recherche et d'infection, ainsi que la
transmission de la deuxime partie, qui est
    * l'archive. Celle-ci est en fait la copie du vecteur, qui sera
envoye et excute sur l'host victime. Elle peut tre sous forme de sources,
pour infecter plusieurs architectures diffrentes sans distinction, ou sous
forme binaire, destine  un type de victime particulier.

Les deux solutions ont leurs avantages et inconvnients:
    * la forme binaire ne peut infecter qu'une architecture de systme
particulire. Ainsi, si le-dit systme n'est pas trs rpandu, le worm et ses
descendants sont pour ainsi dire vous  une disparition  court terme.
Par exemple, en 1988, le worm de Morris tait archiv sous forme de binaires
excutables sur VAX, d'autres sur SUN3, et aussi sous forme de sources.
Cette diversit assura  la gnration de worms une propagation rapide et
efficace.
Parmis d'autres avantages, la forme binaire n'a pas besoin d'un compilateur
sur le systme  envahir, et, de plus, elle est gnralement bien plus
compacte que la forme source.
    * la forme source, elle, pourra pntrer beaucoup plus de systmes
diffrents. Par exemple, si elle rpond strictement aux normes tel POSIX,
et qu'elle implmente une compilation conditionnelle (avec des #define,...),
elle pourra infiltrer la majeure partie des Unix, populaires actuellement,
comme Solaris, Linux, *BSD, AIX..., dans la mesure ou les holes k'elle exploite
sont prsents sur tous ces systmes.
En contrepartie, il lui faut absolument disposer d'un compilateur sur la machine
cible, sous peine de ne pas pouvoir s'activer.
De plus, l'archivage sous forme de sources prend plus de place que les binaires,
et ncessite la plupart du temps une compression.

Il est aussi possible d'utiliser un code interpret, comme du Perl, du Java,
ou du script shell, qui aura le mrite de pouvoir fonctionner sur un maximum
de systmes, sans pour autant ncessiter de compilation, dans la mesure ou
l'interprteur est prsent sur la cible.


mode d'action d'un worm
***********************

Le mode d'action du worm est en fait le mode d'action du vecteur.
L'action du vecteur est divise en plusieurs parties distinctes:

    * L'initialisation...

    * La recherche de l'hte: le worm cherche une bekane susceptible de
l'accueillir, soit dans son voisinage direct (en regardant /etc/hosts, par
exemple), soit d'une faon alatoire ou incrmentale (incrmentation des IP).
A chaque IP, on regarde si l'host est up ou down. Si celui-ci est down, on
continue  chercher, si il est up, on passe a l'tape suivante.

    * L'identification de l'hte: le worm cherche a savoir si sa future
victime est vulnrable  la ou l'une des attaques qu'il utilise.
Cela commence gnralement par un port scan, suivi de diffrents tests de
versions des daemons, de check rpc, dtection de l'architecture et du systme...
en fait, tout ce qui peut indiquer qu'une vulnrabilit connue du worm est
prsente sur le systme.
Si l'hte n'est pas vulnrable, on retourne  la phase de recherche.

    * L'attaque: Dans cette phase, le worm tente d'obtenir un accs sur sa
victime. C'est ici qu'il exploite les vulnrabilits qu'il a dtectes
dans la phase prcdente.
A la fin de cette opration, le worm doit possder un shell non-interactif,
ou tout autre moyen d'excuter des commandes et d'accder au systme de fichier
de l'hte pour pouvoir continuer. Cet accs n'est pas obligatoirement un accs
super-user (quoique c'est assez pratique d'en avoir un :)

    * L'invasion: A cet instant, le worm a pris pied sur le systme, mais n'y
est pas encore actif. Les oprations sont toujours diriges depuis le systme
de dpart.
Durant cette phase, le worm va effectuer une srie d'oprations visant 
faciliter sa reproduction (eg. ajout d'un login pour le worm, vrification
de la prsence d'un compilateur...)

    * La reproduction: c'est ici que le vecteur et son archive se distinguent.
Le vecteur va faire parvenir l'archive sur le systme hte, afin de l'activer,
et d'engendrer un nouveau worm autonome.
Le transfert peut s'effectuer de diverses faons, pouvant tre un stream TCP
pour un worm autonome, ou un transfert FTP d'un systme fixe, pour un worm
dpourvu d'archive.
Une fois l'archive copie, on procde  l'activation du worm nouveau n,
soit directement s'il s'agit d'une archive binaire ou interprte, soit aprs
compilation si c'est une archive source.
Le nouveau worm est alors prt  se propager  son tour =)

C'est aprs la reproduction que se dessinent 2 tendances:
    La premire est de killer le worm parent sur la machine de dpart, et de
laisser le worm reproduit faire comme son prdcesseur, simulant ainsi le
dplacement d'une entit unique.
    La deuxime est de laisser le worm parent en vie, et de lui faire
recommencer le cycle de propagation, ce qui produira un effet exponentiel, et
potentiellement beaucoup plus dangereuse que la premire solution.


analyse des diffrentes parties :
*******************************

    * L'initialisation:
      ----------------
    Dpend de l'implmentation. Ca peut aller de la cration de fichiers
temporaires  la prcompilation de certaines parties archives...

    * la recherche de l'hte:
      ----------------------
        Elle peut se faire de diffrentes faons.
Tout d'abord une mthode purement alatoire. On prend une adresse de dpart
au hasard dans le rseau, et on incrmente jusqu' trouver un host valide et
up, avant de passer  son idenfication.

un ptit example en C, avec une addresse IPv4
(peut facilement tre amlior pour tenir compte des classes de rseaux)
------>snip>------->snip>----->snip>------->snip>------->snip>----->snip>-----
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <netinet/in.h>

struct in_addr *find_valid_host(void)
{
    struct in_addr *address = (struct in_addr *)malloc(sizeof(struct in_addr));

    srand(time(NULL));      /* on initialise le gnrateur alatoire */
    address->s_addr = rand();

    while (!isup(*address))
        (address->s_addr)++;
    /* ici, on utilise la routine isup() de nmap pour voir si la cible est up
       voir Phrack 51 article 11 */

    return address;
}
------>snip>------->snip>----->snip>------->snip>------->snip>----->snip>-----

cette mthode peut aussi tre ralise avec un scanner d'IPs comme nmap et un
gnrateur alatoire comme ci dessus, le tout appel depuis un script shell.

Une autre mthode consiste  utiliser des rpertoires d'IPs, soit locaux,
comme /etc/hosts, le rsultat d'un showmount, ou un hosts.byaddr si la bekane
a NIS, soit dans des rpertoires sur le web, genre netcraft...
Cette mthode a l'avantage d'avoir une plus grande rapidit de russite, dans
la mesure ou l'on cherche des bkanes existantes, mais d'un autre ct est
moins intressante pour l'exprimentation, car la propagation peut tre plus
facilement prvisible, c'est moins marrant =)

    * L'identification de l'hte:
      --------------------------
        Une fois la cible potentielle dcouverte, le worm doit savoir si elle
est susceptible d'tre investie, donc vulnrable.
Un ptit port scan et une identification de la stack IP feront l'affaire
(ici encore, nmap peut se rvler trs utile, quoique un peu encombrant...),
de meme qu'un scan des services potentiellements exploitables par les exploits
dont dispose le worm... (cf scanvuln par Lionel :)

    * L'abordage (niahahah :))):
      -------------------------
    Maintenant que le worm a trouv une cible, et que celle-ci rpond aux
critres de pntration (OS, services vulnrables...), on peut commencer
l'invasion, en lancant un ou plusieurs exploits remote, sur la victime,
le but tant de rcuprer une session (un shell) non-interactive (un root
n'est pas indispensable) sur celle-ci.
Une fois le shell obtenu, il faut vrifier qu'on peut rcuprer et excuter
l'archive. Un test genre 'configure' fera l'affaire...
Si l'hote a NIS ou n'est pas shadow, et que l'on a pas d'accs root, on peut
tenter de cracker un ou deux accounts pour, par exemple, uploader l'archive
en FTP...
A partir de ce moment, le worm n'est pas encore actif sur la victime, car c'est
son image prsente sur la victime prcdente qui tient les commandes de
l'invasion

    * L'upload de l'archive :
      ----------------------
    A ce stade, on est sur que le worm est reproductible sur la victime et
qu'on va pas griller du temps et de la bande passante  uploader l'archive
pour rien.
L'upload peut se faire de plusieurs manires...
Il ya principalement deux tendances:
    - Le worm emporte son archive avec lui, l'uploadant de victime en victime
    - Ou il n'a pas d'archive "embarque", et il download son archive sur
      un ou des sites fixes sur le net, par ftp ou http

La deuxime solution est bien sur la plus simple  raliser, car elle dispense
le worm de trimballer son archive, ainsi que le sous-systme permettant de la
transmettre. Elle a par contre l'inconvnient de dpendre d'un systme
extrieur, empechant la propagation si celui-ci venait  etre down,
et elle permet galement aux victimes de retracer plus facilement l'auteur
de l'invasion...

Dans la premire option, on a encore le choix entre deux possibilits.
On peut soit uploader l'archive directement par une socket ddie que l'on
dirige sur un nouveau fichier sur la victime (cette opration est simplifie
si on dispose de netcat ou d'un prog similaire), soit utiliser un protocole
standard comme ftp ou http si la victime ou la base de dpart disposent d'un
serveur pour ce(s) service(s).

Attention au format de l'archive. Pour infecter un *nix, on est tent de la
transporter dans un .tar.gz, mais attention, gzip n'est pas si rpandu qu'il
n'y parait... il faut prferer le format 'compress' (.Z), qui, lui est prsent
sur quasi tous les systmes, mais compresse moins bien.
Par contre, tar ne pose aucun probleme, car il est standard  tous les *nix.
Pour les autres OS, utiliser un format dont on est sur qu'il se trouve sur
le systme (ne pas hsiter  vrifier sa prsence pendant la phase d'abordage)

    * L'activation de l'archive :
      -------------------------
Rien de bien compliqu... dcompression et unpackage, compilation s'il s'agit
d'une source, ou alors passage direct a la phase suivante si c'est un binaire
ou un interprteur...

    * La reproduction :
      ---------------
C'est la phase finale du cycle de propagation... rien de bien compliqu l
non-plus... on lance juste le prog qu'on vient de compiler ou d'uploader.
Le nouveau worm est maintenant autonome, et il faut choisir si on veut
killer le worm parent, ou le laisser continuer sa reproduction...

    * L'initialisation du nouveau worm:
      --------------------------------
    Et c'est reparti pour un tour :))


tracabilit de la bestiole (label WF => Worm Frenchie :))))
***********************************************************
    Lancer un worm sans savoir ou il est all, c'est moins marrant...
On peut donc ajouter un moyen de savoir dans quels systmes il est all,
par quel trou il a pu rentrer, etc...
Ca peut s'avrer utile pour rcuprer des accounts un peu partout sans se
fatiguer, ou, plus philanthropiquement, pour prvenir l'admin concern que
son systme est vulnrable...
Pour faire cela, on peut faire des choses plus ou moins complexes, allant
de l'envoi d'un simple packet vers un server fixe, jusqu'au mail contenant
le log complet de l'attaque...
Mais ATTENTION aux ptits malins... l'ajout de cette feature permettra aux
diffrentes victimes de vous retrouver plus rapidement, donc gaffe !


notes aux admins, ou comment viter de se faire enculer par un worm (aie :))
***************************************************************************
    Le meilleur moyen de se prmunir contre les worms, c'est le meme que
celui d'viter de se faire hacker: patcher les trous de scu ds qu'ils sont
dtects, faire confiance  un minimum de systmes pour le NFS, NIS et tous
ce genre de services, en gros SECURISER au maximum, pas faire le branlot
d'admin dont la journe se rsume  boire du caf dans un fauteuil et
draguer les secrtaires :)
Sinon, les IDS (Intrusion Detection System) peuvent tre efficaces pour les
feignants, d'autant plus que le comportement d'un worm est beaucoup plus
prvisible que celui d'un vrai chtit nacker des bois ;^p


rfrences et sources qui m'ont permis d'crire cet article :
***********************************************************
    - diverses descriptions du worm de Morris... (allez dans un search engine,
      tapez "internet worm", et vous en aurez une chie plus 1000)
    - le worm de ADM, qui m'a permis de vrifier par la pratique les thories
      que j'avais imagines, et qui m'a clairci certains aspects
      d'implmentation
    - mon cerveau, mes mains, mon clavier, mon cran, mon n'ordi, la musik,
      le chien du voisin... :)
    - bon, ok, j'arrete de dconner =)


conclusion, greetz and misc shit...
***********************************
    Vala, c'est fini les tinamis :'(
Prochaine ralisation (pour organiks #2 si j'ai le temps): une srie d'articles
sur l'lectronique digitale, partant des bases jusqu'aux microprocesseurs...
yen aura pour tout les gouts :)

    Greetz: The CHX Hacking Crew: dlight, neo, francky, dark_will, elecriz,
            bignose, et moi bien sur :) http://chx.freeshell.org

            OrganiKs Crew: lionel, tbh, seb, datahck, lacrampe, shado, coder,
            cyberyoyo, jacko, peace... ralalah, on commence a etre beaucoup :)
            j'en oublie :)

            mayem, rockme, astar0th, brets, madvax....... et tout et tout...

            #chx, #organiks, #linuxfr, #aohell, #exile....

            bon, et pis sa commence a me saouler d'crire des greetz de
            3 kilomtres  chaque fois :))))


"fight stupidity and violence" - prfalken


