fosres/SecEng-Exercises
GitHub: fosres/SecEng-Exercises
一套基于真实 CVE 和权威安全标准的安全工程实战练习集,专注于培养生产环境下的安全编码能力和漏洞防御技能。
Stars: 11 | Forks: 0
# 安全工程挑战练习
这是一套全面的应用安全动手练习集,旨在提升你在生产环境和关键安全岗位中的技能。这些挑战基于真实的 CVE、行业标准以及权威安全参考资料中的最佳实践。
## 概述
本仓库提供面向生产环境的实用安全练习,涵盖常见的漏洞类别和安全编码实践。每个练习都源于实际的 CVE,并参考了行业标准的安全资源,包括 CERT C 编码标准、《Effective C》、《The Art of Software Security Assessment》和《API Security in Action》。
## 目标受众
- 为生产工作做准备的安全工程师
- 希望加强安全编码实践的软件工程师
- 研究现实世界漏洞模式的安全专业人士
- 准备安全工程技术面试的开发人员
- 学习攻防安全技术的学生
## 练习分类
### 内存安全 (C)
#### 整数溢出
**位置**: `integer_overflow/`
专注于检测和防止无符号整数回绕漏洞:
- 无符号整数溢出检测 (CERT C INT30-C)
- `size_t` 算术溢出预防
- 前置条件和后置条件测试技术
- 真实 CVE 场景:CVE-2009-1385 (Linux Kernel), CVE-2014-4377 (iOS 7.1)
**难度**: 初级到中级
#### 缓冲区溢出
**位置**: `buffer_overflow/`
安全字符串操作和边界检查:
- `strncat()` 的安全使用和边界检查函数
- 差一错误 (Off-by-one error) 预防
- 大小计算中的整数下溢
- 正确的空终止符处理
- 真实 CVE 场景:CVE-2009-0587, CVE-2009-1252
**难度**: 初级到中级
**前置条件**: 先完成整数溢出练习
### OS 安全 (Python)
#### 路径遍历预防
**位置**: `os_security/`
关于预防路径遍历攻击的三个进阶练习:
- Unicode 三明治模式实现
- 基于编码的攻击绕过检测 (URL 编码, 双重编码)
- Unicode 标准化攻击预防
- 允许列表 (Allowlist) 验证技术
- 真实 CVE 场景:CVE-2019-11510 (Pulse Secure), CVE-2021-41773 (Apache), CVE-2022-24112 (Atlassian)
**难度**: 中级
**时间**: 每个变体 2-4 小时
### 密码学与认证 (Python)
#### 密码生成
**位置**: `passwords/password_generator/`
加密安全的密码生成和强度验证:
- CSPRNG (加密安全伪随机数生成器) 使用
- 密码熵计算
- 字符空间分析
- 基于安全的密码强度评估
- 随机数生成中的常见陷阱
**难度**: 中级
#### 会话安全
**位置**: `session_security/jwt_token_validation/`
JWT token 验证和会话管理:
- Token 过期验证
- 安全的会话处理实践
- 基于时间的安全控制
**难度**: 中级
### API 安全 (Python)
#### 速率限制
**位置**: `api_security/api_request_limiter/`
实现生产级 API 速率限制:
- 请求节流策略
- 滥用预防机制
- API 安全最佳实践
**难度**: 中级
### 动态内存管理 (C)
**位置**: `dynamic_memory_management/`
安全的内存分配和释放实践:
- malloc/free 的正确使用
- 内存泄漏预防
- Use-after-free 漏洞预防
- 用于内存管理的数据结构比较
**难度**: 中级到高级
## 仓库结构
```
SecEng-Exercises/
├── README.md # This file
├── CLAUDE.md # Development guidance for AI assistants
├── integer_overflow/ # Size_t overflow detection
├── buffer_overflow/ # Secure string operations
├── os_security/ # Path traversal prevention exercises
│ ├── os_path_traversal/
│ ├── os_path_traversal_ii/
│ └── os_path_traversal_revised/
├── passwords/ # Password generation and validation
│ └── password_generator/
├── session_security/ # JWT and session management
│ └── jwt_token_validation/
├── api_security/ # API security patterns
│ └── api_request_limiter/
└── dynamic_memory_management/ # Safe memory operations
```
## 如何使用这些练习
### 对于 C 练习
1. 仔细阅读练习 markdown 文件
2. 了解 CVE 背景和现实世界的影响
3. 查看不合规示例以了解**不应该**做什么
4. 按照要求实现你的解决方案
5. 使用安全标志进行编译:
gcc -std=c11 -Wall -Wextra -Wpedantic -Werror \
-fsanitize=address,undefined \
-D_FORTIFY_SOURCE=2 -fstack-protector-strong \
-o output source.c
6. 针对提供的测试用例进行测试
7. 使用 AddressSanitizer 和 Valgrind 进行验证:
./output
valgrind --leak-check=full ./output
### 对于 Python 练习
1. 阅读练习 README 或 markdown 文件
2. 了解漏洞类别和攻击向量
3. 查看测试用例以了解要求
4. 实现你的解决方案
5. 运行提供的测试套件
6. 阅读博文以获取详细解释
## 涵盖的关键安全原则
### 整数安全
- 无符号回绕是明确定义的,但很危险
- 永远不要在操作**之后**测试溢出
- 使用前置条件检查:`b > SIZE_MAX - a`
- 或后置条件检查:`sum < a` 表示回绕
### 字符串安全
- 切勿使用无界字符串函数
- 在大小计算中考虑到空终止符
- 在减法之前检查整数下溢
- 验证输入是否以空字符结尾
### 输入验证
- 实施允许列表 (Allowlist) 验证,而非阻止列表 (Blocklist)
- 在验证之前标准化输入
- 检测基于编码的绕过
- 处理 Unicode 边缘情况
### 密码学操作
- 始终使用加密安全的随机源
- 切勿在安全关键操作中使用可预测的 RNG
- 计算并验证熵要求
- 理解随机性与安全性之间的区别
## 标准与参考
所有练习均基于权威的安全参考:
- **CERT C 编码标准 2016**: 特定规则引用 (INT30-C, STR31-C 等)
- **Effective C, 第 2 版**: 章节和页码引用
- **The Art of Software Security Assessment**: 漏洞分析技术
- **API Security in Action**: 现代 API 安全模式
- **Effective Python**: 特定语言的最佳实践
## 真实 CVE 覆盖范围
练习模拟了来自实际 CVE 的漏洞:
- **CVE-2009-1385**: Linux Kernel 整数下溢
- **CVE-2014-4377**: iOS 乘法回绕
- **CVE-2009-0587, CVE-2009-1252**: 字符串操作漏洞
- **CVE-2019-11510**: Pulse Secure 路径遍历
- **CVE-2021-41773**: Apache HTTP Server 路径遍历
- **CVE-2022-24112**: Atlassian Unicode 标准化绕过
## 前置条件
### 对于 C 练习
- 基础 C 编程知识
- 理解指针和内存
- 支持 C11 的 GCC 编译器
- AddressSanitizer 和 Valgrind (推荐)
### 对于 Python 练习
- Python 3.8+
- 对文件系统和 Web API 的基本了解
- 熟悉 pytest (用于运行测试)
## 学习路径
推荐的学习进程以获得最大收益:
1. **从整数溢出开始** —— 大小计算的基础
2. **进阶到缓冲区溢出** —— 应用整数溢出概念
3. **转向路径遍历** —— 输入验证和编码
4. **练习密码生成** —— 密码学操作
5. **探索 API 安全** —— 速率限制和滥用预防
6. **高级内存管理** —— 复杂的内存安全模式
## 贡献
这些练习专为自学和技能发展而设计。如果你发现错误或有改进建议,请开启一个 issue 或提交 pull request。
## 许可证
这些练习仅用于教育目的。利用它们来增强你的安全技能并构建更安全的软件。
**注意**:每个练习目录都包含详细的说明、测试用例、提示,以及通常包含带有全面解释的博文。在开始实现之前,请阅读所有提供的材料。
标签:CVE复现, C语言安全, Secure Coding, TLS抓取, XXE攻击, 内存安全, 安全工程, 安全编码, 安全规则引擎, 安全面试, 技术面试准备, 整数溢出, 漏洞演练, 缓冲区溢出, 编程练习, 网络安全, 路径遍历, 软件安全, 逆向工具, 隐私保护