• 186 8888 8889
  • admin@baidu.com
  • 广东省广州市手机现金博彩科技大厦

行业知识

企业网络安全之代码审计

  源是一种提高软件安全性的方法。我们将了解一些的方法和工具,从人工到借助工具,最后会通过一些实例来看到如何通过现有的工具进行审计,以及这些工具如何帮助我们发现并消除。需要注意的是,在源阶段,一些产品安全设计上的问题可能已经较难被发现和修改,更多是发现代码实现上的错误和遗漏。

  在代码量可控的情况下,并且没有很好的工具支持时,我们可以考虑通过总结经验,自己实现相关的检查工具。以找到未正确过滤数据类型的为例,问题可以简单分为以下几个步骤:1)标注出高危行为入口,2)标注数据获取来源,3)标注数据过滤。之后回朔调用过程,添加简单的逻辑。

  对于代码量大的产品,人工审计明显不能满足需求,这时需要寻求工具的帮助。代码分析技术由来已久,1976年科罗拉多大学的Lloyd D.Fosdick和Leon J.Osterweil在ACM Computing Surveys上发表了著名的Data Flow Analysis in Software Reliability论文,其中就提到了数据流分析、状态机系统、边界检测、数据类型验证、控制流分析等技术。随着语言的不断演进,代码分析技术也在日趋完善。目前有数量众多的开源和商业源码审计工具建立在这些分析技术之上,其中包括Foritify,Coverity,FindBugs等。这些自动化的产品能够满足对审计量和强度的要求,并且大多提供和开发环境相整合的组件,可以融入到日常的开发和编译过程当中。工具不可避免会产生漏报和误报,在处理工具生成的报告时,需要人工对生成的结果进行验证。

  Coverity是斯坦福大学Dawson Engler教授和他的三个学生发起完成的工具,目前为包括NASA等500多个公司或政府部门提供服务。选择其为例的原因有:1)在具体的使用中感觉误报率相对较少,2)目前有免费针对开源的服务,3)可以找到相关的原型论文。Coverity支持的语言有,和,支持发现的问题类型包括:

  以/为例,Coverity的分析引擎Prevent包含以下的组件和功能参见表1。

  如果想看到实际Coverity运行的结果,可以在上浏览一些针对开源软件进行的审计结果,目前已经有为数众多的开源软件通过Coverity提高代码安全质量。图1是某个开源项目的输出结果。

  点击View Defect可以看到详细问题描述,现在以一个curl(一个利用URL语法在命令行方式下工作的开源文件传输工具)中的漏洞作为例子进行查看针对某问题的具体展示结果:

  这是一个存在于curl中的信息泄露。由于没有对SMB服务端返回的长度数据进行合法性检查,通过构造特定网络包数据,将导致curl客户端发送出非预期的数据,导致信息泄露。该漏洞也已被修复,分配的CVE编号为CVE-2015-3237,公告见。下面是Coverity给出的函数中漏洞触发流程。

  可以看到在满足以上代码数字开头的条件后,即可触发该漏洞,简化的流程如下:

  Curl客户端从服务端接到的数据包中提取出len的值,之后没有经过检查便将len作为长度参数传入Curl_client_write函数:

  Curl_client_write会将ptr指针后的len字节数据发送给服务端,即使len超过预期的数据包长度。

  Curl新版本中针对这个漏洞的补丁中增加了对len的长度检查,计算后的值不能超过已收到的smb数据包的边界(smb-got)。():

  至此,从这个漏洞分析过程,我们可以了解到Coverity审计的实际效果。返回搜狐,查看更多