基于镜像流量的漏洞挖掘思路

背景

通过Cobra扫描内部SSRF的时候,发现还是存在漏报的情况。

漏报的主要问题是Cobra扫到的某个漏洞(V),而这个漏洞会有多处(N)调用,所以只要这个漏洞(V)不修复,它的影响就会是V*N

举个例子,Cobra对于SSRF在PHP语言下的漏洞发现检测是通过匹配可能出现问题的两个函数。

file_get_contetns()  
curl_init()  

这两个函数的入参都是一个URL类型,Cobra接着反查这个URL是否可控,如果发现这个URL是触发点所在的函数(F)入参传进来的话,就认为是风险。

问题就出在这个函数(F)会出现多次被调用情况。

如何进一步提高类似漏洞的发现思路?

既然SSRF漏洞的前提条件必须是外部URL可控,那么如果能找到我们应用服务器上所有的请求报文记录,匹配出其中GET参数或POST的报文中存在URL的,再验证下,那就能确定所有的SSRF漏洞和任意链接跳转。

如何拿到服务器所有的请求记录呢?

第一想到的肯定是通过服务器截包,但是截包会导致网络、内存、CPU、IO都会受到很大影响。 虽然有消除海量中断、旁路内核协议栈、减少内存拷贝、CPU多核任务分担等技术方案来优化,但这样实现的成本太高。

发现公司在使用的DPDK,可以实现高性能的报文转发。

简单点的实现就是在入口交换机接出一条线给一台存储服务器,那么存储服务器可以通过DPDK收集所有经过该交换机的全部报文。就相当于给该交换机做了一个镜像流量。

镜像流量就可以定时采集储存并推送给Cobra服务器,Cobra增加规则去分析镜像内所有Request报文中是否存在URL参数的请求,再通过SSRF EXP判断是否存在SSRF漏洞以及任意链接跳转。

还能干吗?

除了弥补Cobra白盒审计的误报外,另外一个最大的意义是将这些镜像流量给黑盒。

黑盒最大的问题是无法全面的爬取所有的请求,导致覆盖面有问题,遗漏一些隐患点。 这些镜像流量就刚好填补了黑盒的缺陷,让黑盒可以去更加真实、全面的探测所有请求。

通过这个方法,除了挖掘公司内部漏洞,还连带的着发现了一些外部站点的漏洞。 比如微博大量服务器任意文件读取、写入(可GET SHELL)- 还未修复,待公布!

引用参考