精华内容
下载资源
问答
  • 背景 选型 基于Java的自动化审计 相对准确率 基于Smali的自动化审计 优点 误差分析 静态污点分析 动态分析 总结及展望
  • 第一种就是特征代码的匹配,第二类就是基于形态化验证的自动化审计,最后一类是基于符号执行和符号抽象的自动化审计。 1、特征代码匹配 我们首先看这一项,特定代码匹配。大家从名字上来看应该就能理解到,其实...

    一、智能合约发展现状

    首先我们来一起看看现在智能合约发展的一个现状:在过去一个月当中,智能合约的数量每天还在以1317个的平均增长率高速稳定的增长着,这和我们所理解的“区块链现在处于寒冬的时期”不太一样,其实智能合约的增长率还是比较稳定的。

    现在智能合约比较多的应用在一些基础设施、商业零售、游戏以及社交媒体和通讯领域中。

    二、智能合约安全现状

    从17年9月到18年6月,智能合约的漏洞频繁爆发,每次漏洞爆发都带来了大量的资金损失。这使得一些区块链开发者、智能合约的开发者或者一些用户对智能合约安全性产生高度的质疑,也阻碍了以太坊之后的一些发展。

    除了基本的智能合作安全,现在DAPP的安全也是受到了极大的关注。比如说FOMO3D在兴起的时候,仅仅在第二天就出现了大量的山寨合约、山寨的游戏。在这些游戏中,开发者巧妙地更改了资金分配的逻辑,使得玩家在玩FOMO3D游戏的过程中,投入的资金其实大部分都是流向于这种山寨合约的开发者的,这对DAPP的发展有了极大的阻碍。

    现在我们共同面临着一个问题——如何保证海量的智能合约的安全。

    三、智能合约自动化审计方法

    我们来回顾一下现在智能合约的情况。截止到昨天中午12点,据统计,现在共有193万个智能合约,并且一直保持着稳定的日增长率。现在的审计方法有人工的攻防审计以及自动化的审计。

    在海量的智能合约中,最好的一种设想就是要降低人工审计的一些复杂度,从而更多的通过自动化审计来进行。

    我们把自动化审计分为三个部分:

    第一种就是特征代码的匹配,第二类就是基于形态化验证的自动化审计,最后一类是基于符号执行和符号抽象的自动化审计。

    1、特征代码匹配

    我们首先看这一项,特定代码匹配。大家从名字上来看应该就能理解到,其实它就是对恶意代码进行一些提取抽象,像我们之前做的代码静态检测,我们抽样成一种语义匹配,然后再去匹配它的静态源代码。

    这种审计的方法的优点是显而易见的,比如说速度很快,因为它就是对原码进行一个字符串的匹配。第二是它能够迅速的响应新的漏洞,因为这种审计方法大部分是以插件形式开发,比如出现了一个新的漏洞,我们就可以快速提交一些新的匹配模式。

    那么它的缺点在哪里呢?我们所理解的现在的区块链都应该是公开透明的,但实际情况并不是这样,我们大概做了一个统计,目前代码的开源率仅仅只占48.62%,

    也就是在以太坊上其实有超过一半的智能合约是不开源的,只暴露它的一个OPCODE。

    对于OPCODE的分析对于安全人员来说其实也是面临着巨大的挑战,有些人费了十分大的力气,去逆向OPCODE,这就导致了它的适用范围极为有限。

    其次就是漏报率高。因为它的一些静态审计方法其实并不和传统的静态代码审计方法一致,传统的静态审计方法,比如说APP检测,我会调用库里面,确定稳定的一些函数,来对它进行审计,但智能合约里面它的一些函数、它一些特征等等,还是变化性比较多的,所以说它的漏报率会比较高。

    2、基于形式化验证的自动化审计

    第二个方法,我们来探讨一下现在比较火的,基于形式化验证的自动化审计。

    形式化验证来审计智能合约安全,最早是在16年,由Hirai提供的,当时拿Isabelle高阶逻辑交互定理证明器,然后交EVM的一些OPCODE ,通过它的一个lem language转化成了一个形式化的model,然后通过形式化model的验证来去判断它代码中的逻辑是否存在问题。

    而基于这项工作,之后由两个学家把形式化方法进行了进一步的改正,也就是说他们放弃了lem language这种比较低效的转换方式,采用了F-framework和K-framework将DVM转化为一个formal model,而F-framework就是NASA他们经常在航空航天领域当中做一些形式化漏洞验证的框架,而K-framework就是语意的一些整合框架。

    3、基于符号执行、符号抽象的自动化审计

    第三点,也是我今天想要着重跟大家交流的,以及现在最常用的方法,就是基于符号执行和符号抽象的一些自动化审计。

    我们在分析一个智能合约的时候,我们首先要明确我们的分析对象是什么。也就像我们刚才在解释的那个特征匹配代码当中,我们知道其实现在EVM上合约代码大部分是不公开的。

    我们就确认应该是一个EVM OPCODE,通过一些源码,编译,可以形成一个OPCODE,然后输入到我们自动化分析引擎。

    在这种基于符号执行和符号抽象化的自动化审计框架里面,其实它有些共有的特性,就是它在OPCODE或者在输到这个引擎之后,都会转化成一个CFG,就是我们的一个Control flow graph,即控制流程图。

    可以简单了解一下这个CFG是什么意思。CFG就是说他把合约代码里面的逻辑包装成每个块,然后有逻辑有分叉的时候,比如说有IF等等这种判断的时候,就把它分叉。

    比如说左边这个assertion这个合约,我们首先是将input与256进行一个比较,那么在出现一个If的判断之后,我们需要对这个CFG进行一个分叉。

    CFG Builder主要是对OPCODE这种智能合约代码,把它形成一个十分庞大完善的一个CFG,然后让程序员更好的去了解它里面执行的一些逻辑。再有CFG生成了之后,就是这样两种分析方法。

    第一类就是基于符号执行的验证,这边比较有代表性的,可能大家都比较熟知的像Mythril、Oyente、Maian。还有一种就是,上个月他们刚刚公开的一个符号抽象分析的方法,也就是Securify。

    下面主要分析一下Oyente以及Securify这两种系统的一个具体的架构以及实现方法。

    Oyente符号执行验证

    Oyente的逻辑是在CFGbuild形成之后,首先是一个EXPLORER,EXPLORER的意思就是说我会把代码当中的每一个流程都去验证一遍,进行一个之外的验证。

    我们的验证就是是否有一个X,使得X不仅满足C1、C2、C3三个条件,并且Z=X+2,那么这时候我们可以判断他的状态是no还是yes,然后以此来验证整个逻辑的一个流程。

    到了第二个code analysis,这一部分其实是这个Oyente最为核心的一个部分,就是它将刚刚输出的EXPLORSE这种路径把它转化,至始至终只包含Ether的一些路径,进行一些漏洞验证,而他目前只提供包括TOD、Timestamp dependence、Mishandled exceptions这三种验证,最后系统为了保证误报率和漏报率,采用了微软的Z3Bit-Vector Solver 开源的验证器,然后来进行整体架构的一个封装。

    在刚刚我们讲述的过程当中,其实大家也应该了解到,在CFG转EXPLORER验证的时候,我们需要对它的循环的每次都进行一个验证,所以说这种分析方法特别耗时,并且也不一定成功。

    比如说像parity的那个钱包代码,它的Oyente覆盖率仅仅达到20%,剩下80%的代码,是没有办法去跟踪的,所以这就是Oyente目前存在一个巨大的问题。

    Securify符号抽象分析

    在这个问题的基础上,像Securify他们就提供了另外一种方法,它们认为现在合约代码其实是特别容易解耦合的,不像我们传统的代码一样,它的耦合性特别高,但像合约代码里面,就有transfer等等一些比较固定解耦合的一些结构和模块,我们并不是需要对整个合约的逻辑进行的校验,可能我们就是对合约解耦合的各个模块进行校验分析,因此可以提高它的自动化程度。

    这张图也就是他们整个在验证的一个流程:

    它们把contract bytecode转化成一种他们自定义的一种语义语言,然后通过自定义的语义语言,它们之后有一个验证模块,这个验证模块就特别像我们之前说的那种模式匹配,就是把一些漏洞转化成一种它验证语言的模式匹配的框架,然后去验证它这个语意在此是否满足他这个比较,最终会生成一个安全报告。

    这里也给出了一个parity的例子,通过自动化审计的方法,最终可以输出钱包的owner其实是可以被修改的。

    再具体一点,它是怎么做语义分析的呢?Securify分析这种合约代码,是从两个维度,第一个是逻辑,第二个是数据。

    在逻辑方向的话,它定义了两种逻辑,第一个叫MayFollow,第二叫MustFollow。MayFollow的意思是说L2是有一条路径是跟在L1后面的,而MustFollow是说L2每一条路径都跟在L1后面。这两种区别定了它整个逻辑的一个框架。

    第一个就是它的一个数据,它怎么定义合约里面的数据变化?分了三种,第一种是MayDepOn,就是两个因素,一个叫Y、一个叫T,T变Y可能变也可能不变。

    第二个就是Eq,就是说Y是由T来决定的

    第三个就是大家把DetBy和Y和T是一一对应的,只要T变Y就肯定要变了。

    这里面就用更加形象的方法,我们想象一下,MayDepOn就是,变量是T,在一段时间当中Y可能是一个值,然后有的说T变Y可能不变,第三个DetBy就是说一对一的关系,就比如说我们知道哈希,哈希如果T变,Y就肯定要变。

    通过逻辑和数据这两个维度进行了一些验证,最终验证模块的话,现在提供了大概六七个智能合约漏洞的验证性的语言,而且这种语言都是以插件化的形式来写的,其他的安全开发者可以不断去丰富这个漏洞的验证语言,最终我们在对自动化审计进行一个评估的时候,我们其实是要从它的自动化程度,漏报率、误报率来评估这件事情的。

    像我们现在知道的一些数据就可以表明出来,其实像Mythril跟Oyente,它里面存在大量的误报,比如说它检测出来的数据还是需要人工进行二次确认,这个工作其实是非常繁琐,而Securify这种方法可能误报率会降低。

    这也是两种比较现在比较流行的符号执行和抽象的自动化审计方法。

    四、总结回顾

    最后我们回顾一下,现在做的智能合约审计的话可能分为三种,:特征代码匹配、形式化验证以及符号抽象。

    回顾整个解释的过程当中,我们可以清楚地知道,现在自动化审计的方法其实是出于一个很不成熟的阶段。

    它们主要面临三大问题:

    第一个就是误报率高,其实它并不能做到完全自动化,它还需要人工的一些参与。

    第二个就是它的自动化其实程度比较低,还需要不断有feedback去去审计。

    第三就是审计时间比较长,比如说像Mythril,平均在60秒,Oyente大概在30秒,而Securify大概在20秒。

    http://www.xyqkl.cn/

    展开全文
  • 浅谈Android软件安全自动化审计电脑资料 随着移动互联网的发展移动终端安全也越来越受到关注 敏感信息明文保存一直是Andriod软件常容易出现的这些敏感信息包括用户密码住址姓名等等内容特别是密码问题有些支持记住...
  • 浅谈iOS应用安全自动化审计 威胁情报 渗透测试 网络信息安全 数据安全与治理 安全建设
  • PHP 白盒分析工具,结合AST 和数据流跟踪分析代码,达到自动化白盒审计功能
  • 是一家专注于区块链生态安全的实战创新型网络安全企业,团队扎根区块链安全与应用技术研究,以丰富的安全攻防实战经验结合人工智能数据分析处理,为用户提供区块链安全漏洞风险检测、安全审计、安全防御、资产追溯,...

    零时科技——专注于区块链安全领域

    深圳零时科技有限公司(简称:零时科技),公司成立于2018年11月,是一家专注于区块链生态安全的实战创新型网络安全企业,团队扎根区块链安全与应用技术研究,以丰富的安全攻防实战经验结合人工智能数据分析处理,为用户提供区块链安全漏洞风险检测、安全审计、安全防御、资产追溯,以及企业级区块链应用创新解决方案。

    零时科技区块链安全100问正式上线,以通俗易懂的语言形式为大家讲解区块链行业知识,以及区块链生态应用存在的安全问题,让更多人了解区块链及区块链安全。

    前言

    当前区块链技术和应用尚处于快速发展的初级阶段,面临的安全风险种类繁多,从区块链生态应用的安全,到智能合约安全,共识机制安全和底层基础组件安全,安全问题分布广泛且危险性高,对生态体系,安全审计,技术架构,隐私数据保护和基础设施的全局发展提出了全新的考验。

    PART01-智能合约自动化审计介绍

    随着区块链技术越来越火,并在不同的行业有所应用,如金融、游戏、版权、溯源等;其中出现过不少的安全问题,尤其是区块链的智能合约发展至今,暴露出的问题不少,智能合约的正确性和安全性面临着巨大的问题;在海量的智能合约中,最好的一种设想就是通过自动化审计来降低人工审计的复杂度。同时市场上有安全公司,也推出各自的智能合约自动化安全审计平台,那么今天我们就来介绍一下智能合约自动化审计。

    我们把自动化审计分为三个部分:

    第一种就是特征代码的匹配;第二类就是基于形态化验证的自动化审计;最后一类是基于符号执行和符号抽象的自动化审计。

    1)特征代码匹配

    首先特定代码匹配。大家从名字上来看应该就能理解到,其实就是对恶意代码进行一些提取抽象,像我们之前做的代码静态检测,我们抽样成一种语义匹配,然后再去匹配它的静态源代码。

    这种审计的方法的优点是显而易见的,比如说速度很快,因为它就是对源码进行一个字符串的匹配。第二是它能够迅速地响应新的漏洞,因为这种审计方法大部分是以插件形式开发,比如出现了一个新的漏洞,我们就可以快速提交一些新的匹配模式。

    那么它的缺点在哪里呢?我们所理解的现在的区块链都应该是公开透明的,但实际情况并不是这样,我们大概做了一个统计,目前在以太坊上其实有超过一半的智能合约是不开源的,只暴露一个OPCODE。

    OPCODE的分析对于安全人员来说也面临着巨大的挑战,有些人费了十分大的力气,去逆向OPCODE,这就导致了它的适用范围极为有限。

    其次就是漏报率高。因为它的一些静态审计方法其实并不和传统的静态代码审计方法一致,传统的静态审计方法,比如说APP检测,会调用库里面,确定稳定的一些函数,来对它进行审计,但智能合约里面它的一些函数、它一些特征等等,还是变化性比较多的,所以说它的漏报率会比较高。

    2)基于形式化验证的自动化审计

    使用形式化验证来审计智能合约安全,将EVM编译后的一些OPCODE ,通过特定描述语言转化成了一个形式化的model,然后通过形式化model的验证来去判断它代码中的逻辑是否存在问题。

    3)基于符号执行、符号抽象的自动化审计

    基于符号执行、符号抽象的自动化审计检测出来的数据还是需要人工进行二次确认,这个工作其实是非常繁琐。

    PART02-一个出色的智能合约自动化审计系统该满足什么条件?

    1)自动化

    要求对智能合约的安全审计,要全自动,或者至少是半自动的,即上传合约源代码或提供智能合约的token地址,即可由系统,自动化进行合约的安全扫描。并且能够按需要配置为周期调度(如每月,半年)自动进行调度审计。

    2)准确性

    要求对智能合约的安全审计,误报率低。

    3)高效率

    要求对智能合约的安全审计必须是高效的,即要求审计的时间不能太长,越快越好。

    4)无风险

    要求对智能合约的安全审计不会破坏或修改原有的合约的功能。

    只有做到了以上4点,才是一个基本合格的智能合约自动化审计系统。

    除此之外,如果要做得更加的专业,更出色,还需要满足下面的四个需求:

    第一、系统具有智能合约的当前标准规范管理;这样一来,使用者可以在系统上传,下载标准规范进行参考。如果说审计出来的安全问题,能与标准规范相对应,并定位到标准规范是最好的,但是当对智能合约安全审计的标准规范不细或缺乏,做到这一点太难了。

    第二、系统的使用操作体验要好;简单举例:

    (1)可以采用向导式,引导用户熟悉系统的功能操作。

    (2)具备用户自定义合约的行业分类以及所属厂商分类等。

    (3)审计出来的安全问题,能定位到行列,并至少能提供此安全问题的修正安全,当然,有自动化修正更好,具备自动化修正功能,相应提供保留原内容的版本,以便可进行回退和比较。

    第三、易扩展;当前,区块链的平台技术以及安全专家针对区块链智能合约发现的安全问题的check list是不断演进的,系统应很好的解决这方面的需求,就需要系统有一个很好的易扩展的设计要求。

    第四、对安全审计结果报告展现丰富;能导出PDF,EXCEL,WORD,HTML 格式是必需的,报告的展现应有图表,表格元素的体现,当然,要做好这点,需要你对系统的使用方(用户)有更多的了解,针对用户做些定制他们关注的报告就更出彩了;报告出彩的功能还可以是报告中有审计历史对比趋势分析等。

    • 区块链安全100问正在持续更新,欢迎大家后台评论留言自己的观点。
    展开全文
  • 利维坦 用于渗透测试、道德黑客攻击和安全研究的自动化审计工具。 您可以使用 plugins/ 文件夹中的模板为带有插件的项目做出贡献。
  • 审计人员经常很难知道哪些任务需要自动化以及如何确定机器人开发的优先级。 借鉴社会技术系统理论并使用设计科学方法,我们开发并验证了一个三步评估框架,以帮助审计员决定哪些活动要自动化。 我们通过访谈、对...
  • 国内公开的PHP自动化审计技术资料较少,相比之下,国外已经出现了比较优秀的自动化审计实现,比如RIPS是基于token流为基础进行一系列的代码分析。传统静态分析技术如数据流分析、污染传播分析应用于PHP这种动态脚本...
  • 一本非常好的研究Android安全的书籍,内含研究代码。是从事移动安全人员很好的教程
  • 【干货】Python自动化审计及实现

    千次阅读 2021-02-05 06:27:38
    0x06 结束语 对Python源码实现注入问题的自动审查,大大降低了人为的不可控性,使代码暴露出来的漏洞更少。当然目前来说这个模块还是有一定局限性,对类的处理不够充分,没有分析导入的函数对属性的取值也不够细分...

    b9b0f8d45b0a430010e327ef452dc1c0.png

    Python由于其简单,快速,库丰富的特点在国内使用的越来越广泛,但是一些不好的用法却带来了严重的安全问题,本文从Python源码入手,分析其语法树,跟踪数据流来判断是否存在注入点。

    0x01 引言

    Python注入问题是说用户可以控制输入,导致系统执行一些危险的操作。它是Python中比较常见的安全问题,特别是把python作为web应用层的时候这个问题就更加突出,它包括代码注入,OS命令注入,sql注入,任意文件下载等。

    0x02 注入的场景

    主要是在web应用场景中,用户可直接控制输入参数,并且程序未做任何参数判断或者处理,直接就进入了危险函数中,导致执行一些危险的操作。主要的注入类型有:

    (一)OS命令注入

    主要是程序中通过Python的OS接口执行系统命令,常见的危险函数有

    os.system,os.popen,commands.getoutput,commands.getstatusoutput,subprocess

    等一些接口。例如:def myserve(request,fullname):os.system('sudo rm -f %s'%fullname),fullname是用户可控的,恶意用户只需利用shell的拼接符;就可以完成一次很好的攻击。

    (二)代码注入

    是说在注入点可以执行一段代码,这个一般是由python的序列话函数eval导致的,例如:def eval_test(request,login):login = eval(login),如果恶意用户从外界传入import('os').system('rm /tmp -fr')就可以清空tmp目录。

    (三)Sql注入

    在一般的Python web框架中都对sql注入做了防护,但是千万别认为就没有注入风险,使用不当也会导致sql注入。例如:

    def getUsers(user_id):sql = ‘select * from auth_user where id =%s’%user_idres = cur.execute(sql)

    任意文件下载

    程序员编写了一个下载报表或者任务的功能,如果没有控制好参数就会导致任意文件下载,例如:def export_task(request,filename):return HttpResponse(fullname)

    0x03 判断原理

    从以上四种情况来看,都有一个共同点,那就是危险函数中使用了可控参数,如system函数中使用到的('sudo rm -f %s'%fullname),如eval中使用到的login参数,如execute函数中使用到的user_id参数,如HttpResponse中使用到的fullname参数,这些参数直接从函数中传进来,或者经过简单的编码,截断等处理直接进入危险函数,导致了以上危险行为。如果在执行危险函数前对这些可控参数进行一定判断,如必须是数字,路径必须存在,去掉某些特殊符号等则避免了注入问题。 有了这个基础理论,这个参数数据在传递的过程中到底有没有改变?怎么顺利的跟踪可控参数呢?接下来分析Python的语法树。

    0x04 Python语法树

    很显然,在参数不停传递过程中,普通的正则表达式已经无能为力了。这个时候就可以体现Python库丰富的特点。Python官方库中就提供了强大的Python语法分析模块ast。我们可以利用根据ast优化后的PySonar模块,PySonar相对于ast模块而言有性能上的提升,另外是以Python的dict来表示的。

    (一)语法树的表示-文件

    一个文件中可以有函数,类,它是模块的组成单位。大体结构如下:{"body":[{},{}],"filename":"test.py","type":"module"},这是文件test.py得到的语法树结构,body里面包含两个dict,实际里面会存放函数,类,全局变量或者导入等,它是递归嵌套的,type字段表明类型,在这里是模块,filename则是它的文件名。

    (二)语法树的表示-函数

    函数的作用就不用多说了,django的view层基本都是以函数为单位的。下面来看一个函数的语法树,如图:

    我们简单分析一下这个结构,首先是type,这里是FunctionDef,说明这个结构体是一个函数,_fields中的name,args,body,decorator_list等是函数的基本组成单位。name是函数名称,上述函数名为is_this_subdomain;args是函数的参数,它包含普通参数args,默认参数kwarg;lineno是标明该语句所在的文件的行数;decorator_list则是函数的修饰器,上述为空。

    (三)语法树的表示-类

    在类的语法树中,包含body,decorator_list,lineno,name,base等字段type是ClassDef,表明该结构为class,body中则包含着函数的结构体,base则是继承的父类。

    (四)语法树的表示-示例

    接下来我们将以一个if结构片段代码作为示例,来解释Python源码到其语法树的对应关系。片段代码:if type not in ["RSAS", "BVS"]:return HttpResponse("2"),得到的语法树如图2:

    在这个语法树结构中,body里包含着if结构中的语句return HttpResponse("2"),type为Compare表示该结构体为判断语句,left表示左值即源码中的type,test结构体中则是用来进行if判断,test中的ops对应着源码中的not in,表示比较判断,comparators则是被比较的元素。这样源码就和Python语法树一一对应起来,有了这些一一对应的基础,就有了判断Python注入问题的原型。

    0x05 注入判断的实现

    注入判断的核心就在于找到危险函数,并且判断其参数是可控的,找到危险函数这个只需要维护一个危险函数列表即可,当在语法树中发现了函数调用并且其名称在危险列表中就可以标记出该行代码,接下来的难点就在于跟踪该函数的参数,默认认为该危险函数的外层函数的参数是可控的,那就只需要分析这个外层函数参数的传递过程即可。首先分析哪些情况下,从一个参数赋值给另外一个参数其值还是可控的,下面列举了5中基本情况:

    (1)属性取值:对一个变量取属性,比如request的GET,POST,FILES属性,属性的属性还是可控的,但是request的其他字段如META,user,session,url则得排查开外。 (2)字符串拼接:被拼接的字符串中包含可控参数,则认为赋值后的值也是可控的,需要考虑好各种拼接情况,如使用+,%等进行拼接。 (3)分片符取值:一般认为分片后的值也是可控的。 (4)列表解析式,如果列表解析式基于某个可控因子进行迭代,则认为赋值后的列表也是可控的。 (5)简单的函数处理:a,处理函数是字符串操作函数(str,unicode,strip,encode等);b,简单的未过滤函数,也就是说这个函数的返回参数是可控的。

    对外层函数中的所有代码行进行分析,判断是否是赋值类型,如果赋值类型的操作属于以上五种情况中任意一种,则将该赋值后的值放入可变参数列表中,具体的流程如图3:

    另外在分析的过程中还得排除下列情况,提前结束分析。第一种情况是 if语句中有os.path.exitst,isdigit带可控参数并且含有return语句,如(if not os.path.isdir(parentPath):return None);第二种情况是将可控参数锁定在某个定值范围并直接返回的,如(if type not in ["R", "B"]:return HttpResponse("2"))。

    0x06 结束语

    对Python源码实现注入问题的自动审查,大大降低了人为的不可控性,使代码暴露出来的漏洞更少。当然目前来说这个模块还是有一定局限性,对类的处理不够充分,没有分析导入的函数对属性的取值也不够细分等问题。

    展开全文
  • 自动化代码审计工具

    千次阅读 2017-07-14 11:24:00
    三款自动化代码审计工具 0×01 简介 工欲善其事,必先利其器。 在源代码的静态安全审计中,使用自动化工具代替人工漏洞挖掘,可以显著提高审计工作的效率。学会利用自动化代码审计工具,是每一个代码审计...

    三款自动化代码审计工具

     

    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时代兴起的业务逻辑漏洞挖掘可以说是束手无力。所以,对于有经验的代码审计人员来说,审计工具起到的仅仅是辅助作用,他们会在利用工具的基础上结合自己经验挖掘出更深层次的漏洞。

    来自FreeBuf

    转载于:https://www.cnblogs.com/staffyoung/p/7169165.html

    展开全文
  • 自动化代码审计系统

    2019-10-01 01:01:22
    代码审计系统 ... 该系统是使用python3的django去开发,队列使用celery+redis,最后调用代码审计工具fortify进行...[甲方安全建设之路]自动化代码审计系统 https://www.cnblogs.com/sevck/p/10432981.html 第三...
  • 从python常规漏洞来看都有一个共同点,那就是危险函数中使用了可控参数,如system函数中使用到的(‘mv%s’%filename),如execute函数中使用到的username参数,如HttpResponse中使用到的nickname参数,这些参数直接从...
  • 在源代码的静态安全审计中,使用自动化工具代替人工漏洞挖掘,可以显著提高审计工作的效率。学会利用自动化代码审计工具,是每一个代码审计人员必备的能力。在学习PHP源代码审计的过程中,本人搜集使用了多款自动化...
  • python自动化审计及实现

    千次阅读 2018-03-08 10:58:45
    对Python源码实现注入问题的自动审查,大大降低了人为的不可控性,使代码暴露出来的漏洞更少。当然目前来说这个模块还是有一定局限性,对类的处理不够充分,没有分析导入的函数对属性的取值也不够细分等问题。 参考...
  • 本文将成都链安科技有限公司开发的VaaS-ETH自动智能合约形式验证平台精简版与国际知名的类似产品,如SmartDec、Securify、QSP进行了横向对比测试。测试结果表明,VaaS-ETH在安全检测精确度、检测能力、结果分析、...
  • 浅谈PHP自动化代码审计技术

    千次阅读 2015-04-10 17:15:40
    目前市面上有不少PHP的自动化审计工具,开源的有RIPS、Pixy,商业版本的有Fortify。RIPS现在只有第一版,由于不支持PHP面向对象分析,所以现在来看效果不是太理想。Pixy是基于数据流分析的工具,但是只支持PHP4。而...
  • 主要围绕静态审计的定位,介绍静态...针对如何进行自动化分析、如何分析变量函数之间的关联、如何提高静态分析的准确度等问题提出一些解决措施。从而引出对静态审计的局限与发展的思考 目标定位 思路|关联 局限|展望
  • 基于审计管理系统下的审计自动化管理创新.pdf
  • PHP自动化代码审计工具

    千次阅读 2021-07-28 11:39:17
    软件功能强大,提供了一键自动审计,函数查询,代码高亮编辑器,自定义审计规则,代码调试等强大功能 下载地址:链接:https://pan.baidu.com/s/1x_JIm5HYizNXkmc22GBFbg ,提取码:wfr7 使用方法 导入之后,在...
  • docker+gitlab+ jenkins+sonarqube 自动化push审计搭建一、安装sonarqube二、安装jenkins三、安装gitlab四、配置gitlab、jenkins凭据五、创建任务 一、安装sonarqube 1、拉取postgres数据库镜像 docker pull ...
  • 现在云计算和DevOps的发展趋势,我觉得一个成熟的自动化运维平台应该包括以下的特性 现在云计算和DevOps的发展趋势,我觉得一个成熟的自动化运维平台应该包括以下的特性:   一、支持混合...
  • 智能流程自动化(IPA)通过结合机器人流程自动化(RPA)、人工智能(AI)等新兴技术,实现灵活智能的自动化。 本文重点介绍 IPA 对审计行业的效用。 具体而言,本文提供了使用审计工作流概念在审计业务中实施 IPA 的...
  • #资源达人分享计划#
  • 技术进步,尤其是自动化任务和流程的能力,对业务产生了巨大影响。 机器人过程自动化(RPA)或机器人的开发是会计中受到极大关注的一项新兴技术。 审核员通常很难知道要自动化哪些任务以及如何确定机器人开发的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 50,395
精华内容 20,158
关键字:

自动化审计