无文件恶意软件如何在 linux 上工作?

Mar*_*ter 11 process malware linux-kernel

我理解无文件恶意软件的定义:

不基于文件而仅存在于内存中的恶意代码……更具体地说,无文件恶意代码……将自身附加到内存中的活动进程中……

有人可以解释一下这个附加到内存中的活动进程是如何工作的吗?

此外,针对此类攻击有哪些(内核)保护/强化可用?

dr_*_*dr_ 7

无文件恶意软件通过利用浏览器的 Flash 插件或网络协议中的漏洞来攻击目标。

可以使用系统调用来修改 Linux 进程ptrace()。这个系统调用通常被调试器用来检查和管理目标进程的内部状态,在软件开发中很有用。

例如,让我们考虑一个 PID 为 1234 的进程。可以/proc在位置的伪文件系统中查看该进程的整个地址空间/proc/1234/mem。你可以打开这个伪文件,然后通过ptrace(); 这样做后,您可以使用pread()pwrite()写入进程空间。

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);
Run Code Online (Sandbox Code Playgroud)

(代码取自此处。有关 ptrace 漏洞利用的另一篇论文可在此处获得。)

关于针对这些攻击的面向内核的防御,唯一的方法是安装内核供应商补丁和/或禁用特定的攻击向量。例如,在 ptrace 的情况下,您可以将 ptrace-blocking 模块加载到内核中,这将禁用该特定系统调用;显然,这也使您无法使用 ptrace 进行调试。