leminehadj/sentinel-evm-security-lab
GitHub: leminehadj/sentinel-evm-security-lab
一个全栈 EVM 智能合约安全实验室,通过八个可复现的漏洞场景演示攻击原理并验证修复方案。
Stars: 0 | Forks: 0
# Sentinel EVM 安全实验室
我构建这个项目是为了练习智能合约安全的两个方面:用真实的交易复现一个漏洞,然后证明修复方案能够阻止同样的攻击。
这是一个完整的本地安全工作台,而不是一堆孤立的 Solidity 代码片段的文件夹。该仓库包含八个漏洞场景、漏洞利用合约、修复后的实现、17 个合约测试、类型化的 Express API,以及一个用于探索这些发现的响应式 React 仪表板。
## 内容概览
| ID | 发现 | 严重程度 | 漏洞利用证明 | 防御控制措施 |
| --- | --- | --- | --- | --- |
| SEC-01 | 重入耗尽资金池存款 | 严重 | 递归回调掏空 11 ETH 金库 | CEI + `ReentrancyGuard` |
| SEC-02 | 未受保护的 owner 重分配 | 高 | 任意调用者接管并掏空金库 | `Ownable2Step` + `onlyOwner` |
| SEC-03 | `tx.origin` 钓鱼 | 高 | 中间人掏空 8 ETH 钱包 | `msg.sender` 授权 |
| SEC-04 | 签名重放 | 高 | 一个 2 ETH 的签名被接受两次 | EIP-712 域 + nonce |
| SEC-05 | 未检查的外部调用 | 中 | 失败的转账仍被记录 | 失败时回滚,成功后记账 |
| SEC-06 | 退款拒绝服务 | 中 | 拒绝接收的接收者冻结了新出价 | Pull-payment 退款 |
| SEC-07 | 定点数精度丢失 | 中 | 先除后乘的数学运算返回 2 而不是 3 | 全精度 `Math.mulDiv` |
| SEC-08 | 闪电贷预言机操纵 | 严重 | 临时流动性造成坏账并获利 | 独立且检查过新鲜度的预言机 |
每一行都包含漏洞源码、可量化的漏洞利用证据、修复后的实现,以及至少一个回归断言。详细的报告位于 [`docs/findings`](docs/findings)。
## 全栈仪表板
仪表板将仓库中的安全证据转化为审计风格的工作区:
- 带有风险分布和验证状态的总览;
- 可搜索的发现目录,支持按严重程度和类别筛选;
- 攻击路径工作台,提供精确的本地测试命令;
- 详细的根本原因、影响、修复方案、控制措施和源码参考;
- 实时 API 模式,并带有用于静态托管的自动捆绑数据回退机制;
- 适配桌面、平板和移动端的响应式布局。
后端提供了用于总览、发现、覆盖图和本地运行手册的经过验证的只读 endpoint。它包含了安全标头、速率限制、CORS 控制、请求 ID、统一的错误处理以及集成测试。
## 快速开始
前置要求:Node.js 20 或更高版本以及 npm。
```
npm install
npm run check
npm run dev
```
打开 `http://localhost:5173`。API 监听 `http://127.0.0.1:4100`,Vite 会将本地请求代理至该地址。
无需钱包、RPC endpoint、私钥、数据库或公共网络。合约测试使用隔离的内存 Hardhat fixtures。
## 常用命令
| 命令 | 用途 |
| --- | --- |
| `npm run dev` | 同时启动 API 和仪表板 |
| `npm run test:contracts` | 运行所有漏洞利用和修复场景 |
| `npm run test:api` | 运行后端集成测试 |
| `npm run test:web` | 运行前端单元测试 |
| `npm run compile` | 编译所有 Solidity 模块 |
| `npm run coverage` | 在本地生成 Solidity 覆盖率报告 |
| `npm run build` | 构建 shared package、API 和生产环境仪表板 |
| `npm run check` | 类型检查、Lint、测试并编译整个项目 |
| `npm run verify` | 执行完整检查以及所有生产环境构建 |
如需单独运行某一个发现:
```
npx hardhat test test/oracle-manipulation.test.ts
```
## 架构
```
modules/ Vulnerable contracts, exploit helpers, and fixes
test/ Hardhat exploit and regression tests
packages/shared/ Typed finding catalog used by API and dashboard
apps/api/ Express security evidence API
apps/web/ React + Vite dashboard
docs/findings/ Audit-style finding write-ups
reports/ Verification and static-analysis summaries
.github/workflows/ Clean-clone CI validation
```
请参阅 [架构](docs/ARCHITECTURE.md)、[API 参考](docs/API.md) 和 [本地运行手册](docs/LOCAL_RUNBOOK.md) 以了解更深层的设计。
## 验证快照
- 开启 optimizer 设置编译了 49 个 Solidity 源文件
- 17/17 个 Hardhat 合约测试通过
- 7/7 个 API 集成测试通过
- 3/3 个前端单元测试通过
- 跨合约、shared models、API 和 Web 的严格 TypeScript 检查通过
- 生产环境 API 和 Vite 构建通过
- Solhint 基准检查通过,仅在特意演示漏洞的地方调整了规则
该快照描述了本仓库的自动化本地检查。它不是第三方审计,也不应被视为审计报告。
## 负责任的使用
漏洞利用合约的存在是为了让安全故障变得易于理解和复现。请勿部署存在漏洞的变体,请勿重用本地测试密钥,并且请勿将这些 payload 指向第三方合约。有关报告指南,请参阅 [SECURITY.md](SECURITY.md)。
## 许可证
[MIT](LICENSE)
标签:Web3, 区块链安全, 安全实验室, 智能合约, 自动化攻击