0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

重一步逻辑验证,省百步漏洞补缺

西西 来源:电子发烧友网 作者:李隆博士 2021-04-09 09:23 次阅读

近年来,随着人工智能物联网等新兴科技的广泛应用,各种“智能”、“自动”的科技服务已经渗透到人们生活的方方面面。在这些服务的背后,是无数个应运而生的软件和应用程序在支撑。遗憾的是,软件行业的大繁荣并没有带来软件代码质量的明显提升。Forrester研究数据显示,82%的漏洞来源于应用程序。与软件规模、数量的井喷一同出现的,是软件漏洞的大爆发,以及随之而来的隐私泄漏、网络欺诈等漏洞“后遗症”。

面对如此巨大的风险,企业内部的软件开发团队通过践行代码审查、各种测试以及代码分析以期减少代码中的漏洞从而提高代码质量。然而,这些方法往往也只能确保“砖块”可用,由这些“砖块”搭建起来的建筑是否符合设计、是否安全可靠就很难验证了。由此,用以检测软件设计或功能实现上的缺陷或偏差的“业务逻辑验证”就应运而生了。

偏差是漏洞之源

一款软件从设计到实现,往往会被拆分成许多小的功能模块,分别实现后再组装整合。大量简单的业务逻辑被用于构建复杂而又丰富的业务逻辑,设计或实现上的偏差或缺陷都会导致漏洞的产生。实践中,团队在拆解实现时,即使顶层描述十分清晰,将文字表达翻译为编程语言,将笼统的语言描述到细节的代码实现,其中可能产生的偏差不是代码审查、各种测试和代码分析能够轻易发现的。同时,如果开发团队在不同模块接口之间的功能描述不够清晰、实现存在偏差,程序一旦运行,问题就会浮出水面。尤其是在增强软件功能、对原有功能改造以及新加入开发人员时,发生类似状况的风险也会上升。

此外,开发人员对第三方或者库函数的理解偏差,也会导致漏洞的发生。如谷歌浏览器Chrome的0day漏洞cve-2019-5786就是由于开发者对std::move()的理解不全面而造成的。对新标准、新接口的尝鲜心理普遍存在于软件开发者中,但在真正使用这些新事物之前,开发者自身需要投入时间精力,去学习并真正理解它。而且,并不是所有的新标准、新接口的设计都合理,如std::move(),其功能在一个编译器的优化流程中就能自动实现。通过开放一个接口,让开发者来尝试实现编译器优化未能完成的工作,同时提供了一个可能导致大量漏洞的来源,其目的和意义让人费解。

业务逻辑验证的重要性

业务逻辑验证,这个步骤可以帮助企业在被认可的合理范围内交付软件,而不是提供一个拥有过多或过少功能的半成品。功能过少的弥补方法相对简单,延长交付时间进行添加即可;而功能过多,则有可能提供了通往用户隐私数据的入口,从而导致不可挽回的严重后果,这类例子比比皆是。


图: 国家信息安全漏洞共享平台收集整理信息系统高危漏洞数量

智能家居普及的今天,黑客利用监控设备的漏洞将监控片段上传至互联网,造成用户隐私泄露,甚至财产损失的事件屡见不鲜。据CNCERT披露的《中国互联网络发展状况统计报告》显示,2020年信息系统的高位漏洞数量同比2019年增长52.2%。诸多例子都在警醒我们软件安全问题就潜伏在身边。

验证业务逻辑,就是从语言描述转换成扫描工具能够认识的检测原语,并证明其成立的一个过程。传统的验证方法是将语言描述转换为严谨的数学表达,证明过程繁复且困难,不仅用人门槛极高,且费时费力。而且一旦顶层的语言描述发生变化,整个推导过程又需要从头开始。在传统形式化方法的实践中,为了验证一行软件源代码,验证过程中需要写17行的代码去验证。此外,传统形式化方法在证明失败的地点分析问题的症结所在并不容易,往往需要沿证明路径倒推检查。一般的开发者并不具备轻易掌握传统方法的能力。

为提供高效的业务逻辑验证服务,最好的方法是在静态代码扫码工具上提供接口,让用户将其业务逻辑映射到对应的开发语言上,再由机器快速高效的完成验证工作。即,如果有某语言编写的一段程序,又有它的一段语言描述,只要代码扫码工具提供了相同编程语言的接口,就可将语言描述的业务逻辑映射到的验证引擎可以识别的接口函数上,对软件进行扫描,查看真正的实现是否符合了语言描述中所要实现的功能。全程由机器执行的工具不仅拥有更快的速度、更高的效率,其对使用者的水平要求也更低,更能直观地帮助客户了解软件开发的具体症结所在。在实践中,80%的客户的定制化验证需求是可以通过有限的扫描引擎描述接口由客户自行实现的,而另外20%的客户的特定的需求,则需要花费大量精力去帮助解决。

左移已是开发标配

软件生命周期包括:设计、实现、测试以及交付使用。早发现问题早解决,弥补的成本也随之而下降。在用户开始使用时才暴露出来的错误,其修复的人力和时间成本最高,远超过开发时就发现并修复的成本。与其在用户使用后才报错,不如在内部开发的早期就践行业务逻辑验证,确保 “我做的是客户想要的”,因为一个软件到实现功能之后再重新设计改造,其时间、人力成本都会很高。

关于作者

李隆博士专注于代码验证基础架构,现任鉴释科技首席科学家。李隆于2008年在中科大获得计算机软件和理论博士学位。其学术研究集中在应用基于程序设计语言理论的技术构建可靠高效的软件上,并发表了数篇期刊和会议论文。毕业后,李隆博士加入了三星电子,从事高级技术小组的统计机器翻译工作。并于2010年加入HP编译器团队,从事HP Non-Stop编译器后端和SDK。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 物联网
    +关注

    关注

    2859

    文章

    41097

    浏览量

    356915
  • 智能家居
    +关注

    关注

    1907

    文章

    9079

    浏览量

    178680
  • 人工智能
    +关注

    关注

    1770

    文章

    43089

    浏览量

    229913
  • 代码
    +关注

    关注

    30

    文章

    4527

    浏览量

    66448
  • 编译器
    +关注

    关注

    1

    文章

    1559

    浏览量

    48516
收藏 人收藏

    评论

    相关推荐

    TC275 TC1.6P 锁核(Checker)的功耗是非锁核的分之多少呀?

    TC275 TC1.6P 锁核(Checker)的功耗是非锁核的分之多少呀?
    发表于 02-06 07:36

    有什么方法可以进一步提高AD7714的分辨率啊?

    级放大再加给AD7714时,测得人分辨率还要低些。由于是用干电池得到AD7714的输入信号,该信号相对来说很稳定,而且板上的噪声也不是太大。请问各位大虾,还有什么方法可以进一步提高AD7714的分辨率啊?不胜感激!
    发表于 12-25 06:33

    ad9106如何将波形频率设置为进一步降低到10Hz?

    你好,我有个小问题。我使用100m时钟芯片。每个时钟只有10ns,ad9106寄存器的最小输出波形只有100Hz。如何将波形频率设置为进一步降低到10Hz?我已将配置设置为相关寄存器的最大值。拍
    发表于 12-01 06:12

    请问AD598中(A-B)/(A+B)这一步A和B是直流信号还是交流信号?

    请问AD598中(A-B)/(A+B)这一步中A和B是直流信号还是交流信号?
    发表于 11-14 08:07

    请问如何进一步减小DTC控制系统的转矩脉动?

    如何进一步减小DTC控制系统的转矩脉动?
    发表于 10-18 06:53

    STM8在待机模式如何进一步降低功耗?

    有什么方法可以进一步降低待机模式的功耗
    发表于 10-12 07:23

    系统逻辑漏洞挖掘实践

    当谈及安全测试时,逻辑漏洞挖掘一直是一个备受关注的话题,它与传统的安全漏洞(如SQL注入、XSS、CSRF)不同,无法通过WAF、杀软等安全系统的简单扫描来检测和解决。这类漏洞往往涉及
    的头像 发表于 09-20 17:14 297次阅读
    系统<b class='flag-5'>逻辑</b><b class='flag-5'>漏洞</b>挖掘实践

    请问在将压缩包压到tpu-nnct这一步中,如何知道版本与哈希值?

    一步,我下载的SDK文件名称为“Release_22.10.01-public”,这文件名里只有发布日期呀。
    发表于 09-18 06:47

    【触觉智能 Purple Pi OH 开发板体验】40PIN接口的GPIO测试以及下一步的适配计划

    个帖子的问题搞定了,ubuntu烧录好,老规矩adb进去先看下资源 再看下CPU 按照手册,先测试下GPIO,可以看到初始电平为低 用杜邦线拉高,再看下 可以见到成功的被拉高了,后面APP可以通过IO来适配我的其他传感器的信号了,下
    发表于 08-08 22:36

    请教大神,根据GIT上SDK配置指导,最后一步构建HELLO_WORD出现失败的原因

    我根据HPM_SDK的说明文档,在WINDOWS下一步一步执行里面的操作,最后尝试“4. 为Ninja-build产生构建文件:”失几,提示截图如下: 哪位大神指导下这是什么问题,是哪一步出错了吗?
    发表于 06-06 22:15

    用于LX2160和CX7评估板的DDR验证工具,为什么DDR验证不能使用这组参数?

    BIST-1 或其他)。但在 ATF 启动期间 BIST 测试正常。那么,问题是哪里出了问题?硬件有效,我可以从正在运行的硬件中获取正确的信息。为什么 DDR 验证不能使用这组参数?如何正确运行 ddr 验证?你能给我一步
    发表于 06-05 08:12

    步进电机接收低到高电平走一步,如果是从高到低呢?也会转一步吗?

    步进电机接收低到高电平走一步,如果是从高到低呢?也会转一步吗?
    发表于 05-10 15:07

    请问SPT3.1 PeakSearch第一步怎么用?

    S32R45EVB: 当我选择“peakSearch_256smp_64crp.pspt”检查第一步(Threshold screening)时,我发现结果并不像预期的那样: 几乎所有偶数
    发表于 04-23 10:42

    从几个方面阐述数字逻辑的可验证性设计

    特性不同,即使是相同的业务功能,设计出来的逻辑电路也千差万别。同样的道理,如果设计工程师也考虑了代码的可验证性,或多或少都会给设计逻辑电路带来些变化。  这些变化在IC设计者看来或许
    发表于 04-04 17:24

    2搞定拼版!AD通用拼版技巧分享!

    你是不是也看过很多拼版教程,整篇文章全部都是文字说明和各种图示,照着一步步去做,都需要些时间才能勉强搞定。之前我用过AD20的自带拼版工具,功能上比较简单,而且菜单没有全部汉化,对于新手来说
    发表于 03-29 10:33