记一次 DNS 劫持攻击
记一次 DNS 劫持攻击
Anatta一直在使用某娱乐软件,但是这个软件的会员费贵的离谱,实在是买不起。所以就想着怎么搞一下,绕过会员检测机制。其实就是针对这款软件做一个注册机。
前期准备
根据抓包还有查看源码,初步确定了软件的鉴权机制,详细过程不谈,只说结论:鉴权部分由单独的服务器负责,通过 HTTPS 进行设备注册,密钥鉴权等操作。
通过代码逆向已经确认鉴权的具体协议。
制定方案
了解软件的鉴权机制后,就可以制定方案了。两个方案:
- 中间人攻击,建立中间人服务器,篡改鉴权会话
- DNS 劫持,伪造鉴权网站,无脑返回鉴权成功。
由于该软件的鉴权部分为单独服务器,所以采用方案二会简单很多。
开始实施
伪造服务
随便写一个 Web 服务,实现所有的鉴权接口,并无脑返回成功。
然后在该机器上运行 nginx,配置监听鉴权服务器域名并转发给冒牌 Web 服务。
劫持 DNS
直接在路由器上使用 DNS 工具修改,或者直接更改 hosts 文件,将鉴权服务器域名指向冒牌服务的 ip。
伪造域名证书
事情到这里仅仅走过一半,剩下的才是重要的部分。
虽然我们已经拥有了冒牌鉴权服务,也可以将请求劫持到冒牌服务上,但是因为我们没有证书,不知道交接的暗号是什么,所以交易还是无法达成。而通过正常途径我们是没有可能弄到别人域名的 HTTPS 证书的。所以我们需要懂点歪脑筋。
首先我们生成自己的根证书,然后用该根证书签发需要伪造的域名证书。将我们的根证书安装信任到需要破解的设备上,再将伪造的域名证书配置到服务器上,这样一整个认证体系都是由我们发起的,自然可以通行无阻。
这样,整个劫持计划就大功告成了。
反思
这么轻松就绕过了鉴权机制,说实话还是有点后背发凉。
虽然目前 Web 越来越安全,鉴权越来越复杂,但是只要稍微不注意,还是会落入陷阱。再加上一些开发者的不负责任,导致互联网更加危险。
关于开发者
首先开发者应该重视证书。以这款软件为例,我尝试了下配置错误的证书,软件界面也只是提示了下证书错误,用户确认后就会忽视证书,直接被劫持,HTTPS 就是个摆设。
更有甚者,有的 App 直接忽略了证书错误,压根就不提示。这不论是对用户还是对自己都是不负责任的。
在网上看到说,以安全著称的 360 安全浏览器,作为一款浏览器都忽视了 HTTPS 证书错误,实在是不知道脑子怎么长的。
关于用户
作为用户,为了在信息时代保护自己,应该注意以下几点:
- 不连接不清楚底细的网络
- Wi-Fi 要设置密码
- 不要安装不清楚的证书
- 不要使用不在意安全的应用
- 不要随便给应用管理员权限