C语言安全编程与漏洞防范
📚 共计 30 章节
01
C语言安全概述
缓冲区溢出、格式化字符串、整数溢出、空指针解引用等常见漏洞类型介绍,安全编程的重要性。
漏洞全景
入门
02
内存布局与缓冲区
进程内存布局(栈、堆、数据段、代码段),缓冲区在栈上的分配机制,局部变量与数组的内存排列。
内存
栈
03
栈缓冲区溢出原理
栈帧结构(返回地址、EBP、局部变量),溢出如何覆盖返回地址,经典攻击流程演示。
栈溢出
攻击
04
危险的字符串函数
strcpy、strcat、sprintf、gets等函数的安全隐患,为什么不推荐使用,替代方案(strncpy、strncat、snprintf)。
字符串
危险函数
05
安全的字符串操作
strncpy与strlcpy的正确用法,snprintf的格式化安全,字符串截断与空字符处理。
安全函数
最佳实践
06
格式化字符串漏洞
printf族函数的%n、%s、%x等格式符滥用,读取栈内存与任意地址写入,防御措施(使用格式字符串常量)。
格式化
%n
07
整数溢出与回绕
有符号/无符号整数溢出、回绕、截断,在内存分配和循环中的危害,安全检查方法。
整数
回绕
08
整数溢出实战案例
malloc(size)中的整数溢出,数组索引越界,长度计算错误,防御性编程技巧。
实战
malloc
09
空指针与野指针
空指针解引用、未初始化指针、悬空指针(dangling pointer)、释放后使用(use-after-free)。
指针
UAF
10
动态内存管理安全
malloc/calloc/realloc/free的正确使用,内存泄漏检测,双重释放(double free)问题。
堆管理
double free
11
堆溢出原理
堆块结构(chunk header、fd/bk指针),堆溢出如何覆盖相邻堆块,unlink攻击与fastbin攻击简介。
堆溢出
unlink
12
堆溢出防御机制
ASLR、NX(栈不可执行)、Stack Canary、PIE、RELRO,各机制的原理与局限性。
防御
ASLR
13
数组越界访问
一维与二维数组越界,C语言不检查边界的本质,越界读写的后果,安全边界检查。
数组
越界
14
类型混淆与强制转换
隐式类型转换风险,指针类型强制转换(type punning),union的误用,对齐问题。
类型
union
15
竞争条件与TOCTOU
时间-of-check-time-of-use漏洞,文件操作中的竞争条件,信号处理中的竞态,原子操作与锁。
竞态
TOCTOU
16
信号处理安全
信号处理函数中可重入性(reentrancy),不可调用函数列表,volatile sig_atomic_t的使用。
信号
可重入
17
文件操作安全
文件路径遍历(path traversal),符号链接攻击(symlink attack),临时文件安全创建(mkstemp)。
文件
路径遍历
18
命令行注入
system()、popen()、exec族函数的安全使用,shell元字符转义,使用execve替代system。
注入
shell
19
环境变量安全
环境变量污染,LD_PRELOAD攻击,PATH劫持,setuid程序的环境变量清理。
环境变量
LD_PRELOAD
20
setuid/setgid安全
特权提升风险,最小权限原则,capability机制,安全执行外部程序。
特权
setuid
21
随机数生成
rand()与srand()的缺陷,使用getrandom()、arc4random()等安全随机数生成器,密码学安全随机数。
随机数
密码学
22
加密与哈希基础
常见加密算法(AES、RSA)的C语言实现注意事项,哈希函数(SHA-256)的正确使用,密钥管理。
加密
哈希
23
网络编程安全
socket编程中的常见漏洞,缓冲区管理,拒绝服务(DoS)防范,TLS/SSL集成基础。
网络
socket
24
输入验证与净化
所有输入都是不可信的,白名单与黑名单验证,正则表达式安全,数值范围检查。
输入
白名单
25
编译时安全选项
gcc/clang的安全编译选项(-fstack-protector、-D_FORTIFY_SOURCE、-Wformat-security等),静态分析工具(cppcheck、flawfinder)。
编译选项
静态分析
26
运行时保护机制
ASLR、DEP/NX、SEHOP、CFG(控制流防护),如何检查这些机制是否生效。
运行时
CFG
27
安全编码规范
MISRA C、CERT C编码标准核心规则,代码审查清单,安全编码流程。
规范
MISRA
28
模糊测试与漏洞发现
libFuzzer、AFL等模糊测试工具的使用,测试用例生成,崩溃分析与复现。
模糊测试
AFL
29
漏洞缓解与补丁
漏洞披露流程,补丁编写原则,回归测试,版本控制中的安全实践。
补丁
SDL
30
综合案例分析与实战
真实CVE案例分析(如Heartbleed、Shellshock),从漏洞发现到修复的完整过程,安全开发生命周期(SDL)总结。
CVE
Heartbleed