DevSecOps在数字政府建设中的实践研究
2023-12-05宋刘结
朱 典 杨 阳 余 达 宋刘结
1(安徽省大数据中心 合肥 230011) 2(科大讯飞股份有限公司 合肥 230088)
数字化发展的大潮推动着政府业务系统不断更新迭代,越来越多的业务应用发布,往往因为需要推进相关应用的部署和项目建设周期,忽略了开发生命周期中的安全,一般仅在运行阶段才开展安全活动,造成多种问题难以解决,如安全问题暴露时间长、整改成本较高、速度和风险难以平衡等.
为了解决该类问题,需要建设应用安全开发生命周期流程体系,将安全活动引入到开发工作流中,将安全能力赋能开发阶段,能尽早地识别和弥补安全性缺陷和漏洞,以便能够快速、高质量地交付安全的应用系统.
DevSecOps作为一种全新的安全理念与模式,可以把安全前置到需求设计阶段,将安全责任赋给从开发到运营整个业务生命周期中的每个人,使安全问题能够尽早发现、尽快解决,从而避免可能出现的高昂修复成本.目前DevSecOps主要应用于企业等比较关注开发效率的场景,如金融行业、制造业、航空机载、互联网企业等,但在政府领域鲜有应用.本文基于DevSecOps相关技术路线和方法,通过某省的实际项目实践,探讨DevSecOps如何赋能数字政府安全建设.
1 数字政府应用安全开发现状
1.1 开发过程不管控
当前政府的业务系统建设以项目为依托,关注业务系统功能与交付,不关注开发过程,项目承建商提供开发好的软件进行部署,建设方关注产品交付后的运行及功能成效,代码和制品的质量得不到保障.
1.2 安全关注运行态
政府的业务系统都是在上线后才开始进行安全测试,主要关注系统运行过程的安全漏洞和风险,围绕合规去满足等级保护和密码应用安全性评估要求.这样就使得很多业务系统没有得到充分检测,带有安全隐患就上线,后期暴露出很多问题.
1.3 后期修复成本高
因为开发阶段缺乏安全检测,随着业务不断发展,版本更新加快,当出现安全问题时,再排查问题和修复安全漏洞需要大量的返工时间和高昂的成本,在这种情况下,安全修复成本随着研发流程的推进呈几何级数增长,如图1所示[1]:
图1 各阶段发现安全问题的修复成本
1.4 安全意识待加强
很多参与数字政府建设的人员(包括开发、测试、运营人员等)都很少关注安全,认为安全问题不是自己的职责,也不具备解决安全问题的能力,导致开发的系统可能产生较多的安全漏洞,同时也无法快速对相关漏洞进行修复.
鉴于目前数字政府业务系统面临的问题,亟需相关技术手段将应用安全左移,在开发过程中保障业务系统安全.
2 DevSecOps在数字政府的实现方法
2.1 技术方法简介
在开发过程中为保障业务系统安全,需要成熟的安全检测技术为依托,通过一套整体的技术框架赋能开发过程.以下简单介绍实现安全开发需要用到的技术.
2.1.1 开发、安全和运营(DevSecOps)
DevSecOps是“开发、安全和运营”的缩写.它是一种文化和理念,通过将软件开发、安全和运营人员统一为一个团队来实现[2].DevSecOps可以把安全能力嵌入现有开发流程体系,在开发过程早期识别安全问题,让每个人参与信息安全.
2.1.2 安全软件开发全生命周期
安全软件开发全生命周期(security-software develop life cycle, S-SDLC)技术最早由微软提出,包括需求、设计、开发、测试及维护各个阶段的安全活动,其核心概念是让安全活动融合到整个生命周期[3].
2.1.3 静态应用程序安全测试
静态应用程序安全测试(static application security testing, SAST)是一种静态测试技术,通过对源代码的扫描分析,发现其中潜在的安全弱点及不合规的代码编写方式.
2.1.4 软件成分分析
软件成分分析(software composition analysis, SCA)是一种静态测试技术,对软件的组成成分进行分析,发现其中潜在的安全风险和许可证授权风险.
2.1.5 交互式应用安全测试
交互式应用安全测试(interactive application security testing, IAST)是一种动态测试技术,通过插桩探针的方法检测软件运行过程中的数据流、控制流等业务逻辑层面的安全弱点.
2.1.6 动态应用程序安全测试
动态应用程序安全测试(dynamic application security testing, DAST)是一种动态测试技术,通过在运行时模拟攻击测试应用程序的安全性,发现应用程序中存在的漏洞、弱点和攻击面.
2.1.7 实时应用自我防护
实时应用自我防护(runtime application self-protection, RASP)是一种新型应用安全保护技术,它将保护程序像疫苗一样注入到应用程序中,能实时检测和阻断安全攻击行为,使应用程序具备自我保护能力.
2.2 实现思路与架构
实现DevSecOps在数字政府体系中的应用,要结合数字政府本身的特点,改变传统应用系统交付模式.需要有数字化管理部门统筹集约建设,建立统一的DevOps开发流程,将各政府部门的业务开发工作纳入项目管理范畴中,才能更好地利用相关安全检测工具将安全左移.在此基础上,政府实践DevSecOps的关键点有3个:一是制定明确的制度流程对项目开发过程进行约束;二是统筹自动化的安全检测技术保障开发部署流程通畅;三是提升人员安全意识与能力实现项目交付的协同共担.
通过制度流程+技术工具+人员的高效结合,构建应用安全、敏捷、规范的全生命周期开发体系.从应用源头治理,改善政府业务系统安全根基,为政府业务稳定可靠运行提供有效保障,提升安全性,降低安全风险和修复成本.数字政府的应用安全开发体系架构如图2所示:
图2 数字政府的应用安全开发体系架构
2.3 规范制度与流程
在政府体系中,管理制度与流程是开展工作的先决条件.落实DevSecOps的工作流程,需要建立完善的统筹机制,制定相关的标准规范,才能更好地约束并指导相关政府单位开展应用安全开发工作,最大化提升政务业务系统的交付质量.
制度流程的制定是为了更好地使用安全检测的相关技术工具,两者相辅相成.因此制度和流程的制定一定是要结合已有的能力,从开发编码的规范、上线前安全检测技术规范到上线安全审核要求以及上线运行后的检测规范等,建立全生命周期的管理规范与标准.
技术开发的规范区别于传统的开发要求,本文主要阐述在安全方面如何加强代码的构建.规定在代码编码的过程中,需遵循的安全要求与设计,同时也为后续上线安全审核提供了参考标准,可验证各系统是否按照要求进行开发.
安全测试的标准主要是明确对各安全检测工具的检测要求,为检测工具量身打造适合其知识库的检测标准,同时也通过检测标准的确立扩充检测工具知识库的内容,不断确立符合政府软件特色的测试标准.统一的测试标准可以拉齐各政府部门对开发安全的认知,可以更好地执行上线安全审核的规范要求,发挥出检测工具的合规价值.标准规范和制度流程的确立,是DevSecOps赋能数字政府应用开发安全体系的基础.
2.4 自动化技术保障
为了在执行过程中能够更好地将制度与流程深入贯彻,必要的技术手段是不可缺少的.可通过打造一个软件研发S-SDLC全流程业务支撑体系,利用技术手段将自动化、重复性的安全工作融入到研发体系内,让安全属性嵌入到整条DevOps流水线,提升应用内生安全能力.
S-SDLC提供包含需求、设计、开发、测试、部署等各个关键环节的安全任务设定及管理能力,同时还提供包括SAST,DAST,IAST,SCA等全面的工具链支撑,结合政务业务进行流程定制,与DevOps工具无缝衔接,保证DevSecOps在数字政府的应用实践.以下从开发到运行的各个阶段,阐述各类安全检测技术在DevSecOps流程中的应用.
2.4.1 安全开发
安全开发主要是针对代码的安全检测,在对开发人员进行安全编码规范要求后,通过静态代码安全测试(SAST)工具对源代码进行扫描,开展软件代码安全审核和质量分析,提升软件代码安全质量.
SAST通常在编码阶段分析应用程序的源代码或二进制文件的语法、结构、过程、接口等来发现程序代码存在的安全漏洞.SAST首先通过调用语言的编译器或者解释器把前端的语言代码(如Java,C/C++源代码)转换成一种中间代码,将其源代码之间的调用关系、执行环境、上下文等分析清楚.通过语义分析程序中不安全的函数获取数据流,跟踪、记录并分析程序中的数据传递过程所产生的安全问题.获取控制流,分析程序特定时间状态下执行操作指令的安全问题.获取配置和结构信息,分析程序上下文环境、结构中的安全问题和项目配置文件中的敏感信息以及配置缺失的安全问题.匹配规则库中漏洞特征,最后形成包含详细漏洞信息的漏洞检测报告,包括漏洞的具体代码行数以及漏洞修复的建议.
SAST在编译代码之前扫描代码,可以自动化并透明地集成到项目的工作流程中,帮助开发人员在软件开发早期阶段发现代码安全漏洞.
2.4.2 安全编译
除了源代码存在的缺陷漏洞外,软件开发过程中,开发者为了压缩工期,加快开发效率,引入了大量第三方开源软件,开源组件一旦有新漏洞发布,漏洞影响范围和危害性依赖大量人工排查,工作量巨大且缺乏准确性.因此,当全量代码通过DevOps流水线自动编译后,需要对编译后的制品包进行安全检测,分析其中可能存在风险的第三方开源组件,规避漏洞与许可风险.
软件成分分析(SCA)工具可对软件中的开源组件进行分析,发现其中潜在的安全风险和许可证授权风险.SCA的技术实现是通过对目标检测对象的配置文件及应用包中存在的二进制引入包进行扫描,获取其相关直接及间接引入的组件信息,通过与知识库内容的匹配标识获取相关的组件完整信息,从而识别出在用的开源组件资产和漏洞清单.
通过开源组件的资产梳理和漏洞修复,可逐步建立属于政务业务专用的开源组件资产库.政府各单位新开发的项目在技术选型阶段可以优先从开源组件资产库中选取没有漏洞的最新版本,对于需要新引入的开源组件(不在开源组件资产库中的版本)可以进行扫描后确认没有漏洞再加入资产库中.同时,对开源组件的资产库进行长期监控和跟踪,一旦有新的漏洞发布时,及时更新开源组件资产库,并进行漏洞告警和标记,通知受影响的政府部门项目进行漏洞修复.开源组件资产库的共享,从源头杜绝各开发商使用不被政府认可的开源组件,有效缩短安全修复时间,节省修复成本.
2.4.3 安全测试
系统的源代码和制品通过安全检测后,根据制度规范流程的要求及业务需求,对于即将发布上线的业务系统,必须经过安全检测通过后才能发布上线.在软件的功能测试阶段同步开展安全测试,提高安全漏洞的发现效率和准确性,使交付更安全的产品成为可能[4].
传统的上线前安全检测是使用漏洞扫描工具对部署的系统开展安全扫描,漏洞扫描属于动态应用安全测试(DAST),采用攻击特征库进行漏洞发现与验证,其可以更好地发现操作系统、主机等环境风险,在上线前对Web扫描比较适用.对于更高要求的系统,可能会通过专业安全人员开展渗透测试,这种检测方式无疑增大了资源投入.因此可以采用交互式应用安全测试(IAST),结合工具与人工的灰盒测试,与Web扫描共同实现自动化的上线前的安全检测.IAST的安全融合可充分利用DevSecOps的自动化特性,在构建测试环境的同时引入IAST插桩[5].
IAST是通过在应用程序的字节码中动态插桩检测“探针”,获取应用程序各种运行时的上下文信息.在应用程序运行的同时,实时分析程序的安全弱点.其优势是漏洞检测高精度、高深度、高覆盖度、无感知,其检测漏洞可以定位到代码行级别,并且可以获取完整的请求响应信息、数据流和堆栈信息等,非常适合帮助不懂安全的研发人员.
IAST的技术核心即是插桩技术,是IAST获取被测应用程序上下文信息的基础.以Java为例,Java字节码插桩是Java提供的一个来自JVM(Java 虚拟机)的接口,该接口提供了一系列查看和操作Java类定义的方法.例如修改类的字节码、向classLoader的classpath下加入jar文件等,使得开发者可以通过Java语言操作和监控JVM内部的一些状态,进而实现Java程序的监控分析,甚至实现一些特殊功能(如AOP、热部署),如图3所示:
图3 Java插桩检测示意图
当有研发流程中的功能测试被触发时,IAST同时自动启动并开始检测.这种方式在功能性能测试的同时自动检测并分析,不需人工干预.其检测效果通过权威靶机进行验证,达到了极高的检测率和极低的误报率.
2.4.4 安全运行
当所有上线前的安全活动都开展完成后,可通过DevOps工具将应用快速发布至生产环境,此时需要对发布的应用开展运行态的防护与监测.这主要依托外部的各类安全设备进行保障.除了传统的防火墙、WAF、主机安全防护软件等,还可以结合实时应用自我防护(RASP),RASP技术可以快速地将安全防御功能整合到正在运行的应用程序中,拦截从应用程序到系统的所有调用,确保它们是安全的,并直接在应用程序内验证数据请求.Web和非Web应用程序都可以通过RASP进行保护.
在安全运行阶段,可通过漏洞扫描定期开展安全扫描工作,识别应用和系统的安全风险,通过RASP可实时监测应用的安全状态,当发现安全事件后第一时间响应处置,同时回归代码阶段进行相关整改,实现应用全生命周期的安全闭环.
以上各阶段使用的技术能力都通过S-SDLC整合到DevOps流水线,实现开发过程中的自动化安全检测,是DevSecOps赋能数字政府应用开发安全体系的必要手段.
2.5 提升意识与能力
制度流程和技术工具这2个关键点的实现,离不开人员之间的协同共担,参与数字政府建设的人员需要认识到安全问题不仅仅是系统运行阶段的问题,也不仅仅是软硬件厂商的问题,而是应用从需求设计到开发测试再到上线运行的全生命周期的每位参与人员的事情[6].应用安全体系中的每一个环节都要关注安全,环节中的每一个人都要为安全负责,最终才能更好地保障数字政府的业务安全.
DevSecOps的落地并不只是体现在对原有 DevOps 流程上的改进,还要求组织在内部建立一种安全文化,使得开发、运维和安全团队能够高效地协同工作,实现快速、安全的产品交付[7].
鉴于此,可以通过培训来普及安全开发理论,树立安全开发理念.如图4所示.培训应面向管理、研发、测试、安全等所有参与者,提升每个人的应用开发安全意识和能力,实现“安全不仅仅是安全测试专家的事,而是所有人的事”,打通沟通壁垒和降低合作难度,构建真正DevSecOps文化,是DevSecOps赋能数字政府应用开发安全体系的关键.
图4 数字政府的DevSecOps安全培训体系
3 DevSecOps在数字政府的应用成效
某省政府顺应数字化发展,积极谋划数字政府建设,基于业界DevOps理念,建设了面向政务系统开发领域的应用生产全生命周期管控体系,提供从迭代规划、任务分配、开发、测试、安全、质量、发布直到运维的一站式研发协作.这也将传统的政府软件交付模式进行了左移,可以更好地将安全活动贯彻到开发生命周期中,充分利用DevSecOps,提升数字政府业务的内生安全.本文通过该项目的实践,从执行和监管2个视角,阐述DevSecOps在数字政府的实践应用成效.
3.1 业务快速安全开发
该项目建设前,开发商承接政府部门的开发项目后,通过企业内部的开发流程与体系,结合项目需要,开展相关研发工作,按照项目交付期限,将开发好的软件部署到用户的生产环境.一方面,信息壁垒导致开发商无法有效使用政府现有资源,开发效率得不到提升;另一方面,没有明确的开发技术规范,软件可能存在一些安全风险,导致上线周期拉长或不安全的上线.
因此,对于开发企业或者团队来说,在数字政府的具体项目中执行应用安全开发体系和DevSecOps技术,优化传统的开发工作流程,降低安全风险提高工作效率,是数字政府的应用安全开发体系的核心价值所在.
该项目建设后,提供了一套面向政务系统开发领域的应用生产全生命周期的管控系统,提供了全省统一的低代码聚合系统和低代码工具,建设了统一的公共组件库,将政府的应用资源最大化利用,以适应快速响应、快速开发、快速迭代的需求.并建立相关标准规范和制度,要求各政府部门的开发工作都在这套体系运行.
开发商在接到政府的项目需求后,在所建设的应用管控系统中启动开发任务,可通过相关开发工具进行开发工作.在开发之前,开发人员可通过SCA工具对系统进行安全框架设计和选型,提前避免使用有安全漏洞的开源框架、开源组件,避免引用一些被篡改的非法组件或不符合知识产权许可证授权的组件.进入开发编程后,开发人员使用SAST开展代码扫描,不断对开发的代码进行安全检测,通过IAST检测工具进行自动化的安全性测试,各类安全检测工具的集成,使得安全检测变得高效透明,特别适合数字政府业务系统开发人员多、分支多、迭代快的特点,对传统的开发模式几乎无影响,极大地提高了检测效率,非常有利于持续提高业务系统的安全性.
3.2 业务开发安全监管
对于开发企业和团队来说,如何在保证安全的情况下提升效率是关键,而对于政府单位,原有的建设模式其开发过程不可见,安全对于管理者来说都是黑匣子,因此开发测试过程的监测管理是关键.从立项、开发到最终上线的整个过程中,管理人员均可以通过DevSecOps将安全统一地管理起来.
该项目建设后,建设管理单位首先从管理制度上进行约束,同时对管理规范的执行情况进行定期审查.配置安全基线,设定基本的软件安全要求,这些基线和要求都集成到DevSecOps流程中,并设置安全质量控制门,这样该业务系统的所有相关人员均在受控的流程中执行统一的安全规范,杜绝了因管理缺失导致的安全隐患.
开发人员在系统中所做的相关安全检测,其数据都可以呈现到政府单位管理员进行查看,保证整个开发过程的安全透明.
在系统开发完成后,管理单位结合上线安全审核流程规范的要求,通过DevSecOps对业务系统、相关人员、源代码等进行多纬度的量化评估,获得客观真实的数据.如果发现不符合安全要求即可以有针对地让相关人员进行整改,直到符合安全要求后才允许系统上线.
系统上线后,管理单位使用部署在业务系统应用服务器上的RASP工具,记录和查看业务系统的安全运行日志,分析可能面临的安全威胁,形成安全简报,指导运维人员做好日常的安全运维保障工作.最终实现从开发、测试、上线到运行的全流程应用安全监管.
4 结 语
持续且专注的自动化安全对DevSecOps的实现至关重要.将安全自动化融入到软件开发的生命周期中,通过自动化的方式减少安全漏洞检测和响应的时间,降低成本的同时也提高了应用程序的安全性,从而加速产品的安全交付[8].在政府的信息化项目交付中,建立人人对安全负责的DevSecOps流程将是大势所趋,具备更好的优化流程、提前落地安全措施才能从根本上收敛安全问题,真正实现快速交付的应用开发安全体系.
技术赋能数字政府业务应用的快速安全开发,而好的监管才能保障政府应用开发的长久有效运行.因此,数字政府的重大项目可引入第三方测评,在规划阶段评估项目建设方案,在交付阶段检测项目建设内容,在运营阶段评估项目运行情况.可以委托第三方测评机构结合已建的DevSecOps方法流程对业务系统开展充分的软件安全性检测,响应国家法律法规和政策要求,切实提高软件安全水平.