sakshichavan-sc/smart-contract-auditing-tests
GitHub: sakshichavan-sc/smart-contract-auditing-tests
基于著名区块链攻击事件的智能合约安全实践实验室,提供漏洞复现与修复方案的 Hardhat 测试驱动教学环境。
Stars: 0 | Forks: 0
# 智能合约安全实验室
本仓库包含四个受著名区块链攻击事件启发的智能合约安全实践实验室。每个实验室都包含存在漏洞和安全的 Solidity 合约,以及用于演示漏洞利用及其缓解方法的 Hardhat 测试用例。
## 目录结构
contracts/
01-reentrancy/ VulnerableDAO.sol Attacker.sol SafeDAO.sol
02-access-control/ VulnerableBridge.sol SafeBridge.sol
03-signature-verification/ Verifiers.sol VulnerableTokenBridge.sol SafeTokenBridge.sol
04-privilege-trap/ CrossChainData.sol VulnerableManager.sol SafeManager.sol Greeter.sol
test/
01-reentrancy.test.js
02-access-control.test.js
03-signature-verification.test.js
04-privilege-trap.test.js
## 使用的技术
* Solidity
* Hardhat
* Ethers.js
* Chai
* OpenZeppelin Contracts
## 实验 1 - 重入攻击 (The DAO Hack)
### 描述
本实验演示了著名的 DAO 重入漏洞,攻击者在合约更新其内部状态之前反复调用该易受攻击的合约。
### 漏洞
存在漏洞的合约在更新用户余额之前执行了外部调用,使得攻击者可以递归地从合约中提取资金。
### 缓解措施
安全的实现使用了:
* Checks-Effects-Interactions (CEI) 模式。
* 来自 OpenZeppelin 的 ReentrancyGuard。
### 测试结果

## 实验 2 - 重复签名漏洞 (Ronin Bridge)
### 描述
本实验模拟了 Ronin Bridge 验证者签名漏洞。
### 漏洞
存在漏洞的合约在统计验证者签名时,没有确保它们来自不同的验证者。因此,重复的签名就能满足所需的阈值要求。
### 缓解措施
安全的实现:
* 要求验证者签名必须是唯一的。
* 在接受签名之前强制要求对验证者地址进行排序。
### 测试结果

## 实验 3 - Wormhole 代币桥验证漏洞
### 描述
本实验演示了一种 Wormhole 风格的代币桥验证漏洞。
### 漏洞
存在漏洞的代币桥允许调用者提供 verifier 合约地址。攻击者可以提供一个始终返回 true 的恶意 verifier,并在没有合法授权的情况下铸造包装代币。
### 缓解措施
安全的实现:
* 在部署期间存储受信任的 verifier。
* 使用 immutable 存储,确保 verifier 无法被修改。
### 测试结果
## 
## 实验 4 - 权限陷阱 (Poly Network)
### 描述
本实验模拟了 Poly Network 的权限提升漏洞。
### 漏洞
存在漏洞的 Manager 合约可以执行任意的目标地址和 calldata。攻击者可以滥用 Manager 的权限,在另一个合约上调用特权函数。
### 缓解措施
安全的实现:
* 使用已批准的目标合约和函数选择器的白名单。
* 仅允许明确许可的跨链调用。
### 测试结果

## 项目结构
```
Smart-Contract-Security-Labs/
│
├── contracts/
├── test/
├── screenshots/
│ ├── reentrancy.png
│ ├── access-control.png
│ ├── token-bridge.png
│ └── privilege-trap.png
│
├── README.md
├── package.json
└── hardhat.config.js
```
## 安装
安装所有项目依赖:
```
npm install
```
编译智能合约:
```
npm run compile
```
## 运行测试
运行所有测试:
```
npm run test
```
运行单个实验:
### 实验 1 - 重入
```
npm run test:reentrancy
```
### 实验 2 - 重复签名漏洞
```
npm run test:access
```
### 实验 3 - Wormhole 代币桥
```
npx hardhat test test/03-token-bridge.test.js
```
### 实验 4 - 权限陷阱
```
npm run test:privilege
```
## 学习成果
通过完成这些实验,将展示以下智能合约安全概念:
* 重入漏洞及其缓解措施。
* 签名验证和验证者阈值检查。
* 跨链桥中的信任假设。
* 权限提升攻击。
* 访问控制机制。
* 函数选择器白名单。
* 安全的智能合约开发实践。
## 免责声明
本仓库仅供教育目的使用。所有漏洞利用均在本地 Hardhat 开发网络上执行,旨在演示智能合约漏洞及其相应的安全缓解措施。
标签:Hardhat, Solidity, 区块链安全, 安全漏洞实验, 智能合约, 自定义脚本