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攻击, 内存安全, 安全工程, 安全编码, 安全规则引擎, 安全面试, 技术面试准备, 整数溢出, 漏洞演练, 缓冲区溢出, 编程练习, 网络安全, 路径遍历, 软件安全, 逆向工具, 隐私保护