记一次 DNS 劫持攻击

一直在使用某娱乐软件,但是这个软件的会员费贵的离谱,实在是买不起。所以就想着怎么搞一下,绕过会员检测机制。其实就是针对这款软件做一个注册机

前期准备

根据抓包还有查看源码,初步确定了软件的鉴权机制,详细过程不谈,只说结论:鉴权部分由单独的服务器负责,通过 HTTPS 进行设备注册密钥鉴权等操作。

通过代码逆向已经确认鉴权的具体协议

制定方案

了解软件的鉴权机制后,就可以制定方案了。两个方案:

  1. 中间人攻击,建立中间人服务器,篡改鉴权会话
  2. DNS 劫持,伪造鉴权网站,无脑返回鉴权成功。

由于该软件的鉴权部分为单独服务器,所以采用方案二会简单很多。

开始实施

伪造服务

随便写一个 Web 服务,实现所有的鉴权接口,并无脑返回成功。

然后在该机器上运行 nginx,配置监听鉴权服务器域名并转发给冒牌 Web 服务。

劫持 DNS

直接在路由器上使用 DNS 工具修改,或者直接更改 hosts 文件,将鉴权服务器域名指向冒牌服务的 ip。

伪造域名证书

事情到这里仅仅走过一半,剩下的才是重要的部分。

虽然我们已经拥有了冒牌鉴权服务,也可以将请求劫持到冒牌服务上,但是因为我们没有证书,不知道交接的暗号是什么,所以交易还是无法达成。而通过正常途径我们是没有可能弄到别人域名的 HTTPS 证书的。所以我们需要懂点歪脑筋

首先我们生成自己的根证书,然后用该根证书签发需要伪造的域名证书。将我们的根证书安装信任到需要破解的设备上,再将伪造的域名证书配置到服务器上,这样一整个认证体系都是由我们发起的,自然可以通行无阻。

这样,整个劫持计划就大功告成了。

反思

这么轻松就绕过了鉴权机制,说实话还是有点后背发凉。

虽然目前 Web 越来越安全,鉴权越来越复杂,但是只要稍微不注意,还是会落入陷阱。再加上一些开发者的不负责任,导致互联网更加危险。

关于开发者

首先开发者应该重视证书。以这款软件为例,我尝试了下配置错误的证书,软件界面也只是提示了下证书错误,用户确认后就会忽视证书,直接被劫持,HTTPS 就是个摆设。

更有甚者,有的 App 直接忽略了证书错误,压根就不提示。这不论是对用户还是对自己都是不负责任的。

在网上看到说,以安全著称的 360 安全浏览器,作为一款浏览器都忽视了 HTTPS 证书错误,实在是不知道脑子怎么长的。

图源自网络

关于用户

作为用户,为了在信息时代保护自己,应该注意以下几点:

  1. 不连接不清楚底细的网络
  2. Wi-Fi 要设置密码
  3. 不要安装不清楚的证书
  4. 不要使用不在意安全的应用
  5. 不要随便给应用管理员权限