住房城乡建设领域信息系统生命周期内安全问题的思考
2020-06-07李镇京
李镇京
(安徽省住房和城乡建设信息中心,安徽 合肥 230091)
0 引 言
近年来随着信息化技术的迅猛发展,全省住房城乡建设领域根据国家“互联网+政务”工作的推进和部署,陆续建成了一批面向住房城乡行业主管部门、服务对象的业务应用信息系统,这些信息系统为全省全行业日常信息化办公提供了信息便利,为政府部门科学决策提供了数据支撑。
在为政府部门提供便利的同时,信息系统的安全问题也日益凸显,因此在系统建设生命周期中需要持续加强安全防护。需要结合应用开发流程,充分考虑敏捷、持续集成、开发运行一体化等应用开发新模式,实现安全防护机制贯穿于全省住房城乡建设领域应用系统建设全生命周期。
1 业务应用系统的生命周期
信息系统的建设,根据不同分类方式,一般分为立项(系统规划)、开发(系统分析、系统设计、系统实施)、运维及消亡四个阶段。但笔者从安全管理角度将其分为六个阶段:需求分析、架构设计、代码编写、测试验证、应用部署和运行维护,如图1所示。
图1 业务应用系统生命周期
1.1 需求分析阶段
需求分析阶段是信息系统建设的第一步,是信息系统建设的前期阶段。该阶段主要是对项目建设的目标任务、业务需求、政策文件、需求描述进行收集、分析,也是信息化项目可行性、必要性以及主要业务需求的总结分析。项目可行性研究报告审议通过后,将根据业务部门的业务需求,对新系统进行需求方案编写,形成需求规格说明书等文档。
1.2 架构设计阶段
需求分析阶段主要是解决为什么要做,要做什么的问题,架构设计阶段是项目组拿到项目任务(即项目已招标完成)后,根据前期的项目政策文件要求、业务需求描述来解决怎么做的问题,是具体实现的方法和路径。这个阶段又称为物理设计阶段或架构设计阶段,可分为总体设计(概要设计)和详细设计两个子阶段,这个阶段的技术文档是系统设计说明书。
1.3 代码编写阶段
代码编写是整个业务应用系统开发过程中最核心也是最实际的一部分,这个过程考验的是编程人员对需求和架构设计的理解,考验的是如何把文字描述转换成二进制代码。具备高效的软件开发平台、代码安全规范等是保障软件代码编写的重要支撑,高质量的代码编写是后续程序升级、完善、维护高效运行的保障,这个阶段需要形成代码设计文档。
1.4 测试验证阶段
这个阶段是前期所有阶段的一个里程碑事件,也是业务系统进行阶段性交付的一个关键阶段,是质量测试部门通过严格的程序功能、性能测试,以及同需求、设计等阶段的对比测验系统的一个质量把关环节。测试验证阶段一般包括功能测试、性能测试、BUG测试、安全测试等内容,系统测试之后写出系统测试分析报告。
1.5 应用部署阶段
应用部署阶段是将设计的系统付诸实施的阶段。这一阶段的任务包括服务器环境(包括CPU、内存、磁盘)、网络环境(IP地址端口映射)、安全环境(防篡改、防病毒、防入侵)以及数据备份环境(备份策略、备份方式)等软硬件环境的准备和安装调试。这个阶段的特点是几个互相联系、互相制约的任务同时展开,需要运维人员精心安排、合理组织。应用部署阶段完成后应写出系统部署文档说明及使用手册。
1.6 运行维护阶段
系统部署及投入运行后,需要经常进行维护和评价,记录系统运行的情况,根据一定的规则对系统进行必要的修改,评价系统的工作质量和经济效益。
2 系统生命周期内面临的安全问题
面对业务应用系统生存周期里的几个阶段,我们会遇到以下一些安全问题:
2.1 代码编写安全问题
代码编写是考验一个程序员编程“功底”的最核心也是最基础的一个方面,笔者根据十几年的业务应用系统项目建设、运维管理经验分析,经常遇到业务应用系统XSS注入安全漏洞或出现安全事件后无法查询到系统运行日志等安全问题,而这些安全问题80%是程序代码编写不规范造成的。
2.2 开发框架安全问题
业务应用系统开发常用的三种框架有Struts2、Spring、Hibernate(ssh), 大多数业务应用系统程序是基于这三种开发框架的一种,进行的二次开发,这些开源的第三方程序框架往往由于更新不及时等原因存在严重安全隐患。以Struts系列框架为例,Struts2从2007年7月23日发布的第一个Struts2漏洞S2-001到2017年12月发布的最新漏洞S2-055,跨度足足有10年,而漏洞的个数也升至55个。分析了Struts2的这55个漏洞发现,基本上是RCE、XSS、CSRF、DOS、目录遍历和其他功能缺陷漏洞等。这些严重的开发框架漏洞,直接威胁业务应用系统底层代码程序的安全,但是部分程序由于太复杂,底层开发框架的升级又带来严重的考验。
2.3 程序部署安全问题
如果说前面两个问题是业务应用系统开发设计阶段的安全问题,是程序开发人员的知识储备、编写习惯问题,程序部署环节考验的是系统运维人员综合素质结合运维能力。程序部署环节一般涉及到中间件(如Weblogic、IIS、Appache)及整个系统部署环境问题,给运维人员(负责程序部署的工程师)带来了一定考验。经常遇到工程师在部署程序时Webconfig文件没有加密存储、配置IIS及虚拟目录过于简单,没有对程序目录读写权限进行详细设置、默认虚拟目录没有禁用等安全问题,给业务系统后期安全运行带来了重大隐患。
2.4 服务器操作系统等第三方软件漏洞问题
操作系统、数据库、Office、Pdf软件、报表控件等第三方软件是业务应用系统部署时必须同步安装配置的软件,但经常会有运维管理人员在操作系统帐号时使用默认最大权限的Administrator账号、使用远程桌面的3389进行远程、关闭操作系统自带防火墙等安全问题的存在。
2.5 使用安全问题
业务应用系统的安全问题在大多数情况下是难以避免的,因安全管理员、运维管理员等人员的知识水平、责任心以及业务能力有很大的差别,往往导致业务系统安全问题频发。举例说,因安全管理要求,数据库服务器密码需要每6个月更改一次,因运维管理人员不熟悉Oracle数据库修改,导致一用户OA办公系统出现非常卡慢无法使用,运维人员排查了网络、服务器、安全产品等问题,最终发现是数据库密码过期问题。
3 如何解决应用系统生命周期内安全问题
3.1 管理机制健全方面
制度的建立是规范业务应用系统安全开发、建设、运行的顶层框架,业务应用系统的开发涉及政府部门(业主方)和软件开发企业(承建方),双向都需要从自身管理角度出发制定软件安全开发管理的相关制度,明确安全开发规范。如政府部门可以根据部门实际需要制定《某行业业务应用系统安全开发管理规范》《某行业业务应用系统建设管理办法》等安全制度,安全管理可以从安全管理要求(包括开发环境安全、文档安全、开发人员安全、源代码安全等方面)、需求阶段安全(包括基本安全、功能安全、数据安全等方面)、应用安全要求(包括身份认证安全、访问控制安全、系统安全审计、业务逻辑安全等方面)、测试安全要求、部署安全要求四个方面着手制定。这些制度的建立可以很大程度上减少程序代码环境的安全隐患问题,大大提升程序的安全“坚固性”。据笔者单位内部管理统计,10个业务应用系统开发中,制定软件安全开发管理规范并严格执行的软件程序代码安全漏问题会有减少90%以上。
3.2 业务系统生命周期内安全建设思路和方法
面对以上经常发生的业务应用系统安全问题,需要从系统建设全生命周期内每个阶段进行建设和加强。结合应用系统建设的六个不同阶段,笔者建议在安全建设中实行“清单”化管理,如图2所示。
图2 信息系统生命周期安全建设架构图
3.2.1 需求分析阶段的安全建设
在需求分析阶段需要编写涵盖国家和地方法律、法规、监管要求、住房城乡建设行业标准、内部规范的安全要求检查表,建立安全需求清单,把安全需求融入到应用系统建设需求阶段中。
3.2.2 架构设计阶段的安全建设
根据需求阶段的清单,结合威胁分析、攻击态势和安全事件数据,在架构层面进行应用安全架构设计,确保安全需求和安全架构贯通。编制覆盖身份验证、访问控制、数据管控、密码使用等安全功能的应用安全架构清单,确保应用系统在架构中体现应用安全基础能力。
3.2.3 代码编写阶段的安全建设
对应用开发人员进行安全意识和技能培训,确保应用开发人员建立对代码安全需求的理解,从而在应用系统开发过程中建立良好的安全意识和开发规程。优化应用开发流程,落实需求分析、架构设计、编码开发、测试评估等环节的安全控制机制,根据软件开发安全规范形成代码编写规范清单。实施涵盖静态应用代码安全测试、动态应用代码安全测试、交互应用代码安全测试在内的应用代码安全测试,实现代码安全检查与应用开发测试的聚合。
3.2.4 测试验证阶段的安全建设
在测试阶段需制定符合业务应用系统安全实际的测试清单,实现安全与测试的深度融合。测试时还需从业务系统功能、性能、系统身份管理、访问控制、权限执行和密码操作等内容进行测验,确保安全控制机制在应用系统中得到正确使用。
3.2.5 应用部署阶段的安全建设
建立应用部署规范和检查清单,确保应用按照安全域划分正确地部署在基础设施环境中,建立应用运行环境规范和检查清单,确保应用运行环境正确使用网络、主机和云基础的安全防护能力,并能够对应用的输入输出进行监控。
3.2.6 运行维护阶段的安全建设
建立应急响应机制,能够对应用漏洞、安全事件进行及时响应。建立覆盖漏洞情报、漏洞扫描、渗透测试、众测等在内的漏洞收集清单,并反馈到缺陷(BUG)管理平台和安全防护平台,建立漏洞评估和修复体系。
4 结束语
信息系统建设是一项复杂而艰巨的任务,信息系统生命周期内六个阶段面临着不同的安全建设需求,建立健全安全管理机制,实施信息系统生命周期安全建设,实施六个阶段的“清单”化管理,是切实提升政府部门信息系统建设安全能力、系统运行生命力的有力保障。