从DNS重绑定到VilNE项目:浏览器如何成为内网渗透的跳板

本文详细介绍了VilNE项目的诞生过程,探讨了如何利用DNS重绑定和CORS限制绕过技术,通过受害者浏览器实现对内部网络的端口扫描和攻击,揭示了企业内部网络存在的安全盲点及防御建议。

The VilNE项目

注意:本文最初发表于2022年1月18日的infosecamateur.com网站

去年年中,我沿着一个思路深入探索了一个有趣但可能尚未被充分认识的领域——尽管Log4Shell事件后来让更多人意识到了相关问题。这就是后来发展成为VilNE(受害者发起的本地网络利用)项目的由来。我决定将我的发现、学习心得以及行业现状整理成文。

背景

去年年中,我读到一篇关于DNS重绑定的有趣博客文章(https://medium.com/@brannondorsey/attacking-private-networks-from-the-internet-with-dns-rebinding-ea7098a2d325),该技术可用于诱骗浏览器绕过跨域请求限制并攻击内部资源。

出于对CORS机制的进一步理解兴趣,我开始尝试用浏览器进行实验。虽然我的脚本编写能力和JavaScript水平都比较基础,但我还是成功构建了一个XMLHTTP请求工具,用于尝试访问内部资源。

正如预期的那样,CORS阻止了这些请求,但我发现了一个有趣的现象:如果目标IP本身处于离线状态,请求失败的时间会显著缩短。这意味着通过扫描子网,攻击者可以确定IP/端口是否在线,从而通过诱骗受害者访问特定页面来实现对其网络的端口扫描。

我开始深入思考:虽然CORS阻止浏览器读取响应,但这并不意味着请求无法发送。通过长期观察各种僵尸网络攻击边界设备的经验,我知道存在大量仅需简单GET或POST请求的攻击方式。我敢打赌,内部网络很可能是一个巨大的安全盲点,或者至少没有获得与边界设备同等的补丁优先级。

我还清楚地记得Neutrino和Angler等漏洞利用工具包的影响和攻击难度。如果被入侵的网站不是攻击用户机器,而是转而攻击本地网络会怎样?

VilNE的诞生

最初几个版本的VilNE确实奏效了。我成功构建了一个基本的端口扫描器,它还能够发送任意的GET或POST请求。但正如前面提到的,和许多脚本语言一样,我虽然能实现功能,但方法可能不够优雅。幸运的是,我有一位朋友(向Steve Stone致敬)在这方面比我懂得多得多。他在重写这个工具时可能对我的尝试感到好笑,最终使用Vue-JS和Axios作为HTTP请求组件重新开发。

在这个阶段,工具(http://vilne.infosecamateur.com/ — 仅HTTP)诞生了。然而,在进行初步测试时,我们发现无法使用HTTPS托管这个工具。这是由于另一个较新的浏览器限制:不允许下载"混合内容"——即HTTPS页面不能请求HTTP内容,因为这会给中间人攻击提供在安全通道中注入恶意内容的机会。不过,反过来是可行的:HTTP可以请求HTTPS内容。

后续发展

我在Twitter上的关注者不多,但我认为这个发现值得展示给大家。最终,我觉得这可能是安全思维中的一个巨大盲点,需要人们认识到的,而且我找不到太多相关文献。希望通过获得更广泛的关注,有人能为我指明更多信息方向(这最终确实发生了)。

虽然获得关注很困难,但当我制作了一个演示GIF,展示使用VilNE在稍作修改的DVWA(Damn Vulnerable Web App)中获取shell时,它终于开始引起注意。

接下来的几天非常令人兴奋——获得了大量的关注(截至撰写时达到55,000次展示)以及许多反馈和想法。正如预期的那样,我某种程度上重新发明了轮子,例如内部网络扫描并不是什么新概念。最终,Chrome发布了一个补丁,对CORS施加了额外限制,要求GET/POST请求必须在"预检"检查(检查跨源策略)之后才能发送——尽管如此,我相信仍有绕过方法(例如使用图像触发GET请求)以及在本地托管页面。

未来展望

自从最近的Chromium更新后,通过POST请求进行这种攻击已经不再有效,除非页面是从本地机器下载和运行的。我确信可能有绕过方法,但表面上来看,来自受感染或水坑网站的风险已经降低。然而,阻止GET请求会更加困难,我唯一的想法是对从非RFC1918地址托管的页面向RFC1918地址发出的任何类型的内容请求实施全面限制,但可能有一些明显的破坏性因素我没有看到。

Log4Shell在2021年底占据了主导地位,我认为它展示了漏洞利用可以有多么容易。最终,解决这个问题再次归结为深度防御和"基础"措施。最小权限、网络分段、补丁管理和监控,就像对待边界安全一样,不仅有助于预防这些攻击,还能在攻击过程中及时阻止。

最后思考

这是我第一个真正的网络安全项目,帮助我在这个行业中少了一些冒名顶替的感觉。它给了我额外的信心,让我敢于探索那些看起来有趣、具有挑战性的领域,并深入挖掘假设的价值。我期待继续尝试各种想法,尽管我需要更有效地发现其他人已经完成的类似工作。

或许有些争议,但我认为攻击系统通常比防御系统更容易。这并不是要贬低漏洞开发等领域的出色工作(尽管我还不完全理解其意义!),但组织需要进行的根本性但巨大的思维转变来缓解和防御新出现的威胁,这使得防御特别具有挑战性。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计