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