首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静态代码评审方法

静态代码评审方法
EN

Security用户
提问于 2014-05-14 02:42:45
回答 4查看 3.5K关注 0票数 8

我的问题与Veracode与Fortify/AppScan使用的静态代码分析方法有关。

  1. Veracode -在不需要源代码的情况下查找应用程序二进制文件和字节码中的安全漏洞。
  2. Fortify/AppScan --分析实际的源代码以确定安全漏洞。

( A)与源代码相比,对二进制文件进行评审是否有好处/缺点?( B)哪一个提供更多的覆盖范围/漏洞。( C)任何例子都是很好的。

谢谢,

EN

回答 4

Security用户

发布于 2014-05-14 14:10:33

( A)与源代码相比,对二进制文件进行评审是否有好处/缺点?

编译器通常不会按照源代码中的意图明确地编写代码。例如,面向返回的编程利用了编译器将插入比程序员所知道的更多的RET操作码这一事实。由于流水线和其他优化技巧,编译器基本上可以重写您的代码,并且可能是添加他们自己的漏洞。 --这意味着源代码中的某些结构可能根本不能用二进制语言表示!

这是一个本质上不可能通过手动代码分析捕捉的错误.我怀疑Java/C# JIT代码的风险仍然存在,但这将被静态分析工具混淆。

手动源代码分析可以帮助事实,大多数常见的漏洞可以通过视觉检查捕捉到。此外,它还有其他好处,最显著的是减少了一般的防戳错误的数量。(因此,费用。)它也有助于社会方面:源评论鼓励人们写东西,就像别人在看一样。一个主要的缺点是,如果您处理的是动态类型语言,如PERL、Groovy、LISP及其衍生物.大多数数据要到运行时才会被查看,这意味着静态分析或源代码分析都不够。

您甚至可以通过在运行时将静态类型的代码转换为指令来欺骗静态分析工具。Veracode不喜欢您的java构造?使用反射重写它,Veracode bug就消失了,没有人更聪明。作为一名安全专家,您还需要假设在您自己的公司工作的程序员是潜在的威胁。

因此,简而言之,在任何给定的应用程序中,如果您希望成为一个可接受的安全代码库,就无法逃避源代码分析、静态分析和动态分析。

( B)哪一个提供更多的覆盖范围/漏洞。

源代码分析依赖于具有优秀安全技能的审核人员,而且由于他们是人,因此您不能合理地期望获得完美的性能。这就是为什么静态分析工具派上用场的原因。我的首选是先运行静态分析工具,然后在发现缓解后进行安全代码评审,我更喜欢使用STRIDE,但还有其他框架需要考虑。这使得人类能够集中精力解决那些与逻辑相关的不那么平凡的安全问题。但是一个聪明的人每周的任何一天都会打败一个愚蠢的静态分析工具。

源代码分析可以帮助你找到程序员留下的后门.静态分析工具不具备处理这一问题的能力。

所以这个问题的答案是..。“看情况而定。”你想不想受到什么威胁?

*除非“可接受安全”的定义是将窗户打开,而前门则不上锁。

票数 7
EN

Security用户

发布于 2014-05-14 13:24:25

一个人可以写关于这些事情的书,却永远不会感到满意。让我试着回答这个一般,而不是命名特殊的产品。

二进制/字节码分析

优势

  • (大部分)编程语言不可知论
  • 可以在任何地方获得的封闭源二进制文件/库上运行。
  • 可以找到由于编译器错误(或源语言的未定义行为)而引入的缺陷。

Disadvantages

  • 由于硬件的快速发展,通常很难编写/维护(例如可能还不了解Intel AVX)
  • 仅限于某些体系结构(在实践中很少有问题,因为大多数东西都运行在x86/x86_64上)
  • 多线程同步结构很难被检测到,如果有的话。

源代码分析

优势

  • 通常更容易跟踪实际源代码中发现的缺陷。
  • 通常,工具可以看到事物如何更好地协同工作的“更大的图景”(例如,在这里分配的东西、在那里分配的东西、在那里自由阅读的可能性)。
  • 在语义上提供更高层次的分析(例如,在某些计算中,整数溢出,在装配级别上是难以理解的移位和加法的混乱)
  • 源代码注释可以帮助工具理解正在发生的事情(例如:“相信我,这是一个同步原语,因此下面是原子的,不需要担心种族状况”)

Disadvantages

  • 必须提供源代码。
  • 可能不完全支持所有的语言(例如,C++模板元编程构造)
  • 可能无法准确地模拟将来运行的机器的属性(例如整数的大小等)。
  • 不会下降到库依赖项,这些依赖项可能仅作为二进制文件使用,或者在不同的系统上不同。

覆盖级别

这主要是正交的方式,工具的运作,并在很大程度上衡量该产品的质量。只要付出足够的努力,所有的工具都可以实现对各种漏洞的所有检查,但没有人拥有足够的人力。更容易做的事情会被完成;那些很难做的事情可能永远不会实现。

您可以有两种源代码分析工具,它们专注于完全不同的事情(例如,一种是关于竞争条件,另一种是针对溢出)。我确信,在这些工具之间总是有一些重叠,但是没有两个工具能够找到完全相同的缺陷。

如果你有这个可能,尽可能多的运行,你永远不知道在某个地方你是否有一个错误只能通过你还没有运行的工具中的一个找到.

票数 5
EN

Security用户

发布于 2014-06-27 19:34:08

简单来说,这两种方法都可以使用。混合或集成应用程序安全测试(IAST)将二进制文件和字节代码的动态应用程序安全测试(DAST)与静态应用程序安全测试(SAST)结合起来,以创建应用程序漏洞的统一视图。其目标不仅是发现漏洞,还可以帮助开发人员快速识别、解释和修复这些错误。混合工具超越DAST,使用静态分析来指向源代码的特定行,并扩展该工具的覆盖范围。此外,通过对SAST结果进行现场测试,IAST工具减少了假阳性--软件开发人员的危害。IAST可以利用SAST和DAST方法的优点,并抵消每种方法固有的缺点。例如,对SQL注入的动态测试可以确认攻击确实对数据库进行了攻击。通过检查代码来加快测试速度,以缩小攻击面;如果页面不执行任何SQL操作,则不需要测试页面进行SQL注入。IAST可以使用SAST来发现代码中可能隐藏在动态测试方法中的攻击面。

IAST工具的例子有来自方面的对比,Quotium技术的探索者,来自IBM的Appscan,Acunetix漏洞扫描器和HP WebInspect实时扫描。参见Jeff的博客文章为什么静态应用程序安全扫描器不能再切断它了?查看类似的问题交互式应用程序安全测试的有效性

票数 2
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/57918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档