精华内容
下载资源
问答
  • Seay代码审计工具

    2019-04-11 09:59:39
    Seay代码审计工具,代码审计可以使用。
  • Seay PHP代码审计工具支持单个关键字扫描、批量函数扫描、批量正则匹配,其中正则表达式扫描精确度最高,效率最高。 Seay PHP代码审计工具功能: 源码浏览:载入程序源码后,可以在最左边的程序文件列表里面点击...
  • 代码审计工具汇总

    2018-10-06 10:38:05
    配套 【随 亦】的博客《代码审计--8--环境搭建+工具使用》一文的资料。注意文档哦
  • Pylava是一个用于Python和JavaScript的代码审计工具
  • 摘要:C#源码,字符处理,代码审计 C#编写的PHP代码审计工具的源代码,本人目前就读重庆某软件学院软件测试专业,将于2013年1月底毕业,为了扎实基础,于是有时间就会找一些源码研究,有时候想走走捷径,提高下效率,...
  • seay代码审计工具

    2020-10-06 03:31:26
    seay代码审计工具 亲测可用 seay代码审计工具 亲测可用 寻找漏洞 亲测可用
  • Cobra-W -> Cobra-White 白盒源代码审计工具-白帽子版
  • Seay PHP代码审计工具

    2012-11-11 11:17:17
    大黑阔写的php代码审计工具 确实不错 调试方法蛮新颖的
  • 载入源码:三个地方可以载入源码,分别在主...漏洞仓库:在这可以对审计文档进行管理。包括新建、打开、修改、删除操作。 扫描配置:可以对综合扫描要用到的函数、正则表达式进行管理。包括查看、新增、修改、删除。
  • 载入源码:三个地方可以载入源码,分别在主...漏洞仓库:在这可以对审计文档进行管理。包括新建、打开、修改、删除操作。 扫描配置:可以对综合扫描要用到的函数、正则表达式进行管理。包括查看、新增、修改、删除。
  • PHP代码审计工具V2.0.3源码 源码描述: 该版本目前支持单个关键字扫描、批量函数扫描、批量正则匹配,其中正则表达式扫描精确度最高,效率最高。 其他功能: 源码浏览:载入程序源码后,可以在最左边的程序文件...
  • 前言 自从人类发明了工具开始,人类就在不断为探索如何更方便快捷的做任何事情,在科技发展的过程中,人类不断地试...在聊自动化代码审计工具之前,首先我们必须要清楚两个概念,漏报率和误报率。 漏报率是指没有发现的

    前言

    自从人类发明了工具开始,人类就在不断为探索如何更方便快捷的做任何事情,在科技发展的过程中,人类不断地试错,不断地思考,于是才有了现代伟大的科技时代。在安全领域里,每个安全研究人员在研究的过程中,也同样的不断地探索着如何能够自动化的解决各个领域的安全问题。其中自动化代码审计就是安全自动化绕不过去的坎。

    这一次我们就一起聊聊自动化代码审计的发展史,也顺便聊聊如何完成一个自动化静态代码审计的关键。

    自动化代码审计

    在聊自动化代码审计工具之前,首先我们必须要清楚两个概念,漏报率和误报率。

    漏报率是指没有发现的漏洞/Bug
    误报率是指发现了错误的漏洞/Bug
    在评价下面的所有自动化代码审计工具/思路/概念时,所有的评价标准都离不开这两个词,如何消除这两点或是其中之一也正是自动化代码审计发展的关键点。

    我们可以简单的把自动化代码审计(这里我们讨论的是白盒)分为两类,一类是动态代码审计工具,另一类是静态代码审计工具。

    动态代码审计的特点与局限

    动态代码审计工具的原理主要是基于在代码运行的过程中进行处理并挖掘漏洞。我们一般称之为IAST(interactive Application Security Testing)。

    其中最常见的方式就是通过某种方式Hook恶意函数或是底层api并通过前端爬虫判别是否触发恶意函数来确认漏洞。

    我们可以通过一个简单的流程图来理解这个过程。在这里插入图片描述
    在前端Fuzz的过程中,如果Hook函数被触发,并满足某种条件,那么我们认为该漏洞存在。

    这类扫描工具的优势在于,通过这类工具发现的漏洞误报率比较低,且不依赖代码,一般来说,只要策略足够完善,能够触发到相应恶意函数的操作都会相应的满足某种恶意操作。而且可以跟踪动态调用也是这种方法最主要的优势之一。

    但随之而来的问题也逐渐暴露出来:

    (1) 前端Fuzz爬虫可以保证对正常功能的覆盖率,却很难保证对代码功能的覆盖率。

    如果曾使用动态代码审计工具对大量的代码扫描,不难发现,这类工具针对漏洞的扫描结果并不会比纯黑盒的漏洞扫描工具有什么优势,其中最大的问题主要集中在功能的覆盖度上。

    一般来说,你很难保证开发完成的所有代码都是为网站的功能服务的,也许是在版本迭代的过程中不断地冗余代码被遗留下来,也有可能是开发人员根本没有意识到他们写下的代码并不只是会按照预想的样子执行下去。有太多的漏洞都无法直接的从前台的功能处被发现,有些甚至可能需要满足特定的环境、特定的请求才能触发。这样一来,代码的覆盖率得不到保证,又怎么保证能发现漏洞呢?

    (2) 动态代码审计对底层以及hook策略依赖较强

    由于动态代码审计的漏洞判别主要依赖Hook恶意函数,那么对于不同的语言、不同的平台来说,动态代码审计往往要针对设计不同的hook方案。如果Hook的深度不够,一个深度框架可能就无法扫描了。

    拿PHP举例子来说,比较成熟的Hook方案就是通过PHP插件实现,具体的实现方案可以参考。

    https://github.com/fate0/prvd
    由于这个原因影响,一般的动态代码审计很少可以同时扫描多种语言,一般来说都是针对某一种语言。

    其次,Hook的策略也需要许多不同的限制以及处理。就拿PHP的XSS来举例子,并不是说一个请求触发了echo函数就应该判别为XSS。同样的,为了不影响正常功能,并不是echo函数参数中包含

    除了前面的问题以外,对环境的强依赖、对执行效率的需求、难以和业务代码结合的各种问题也确切的存在着。当动态代码审计的弊端不断被暴露出来后,从笔者的角度来看,动态代码审计存在着原理本身与问题的冲突,所以在自动化工具的发展过程中,越来越多的目光都放回了静态代码审计上(SAST).

    静态代码审计工具的发展

    静态代码审计主要是通过分析目标代码,通过纯静态的手段进行分析处理,并挖掘相应的漏洞/Bug.

    与动态不同,静态代码审计工具经历了长期的发展与演变过程,下面我们就一起回顾一下(下面的每个时期主要代表的相对的发展期,并不是比较绝对的诞生前后):

    上古时期 – 关键字匹配
    如果我问你“如果让你设计一个自动化代码审计工具,你会怎么设计?”,我相信,你一定会回答我,可以尝试通过匹配关键字。紧接着你也会迅速意识到通过关键字匹配的问题。

    这里我们拿PHP做个简单的例子。在这里插入图片描述
    虽然我们匹配到了这个简单的漏洞,但是很快发现,事情并没有那么简单。
    在这里插入图片描述
    也许你说你可以通过简单的关键字重新匹配到这个问题

    \beval\(\$
    

    但是可惜的是,作为安全研究员,你永远没办法知道开发人员是怎么写代码的。于是选择用关键字匹配的你面临着两种选择:

    高覆盖性 – 宁错杀不放过
    这类工具最经典的就是Seay,通过简单的关键字来匹配经可能多的目标,之后使用者可以通过人工审计的方式进一步确认。

    \beval\b\(
    

    高可用性 – 宁放过不错杀
    这类工具最经典的是Rips免费版

    \beval\b\(\$_(GET|POST)
    

    用更多的正则来约束,用更多的规则来覆盖多种情况。这也是早期静态自动化代码审计工具普遍的实现方法。

    但问题显而易见,高覆盖性和高可用性是这种实现方法永远无法解决的硬伤,不但维护成本巨大,而且误报率和漏报率也是居高不下。所以被时代所淘汰也是历史的必然。

    近代时期 – 基于AST的代码分析
    有人忽略问题,也有人解决问题。关键字匹配最大的问题是在于你永远没办法保证开发人员的习惯,你也就没办法通过任何制式的匹配来确认漏洞,那么基于AST的代码审计方式就诞生了,开发人员是不同的,但编译器是相同的。

    在分享这种原理之前,我们首先可以复现一下编译原理。拿PHP代码举例子:
    在这里插入图片描述
    随着PHP7的诞生,AST也作为PHP解释执行的中间层出现在了编译过程的一环。
    在这里插入图片描述
    通过词法分析和语法分析,我们可以将任意一份代码转化为AST语法树。常见的语义分析库可以参考:

    https://github.com/nikic/PHP-Parser
    https://github.com/viraptor/phply
    当我们得到了一份AST语法树之后,我们就解决了前面提到的关键字匹配最大的问题,至少我们现在对于不同的代码,都有了统一的AST语法树。如何对AST语法树做分析也就成了这类工具最大的问题。

    在理解如何分析AST语法树之前,我们首先要明白information flow、source、sink三个概念,

    source: 我们可以简单的称之为输入,也就是information flow的起点
    sink: 我们可以称之为输出,也就是information flow的终点
    而information flow,则是指数据在source到sink之间流动的过程。

    把这个概念放在PHP代码审计过程中,Source就是指用户可控的输入,比如 G E T 、 _GET、 GET_POST等,而Sink就是指我们要找到的敏感函数,比如echo、eval,如果某一个Source到Sink存在一个完整的流,那么我们就可以认为存在一个可控的漏洞,这也就是基于information flow的代码审计原理。

    在明白了基础原理的基础上,我举几个简单的例子:在这里插入图片描述
    在上面的分析过程中,Sink就是eval函数,source就是$_GET,通过逆向分析Sink的来源,我们成功找到了一条流向Sink的information flow,也就成功发现了这个漏洞。

    ps: 当然也许会有人好奇为什么选择逆向分析流而不是正向分析流,这个问题会在后续的分析过程中不断渗透,慢慢就可以明白其关键点。

    在分析information flow的过程中,明确作用域是基础中的基础.这也是分析information flow的关键,我们可以一起看看一段简单的代码在这里插入图片描述
    如果我们很简单的通过左右值去回溯,而没有考虑到函数定义的话,我们很容易将流定义为:在这里插入图片描述
    这样我们就错误的把这段代码定义成了存在漏洞,但很显然并不是,而正确的分析流程应该是这样的:
    在这里插入图片描述
    在这段代码中,从主语法树的作用域跟到Get函数的作用域,如何控制这个作用域的变动,就是基于AST语法树分析的一大难点,当我们在代码中不可避免的使用递归来控制作用域时,在多层递归中的统一标准也就成了分析的基础核心问题。

    事实上,即便你做好了这个最简单的基础核心问题,你也会遇到层出不穷的问题。这里我举两个简单的例子

    (1) 新函数封装
    在这里插入图片描述
    这是一段很经典的代码,敏感函数被封装成了新的敏感函数,参数是被二次传递的。为了解决,这样information flow的方向从逆向->正向的问题
    在这里插入图片描述
    通过新建大作用域来控制作用域。

    (2) 多重调用链在这里插入图片描述
    这是一段有漏洞的JS代码,人工的话很容易看出来问题。但是如果通过自动化的方式回溯参数的话就会发现整个流程中涉及到了多种流向。在这里插入图片描述
    这里我用红色和黄色代表了流的两种流向。要解决这个问题只能通过针对类/字典变量的特殊回溯才能解决。

    如果说,前面的两个问题是可以被解决的话,还有很多问题是没办法被解决的,这里举一个简单的例子。在这里插入图片描述
    这是一个典型的全局过滤,人工审计可以很容易看出这里被过滤了。但是如果在自动化分析过程中,当回溯到Source为$_GET[‘a’]时,已经满足了从Source到sink的information flow。已经被识别为漏洞。一个典型的误报就出现了。

    而基于AST的自动化代码审计工具也正是在与这样的问题做博弈,从PHP自动化代码审计中比较知名的Rips、Cobra再到我自己二次开发的Cobra-W.

    https://www.ripstech.com/
    https://github.com/WhaleShark-Team/cobra
    https://github.com/LoRexxar/Kunlun-M
    都是在不同的方式方法上,优化information flow分析的结果,而最大的区别则是离不开的高可用性、高覆盖性两点核心。

    Cobra是由蘑菇街安全团队开发的侧重甲方的静态自动化代码扫描器,低漏报率是这类工具的核心,因为甲方不能承受没有发现的漏洞的后果,这也是这类工具侧重优化的关键。
    在我发现没有可能完美的回溯出每一条流的过程之后,我将工具的定位放在白帽子自用上,从开始的Cobra-W到后期的KunLun-M,我都侧重在低误报率上,只有准确可靠的流我才会认可,否则我会将他标记为疑似漏洞,并在多环定制了自定义功能以及详细的log日志,以便安全研究人员在使用的过程中可以针对目标多次优化扫描。

    对于基于AST的代码分析来说,最大的挑战在于没人能保证自己完美的处理所有的AST结构,再加上基于单向流的分析方式,无法应对100%的场景,这也正是这类工具面临的问题(或者说,这也就是为什么选择逆向的原因)。

    基于IR/CFG的代码分析
    如果深度了解过基于AST的代码分析原理的话,不然发现AST的许多弊端。首先AST是编译原理中IR/CFG的更上层,其ast中保存的节点更接近源代码结构。

    也就是说,分析AST更接近分析代码,换句话就是说基于AST的分析得到的流,更接近脑子里对代码执行里的流程,忽略了大多数的分支、跳转、循环这类影响执行过程顺序的条件,这也是基于AST的代码分析的普遍解决方案,当然,从结果论上很难辨别忽略带来的后果。所以基于IR/CFG这类带有控制流的解决方案,是现在更主流的代码分析方案,但不是唯一。

    首先我们得知道什么是IR/CFG。

    IR:是一种类似于汇编语言的线性代码,其中各个指令按照顺序执行。其中现在主流的IR是三地址码(四元组)
    CFG: (Control flow graph)控制流图,在程序中最简单的控制流单位是一个基本块,在CFG中,每一个节点代表一个基本块,每一个边代表一个可控的控制转移,整个CFG代表了整个代码的的控制流程图。
    一般来说,我们需要遍历IR来生成CFG,其中需要按照一定的规则,不过不属于这里的主要内容就暂且不提。当然,你也可以用AST来生成CFG,毕竟AST是比较高的层级。

    而基于CFG的代码分析思路优势在于,对于一份代码来说,你首先有了一份控制流图(或者说是执行顺序),然后才到漏洞挖掘这一步。比起基于AST的代码分析来说,你只需要专注于从Source到Sink的过程即可。

    建立在控制流图的基础上,后续的分析流程与AST其实别无太大的差别,挑战的核心仍然维持在如何控制流,维持作用域,处理程序逻辑的分支过程,确认Source与Sink。

    理所当然的是,既然存在基于AST的代码分析,又存在基于CFG的代码分析,自然也存在其他的种类。比如现在市场上主流的fortify,Checkmarx,Coverity包括最新的Rips都使用了自己构造的语言的某一个中间部分,比如fortify和Coverity就需要对源码编译的某一个中间语言进行分析。前段时间被阿里收购的源伞甚至实现了多种语言生成统一的IR,这样一来对于新语言的扫描支持难度就变得大大减少了。

    事实上,无论是基于AST、CFG或是某个自制的中间语言,现代代码分析思路也变得清晰起来,针对统一的数据结构已经成了现代代码分析的基础。

    未来 – QL概念的出现
    QL指的是一种面向对象的查询语言,用于从关系数据库中查询数据的语言。我们常见的SQL就属于一种QL,一般用于查询存储在数据库中的数据。

    而在代码分析领域,Semmle QL是最早诞生的QL语言,他最早被应用于LGTM,并被用于Github内置的安全扫描为大众免费提供。紧接着,CodeQL也被开发出来,作为稳定的QL框架在github社区化。

    https://securitylab.github.com/tools/codeql
    https://semmle.com/codeql
    那么什么是QL呢?QL又和代码分析有什么关系呢?

    首先我们回顾一下基于AST、CFG这类代码分析最大的特点是什么?无论是基于哪种中间件建立的代码分析流程,都离不开3个概念,流、Source、Sink,这类代码分析的原理无论是正向还是逆向,都是通过在Source和Sink中寻找一条流。而这条流的建立围绕的是代码执行的流程,就好像编译器编译运行一样,程序总是流式运行的。这种分析的方式就是数据流分析(Data Flow)。

    而QL就是把这个流的每一个环节具象化,把每个节点的操作具像成状态的变化,并且储存到数据库中。这样一来,通过构造QL语言,我们就能找到满足条件的节点,并构造成流。下面我举一个简单的例子来说:

    <?php
    
    $a = $_GET['a'];
    $b = htmlspecialchars($a);
    
    echo $b;
    我们简单的把前面的流写成一个表达式
    
    echo => $_GET.is_filterxss
    这里is_filterxss被认为是输入$_GET的一个标记,在分析这类漏洞的时候,我们就可以直接用QL表达
    
    select * where {
        Source : $_GET,
        Sink : echo,
        is_filterxss : False,
    }
    

    我们就可以找到这个漏洞(上面的代码仅为伪代码),从这样的一个例子我们不难发现,QL其实更接近一个概念,他鼓励将信息流具象化,这样我们就可以用更通用的方式去写规则筛选。

    也正是建立在这个基础上,CodeQL诞生了,它更像是一个基础平台,让你不需要在操心底层逻辑,使用AST还是CFG又或是某种平台,你可以将自动化代码分析简化约束为我们需要用怎么样的规则来找到满足某个漏洞的特征。这个概念也正是现代

    代码分析主流的实现思路,也就是将需求转嫁到更上层。 聊聊KunLun-M

    与大多数的安全研究人员一样,我从事的工作涉及到大量的代码审计工作,每次审计一个新的代码或者框架,我都需要花费大量的时间成本熟悉调试,在最初接触到自动化代码审计时,也正是希望能帮助我节省一些时间。

    我接触到的第一个项目就是蘑菇街团队的Cobra

    https://github.com/WhaleShark-Team/cobra
    这应该是最早开源的甲方自动化代码审计工具,除了一些基础的特征扫描,也引入了AST分析作为辅助手段确认漏洞。

    在使用的过程中,我发现Cobra初版在AST上的限制实在太少了,甚至include都没支持(当时是2017年),于是我魔改出了Cobra-W,并删除了其中大量的开源漏洞扫描方案(例如扫描java的低版本包),以及我用不上的甲方需求等…并且深度重构了AST回溯部分(超过上千行代码),重构了底层的逻辑使之兼容windows。

    在长期的使用过程中,我遇到了超多的问题与场景(我为了复现Bug写的漏洞样例就有十几个文件夹),比较简单的就比如前面漏洞样例里提到的新函数封装,最后新加了大递归逻辑去新建扫描任务才解决。还有遇到了Hook的全局输入、自实现的过滤函数、分支循环跳转流程等各类问题,其中我自己新建的Issue就接近40个…

    https://github.com/LoRexxar/Kunlun-M/issues
    为了解决这些问题,我照着phply的底层逻辑,重构了相应的语法分析逻辑。添加了Tamper的概念用于解决自实现的过滤函数。引入了python3的异步逻辑优化了扫描流程等…

    也正是在维护的过程中,我逐渐学习到现在主流的基于CFG的代码分析流程,也发现我应该基于AST自实现了一个CFG分析逻辑…直到后来Semmle QL的出现,我重新认识到了数据流分析的概念,这些代码分析的概念在维护的过程中也在不断地影响着我。

    在2020年9月,我正式将Cobra-W更名为KunLun-M,在这一版本中,我大量的剔除了正则+AST分析的逻辑,因为这个逻辑违背了流式分析的基础,然后新加了Sqlite作为数据库,添加了Console模式便于使用,同时也公开了我之前开发的有关javascript代码的部分规则。

    https://github.com/LoRexxar/Kunlun-M
    KunLun-M可能并不是什么有技术优势的自动化代码审计工具,但却是唯一的仍在维护的开源代码审计工具,在多年研究的过程中,我深切的体会到有关白盒审计的信息壁垒,成熟的白盒审计厂商包括fortify,Checkmarx,Coverity,rips,源伞扫描器都是商业闭源的,国内的很多厂商白盒团队都还在起步,很多东西都是摸着石头过河,想学白盒审计的课程这些年我也只见过南京大学的《软件分析》,很多东西都只能看paper…也希望KunLun-M的开源和这篇文章也能给相应的从业者带来一些帮助。

    同时,KunLun-M也作为星链计划的一员,秉承开放开源、长期维护的原则公开,希望KunLun-M能作为一颗星星链接每一个安全研究员。

    星链计划地址:

    https://github.com/knownsec/404StarLink-Project

    展开全文
  • Seay——代码审计工具

    2020-12-26 10:50:01
    一款优秀的代码审计工具,省去了大量的人工,值得拥有
  • PHP代码审计工具2012终结版
  • PHP自动化代码审计工具

    千次阅读 2021-07-28 11:39:17
    Seay源代码审计系统是一款绿色免费的Seay源代码审计软件。软件功能强大,提供了一键自动审计,函数查询,代码高亮编辑器,自定义审计规则,代码调试等强大功能 下载地址:链接:...

    目录

    Seay

    Fortify

    RIPS


    Seay

    Seay源代码审计系统是一款绿色免费的Seay源代码审计软件。软件功能强大,提供了一键自动审计,函数查询,代码高亮编辑器,自定义审计规则,代码调试等强大功能

    下载地址:链接:https://pan.baidu.com/s/1x_JIm5HYizNXkmc22GBFbg ,提取码:wfr7

    使用方法

     导入之后,在左边会有源码文件的预览,默认综合模式为函数,然后点击综合扫描,下面就会显示可能存在漏洞的文件与具体位置

    我们发现,综合模式是函数的时候,是根据具体的敏感函数来判断可能存在漏洞,这种方法并不准确

    我们选择综合模式为正则,重新扫描一遍,可见扫描结果也不是很准确

     Fortify

    Fortify是一款功能强大的源代码安全审计工具,可以进行静态代码扫描来发现源代码中的安全问题

    安装与使用参考 —> https://www.cnblogs.com/fsxsmile/p/14690235.html

    RIPS

    RIPS是一款开源的,具有较强漏洞挖掘能力的自动化代码审计工具。它使用PHP语言编写的,用于静态审计PHP代码的安全性

    链接:https://pan.baidu.com/s/1c_MGxTFYyN1Kk9UmslGTZg 
    提取码:ef9d

    解压后把真个文件放到web目录下,通过浏览器访问。填入需要扫描的文件目录,点击scan

     就会有相应的结果

    总结:使用了几款工具,感觉误报率都很高!算是用来辅助吧,还是主要得靠自己分析!

    展开全文
  • 2 0 1 8 YOUR COMOANYS NAME Python动态代码审计 演讲人聂心明 自我介绍 亚信安全软件工程师 n0tr00t 团队成员 个人博客/niexinming 个人github地址/niexinming 为什么会想到动态代码审计 大型项目代码结构复杂 有些...
  • istr332016-04-12共...学会利用自动化代码审计工具,是每一个代码审计人员必备的能力。在学习PHP源代码审计的过程中,本人搜集使用了多款自动化工具。本文将简要介绍其中三款比较实用的工具:RIPS、VCG、Fortify...


    istr33 2016-04-12 926193人围观 ,发现 16 个不明物体 工具

    0×01  简介

    工欲善其事,必先利其器。

    在源代码的静态安全审计中,使用自动化工具代替人工漏洞挖掘,可以显著提高审计工作的效率。学会利用自动化代码审计工具,是每一个代码审计人员必备的能力。在学习PHP源代码审计的过程中,本人搜集使用了多款自动化工具。本文将简要介绍其中三款比较实用的工具:RIPS、VCG、Fortify SCA。

    RIPS是一款开源的,具有较强漏洞挖掘能力的自动化代码审计工具。它使用PHP语言编写的,用于静态审计PHP代码的安全性。

    VCG(VisualCodeGrepper),是一款支持C/C++、C#、VB、PHP、Java和PL/SQL的免费代码安全审计工具。它是一款基于字典的检测工具,功能简洁,易于使用。

    Fortify SCA(Static Code Analyzer)是由Fortify软件公司(已被惠普收购)开发的一款商业版源代码审计工具。它使用独特的数据流分析技术,跨层跨语言地分析代码的漏洞产生,目前支持所有的主流开发语言。

    本文结合一个应用实例的分析,介绍三款工具的使用方法以及特性。

    0×02  RIPS

    RIPS的主要功能特点如下:

    1)      能够检测XSS、SQL注入、文件泄露、本地/远程文件包含、远程命令执行以及更多种类型的漏洞。

    2)      有5种级别选项用于显示以及辅助调试扫描结果。

    3)      标记存在漏洞的代码行。

    4)      对变量高亮显示。

    5)      在用户定义函数上悬停光标可以显示函数调用。

    6)      在函数定义和调用之间灵活跳转。

    7)      详细列出所有用户定义函数(包括定义和调用)、所有程序入口点(用户输入)和所有扫描过文件(包括include的文件)。

    8)      以可视化的图表展示源代码文件、包含文件、函数及其调用。

    9)      仅用几个鼠标点击就可以使用CURL创建针对检测到漏洞的EXP实例。

    10)   详细列出每个漏洞的描述、举例、PoC、补丁和安全函数。

    11)   7种不同的语法高亮显示模式。

    12)   使用自顶向下或者自底向上的方式追溯显示扫描结果。

    13)   一个支持PHP的本地服务器和浏览器即可满足使用需求。

    14)   正则搜索功能。

    最新版本的RIPS是0.55,下载链接如下:

    https://sourceforge.net/projects/rips-scanner/

    解压下载的zip文件到Web服务器网站目录下即可。在浏览器中输入Web服务器地址和对应目录,RIPS工具的用户使用界面如下:

    最上方是所有功能按钮菜单。

    扫描任务结束后,菜单中会出现4个新的按钮,分别用来显示/隐藏4个扫描结果窗口:被扫描文件、用户输入点、扫描状态信息和被扫描函数。

    现在以一个简单的实例来说明RIPS的使用方法,下载链接如下:

    http://jsdx.down.chinaz.com/201603/webjoker_v2.2.0.zip

    该PHP应用程序用来统计某网站的用户访问情况,登录到程序后台可以查看详细访问信息。将下载后的程序解压,在RIPS的“path/file”选项中填入程序解压目录,其它选项保持默认,点击“scan”按钮开始扫描任务。

    Clipboard Image.png

    扫描结束后,点击window菜单的4个按钮可以显示任务的详细情况。

    Clipboard Image.png

    正文部分显示扫描出漏洞的详细情况,点击“hide all”按钮可以查看/隐藏每个文件的详细漏洞结果列表。

    Clipboard Image.png

    让我们来看其中某一个漏洞详情,init.php源代码中存在SQL注入漏洞。

    Clipboard Image.png

    未过滤的$procookie参数直接被cheakcookie()函数调用。将光标悬停在cheakcookie()函数上方,即可显示cheakcookie()函数是如何定义的。

    Clipboard Image.png

    cheakcookie()函数在main.php文件中被定义,可以看出未被过滤的参数直接带入SQL语句被执行。

    在漏洞的详细情况中显示$procookie参数由$_COOKIE[count_admin]传递,从init.php源代码的上下文可知,该参数是为了后台登录的cookie值校验。当count_admin值无法匹配数据库中的数据时,校验失败。

    Clipboard Image.png

    将POST包中Cookie中的count_admin改为“’ or 1=1 #”,即可绕过cookie校验,直接进入后台。

    Clipboard Image.png

     

    0×03  VCG

    VCG是一个基于字典的自动化源代码扫描工具,可以由用户自定义需要扫描的数据。它可以对源代码中所有可能存在风险的函数和文本做一个快速的定位。

    VCG的下载链接如下:

    http://sourceforge.net/projects/visualcodegrepp/

    双击下载的msi文件进行安装即可。

    Clipboard Image.png

    在Settings->Options->ConfigFiles选项中可以对每种语言的扫描配置文件进行编辑。

    Clipboard Image.png

    点击Settings选项,选择扫描的目标语言类型。点击File->New Target Directory选项,选择需要扫描的源代码文件存放目录,我们选择上文提到的应用实例存放目录。点击Scan->Full Scan选项,扫描开始。

    Clipboard Image.png

    扫描结果以图标的形式对被扫描文件的数据做一个统计,这个功能有点鸡肋。我们重点关注Results和Summary Table两个面板显示的内容。

    Clipboard Image.png

    Results面板显示所有存在安全风险的源码,右键点击可以对结果进行排序过滤。

    Clipboard Image.png

    Summary Table面板是对Results面板内容的总结展示。

    VCG是通过匹配字典的方式查找可能存在风险的源代码片段。它的扫描原理较为简单,跟RIPS侧重点不同,并不深度发掘应用漏洞。VCG可以作为一个快速定位源代码风险函数的辅助工具使用。

    0×04  Fortify SCA

    Fortify SCA是一款商业软件,价格较为昂贵,因此我只找到了一个早期的版本进行试用。因为是商业软件,它有详细的使用文档,查阅非常方便。它支持一些IDE的插件功能,在安装的时候会有选项。

    Clipboard Image.png

    Fortify SCA的代码审计功能依赖于它的规则库文件,我们可以下载更新的规则库,然后放置在安装目录下相应的位置。bin文件放置在安装目录下Core\config\rules文件夹,xml文件放置在Core\config\ExternalMetadata文件夹(如果该文件夹没有则新建一个)。

    打开AuditWorkbench,点击Start New Project->Advanced Scan选项就可以快速开始一个审计任务。选择需要审计的应用程序根目录,在Additional Options选项中选择使用的规则库,在Audit Guide提出的四个问题中选择对应的选项,点击Run Scan即可。

    Clipboard Image.png

    Clipboard Image.png

    审计的结果由5个面板来呈现。

    Clipboard Image.png

    我们来看跟RIPS审计结果同样的SQL注入问题。点击左侧问题,源代码面板自动定位到出现问题的源代码行。

    Clipboard Image.png

    分析跟踪面板显示了详细的数据走向。从COOKIE读入->赋值给变量$procookie->带入cheakCookie()函数->赋值给变量$sql->带入mysqli_query()函数执行。

    Clipboard Image.png

    左侧每一个图标的含义在使用手册上可以查到。点击其中每一行,自动定位到对应的源代码行。同时在问题审计面板的Diagram中,有更为形象的数据流向图,直观展示了漏洞产生的原因。

    Clipboard Image.png

    审计面板的其他标签详细说明了漏洞信息,相对于RIPS这种开源软件,Fortify SCA审计结果展示更为详细。Tools->Generate Report功能还可以根据用户的需求生成审计结果的报告。

    0×05  总结

    VCG与其他两款工具不同,它是一个简洁的风险函数扫描定位工具,基于字典实现扫描功能。而RIPS和Fortify SCA则是静态深度分析源代码漏洞的利器,它们使用各自的技术对应用程序执行过程进行了追踪分析,做了深层次的漏洞挖掘工作。RIPS易于部署和使用,可以作为简单应用功能的自动化审计分析工具。而Fortify SCA功能更为强大,可以胜任较为复杂的应用自动化分析。在实际审计工作中可以结合使用两种工具,取长补短。

    自动化的静态代码审计工具可以节省代码审计的人力成本,是提高代码审计效率的重要手段。然而需要注意的是,自动化工具并非是完全智能的,跟所有的漏洞扫描工具一样,误报率的存在仍然是一个现实的问题。因此,报表中显示的漏洞需要审计人员进一步确认是否真的存在。此外,自动化工具还有一个很大的局限性:它仅能够对常见的Web应用漏洞类型进行挖掘,对于Web 2.0时代兴起的业务逻辑漏洞挖掘可以说是束手无力。所以,对于有经验的代码审计人员来说,审计工具起到的仅仅是辅助作用,他们会在利用工具的基础上结合自己经验挖掘出更深层次的漏洞。

    * 文章由istr33投递,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

    展开全文
  • 三大代码审计工具对比

    千次阅读 2020-01-20 11:47:35
    三大代码审计工具的对比(源伞科技Pinpoint、Checkmarx、Fortify) 源伞科技Pinpoint 源伞科技2016年由香港科大团队创立,立足于国际水平的学术研究积累, 秉承工匠精神,致力用最先进的自动程序分析技术保障软件质量...

    三大代码审计工具的对比(源伞科技Pinpoint、Checkmarx、Fortify)

    源伞科技Pinpoint
    源伞科技2016年由香港科大团队创立,立足于国际水平的学术研究积累, 秉承工匠精神,致力用最先进的自动程序分析技术保障软件质量,为企业提供以人工智能为基础的工业级程序缺陷自动挖掘技术,工具和解决方案。核心产品Pinpoint可无缝接入到软件开发人员和测试人员的现有工作流程中,全面自动分析和管理程序源码中数百种常见的高危程序缺陷,并清晰的展示缺陷触发的原因。由于具备人工智能软件逻辑推理能力,Pinpoint的检测准确度和缺陷发现能力均居于世界领先水平。仅面市半年,源伞产品便迅速被市场认可,目前已应用于大型互联网企业,电子消费制造商,金融业,智能设备企业,和权威软件测试机构。源伞立足于中国,以一流的产品和解决方案服务于中国软件开发商并逐步辐射全球企业,最终为推动软件质量和安全保障行业的技术升级而不懈努力。

    优点:国产、速度快、精确、二进制扫描、方便集成第三方检查器、价格透明
    缺点:C++/C和Java/Android检测能力强,其余较弱

    Checkmarx
    Checkmarx是一家以色列高科技软件公司,是世界上著名的代码安全扫描软件Checkmarx CxSAST的生产商,拥有应用安全测试的业内前沿解决方案-CxSAST、CxOSA、CxIAST 。Checkmarx提供了一个全面的白盒代码安全审计解决方案,帮助企业在软件开发过程中查找、识别、追踪绝大部分主流编码中的技术漏洞和逻辑漏洞,帮助企业以低成本控制应用程序安全风险。CxSAST无需搭建软件项目源代码的构建环境即可对代码进行数据流分析。通过与各种SDLC组件的紧密集成,CxSAST可实现分析过程的完全自动化,并为审计员和开发人员提供对结果和补救建议的即时访问。

    优点:规则自定义、集成性强
    缺点:速度慢,精确率,昂贵

    Fortify
    Fortify SCA ,是一个静态的、白盒的软件源代码安全测试工具。它通过内置的五大主要分析引擎:数据流、语义、结构、控制流、配置流等对应用软件的源代码进行静态的分析,分析的过程中与它特有的软件安全漏洞规则集进行全面地匹配、查找,从而将源代码中存在的安全漏洞扫描出来,并给予整理报告。

    优点:速度、精确
    缺点:集成性太差,昂贵

    价格

    源伞科技Pinpoint:价格官网有写,比较便宜

    Checkmarx:订阅式和永久式。订阅式每年付费、永久式一次性付费。订阅式缺点是如果不续费,产品就根本不能使用了,这个比较恶心。还有就是按照用户数进行收费,不过用户可以同时登入。

    Fortify:Python、Cobol、ColdFusion、Abap额外收费。Fortify有个漏洞平台统计的需要额外购买(不建议购买,鸡肋),另外就是根据代码的情况购买相应的引擎,多一个引擎多一份钱。

    为国产静态代码分析软件打Call !!

    展开全文
  • PHP代码审计工具Rips的使用: https://plutoacharon.github.io/2019/10/10/PHP%E4%BB%A3%E7%A0%81%E5%AE%A1%E8%AE%A1%E5%B7%A5%E5%85%B7Rips%E7%9A%84%E4%BD%BF%E7%94%A8/
  • 公司到成长到一定程度,就需要对代码进行审计,针对Go的作为主要的开发语言,我就测试一下Gosec的效果。 使用教程 要求 已经配置好Go的开发环境 准备一个测试项目代码 步骤 1. 进入Go环境src目录下 执行命令:go ...
  • MySQL实时监控工具(黑盒测试辅助工具) 更新: 2020-10-18:使用Java重构,打包好的版本可点击下载 2019-04-29:修复windows系统下监控不成功的问题(其实就是语序有问题调整一下就OK)感谢的反馈 2019-03-26:新...
  • 代码审计是在经过黑盒测试完毕,也就是检查应用的基本功能是否符合产品业务需求下进行的。需要有一定的编码基础以及对漏洞形成原理的基本认知,通过工具或者经验检测代码中可能出现的bug,并在不同平台(windows,...
  • PHP代码审计工具RIPS

    2020-10-10 14:12:44
    在Centos7操作系统中安装rips并使用rips进行代码审计工作 # 安装依赖 yum install httpd.x86_64 ...
  • 转换:使用源代码创建中间文件,源代码与一个 Build ID相关联,Build ID通常就是项目名称。 扫描与分析:扫描中间文件,分析代码,并将结果写入一个Fortify Project Results(FPR)文件。 校验:确保所有源文件均包含
  • 国产代码审计工具Pinpoint介绍

    千次阅读 2020-02-03 17:28:00
    硬核国产代码审计工具Pinpoint介绍 简介 Pinpoint是由国内源伞科技所研制的一款静态代码审计工具,源伞科技公司是香港科技大学安全实验室的众多博士创建的,产品集成了实验室多年的研究成果,在众多国际顶级学术会议...
  • Seay是一款代码审计工具,可以提高我们在白盒测试中的效率,加快了漏洞挖掘以及代码分析的效率,减轻了人工审计的负担,也是本人在学习代码审计过程中在(代码审计-企业级Web代码安全架构)一书中,作者比较推荐使用的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,926
精华内容 13,170
关键字:

代码审计工具