2009年初,CWE/SANS联合发布了25个最危险的编程错误(以下简称top25)。SANS (SysAdmin, Audit, Network, Security) 研究所是美国一个比较权威的信息安全培训与认证机构,CWE常见缺陷列表(Common Weakness Enumeration)是MITRE公司(一个非盈利机构)继CVE(Common Vulnerabilities and Exposures)之后的又一个安全漏洞词典。
本文给出Top25的概要介绍,在以后的内容中将陆续介绍每个错误的细节和防范方法。原文可以从CWE(http://cwe.mitre.org)网站上访问,提供PDF下载。
这份清单是SANS研究院、MITRE和许多在美国和欧洲的顶级软件安全专家的合作成果。它总结了在SANS的20大攻击向量(http://www.sans.org/ top20 /)和MITRE的常见缺陷列表(CWE)(http://cwe.mitre.org/)的开发中的经验。MITRE在美国国土安全部、国家网络安全局的支持下维护CWE网站,对这些编程错误给出了详细描述,并给出了权威性的指导以减少和避免这些错误。CWE网站还包含了700多个额外的编程错误、设计错误,以及可导致开发漏洞的结构错误的数据。
这25个最危险的编程错误,它们可能导致严重的软件漏洞。这些错误频繁发生,往往容易被攻击者发现,且易于利用。这些错误之所以是危险的,是因为他们会经常让攻击者完全接管软件、窃取数据,或让软件系统停止工作。
Top25清单的主要目标是在软件发布之前,通过教育程序员如何消除十分常见的错误,从源头上阻止漏洞。该清单将成为教育和宣传的一种工具,将有助于程序员防止各种困扰软件产业的漏洞出现。软件的消费者可以用同样的清单,来帮助他们获取更安全的软件。最后,软件管理人员和CIO们可以使用Top 25清单作为衡量在软件安全工作上进展的标尺。
TOP25的分类
1、组件间不安全的交互
这些缺陷与数据在单独的组件、模块、程序、进程、线程或系统之间不安全发送和接受方法有关。
CWE-20:不适当的输入验证 ;
CWE-116:不正确的编码或输出转义;
CWE-89:SQL查询结构保护失败(又名“ SQL注入”) ;
CWE-79:网页结构保护失败(又名“跨站脚本攻击”) ;
CWE-78:操作系统命令结构保护失败(又名“操作系统命令注入”) ;
CWE-319:明文传输的敏感信息;
CWE-352:伪造跨站请求(CSRF);
CWE-362:竞争条件 ;
CWE-209:错误消息的信息泄漏;
2、危险的资源管理
此类缺陷与软件没有妥善管理创造、使用、转让或取消重要的系统资源有关。
CWE-119:对内存缓冲区边界操作限制失败 ;
CWE-642:外部控制的临界状态数据;
CWE-73:外部控制的文件名或路径 ;
CWE-426:不可信的搜索路径;
CWE-94:代码生成控制失败(又名“代码注入” ) ;
CWE-494:下载的代码未进行完整性检查 ;
CWE-404:资源关闭或释放不正确;
CWE-665:不正确的初始化;
CWE-682:不正确的运算(译者:如出现整数溢出等错误)。
3、可穿透的防范措施
这一类缺点与防御技术的经常误用、滥用,或彻底忽略有关。
CWE-285:不正确的访问控制(授权) ;
CWE-327:使用一个被攻破的或危险的加密算法 ;
CWE-259:硬编码的密码 ;
CWE-732:对关键资源的使用权限不安全的分配 ;
CWE-330:使用不够有效的随机值 ;
CWE-250:给予没有必要的权限;
CWE-602:服务器端的安全由客户端实施。
对Top25的开发和选择
Top 25清单是在2008年底产生的。大约40个软件安全专家提供了反馈,包括软件开发人员、扫描工具开发商、安全顾问、政府代表和大学教授,代表性是国际的。在最终定稿前经过了几个中间版本,重新提交给了审阅人员。更多的详细情况参照Top 25产生进程:http://cwe.mitre.org/top25/process.html。
为了描述Top 25并确定优先次序,研究者开发了一个针对熟练、有目的的黑客的威胁模型。
在选择Top 25中的缺陷,主要考虑以下两个原则:
第一,缺陷的流行程度:对于那些软件开发周期中没有集成安全的软件,这些缺陷的频繁程度。
第一,后果:成功利用缺陷以后可能造成的后果,如意想不到的执行代码,数据丢失,或拒绝服务。
流行与否是多位Top 25开发者评估的结果,因为没有可用的统计数据和统计方法。
根据上述标准,未来版本的Top 25将不断改进,以涵盖不同的弱点。
Top25的组织
CWE对Top 25中每个的条目提供额外的资料,它的主要读者对象是软件编程人员和设计人员。
CWE编号和名称;
支持数据字段:缺陷的补充资料,可能对决策者进一步考虑缺陷的优先级是有帮助的;
讨论:关于缺陷性质和后果的一个简短的、非正式的讨论;
预防和缓解措施:开发人员可以采取减轻或消除弱点的步骤。软件厂商可以选择一个或多个这样的缓解措施,以适应自己的需要。请注意,这些技术的有效性有所不同,可以组合多种技术实现纵深防御方案;
相关CWE:与Top25中相关的其他CWE条目。注:这个列表只是说明性的,并不全面;
有关的攻击模式:可能会成功利用这些缺陷进行攻击的CAPEC条目。注:不一定是完整的。(译者注:CAPEC是MITRE的一个常见攻击列表和分类的字典,参见http://capec.mitre.org/)
其他支持的数据域
每一个Top 25条目包括缺陷广泛性和后果的支持数据域。每个条目还包括下列域:
攻击频率:缺陷被攻击者所利用的频繁程度。
检测的难易程度:一个攻击者发现这个缺陷的容易程度。
修复代价:修补这些缺陷所需的努力。
攻击者的意识:攻击者意识到这一缺陷的可能性、检测的方法和利用的方法。
(作者单位为清华大学信息网络工程研究中心)
来源:《中国教育网络》2009年4月刊
特别声明:本站注明稿件来源为其他媒体的文/图等稿件均为转载稿,本站转载出于非商业性的教育和科研之目的,并不意味着赞同其观点或证实其内容的真实性。如转载稿涉及版权等问题,请作者在两周内速来电或来函联系。