无文件恶意软件如何在 Linux 上运行?

无文件恶意软件如何在 Linux 上运行?

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

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

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

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

答案1

无文件恶意软件通过利用浏览器 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);

(代码取自这里。另一篇关于 ptrace 漏洞利用的论文已发布这里.)

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

答案2

当您设法使进程崩溃时,您可以使该进程将数据插入内存。一种非常流行的方法是使用缓冲区溢出

这是如何运作的 ?例如,您知道一个进程正在侦听端口 x,并且有一个用于某个函数的缓冲区,例如 15 字节大。您使用 15 字节数据 + n 字节(要执行的代码)调用该函数。如果程序没有正确验证数据,它将用您的代码覆盖相邻的内存,因此代码位于内存中。如果您可以执行此代码,那么您就拥有了该系统。存在一些限制,例如,进程无法写入其自身之外的内存。分配的空间

所有操作系统上都有一长串漏洞,缓冲区溢出允许破解者将数据注入目标内存。

相关内容