业界代码安全分析软件介绍

前言

    应用安全分析类型按照使用场景分为四类方向:

    静态AST(SAST)技术通常在编程和/或测试软件生命周期(SLC)阶段分析应用程序的源代码,字节代码或二进制代码以查找安全漏洞。

    动态AST(DAST)技术在测试或运行阶段分析应用程序的动态运行状态。 它模拟针对应用程序(通常是支持Web的应用程序和服务)的攻击,分析应用程序的反应,从而确定它是否易受攻击。

    交互式AST(IAST)技术同时结合了SAST和DAST的元素。 它通常作为测试运行时环境中的代理实现(例如,测试Java虚拟机[JVM]或.NET CLR),用于观察操作或攻击并识别漏洞。(可以发现iast类似于rasp,可以同扫描器结合起来将安全检测融入产品,通过类似于打桩的机制判断漏洞真实性。)

    Mobile AST对字节或二进制代码执行SAST,DAST,IAST和/或行为分析,以识别移动应用程序中的漏洞。

考量点

    静态代码审计目前比较好的案例有Android方面改造的静态检查组合sonarLint + findbugs + Android Lint 。但是对于服务器端代码质量和安全方面都检测手段还是严重不足的。目前的开源工具普遍适用于表现在对代码检测,而不是安全检测,发现着重于bugs而不是vulnerabilities。

开源工具介绍

参与此次分析介绍的软件有以下工具

  1. https://github.com/google/shipshape
    这是google发布一个静态程序分析平台,采用go语言编写,支持js、java、python以docker镜像方式运行。可以通过对接api使用go语言和java(暂无介绍)实现分析器。最近代码更新于两年前,目前有176 star。

  2. https://github.com/google/error-prone
    errorprone同样是google出品,已经支持集成在shipshape(checkstyle、findbugs也支持)上。主要用在google内部的java编译系统中来发现严重的code mistakes。特点在于静态类型分析检查,可以发现一些编译过程中不易被发现的错误。优点在于hooks在build过程,成熟度高可以保证集成在ci中。支持快速部署在Maven和gradle脚本中。

  3. https://github.com/facebook/infer
    infer是Facebook出品,使用OCaml编写的的静态分析语言,支持java、object c和c语言。可以检查java和android程序的空指针异常、自由泄漏、资源竞争条件等漏洞。市场反应好,star数8182。

  4. fireline- http://magic.360.cn/zh/index.html
    360Web平台部Qtest团队开发的一款免费静态代码分析工具。主要针对移动端Android产品进行静态代码分析。其最为突出的优点就是资源泄漏问题的全面检测。同时,火线与360信息安全部门合作,推出了一系列针对移动端安全漏洞的检测规则。免费使用,并支持Android Studio插件,Jenkins插件,Gradle部署等多种集成方式。

  5. https://spotbugs.github.io/
    spotbugs专注与java程序的老牌bug检测工具。支持规则和种类较多。

  6. https://github.com/find-sec-bugs/find-sec-bugs/

  7. findsecuritybugs更专注于javaweb和安卓漏洞的发现,拥有125种漏洞判断类型, 787 个api的特征检测。

测试方案

    根据收集的业界漏洞demo,完成实现30个测试用例,目前支持springmvc+freemarker+mybatis的架构方式,力求尽量展示漏洞原理和场景,涵盖对xss、jstl、任意文件上传下载、文件包含、sql注入、spring表达式、命令执行、反序列化、ssrf、目录遍历、xxe、高危函数引用的多项测试案例。希冀通过这样的门槛用例评各项开源代码分析软件的使用效果,达到查漏补缺的数据支持,实现“拿来主义”的效用。

测试源码地址: NA

比对结果展示

    coverity

    测试方法为通过coverity提交构建任务,在五分钟的轮循环后顺利执行检查。默认配置检视项目共耗时8 min 30 sec,其中11sec为序列等待,8 min 19 sec为Checking out、build、compile、analysis、commit整个的流程的时间,瓶颈在于平台系统软硬件配置、数据库性能、编译参数的设置。显示效果如下图所示,在安全视图检查出来的问题为0,在质量类检查出5个null类型引用的问题。

    经过简单调优,步骤为去除配置错误的—security(只对c、c++项目有效)。–disable-fb(会去除findbugs插件),增加–webapp-security-preview和–webapp-security选项。重新运行后共耗时3 min 56 sec,新增7处安全问题,发现重定向、文件下载、信息泄露等问题。

业界代码安全分析软件介绍_第1张图片

    可以看到效果显著,除此之外可以针对jsp文件编译检查(jsp是一种特殊的java文件,标签库、模板引擎都可以转换为java文件)。总体认为熟悉后优化依然空间巨大。其他开源软件方面:

  1. shipshape
    测试步骤为使用docker搭建shipshape,填入源码目录即可,centos7环境运行失败,https://github.com/google/shipshape/issues/124,但是考虑到它作为一款集成性的平台,并未有我们可以利用的有效规则,暂不深入。此处记为遗留问题,后续关注。

  2. errorpone
    该工具使用简单,通过maven构建阶段即可check,尚未检测出问题,工具的原理是试用编译器hook的形式,在javac阶段编译,对于java服务器端项目检测能力有限。

  3. infer
    使用infer同样分析源代码,结果为0。业界代码安全分析软件介绍_第2张图片从原理上说出现这样原因有三:infer用于检测 Android 和 iOS 应用的问题,漏洞检测规则在java开发场景中会偏少;二、infer运行时首先是捕获阶段,对原生的javac支持较好,对于maven效果较差。值得一提的是Infer转换源代码OCaml数据结构的中间文件,.cfg 文件包含了代码文件中每个函数或方法的控制流程。.cg 包含了代码文件中定义的函数的调用关系,以及该文件对外部函数的调用关系。 .tenv 包含了代码文件中定义和用到的类型,这种思路值得我们借鉴。第二步为分析函数,如果不关联则停止,那么对于j2ee框架就是完全不支持,难以智能实现。

  4. fireline:

    360出品的工具同样没能发现相关安全漏洞,如下图所示:业界代码安全分析软件介绍_第3张图片报告了5项有效的代码规范问题。这款工具同infer的异同一张图可以显示:业界代码安全分析软件介绍_第4张图片

    这款工具主要在于移动应用,但是在安全规则方面将规则进行分类整理的思路值得借鉴。

  5. spotbugs 发现三项缺陷,效果不如find-security-bugs显著,不过这是比对项目里支持gui模式的工具。业界代码安全分析软件介绍_第5张图片

  6. find-sec-bugs发现六项缺陷,发现四处高危代码漏洞,效果显著。

业界代码安全分析软件介绍_第6张图片


需要改进的功能

    通过一系列的试用和体验,逐步可以梳理出来开源静态代码扫描软件项目的的普遍趋势:少量支持docker部署方式,开放api,

提供gradle,ant、maven构建方式,少量提供集成于eclipse、idea的插件支持。软件均没有在设计之初就针对多语言做到大而全,而是专注小而精的规则。此外针对node.js的项目已经有开源工具https://github.com/ajinabraham/NodeJsScan,针对python的bandit,针对go的golint本文不再介绍。

分析设计思路和理念

    静态代码检测工具涉及的基本流程为:对于一些特征较为明显的可以使用正则规则来直接进行匹配出,比如硬编码密码、错误的配置等,这方面使用rasp项目的规则也可以用,正则的效率会是问题。对于OWASP Top 10的漏洞,通过预先梳理能造成危害的函数,并定位代码中所有出现该危害函数的地方,继而基于Lex(Lexical Analyzer Generator, 词法分析生成器)和Yacc(Yet Another Compiler-Compiler, 编译器代码生成器)将对应源代码解析为AST(Abstract Syntax Tree, 抽象语法树),分析危害函数的入参是否可控来判断是否存在漏洞。通过操作类的字节码返回解释器执行,具体可以使用 asm或者 Javassist技术实现。业界代码安全分析软件介绍_第7张图片

优秀公司实践:

  • google

    使用gerrit这样的代码review系统基本保障质量,曾经使用过数年的各项商业软件。Error Prone用在Google的Java构建系统中,发现并减少各种严重Bug。

  • 阿里

    消息显示阿里内部SDL推行较早,使用称为stc的软件,s一直在做推进安全编码,也有自研源码扫描器。主要是项目周期短,发布快,项目又多,安全人员少,只能尽量走自动化路线,但是像漏洞和代码分析,架构设计安全审计这些,自动化目前还无法办到。

  • 华为

    华为使用商业安全工具平台,有自定义规则,但是没有自研产品。

细分商业领域产品厂商

gartner关于应用安全测试方面的魔力象限:

业界代码安全分析软件介绍_第8张图片

  • coverity

    Synopsys即coverity厂商,在软件和半导体领域提供多种产品。 去年Synopsys完成对Black Duck的收购(关于开源产品的安全检测)。 公司对应用安全产品的整合有–Cigital,Quotium的Seeker IAST和Condenomicon,Protecode和Coverity,为Synopsys提供IAST,SAST和SCA功能。

领先优势

Seeker仍然是最广泛采用的IAST解决方案之一,提供广泛的语言覆盖和良好的SDLC集成。 Synopsys为Seeker引入了仅限代理的IAST,不需要导入器。 支持了一些IAST提供的被动测试模式。

SecureAssist非常适合DevOps模式,因为它提供了与IDE的强大集成,可以在开发阶段早期提供SAST拼写检查器。 Synopsys利用Coverity引擎在SecureAssist中引入了对JavaScript分析的支持。

Synopsys提供了一整套适用于各种用例的AST产品,包括通过Defensics提供的各种模糊功能(输入模糊,协议等)。

Synopsys在IoT AST领域处于优势地位,它支持各种协议,如XMPP,MQTT,CoAP和AMQP(通过Defensics)。

  • fortify

    Micro Focus是Fortify品牌下AST产品和服务的全球供应商。产品在北美以及欧洲和亚太地区市场拥有强大的影响力。Fortify提供静态代码分析器(SAST),WebInspect(DAST和IAST),软件安全中心(其控制台)和Application Defender(监控和RASP)。 Fortify通过Fortify on Demand(FoD)将其AST作为产品以及云中的产品提供。Mobile AST通过FoD提供。 Fortify的SAST可以通过Eclipse IDE中的拼写检查器(称为安全助理)利用实时在线漏洞检测功能。

    在过去的一年中,Micro Focus Fortify为WebInspect引入了增量扫描功能,以便仅对Web应用程序的更改内容进行持续测试。 多线程功能被引入到SAST产品中以帮助提高扫描时间。 另外,通过机器学习辅助审计对漏洞验证的改进降低了SAST周转时间。Micro Focus Fortify的AST产品应该被寻求全面的AST功能的企业所考虑,无论是作为产品还是服务,或者两者兼而有之,都具备企业级报告和集成功能。

领先优势

    Fortify是全球知名品牌。 在广泛的AST使用案例的客户名单中,特别是在需要多种测试技术的情况下。 它以提供创新产品和服务而闻名。拥有最完整的SDLC集成之一 例如,为流行的IDE和CI / CD工具提供开箱即用的集成。(使用效果较好,称为workbench)Fortify的SAST具有最广泛的语言支持,并提供一系列部署选项,使其非常适合复杂的测试用例。 其WebInspect DAST工具客户免费提供其WebInspect IAST for Java和.NET代理。Fortify继续开发创新的自动化和基于机器学习的功能,以支持DevOps,例如使用安全助手在Eclipse IDE中进行实时分析。 内部部署和Fortify on Demand客户可以利用基于机器学习的审计助理来删除SAST调查结果,SmartFix功能将提供最佳修复位置。Fortify具有全面的企业功能以及与主要SCA供应商的集成。 所有FoD SAST客户均可享受Sonatype评估,无需额外付费。

  • IBM

    IBM提供SAST和DAST桌面工具,包括IBM Security AppScan Source,IBM Security AppScan Standard和企业平台(AppScan Enterprise)。 这包括一个集中管理控制台,使用户能够从第三方工具导入调查结果。 IBM针对SAST和DAST的云服务(IBM Security Application on Cloud)。 IAST通过AppScan(AppScan标准版,企业版和云版)中的Glassbox代理提供,免费提供给DAST客户,移动AST(MAST; IBM移动分析器)和SCA产品(IBM安全开放源代码分析器[OSA])。 对于SCA,他们从WhiteSource许可漏洞和修复数据库。 IBM还与Prevoty合作开发RASP。IBM改进了智能代码分析(ICA),并将智能调查分析(IFA)扩展到了本地客户,无需额外费用。 两者都提高了SAST扫描结果的速度和准确性。 ICA在语言和框架中检测API,并确定这些API的安全影响,以减少漏报。 IBM IFA使用机器学习来显着减少整体漏洞数量和误报数量,并将结果关联起来,并提出用于修复漏洞的最少数量的代码更改。IBM拥有相当可观的客户群,将SAST,DAST和IAST整合到一套产品和服务中。

领先优势

    IBM一直在扩展功能,并着眼于DevSecOps的需求。 这包括扩展的语言支持,将DAST界面分为开发者模式和安全专家模式,并且运行更快,更轻的扫描以缩短周转时间。是一个完整的AST解决方案(SAST,DAST和IAST)和其他安全产品/服务的大型稳定提供商,具有多地区存在和交付能力。IBM的应用程序安全管理提供以风险为中心的统一报告和仪表板功能以及IBM安全框架和风险评估,这是管理业务影响应用程序中的安全风险的基础框架。IBM是少数几家允许导入第三方AST结果报告仪表板的供应商之一,例如手动代码审查,渗透测试,漏洞评估和竞争对手AST解决方案。

其他方面

    业界在规划、设计、实现、验证、发布、回归阶段中关注源码扫描参与的点有:

    静态应用安全分析-找到并自动化修复代码中的软件漏洞与质量缺陷;

    软件组件分析:查找开源代码组件或者第三方组件是否包含安全漏洞与license法律问题;

    如何在自动集成阶段建立安全质量gate?如何保证发布前的应用安全?

你可能感兴趣的:(业界代码安全分析软件介绍)