Diese Woche befassen wir uns mit einem neuen Malware-Beispiel namens Sysjoker und einem Leitfaden für die Linux-Speicherforensik. Obwohl der Forensik-Leitfaden nicht umfassend und sicherlich nicht in allen Einzelheiten ist, könnte er helfen, die Grundlagen eines Speicherextraktions- und -analyseprozesses mit Volatility zu verstehen.
Sysjoker Backdoor
In einer kürzlich erschienenen Beitrag von Intezeranalysierten die Autoren eine neue Backdoor, die auf mehreren Betriebssystemen laufen kann. Der Analyse zufolge kann "Sysjoker" unter macOS, Linux und Windows ausgeführt werden. Sysjoker tarnt sich als System-Update und verwendet verschiedene Methoden, um die IP-Adresse seines Command and Control (C2)-Servers zu verbergen und zu ändern.
Besorgniserregend ist auch, dass die Probe bei VirusTotal-Scans ohne Beanstandungen blieb, was darauf hinweisen könnte, dass die Backdoor noch relativ neu ist. Obwohl die Methoden, mit denen sie ein System infiziert, auf verschiedenen Betriebssystemen unterschiedlich sind, beginnt sie, sobald sie sich auf einem System festgesetzt hat, mit dem C2-Server zu kommunizieren. In der Analyse stellt Intezer fest, dass sie noch keine Anweisungen der nächsten Stufe vom C2-Server gesehen haben. In dem Beitrag wird empfohlen, Speicherscanner zu verwenden, um die Malware zu erkennen.
Eine andere Möglichkeit der forensischen Analyse besteht darin, den Speicher zu dumpen und ihn mit einem bekannten Tool wie Volatility zu analysieren. In älteren Versionen des Linux-Kernels konnte der Speicher durch Kopieren des virtuellen Speichers von /dev/mem mit einem Befehlszeilen-Tool wie dd entleert werden; diese Methode wurde jedoch wegen möglicher Sicherheitsrisiken veraltet.
Linux-Speicher-Forensik
Wir können die forensische Analyse als die verschiedenen Methoden zusammenfassen, die bei der Beschaffung von Beweisen, der Analyse von Beweisen und der Dokumentation der Folgen eines Sicherheitsvorfalls eingesetzt werden. Nach einem bestätigten Sicherheitsverstoß findet in der Regel eine forensische Analyse statt, um besser zu verstehen, was in einem kompromittierten System vor sich ging. Es gibt zahlreiche Beweisquellen, die Sie analysieren können, um vertretbare Behauptungen über die Ursache eines Vorfalls aufzustellen; wir werden jedoch nur eine praktische Speicheranalyse eines kompromittierten Linux-Systems durchführen, um einige der Methoden und Tools zu demonstrieren, die Sie verwenden können.
Arbeitsspeicher
RAM ist von Natur aus flüchtig. Er muss ständig mit Strom versorgt werden, um zu funktionieren, und er wird bei jedem Neustart des Systems zurückgesetzt. Linux bewahrt die im Speicher gespeicherten Daten im Verzeichnis /dev/mem auf; in neueren Distributionen ist es jedoch nicht möglich, Artefakte aus dem Speicher direkt über diese Partition zu extrahieren. Das liegt daran, dass ab Linux-Kernel 4.16 eine Option(CONFIG_STRICT_DEVMEM) standardmäßig aktiviert ist, um den Zugriff auf diese sensible Partition zu unterbinden.
Dies macht es zwar schwieriger, das Speicherabbild zu erlangen, aber auch schwieriger für Angreifer (und unerfahrene Benutzer), dem System verheerenden Schaden zuzufügen. Ein Angreifer mit Root-Zugriff auf das System kann das Speichergerät verwenden, um Code direkt in den Kernel zu injizieren, wenn diese Option deaktiviert ist.
Für diese Demonstration haben wir eine Debian 9 Linode mit dem Hostnamen "forensics" in einem unserer Rechenzentren hochgefahren. Wir haben die forensics-Box als Beispiel für eine Bau- und Analyseumgebung konfiguriert. Obwohl es nicht notwendig ist, diese auf einem externen Rechner durchzuführen, ist es nicht ratsam, einen Computer zu manipulieren, auf dem sich Beweismittel befinden. Hier sind die Schritte für unsere Analyse:
- Erstellen Sie ein Volatilitätsprofil für ein kompromittiertes System unter Verwendung eines Rechners mit demselben Betriebssystem und derselben Kernel-Build/Version.
- Dumpen Sie den Speicher mit dem Tool Ihrer Wahl (AVML in dieser Demo).
- Untersuchen Sie den Speicherauszug mit dem Profil, das Sie mit Hilfe von Plugins für Volatility erstellt haben.
Warnung
Wir werden das Python 2 Repository von Volatility zu Demonstrationszwecken verwenden, da derzeit Kompatibilitätsprobleme mit Volatility 3 auftreten. Wir sind uns bewusst, dass die Unterstützung für Python 2 im Jahr 2020 endet; dies dient ausschließlich der Demonstration der Verwendung des Tools in einer kontrollierten Umgebung. Wenn Sie der Anleitung folgen möchten, tun Sie dies bitte auf eigenes Risiko.
Anforderungen
Standardmäßig fehlen auf Debian 9 Linodes einige der Tools, die wir in dieser Demo verwenden werden. Es wird empfohlen, sie alle mit dem folgenden Befehl zu installieren, bevor Sie mit den weiteren Anweisungen fortfahren:
sudo apt install make git zip dwarfdump linux-headers-$(uname -r) python-pip python-distorm3 python-crypto
Volatilität
Das Volatility Framework ist eine vollständig offene Sammlung von Werkzeugen, die in Python unter der GNU General Public License implementiert sind, um digitale Artefakte aus flüchtigen Speicherproben (RAM) zu extrahieren.
Es ist wichtig sicherzustellen, dass das richtige Volatility-Profil verwendet wird, wenn ein Speicherabbild analysiert wird. Ein Profil ist eine Datei, die Informationen über die Datenstruktur eines Kernels und Debugsymbole enthält, die für die korrekte Analyse eines Speicherabbilds verwendet werden können. Glücklicherweise ist die Erstellung eines Profils mit Volatility recht einfach. Sie können auch im Repository von Volatility-Profilen nach einigen vorgefertigten Profilen suchen.
Ein Profil erstellen
Nach der Installation der erforderlichen Tools können wir mit der Erstellung unseres Volatility-Profils für den Rechner beginnen, auf dem es ausgeführt wird.
1. git clone https://github.com/volatilityfoundation/volatility ~/volatility
2. cd ~/volatility/tools/linux/
3. make
4. zip ~/$(lsb_release -i -s)_$(uname -r).zip ./module.dwarf /boot/System.map-$(uname -r)
5. cp ~/$(lsb_release -i -s)_$(uname -r).zip ~/volatility/volatility/plugins/overlays/linux/
6. python ~/volatility/vol.py --info
Mit der ersten Zeile (1) wird das Volatility-Repository in das Heimatverzeichnis des Benutzers geklont. Indem wir in das Verzeichnis (2) ~/volatility/tools/linux gehen, können wir make (3) verwenden, um die Module des Kernels neu zu kompilieren. Es ist wichtig, dass Sie die Kernel-Header vorher heruntergeladen haben, da dieser Vorgang sonst fehlschlagen könnte.
Das Ergebnis ist ein module.dwarf. Der nächste Befehl (4) verwendet dieses Modul, um die Systemabbildung aus /boot zu lesen und das Profil zu erstellen, das wir in Volatility verwenden müssen. Anschließend können wir dieses Profil (5) in das richtige Verzeichnis kopieren, damit Volatility es verwenden kann. Um zu überprüfen, ob unser Profil ordnungsgemäß in Volatility geladen wurde, können wir Volatility einmal mit dem info-Flag (6) ausführen. Wenn alle Schritte erfolgreich waren, sollten wir unser benutzerdefiniertes Profil im Abschnitt Profile der Ausgabe sehen.
Installation eines versteckten Kernelmoduls
Für dieses Beispiel haben wir HiddenWall verwendet, um ein verstecktes Linux-Kernel-Modul (LKM) zu generieren, es 'cantfindme' genannt und es auf eine andere Debian 9 Linode mit dem gleichen Kernel-Build/der gleichen Version wie die 'forensische' Maschine geladen. Obwohl das Modul geladen ist, kann es nicht gesehen werden, wenn lsmod oder modprobe auf dem System ausgeführt wird:
![](https://www.linode.com/wp-content/uploads/2022/01/lsmod-on-pwnd.png)
Speichererfassung
Es gibt großartige Tools, mit denen Sie den Speicher in Linux dumpen können; in diesem Leitfaden werden wir uns jedoch mit AVML (Acquire Volatile Memory for Linux) beschäftigen, da LiME im Internet häufig behandelt wird. AVML ist ein Open-Source-Speichererfassungstool für Linux, das von Microsoft entwickelt wurde. Sie können die neueste Version hier finden und die Binärdatei auf den Rechner herunterladen, von dem Sie den Speicher dumpen wollen. Denken Sie daran, dass der Computer, von dem wir den Speicher abziehen, denselben Kernel/OS-Build und dieselbe Version haben muss wie das Volatilitätsprofil, das wir zuvor erstellt haben.
In einem realen Szenario ist es wichtig, ein kompromittiertes System nicht zu manipulieren, um sicherzustellen, dass die von uns gesammelten Beweise vor Gericht zugelassen werden können. Es ist auch wichtig, Bilder nach Möglichkeit nicht zu komprimieren, da die Bit-für-Bit-Erfassung Daten liefern kann, die ein komprimiertes Bild nicht liefern kann.
Nachdem Sie die AVML-Binärdatei in das Home-Verzeichnis heruntergeladen haben, können Sie den folgenden Befehl verwenden, um den Speicher eines Systems in das Home-Verzeichnis zu übertragen.
sudo ~/avml ~/output.lime
AVML erstellt einen Dump des Speichers im LiME-Format, so dass wir unsere Analyse mit dem von uns erstellten Volatilitätsprofil beginnen können. Sie können auch die Größe des Dumps überprüfen, um sicherzustellen, dass sie mit dem gesamten RAM des Geräts übereinstimmt. Volatility sollte den Speicherauszug nicht manipulieren, aber es ist besser, eine Kopie der Datei zu erstellen und die kopierten Daten anstelle der Originaldaten zu analysieren, nachdem sichergestellt wurde, dass ihre Hashes übereinstimmen.
Nachdem wir den Speicher der "pwnd"-Box entladen haben, haben wir ihn zur Analyse in die "forensics"-Box übertragen.
Volatilitäts-Plugins
Volatility bietet zahlreiche Plugins, die den forensischen Analysten unterstützen. Eine Liste dieser Plugins finden Sie auf ihrer Github-Seite. Durch die Verwendung von Volatility-Plugins können wir uns einen schnellen Überblick über das Speicherabbild verschaffen. Das Befehlsformat für die Analyse eines Speicherabbilds finden Sie unten:
python ~/volatility/vol.py -f <path_to_memory_dump> --profile=<profile>
<plugin_name> <plugin_options>
Hier ist die Ausgabe des Plugins linux_hidden_modules, das die versteckten geladenen Kernelmodule aus dem Speicherabbild auflistet:
![](https://www.linode.com/wp-content/uploads/2022/01/hidden_module-plugin-1064x104.png)
Dieses Plugin kann Ihnen helfen, versteckte Linux-Kernel-Module zu finden, die möglicherweise bösartig sind. Selbst wenn diese Module nicht sichtbar sind, wenn Sie lsmod auf dem System ausführen, können sie sowohl erkannt als auch aus einem Speicherauszug extrahiert werden. Sie können das linux_moddump-Plugin verwenden, um die Kernel-Module entweder durch Angabe ihres Namens in einem Regex-Muster oder durch Angabe der Basisadresse des Moduls im Speicherabbild auszulesen:
![](https://www.linode.com/wp-content/uploads/2022/01/moddump-module-1064x106.png)
Es gibt noch mehr, was man mit Volatilität machen kann, was wir in diesem Beitrag einfach nicht abdecken können. Hinterlassen Sie unten einen Kommentar und teilen Sie Ihre Gedanken und Vorschläge mit.
Kommentare (3)
Your guide on Linux memory forensics in the Linode Security Digest is comprehensive and informative. It’s a valuable resource for understanding and enhancing Linux security practices. Thank you for sharing this insightful content!
Thanks for the comprehensive guide on Linux memory forensics! It’s incredibly informative and well-presented.
Excellent guide on SysJoker Linux memory forensics! The thorough analysis and practical tips are incredibly valuable for enhancing security practices. Thanks for sharing this crucial information!