代码质量与安全–架起程序语义和业务逻辑之间的桥梁 – 作者:InfluenceMatters

我在编译器技术领域深耕已有30多年之久,包括Mips和Intel等公司。目前,我领导着鉴释科技静态应用程序安全测试(SAST)工具的核心开发工作。该工具能够分析处于静态状态的源代码,即在软件编译和运行之前检查软件是否存在错误。为了做到这一点,我们的工作已经超越了编程语言的语法范围。它不仅仅要检查源代码的“语法和拼写”,还要检查系统语义以及系统中的数据流。通过将编译器技术应用于其中,我们模拟数据在软件中的流动方式,并检测在运行期间可能出现的问题,而不是在运行时再去检测它。回归到本质,在二进制代码之前,我们进一步向下执行从抽象语法树(AST)到中间表示(IR)级别的编译器步骤,因此我们可以看到仅在编程语言代码中看不到的流程和动作。

1610943870_60050d7e2afd23c8110a0.png!small

陈新中,鉴释联合创始人兼首席技术官

为了进行完整的应用程序安全性测试,SAST一般不独立运行。 而且必须使用其他测试工具来查找软件中的缺陷和漏洞,例如动态应用程序安全测试(DAST)和交互式应用程序安全性测试(IAST)。DAST是目前应用最广泛的安全测试技术之一,用于在编译代码后运行时再检查软件。IAST则结合了SAST和DAST的元素,在应用程序内部进行分析。它可以在执行应用程序功能测试时完成安全测试,并且具有精度高,误报率低的优点。

现有的编程语言可被分为两种,一种是我们在其运行时就非常快速地对其进行分析并生成结果的C语言,C++等。 另一种则是JavaScript等动态语言,它们的特征是无法在运行时进行分析。但总会有一些直到运行时才能被分析的代码,这也是IAST和DAST被使用的原因。 对于没有在运行时分析的静态信息,我们可以在运行时确定输入的内容实际上来自外部,或者在运行时生成一些数据,从而改变了程序流。 因此,从状态时间到动态时间的协作分析实际上是最好的方法。

SAST工具一直在进步,但是仍然存在许多未解决的问题。 跨文件分析是我已经思考了十多年的一个特殊问题。这是一个真正的挑战,但幸运的是,我们能够用鉴释研发的静态代码分析工具爱科识解决这个问题。利用新算法,我们可以跨程序边甚至跨文件分析程序,并且可以在不占用大量内存的情况下快速进行此类分析。即使软件此时处于静态,我们也能够大致分析它在运行状态下的行为。例如,爱科识能够静态分析那些通常在运行时需要输入的程序流。

超出编程语言的另一个主要问题是我们如何应用业务逻辑验证。这不是编译器或语言问题。我们面临的挑战是,如何整合并满足公司业务重点所需的特定业务逻辑。例如,访问者在电商网站上结账时必须遵守的事件序列。这就是精确和自定义规则基础的用武之地。我们可以通过符号框架对副作用进行建模和分析用户定义的规则。如前文所述,建模是基于“数据流”完成的。 因此,它拥有非常快的分析速度,特别是与具有指数复杂性的传统形式逻辑方法相比。

静态代码分析可帮助各种规模的公司解决其业务问题,与所有行业都息息相关。现阶段,我正专注于嵌入式领域。比如,现在在中国乃至全世界,人工智能(AI)芯片设计都变得非常流行,初创企业如雨后春笋般涌现。物联网则是另一个巨大的增长领域,几乎每天都有新的智能设备问世。这些设备带来了巨大的信息安全问题,需要被扼杀在萌芽期。特别是在该行业,在没有严格合规性标准的情况下,多个设备之间存在着大量数据流。

当考虑所有这些挑战时,就会明白为什么分析代码的语义与语法同样重要,甚至更重要。现代应用程序体系结构是极其复杂的,所有软件开发都必须正确使用静态和动态应用程序安全性测试的黄金组合。 在中国,许多公司在程序分析、缺陷检测和性能优化方面都面临着挑战。希望爱科识能够为他们提供帮助。

来源:freebuf.com 2021-01-18 12:29:31 by: InfluenceMatters

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论