0x01 背景
为什么是以进入内网作为一个目标来讨论,因为我认为站在攻击者的角度来说攻击的核心目标是获取数据。而相对来说几乎攻击者想要的所有数据都在内网,而相对来说本身内网的安全防御能力就几乎为0。所以从外部寻找一个突破口进入内网是整个获得数据的过程中最关键的一个环节。
那么基于这样一个话题本来我想去讲的是到底有哪些从外围进入内网的手段,我初步的梳理了一下,我把它们分为两大类:合法入口和非法入口。而合法入口其实就是本身企业在给员工开放的一个从外部到企业内部的通道,这里面主要包括vpn、mail、wifi;在vpn和mail这两个入口来看我们看到的大部分攻击方法主要是利用用户名( http://zone.wooyun.org/content/18372) 及密码的大数据来进行攻击的。而wifi这一块,我想想wifi万能钥匙这个就是个典型入口了( WooYun: 看我如何用wifi万能钥匙物理撸穿京东漫游内网 ); 而非法入口其实利用一些部署在边界上的应用或者主机及服务相关的漏洞;这里面就包含着各种常见的漏洞了,我就先不在这里细说。
而我这篇文章里也不太想把上面所描述的所有的内容全部来细说一遍,篇幅有限不可能每个点都讲的特别相信,而且很多东西我相信之前很多人都讲了很多,可能我也不能讲的比他们更好,于是我更想讲一些大家可能没有讲或者讲的比较少的东西。那么回到主题是针对大型互联网公司来说,那么我认为与这样的高手过招重要的在取其命门。所以终极问题来了,大公司的命门在哪?带着这个终极问题我们来往下分析。
0x02 成也边界,败也边界
而大公司这个命门在哪?我们知道既然要从外围进入内网,那么必然要做的一件事情就是跨越边界,所有这个命门我们也就自然应该在企业的内外网边界上来寻找。
那为什么企业需要在内外网之间部署这样一个边界呢?我们只要作为一个大企业来说他会有上百甚至上千个业务线,而安全团队或许只有几十人,那这几十人要保证这上千个业务线的安全,显然如果用布点的方式肯定无法完成覆盖的,所以企业在思考如何进行防御的时候会选择区域性防守。
所谓区域性防守就是把重点需要保护的业务&数据放到一个指定的区域,,让后对这个区域进行隔离,并指定好进入这个区域的防火墙策略。然后定期对这个区域进行安全检查。
如果这样实施的很好,看起来一切都很完美。但是事实上并不尽人意,事实是这样的,在企业内部通常业务部门是会比安全部门强势的,这一点我相信大家都知道,那么就会导致一个问题,安全部门总想着把业务圈起来,各种严格的策略和规范实施上去,而业务部门在业务快速迭代的背景下就会很难去严格执行你的策略。他们会要求你针对他特殊的业务场景来制定专门的策略,甚至部署到飞隔离区域,而且这样的情况不在少数。如此一来安全部门需要维护的策略和规范就会越来越多。而这将直接导致策略及规范的执行越来越差。既然如此,我们都了解了企业防守上存在的一些问题,那么如何去实施攻击测试呢?
上面我们说到两个很重要的环节,一个是制定规范并执行,一个是对规范的执行结果进行合规性检查(安全检测)。那么这两个环节可能会出现什么样的问题呢?一个是内网业务对外,直接脱离边界控制;一个是合规性检测的盲区,弱点扫描。
0x03 攻击思路之内网业务直接对外
我们先来看一张图:
从图中我们可以看到当我对一个公网ip的80端口发起http请求时,他会返回一段js代码,这段js执行以后会直接跳转到http://passport.oa.com/passport/… 这样一个地址,但是我却发现passport.oa.com这样一个地址实际上是无法访问的,因为他指向了一个内网IP。那这样看起来就是一个很奇怪的问题了。为什么访问一个公网IP却要跳转到一个内网的地址,我们在仔细看这个域名的是passport.oa.com;从命名来看似乎是说oa(办公网)的统一登陆认证地址?这意味着什么呢?我们大胆的猜想一下,是不是因为这个公网ip对应的服务器实际上是部署着一个内部的业务,这样解释起来貌似比较靠谱啊?为了验证我的想法,我对该公司的所有C段开放http服务的IP进行了批量的探测,发现了一些同样有意思的东西:
这个返回同样是一段js判断,很直接的逻辑,如果你访问的host是指向内网(.oa.com)那么他会跳转到一个内部的服务地址,如果你访问的host的是指向外网(.qq.com);那么他会跳转到一个外部的服务地址。那么我接下来很简单,只需要对这个ip进行绑定host来测试即可:
从返回内容来看确实是一个内网业务。
我们再来深入的分析一下为什么会出现这样一些问题,我认为大概是有如下几种原因:
- 上线流程的问题,就是这些本来应该部署在内网的应用是如何部署到一个具有外网访问权限的机器上的,这在上线前的安全检查是有问题的。
- 机器网络权限的管理的问题,也许这个机器申请了一个短期的外网权限,但是到期了并未下线,导致其他人在使用这个服务器的时候都也许不知道这个机器具备外网权限。
0x04 内网业务对外的漏洞挖掘
首先需要获取攻击目标企业的资产信息,即Ip及域名信息;然后通过获取到的外网域名及IP信息获取banner信息。然后通过判断返回banner信息的特征来判断该IP/域名是否存在内网业务对外的问题,具体的一些特征信息主要有如下几点:
-
返回的headers里面的特征,比如Location字段内容直接跳转到内网ip及域名。
-
返回的body里面的特征:body里面包含内网ip或者域名;或者一些关键字,比如title里带内部xxx系统等等
除此之外甚至可以考虑对一些内部的常用域名强行绑定公网ip进行枚举。然后还是通过回去回包的特征来判断。
相关案例:
WooYun: 腾讯某内部业务对外存在多个sql注入(少量qq账号密码泄露base64的)
WooYun: 从一个phpinfo到一次半途而废的腾讯内网漫游之旅
0x05 攻击思路之弱点扫描
弱点扫描是一个典型的企业合规性检测的盲区,即备份文件、测试代码文件的检测。这个完全依赖于字典的暴力枚举来进行检测。通常一些开发的测试文件,运维的备份文件spider是无法抓取到的,只能靠字典来暴力枚举,那么在进行黑盒的安全检测的时候就会出现两个问题:
- 暴力枚举的字典有限,倒不是说企业写不出很长的字典,而是说企业在进行扫描的时候需要周期性的扫描几千上万个域名、ip;那么如果字典文件太大的话必然导致扫描周期很长,占用过多资源。
- 一些测试文件没有明显的漏洞特征,需要辅助人工判断,大企业目标太多不可能过多的人工参与,从而导致漏报。
那么基于以上两个硬伤,攻击者可以先对目标企业的域名及ip进行一轮字典的枚举,字典可以尽量大,因为攻击者其实不需要太多的考虑扫描时间,可以慢慢跑,然后对扫描结果的判断时可以写一些宽松的策略,比如只要判断某个文件是否存在,且返回内容就几个字节,或者存在一些敏感的关键字,比如内部系统、测试的数组结构等等就先记下来,然后辅助一些人工的判断。当然在人工判断的时候也是有技巧的,比如你可以一次在一个页面iframe 50个潜在目标来进行肉眼+经验的识别。
下面给一些案例,就是通过这种方式发现的:
http://wooyun.org/bugs/wooyun-2015-092833
http://wooyun.org/bugs/wooyun-2015-0122949
0x06 写在最后
对于一个大型互联网公司来说,其实并不是因为他们安全做的不够好,而是守需要考虑的是一个面,而攻只需要一个点,对一个点进行深入的挖掘,一定可以找到突破口,而本身企业的安全建设其实也是一直在提高攻击门槛,并不是无懈可击。
而不管是对于攻击者还是防守者来说,本身对于安全问题的发现能力是决定着这场持久的攻防战中最核心的决定因素,正是如此,大家可以对tangscan有一些期待,希望联合所有白帽子的力量,tangscan能够拥有最强的安全问题的发现能力。