网络安全 频道

张彦:源代码安全检测在企业中的应用

  【IT168 评论】9月23日消息,今日,由360主办的首届中国互联网安全大会在国家会议中心举行。在下午召开的企业安全论坛上,众多业界专家、企业代表、第三方分析机构等嘉宾参与并发表了演讲。北京奇虎测腾科技有限公司技术总监张彦做了《源代码安全检测在企业中的应用》演讲。


▲北京奇虎测腾科技有限公司技术总监张彦

  张彦首先介绍了源代码安全的现状,他谈到,第一是网络安全聚焦于应用安全,现在互联网安全越来越往非网络层往应用层偏移,其中90%漏洞都是存在于非网络层,而是在应用层。解决这些问题主要的问题还是聚焦在应用程序上的安全。无论是桌面程序还是网络应用;二是应用安全聚焦于源代码安全,在座很多人都或多或少知道片程序这样的工作,我们在编程序的时候首先第一步就是进行自学,编程序有的时候压力大,我们当然可能会从互联网上的社区里面获取一些源代码,或者是我们称之为它是拿来主义,这种拿来主义,比如说我要完成某一个功能,我可能拿过来的是一个一千行的代码,实际上完成这个功能只需要一百行代码就足够了。

  另外,900行代码实现了什么功能,里面有什么未完成的功能?都不尽而知,知道也不关心,因为完成现有的功能就足够了。一方面存在着拿来主义另一方面互联网自由软件缺乏监管,安全问题说不清楚。这样一来,为我们的源代码,各行各业所生产出来的源代码埋下了很多隐患。这些隐患存在大量的问题,比如危险函数使用不当可能会造成一些情况的发生。库里面所存在的安全问题也就顺延潜伏到了我们自己所生产的软件里面。

  Struts2安全事件大家都不陌生,就是因为Java提供的基础库存在着安全漏洞,造成所有这个版本生产出来的程序都存在这个漏洞。比较起来有很多给甲方在提交了我们的软件的同时,刻舟求剑的话,这个记号已经做下了。如果说我们没有良好的维护,没有后期的更新,这些问题已经潜伏到了马上要上线,或者是潜伏到了我们的软件中间去了。这些问题当然是一个一个的定时炸弹。

  开源软件中存在的漏洞事例有很多,包括360产品自己也曾经存在过因为使用开源问题,软件问题不当,而存在的问题。因此在那次事件之后,整个公司非常重视我们在使用开源软件情况时候存在的安全问题。包括360网站安全检测这个平台上,我们报出来的有大量的CMS或者是系统里面所存在的安全问题。这些问题都化为高危漏洞,这些网站没有良好的维护的话,这些漏洞会长期不存在。

  张彦讲到,源代码安全问题发散于多个层面,比如说传统的信息安全,教育上对源代码安全上重视也不够。另外就是软件从业人员对源代码知识的缺乏。其次就是源代码的安全保障缺乏方法和工具的支撑。比如说源代码安全问题,它的检测的这些软件,商用软件价格非常高,对于中小企业来说,是不菲的开支。另外国家或者甲方没有要求,当然我们也没有义务做这些工作,当然更广泛的工作就是国家没有相关标准,行业也没有相关标准。

  信息安全产业,安全缺失这块可以更多的做一个罗列。比如说我们从业人员并没有进行安培训,对安全问题没有足够的了解。也可能会存在不了解安全问题常见类型,更无从谈起发现安全问题如何修复。软件代码安全保证缺失,在测试人数上,可能做到了编程人员和测试人员的比例,但是国内大型企业里面,能做到1:4,倒过来,一个测试人员要测试4个程序员所测试的程序相当不错了。这是不争的事实。

  那么如何应对日益安全的安全问题呢?张彦说到,首先要从贯穿于整个软件开发生命周期设计和代码这浪个阶段就开始介入源代码安全检测。源代码安全检测应该得到足够的重视,企业应该把源代码安全检测作为软件质量的一部分。各个企业,大型企业已经开始重视,和饯行源代码安全工作的检测。

  另外就是加强开源原代码检测的管理,我们应该重视自己所产出的代码的安全性。也要深入的进行源代码安全研究,包括OWASP,CWE和国内很多科研院所要更加重视源代码实用化的工作。国家层面要从源代码安全制度上进行提升。

  对于源代码的安全检测方面,张彦介绍到,源代码属于白盒子测试,它和性能测试和功能测试比较起来,属于安全测试这一类,它实施的手段在源代码的早期阶段进行。它所进行的检测工作主要是找到如代码中存在的安全问题。我们对如代码安全检测赋予它一个新的职责就是找到源代码编程中不合规范的问题。源代码安全检测的重要性:从成本和社会影响来说,源代码安全检测可以节约成本。

  源代码安全检测原理:我们目前主要用的还是分析技术。我们的源代码用到的一个危险函数如果用的不当会造成危险问题,如果把代码里面把这样的危险函数找到的话,通过语法、词法分析、控制流和数据流分析,和符号执行,总而言之,就是用最快的手段,找到最准的问题,要使误报更小。

  还有一些其他的方法可以做对比,比如说除了静态分析里面谈到的基于编译器的方法之外,还有类型推断。等于。

  在软件质量管理中引入源代码安全检测,开展源代码安全检测存在阻碍。比如说软件上市的时间,本身会受到一些压力,要求修复的话会消耗时间,另外也会有修复的成本。管理人员角度往往在这两者之间做出决策。刚才太平洋保险的张总也谈到了,有的甚至是为了抢时间,有些公司也会带病运行,确确实实存在阻碍。

  还有一些额外的开发任务。如果源代码安全检测能在编译同时把问题呈现出来的话,当然我们在编程的同时就已经改进了。一般步骤首先是确立检测目标,其次是要对检测工具进行相关配置,检测结果要进行人工审计。最后由检测人员、审计人员、检测人员三个方面进行安全问题的修复。安全审计人员在源代码检测中还是必要的,因为目前的工具找不到,源代码确确实实由于技术和工具的不足,安全最终确认还是需要靠人。

  一般流程:设计的末端和编码以及测试三个阶段进行。关于源代码安全规范这块,我们企业也做了企业自己内部的安全编码规范。国际上能够去参考编制规范包括CERT,有C/C++和Java、Perl胡光俊安全编码标准,另外构造谷歌的代码规范,这是我们目前主要所参照的几种企业级的安全编程规范。在安全编程规范应用上主要是两种:

  一个是开展源代码编程规范的培训工作,还可以我们所编制出来的程序合不合规问题上进行自动化的源代码的合规性检测。

  几类的常见疑问:首先是谁来运营和使用源代码安全检测?我们所碰到的问题里面,开发人员往往把自己编写出来的程序都是当成自己的宝贝一样,非常的诊视,心底里不愿意接受其他人的指责我们源代码中间存在的问题。通过前面的安全培训,和在开发人员直接推行源代码安全检测从而可以让开发人员认识到自己所开发出来的程序或多或少是存在安全问题的。从而在更新,修复这些问题上,会迎刃而解。我们每次新员工培训的时候,跟老员工也要进行交流,最重要部分之一就是对源代码相关课程进行广大的散播,这也是我们所做的主要工作。

  另外一个,工具或者是人工会产生大量的检测的结果,对这些检测结果,我们建议还是要分级、分类重点问题重点解决。

0
相关文章