还剩10页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
文件编号XX-XX-013-V
2.0版本
1.0文件名称软件开发管理规范制/修订时间
2016.06制/修订人审核人医院软件开发管理规范
1.总则医院医院目前的应用系统多数为外包开发,但对于外包系统的开发,外包系统商必须按照医院的开发安全规范进行开发,以保证开发系统符合医院信息安全规范需求和信息安全等级保护需求在应用外包开发商与医院签订应用外包开发合同时,此协议必须作为外包开发合同的附件对外包开发商的外包开发行为的开发过程进行规范和约束如外包开发商的开发过程未按照该规范进行,医院有权拒绝为该开发交付物付款,且保留进一步追究外包开发商违约的权力
2.应用安全要素应用软件(或系统,下同)的开发阶段是其生命周期内的一个重要阶段,在此阶段,将主要完成应用软件的需求分析、设计实现及测试等工作,此阶段的工作将极大程度地决定了应用软件本身的安全性,因此,要确保信息安全在此阶段的各个具体工作过程中的贯彻和实施,以便交付具有高安全特性的应用软件,为将来应用软件的安全投产运行奠定坚实的基础与信息安全的基本要素一样,应用软件开发过程中要关注的安全要素主要包括机密性、完整性、可用性
2.
1.机密性机密性是指保证只有被授权访问的人才可以获取信息,具体包括身份鉴别、授权、安全通讯等措施
2.
2.完整性完整性是指保证信息和处理方法是正确和完全的,免受非授权、意料之外或无意的更改,具体包括数据校验、审计、安全通讯等措施如果数据量较大,要求效率较高,同时也要求具有很高的安全性,则可以使用非对称加密算法来完成密钥交换,然后再使用交换密钥和对称加密算法来加解密数据如果要对数据进行完整性校验,则一般可采用简单的循环冗余校验(CRC)要注意Web应用系统中所包含的URL资源进行严格权限设置,这是一个最易受攻击的区域;要利用数据库服务器集成的权限控制措施来控制用户的操作权限,要限制一些危险操作的进行,如删除数据表、更改数据库结构、执行危险的存储过程等
523.安全通讯目前在操作系统和网络层次,已经提供了较为成熟的安全通讯技术,如果是利用已有的应用传输协议(如HTTPFTP等),完全可以利用对应用安全套接字(SSL)的协议(如HTTP、SFTP等)目前操作系统及相应的应用基础平台对这些安全协议支持十分完备,配置使用也十分简单如果不是利用已有应用传输协议,而是基于自定义的TCP/IP Socket通讯应用,基于操作系统、网络环境及系统效率的考虑,一般可以使用网络层的透明安全机制,即IPSec来保证数据传输的安全,IPSec作为业界标准协议,在各主流算法或一些散列(哈希)算法,如MD
5、SHA1等算法
6.安全测试安全测试工作是同应用软件的整体功能测试工作同时进行的,安全测试工作一般包括两部分安全功能测试和穿透测试在测试过程中,安全功能测试的工作是必须要完成的安全功能测试是一种白盒测试方法,其目的是验证安全控制机制是否存在,是否满足要求而穿透测试则是从攻击者角度进行的一种黑盒测试方法,其目的是检验安全控制措施是否完备和有效一般情况下,穿透测试在安全功能测试之后进行,且应由不同的团队来分别完成安全功能测试的目标是基于安全需求分析和安全设计来进行的,确认安全需求分析中用户所要求的安全功能(如身份鉴别、授权、数据机密性保护、日志与审核等)都已满足,确认安全设计中定义的功能和使用的技术是正确的、完整的对于穿透测试,没有指定的模式,任何能够突破系统安全控制的方法和技术都可以使用,其目标也包含应用软件的方方面面
7.其他安全问题
7.
1.配置安全要加强软件开发环境的安全性,即加强配置管理的安全性,防止与应用软件开发相关的核心技术、设计文档、源代码等内容的泄露,这不但可能造成知识产权的损害,而且可能会给攻击者分析应用软件的处理逻辑和漏洞从而发起攻击的可能性
7.
2.部署安全虽然应用软件的开发过程并不包含部署过程,但要为下一阶段具体的安全部署做好准备工作,这主要是通过提供完备安全部署文档来完成,即在系统安装/部署的文档中,提供专门的增强安全性的说明,如系统中提供的与安全相关的参数设置等,这里着重强调软件本身中所涉及的内容,操作系统、应用基础软件平台及数据库管理系统的安全性,参照通用其他通用规范或厂商提供文档在构建(Build)应用软件的最终可执行版本(即执行码)时,要采用一些必要的安全手段对其进行保护,以防止被篡改,且有助于安全部署具体措施主要是对与应用程序相关安装程序、可执行程序、控件(如ActiveX或Java Applet)进行数字签名,以便让用户能够确认其来源和完整性
2.
3.可用性可用性保证经过授权的用户在需要时可以访问/使用相关信息资产,具体实施手段有灾难备份/恢复、冗余、业务持续性计划等
3.安全开发过程应用软件的开发过程一般包括以下阶段1)需求分析阶段完成挖掘与分析最终用户需求的工作,总结出应用软件所要完成的功能定义及相关要求2)架构与设计阶段完成应用软件的架构设计及其他必要的详细设计工作3)编码实现阶段按照设计文档的要求,在具体的基础平台上实现应用软件4)测试阶段试应用软件中实现的功能是否满足用户的要求要在应用软件开发过程中实施安全性,其过程也是相同的,即将安全性所涉及的具体工作落实到以上过程中,即1)安全需求分析阶段对应用系统面临的各种风险、业务安全要求、需要保护的资源以及如何保护等进行分析,同时在一些主要的技术实现的环节提出明确定义的、可衡量的技术安全需求2)安全设计阶段按照安全需求的要求和通用的安全设计原则来设计合理的、安全的系统架构,并对一些具体环境所使用的安全技术进行定义3)安全编码阶段对安全设计过程中所确定的安全架构和安全技术为基础,参照通用的安全编码要求来编码实现应用软件4)安全测试阶段针对系统提供的安全功能进行测试,以确定其正确、恰当地完成了所有功能,同时要以攻击者的身份进行攻击测试,以测试应用软件中是否存在漏洞
4.安全需求分析在安全需求分析阶段,主要关注以下几个方面的内容
4.
1.风险分析对目标系统/软件中可能出现的安全风险进行全面分析,并尽量对这些风险进行概率及影响评估风险分析可以从业务和技术两个角度入手,下面列出(但不限于)了几种可能的要素误操作、人为破坏、非授权操作、软硬件平台质量及其安全漏洞、其它风险在进行目标系统/软件的风险分析时,要尽量准确地评估各种可能存在的风险点、发生的概率及造成的损失
4.
2.业务安全需求从业务管理、业务风险的角度具体提出系统需实现那些业务控制措施包含的要素有1)交易分类描述系统/软件中如何划分各类不同级别的交易,及每个级别交易操作所需要的权限2)帐务控制描述系统/软件中如何控制各类帐务信息的显示、操作等,如普通操作员不能查询总分类帐务及其报表等3)现金相关操作描述系统/软件中如何对与现金相关的操作进行控制,对于现金额度超限的操作如何控制等4)信息归属相关操作对于交易/操作中的重要业务信息,定义其查阅方式及其所需的操作权限、级别等5)特殊操作对诸如交易冲正、隔日冲帐、跨部门操作等特殊操作,如何进行控制6)管理制度对于系统/软件面向的业务领域的一些其他安全控制措施、行业规范、业务管理制度以及规定等,如何体现在系统中如在建设网上银行系统时,就必须考虑人民银行关于网上银行的安全规范、国家有关商用密码、CA的管理制度
4.
3.技术安全需求以安全的三个通用要素(机密性、完整性、可用性)为基础,从技术角度入手,描述系统应满足或实现的安全需求,如果系统中子系统或模块较多,则在每小节中按照子系统或模块分别提出安全需求
4.
3.
1.机密性机密性指保证只有被授权访问的人才可以获取信息机密性要求信息免受非授权的披露它涉及到对计算机数据和程序文件读取的控制,即谁能够访问那些数据它和隐私、敏感性和秘密有关机密性的要素包括
(一)用户鉴别方式用户鉴别是指如何验证用户的合法身份,有时也称身份验证或身份认证,用户鉴别的方式较多,可以根据系统的安全级别、成本投入等因素来确定验证方式常见的鉴别方式有固定密码、动态密码、数字证书、基于生物特征(如指纹识别)或它们的任意组合等
(二)授权方式授权方式是指如何进行具体操作的授权,也称为访问控制方式要在此说明系统/软件是集中进行授权控制,还是分散地、逐级的方式进行授权控制对于操作员可以对进行那些操作的权限控制,目前使用较为普遍的方式是基于角色的访问控制(Role BasedAccess Control),即先将各种操作权限授予预定义的角色,然后再指定用户属于那些角色(一个用户可以扮演多个角色),通过对用户所属角色的检查,就可以获得用户可以进行那些操作如果选用基于角色的授权方式,要根据系统/软件的实际情况划分角色,并定义角色所能完成的操作
(三)抗抵赖性指出哪些重要的业务操作需要防止抵赖,如可能,指定抗抵赖的方式,如记录操作日志(有据可查)、具有电子签名和时间戳(法律依据)
(四)加密级别的选择按照数据的重要程度可以选择加密级别,加密级别有秘密(普通加密/编码,可反向解密/解码)、机密(高级加密,需要大量计算资源及较长时间才能解密)、绝密(最高加密,使用非对称算法或128位密钥长度以上的对称算法,保证破解的可能性接近于零)
(五)数据存储安全对于系统/软件中要加工或处理的数据的物理存储,需要以何种方式保护,主要指数据库安全保护,尤其是对绕过系统/软件本身,直接对数据库的存取行为的控制要求
(六)数据传输安全指定哪些数据,在通过哪些传输通道的时候,应进行安全保护数据传输安全可以分为应用程序间的传输安全(SSL等)和网络间的传输安全(IPSec),前者适用外部或公用网络,后者适用于内部或专用网络
(七)隐私保护遵照有关国家法律、行业规范及业务管理规定,定义哪些客户信息、资料等为隐私信息,并要实行哪些保护或隐藏措施,以免这些信息泄露给外部其他人或内部操作人员
(八)日志指定系统中记录日志的范围、详细程度等
4.
3.
2.完整性完整性的目标是保证信息和处理方法的准确与完整完整性要求信息必须是正确和完全的,而且能够免受非授权、意料之外或无意的更改完整性还要求计算机程序的更改要在特定的和授权的状态下进行普遍认同的完整性目标有(-)数据检查对哪些数据要做何种检查(数据格式、数据内容等),以防止由于用户输入特殊数据使得系统安全受到威胁
(二)数据校验列举在系统/软件中那些数据需要额外的数据校验,以检验数据是否来自可信源,是否被篡改
(三)防止数据损坏防止数据在存储或传输的过程中,是否采取额外的手段验证数据,以确保数据的正确性
(四)数据容错机制对于稳定性要求比较高或数据非常重要的系统,有必要采用容错机制以防止由于硬盘损坏等事件导致数据丢失容错机制普遍采用磁盘冗余阵列(RAID)不间断电源(UPS)等
(五)数据备份机制及周期
(六)数据存取日志等
4.
3.
3.可用性可用性是保证经过授权的用户在需要时可以访问信息并使用相关信息资产可用性要求信息在需要时能够及时获得以满足业务需求它确保系统用户不受干扰地获得诸如数据、程序和设备之类的系统信息和资源不同的应用有不同的可用性要求(-)可用性指标(平均无故障时间)平均无故障时间通常以可用时间百分比来表示,无故障时间计算公式为无故障时间=可用时间百分比X运行总时间
(二)业务持续性要求如何防止单点失效后造成的业务中断,如采用双机热备措施等
(三)灾难恢复要求为了在系统遭受攻击或意外灾难后能够快速恢复,应考虑的备份措施、工具等
4.
3.
4.其他安全相关因素除以上内容外,还要对应用软件的其他与安全相关的要素进行分析说明,由于这些要素和安全要求相关,要根据系统的实际情况进行选择
5.安全设计在安全设计阶段,主要完成安全需求、安全技术在架构及设计中具体体现,此阶段非常关键,它从很大程度了将确定最终的应用软件的安全性
5.
1.通用设计原则在进行应用软件的安全设计中,要遵守和贯彻以下一些通用原则
5.
1.
1.整体安全系统的整体安全程度受最薄弱环节的制约,因此考虑安全性时,应该将应用程序所有层的安全性都考虑在内,尤其是加强整个安全链条中较弱环节的保护
5.
1.
2.纵深防御在应用系统之间或应用软件的每一层或每个子系统中都要设置检查点,进行身份鉴别,授权检查,数据检查及校验等安全检查工作,确保只有经过身份鉴别和授权的用户能够访问下一层,而且确保数据的合法性
5.
1.
3.职责分离职责分离通常是应用在职能与责任方面的一条安全原则职责分离包含两个方面的内容一是限制单个用户的能力,以免其做出欺诈行为或滥用其权限;二是在划分应用程序的组件时,设计人员应该尝试根据功能和权限来划分它们,不同功能应由不同的组件来处理,如订单处理与检查账户状态的组件应该区分开对于用户的职责分离来说,如果在一个安全模型中确定了用户或用户角色,而且他们各自具有不同级别或类型的信息资产访问权限,那么应进行用户职责分离虽然由角色和权限构成的矩阵是由客户来定义的,但是设计人员必须确保应用软件能够提供必要的支持功能来满足客户的这种需求对于组件的职责分离来说,可以按照各种不同的方式划分组件,如按照编程人员划分各个编程人员应该编写不同的组件,尤其对大多数安全敏感型的组件来说,更应该这样;按照管理员划分各个系统管理员应该负责管理不同的组件;按照网络层次划分各个组件应该被分布部署到网络的各个层次中,因为各层面临的攻击程度不同;按照功能划分每一个组件中只包含必要的功能;具有不同权限的组件大多是完全隔离的考虑将展现层和应用层的功能划分开的这种情况,一般来说,展现层所包含代码的权限要比应用层代码的权限低例如,展现层的代码通常不能直接访问数据库,而应用层的代码就可以
5.
1.
4.最小权限对于系统中用户,应该只授予其完成必要功能的最小权限,避免其提升权限对系统安全带来威胁对于执行代码的进程应当尽可能用权限最少的帐户运行,从而在危及进程安全时限制可能造成的破坏一般情况下禁止以系统管理员的身份来执行应用程序如果恶意用户设法将代码注入某个服务器进程,那么授予该进程的权限会在很大程度上决定该用户可执行的操作类型应当将需要更多信任(和更高权限)的代码分别隔离在不同的进程内
5.
1.
5.默认安全开发人员往往仅仅为了使应用程序不受限制地运行而经常使用较高的系统权限,而且在应用程序内部采用宽松的安全控制措施这可能会带来两方面的问题在系统权限(如操作系统的文件访问控制)较为严格的情况下,应用程序的功能可能失效;在应用程序内部,较低权限的用户可能会不受限制地提升权限而执行一些权限要求较高的功能以上两方面的影响都会对应用软件的正常运行带来较大的影响因此,应按普通用户(即非管理员)的身份来设计和测试应用程序,同时,在应用程序中,应采取严格的权限控制措施,对于未明确授予的权限,应予以拒绝
5.
1.
6.减小暴露界面尽量减少应用软件的暴露界面,因为任何暴露界面都可能成为攻击者的目标,减少暴露界面即有助于降低被黑客攻击的可能性,也有助于把有限的资源更好地投入到所必需保护的信息资产上52安全技术的使用针对所关注的安全主题,在安全技术使用上,要合理、恰当,推荐使用业界一些成熟的安全解决方案,如以公用密钥体系(PKI)为基础的各种应用具体在各个安全控制环境,要有针对性的采用应用的安全控制措施
5.
2.
1.身份鉴别对于用户的身份进行识别是每个系统进行安全保护的第一道关口,在各种基础平台中已经提供了相当多的、可靠的身份鉴别技术,例如Web服务器提供的明文验证、摘要式验证、集成验证、数字证书验证操作系统提供的集成验证数据库管理系统身份验证等如果由于某些限制而不能利用以上技术,可以使用一些类似的自定义的身份鉴别技术,如常见的用户名/密码的鉴别方式除了单要素身份鉴别方式外,可以使用多要素验证方式和一些安全性非常高的基于生物特征的身份鉴别技术,如指纹识别等,在成本可控的前提下,为应用软件提供最为安全的保护在提供身份鉴别机制的同时,也要注重提供相应的安全策略控制,在身份鉴别方面一般需要提供以下方面的策略控制密码复杂性要求如对密码长度、字母或数字的组成等进行限制,以防止出现弱密码•密码使用周期密码存留期(即多长时间后强制更改密码)、是否记录密码历史登录策略是否对用户的登录位置和时间进行限制,是否允许同一用户在多个位置同时登录等•帐户锁定经过指定阀值的失败登录尝试后,是否锁定登录的目标用户,锁定的时间、解锁的方式等,对于已登录用户,经过指定阀值的未操作时间后,是否锁定界面等•注销多长时间未操作将自动注销等
5.
2.
2.授权授权主要是指对于登录进入系统的用户的操作权限进行合理设置,以使其完成所需工作在各种基础平台中已经都内置较为完备的授权机制,可以充分利用,如下表所示操作系统的文件系统权限设置应用基础平台中的授权框架,如.NET中的角色与用户控制,Java中的鉴别与授权服务(JAAS)等数据库管理系统中的数据库角色、数据库对象权限设置除了利用基础环境的访问机制外,可以在应用软件中设计实现自定义的访问控制,这种访问控制一般是采用基于角色的授权机制(RBAC),RBAC访问控制模型实现了用户与访权限的逻辑分离,减少了授权管理的复性,降低了管理开销,而且与日常信息统管理的架构类似,降低了管理复杂度要配置和设计实现授权体系时、要特别注意以下事项在进行授权体系的设计时,一定要完备,避免个别环境的控制措施缺失所带来的安全隐患;严格执行最小权限原则,只给用户开放完成其功能所必须的权限;在用户执行每个功能前,要首先对其权限进行检查;如果由于部分环境的限制无法实现以上两种保护机制,要使用自定义的加密机制来对保护被传输的数据,即在数据传输加密前后分别进行加解密使用安全通讯机制,将对系统性能带来一定的影响,因此要合理评估其使用范围,但要注意的是在用户鉴别等传输敏感的环节一定要采用安全传输协议
5.
2.
4.日志在应用系统中,要根据用户的需求、系统效率的考虑来实现合理的、完备的日志记录,以实现系统对于审计的支持日志中至少应包括如下信息日志类别(一般信息、警告、错误)、日期与时间、日志内容、当前操作用户名、操作用户所在的机器名或地址(IP)以及处理结果(成功或失败)等通过利用以上日志信息结合基础平台(如操作系统、Web或应用服务器、数据库服务器等)内置集成的日志功能,能够最大限度地为审计提供数据支持在进行日志功能设计时,要考虑其可能对系统性能带来的影响
5.
2.
5.数据安全除了保证数据库中存储数据安全,还要对数据库服务器以外的一些关键数据进行安全保护,这些数据包括Web服务器、应用服务器和客户端(浏览器)中与应用系统有关的配置信息(如数据库连接定义、后台系统连接定义等)、缓存数据、会话数据、临时数据以及Cookie等实现数据安全的主要机制是加密和完整性校验,在选取加密算法时,要根据不同场景采用足够安全但又不会影响系统效率的算法,数据加密方法及适用情况如下所示如果数据量较大,要求效率较高,一般采用对称加密算法,如3DES、AES等;如果数据量较小但安全要求高,可以采用非对称加密算法,如RSA等;。