Ich verstehe die Definition von fileless Malware:
Schädlicher Code, der nicht dateibasiert ist, sondern nur im Speicher vorhanden ist… Insbesondere fileless bösartiger Code… hängt sich an einen aktiven Prozess im Speicher an…
Kann jemand bitte erklären, wie das Anhängen an einen aktiven Prozess im Speicher funktioniert?
Welcher (Kernel-) Schutz / welche Verhärtung ist gegen solche Angriffe verfügbar?
process
linux-kernel
malware
Martin Vegter
quelle
quelle
Antworten:
Dateifreie Malware greift das Ziel an, indem sie eine Sicherheitsanfälligkeit ausnutzt, z. B. im Flash-Plugin eines Browsers oder in einem Netzwerkprotokoll.
Ein Linux-Prozess kann mithilfe des Systemaufrufs geändert werden
ptrace()
. Dieser Systemaufruf wird normalerweise von Debuggern verwendet, um den internen Status des Zielprozesses zu überprüfen und zu verwalten. Er ist bei der Softwareentwicklung hilfreich.Betrachten wir beispielsweise einen Prozess mit PID 1234. Der gesamte Adressraum dieses Prozesses kann im Pseudodateisystem
/proc
am Speicherort angezeigt werden/proc/1234/mem
. Sie können diese Pseudodatei öffnen und dann über an diesen Prozess anhängenptrace()
. Anschließend können Sie den Prozessbereich verwendenpread()
undpwrite()
in ihn schreiben.(Code von hier . Ein weiteres Papier über einen Ptrace-Exploit finden Sie hier .)
In Bezug auf die kernelorientierte Verteidigung gegen diese Angriffe besteht die einzige Möglichkeit darin, Patches von Kernel-Anbietern zu installieren und / oder den jeweiligen Angriffsvektor zu deaktivieren. Im Fall von ptrace können Sie beispielsweise ein ptrace-blockierendes Modul in den Kernel laden, wodurch dieser bestimmte Systemaufruf deaktiviert wird. Dies macht es natürlich auch unmöglich, ptrace zum Debuggen zu verwenden.
quelle
/proc/PID/mem
. Ich hoffe, Sie sind weniger unzufrieden mit der Aktualisierung und Korrektur Ihrer Antwort als die andere Person, anstatt Mythen und Fehlinformationen aufrechtzuerhalten.Wenn Sie es schaffen, einen Prozess zum Absturz zu bringen, können Sie veranlassen, dass der Prozess Daten in den Speicher einfügt. Ein sehr beliebter Weg, dies zu tun, ist die Verwendung von Pufferüberläufen .
Wie funktioniert das ? Sie wissen beispielsweise, dass ein Prozess Port x überwacht und über einen Puffer für eine bestimmte Funktion verfügt, die beispielsweise 15 Byte groß ist. Sie rufen diese Funktion mit 15 Datenbytes + n Bytes auf (Ihr auszuführender Code). Wenn das Programm die Daten nicht ordnungsgemäß validiert, überschreibt es den benachbarten Speicher mit Ihrem Code, sodass der Code im Speicher verbleibt. Wenn Sie diesen Code ausführen können, besitzen Sie das System. Es gibt Einschränkungen, z. B. kann ein Prozess nicht außerhalb seines zugewiesenen Speicherplatzes in den Speicher schreiben .
Es gibt eine lange Liste von Schwachstellen auf allen Betriebssystemen, bei denen Pufferüberläufe es Crackern ermöglichen, Daten in den Speicher des Ziels einzufügen.
quelle