CWE/SANS评出25种最危险的编程错误

一般弱点列举(Common Weakness Enumeration CWE) 是由美国国家安全局 首先倡 议的战略行动,该行动的组织最近发布了《2010年CWE/SANS最危险的程序设计错误 (PDF)》 一文,其中列举了作者认为最严重的25种代码错误,同时也是软件最容易受到攻击的点。

曾在InfoQ中发布 过OWASP Top 10列表,它所关注的是web应用程序的安全风险,而CWE的Top 25的覆盖范围更广,包括著名的缓冲区溢出缺陷。CWE还为程序员提供了编写更安全的代码所需要的更详细的内容。

这个列表是SANS学院MITRE 以及“美国和欧洲很多顶级软件安全专家 ” 共同合作的成果。在CWE站点上列有800多个编程、设计和架构上的错误,CWE文档首先列举的是针对程序员最重要的25项,从而帮助他们编写更安全的代 码。同时文档还适用于软件设计师、架构师、甚至CIO,他们应该了解这些可能出现的弱点,并采取恰当的措施。

根据CWE的列表,跨平台脚本攻击(XSS)和SQL注入被认为是软件最薄弱的环节,而位于第三位的是缓冲区溢出:

排名名称
1网页架构保持失败 (跨平台脚本攻击)
2对SQL命 令中使用的特定元素处理不当(SQL注入)
3在没有检 测输入大小的情况下就对缓冲区进行复制(经典的缓冲 区溢出)
4跨站点伪 造请求(CSRF)
5不当的访 问控制(授权)
6在安全决 策中信赖不被信任的输入
7不当地将路 径名限制为受限的目录(路径穿透)
8对危险类 型文件的上载不加限制
9对OS命令 中使用的特定元素处理不当
10缺少对敏 感数据的加密
11使用硬编 码的证书
12使用不正 确的长度值访问缓冲区
13在PHP程 序中,对Include/Require声明的文件名控制不当(PHP文件包含漏洞)
14对数组索 引验证不当
15对非正常 或异常的条件检查不当
16通过错误 消息透漏信息
17整型溢出 和环绕
18对缓冲区 大小计算错误
19缺少对重 要功能的授权
20下载代码 却不做完整性检查
21对重要的资源赋权不当
22分配资 源,却不做限制和调节
23重定向到 不受信任站点的URL(开放重定向)
24使用被破 解或者有风险的加密算法
25竞争条件

作者并不认为这个列表是放之四海而皆准的,他建议每个组织都应该基于自身的标准来创建自己的列表。文档提出了大量“关注热点 ”,其中之一是 “语言的弱点 ”:

C/C++JavaPHPPerlCWE 条目
一般CWE-22 : 不当地将路径名限制为受限的目录(路径穿透)
 与语言无关,但是一般是在模拟环境中存在
一般CWE-78 : 对OS命令中使用的特定元素处理不当(操作系统命令注入)
一般CWE-79 : 网页架构保持失败 (跨平台脚本攻击)
CWE-89 : 对SQL命令中使用的特定元素处理不当(SQL注入)
   CWE-98 : 在PHP程序中,对Include/Require声明的文件名控制不当(PHP文件包含漏洞)
 从技术上来说这种问题会在大多数解释型语言中发生,但似乎在PHP中最为流行
有限有限有限CWE-120 : 在没有检测输入大小的情况下就对缓冲区进行复制(经典的缓冲区溢出)
 解释器和本地代码通常是使用C/C++创建的,当我们可以使用更高级别的语言对其进行操作时,就很容易受到缓冲区 溢出的影响,否则就显得比较“安全”。
有限有限有限CWE-129 : 对数组索引验证不当
 从技术上来说,这在很多不同的语言中都会发生,但是在C/C++程序中最容易导致安全问题。
有限有限有限CWE-131 : 对缓冲区大小计算错误
 当更简单的缓冲区溢出情况被排除的时候,这个问题就会出现。解释器和本地代码通常是使用C/C++创建的,当我们 可以使用更高级别的语言对其进行操作时,就很容易受到缓冲区溢出的影响,否则就显得比较“安全”。
有限有限有限CWE-190 : 整型溢出和环绕
 从技术上来说这可能会在多种不同语言中出现,但是在C/C++程序中最容易导致安全问题。
一般CWE-209 : 通过错误消息透漏信息
 这与语言无关,但经常会出现在基于Web的环境,或是出现在在外部自动执行错误报告的语言中。
CWE-285 : 不当的访问控制(授权)
一般一般一般一般CWE-306 : 对重要的资源赋权不当
 在基于Web的环境中比较流行。
CWE-311 : 缺少对敏感数据的加密
一般CWE-327 : 使用被破解或者有风险的加密算法
 某些语言中没有内建的加密机制或者已经良好地确立了的库,开发者不得不创建或者集成他们自己的加密算法。
CWE-352 : 跨站点伪造请求(CSRF)
 这是基于Web的问题,与语言无关。
一般有限CWE-362 : 竞争条件
 这在所有语言中都是潜在的问题,它支持线程处理或者与操作系统资源交互。
有限一般有限CWE-434 : 对危险类型文件的上载不加限制
有限一般一般有限CWE-494 : 下载代码却不做完整性检查
 对于手机应用的代码最为普遍,尽管在任何管理自己的更新的软件中都可能存在。
一般一般一般一般CWE-601 : 重定向到不受信任站点的URL(开放重定向)
 这是基于Web的问题,与语言无关。很多web应用程序都不会使用重定向功能。
CWE-732 : 对重要的资源赋权不当
有限CWE-754 : 对非正常或异常的条件检查不当
 对于异常处理会强迫检查的语言,不容易出现此类问题。
一般一般CWE-770 : 分配资源,却不做限制和调节
 对于内建资源管理的环境,不同意出现此类问题。
一般一般一般一般CWE-798 : 使用硬编码的证书
   CWE-805 : 使用错误的长度值访问缓冲区
 解释器和本地代码通常是使用C/C++创建的,当我们可以使用更高级别的语言对其进行操作时,就很容易受到缓冲区 溢出的影响,否则就是“安全的”代码。
CWE-807 : 在安全决策中信赖不被信任的输入
 与语言无关,但在web应用中非常普遍。

对于每个弱点,作者都提供了大量信息,包括:排名,得分摘要,防止和缓解措施、相关的攻击模式、攻击频率、是否易于检测、修正成本等等。文档很大的 一部分集中于对每个弱点细节的描述,包括技术细节、代码示例以及在架构、设计、实现或者操作级别上可以采取的预防措施。例如,对于列表中第一位的弱点,作 者提供的信息摘录如下:

网页架构保持失败(跨站点脚本攻击) ——在用户可控的输入被 放在输出(这些输出会被用作为其他用户服务的网页)中之前,软件没有对其进行充分地验证、过滤、替换和编码。

弱点流行程度 结果 绕过安全措施执行代码
矫正成本 检测难易度
攻击频率 经常攻击者了解程度

详细的技术细节 包括三种主要的跨 站点脚本攻击(XSS):反射XSS(或被称为非持续的)、存储XSS(或被称为持续的)以及基于DOM的XSS。

下面是JSP的代 码样例

<% String eid = request.getParameter("eid"); %>

...

Employee ID: <%= eid %>

检 测方法 ,类似于自动静态分析和黑盒检测。

针对每个弱点,作者都列举了多种防止措施,如下所示:

你要了解你的数据会被用于何种环境,以及应该以何种方式对其进行编码。当在不同的组件之间传送数据的时候,或者生成可以同时包含多种编码的输出时尤为重 要,比方说,web页面或者由多个部分组成的邮件信息。你需要研究所有预期的通信协议以及数据表现方式来决定所需要的编码策略。

对于所有将被输出到另一web页面的数据,特别是所有从外部输入接收的数据来说,要在所有非字母数字的字符上使用编码。

相同输出文档的部分可能需要不同的编码格式,那会根据输出是否位于下列位置而不同:

HTML体

元素属性(像src="XYZ")

网址

JavaScript脚本部分

层叠样式表(CSS)和样式属性

等等。注意HTML实体编码仅适用于HTML体。

你可以查阅XSS防骗部分(REF-16)来获取更多关于编码类型以及所需要的换码的细节。

2010 CWE/SANS 最危险的编程错误文档还描述了选择最危险的25项弱点所使用的标准,与2009年生成的相同列表的比较,与OWASP 最危险的十项错误2010 RC1 的比较,此外还有十项web应用中最危险的安全弱点。

 

 

查看英文原文: CWE/SANS Top 25 Programming Errors

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值