我在编译器技术领域深耕已有30多年之久,包括MIPS和Intel等公司。目前,我领导着鉴释科技静态应用程序安全测试(SAST)工具的核心开发工作。该工具能够分析处于静态状态的源代码,即在软件编译和运行之前检查软件是否存在错误。为了做到这一点,我们的工作已经超越了编程语言的语法范围。它不仅仅要检查源代码的“语法和拼写”,还要检查系统语义以及系统中的数据流。通过将编译器技术应用于其中,我们模拟数据在软件中的流动方式,并检测在运行期间可能出现的问题,而不是在运行时再去检测它。回归到本质,在二进制代码之前,我们进一步向下执行从抽象语法树(AST)到中间表示(IR)级别的编译器步骤,因此我们可以看到仅在编程语言代码中看不到的流程和动作。
陈新中,鉴释联合创始人兼首席技术官
为了进行完整的应用程序安全性测试,SAST一般不独立运行。 而且必须使用其它测试工具来查找软件中的缺陷和漏洞,例如动态应用程序安全测试(DAST)和交互式应用程序安全性测试(IAST)。DAST是目前应用最广泛的安全测试技术之一,用于在软件运行过程中检查问题。IAST则结合了SAST和DAST的元素,在应用程序内部进行分析。它可以在执行应用程序功能测试时完成安全测试,并且具有准确度高,误报率低的优点。
现有的编程语言可被分为静态和动态语言两种,C 和C++ 是静态型语言,在编译时就能快速地对代码进行分析并生成结果。 JavaScript等是动态型语言,它们的很多特征是无法在编译时进行分析。有些漏洞是静态分析无法判断的,此时就要依赖IAST和DAST来把关。 没法在编译时分析的信息主要包括,在运行时来自外部输入的信息,以及在运行时程序生成的某些数据,从而改变了程序流。 因此,从静态到动态的协同分析实际上是最好的方法。
SAST工具一直在进步,但是仍然存在许多未解决的问题。 跨文件分析是我已经思考了十多年的一个特殊问题。这是一个真正的挑战,但幸运的是,我们能够用鉴释研发的静态代码分析工具爱科识™解决这个问题。利用新算法,我们可以跨程序边甚至跨文件分析程序,并且可以在不占用大量内存的情况下快速进行此类分析。即使软件此时处于静态,我们也能够大致分析它在运行状态下的行为。例如,爱科识™能够静态分析那些通常在运行时需要输入的程序流。
超出编程语言的另一个主要问题是我们如何应用业务逻辑验证。这不是编译器或语言问题。我们面临的挑战是,如何整合并满足公司业务重点所需的特定业务逻辑。例如,访问者在电商网站上结账时必须遵守的事件序列。这就是精确和自定义规则基础的用武之地。我们可以通过符号框架对副作用进行建模和分析用户定义的规则。如前文所述,建模是基于“数据流”完成的。 因此,它拥有非常快的分析速度,特别是与具有指数复杂性的传统形式逻辑方法相比。
静态代码分析可帮助各种规模的公司解决其业务问题,与所有行业都息息相关。现阶段,我正专注于嵌入式领域。比如,现在在中国乃至全世界,人工智能(AI)芯片设计都变得非常流行,初创企业如雨后春笋般涌现。物联网则是另一个巨大的增长领域,几乎每天都有新的智能设备问世。这些设备带来了巨大的信息安全问题,需要被扼杀在萌芽期。特别是在该行业,在没有严格合规性标准的情况下,多个设备之间存在着大量数据流。
当考虑所有这些挑战时,就会明白为什么分析代码的语义与语法同样重要,甚至更重要。现代应用程序体系结构是极其复杂的,所有软件开发都必须正确使用静态和动态应用程序安全性测试的黄金组合。 在中国,许多公司在程序分析、缺陷检测和性能优化方面都面临着挑战。希望爱科识™能够为他们提供帮助。
关于作者
作为鉴释首席技术官兼联合创始人,陈新中指导鉴释科技在中国的核心研发团队开发静态代码分析工具。开发者,测试人员,质量保证专业人员和高级IT管理者都会使用这些工具来进行深入的源代码缺陷和漏洞检测。
责编:Yvonne Geng