NAVEX & Web漏洞自动化挖掘介绍 - 嘶吼 RoarTalk – 网络安全行业综合服务平台,4hou.com

NAVEX & Web漏洞自动化挖掘介绍

一叶飘零 漏洞 2020-03-27 10:50:00
1723876
收藏

导语:这次介绍的是一篇发表在安全顶会2018 USENIX Security的paper,文章旨在自动化挖掘web漏洞,同时生成对应的exp,其比同类的工具拥有更高的准确度,由于其动静结合的特性,对代码也有更好的覆盖率。

前言

这次介绍的是一篇发表在安全顶会2018 USENIX Security的paper,文章旨在自动化挖掘web漏洞,同时生成对应的exp,其比同类的工具拥有更高的准确度,由于其动静结合的特性,对代码也有更好的覆盖率。

背景介绍

首先我们从如下这样一个例子切入,来简单介绍一下web漏洞自动挖掘和通常一些静态分析的工具的做法。

例如如下3个代码片段:

selectBooks.php用于选择你想要借的书,代码如下:

2020-03-22-17-48-21.png

hold.php用于额外的check输入,并引导用户到下一步操作,代码如下:

2020-03-22-17-48-59.png

checkout.php用于结算,代码如下:

2020-03-22-17-49-23.png

我们可以看到,在这样一个简单的功能实现上,其实出现了不少潜在的漏洞函数,例如selectBooks.php中的mysql_query可能会导致sql注入,又如checkout.php中的echo可能会导致XSS漏洞。

那么对于一些常规的静态分析漏洞挖掘工具,他们会怎么做呢?一般情况下,其会首先全局定位到漏洞函数的位置,例如selectBooks.php的第17行,checkout.php的第15行,然后对其参数利用PDG(数据依赖)的关系进行backward反向回溯。

例如selectBooks.php的第17行,我们使用PDG关系回溯,可以发现其影响的关键参数有3个,分别是$book_name,$edition,$publisher。他们又分别来自第5行,第9行和第13行。此时我们又会继续对第5行,第9行和第13行继续进行PDG回溯,而后发现他们都会经过过滤函数,那么此时回溯结束,静态分析工具粗略的判断其为安全的flow,因为其参数都会经过过滤。

我们再看checkout.php的第15行,利用PDG进行回溯,我们可以关注到2个变量,分别是$name和$msg,而后找到第 9行和第10行,此时我们发现第10行是攻击者可控的$_GET变量,那么此时该flow会被输出,并交由运行者进行check,判断其是否为误报。而对于对9行,我们却不太那么容易找到其真实的数据依赖,因为$result实际上来自于数据库内的数据,而非直接显示在代码中。

那么此时一般的静态分析工具的缺点便暴露无遗,其会受到数据库查询的约束而不能准确进行分析,且由于其依赖于PDG的后向回溯,很难去发现逻辑上的漏洞。

同时还有一个关键的问题,仅从代码上来看,似乎$msg我们可以找到一条攻击路线,但实际上,这是需要前期铺垫的,我们必须拥有session才能到达这一步,这为人工check也增加了不少不便捷性。

因此,本篇paper就是旨在解决这些问题,而提出了动静结合的web漏洞挖掘工具:NAVEX。

工具设计

那么我们来简单看一下,NAVEX是如何设计,用于解决上述问题的。

首先作者定义了一个字典:

2020-03-25-17-55-55.png

其中记录一些关键的函数名,例如XSS,对应echo和print等,依次类推,作者一共记录了如下几类攻击的潜在漏洞函数:sql注入、XSS、文件包含、命令注入、代码注入和逻辑漏洞。

然后NAVEX一样会像平常的静态分析工具一样,对漏洞进行检测,其也会通过全局定位敏感函数,然后用上述思想,对关键变量进行PDG后向回溯,其伪代码如下:

2020-03-25-09-37-30.png

运行结束后,程序会返回路径集,即从攻击者可控变量source($_GET、$_POST等)到潜在漏洞函数调用之间的变量传递。

值得一提的是,作者这里不仅仅使用了PDG的后向分析,同时其为了发掘逻辑上的漏洞,也会进行正向寻找。

然后作者会将提取出的约束放入Z3求解器进行约束求解。以备后续生成exp使用。

待上述操作结束后,程序进入动态分析,或者称为前端约束生成阶段。在这一步中,作者使用爬虫,爬取html页面中的信息和属性名,例如提取form表单或者js的相关约束:

2020-03-25-10-00-34.png

然后同样会使用约束器求解,得到满足的input,并进行输入,但由于可能input也会受到后端的约束,因此为了防止爬虫由于未能正确input,不能到达下一步,作者对后端进行了监控,以探测在input后,后端是否会发生变化,例如进行数据库查询,或者改变了当前状态,例如全局变量的赋值(session,cookie等),或者新产生了变量等。以此断定爬虫的前段约束后得到的input是否生效,如果未生效,其会同时考虑后端约束,并再次求解,而后继续监控往复,直到成功input。

如我们最开始的例子中,此时会考虑到后端的约束,即$publisher的长度问题:

2020-03-25-10-08-45.png

同时作者也考虑过了角色问题,在web网站中,通常会分为管理员和普通用户,那么为了最大的代码覆盖率,作者会存储管理员用户的登录凭证,以方便探测到管理员用户可能存在的潜在漏洞。

为了存储这些关系,作者定义了Navigation Graph,其为有向图:G = (N , E ),它的边代表了下一步跳转的意义,例如下图:

2020-03-25-18-15-32.png

在我们第一步达到selectBooks.php后,在html模拟用户input,会来到下一个url操作:selectBooks.php?action=borrow,而这2个node之间则会产生一条edge,又前者指向后者。

同时对于每一个Node,其拥有一些属性,例如id为每一个node的唯一标识符,url为当前node的链接,form_params为表单的input,role存放管理员用户的登录凭证。

如此一来,在找到漏洞点后,作者即可找到一条可到达,并触发该漏洞函数的链接,如下:

1. http://localhost/App/index.php
2. http://localhost/App/selectBooks.php with POST params:[book name=intro to CS by author1, edition=2,publisher=aaaaaaa]
3. http://localhost/App/selectBooks.php?action =borrow
4. http://localhost/App/hold.php
5. http://localhost/App/hold.php?step=checkout
6. http://localhost/App/hold.php?step=checkout &msg=

最终成功将exp带入到6条语句,成功进行xss攻击。

实验测试

作者对26个php cms进行了测试,php文件数量超过22.7k,列表如下:

2020-03-25-18-21-01.png

对于sql注入,作者只关心了如下4种潜在的漏洞函数:mssql query, mysql query, mysqli query和sqlite query,并通过实验测试发现,在不到1小时的时间内,工具生成了105个sql注入exp:

2020-03-25-18-24-27.png

可以看到在获得的结果里,均为true positives,以此显现了 NAVEX的高精度和高效率。

同样的,对于XSS和逻辑漏洞,在较短的时间内,都有不错的表现:

2020-03-25-18-25-24.png

2020-03-25-18-25-38.png

后记

本篇文章的思路较为新颖,由于其动静态结合的方式,不仅可以一定程度上增加效率,并且能够有效的探测到一些普通静态分析工具不能检测出的漏洞。其贡献不仅在于学术上的创新,对我们cms审计也提供了不少的便利。

本文为 一叶飘零 原创稿件,授权嘶吼独家发布,如若转载,请注明原文地址
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论

 
本站4hou.com,所使用的字体和图片文字等素材部分来源于原作者或互联网共享平台。如使用任何字体和图片文字有侵犯其版权所有方的,嘶吼将配合联系原作者核实,并做出删除处理。
©2022 北京嘶吼文化传媒有限公司 京ICP备16063439号-1 本站由 提供云计算服务