安全编码规则包用户手册版本4.52007年4月SecureCodingRulepacksUser’sGuideCopyright©2003-2007Fortify®Software,Inc.7/24/07AllRightsReserved.PrintedintheUnitedStatesofAmerica.FortifySoftware,Inc.2300GengRoad,Suite102PaloAlto,California94303FortifySoftware,Inc.(以下简称“Fortify”)和许可证颁布者保留对此文档(以下简称“文档”)的一切所有权。对文档的使用受适当的版权法支配。Fortify可以在没有预先通知的情况下随时修改该文档。此文档在没有任何类型保证的情况下按原样被提供。对于从此文档中发现的任何错误所引起直接的、故意的、巧合的或导致严重后果的损害,Fortify决不会对此负责,包括在限制范围之外的任何损失或者对商业\利益、使用或数据造成的麻烦。Fortify可以在没有预先通知的情况下保留对从最终产品得出的此文档中的任何细节和元素进行修改和删除的权利Fortify是FortifySoftware,Inc.的注册商标。在此文档中商标和产品名称是是他们的各自所有者的商标。.SecureCodingRulepacksUser’sGuideiii目录Preface............................................................................1Chapter1:安全编码规则包.............................................................3介绍........................................................................3安全编码规则包...............................................................3漏洞分类.....................................................................4C/C++相关漏洞分类.....................................................4.NET相关漏洞分类......................................................9ColdFusion相关漏洞分类................................................13Java相关漏洞分类.....................................................15SQL相关漏洞分类.....................................................23Fortify分类方法.............................................................25InputValidationandRepresentation........................................25APIAbuse............................................................26SecurityFeatures......................................................27TimeandState........................................................27Errors................................................................28CodeQuality.........................................................29Encapsulation.........................................................30Environment.........................................................31Example.............................................................31ivSecureCodingRulepacksUser’sGuideSecureCodingRulepacksUser’sGuide1Preface本文档描述了安全代码规则包如果您对本文档的任何内容有疑问或者建议,请联系FortifySoftware:客户支持t650.213.5679techsupport@fortify.com公司所在地2300GengRoadSuite102PaloAlto,CA94303650.213.5600contact@fortify.com网址’sGuideSecureCodingRulepacksUser’sGuide3Chapter1:SecureCodingRulepacks这份文档包含以下主题:•Introduction•SecureCodingRulepacks•VulnerabilityCategories•TheFortifyTaxonomy介绍TheFortifySourceCodeAnalyzer(FortifySCA)使用安全编码规则包作为分析依据。规则包封装了经过数年积累的关于不规则架构和易受攻击方法的编码知识。预先封装好的安全编码规则包•覆盖了数以千计的“易受攻击的编码习惯”和“不安全的数据使用”方面的规则。•开发小组将会被通知可以通过更新来获取新的安全信息。各种漏洞根据不同编程语言进行了分类,在“VulnerabilityCategories”onpage4中有详细描述。这份文档同时提供了Fortify的关于软件安全错误的分类方法,我们提供了一个编码过失的分类,这将帮助开发人员和软件安全审查人员理解通常的那些会影响安全的编码过失。想获得关于Fortify的分类方法的信息,请查看第22页的“Fortify分类方法”。想获得关于规则包更新的信息,请查看“TheFortifyTaxonomy”onpage25.想获得关于规则包更新的信息,请查看FortifySourceCodeAnalysisSuiteDeploymentGuide.如果您有RulesBuilder,那么您就可以通过创建新的基于特殊应用、第三方库函数或者企业标准的自定义规则来扩展FortifySCA的目标格式。想获得关于通过RulesBuilder创建自定义规则的信息,请查看RulesBuilderUser'Guide。SecureCodingRulepacks安全编码规则包是数年软件安全的经验体现并且会在研究者的努力下不断改进。它们是通过对于编码理论和普遍应用编码实践的研究,而取得的软件安全知识的巨大积累,并且会在FortifySoftware专家的努力下不断的扩展和改进。每一个规则包包含了数量巨大的规则,每一个规则定义了一个将会在被分析代码中发现的不合格编码行为。一旦漏洞被检查出来,规则包可以提供漏洞的目标信息,这样开发人员就可以把更多时间投入到漏洞的修复而不是去研究漏洞本身的详细信息。这些信息可以提供漏洞所属分类的特性、攻击者可以如何利用漏洞进行攻击以及开发人可以如何来修复这些漏洞,提高系统的安全性。安全编码规则包不但支持数种编程语言,而且还支持对这些语言的扩展、第三方的库函数以及配置文件。下面的表格描述了FortifySoftware目前支持的安全编码规则包。Table1:SecureCodingRulepacks规则包描述Core,.NET覆盖了.NET语言中与安全相关的核心API4SecureCodingRulepacksUser’sGuide漏洞分类下列表格根据所支持的编程语言进行分类,提供了以下由FortifySCA和安全代码规则包定义的漏洞信息:•分类•描述•领域注意:上面提到的“领域”在Fortify分类方法中有描述。在AuditWorkbench中可以得到包括详细解释、提示以及相关信息等在内的漏洞详细信息。想获得更多信息,请查看AuditWorkbench用户手册第四页的“AuditWorkbench接口探究”。C/C++相关漏洞分类下面的表格描述了与C/C++相关的漏洞类别。Core,C/C++覆盖了C/C++语言中与安全相关的核心APICore,ColdFusion5.0覆盖了ColdFusion5.0语言中与安全相关的核心APICore,Java覆盖了Java语言中与安全相关的核心APICore,SQL覆盖了SQL语言中与安全相关的核心APIExtended,.NET覆盖了.NET语言中对于核心API的扩展、第三方.NET库函数以及NLOG和Log4Net部分与安全相关的内容Extended,C/C++覆盖了C/C++语言中对于核心API的扩展、第三方库函数以及MFC和ATL部分与安全相关的内容ٛExtended,ConfigurationJ2EE和EJB的配置文件,ASP.NET,和BEAWebLogic的配置文件Extended,Java覆盖了Java语言中对于核心API的扩展、第三方库函数以及JMS、JNDI、J2EE、ApacheCommons、Log4J、ORO、Struts、ATGDynamo、Hibernate、Spring和iBatis部分与安全相关的内容Extended,JSP覆盖了JSP技术中对于API的扩展、第三方库函数以及JSTLCore、JSTLSQL和ApacheStrutsHTMLEL部分与安全相关的内容Extended,SQL覆盖了对于API的扩展、第三方库函数以及MODPLSQL部分与安全相关的内容Table2:C/C++相关漏洞分类漏洞分类描述领域AccessControl:Database没有适当的accesscontrol,执行包含有用户控制的主键的SQL语句,将会允许攻击者访问没有授权的记录。SecurityFeaturesTable1:SecureCodingRulepacks规则包描述SecureCodingRulepacksUser’sGuide5BufferOverflow写入数据超过分配的内存块的范围,可能污染数据,破坏程序,或者导致执行恶意代码。InputValidationandRepresentationCodeCorrectness:ArithmeticOperationonBoolean程序对布尔值使用了一个运算,这有可能不会实现程序员起初想要达到的效果。CodeQualityCodeCorrectness:ErroneousSynchronization如果一个线程没能解开一个互斥,另外的线程会始终锁住互斥。TimeandStateCodeCorrectness:FunctionNotInvoked由于漏写圆括号,表达式的含义变成了函数指针的值,而不是函数的返回值。CodeQualityCodeCorrectness:FunctionReturnsStackAddress返回堆栈的地址将会导致异常的程序行为,典型的就是程序崩溃。CodeQualityCodeCorrectness:MacroMisuse对公共资源进行操作的,并以宏的形式在一些平台上运行的函数,必须