跨文件,跨函数能力是什么?和污点分析能力有什么关系?
HDC 期间可参与华为开发者大会 Check 新人抽奖活动,活动链接在文末。无线鼠标等快来参与!
跨文件,跨函数能力是指 SAST 代码检查服务能够分析不同文件或函数之间数据流和控制流,从而发现更深层次问题的能力。这种能力对于 SAST 代码检查非常重要,可以深度的发现代码中的安全漏洞,因为很多问题并非局限在单个文件或单个函数内部,而是会涉及到多个模块之间的交互和调用。
那么顾名思义,跨文件能力指的就是代码检查服务能够分析不同源文件之间的关系,例如头文件的引用,全局变量的定义和使用,外部函数的声明和调用等。这种能力相对应的,可以帮助用户检测出头文件缺失,全局变量冲突,外部函数未定义等问题。
跨函数能力则是指代码检查能够分析同一源文件内或不同源文件中,各个函数之间的关系,例如函数的参数传递,返回值处理,异常抛出和捕获等。这种能力相对应的,可以帮助用户检测出参数类型不匹配,返回值未使用,异常未处理等问题。
至于污点分析能力,则是实现跨文件,跨函数能力的一种方式。
污点分析能力是用于识别和跟踪应用程序中的输入和输出数据,以及与其相关联的敏感信息,检测这些数据在整个处理过程中是否被篡改与污染,从而发现潜在的安全漏洞。具体介绍也可以查看我先前这篇文章《污点分析是什么神奇的代码检查技术?》。
但要实现跨文件,跨函数能力,还有别的的方法。我这里再举几个例子:
符号执行,可以通过使用抽象的符号来代替具体值,用于模拟程序的执行。这种能力可以保证每次遇到分支语句时,该抽象符号可以探索每一个分支, 将分支条件加入到相应的路径约束中;若约束可解,则说明该路径是可达的。符号执行的目的是尽可能多地探索更多的路径,并生成相应的输入数据,从而创建高覆盖率的测试套件或发现程序中的缺陷。
抽象解释,可以通过对程序状态空间进行抽象化和近似化,从而得到程序行为的一种方法。抽象解释的目的是在保证程序语义不变的前提下,尽可能的简化程序分析的复杂度,并提供程序性质的证明或反例。
数据流分析,可以通过对程序中变量或表达式在不同位置之间的信息传递来分析,从而得到程序行为的一种方法。数据流分析的目的是在保证程序语义不丢失的前提下,优化程序性能或发现程序错误。(注:污点分析可以说是数据流分析技术的其中一种方式)
上述这些方法都是跨文件,跨函数能力的重要组成部分,它们可以相互结合或与其他技术相互配合,从而提高程序分析的效率和准确度。
抽奖活动链接:https://bbs.huaweicloud.com/forum/thread-0228123477957050003-1-1.html
评论