prathamesh-71/smart-contract-security-and-auditing-test
GitHub: prathamesh-71/smart-contract-security-and-auditing-test
基于 Solidity 与 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)
### 描述
本实验演示了著名的 The DAO 重入漏洞,攻击者在漏洞合约更新其内部状态之前反复调用该合约。
### 漏洞
漏洞合约在更新用户余额之前执行了外部调用,这使得攻击者可以从合约中递归地提取资金。
### 缓解措施
安全的实现方式使用了:
- Checks-Effects-Interactions (CEI) 模式。
- ReentrancyGuard 式保护。
### 测试结果
[](https://github.com/sakshichavan-sc/smart-contract-auditing-tests/blob/main/screenshots/reentrancy.png)
## 实验 2 - 重复签名漏洞 (Ronin Bridge)
### 描述
本实验模拟了 Ronin Bridge 验证者签名漏洞。
### 漏洞
漏洞合约在统计验证者签名时,没有确保这些签名来自不同的验证者。因此,重复的签名就能满足所需的阈值要求。
### 缓解措施
安全的实现方式:
- 要求验证者签名必须互不相同。
- 在接受签名之前强制对验证者地址进行排序。
### 测试结果
[](https://github.com/sakshichavan-sc/smart-contract-auditing-tests/blob/main/screenshots/signature-verification.png)
## 实验 3 - Wormhole 代币桥验证漏洞
### 描述
本实验演示了 Wormhole 风格的代币桥验证漏洞。
### 漏洞
存在漏洞的代币桥允许调用者提供验证者合约地址。攻击者可以提供一个始终返回 true 的恶意验证者,并在没有合法授权的情况下铸造包装代币。
### 缓解措施
安全的实现方式:
- 在部署期间存储受信任的验证者。
- 使用 immutable 存储,因此验证者无法被修改。
### 测试结果
[](https://github.com/sakshichavan-sc/smart-contract-auditing-tests/blob/main/screenshots/access-control.png)
## 实验 4 - 权限陷阱 (Poly Network)
### 描述
本实验模拟了 Poly Network 的权限提升漏洞。
### 漏洞
存在漏洞的 manager 合约会执行任意目标地址和 calldata。攻击者可以滥用 manager 的权限去调用另一个合约上的特权函数。
### 缓解措施
安全的实现方式:
- 使用已批准的目标合约和函数选择器的白名单。
- 仅允许明确许可的跨链调用。
### 测试结果
[](https://github.com/sakshichavan-sc/smart-contract-auditing-tests/blob/main/screenshots/privilege-trap.png)
## 项目结构
```
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-signature-verification.test.js
```
### 实验 4 - 权限陷阱
```
npm run test:privilege
```
## 学习成果
通过完成这些实验,将演示以下智能合约安全概念:
- 重入漏洞及其缓解措施。
- 签名验证和验证者阈值检查。
- 跨链桥中的信任假设。
- 权限提升攻击。
- 访问控制机制。
- 函数选择器白名单。
- 安全的智能合约开发实践。
## 免责声明
本仓库仅供教育目的使用。所有漏洞利用均在 Hardhat 开发网络上本地执行,旨在演示智能合约漏洞及其相应的安全缓解措施。
标签:Hardhat, Solidity, 区块链安全, 智能合约, 漏洞复现