NAMEisNOTvailable/guardedim-security-assessment
GitHub: NAMEisNOTvailable/guardedim-security-assessment
GuardedIM 是一个加密消息传递原型的本地安全评估实验室,通过保留可复现的协议缺陷帮助学习者实践安全编程审查与漏洞缓解分析。
Stars: 0 | Forks: 0
# GuardedIM 安全评估实验室
[](https://github.com/NAMEisNOTvailable/guardedim-security-assessment/actions/workflows/smoke.yml)
GuardedIM 是一个用于去中心化安全消息传递原型的本地安全评估实验室。它结合了可运行的 Python 聊天客户端/服务端、AES-GCM 加密的 payload、基于 RSA 的会话密钥交换,以及用于面向 WireGuard 中继管理的 Go 控制平面组件。
该实验室保留了两个可作为本地评估目标的协议缺陷,可在安全的 localhost 环境中进行复现、解释并映射到缓解措施。该项目的定位是一个安全编程审查实验室。
## 演示内容
- 涵盖 RSA 密钥交换、AES-GCM 会话加密和消息帧的应用密码学审查。
- 针对未经身份验证的密钥交换和握手不同步的本地概念验证演示。
- 围绕发送方绑定、文件名验证、危险文件扩展名和帧大小限制的安全编程加固。
- 通过 GitHub Actions 进行的 Python 运行时测试以及 Go 编译/单元检查。
## 项目概览
| 领域 | 概要 |
| --- | --- |
| 领域 | 安全消息传递、应用密码学、安全编程 |
| 客户端/服务端原型 | Python socket 服务和 Tkinter 聊天客户端 |
| 控制组件 | 用于服务端/用户管理、WireGuard peer 更新以及面向 mTLS 的控制平面设计的 Go CLI 和 daemon 代码 |
| 安全机制 | RSA 会话密钥交换、AES-GCM 消息/文件加密路径,以及面向 mTLS 的控制平面设计 |
| 网络设计 | 面向 WireGuard 的服务端连接和 peer 管理概念,以及用于测试的 localhost Python 原型 |
| 数据层 | 通过 Go `pgx` 进行 CockroachDB/PostgreSQL 风格的元数据存储 |
| 实验室形式 | 带有引导式协议分析挑战的本地易受攻击目标 |
## 工程重点
- 用于一对一聊天、群聊和文件传输的 Python socket 服务端和 Tkinter 客户端。
- 基于 RSA 的会话密钥交换与 AES-GCM 加密的消息和文件 payload。
- 用于服务端设置、用户注册、数据库访问和 WireGuard peer 更新的 Go 控制组件。
- 两个有意设置漏洞的实验室目标:未经身份验证的密钥交换和握手协议不同步。
- 针对 MITM 风险、消息帧、身份验证边界、文件处理、密钥存储和拒绝服务行为的安全审查覆盖范围。
## 架构概览
```
flowchart LR
GUI["Tkinter chat GUI"] --> PYCLIENT["Python client"]
PYCLIENT -->|"RSA session-key setup"| PYSERVER["Python socket server"]
PYCLIENT -->|"AES-GCM messages and files"| PYSERVER
PYSERVER --> USERS["Connected users and groups"]
PYSERVER --> COMMON["Shared crypto and validation helpers"]
GOCLI["Go CLI"] --> GOSERVER["Go control-plane prototype"]
GODAEMON["Go daemon"] --> GOSERVER
GOSERVER --> DB["PostgreSQL/CockroachDB metadata"]
GOSERVER --> WG["WireGuard peer management concept"]
```
请参阅[架构说明](docs/ARCHITECTURE.md) 以了解组件映射和设计边界。
## 仓库结构
```
client/ Python chat client and Go client-side setup helpers
server/ Python server prototype and Go server/database control helpers
common/ Shared Python encryption utilities
cmd/gdim/ Go CLI control commands
cmd/gdimd/ Go daemon entry point
docs/ Architecture notes and security findings
labs/ Guided vulnerable-lab challenges
demos/ Local proof-of-concept demos for the two lab findings
```
## 关键文件
| 路径 | 用途 |
| --- | --- |
| `client/chat_gui.py` | 用于用户聊天交互的 Tkinter GUI |
| `client/client.py` | Python 客户端连接、加密、消息、群组和文件传输逻辑 |
| `server/server.py` | Python socket 服务端、密钥交换、消息转发和群组处理 |
| `common/encryption.py` | 共享的 AES-GCM 和 RSA 辅助函数 |
| `cmd/gdim/` | Go 命令行控制平面 |
| `cmd/gdimd/` | Go daemon 入口点 |
| `guarded_im_config.example.json` | 示例配置模板 |
| `.env.example` | 本地 Python 原型设置 |
| `SECURITY_NOTES.md` | 安全范围和审查主题 |
| `docs/FINDINGS.md` | 评估发现矩阵 |
| `docs/MITIGATIONS.md` | 易受攻击的设计与缓解措施对比 |
| `labs/README.md` | 实验室挑战索引 |
| `demos/README.md` | 本地演示脚本索引 |
## 60 秒验证
在安装 Python 依赖项后,从仓库根目录运行以下检查:
```
python -m unittest discover -s tests
python demos/run_all.py
go test ./...
```
Python 测试涵盖验证、运行时交换和发送方绑定。演示运行器会复现两个仅限本地的评估发现。当 Go 可用时,Go 检查会验证控制平面包。
## 设置说明
安装 Python 依赖项:
```
python -m venv .venv
. .venv/bin/activate
pip install -r requirements.txt
```
从示例中创建本地配置:
```
cp guarded_im_config.example.json guarded_im_config.json
cp .env.example .env
```
运行时密钥会在服务端首次启动时于本地生成。如需手动轮换它们:
```
python -m server.server --gen-keys
```
在单独的终端中启动 Python 服务端和 GUI 客户端:
```
python -m server.server
python -m client.chat_gui
```
当 Go 可用时,构建 Go 控制组件:
```
go build -o gdim ./cmd/gdim/*.go
go build -o gdimd ./cmd/gdimd/*.go
```
Go 代码作为控制平面原型保留。它涵盖了配置解析、基于数据库的服务端/用户记录、WireGuard peer 设置路径,以及面向 mTLS 的控制服务端。自动化检查会运行轻量级的 Go 单元测试和编译检查;而部署到生产环境的系统将需要运维级别的密钥管理、证书生命周期处理以及针对特定环境的服务打包。
## 实验室挑战
该实验室围绕两个有意引入的协议缺陷设计:
| 挑战 | 重点 | 入口点 |
| --- | --- | --- |
| 01 | 未经身份验证的 RSA 密钥交换与 MITM 推理 | [`labs/challenge-01-unauthenticated-key-exchange.md`](labs/challenge-01-unauthenticated-key-exchange.md) |
| 02 | 由于长度处理不一致导致的握手不同步 | [`labs/challenge-02-handshake-desync.md`](labs/challenge-02-handshake-desync.md) |
每个挑战都描述了目标文件、审查目标、预期观察结果和缓解方向。
## 本地演示脚本
仓库包含两个仅限本地的概念验证演示。它们绑定到 `127.0.0.1` 或使用进程内 socket,旨在用于评估讨论:
```
python demos/run_all.py
```
在每次审查一个发现时,运行单独的演示:
```
python demos/mitm_key_replacement_demo.py
python demos/handshake_desync_demo.py
```
详情请参阅[本地漏洞演示](demos/README.md)。
## 安全审查重点
安全审查重点:
- 哪些问题是本次评估中故意设置的易受攻击实验室目标?
- 在接受公钥之前如何验证服务端身份?
- 会话密钥是如何生成、交换、存储和轮换的?
- 消息帧错误如何导致加密协议不同步?
- 应该如何验证和限制文件传输的 payload?
- 私钥、证书、数据库凭据和本地配置应如何保持在源代码控制之外?
- 原型中缓解了哪些风险,哪些仍是已记录的局限性?
请参阅[安全说明](SECURITY_NOTES.md)、[安全评估发现](docs/FINDINGS.md)、[缓解措施对比](docs/MITIGATIONS.md)和[架构说明](docs/ARCHITECTURE.md)。
## 排除的运行时文件
生成或特定于机器的文件已被排除:
- `.env` 和特定于机器的配置
- 生成的二进制文件
- 生成的私钥/公钥材料
- 本地证书和数据库凭据
- 截图和测试媒体
- 真实的部署密钥
## 许可证
原始源代码和文档基于 MIT 许可证授权。
## 状态
专注于安全评估和缓解措施审查的学术安全编程原型。
标签:Go, Golang, Python, Ruby工具, 加密通信, 安全编程, 应用密码学, 无后门, 日志审计, 测试用例, 漏洞靶场, 逆向工具, 防御检测