MrEchoFi/docklab
GitHub: MrEchoFi/docklab
docklab 是一个基于 Docker 和 Rust 的安全实验工具,通过提供一次性隔离终端,让用户安全地练习渗透测试和 CVE 概念验证,而无需启动虚拟机。
Stars: 2 | Forks: 2
# docklab
**用于安全练习 IT 运维、CVE 概念验证和渗透测试的一次性、隔离终端。**
基于 Docker 构建,因此在会话中执行的任何操作都不会永久影响您的主机。
[](LICENSE.md)
[](Cargo.toml)
[](INSTALLATION.md)
[安装指南](INSTALLATION.md) ·
[教程](TUTORIAL.md) ·
[贡献指南](CONTRIBUTING.md) ·
[安全政策](SECURITY.md) ·
[社区](COMMUNITY.md)
## 这是什么?
`docklab`(二进制文件名为 `lab`)用一条命令取代了沉重的“启动虚拟机以安全运行此漏洞”的工作流。该项目围绕三个理念构建:
1. **攻击者终端** —— 一个容器化的、一次性的 shell,您可以进入其中练习 IT 运维、构建和运行 CVE PoC,或者只是获取一个一次性的 Linux 环境,您在其中执行的任何操作都无法触及您的主机文件系统。
2. **漏洞靶机实验室库** —— 真实的、针对特定 CVE 的 Dockerfile,您可以构建并运行它们,以亲手实践特定的历史漏洞,而不是仅仅停留在阅读层面。
3. **默认隔离,而非手动步骤** —— 绝不进行主机绑定挂载。会话创建的任何内容(已安装的工具、克隆的 PoC、漏洞利用产物)仅存在于该容器的可写层中,并在您拆除会话的瞬间消失。
请参阅 [SOLVING_REAL_WORLD_PROBLEMS.md](SOLVING_REAL_WORLD_PROBLEMS.md) 以更深入地了解每个理念背后的动机。
### 目前已实现的功能
`docklab` 处于早期阶段(`0.1.0`)。理念 #1 是 CLI 目前实际实现的功能 —— 它封装了 `docker` 命令,因此您无需记住“给我一个一次性 Kali Linux shell”的复杂咒语:
- `lab create` 会拉取公开的 `kalilinux/kali-rolling` 镜像,并直接将您放入名为 `docklab` 的容器内的交互式 shell 中,同时在首次运行时自动安装一些常用的渗透测试/IT 工具(`curl`、`wget`、`nmap`、`nano`、`git`、`net-tools`、`lynis`)。
- `lab reconnect` 稍后会重新附加到同一个容器 —— 您在其中安装或创建的任何内容仍然存在。
- `lab mon` 会打开一个实时的 TUI 仪表板:容器状态、资源统计、磁盘使用情况、网络设置和正在运行的进程。
- `lab close` 会拆除所有内容 —— 停止容器,将其删除,并移除镜像 —— 不留任何痕迹。
理念 #2 目前以**内容的形式存在,尚未成为 CLI 功能**:`labs/` 提供了三个真实的、完全独立构建的 CVE Dockerfile(请参阅下方的[内置 CVE 实验室内容](#bundled-cve-lab-content)),您可以使用 `docker` 手动构建和运行它们。将它们接入 `lab catalog` 和 `lab start
` 是下一个里程碑 —— 请参阅 [CONTRIBUTING.md](CONTRIBUTING.md#about-labs)。
理念 #3 在目前现有功能中依然成立 —— 没有绑定挂载,通过 `lab close` 进行全面拆除 —— 但尚未包含该工具成熟版本应具备的更深层次的保证(按会话划分的网络隔离、capability 权限限制、资源限制)。简而言之:`docklab` 是当今获取一次性 shell 的一种快速、诚实的方式,并正致力于成为一个经过强化的实验平台 —— 但目前还不是。请参阅 [SECURITY.md](SECURITY.md) 了解此版本提供的确切威胁模型。
## 快速开始
```
lab create # pulls kalilinux/kali-rolling, builds you a shell, drops you in
# ...在 container 内进行你的工作...
exit # leaves the container stopped (not deleted)
lab reconnect # jump back into the same container later
lab mon # open the live TUI dashboard in another terminal
lab close # stop + remove the container and image entirely
```
完整演练:[TUTORIAL.md](TUTORIAL.md)。
## 安装
按速度排序,有三种方式可以让 `lab` 运行起来:
```
# 1. 预构建的 binary,已经在此 repo 的 dist/ 目录下(最快,不需要 Rust)
chmod +x dist/lab-linux-x86_64
sudo cp dist/lab-linux-x86_64 /usr/local/bin/lab
# 2. 通过 Cargo 从源码安装
git clone https://github.com/MrEchoFi/docklab.git
cd docklab
cargo install --path . # installs `lab` to ~/.cargo/bin
# 3. 自己构建它
cargo build --release # binary lands at target/release/lab
```
`dist/` 提供了适用于 Linux、Windows 和 macOS(Intel + Apple Silicon)的二进制文件,以及用于校验的 `SHA256SUMS` 文件 —— 请参阅 [INSTALLATION.md](INSTALLATION.md#verifying-a-download) 获取各操作系统对应的校验和命令。
您需要安装 Docker 并能通过 `docker` CLI 访问(`docker ps` 应能在不带 `sudo` 的情况下运行)—— `lab` 会调用 `docker` 命令,它并不直接与 Docker daemon 通信。
完整的各平台详细说明,包括每个 `dist/` 二进制文件的构建方式及其在目标操作系统上的验证程度:
**[INSTALLATION.md](INSTALLATION.md)**。
## 命令概览
| 命令 | 功能 |
|---|---|
| `lab create` | 拉取 `kalilinux/kali-rolling` 并将其作为名为 `docklab` 的交互式容器启动,在首次运行时安装基础工具集 |
| `lab close` | 停止并强制移除 `docklab` 容器,随后移除 `kalilinux/kali-rolling` 镜像 |
| `lab mon` | 打开实时 TUI 仪表板:概览、资源统计、磁盘使用情况、网络设置、正在运行的进程 |
| `lab reconnect` | 重新附加到现有的 `docklab` 容器(`docker start -ai`) |
| 标志 | 功能 |
|---|---|
| `--version` | 打印 `lab ` |
| `-V`, `--verbose` | 在运行每个底层 `docker` 命令之前打印该命令 |
| `-h`, `--help` | 打印命令/标志参考 |
| `--guide` | 打印典型工作流的简短演练 |
标志在任何调用中都会被识别(`lab --version`、`lab -h` 等),并且其优先级高于子命令。
### `lab mon` 按键
| 按键 | 操作 |
|---|---|
| `1`–`5` | 在 概览 / 统计 / 磁盘使用情况 / 网络 / 进程 标签页之间切换 |
| `r` | 强制刷新当前激活的标签页 |
| `h` 或 `?` | 切换帮助浮层 |
| `g` | 切换快速入门指南浮层 |
| `q` 或 `Esc` | 退出(或关闭已打开的浮层) |
## 内置 CVE 实验室内容
此仓库中的 `labs/` 包含了三个历史 CVE 的参考资料 —— `CVE-2011-2523`(vsftpd 2.3.4 后门)、`CVE-2014-6271`(Shellshock)和 `CVE-2021-44228`(Log4Shell)—— 每个都包含 `metadata.yaml` 简报/提示以及一个重现漏洞的独立 `docker/Dockerfile`。**这些尚未接入 `lab` CLI**:目前没有 `lab catalog` 或 `lab start ` 命令。要使用它们,请直接使用 `docker` 构建并运行,例如:
```
docker build -t docklab-vsftpd-backdoor labs/CVE-2011-2523/docker
docker run --rm -it -p 2121:21 -p 6200:6200 docklab-vsftpd-backdoor
```
然后从同一 Docker 网络上的 `lab create` shell 中对其进行攻击,或者根据您的喜好进行网络连接。将这些直接集成到 CLI 中(`lab catalog`、`lab start `)是最受期待的下一个功能 —— 请参阅 [CONTRIBUTING.md](CONTRIBUTING.md#about-labs)。
## 文档导航
| 文档 | 适用对象 |
|---|---|
| [TUTORIAL.md](TUTORIAL.md) | 首次使用的用户 —— 端到端的 `lab` 工作流 |
| [INSTALLATION.md](INSTALLATION.md) | 从源码进行 Linux / macOS / Windows 设置 |
| [SOLVING_REAL_WORLD_PROBLEMS.md](SOLVING_REAL_WORLD_PROBLEMS.md) | 项目存在的原因及其替代的方案 |
| [CONTRIBUTING.md](CONTRIBUTING.md) | 开发环境设置、项目布局、PR 流程 |
| [SECURITY.md](SECURITY.md) | 报告漏洞、负责任的使用 |
| [COMMUNITY.md](COMMUNITY.md) | 行为准则、道德规范、参与方式 |
## 许可证
MIT —— 请参阅 [LICENSE.md](LICENSE.md)。`labs/` 下的内置 CVE 实验室特意包含了历史漏洞;请参阅许可证文件中的范围说明和 [SECURITY.md](SECURITY.md) 了解相关处理方式。标签:Docker, Maven, Rust, 可视化界面, 安全防御评估, 漏洞验证, 网络流量审计, 虚拟化隔离, 请求拦截, 通知系统