我了解无文件恶意软件的定义:
不基于文件但仅存在于内存中的恶意代码......更具体地说,无文件恶意代码......将自身附加到内存中的活动进程......
有人可以解释一下将其自身附加到内存中的活动进程是如何工作的吗?
另外,针对此类攻击有哪些(内核)保护/强化?
答案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 进行调试。