我了解无文件恶意软件的定义:
并非基于文件而是仅存在于内存中的恶意代码……更具体地说,无文件恶意代码……将自身附加到内存中的活动进程中……
有人可以解释一下将其附加到内存中的活动进程如何工作的情况吗?
此外,针对此类攻击可以使用哪些(内核)保护/强化措施?
我了解无文件恶意软件的定义:
并非基于文件而是仅存在于内存中的恶意代码……更具体地说,无文件恶意代码……将自身附加到内存中的活动进程中……
有人可以解释一下将其附加到内存中的活动进程如何工作的情况吗?
此外,针对此类攻击可以使用哪些(内核)保护/强化措施?
Answers:
无文件恶意软件利用浏览器的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进行调试。