我的问题与Veracode与Fortify/AppScan使用的静态代码分析方法有关。
( A)与源代码相比,对二进制文件进行评审是否有好处/缺点?( B)哪一个提供更多的覆盖范围/漏洞。( C)任何例子都是很好的。
谢谢,
发布于 2014-05-14 14:10:33
( A)与源代码相比,对二进制文件进行评审是否有好处/缺点?
编译器通常不会按照源代码中的意图明确地编写代码。例如,面向返回的编程利用了编译器将插入比程序员所知道的更多的RET操作码这一事实。由于流水线和其他优化技巧,编译器基本上可以重写您的代码,并且可能是添加他们自己的漏洞。 --这意味着源代码中的某些结构可能根本不能用二进制语言表示!
这是一个本质上不可能通过手动代码分析捕捉的错误.我怀疑Java/C# JIT代码的风险仍然存在,但这将被静态分析工具混淆。
手动源代码分析可以帮助事实,大多数常见的漏洞可以通过视觉检查捕捉到。此外,它还有其他好处,最显著的是减少了一般的防戳错误的数量。(因此,费用。)它也有助于社会方面:源评论鼓励人们写东西,就像别人在看一样。一个主要的缺点是,如果您处理的是动态类型语言,如PERL、Groovy、LISP及其衍生物.大多数数据要到运行时才会被查看,这意味着静态分析或源代码分析都不够。
您甚至可以通过在运行时将静态类型的代码转换为指令来欺骗静态分析工具。Veracode不喜欢您的java构造?使用反射重写它,Veracode bug就消失了,没有人更聪明。作为一名安全专家,您还需要假设在您自己的公司工作的程序员是潜在的威胁。
因此,简而言之,在任何给定的应用程序中,如果您希望成为一个可接受的安全代码库,就无法逃避源代码分析、静态分析和动态分析。
( B)哪一个提供更多的覆盖范围/漏洞。
源代码分析依赖于具有优秀安全技能的审核人员,而且由于他们是人,因此您不能合理地期望获得完美的性能。这就是为什么静态分析工具派上用场的原因。我的首选是先运行静态分析工具,然后在发现缓解后进行安全代码评审,我更喜欢使用STRIDE,但还有其他框架需要考虑。这使得人类能够集中精力解决那些与逻辑相关的不那么平凡的安全问题。但是一个聪明的人每周的任何一天都会打败一个愚蠢的静态分析工具。
源代码分析可以帮助你找到程序员留下的后门.静态分析工具不具备处理这一问题的能力。
所以这个问题的答案是..。“看情况而定。”你想不想受到什么威胁?
*除非“可接受安全”的定义是将窗户打开,而前门则不上锁。
发布于 2014-05-14 13:24:25
一个人可以写关于这些事情的书,却永远不会感到满意。让我试着回答这个一般,而不是命名特殊的产品。
这主要是正交的方式,工具的运作,并在很大程度上衡量该产品的质量。只要付出足够的努力,所有的工具都可以实现对各种漏洞的所有检查,但没有人拥有足够的人力。更容易做的事情会被完成;那些很难做的事情可能永远不会实现。
您可以有两种源代码分析工具,它们专注于完全不同的事情(例如,一种是关于竞争条件,另一种是针对溢出)。我确信,在这些工具之间总是有一些重叠,但是没有两个工具能够找到完全相同的缺陷。
如果你有这个可能,尽可能多的运行,你永远不知道在某个地方你是否有一个错误只能通过你还没有运行的工具中的一个找到.
发布于 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的博客文章为什么静态应用程序安全扫描器不能再切断它了?查看类似的问题交互式应用程序安全测试的有效性
https://security.stackexchange.com/questions/57918
复制相似问题