关键词:
微服务
静态分析
身份认证缺陷检测
摘要:
随着互联网技术的发展,软件使用场景日趋复杂,应用程序的规模也逐渐增大,传统的单体应用已经无法支撑起如今巨大的访问量场景。近几年,微服务架构的出现解决了传统单体应用和垂直应用架构的不足。在今天,已经有许多微服务开发技术应用在生产环境中。在微服务快速发展的同时,微服务应用程序的安全问题也受到研究人员的广泛关注。其中,应用程序自身代码错误和设计缺陷导致的身份认证问题是困扰研究人员的主要问题之一。静态分析作为一项可以检测软件源代码安全性和规范性的重要技术,能够将代码中的问题提前暴露出来,降低了线上崩溃的风险,但是,要检测微服务身份认证缺陷,需要解决以下三个问题:(1)由于微服务的运行时特性使得静态分析在构造过程间调用图时不够精确,进而影响静态分析结果的准确性。(2)由于微服务快速且小范围地更新迭代特点,导致原本耗时就长的静态分析在微服务上会产生更多的重复分析进而增加耗时。(3)现有的身份认证缺陷检测方法存在人工成本高、检测环境搭建复杂、无法在开发阶段提前暴露缺陷的问题。为解决上述问题,本文提出了运行时特性解析算法,实现了对调用图缺失调用边的补全;提出了调用图增量更新算法,有效减少了微服务调用图构造耗时。本文在这两项关键技术的基础上实现了基于静态分析的微服务身份认证缺陷检测算法,该算法从源码角度分析,无需搭建受检程序运行环境,在少量人工配置下即可准确高效地完成微服务身份认证缺陷检测,将缺陷在开发阶段提前暴露出来,有效维护了用户的隐私数据和财产安全。本文具体工作与创新点如下:(1)针对Java微服务应用程序中存在的运行时特性,导致静态分析在构造过程间调用图时丢失调用边的问题,本文为过滤器、拦截器等五类在Java微服务应用中常见的运行时特性,分别设计了相应的解析算法,解决了调用图运行时调用关系不完整的问题。本文通过与原生Soot构造调用图的对比实验,证明了运行时特性解析算法能够在保证调用图构造耗时基本不发生变化的情况下精准地捕捉到缺失的调用关系,并初步验证了运行时特性解析算法能够提升身份认证缺陷检测的准确性。(2)针对静态分析在处理频繁更新迭代的微服务应用时出现的构造调用图耗时劣化的问题,本文提出了基于变更集的微服务调用图增量更新方法,旨在减少构造调用图时产生的重复计算,进而达到缩短调用图构造耗时的目的。本文设计了三种操作:增加、删除、修改,以模拟应用的更新迭代,与原生Soot构造调用图的耗时进行对比。实验结果表明,微服务调用图增量更新算法在测试项目中平均耗时减少了 15.2%,并且随着迭代次数的增加,增量更新算法能够带来更多的耗时缩减收益。(3)针对现有身份认证缺陷检测技术成本高,且无法在代码开发阶段提前暴露缺陷的问题,本文在运行时特性解析和调用图增量更新两项关键技术的基础上,设计了微服务身份认证缺陷数据流分析算法,实现了通过追踪包含身份认证信息变量的传递流程来判断调用链路是否包含身份认证。此外,本文还设计并实现了微服务身份认证缺陷检测工具AuthStaticChecker。实验结果表明,本文算法能够有效地在微服务应用开发阶段从源代码角度提前暴露程序中存在的身份认证缺陷,并验证了本文算法相较于原生Soot分析具有更高的准确性和分析效率。