现代社会,攻击者通过受害者访问网页的行为反复劫持银行账户是可行的。用不着浏览器漏洞利用,也看不到任何警告。对网络罪犯而言,这些攻击又廉价,成功率又高。
对头,这里所说的攻击就是DNS劫持。DNS劫持是受害者DNS请求被拦截并返回虚假响应的一种攻击类型。这种攻击能在保持URL栏不变的情况下,重定向用户到另一个网站。
举个例子,如果受害者访问 wf.com (美国富国银行集团),DNS请求可能会被发送到攻击者的DNS服务器,然后返回攻击者用以记录登录数据的Web服务器地址。
2010年以来,通过DNS劫持进行的中间人攻击(MITM)数量有所上升。这改变了MITM攻击的威胁模型。因为在这之前,大规模MITM攻击基本上是闻所未闻的。
究其原因,一般,攻击者想MITM某人流量时,他们需要处理全部的流量,比如说,通过一个代理。这样一来,每个受害者都会耗用可观的带宽,意味着攻击者需要构建相当的基础设施。这种事,很可能造成成本比利润还高,太不划算了。
不过,对攻击者而言幸运的是,客户端用作DNS解析的服务器,基本上属于不用修改其他网络设置就能改变的东西。因此,DNS成为了小巧简单的拦截对象,造成了DNS劫持恶意软件的上升。
2010年,我们见识到了DNSCHANGER——一款运行于受害者主机上,并通过 Windows API 修改DNS服务器的恶意软件。2014年,我们通过SOHO恶意软件见证了该攻击原理的进化升级。SOHO程序通过CSRF(跨站请求伪)传播,基本上,它发送很多请求,在192.168.0.0、192.168.1.1、10.0.0.1等界面尝试大量品牌路由器的默认口令,试图找出并修改受害者路由器的DNS服务器。
由于路由器通过DHCP设置绝大多数其客户端的DNS服务器,该DNS服务器便会被网络中的成员主机使用。(基本上,大多数客户端从DHCP服务器接收DNS服务器设置,该DHCP服务器很多时候就是其路由器充任。)然后,攻击者可以拦截包含有到TLS站点(https)的重定向或超链接的HTTP请求,将这些请求修改成普通的HTTP。该操作与TLSSTRIP类似。
BSidesSF上放出一款此类工具,名为“DNTLSSTRIP”。它能帮助渗透测试员执行DNS劫持,动态拦截并修改HTTP数据。这款工具是模块化的,用户想动态拦截任何协议都可以,只需添加相应模块即可。
随该工具发布的,还有关于DNS劫持正反两面用法的演讲,比如渗透测试员可怎样在公司网络中使用DNS劫持,网络罪犯会怎么使用,你又该怎么防范等等。这会让我们延伸想到:一旦进入某网络,能不能利用专用DNS独霸整个网络呢?对此,BSidesSF上做出了模拟演示。
公司环境比普通个人或家庭环境的风险高很多,正因如此,攻击者特别中意渗透给定网络。(假设攻击者已经通过网络钓鱼之类的常见手段,在网络中建立了小小的桥头堡。)
进入这种网络,攻击者最爱用的方法一般是针对性攻击,比如路由器漏洞利用(RCE)或者默认口令攻击。所以,最好从攻击者对给定网络的路由器使用RCE的角度考量这种攻击。并且以此为基础,攻击者或者渗透测试员可以在网络中铺开,DNS劫持的利用机会也是大把的。
鉴于大量服务通过非加密信道更新,而且不检查下载的安装包是否真实,攻击者利用MITM获得多台计算机控制权的途径也是很多的。
比如CVE-2016-1252,一个APT(高级软件包工具)签名绕过漏洞利用。黑客组织手握大量类似漏洞和匹配的零日漏洞利用丝毫不令人意外。攻击者或许也用不着绕过TLS,因为大部分Linux发行版的默认APT源都不使用TLS。
因此,攻击者只需为关键服务或者自动更新的服务(比如用crontab设置定时进行apt-get升级),推送虚假关键更新就行了。不难想象,这种攻击执行几天之后,攻击者将获得网络中大量主机的访问权。利用DNS,攻击者可以仅用TXT记录就创建隐蔽C&C信道,就跟DNSCAT(一款利用DNS隧道绕过防火墙的工具,堪称隧道通信的瑞士军刀)似的。
那么,防御者该怎样阻止此类攻击呢?
上述所有攻击方法都依赖于让出站DNS请求发送到任意服务器。所以,将出站DNS请求引至防火墙层级未知服务器,或“离线”公司资源的终端/AV客户端,即可解决问题。
这将完全清除上述场景中使用的主要攻击方法,让我们得以封锁流向外部DNS服务器的所有请求,也就挡住了攻击者利用DNS作为C&C信道的通路。不过,利用自动更新软件的攻击方法还是挡不住。所以,在可能的情况下尝试使用端到端加密还是很重要的。
最后,说个实用性问题:在IDS/IPS层解决通往未知DNS服务器的黑洞请求是最有效的,就像tripwire所做的那样。
作者:佚名
来源:51CTO