软件漏洞
计算机术语
软件开发者开发软件时的疏忽,或者是编程语言的局限性,比如c语言家族比java效率高但漏洞也多,电脑系统几乎就是用c语言编的,所以常常要打补丁。 软件漏洞有时是作者日后检查的时候发现的,然后修正;还有一些人专门找别人的漏洞以从中做些非法的事,当作者知道自己的漏洞被他人利用的时候就会想办法补救。
最常见漏洞
缓冲区溢出是一种常见的编程错误,也是一种牵扯到复杂因素的错误。开发人员经常预先分配一定量的临时内存空间,称为一个缓冲区,用以保存特殊信息。如果代码没有仔细地把要存放的数据大小同应该保存它的空间大小进行对照检查,那么靠近该分配空间的内存就有被覆盖的风险。熟练的黑客输入仔细组织过的数据就能导致程序崩溃,更糟糕的话能执行代码。
幸亏近年来缓冲区溢出攻击发生的显著数量提高了编程界对这个问题的认识。虽然缓冲区溢出仍然在出现,但它们经常会被很快发现和纠正,特别在开放源代码应用中更是如此。像Java.Net这样的比较新的编程体系都包含自动检查数据大小,防止发生缓冲区溢出的机制。
缓冲区溢出是称为输入有效性漏洞的更大一类软件安全缺陷下的一个子类。几乎所有的程序都接受某种类型的用户输入(例如,命令行参数或者HTML表格)。如果代码没有严格检查输入的格式和内容是否合适,就开始处理数据,那么就会发生问题。考虑下面这个简单的例子:
这段代码的意图可能是打印/var/www/html下某个HTML文件的内容,/var/www/html是Red Hat服务器上Apache的httpd服务程序默认的文档根目录。这段代码接受用户输入的一个文件名,把它作为参数传给open函数。不过,如果一个恶意的用户把../../../etc/shadow当作参数输入的话,就会显示出/etc/shadow的内容,并可能根据这些内容破译出root密码!
作为一名系统管理员,您该如何防止这种情况发生呢?几乎无可奈何,至少在确定出缺陷(bug),并发布解决它的补丁之前是这样。紧盯补丁和安全性公告的发布,这是大多数系统管理员工作的一个重要部分。大多数Linux发行版本都带自动打补丁的工具,如Fedora上的yum、DebianUbuntu上的apt-get。利用这些工具能让您的站点避免出现软件的安全漏洞问题。
编程错误
大多数IT安全事件(如补丁程序网络攻击等)都与软件编程错误有关,在过去的三年中,非盈利调研机构MITRE和美国系统网络安全协会( SANS Institute)发现了700多处常见的软件编程错误,经过安全专家的筛选,最终公布了以下25大软件编程错误:
1. 错误的输入验证
2. 不正确的编码或转义输出
3. 维持SQL查询结构(SQL注入)错误
4. 维持网页结构(跨站点脚本)错误
5. 维持操作系统命令结果(操作系统命令注入)错误
6. 明文传送敏感信息
7. 跨站点请求伪造
8. 资源竞争(Race condition)
9. 错误信息泄露
10. 限定缓冲区内操作失败
11. 外部控制重要状态数据
12. 外部控制文件名或路径
13. 不可信搜索路径
14. 控制代码生成错误(代码注入)
15. 下载未经完整性检查的代码
16. 错误的资源关闭或发布
17. 不正确的初始化
18. 错误计算
19. 可渗透防护
20. 使用被破解的加密算法
21. 硬编码密码
22. 对核心资源的错误权限分配
23. 随机值的错误利用
24. 滥用特权操作
25. 客户端执行服务器端安全
参考资料
最新修订时间:2023-03-25 13:04
目录
概述
最常见漏洞
参考资料