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.

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.tardebian.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:
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.
Ä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:
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 :
Und nach der
Installation ist dies:
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.