软件漏洞印象
软件安全性检测
- 软件安全静态分析:学术界一度十分热衷的偏理论性方法
- 软件漏洞动态挖掘,工程界普遍采用动态漏洞挖掘方式,即Fuzz技术,也称为模糊测试
漏洞利用 vs. 漏洞修复
对于已发现的软件漏洞 黑客会基于MetaSploit等工具,开发漏洞利用脚本,达到网络攻击、信息窃取等目的
软件厂商会对软件以打补丁的方式进行安全性升级,达 到修复漏洞的目的
栈溢出漏洞:
在各类软件安全漏洞中,栈溢出漏洞是最常见、危害最大的漏洞之一
利用栈溢出漏洞进行网络攻击的病毒最早可以追溯到 1988年的“Morris蠕虫病毒”
关键函数strcpy(buffer,password)将变量 password的值复制到变量buffer的地址上
- 如果变量password的长度小于等于buffer的存储空间, 则strcpy函数能够正常工作
- 如果变量password的长度大于buffer的存储空间,则在 拷贝的过程中,拷贝的内容会超出buffer的范围,发生程序异常
- 如果拷贝的过程发生在栈空间,则会触发栈溢出漏洞
通过溢出漏洞,修改authenticated的值为0, 可以通过verify_password函数对输入的验证,输入8个任意字符,隐藏的第9个截断字符NULL,在内存中能够将authenticated中低字节1覆盖成0
如果将返回地址的值修改为主函数中else分支, 则可直接跳过子函数verify_password测试
其他软件漏洞简介
整数溢出漏洞
格式化字符串漏洞
双重释放漏洞 释放重引用漏洞