Singularity Linux 开源内核级 Rootkit 技术分析
一、新闻概述
1. 标题
Singularity:首个开源 Linux 内核级 Rootkit 发布
2. 发布时间
2026 年 1 月 16 日
3. 来源
LWN.net
4. 作者
Daroc Alden
二、核心内容
1. 事件摘要
A. 主要内容
安全研究员 Matheus Alves 发布了名为 Singularity 的开源 Linux 内核级 Rootkit,这是首个完全拥抱开源精神的 Linux Rootkit 项目。
B. 核心亮点
- 基于 MIT 许可证的开源内核模块
- 利用 Ftrace 机制实现系统调用 hook
- 可隐藏进程、文件、网络连接和内核模块本身
- 支持 x86 和 x86_64 架构,兼容 32 位和 64 位系统调用
2. 关键信息
A. 项目信息
- 项目名称:Singularity
- 许可证:MIT
- 架构支持:x86、x86_64
- 内核版本:6.x 系列(Ubuntu、CentOS Stream、Debian、Fedora)
B. 技术特点
- 使用 Ftrace 而非传统的 CPU trap 向量修改
- 32 个隐藏进程槽位(数组实现)
- 自动启用 Ftrace 并阻止禁用
- 隐藏 TCP 端口 8081 的网络通信
C. 研究目的
主要用于安全研究,帮助研究人员了解 Rootkit 技术以改进检测和防御方法。
3. 背景介绍
A. 前置背景
传统 Linux Rootkit 通常不采用开源模式,限制了安全研究社区对相关技术的深入研究。
B. 相关上下文
Singularity 专注于如何在系统已被入侵后维持隐蔽存在,而非获取初始 root 权限的过程。
三、详细报道
1. 主要内容
A. 核心机制
Singularity 利用 Linux 内核的 Ftrace 机制来实现系统调用拦截,这相比传统 Rootkit 具有以下优势:
- 不需要修改 CPU trap 处理向量
- 不需要直接修补内核函数机器码
- 利用内核已有的 Ftrace hook 点
graph TB
subgraph User_Space[用户空间]
A[攻击者进程] -->|Signal 59| B[kill系统调用]
C[管理工具] -->|读取目录| D[getdents系统调用]
E[网络工具] -->|查询连接| F[netstat]
end
subgraph Kernel[内核空间]
G[Singularity模块]
G --> H[Ftrace Hook]
H --> I[系统调用拦截]
I --> J[进程隐藏]
I --> K[文件隐藏]
I --> L[网络隐藏]
I --> M[日志过滤]
N[隐藏进程列表]
J <--> N
O[内核模块列表]
G -.隐藏.-> O
end
B -->|被拦截| I
D -->|被过滤| I
F -->|被修改| I
style G fill:#ff6b6b
style H fill:#4ecdc4
style I fill:#45b7d1B. 隐藏功能实现
自身隐藏:
- 加载时清除内核 taint 标记
- 从活动内核模块列表中移除自身
- 阻止后续内核模块加载(表面上显示加载成功,实际静默失败)
- 无法通过正常接口卸载
进程隐藏:
- 使用 32 个进程 ID 的数组跟踪隐藏进程
两种添加方式:
- 发送未使用信号(默认为信号 59)到 kill() 系统调用
- 设置特殊环境变量后通过 execve() 启动进程
- 拦截信号 0、getpgid()、sched_getaffinity() 等系统调用
- 递减 sysinfo() 返回的进程总数
- 隐藏 /proc 下的进程文件
文件隐藏:
- Hook getdents() 系统调用
- 从用户内存复制目录项,移除隐藏项,写回修改后的缓冲区
- 调整 stat() 返回的父目录链接数
- 拦截 openat() 和 readlink() 直接访问
- 过滤 read() 调用以隐藏日志和 kallsyms 等敏感文件
网络隐藏:
- 隐藏 TCP 端口 8081 的连接
- 拦截内核数据包接收代码
- 支持 IPv4 和 IPv6
- 隐藏来自 netstat 等工具的连接
2. 技术细节
A. 系统调用兼容性
Singularity 支持 32 位和 64 位系统调用接口,避免 32 位应用在 64 位内核上看到不同结果。所有 Ftrace hook 都会插入两次:
graph LR
A[32位系统调用] --> B[通用包装函数]
C[64位系统调用] --> B
B --> D[调用约定转换]
D --> E[实际Hook实现]
E --> F[隐藏逻辑]B. 竞态条件漏洞
文件隐藏机制存在潜在竞态条件:另一个线程可能在目录项被修改前后进行竞争读取,从而发现被移除的项。
C. 限制与局限
- 无法防止磁盘取证分析
- 建议将隐藏文件放在内存临时文件系统中
- 无法防止外部网络捕获设备
- 日志过滤依赖已知字符串匹配
3. 数据与事实
A. 技术规格
- 进程隐藏槽位:32 个
- 默认隐藏端口:8081
- 默认隐藏信号:59
- 许可证:MIT
B. 支持平台
- Ubuntu 6.x 内核
- CentOS Stream 6.x 内核
- Debian 6.x 内核
- Fedora 6.x 内核
四、影响分析
1. 安全影响
A. 研究价值
- 提供开源 Rootkit 研究平台
- 帮助开发新的检测技术
- 演示当前可能的攻击技术
B. 防御挑战
传统检测方法可能失效:
- 内核模块列表检测无效
- 进程扫描工具被绕过
- 网络连接监控被欺骗
2. 检测方法
尽管 Singularity 设计精巧,但仍存在一些检测点:
graph LR
A[正常系统调用] --> B{Ftrace Hook}
B -->|未隐藏| C[正常处理]
B -->|已隐藏| D[Singularity拦截]
D --> E[修改结果]
E --> F[返回给用户空间]
G[检测方法] --> H{/proc/sys/kernel/ftrace_enabled}
H -->|写入0| I{值仍为1?}
I -->|是| J[发现Rootkit]
I -->|否| K[正常]
L[外部检测] --> M[网络捕获]
L --> N[磁盘取证]
style D fill:#ff6b6b
style J fill:#ff6b6b
style M fill:#ffd93d
style N fill:#ffd93d主要检测点:
- Ftrace 强制启用:向 /proc/sys/kernel/ftrace_enabled 写入 0 后读取仍为 1
- 端口扫描:外部 nmap 扫描可发现 8081 端口开放
- 性能分析:perf top 可能显示 hook 函数
- 模块加载失败:后续模块加载后实际未生效
根据项目作者在评论区的说明,Singularity 已实现对 ftrace_enabled 的虚假禁用功能:
- 拦截对 /proc/sys/kernel/ftrace_enabled 的读写
- 用户写入的值会被存储并一致地反映回读取
- 内部 Ftrace 保持完全运行状态
- 控制对 trace、trace_pipe、enabled_functions 等接口的访问
3. 技术趋势
A. Rootkit 演进
- 从闭源到开源
- 从直接内核修改到利用合法机制
- 从单一隐藏到多层次伪装
B. 防御启示
- 需要更底层的检测机制
- 外部监控和远程分析的重要性
- 行为分析优于静态检测
五、各方反应
1. 社区讨论
A. 技术评论
读者指出模块加载失败可能引起怀疑,尤其是在企业环境中:
- EDR 系统报告模块加载失败
- 企业姿态合规检查失败
- NVIDIA 驱动加载导致黑屏
B. 作者回应
Matheus Alves 在评论区澄清:
- 模块加载和 eBPF 限制是临时功能
- 即将提交新功能绕过 LKRG
- 已成功绕过多个主流 EDR(CrowdStrike Falcon、Trend Micro、Kaspersky、Elastic Security)
2. 潜在应用
A. 正向用途
有读者提出类似 Martus 项目的想法:Rootkit 技术可被重新用于帮助记者和异见人士保护生死攸关的秘密。
B. 双刃剑性质
技术本身是中性的,关键在于使用目的和授权范围。
六、相关链接
1. 项目资源
- Singularity GitHub 仓库:https://github.com/MatheuZSecurity/Singularity
2. 技术文档
- Linux 内核 Ftrace 文档
- LKRG(Linux Kernel Runtime Guard)
- Martus 项目:https://martus.org/overview.html
3. 相关报道
- LWN 原文:A free and open-source rootkit for Linux
七、总结
Singularity 作为首个开源的 Linux 内核级 Rootkit,为安全研究社区提供了宝贵的研究素材。它巧妙地利用了内核的 Ftrace 机制,实现了进程、文件、网络连接和自身踪迹的全面隐藏。
从防御角度看,Singularity 揭示了传统检测方法的局限性,强调需要结合多层检测策略:
- 内核完整性检查
- 远程网络监控
- 磁盘取证分析
- 行为异常检测
正如作者强调的,该工具的目的是推动安全研究前进,而非用于恶意目的。只有在获得明确授权的测试环境中使用,才能真正发挥其教育和研究价值。