文/李慧芹 韩敏 唐振营
“网上国网”业务平台是国家电网公司“三型两网”战略部署的重要组成部分,承载着链接客户、汇聚资源、对接供需、创新业态、构建生态等重要使命,是客户侧泛在电力物联网建设的重要基础和支撑,同时也是国家电网公司客户服务中心业务开展的主要平台,在确保业务平台实用好用的同时还要确保系统安全可靠。自2018年12月在浙江省试点上线以来,用户数量已经突破100万。为了做到快速响应市场变化,“网上国网”在建设阶段采用了敏捷开发模式、DevOps自动化过程,技术架构采用了业界领先的微服务架构,有81个业务场景,四平台八中心加上APP支撑,内外网共100多个微服务根据测试结果不定期发布上线。
作为面向互联网直接提供服务的互联网+电力平台,“网上国网”必须建设针对来自互联网的各类安全攻击威胁,通过全局防护体系的建设,避免“网上国网”业务系统出现访问异常、数据泄露、页面篡改、无法访问等异常情况。在建设设计阶段,网上国网项目组需要充分考虑技术层面的安全风险和基本的业务操作风险,不但对研发环境,测试环境,灰度环境,生产环境制定了严格的网络安全策略,而且在持续建设网络安全防御体系和异地容灾备份体系,同时也引入了S-SDLC软件安全开发生命周期理论和基于IAST技术的研发过程安全检测体系对整个软件开发过程进行安全理论指导和实践检测。
敏捷开发在软件研发过程中的应用改变了传统的瀑布式软件开发过程,应用快速开发、快速迭代、快速上线。新的研发模式在提升了业务工作效率的同时,也对业务系统应用安全检测工作提出了新的挑战。电科院等国家电网内部传统网络安全审核机构的工作量急剧提升,基于传统白盒扫描方式的安全检测方式在检测时间、检测结果分析、指导问题修复等环节耗时长,不满足业务系统“小步快跑”的需求,传统安全检测棘手的“软件小版本升级”问题更加突出。线上渗透测试工作由“蓝军”使用工具进行,业务覆盖度有限,自动化程度不高。导致业务系统的一次上线通过率极低,大部分业务系统由于不能通过安全检测而延期上线。上线前安全检测不到位将导致业务系统的新功能未经充分的安全检测即发布上线,可能存在代码安全弱点或业务逻辑漏洞,一旦被恶意利用,将导致网络安全事件。一旦业务系统相关的硬件、操作系统、Web容器、数据库服务、第三方组件、开发语言等层面真实爆出漏洞或安全事件,安全后果不可预知。
软件安全开发是一种系统化的应用安全解决方法,它将一系列开发安全管理实践、开发安全设计原则、开发安全活动、开发安全工具和开发安全专家经验等方面有机地融合在一起。软件安全的目标:是关于构建安全软件的:将软件设计成安全的;确保软件是安全的;培训软件开发人员、架构师和用户如何构建安全到软件中。早在2009年微软针对软件研发安全提出了安全开发生命周期,定义了安全开发生命周期中需求、设计、开发、测试及维护各个阶段的安全活动,其核心理念是让安全活动融合到整个开发生命周期,经过实践证明,通过实施SDL,Vista操作系统减少45%的漏洞,SQL Server2015减少了91%的漏洞。而华为在2019年甚至提出了“全面提升软件工程能力和实践”的企业内部要求,从“编码质量”、“架构核心要素”、“历史代码”等方面做好软件开发安全,确保产品开发到交付过程的高质量。软件安全开发生命周期是成熟的指导软件安全开发的方法论,在国内外已有成功实施案例,有必要逐步引入、消化、吸收,形成国网自身的覆盖需求、设计、开发、测试、运维等阶段的软件安全开发体系。
“交互式应用安全测试(Interactive Application Security Testing, 以下简称IAST)”技术,是近年来兴起的一项新技术,被Gartner公司列为信息安全领域的Top10技术之一。IAST检测技术融合了SAST和DAST技术的优点,无需源码,支持对字节码的检测,可以极大的提高安全测试的效率和准确率,良好适用于敏捷开发和DevOps,可以在软件的开发和测试阶段无缝集成现有开发流程,让开发人员和测试人员在执行功能测试的同时,无感知的完成安全测试,解决了现有应用安全测试技术面临的挑战。
IAST的核心基础理论是动态污点分析。动态污点分析是近几年非常流行的一种攻击检测方法。其主要思想是将外部输入数据标记为污点,在应用程序运行时跟踪这类数据,同时把与外部输入数据具有传播关系的数据标记为污点,最终在安全敏感处(执行外部输入方法,输出到客户端方法等)进行检查。目前,动态污点分析有三种实现方式,如下。
第一种是通过对源代码插桩,插桩完成后在程序运行时跟踪污点传播并检测漏洞攻击。比较于其他种类的污点分析方法,该方法的优点是具有更小的运行时开销,缺点是不能作用于闭源软件和第三方库,不适用于针对商业闭源软件的漏洞攻击和第三方库漏洞的攻击。此外,为了跟踪污点传播库方法的信息,需要提供每个库方法的摘要信息,对于大型应用程序来说,提供每个库方法的摘要信息是一项繁重并且易错的工作。
第二种是针对二进制文件进行插桩,插桩后在应用程序运行时动态跟踪污点信息传播并检测漏洞攻击,此方法比其他类型的动态污点分析方法具有更大的运行开销,插桩后动态监控应用程序运行时信息流的传播,能够准确跟踪包括库里面的污点传播。
第三种方法是硬件级跟踪信息流的传播,该方法在检测漏洞攻击上没有太大的运行时开销,缺点是需要硬件级的支持,无法适用于许多现存的系统。
程序动态插桩是指向运行时的程序插入探针代码,利用探针代码获得程序运行信息及数据信息,从而实现程序测试或分析的目的。动态插桩提供了获得应用程序运行时信息和数据信息的抽象方法,使得用户不再面对复杂的二进制代码,插桩针对应用程序执行代码,不再需要分析程序源代码和重新编译被分析程序,正由于这些优点,动态插桩在程序分析中得到了广泛应用。现在的软件系统拥有动态加载模块和动态生成代码机制且都是在运行时进行组装的。因此在程序运行时理论上是可以在编译时期对每条指令进行观察、检测和操作的。那么理论上就可以在运行状态下对应用程序进行分析、检测、指令搜集和流程跟踪等一系列操作。静态污点数据传播分析过程中存在对源代码依赖程度大并且其结果受编译器和运行环境的影响,存在检测速度慢、前后期需要大量人工操作等一系列问题。动态插桩技术及其工具的出现使得动态跟踪污点数据流成为可能,也促使了动态污点分析的流行。
目前,研发过程安全检测平台已经在网上国网项目全面部署,取得初步成效。在“平台”部署初期,实现两周时间内完成了对数百个微服务、微应用的应用安全检测,为项目成功上线提供了有力支撑。而在检测准确性方面,项目组以业界作为安全测试工具检测标杆的OWASP Benchmark项目为检验标准,平台对Benchmark的2700多条测试用例和10余种漏洞类型的综合检测率均为100%,高于业界其他工具。截至2019年5月,平台已经支持近50种安全弱点的检测,能对应用程序执行覆盖了OWASP Top 10和CWE/SANS Top 25所包含常见安全弱点的检测。具体应用模式如下:
2.2.1 代码编写阶段
原有的代码编写阶段,开发人员会在研发环境的服务器上进行代码调试。研发过程安全检测平台在研发环境服务器上部署了IAST安全检测引擎,在开发人员提交代码前对软件进行安全编码规范检查、软件质量规范、代码安全弱点定位分析、第三方库检测,不符合检测标准的代码不允许提交,从开发源头把控代码质量,降低后期发现、定位、解决问题的成本。
2.2.2 功能测试阶段
每当进行“网上国网”项目功能测试时,对应的微服务会通过持续集成工具进行编译打包,并构建成docker镜像,推送到网上国网内部的云服务平台镜像库中。配置管理组将需要进行测试的微服务镜像推送到Kubernetes测试云环境运行,质量管理组负责对相应的微服务docker进行功能测试。研发过程安全检测平台通过将IAST安全检测引擎植入微服务所在的容器环境,实现随部署随检测。
网上国网项目组考虑到在出厂测试(集成测试)阶段进行安全检测、安全问题修复时间成本、人工成本巨大,从研发全生命周期进行考量,适配敏捷开发过程、满足微服务架构下众多微应用、微服务的并行检测需求,通过与IAST交互式应用安全测试技术结合实现安全融入开发运维。
参考软件安全开发生命周期最佳实践,将安全代码规范融入到整个研发过程中,加强研发过程管控,通过自动化、半自动化的手段确保研发安全。网上国网项目组综合安全编码规范落实、业务安全风险防范、敏感数据保护、第三方库安全检测等多方面建设交互式研发过程安全检测平台,确保了软件的安全质量。对检测出的各类问题提供详细的描述和建议解决方案,开发人员可以直接参考使用,提升问题解决效率的同时释放专业安全人员的资源,实现合理高效的专业人力资源分配。
网上国网项目组通过应用交互式研发过程安全检测平台对软件研发过程进行管控,将安全检测前移,实现出厂测试(集成测试)阶段安全弱点减少90%,降低出厂检测(集成测试)工作压力,不仅提升了软件健壮性,减少了红队发现的漏洞数量,还全方面掌控软件资产情况、降低第三方库(开源软件)带来的风险。在解决基础安全的基础上,还从根本上应对“等级保护2.0”、《个人信息保护法》等国家网络与信息安全领域相关法律法规在应用与数据安全层面提出的各项具体要求。对安全质量保障也从结果管控转向管控过程,将安全融入项目研发过程,
更正
兹有崔剑、姚宁同志发表在《电子技术与软件工程》杂志2019年12月上半月刊第133页中《基于社保核心平台三版规范为基础的葫芦岛市金保二期系统集成项目规划》一文,原作者单位:辽宁葫芦岛市劳动和保障服务中心信息分中心,更正为:辽宁葫芦岛市劳动和社会保障服务中心信息分中心。
《电子技术与软件工程》编辑部
2019年12月