1 概述
1.1 安全评估目的
随着信息化的发展,政府部门、金融机构、企事业单位等对信息系统依赖程度的日益增强,信息安全问题受到普遍关注。对信息系统软件进行安全测评,综合分析系统测试过程中有关现场核查、技术测试以及安全管理体系评估的结果,对其软件系统安全要求符合性和安全保障能力作出综合评价,提出相关改进建议,并在系统整改后进行复测确认。以确保信息系统的安全保护措施符合相应安全等级的基本安全要求.
根据最新的统计结果,超过70%的安全漏洞出现在应用层而不是网络层.而且不只发生在操作系统或者web浏览器,而发生在各种应用程序中-特别是关键的业务系统中。因此,有必要针对xxx系统应用软件进行安全风险评估,根据评估结果,预先采取防范措施,预防或缓解各种可能出现的信息数据安全风险。
1.2 安全评估要求
XXXXXXXX
2 软件安全评估具体需求
2.1 安全评估指导原则
软件安全风险评估作为一项目标明确的项目,应分为以下五个阶段,每个阶段有不同的任务需要完成。
1、启动和范围确定:在安全相关软件的合同或任务书中应提出软件安全性分析的范围和要求.实施方明确责任,管理者检查必备的资源(包括人员、技术、基础设施和时间安排),确保软件安全性分析的开展;
2、策划:软件安全性分析管理者应制定安全性分析计划,该计划可作为所属软件过程或活动的计划的一部分.
3、执行和控制:管理者应监控由软件安全性分析计划规定的任务的执行。管理者应控制安全性分析进展并对发现的问题进行调查、分析和解决(解决方案有可能导致计划变更)。
4、评审和评价:管理者应对安全性分析及其输出的软件产品进行评价,以便使软件安全性分析达到目标,完成计划.
5、结束:管理者应根据合同或任务书中的准则,确定各项软件安全性分析任务是否完成,并核查软件安全性分析中产生的产品和记录是否完整。
2.2 安全评估主要任务
根据安全评估指导原则,为尽量发现系统的安全漏洞,提高系统的安全标准,在具体的软件安全评估过程中,应该包含但不限于以下七项任务:
2.2.1 软件需求安全性分析
需要对分配给软件的系统级安全性需求进行分析,规定软件的安全性需求,保证规定必要的软件安全功能和软件安全完整性。
评测人员需要根据软件安全性分析准备的结果和系统的初步结构设计文档,包括系统分配的软件需求、接口需求,完成对系统安全性需求的映射,以安全相关性分析和对软件需求的安全性评价。通过需求安全性分析,才能够对软件在系统中的安全性需求作出一个综合性的评价,更好地提交对后续的软件设计和测试的建议.
2.2.2 软件结构设计安全性分析
需要评价软件结构设计的安全性,以保证软件安全功能的完整性。从安全角度讲,软件结构设计是制定软件基本安全性策略的阶段,因为这一阶段负责定义主要软件部件,以及它们如何交互,如何获得所要求的属性,特别是安全完整性,是软件安全性需求在结构定义中实现的阶段。
对结构设计进行安全性分析需要将全部软件安全性需求综合到软件的体系结构设计中,确定结构中与安全性相关的部分,并评价结构设计的安全性.
结构设计是开发人员对系统期望功能和功能实现方式的表示方法,但是沟通的一致性,和设计的合理性,通常会影响到安全完整。所以有必要对软件设计进行安全性评估,一方面确认软件安全需求是否在设计中得到体现,另一方面确认设计是否合理、是否存在漏洞。
2.2.3 软件编程安全性分析
选择合适的编程语言.所有编程语言无论在其定义还是在其实现中都有其不安全性.这通常会造成编码人员对语言的误用,而对这些误解,一些相对开放的语言又缺乏相应的解释.例如:
1、未初始化的变量.除非进行特别的检查,否则单元测试不会发现他们.而这将导致,一个程序在不同的环境下虽然运行成功,但运行结果却不是期望值。
2、当要求重新分配存储器的调用时应予以检查,以确保不仅释放指针而且释放该结构所用的存储器。
3、运算符优先级的规则,一些语言的要求并不是那么严格,容易是程序员发生误解。
如果某种语言有精确的定义(也有完备的功能性),从逻辑上说是清晰的,有易管理的规模和复杂度,那么就认为这个语言适用于安全相关性软件。使用编程语言时,也应该针对该语言的特点,努力满足安全性要求.如果一种编程经验或编程风格因为能够提高软件安全性而被公认为专用性编码标准,可以选择这样一种编码标准来约束对不安全语言的使用。
因此进行软件安全评估过程中,需要根据编程语言的特性,对相应易产生漏洞的不安全因素进行重点分析,可以在提高工作效率的基础上,有针对性的增强软件的安全性。同时,根据不同编程语言的特性,对编码标准进行分析,也会一定程度上减少对不安全语法的使用,从而减少漏洞的产生。
2.2.4 软件详细设计安全性分析
对软件详细设计的安全性分析,主要是评估设计实现是否符合安全性的要求. 软件详细设计进一步细化高层的体系结构设计,将软件结构中的主要部件划分为能独立编码、编译和测试的软件单元,并进行软件单元的设计。
在安全性分析的这一阶段中,需要依据软件需求、结构设计描述、软件集成测试计划
和之前所获得的软件安全性分析的结果,对软件的设计和实现阶段是否符合软件安全性需求进行验证。
软件详细设计的目的是进一步对设计实现进行细化,便于编码。所以针对详细设计的安全分析工作需要包含以下主要内容:
1、软件详细设计是否能追溯到软件需求;
2、软件详细设计是否已覆盖了软件安全性需求;
3、软件详细设计是否与软件结构设计保持了外部一致性;
4、软件详细设计是否满足模块化、可验性、易安全修改的要求.
2.2.5 软件编码安全性分析
软件编码完成软件详细设计的实现。所以,代码应该体现软件详细设计所提出的设计要求,实现设计过程中开发的安全性设计特征和方法,遵循设计过程中提出的各种约束以及编码标准。
对软件代码的安全性分析,可以从两个方面进行:人工分析以及静态代码分析工具来检查源代码.
人工分析主要从以下几个方面入手:
1、分析软件代码是否能追溯到需求;
2、分析软件代码是否符合支持工具和编程语言分析;
3、分析软件代码是否满足模块化、可验证、易安全修改的要求;
4、分析软件编码中所使用技术的安全性和方法的合理性。
通过静态代码分析工具检查源代码的安全性,需要根据编码语言的特性、采用的软件框架的特性等,有针对性的对代码进行分析、检查漏洞、并提出相应的改进建议。
2.2.6 软件测试安全性分析
软件测试作为验证软件功能性和安全性的重要手段,其采用的测试方法和测试技术也完全关系着测试结果的准确性,关系着后续软件的变更和测试的有效性。
软件测试安全性分析首先须进行测试前分析,还需要对测试结果进行评价,需要从不同角度进行按步骤的测试:
1、分析所有测试用例,测试是否通过测试准则。
2、测试代码是否按照要求分析,并达到相应的测试覆盖率.
3、对测试结果进行分析,以验证所有的安全性需求是否得到了满足。
2.2.7 软件安全性测试
通过软件安全性的测试,可以验证或发现系统安全方面的问题。对于软件需求说明书
上既定的有关安全的功能需求,需要在安全性测试过程中一一进行验证测试.对于没有在软件需求书上标明的可能影响系统运行安全的隐性需求需要通过安全性测试尽力发现。软件安全性测试需要采取静态分析技术和功能测试两种方式发现系统开发时存在的安全漏洞。
静态分析技术:需通过对需求分析说明书、软件设计说明书、源程序作结构检查、流图分析等找出软件的缺陷及安全漏洞.可以通过合适的自动化检查工具进行静态分析以提高测试的效率和准确度。
功能测试:功能测试属动态测试,验证的是软件的功能实现。通过功能验证来检查我们是否达到了没有安全漏洞的要求.
3 相关注意事项
1、安全测试的执行,对于被测系统,或多或少都会存在一些影响(比如性能、垃圾数据),建议只在测试环境中进行;如果一定要在现网运行环境中执行,那么务必配置专门的测试数据,测试执行是应该非常慎重,只能修改或删除这些测试数据,禁止修改、删除现网其他数据.
2、如果是内部试验环境进行测试,可以考虑去除一些防护措施或设备(如防火墙),这样能保证发现问题的全面性。
因篇幅问题不能全部显示,请点此查看更多更全内容