我将从移动应用安全风险概述、应用安全测试技术概述、静态代码检测技术与应用实践四个方面来阐述。
01
移动应用安全风险概述
移动应用的安全风险主要包括以下几个方面:
通用漏洞:权限校验、错误配置、命令执行、SQL注入、XSS等;
业务逻辑漏洞:水平/垂直越权、短信轰炸、批量注册等;
后门恶意代码:各类Webshell木马、后门及异常行为代码等;
开源成分的缺陷及后门:不限于CNNVD、CNVD、CVE等漏洞;
其中占比最大的是开源成分的缺陷及后门,这主要由于当前大家开发越来越依赖开源组件,也埋下了极为严重的供应链安全风险。
同时,在当前移动业务开发的过程中,不论是在开发方式、应用协作发布方式、应用架构设计以及基础设施环境上都发生了跃迁式的变化。
1
新制品:在数字应用编程开发方式上,正从闭源开发向混源开发和开源开发演进。
2
新发布:在应用协作发布方式上,正从传统的瀑布式开发向着敏捷开发和DevOps研运一体化演进。
3
新架构:在应用架构设计上,正从单体应用向微服务和Serverless架构演进。
4
新环境:在基础设施运行环境上,正从物理机向虚拟化和容器化演进。
在这些新的研发生态下,移动应用安全挑战下的应对方式有以下几点:
一、大部分企业的软件化都在走类似工业化、自动化路线,为了快速上线或者高效迭代,那么安全也需要适配应用研发迭代的自动化流水线。
二、任何漏洞检测和缺陷检测都须适配端(客户端)到端(服务端)的检测场景。
三、安全左移,将安全措施提前到开发阶段,通过在早期阶段就考虑安全因素,能够更好地减少缺陷和漏洞的修复成本。
四、要覆盖各类的安全缺陷,除了服务端,还包括客户端等。
02
应用安全测试技术概述
当前的应用安全检测与分析市场主要涵盖的产品大致有:SAST(静态应用安全测试,通过用源码分析缺陷);SCA(软件成分分析,分析软件的组成、组件漏洞、开源风险);IAST(交互式应用安全测试,通过交互式流量,触发缺陷检测);DAST(动态应用安全测试,通过主动流量发送,检测应用缺陷)。
每种技术都有对应的应用场景,也有不同的优劣,需要大家在推广使用中去综合判断和考量。
今天我们主要讨论的是SAST静态代码检测,它主要以应用源代码或编译中间文件为检测对象,第二,以程序分析技术为基础并作延伸扩展,第三,SAST静态代码检测技术的一大特点是覆盖面会更广,SAST能够覆盖到代码的每一个角落,包括那些在动态测试中可能不会被执行到的代码路径。第四,在DevOps/敏捷迭代场景下,要求SAST具备新的特性,比如更快的检测速度、更精准的检测结果以及更易于流水线集成。第五,静态代码检测最终达到目的是通过优秀的算法,可以接近编译器对代码的理解,接近动态运行的实际情况。
在实际应用过程中,在整个研发阶段,静态代码检测可以用到从开发测试到部署上线阶段,具体覆盖比如编码阶段,开发者可以在编写代码的同时使用SAST工具,实时检测潜在的安全问题;在代码仓库,一般会做全量的代码仓库扫描,或者开发者可以在创建一个合并请求前,设置自动化流程触发SAST检测,确保代码合并前不会触发安全问题;在构建编译阶段,将SAST集成到构建编译流程中,确保每次构建都伴随着安全检查;最后是上线前进行全量检测和制品检测。
03
静态代码检测技术
静态代码检测技术源于程序分析技术。程序分析(软件分析)技术可深入软件系统内部, 细致地考察其结构及各个组成部分, 进而发现其各种特性, 如性能、正确性、安全性等。程序分析主要研究两大领域:程序的优化和程序的正确性。前者研究如何提升程序性能并且降低程序的资源占用,后者研究如何确保程序完成预期的任务。
静态代码检测技术是程序分析技术的应用和扩展,控制流分析、数据流分析、符号执行等技术都源自程序分析技术。SAST可以在程序的开发阶段就发现软件应用的缺陷,修复成本更低、检测覆盖面相对于其他测试技术更广泛。
在前文谈到的移动应用安全面临权限类、配置类、输入输出校验类、信息泄露类风险等对应的代码检测模型包括配置检测模型、语义检测模型、控制流类检测模型以及数据流类检测模型。
整个SAST静态代码分析可分为五个过程:
源代码解析,这个阶段涉及将源代码转换成一种更容易分析的形式,如结构化数据。
生成中间表示,中间表示是程序分析的基础,用于后续分析。
生成程序表示图,根据中间表示,生成控制流图(CFG)、数据流图、调用图等程序表示图。这些图形化表示帮助分析工具理解程序的执行路径和数据流动。
精度提升,仅依赖AST及各类分析图,会丢失部分语言特性 ,需要引入其他的分析技术,提升检测精度。
检测逻辑,基于前阶段的基础,具体缺陷检测逻辑。
例如,配置检测方面,通常基于抽象语法树(AST)来执行。AST提供了程序的层次结构表示,它简化了源代码的复杂性,使得分析过程更加直观和标准化。在AST的基础上,我们可以轻松地实现一些基本的检测任务。
例如,配置文件中的安全性检测或者寻找代码中潜在的空口令问题。假设存在一个变量Password,通过AST分析,我们可以识别出当Password被设置为空值的情况,从而检测到潜在的空口令风险。
数据流分析方面,安全行业数据流分析一般以污点分析为主,在静态污点分析中,通过模拟数据流经程序的路径,识别哪些数据是污点数据(即可能来自不可信源)。
类继承和指向分析方面,在静态代码分析中,面向对象编程语言的特性确实带来了一些挑战,特别是在处理继承、实现关系以及对象传递等方面。分析工具必须能够追踪一个类是如何从父类继承属性和方法的,以及在类层次结构中各个类的位置。指向分析在Java语言里,可以分析对象的传递,也可用于确定同一接口或父类多个实现类情况下的真实实现类。可以有效提升检出率。未实现指向分析,会产生一定的误报。
对象的域(字段)敏感性,敏感性分析是我们判断程序分析准不准确的重要技术,可以将具体的数据流跟踪精确到每个对象的字段,不支持域敏感会造成一定的误报。
反射代码识别,反射是属于语言特性的一种,也是比较难处理的一种情况,SAST工具没有实现反射的支持和解析,会造成反射场景的漏报。
04
静态代码检测实践
一、LLM在缺陷代码修复的实践
随着大语言模型的兴起,我们对LLM和SAST的结合进行实践和评测,发现合理运用LLM能力在代码修复上有好的表现。
通过将用户代码进行分块并构建向量索引、建立用户代码向量库,基于RAG及LLM编排技术,AI大模型对需要修复的漏洞代码进行检索,快速精确地匹配并提供最适合当前代码上下文的修复方案及修复建议。
软件开发团队在开发过程中解决代码安全问题,特别是在处理大规模代码库时,AI智能修复功能可以大幅度减少人工审查的工作量和时间,加速开发进度。
二、SAST落地实践
SAST的部署与实施是一项长周期且复杂的任务,很多问题和痛点也需要持续解决。比如传统的SAST工具难以和企业现有的工作流集成,需要企业选择合适的SAST工具,工具能够支持代码语言和框架,并且能与公司软件使用的底层框架集成。
此外,检测速度低、误报高、无明确修复建议给出也会影响企业开发进程,需配备高效检测引擎,并通过编写新规则或更新当前规则来查找其他安全漏洞,新配置可以通过编写新规则来减少误报的可能性,分析扫描结果并消除误报。问题最终确定后,应对其进行跟踪并移交给部署团队进行修复。在整个过程中,需要适当地培训和监督工具使用者,可以确保正确使用工具并发挥更多检测价值。
最后,在软件迭代研发各个阶段插入SAST,对整个研发流水线、CI/CD过程卡点检测及阻断,比如在开发制品库阶段、在开发工具阶段配备IDE检测插件、在代码仓库阶段、发布制品阶段、上线运营阶段等进行持续检测。
05
悬镜灵脉SAST白盒代码审计平台
灵脉SAST白盒代码审计平台是基于多模智能引擎的新一代静态代码安全扫描产品,提供源代码缺陷检测、源代码合规检测、源代码溯源检测三大能力,能从编码源头识别安全风险,帮助企业解决软件开发过程中的安全缺陷、质量缺陷和编码规范缺陷,确保研发团队高质量交付。
无所不至,安全无死角
1
强大的AI多模引擎,为您提供360度全面无死角的检测能力。
2
支持30+开发语言,涵盖主流语言版本和相关特性,兼容语言扩展和方言,并支持多语言混合检测。
3
7000+典型缺陷检测器,涵盖安全缺陷、质量缺陷、编码规范三大分类,更支持代码级API安全扫描。
4
内置国内外常用标准集,满足金融、汽车、军工、科研院所等不同行业场景的合规检测需求。
5
兼容信创,支持容器化高可用部署。
6
支持各类敏捷集成工具,无缝融入开发团队的工作流程中,由此实现DevSecOps开发模式落地。
快速精准,友好易用
1
基于Al大模型智能聚类分析,各语言误报率不超过15%,漏报率不超过13%。
2
提供快速检测能力,检测速度可达百万行/小时。
3
支持过程间污点跟踪分析,提供灵活自定义污点配置。
4
支持编译检测和不编译检测,不编译检测适用于片段代码等日常快速检测,编译检测适用于高标准的精确检测场景。
SCA 双倍融合,一键供应链安全审查
1
融合SCA双倍AI驱动引擎进行同步检测,并支持组件漏洞可达性分析,通过评估第三方组件的安全性、审查代码的合规性和最佳实践,帮助确保整个数字供应链的安全性和可信度,提供供应链安全审查并实现供应链安全能力支撑。
2
联动XSBOM供应链安全情报,结合企业软件SBOM清单,为企业安全管理人员第一时间精准个性化推送漏洞风险、投毒事件、许可证风险、断供风险等安全事件信息,帮助企业和用户及时应对数字供应链安全风险。
流程闭环,智能修复
1
提供缺陷从检测发现到审计关闭的全流程闭环操作。
2
包括详尽的缺陷介绍、示例代码,以及基于AI智能算法的代码修复示例。
3
支持携带审计、自动审计、结果比对等操作,并对检测结果生成报告,为后续代码优化提供辅助建议。