Wie funktioniert fileless Malware unter Linux?

10

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?

Martin Vegter
quelle
Zum Beispiel durch Ausnutzen eines Pufferüberlaufs in einer Netzwerkanwendung und anschließendes Herunterladen von Schadcode, der in der Anwendung ausgeführt wird und sich über das Netzwerk verbreitet. Keine Dateien beteiligt. Der zweite Teil der Frage ist sehr weit gefasst. Er lautet im Wesentlichen: "Welche Gegenmaßnahmen gegen Malware gibt es?"
Dirkt
Diese Frage könnte besser unter /security// beantwortet werden .
Rubynorails
@rubynorails - Ich interessiere mich nur für Linux-spezifische Antworten. SecuritySE ist allgemein. Wenn ich dort eine Linux-spezifische Antwort anfordere, werden sie mich hierher schicken.
Martin Vegter

Antworten:

6

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 /procam Speicherort angezeigt werden /proc/1234/mem. Sie können diese Pseudodatei öffnen und dann über an diesen Prozess anhängen ptrace(). Anschließend können Sie den Prozessbereich verwenden pread()und pwrite()in ihn schreiben.

char file[64];
pid = 1234;

sprintf(file, "/proc/%ld/mem", (long)pid);
int fd = open(file, O_RDWR);
ptrace(PTRACE_ATTACH, pid, 0, 0);

waitpid(pid, NULL, 0);
off_t addr = ...; // target process address

pread(fd, &value, sizeof(value), addr);
// or
pwrite(fd, &value, sizeof(value), addr);

ptrace(PTRACE_DETACH, pid, 0, 0);
close(fd);

(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.

dr01
quelle
Genau wie diese andere Antwort ist auch diese veraltet - wie hier erläutert , müssen Sie einen Prozess nicht mehr verfolgen, um ihn zu lesen oder zu schreiben /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.
pizdelect
... was in diesem Fall Konsequenzen haben kann, da Menschen fälschlicherweise annehmen können , dass sie durch Verfolgen eines Prozesses verhindern können, dass andere Prozesse sein Gedächtnis lesen.
Pizdelect
@pizdelect Danke für den Link. Es wäre gut, wenn Sie den Inhalt als weitere Antwort hinzufügen würden.
Dr01
Nein, ich werde keine weitere Antwort hinzufügen. Ich erwarte, dass Sie Ihre reparieren.
Pizdelect
Denken Sie daran, dass Sie auch die Antworten anderer Personen bearbeiten können. Sie scheinen ein besseres Wissen über dieses spezielle Thema zu haben als ich, daher können Sie dies gerne tun.
dr01
1

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.

thecarpy
quelle