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


10

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

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

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

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


例如,通过利用网络应用程序中的缓冲区溢出,然后下载在应用程序内部运行并通过网络传播的恶意代码。不涉及任何文件。问题的第二部分非常广泛,它实质上等于“针对恶意软件存在哪些对策”?
dirkt

可以通过https://security.stackexchange.com/更好地回答此问题。
rubynorails

@rubynorails-我只对linux特定的答案感兴趣。SecuritySE是通用的。如果我在那里要求Linux的特定答案,他们会把我送到这里。
Martin Vegter

Answers:


6

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

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

例如,让我们考虑一个PID为1234的进程。可以在伪文件系统/proc中的location上查看该进程的整个地址空间/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-blocking模块加载到内核,这将禁用该特定的系统调用。显然,这也使您无法使用ptrace进行调试。


就像其他答案一样,这也已经过时了-如此处所述您不再需要跟踪进程以读取或写入该进程/proc/PID/mem。我希望您比其他人对更新和更正您的答案不那么耐心,而不是使神话和错误信息永久存在。
pizdelect

...这种情况可能会产生后果,因为人们可能会错误地认为,通过跟踪进程可以阻止其他进程读取其内存。
pizdelect

@pizdelect感谢您的链接。如果您将内容添加为另一个答案,那将是很好的。
dr_

不,我不会添加其他答案。我希望您能修复您的问题。
pizdelect

请记住,您也可以编辑其他人的答案。您似乎比我对这个特定主题有更好的了解,因此欢迎您这样做。
dr_19年

1

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

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

在所有操作系统上,漏洞列表很长,缓冲区溢出使得黑客可以将数据注入到目标内存中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.