Loading... # 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 点 ```mermaid 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:#45b7d1 ```  ### B. 隐藏功能实现 **自身隐藏**: - 加载时清除内核 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 都会插入两次: ```mermaid 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 设计精巧,但仍存在一些检测点: ```mermaid 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 ```  **主要检测点**: 1. Ftrace 强制启用:向 /proc/sys/kernel/ftrace_enabled 写入 0 后读取仍为 1 2. 端口扫描:外部 nmap 扫描可发现 8081 端口开放 3. 性能分析:perf top 可能显示 hook 函数 4. 模块加载失败:后续模块加载后实际未生效 根据项目作者在评论区的说明,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 揭示了传统检测方法的局限性,强调需要结合多层检测策略: 1. 内核完整性检查 2. 远程网络监控 3. 磁盘取证分析 4. 行为异常检测 正如作者强调的,该工具的目的是推动安全研究前进,而非用于恶意目的。只有在获得明确授权的测试环境中使用,才能真正发挥其教育和研究价值。 *** ## 参考资料 1. [A free and open-source rootkit for Linux - LWN.net](https://lwn.net/SubscriberLink/1053099/19c2e8180aeb0438/) 2. [Singularity GitHub Repository](https://github.com/MatheuZSecurity/Singularity) 最后修改:2026 年 01 月 19 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏