APP下载

企业应用软件开发安全体系的构建

2021-03-03王伟萌刘承亮朱韦桥

铁路计算机应用 2021年2期
关键词:用户管理

王伟萌,刘承亮,朱韦桥,苏 伦

(中国铁道科学研究院集团有限公司 电子计算技术研究所,北京 100081)

随着软件技术的发展及企业信息化的推进,企业内应用软件业务不断扩展,软件功能层出不穷,大幅度提高了企业的生产效率。同时,企业应用软件所面临的安全挑战也日益严峻,除了软件在设计开发过程中产生的自身程序缺陷外,外部黑客的攻击和破坏不断增加。企业应用软件安全漏洞一旦被利用,将导致严重甚至是灾难性的后果。因此,需要构建、完善应用软件开发安全体系,应对企业应用软件的安全问题。目前,应用软件开发安全体系不够全面,而且构筑的体系多针对特定平台。本文针对相关问题,为企业应用软件构建安全体系框架并在框架下提出安全技术要求,旨在从内容全面性、平台普适性两方面完善当前应用软件开发安全体系。

1 开发安全体系构建基础

1.1 应用软件安全漏洞防护技术

1.1.1 漏洞检测技术

Sajjad R[1]等人分析2002~2015 年研发出的应用软件漏洞检测工具对于应用软件安全性防护的实际有效性,有些工具和检测机制延用至今都是主流技术,包括输入参数分析、漏洞扫描、静态分析、运行检查、入侵检测、Sec-SIP 框架、SQL Injection Gen、Safer XSS 等。在移动应用中也通过渗透测试技术[2]检测应用软件漏洞。通过漏洞检测技术可以梳理出用于面对恶意攻击的防范风险点,为制定有效防范人为攻击的安全技术要求提供框架基础。

1.1.2 漏洞防御技术

研究漏洞防御技术为防御恶意攻击提供了具体的安全技术要求。防火墙技术、访问控制技术、身份认证技术、数据加密技术、规则过滤技术、安全审计技术等提供了保障应用软件安全的措施。Mitropoulos D[3]等人针对41 种防御技术的准确性、性能进行了分析,搭建试验模型,分析、判断出一些防御机制可以被攻击绕过的技术,帮助本文在安全技术要求选择上排除防御机制效果差的方法。

1.2 国家标准中的信息系统安全技术体系

GB/T 22239—2019《信息安全技术 网络安全等级保护基本要求》[4]作为构建应用软件开发安全体系的主要依据,主要从技术要求和管理要求两方面对应用软件安全保障体系进行了规范。其中,技术要求包含物理环境、通信网络、区域边界、计算环境、管理中心,且通过计算环境提供了包括身份鉴别、访问控制、安全审计、入侵防范、恶意代码防范、数据完整性保密性、信息保护等安全要求,为应用软件开发安全体系中应用安全、数据安全的安全风险和安全防护手段提供参考。

另外,标准中管理要求从制度管理、机构管理、人员管理、建设管理、运维管理进行约束。建设管理与运维管理包括软件开发管理、漏洞和风险管理、网络和系统安全管理、恶意代码防范管理等,提供了应用软件开发安全体系中过程管理安全的内容参考。

GB/T 28452—2012《信息安全技术 应用软件系统通用安全技术要求》[5]明确了应用软件在设计与实现过程中的安全技术要求,从应用软件生存周期管理要求及应用软件系统安全技术要求两方面构建应用软件的安全框架,如图1 所示。

图1 应用软件系统通用安全技术要求框架

标准中的生存周期安全管理要求包括应用软件设计(开始阶段)、开发过程(获得或开发阶段)、测试(实现和评估阶段)、运行维护(运行和维护阶段)等阶段的管理要求,提供了过程管理安全的内容参考。

系统安全技术要求包括安全功能技术要求(安全功能)及安全保证技术要求(安全保证),其中,安全功能提供了用户身份鉴别、抗抵赖、访问控制、安全审计、数据完整性保护、数据保密性保护、备份与恢复等技术要求。

2 企业应用软件开发安全体系结构

企业应用软件开发安全体系建立在专家学者对应用软件开发安全研究的基础上,同时参考国家标准中涉及应用软件安全功能设计及安全管理的要求,结合企业应用软件开发流程,按照开发生命周期过程,丰富体系内容。企业应用软件开发安全体系结构,如图2 所示。

2.1 应用软件设计安全

2.1.1 架构安全设计

2.1.1.1 架构安全

对应用软件架构及其传输协议、服务端口、组件等的安全规范描述。(1)传输命令和数据所采用通信协议根据组件之间通信内容安全性程度选择不同安全性要求协议;(2)建立对于组件资源的访问控制机制;(3)不使用常见的不安全服务端口;(4)对组件内部的配置文件、用户数据进行加密存储。

2.1.1.2 与外接口安全

图2 企业应用软件开发安全体系

应用软件对外开放的接口进行应用范围、身份验证、访问控制等。(1)限制对外开放接口的应用范围;(2)对允许接入的系统进行唯一性标识;(3)对请求连接的系统进行身份验证;(4)采用校验技术对对外接口传输的数据进行合法性检验;(5)建立系统之间资源的访问控制机制;(6)限制同一时间内并发访问的接口数[6]。

2.1.2 功能安全设计

2.1.2.1 身份鉴别

对应用软件身份鉴别中的标识、口令、失败处理、二次鉴别等内容进行安全规范描述。(1)用户登录、后台管理系统登录应进行身份鉴别;(2)保证用户身份标识的唯一性;(3)提供一定的口令复杂度校验功能;(4)为用户创建独立且满足复杂度要求的初始口令,要求新建用户首次登录系统修改初始口令;(5)提供身份验证失败处理功能,连续登录失败应锁定账号;(6)认证失败后,应提供一般性的提示。

同时,对于涉及重要业务或涉及企业重要数据的应用软件。(1)登录时采用2 种或2 种以上的鉴别技术对用户进行身份鉴别;(2)要求用户定期修改口令。

2.1.2.2 访问控制

应用软件具备业务、功能、数据的安全访问策略。(1)制定业务、功能、数据等对象的访问权限策略,遵循最小权限原则;(2)授权和用户角色数据存放在服务器端,鉴权处理应在服务器端完成。

2.1.2.3 数据输入

应用软件针对数据输入的校验和限制。(1)对所有用户产生的输入进行校验,提供数据格式和长度有效性校验功能;(2)使用服务端代码对输入数据进行最终校验;(3)上传文档前进行身份鉴别;(4)验证文件类型,仅允许上传满足业务需要的相关文件类型;(5)除验证文件类型扩展名外,还需至少检查文件报头中的类型信息;(6)访问上传的文件之前,进行恶意代码的扫描,校验文件完整性。

2.1.2.4 信息输出

应用软件对输出内容的过滤和检查。(1)不输出内部信息,不在出错消息中暴露包括函数名及调试信息等应用软件内部的敏感信息;(2)禁止返回与业务无关的信息;(3)涉及文件下载时不通过路径遍历方法下载敏感文件。

2.1.2.5 数据加密

(1)对敏感数据进行加密;(2)在服务器端加密存储敏感数据。

2.1.2.6 数据保护

(1)不在代码中存储敏感数据;(2)不在日志中记录明文的敏感数据;(3)保证业务重要数据和敏感数据在文件系统、数据库中存储的保密性;(4)保证业务重要数据和敏感数据在传输过程中的完整性及保密性。

2.1.2.7 数据备份和恢复

提供对新增数据进行备份的功能,并提供备份数据恢复的功能。

2.1.2.8 安全审计

(1)对应用软件系统重要事件提供安全审计机制;(2)严格限制对安全日志的访问;(3)安全日志设置有备份及清理机制。

2.1.2.9 抗抵赖

业务操作的不可抵赖性。(1)采用技术手段实现业务操作的不可抵赖性;(2)证据信息应存储在安全和信任的环境。

2.1.2.10 资源控制

(1)设定服务和资源的优先级;(2)提供服务或用户优先级设定功能,设定请求进程或访问账号的优先级,根据优先级分配系统资源;(3)对资源的访问设定时间限制、非法访问者检测和关闭的时间间隔。

2.1.3 资源使用设计

2.1.3.1 会话管理

规定会话的存储、超时、清除、连接数等。(1)在用户登录后应创建新的会话,会话数据应存储在服务器端;(2)会话设置超时时间,当空闲时间超过设定时间服务端应自动终止会话;(3)当用户注销或退出客户端时,必须清除该用户的会话信息;(4)对最大并发会话连接数进行限制。

2.1.3.2 资源管理

(1)确保系统中的资源都有唯一标识符;(2)使用重要资源前进行初始化,初始化失败后安全退出程序;(3)及时释放系统资源;确保释放资源前完全清除敏感信息;(4)对分配的资源数量、使用权限、有效时间做限制,防止消耗过多资源;(5)执行迭代或循环时限制循环执行的次数。

2.1.3.3 内存管理

规范内存的分配、释放、缓冲区。(1)保持一致的内存管理原则,使用相同模式分配和释放内存;(2)对缓冲区的读写操作进行边界检查,避免向指定的缓冲区外读取或者写入数据;(3)字符串操作时,检查字符串长度和终止符,保证字符串的存储具有足够的空间容纳字符数据和终止符。

2.1.3.4 数据库管理

(1)当访问数据库时,禁止使用默认的角色、账号与默认数据库口令访问数据库,数据库账号权限应遵循最小权限原则;(2)数据库连接字符串或密码应加密存储;(3)规定不同信任级别用户连接数据库的角色;(4)及时释放数据库资源。

2.1.3.5 文件管理

规范对文件操作进行身份识别、对目录进行安全限制、及时释放等。(1)采用最小权限原则进行文件访问授权;(2)禁止暴露目录或绝对文件路径;(3)禁止用户修改应用程序文件和资源,权限仅限于可读。

2.1.4 通信安全设计

应用软件采用安全通信协议对数据进行安全传输:WWW 服务建议使用HTTPS 协议;FTP 服务建议使用SFTP 协议;Telnet 建议使用SSH 协议;使用加密传输确保通信安全。应用软件对通信过程中的整个报文或会话过程加密;对信道中传输的消息进行完整性验证。

2.2 应用软件编码安全

2.2.1 基本安全要求

2.2.1.1 代码安全

(1)规范变量、函数命名及代码格式;(2)使用第三方代码,对代码安全性进行评估和测试;(3)对代码进行版本控制;(4)对代码的访问权限进行控制。

2.2.1.2 代码注释

(1)注释代码中无用的语句;(2)注释信息中不包含物理路径信息、数据库连接信息、SQL 语句;(3)静态页面的注释信息禁止包含源代码信息;(4)动态页面使用隐藏注释。

2.2.1.3 并发安全

(1)确保全局变量、线程间的共享数据线程安全;(2)处于阻塞状态的任务和线程确保能够终止;(3)使用线程池来处理请求;(4)确保提交至线程池的任务可被中断;(5)及时释放线程专有对象。

2.2.1.4 函数调用

(1)代码应对函数入口参数的合法性和准确性进行检查;(2)避免在API 或与外部交互的接口暴露仅限内部或部分用户访问的方法或函数[7]。

2.2.1.5 异常处理

(1)异常出现返回一般性错误提示;(2)异常处理时及时回收并释放系统资源;(3)捕获异常应在日志中详细记录。

2.2.1.6 指针安全

(1)指针使用过程中确保指针的有效性;(2)指针使用过程中检查内存分配大小,避免产生溢出;(3)检查数组索引避免产生溢出;(4)循环中调用函数时检查缓存大小;(5)当方法结束清空所分配内存。

2.2.1.7 配置管理

(1)配置管理由授权人员进行,禁止使用远程配置管理,对操作进行审计;(2)服务器、框架、系统部件采用最新版本,安装更新补丁;(3)配置文件不得明文存储;(4)关闭服务器目录列表功能。

2.2.1.8 代码生成安全

(1)检查编译过程中依赖库的版本,检查编译命令的宏定义冲突;(2)编译生成的结果文件保存在独立于源代码的路径中。

2.2.2 防恶意攻击

2.2.2.1 防SQL 注入

(1)不直接通过用户输入字符串构造可执行SQL 语句;(2)使用参数化查询或参数绑定来构造SQL 语句[8];(3)不在存储过程内使用字符串连接构造SQL 语句,执行不可信的参数。

2.2.2.2 防跨站脚本代码(XSS)

(1)对输入的危险特殊字符数据进行过滤和转义;(2)对所有基于页面的输入进行验证,未经验证不对输入进行回显;(3)对于其他业务系统生成的未经本应用软件验证的表数据或文件数据, 输出到客户端前进行HTML 编码[9]。

2.2.2.3 防跨站请求伪造(CSRF)

(1)应用软件对客户端提交的表单请求进行合法性校验;(2)对HTTP 请求头Referer 做验证。

2.3 过程管理安全

2.3.1 第三方软件使用安全

(1)从官方渠道获取第三方软件,所有组件及时升级到不存在已知高危漏洞的版本;(2)对第三方软件进行完整性验证测试,确保未被篡改;(3)定期对第三方软件进行安全性检测,避免使用已知存在高危漏洞的组件版本[10]。

2.3.2 开发环境安全

(1)构建安全的编译环境,从官方渠道获取编译器,确保安装了所有补丁;(2)安全存储源代码,权限控制保护源代码不被非法用户访问;(3)确保开发环境与实际运行环境的物理隔离。

2.3.3 运行环境安全

(1)应用软件发布前删除所有与调试和测试相关的代码、配置、文件等;(2)及时删除服务器上不需要的应用程序和系统文档;(3)关闭服务器上不需要的服务;(4)软件运行服务器的系统组件避免使用存在已知漏洞的组件版本。

2.3.4 归档管理

(1)版本归档时,删除开发过程中的临时文件、备份文件、无用目录等;(2)归档的程序文件中不保留调试用的代码。

3 结束语

通过本研究建立了一个比较完善的企业应用软件安全体系,满足应用软件设计、开发过程中的安全保障要求,能够为企业及员工信息提供安全屏障。随着黑客技术的发展,针对企业应用软件的攻击手段不断升级,今后需继续研究和完善企业应用软件安全体系,及时发现安全问题,提供安全手段。此外,企业中应用软件根据涉及的业务或所涉及数据的重要性的不同,参照安全要求也应有不同针对性,如涉及转账付款、支付收款业务逻辑的应用应重点关注未授权访问、越权访问;涉及用户命令执行、用户上传代码执行功能应关注命令注入;涉及短信、电话、邮件通知功能应关注应用软件设计逻辑错误。针对重要、特定的应用,就需要制定更严格的技术手段要求。

猜你喜欢

用户管理
枣前期管理再好,后期管不好,前功尽弃
加强土木工程造价的控制与管理
如何加强土木工程造价的控制与管理
关注用户
关注用户
关注用户
“这下管理创新了!等7则
人本管理在我国国企中的应用
Camera360:拍出5亿用户
100万用户