Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

关于 DNS 劫持

  据说最近还流行 DNS 劫持?虽然 DNS 劫持一直都存在着,但危害主要来自一些个人自己搭 WIFI,搭 DNS 服务器来钓鱼。至少目前我还没见过来自运营商针对某个站点的 DNS 劫持。不过对那些无法解析的域名定向到一个带广告的页面上这种程度的劫持还是普遍存在的。
  比起链路劫持,DNS 劫持是一种更没节操,更没技术含量的东西。链路劫持好歹还需要 HTTP 抓包,修改响应之类的黑科技。而 DNS 劫持没有任何黑科技,搭一个 WIFI,搭一个 DNS 服务器,搭一个钓鱼站点,这是一个正常的网络环境部署流程。错就错在用户没有安全意识,随随便便就连了陌生的 WIFI。
  这个问题有解么?
  之前听到过使用 HTTPDNS 来解决 DNS 劫持的方案。仔细想想好像并不靠谱,至少在 Web 上是这样。Web 程序的运行依赖于从服务器端加载到的代码,也就是说至少要能正常访问到服务器才能开始解决问题。但是 DNS 劫持这种级别可以直接让一个域名访问到一个钓鱼网站上,可以让用户完全访问不到真正的服务器。甚至可以在完全没有 Internet 连接的情况下进行(将域名解析到一个局域网钓鱼站点上)。
  似乎 https 也没办法解决。如果域名被重定向到钓鱼服务器上,由于证书不对 https 当然无法验证通过。虽然攻击者钓鱼的目的无法得逞,但整个页面就因此挂了。所以即使使用 https,最好的结果也只是两败俱伤而已。而且用户访问一个站点通常不会手动输入 https,浏览器默认以 http 访问,如果没有使用 HSTS 之类的东西依然会被钓。即使设置了 HSTS,用户清了缓存,首次访问某个域名同样存在被钓的问题。
  抛开 Web 这个大框架,在移动端 App 内直接强行使用某个已知的可靠 DNS 服务器的 IP 地址也许是我们能做到的最狠的了吧?但是 DNS 解析协议本身没有加密方案,同样可以被篡改。如果需要更靠谱的解决方案应该是使用基于 SSL/TLS 的 HTTPDNS 来代替传统的 DNS 解析。
  其实以上这些都没有根治问题,还是有更底层的黑魔法可以实现攻击。所以我觉得这个问题在技术层面上目前是无法彻底解决的。基于 SSL/TLS 的 HTTPDNS 只是一个比较强的方案而已,而且它仅限于 App 内。Web 页面由于是浏览器管理的,所以我们无法左右 DNS 解析的服务器,所以这个方案的作用并不大。我们所做的事情仅仅是提高了攻击者的攻击成本而已。如果真被盯上了,采取定制性地攻击,那么以上所有方案都是没卵用的。
网名:
54.226.58.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^